From 4562bc4280e2b9c02a729669c966625b168418f3 Mon Sep 17 00:00:00 2001 From: Frank Voorburg Date: Wed, 3 May 2017 10:57:12 +0000 Subject: [PATCH] Refs #139. Updated Rowley Crossworks projects to version 3.7.6 of the tool. git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@224 5dc33758-31d5-4daf-9ae8-b24bf3d40d73 --- .../bin/openblt_olimex_lpc_l2294_20mhz.elf | Bin 47436 -> 0 bytes .../bin/openblt_olimex_lpc_l2294_20mhz.map | 887 -- .../bin/openblt_olimex_lpc_l2294_20mhz.srec | 492 -- .../Boot/blt_conf.h | 175 - .../Boot/boot.dox | 7 - .../Boot/extflash.c | 653 -- .../Boot/extflash.h | 42 - .../Boot/hooks.c | 296 - .../Boot/ide/lpc2294_crossworks.hzp | 67 - .../Boot/ide/lpc2294_crossworks.hzs | 57 - .../Boot/ide/readme.txt | 4 - .../Boot/lpc2294.h | 404 - .../Boot/main.c | 174 - .../bin/demoprog_olimex_lpc_l2294_20mhz.elf | Bin 63181 -> 0 bytes .../bin/demoprog_olimex_lpc_l2294_20mhz.map | 1487 ---- .../bin/demoprog_olimex_lpc_l2294_20mhz.srec | 661 -- .../Prog/boot.c | 404 - .../Prog/boot.h | 40 - .../Prog/cstart.s | 415 - .../Prog/header.h | 43 - .../Prog/ide/lpc2294_crossworks.hzp | 40 - .../Prog/ide/lpc2294_crossworks.hzs | 60 - .../Prog/ide/readme.txt | 4 - .../Prog/irq.c | 130 - .../Prog/irq.h | 40 - .../Prog/led.c | 94 - .../Prog/led.h | 39 - .../Prog/lpc2294.h | 404 - .../Prog/main.c | 164 - .../Prog/memory.x | 356 - .../Prog/prog.dox | 7 - .../Prog/timer.c | 112 - .../Prog/timer.h | 41 - .../Prog/vectors.c | 57 - .../demo.dox | 8 - .../Boot/bin/openbtl_olimex_efm32g880.elf | Bin 196450 -> 106260 bytes .../Boot/bin/openbtl_olimex_efm32g880.map | 1973 ++--- .../Boot/bin/openbtl_olimex_efm32g880.srec | 835 +- .../Boot/ide/EFM32G880_crossworks.hzs | 28 +- .../Boot/ide/readme.txt | 2 +- .../Prog/bin/demoprog_olimex_efm32g880.elf | Bin 220198 -> 90236 bytes .../Prog/bin/demoprog_olimex_efm32g880.map | 4085 ++++++---- .../Prog/bin/demoprog_olimex_efm32g880.srec | 822 +- .../Prog/ide/EFM32G880_crossworks.hzs | 25 +- .../Prog/ide/readme.txt | 2 +- .../Boot/bin/openblt_olimex_stm32h103.elf | Bin 117342 -> 119012 bytes .../Boot/bin/openblt_olimex_stm32h103.map | 3829 ++++++--- .../Boot/bin/openblt_olimex_stm32h103.srec | 1380 ++-- .../Boot/ide/readme.txt | 2 +- .../Boot/ide/stm32f103_crossworks.hzp | 226 +- .../Boot/ide/stm32f103_crossworks.hzs | 57 +- .../Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c | 784 -- .../Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h | 2408 +++--- .../lib/CMSIS/CM3/CoreSupport}/core_cmFunc.h | 0 .../lib/CMSIS/CM3/CoreSupport}/core_cmInstr.h | 0 .../Boot/lib/CMSIS/CMSIS debug support.htm | 243 - .../Boot/lib/CMSIS/CMSIS_changes.htm | 320 - .../Boot/lib/CMSIS/License.doc | Bin 39936 -> 0 bytes .../Prog/bin/demoprog_olimex_stm32h103.elf | Bin 192190 -> 37608 bytes .../Prog/bin/demoprog_olimex_stm32h103.map | 3895 ++++++--- .../Prog/bin/demoprog_olimex_stm32h103.srec | 268 +- .../Prog/ide/readme.txt | 2 +- .../Prog/ide/stm32f103_crossworks.hzp | 209 +- .../Prog/ide/stm32f103_crossworks.hzs | 25 +- .../CMSIS/CM3/CoreSupport/core_cm3.c | 784 -- .../CMSIS/CM3/CoreSupport/core_cm3.h | 2408 +++--- .../CMSIS/CM3/CoreSupport}/core_cmFunc.h | 0 .../CMSIS/CM3/CoreSupport}/core_cmInstr.h | 0 .../CMSIS/CMSIS debug support.htm | 243 - .../lib/stdperiphlib/CMSIS/CMSIS_changes.htm | 320 - .../Prog/lib/stdperiphlib/CMSIS/License.doc | Bin 39936 -> 0 bytes .../Boot/bin/openblt_olimex_stm32p103.elf | Bin 186375 -> 239216 bytes .../Boot/bin/openblt_olimex_stm32p103.map | 4051 ++++++---- .../Boot/bin/openblt_olimex_stm32p103.srec | 2727 +++---- .../Boot/ide/readme.txt | 2 +- .../Boot/ide/stm32f103_crossworks.hzp | 220 +- .../Boot/ide/stm32f103_crossworks.hzs | 45 +- .../Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c | 784 -- .../Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h | 2408 +++--- .../lib/CMSIS/CM3/CoreSupport/core_cmFunc.h | 616 ++ .../lib/CMSIS/CM3/CoreSupport/core_cmInstr.h | 618 ++ .../Boot/lib/CMSIS/CMSIS debug support.htm | 243 - .../Boot/lib/CMSIS/CMSIS_changes.htm | 320 - .../Boot/lib/CMSIS/License.doc | Bin 39936 -> 0 bytes .../Prog/bin/demoprog_olimex_stm32p103.elf | Bin 205046 -> 68652 bytes .../Prog/bin/demoprog_olimex_stm32p103.map | 3996 ++++++--- .../Prog/bin/demoprog_olimex_stm32p103.srec | 806 +- .../Prog/ide/readme.txt | 2 +- .../Prog/ide/stm32f103_crossworks.hzp | 213 +- .../Prog/ide/stm32f103_crossworks.hzs | 25 +- .../CMSIS/CM3/CoreSupport/core_cm3.c | 784 -- .../CMSIS/CM3/CoreSupport/core_cm3.h | 2408 +++--- .../CMSIS/CM3/CoreSupport/core_cmFunc.h | 616 ++ .../CMSIS/CM3/CoreSupport/core_cmInstr.h | 618 ++ .../CMSIS/CMSIS debug support.htm | 243 - .../lib/stdperiphlib/CMSIS/CMSIS_changes.htm | 320 - .../Prog/lib/stdperiphlib/CMSIS/License.doc | Bin 39936 -> 0 bytes .../Boot/bin/openblt_olimex_stm32e407.elf | Bin 482276 -> 0 bytes .../Boot/bin/openblt_olimex_stm32e407.map | 4823 ----------- .../Boot/bin/openblt_olimex_stm32e407.srec | 2811 ------- .../Boot/blt_conf.h | 307 - .../Boot/boot.dox | 7 - .../Boot/hooks.c | 517 -- .../Boot/ide/readme.txt | 4 - .../Boot/ide/stm32f407_crossworks.hzp | 214 - .../Boot/ide/stm32f407_crossworks.hzs | 79 - .../Boot/lib/ethernetlib/inc/stm32_eth.h | 1610 ---- .../Boot/lib/ethernetlib/src/stm32_eth.c | 3056 ------- .../Boot/lib/fatfs/ffconf.h | 266 - .../Boot/lib/fatfs/mmc.c | 3421 -------- .../CMSIS END USER LICENCE AGREEMENT.pdf | Bin 46999 -> 0 bytes .../Device/ST/STM32F4xx/Include/stm32f4xx.h | 7155 ----------------- .../ST/STM32F4xx/Include/system_stm32f4xx.h | 105 - .../Device/ST/STM32F4xx/Release_Notes.html | 155 - .../ST/STM32F4xx/Source/system_stm32f4xx.c | 561 -- .../lib/stdperiphlib/CMSIS/Include/core_cm4.h | 1757 ---- .../CMSIS/Include/core_cm4_simd.h | 649 -- .../Release_Notes.html | 978 --- .../STM32F4xx_StdPeriph_Driver/inc/misc.h | 178 - .../inc/stm32f4xx_adc.h | 649 -- .../inc/stm32f4xx_can.h | 644 -- .../inc/stm32f4xx_crc.h | 83 - .../inc/stm32f4xx_cryp.h | 384 - .../inc/stm32f4xx_dac.h | 304 - .../inc/stm32f4xx_dbgmcu.h | 109 - .../inc/stm32f4xx_dcmi.h | 312 - .../inc/stm32f4xx_dma.h | 609 -- .../inc/stm32f4xx_exti.h | 183 - .../inc/stm32f4xx_flash.h | 390 - .../inc/stm32f4xx_fsmc.h | 675 -- .../inc/stm32f4xx_gpio.h | 423 - .../inc/stm32f4xx_hash.h | 257 - .../inc/stm32f4xx_i2c.h | 711 -- .../inc/stm32f4xx_iwdg.h | 131 - .../inc/stm32f4xx_pwr.h | 188 - .../inc/stm32f4xx_rcc.h | 545 -- .../inc/stm32f4xx_rng.h | 120 - .../inc/stm32f4xx_rtc.h | 881 -- .../inc/stm32f4xx_sdio.h | 536 -- .../inc/stm32f4xx_spi.h | 549 -- .../inc/stm32f4xx_syscfg.h | 181 - .../inc/stm32f4xx_tim.h | 1150 --- .../inc/stm32f4xx_usart.h | 431 - .../inc/stm32f4xx_wwdg.h | 111 - .../STM32F4xx_StdPeriph_Driver/src/misc.c | 249 - .../src/stm32f4xx_adc.c | 1741 ---- .../src/stm32f4xx_can.c | 1701 ---- .../src/stm32f4xx_crc.c | 133 - .../src/stm32f4xx_cryp.c | 934 --- .../src/stm32f4xx_cryp_aes.c | 1676 ---- .../src/stm32f4xx_cryp_des.c | 308 - .../src/stm32f4xx_cryp_tdes.c | 325 - .../src/stm32f4xx_dac.c | 714 -- .../src/stm32f4xx_dbgmcu.c | 180 - .../src/stm32f4xx_dcmi.c | 538 -- .../src/stm32f4xx_dma.c | 1301 --- .../src/stm32f4xx_exti.c | 313 - .../src/stm32f4xx_flash.c | 1180 --- .../src/stm32f4xx_fsmc.c | 989 --- .../src/stm32f4xx_gpio.c | 584 -- .../src/stm32f4xx_hash.c | 726 -- .../src/stm32f4xx_hash_md5.c | 320 - .../src/stm32f4xx_hash_sha1.c | 323 - .../src/stm32f4xx_i2c.c | 1456 ---- .../src/stm32f4xx_iwdg.c | 266 - .../src/stm32f4xx_pwr.c | 678 -- .../src/stm32f4xx_rcc.c | 1872 ----- .../src/stm32f4xx_rng.c | 397 - .../src/stm32f4xx_rtc.c | 2761 ------- .../src/stm32f4xx_sdio.c | 1011 --- .../src/stm32f4xx_spi.c | 1312 --- .../src/stm32f4xx_syscfg.c | 206 - .../src/stm32f4xx_tim.c | 3365 -------- .../src/stm32f4xx_usart.c | 1486 ---- .../src/stm32f4xx_wwdg.c | 307 - .../Boot/lib/stdperiphlib/stm32f4xx_conf.h | 94 - .../Boot/lib/uip/clock-arch.c | 50 - .../Boot/lib/uip/clock-arch.h | 40 - .../Boot/lib/uip/netdev.c | 451 -- .../Boot/lib/uip/netdev.h | 46 - .../Boot/lib/uip/uip-conf.h | 151 - .../lib/usbdevicelib/Core/inc/usbd_core.h | 120 - .../Boot/lib/usbdevicelib/Core/inc/usbd_def.h | 156 - .../lib/usbdevicelib/Core/inc/usbd_ioreq.h | 121 - .../Boot/lib/usbdevicelib/Core/inc/usbd_req.h | 108 - .../Boot/lib/usbdevicelib/Core/inc/usbd_usr.h | 144 - .../lib/usbdevicelib/Core/src/usbd_core.c | 506 -- .../lib/usbdevicelib/Core/src/usbd_ioreq.c | 244 - .../Boot/lib/usbdevicelib/Core/src/usbd_req.c | 868 -- .../Boot/lib/usbdevicelib/Release_Notes.html | 950 --- .../Boot/lib/usbotgdriver/Release_Notes.html | 950 --- .../Boot/lib/usbotgdriver/inc/usb_bsp.h | 103 - .../Boot/lib/usbotgdriver/inc/usb_core.h | 417 - .../Boot/lib/usbotgdriver/inc/usb_dcd.h | 164 - .../Boot/lib/usbotgdriver/inc/usb_dcd_int.h | 127 - .../Boot/lib/usbotgdriver/inc/usb_defines.h | 249 - .../Boot/lib/usbotgdriver/inc/usb_regs.h | 1188 --- .../Boot/lib/usbotgdriver/src/usb_core.c | 2162 ----- .../Boot/lib/usbotgdriver/src/usb_dcd.c | 478 -- .../Boot/lib/usbotgdriver/src/usb_dcd_int.c | 869 -- .../Boot/main.c | 164 - .../Boot/usb_bsp.c | 194 - .../Boot/usb_conf.h | 289 - .../Boot/usbd_bulk.c | 361 - .../Boot/usbd_bulk.h | 102 - .../Boot/usbd_conf.h | 91 - .../Boot/usbd_desc.c | 271 - .../Boot/usbd_desc.h | 120 - .../Boot/usbd_usr.c | 206 - .../Prog/bin/demoprog_olimex_stm32e407.elf | Bin 152025 -> 0 bytes .../Prog/bin/demoprog_olimex_stm32e407.map | 2989 ------- .../Prog/bin/demoprog_olimex_stm32e407.srec | 856 -- .../Prog/boot.c | 397 - .../Prog/boot.h | 40 - .../Prog/cstart.s | 327 - .../Prog/header.h | 44 - .../Prog/ide/readme.txt | 4 - .../Prog/ide/stm32f407_crossworks.hzp | 143 - .../Prog/ide/stm32f407_crossworks.hzs | 73 - .../Prog/led.c | 103 - .../Prog/led.h | 39 - .../Prog/lib/ethernetlib/inc/stm32_eth.h | 1610 ---- .../Prog/lib/ethernetlib/src/stm32_eth.c | 3056 ------- .../CMSIS END USER LICENCE AGREEMENT.pdf | Bin 46999 -> 0 bytes .../Device/ST/STM32F4xx/Include/stm32f4xx.h | 7155 ----------------- .../ST/STM32F4xx/Include/system_stm32f4xx.h | 105 - .../Device/ST/STM32F4xx/Release_Notes.html | 155 - .../ST/STM32F4xx/Source/system_stm32f4xx.c | 562 -- .../lib/stdperiphlib/CMSIS/Include/core_cm4.h | 1757 ---- .../CMSIS/Include/core_cm4_simd.h | 649 -- .../Release_Notes.html | 978 --- .../STM32F4xx_StdPeriph_Driver/inc/misc.h | 178 - .../inc/stm32f4xx_adc.h | 649 -- .../inc/stm32f4xx_can.h | 644 -- .../inc/stm32f4xx_crc.h | 83 - .../inc/stm32f4xx_cryp.h | 384 - .../inc/stm32f4xx_dac.h | 304 - .../inc/stm32f4xx_dbgmcu.h | 109 - .../inc/stm32f4xx_dcmi.h | 312 - .../inc/stm32f4xx_dma.h | 609 -- .../inc/stm32f4xx_exti.h | 183 - .../inc/stm32f4xx_flash.h | 390 - .../inc/stm32f4xx_fsmc.h | 675 -- .../inc/stm32f4xx_gpio.h | 423 - .../inc/stm32f4xx_hash.h | 257 - .../inc/stm32f4xx_i2c.h | 711 -- .../inc/stm32f4xx_iwdg.h | 131 - .../inc/stm32f4xx_pwr.h | 188 - .../inc/stm32f4xx_rcc.h | 545 -- .../inc/stm32f4xx_rng.h | 120 - .../inc/stm32f4xx_rtc.h | 881 -- .../inc/stm32f4xx_sdio.h | 536 -- .../inc/stm32f4xx_spi.h | 549 -- .../inc/stm32f4xx_syscfg.h | 181 - .../inc/stm32f4xx_tim.h | 1150 --- .../inc/stm32f4xx_usart.h | 431 - .../inc/stm32f4xx_wwdg.h | 111 - .../STM32F4xx_StdPeriph_Driver/src/misc.c | 249 - .../src/stm32f4xx_adc.c | 1741 ---- .../src/stm32f4xx_can.c | 1701 ---- .../src/stm32f4xx_crc.c | 133 - .../src/stm32f4xx_cryp.c | 934 --- .../src/stm32f4xx_cryp_aes.c | 1676 ---- .../src/stm32f4xx_cryp_des.c | 308 - .../src/stm32f4xx_cryp_tdes.c | 325 - .../src/stm32f4xx_dac.c | 714 -- .../src/stm32f4xx_dbgmcu.c | 180 - .../src/stm32f4xx_dcmi.c | 538 -- .../src/stm32f4xx_dma.c | 1301 --- .../src/stm32f4xx_exti.c | 313 - .../src/stm32f4xx_flash.c | 1180 --- .../src/stm32f4xx_fsmc.c | 989 --- .../src/stm32f4xx_gpio.c | 584 -- .../src/stm32f4xx_hash.c | 726 -- .../src/stm32f4xx_hash_md5.c | 320 - .../src/stm32f4xx_hash_sha1.c | 323 - .../src/stm32f4xx_i2c.c | 1456 ---- .../src/stm32f4xx_iwdg.c | 266 - .../src/stm32f4xx_pwr.c | 678 -- .../src/stm32f4xx_rcc.c | 1872 ----- .../src/stm32f4xx_rng.c | 397 - .../src/stm32f4xx_rtc.c | 2761 ------- .../src/stm32f4xx_sdio.c | 1011 --- .../src/stm32f4xx_spi.c | 1312 --- .../src/stm32f4xx_syscfg.c | 206 - .../src/stm32f4xx_tim.c | 3365 -------- .../src/stm32f4xx_usart.c | 1486 ---- .../src/stm32f4xx_wwdg.c | 307 - .../Prog/lib/stdperiphlib/stm32f4xx_conf.h | 94 - .../Prog/lib/uip/clock-arch.c | 50 - .../Prog/lib/uip/clock-arch.h | 40 - .../Prog/lib/uip/netdev.c | 442 - .../Prog/lib/uip/netdev.h | 46 - .../Prog/lib/uip/uip-conf.h | 151 - .../Prog/main.c | 85 - .../Prog/memory.x | 332 - .../Prog/net.c | 206 - .../Prog/net.h | 61 - .../Prog/prog.dox | 7 - .../Prog/timer.c | 106 - .../Prog/timer.h | 41 - .../Prog/vectors.c | 178 - .../demo.dox | 8 - 303 files changed, 25167 insertions(+), 174027 deletions(-) delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.elf delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.map delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.srec delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/blt_conf.h delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/boot.dox delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/readme.txt delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.srec delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/boot.c delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/boot.h delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/cstart.s delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/header.h delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/readme.txt delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/irq.c delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/irq.h delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/led.c delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/led.h delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/lpc2294.h delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/prog.dox delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/timer.c delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/timer.h delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/vectors.c delete mode 100644 Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/demo.dox delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c rename Target/Demo/{ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include => ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport}/core_cmFunc.h (100%) rename Target/Demo/{ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include => ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport}/core_cmInstr.h (100%) delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CMSIS debug support.htm delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CMSIS_changes.htm delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/License.doc delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c rename Target/Demo/{ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include => ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport}/core_cmFunc.h (100%) rename Target/Demo/{ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include => ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport}/core_cmInstr.h (100%) delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS debug support.htm delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS_changes.htm delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/License.doc delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c create mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmFunc.h create mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmInstr.h delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CMSIS debug support.htm delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CMSIS_changes.htm delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/License.doc delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c create mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmFunc.h create mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmInstr.h delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS debug support.htm delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS_changes.htm delete mode 100644 Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/License.doc delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.elf delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.map delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.srec delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/blt_conf.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/boot.dox delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/hooks.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/readme.txt delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/stm32f407_crossworks.hzp delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/stm32f407_crossworks.hzs delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/ethernetlib/inc/stm32_eth.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/ethernetlib/src/stm32_eth.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/fatfs/ffconf.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/fatfs/mmc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Release_Notes.html delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Source/system_stm32f4xx.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cm4.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cm4_simd.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/Release_Notes.html delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/misc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_adc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_can.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_crc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dac.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dbgmcu.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dcmi.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dma.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_exti.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_flash.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_fsmc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_hash.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_iwdg.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_pwr.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rng.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rtc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_sdio.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_spi.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_syscfg.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_tim.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/misc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_tdes.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dac.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_sha1.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/stm32f4xx_conf.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/clock-arch.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/clock-arch.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/netdev.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/netdev.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/uip-conf.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_core.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_def.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_ioreq.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_req.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_usr.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_core.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_ioreq.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_req.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Release_Notes.html delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/Release_Notes.html delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_bsp.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_core.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_dcd.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_dcd_int.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_defines.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_regs.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_core.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_dcd.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_dcd_int.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/main.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usb_bsp.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usb_conf.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_bulk.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_bulk.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_conf.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_desc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_desc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_usr.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.elf delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.map delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.srec delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/boot.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/boot.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/cstart.s delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/header.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/readme.txt delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/stm32f407_crossworks.hzp delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/stm32f407_crossworks.hzs delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/led.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/led.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/ethernetlib/inc/stm32_eth.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/ethernetlib/src/stm32_eth.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Release_Notes.html delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Source/system_stm32f4xx.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cm4.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cm4_simd.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/Release_Notes.html delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/misc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_adc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_can.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_crc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dac.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dbgmcu.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dcmi.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dma.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_exti.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_flash.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_fsmc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_hash.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_iwdg.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_pwr.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rng.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rtc.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_sdio.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_spi.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_syscfg.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_tim.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/misc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_tdes.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dac.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_sha1.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/stm32f4xx_conf.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/clock-arch.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/clock-arch.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/netdev.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/netdev.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/uip-conf.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/main.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/memory.x delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/net.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/net.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/prog.dox delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/timer.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/timer.h delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/vectors.c delete mode 100644 Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/demo.dox diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.elf b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.elf deleted file mode 100644 index 4552863e975291f2bff6c7553e4e09fb1b964ebb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47436 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 @mc8#R~8RC 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 diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.map b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.map deleted file mode 100644 index ed303e53..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.map +++ /dev/null @@ -1,887 +0,0 @@ -Archive member included because of file (symbol) - -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - ARM Flash Debug/../../obj/can.o (__divsi3) - -Discarded input sections - - .text 0x00000000 0x0 ARM Flash Debug/../../obj/hooks.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/hooks.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/hooks.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/main.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/main.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/main.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/extflash.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/extflash.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/extflash.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_abt 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_irq 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_fiq 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_svc 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_und 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .heap 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/flash.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/flash.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/flash.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/cpu_comp.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/cpu_comp.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/cpu_comp.o - .text.CpuIrqEnable - 0x00000000 0x18 ARM Flash Debug/../../obj/cpu_comp.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/can.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/can.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/can.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/cpu.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/cpu.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/cpu.o - .text.CpuReset - 0x00000000 0x10 ARM Flash Debug/../../obj/cpu.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/nvm.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/nvm.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/nvm.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/uart.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/uart.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/uart.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/assert.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/assert.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/assert.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/backdoor.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/backdoor.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/backdoor.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/boot.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/boot.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/boot.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/com.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/com.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/com.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/cop.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/cop.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/cop.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/xcp.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/xcp.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/xcp.o - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r4 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r1 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r2 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r3 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r0 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r5 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_sp - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r7 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r8 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r9 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_sl - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r6 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_lr - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_ip - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_fp - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_umod - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_asr - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_div - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_lsl - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_lsr - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_mod - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_udivmod - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__aeabi_ldivmod - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_cmp - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_ucmp - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.muldi3 - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int32_umod - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__aeabi_uidivmod - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.ctl_count_leading_zeros_32 - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.ctl_count_leading_zeros_16 - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_shi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_si - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_sqi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_uhi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_uqi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - -Memory Configuration - -Name Origin Length Attributes -UNPLACED_SECTIONS 0xffffffff 0x00000000 xw -AHB_Peripherals 0xffe00000 0x00200000 xw -VPB_Peripherals 0xe0000000 0x00200000 xw -BANK3 0x83000000 0x01000000 xw -BANK2 0x82000000 0x01000000 xw -External_SRAM 0x81000000 0x00100000 xw -External_FLASH 0x80000000 0x00400000 xr -SRAM 0x40000200 0x00001ce0 xw -FLASH 0x00000000 0x00002000 xr -*default* 0x00000000 0xffffffff - -Linker script and memory map - - 0xffe00000 __AHB_Peripherals_segment_start__ = 0xffe00000 - 0x00000000 __AHB_Peripherals_segment_end__ = 0x0 - 0xe0000000 __VPB_Peripherals_segment_start__ = 0xe0000000 - 0xe0200000 __VPB_Peripherals_segment_end__ = 0xe0200000 - 0x83000000 __BANK3_segment_start__ = 0x83000000 - 0x84000000 __BANK3_segment_end__ = 0x84000000 - 0x82000000 __BANK2_segment_start__ = 0x82000000 - 0x83000000 __BANK2_segment_end__ = 0x83000000 - 0x81000000 __External_SRAM_segment_start__ = 0x81000000 - 0x81100000 __External_SRAM_segment_end__ = 0x81100000 - 0x80000000 __External_FLASH_segment_start__ = 0x80000000 - 0x80400000 __External_FLASH_segment_end__ = 0x80400000 - 0x40000200 __SRAM_segment_start__ = 0x40000200 - 0x40001ee0 __SRAM_segment_end__ = 0x40001ee0 - 0x00000000 __FLASH_segment_start__ = 0x0 - 0x00002000 __FLASH_segment_end__ = 0x2000 - 0x00000400 __STACKSIZE__ = 0x400 - 0x00000100 __STACKSIZE_IRQ__ = 0x100 - 0x00000100 __STACKSIZE_FIQ__ = 0x100 - 0x00000000 __STACKSIZE_SVC__ = 0x0 - 0x00000000 __STACKSIZE_ABT__ = 0x0 - 0x00000000 __STACKSIZE_UND__ = 0x0 - 0x00000400 __HEAPSIZE__ = 0x400 - 0x80000000 __text2_load_start__ = ALIGN (__External_FLASH_segment_start__, 0x4) - -.text2 0x80000000 0x0 - 0x80000000 __text2_start__ = . - *(.text2 .text2.*) - 0x80000000 __text2_end__ = (__text2_start__ + SIZEOF (.text2)) - 0x80000000 __text2_load_end__ = __text2_end__ - 0x00000001 . = ASSERT (((__text2_end__ >= __External_FLASH_segment_start__) && (__text2_end__ <= (__External_FLASH_segment_start__ + 0x400000))), error: .text2 is too large to fit in External_FLASH memory segment) - 0x80000000 __rodata2_load_start__ = ALIGN (__text2_end__, 0x4) - -.rodata2 0x80000000 0x0 - 0x80000000 __rodata2_start__ = . - *(.rodata2 .rodata2.*) - 0x80000000 __rodata2_end__ = (__rodata2_start__ + SIZEOF (.rodata2)) - 0x80000000 __rodata2_load_end__ = __rodata2_end__ - 0x00000001 . = ASSERT (((__rodata2_end__ >= __External_FLASH_segment_start__) && (__rodata2_end__ <= (__External_FLASH_segment_start__ + 0x400000))), error: .rodata2 is too large to fit in External_FLASH memory segment) - 0x80000000 __data2_load_start__ = ALIGN (__rodata2_end__, 0x4) - -.data2 0x81000000 0x0 load address 0x80000000 - 0x81000000 __data2_start__ = . - *(.data2 .data2.*) - 0x81000000 __data2_end__ = (__data2_start__ + SIZEOF (.data2)) - 0x80000000 __data2_load_end__ = (__data2_load_start__ + SIZEOF (.data2)) - 0x80000000 __External_FLASH_segment_used_end__ = (ALIGN (__rodata2_end__, 0x4) + SIZEOF (.data2)) - 0x00000001 . = ASSERT ((((__data2_load_start__ + SIZEOF (.data2)) >= __External_FLASH_segment_start__) && ((__data2_load_start__ + SIZEOF (.data2)) <= (__External_FLASH_segment_start__ + 0x400000))), error: .data2 is too large to fit in External_FLASH memory segment) - -.data2_run 0x81000000 0x0 - 0x81000000 __data2_run_start__ = . - 0x81000000 . = MAX ((__data2_run_start__ + SIZEOF (.data2)), .) - 0x81000000 __data2_run_end__ = (__data2_run_start__ + SIZEOF (.data2_run)) - 0x81000000 __data2_run_load_end__ = __data2_run_end__ - 0x00000001 . = ASSERT (((__data2_run_end__ >= __External_SRAM_segment_start__) && (__data2_run_end__ <= (__External_SRAM_segment_start__ + 0x100000))), error: .data2_run is too large to fit in External_SRAM memory segment) - 0x81000000 __bss2_load_start__ = ALIGN (__data2_run_end__, 0x4) - -.bss2 0x81000000 0x0 - 0x81000000 __bss2_start__ = . - *(.bss2 .bss2.*) - 0x81000000 __bss2_end__ = (__bss2_start__ + SIZEOF (.bss2)) - 0x81000000 __bss2_load_end__ = __bss2_end__ - 0x81000000 __External_SRAM_segment_used_end__ = (ALIGN (__data2_run_end__, 0x4) + SIZEOF (.bss2)) - 0x00000001 . = ASSERT (((__bss2_end__ >= __External_SRAM_segment_start__) && (__bss2_end__ <= (__External_SRAM_segment_start__ + 0x100000))), error: .bss2 is too large to fit in External_SRAM memory segment) - 0x40000200 __vectors_ram_load_start__ = __SRAM_segment_start__ - -.vectors_ram 0x40000200 0x3c - 0x40000200 __vectors_ram_start__ = . - *(.vectors_ram .vectors_ram.*) - 0x4000023c . = MAX ((__vectors_ram_start__ + 0x3c), .) - *fill* 0x40000200 0x3c 00 - 0x4000023c __vectors_ram_end__ = (__vectors_ram_start__ + SIZEOF (.vectors_ram)) - 0x4000023c __vectors_ram_load_end__ = __vectors_ram_end__ - 0x00000001 . = ASSERT (((__vectors_ram_end__ >= __SRAM_segment_start__) && (__vectors_ram_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .vectors_ram is too large to fit in SRAM memory segment) - 0x00000000 __vectors_load_start__ = __FLASH_segment_start__ - -.vectors 0x00000000 0x34 - 0x00000000 __vectors_start__ = . - *(.vectors .vectors.*) - .vectors 0x00000000 0x34 ARM Flash Debug/../../obj/cstart.o - 0x00000000 _vectors - 0x00000034 __vectors_end__ = (__vectors_start__ + SIZEOF (.vectors)) - 0x00000034 __vectors_load_end__ = __vectors_end__ - 0x00000001 . = ASSERT (((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .vectors is too large to fit in FLASH memory segment) - 0x00000034 __init_load_start__ = ALIGN (__vectors_end__, 0x4) - -.init 0x00000034 0x20c - 0x00000034 __init_start__ = . - *(.init .init.*) - *fill* 0x00000034 0xc 00 - .init 0x00000040 0x200 ARM Flash Debug/../../obj/cstart.o - 0x00000040 __start - 0x00000040 Reset_Handler - 0x00000158 exit - 0x000001b4 undef_handler - 0x000001b8 pabort_handler - 0x000001bc dabort_handler - 0x000001c0 fiq_handler - 0x000001c4 irq_handler - 0x00000240 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x00000240 __init_load_end__ = __init_end__ - 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .init is too large to fit in FLASH memory segment) - 0x00000240 __text_load_start__ = ALIGN (__init_end__, 0x4) - -.text 0x00000240 0x19f0 - 0x00000240 __text_start__ = . - *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs - .text.main 0x00000240 0xa4 ARM Flash Debug/../../obj/main.o - 0x00000240 main - .text.FlashGetSector - 0x000002e4 0x64 ARM Flash Debug/../../obj/flash.o - .text.FlashWriteBlock - 0x00000348 0x110 ARM Flash Debug/../../obj/flash.o - .text.FlashInitBlock - 0x00000458 0x38 ARM Flash Debug/../../obj/flash.o - .text.FlashSwitchBlock - 0x00000490 0x6c ARM Flash Debug/../../obj/flash.o - .text.FlashAddToBlock - 0x000004fc 0xcc ARM Flash Debug/../../obj/flash.o - .text.FlashInit - 0x000005c8 0x20 ARM Flash Debug/../../obj/flash.o - 0x000005c8 FlashInit - .text.FlashWrite - 0x000005e8 0x68 ARM Flash Debug/../../obj/flash.o - 0x000005e8 FlashWrite - .text.FlashErase - 0x00000650 0x130 ARM Flash Debug/../../obj/flash.o - 0x00000650 FlashErase - .text.FlashWriteChecksum - 0x00000780 0x80 ARM Flash Debug/../../obj/flash.o - 0x00000780 FlashWriteChecksum - .text.FlashVerifyChecksum - 0x00000800 0x48 ARM Flash Debug/../../obj/flash.o - 0x00000800 FlashVerifyChecksum - .text.FlashDone - 0x00000848 0x5c ARM Flash Debug/../../obj/flash.o - 0x00000848 FlashDone - .text.FlashGetUserProgBaseAddress - 0x000008a4 0x8 ARM Flash Debug/../../obj/flash.o - 0x000008a4 FlashGetUserProgBaseAddress - .text.IrqGetCPSR - 0x000008ac 0x8 ARM Flash Debug/../../obj/cpu_comp.o - .text.IrqSetCPSR - 0x000008b4 0x8 ARM Flash Debug/../../obj/cpu_comp.o - .text.CpuIrqDisable - 0x000008bc 0x18 ARM Flash Debug/../../obj/cpu_comp.o - 0x000008bc CpuIrqDisable - .text.CanInit 0x000008d4 0xf8 ARM Flash Debug/../../obj/can.o - 0x000008d4 CanInit - .text.CanTransmitPacket - 0x000009cc 0xbc ARM Flash Debug/../../obj/can.o - 0x000009cc CanTransmitPacket - .text.CanReceivePacket - 0x00000a88 0xa4 ARM Flash Debug/../../obj/can.o - 0x00000a88 CanReceivePacket - .text.CpuInit 0x00000b2c 0x10 ARM Flash Debug/../../obj/cpu.o - 0x00000b2c CpuInit - .text.CpuMemCopy - 0x00000b3c 0x44 ARM Flash Debug/../../obj/cpu.o - 0x00000b3c CpuMemCopy - .text.CpuStartUserProgram - 0x00000b80 0x50 ARM Flash Debug/../../obj/cpu.o - 0x00000b80 CpuStartUserProgram - .text.NvmInit 0x00000bd0 0x10 ARM Flash Debug/../../obj/nvm.o - 0x00000bd0 NvmInit - .text.NvmWrite - 0x00000be0 0x10 ARM Flash Debug/../../obj/nvm.o - 0x00000be0 NvmWrite - .text.NvmErase - 0x00000bf0 0x10 ARM Flash Debug/../../obj/nvm.o - 0x00000bf0 NvmErase - .text.NvmVerifyChecksum - 0x00000c00 0x10 ARM Flash Debug/../../obj/nvm.o - 0x00000c00 NvmVerifyChecksum - .text.NvmGetUserProgBaseAddress - 0x00000c10 0x10 ARM Flash Debug/../../obj/nvm.o - 0x00000c10 NvmGetUserProgBaseAddress - .text.NvmDone 0x00000c20 0x1c ARM Flash Debug/../../obj/nvm.o - 0x00000c20 NvmDone - .text.TimerInit - 0x00000c3c 0x48 ARM Flash Debug/../../obj/timer.o - 0x00000c3c TimerInit - .text.TimerReset - 0x00000c84 0x20 ARM Flash Debug/../../obj/timer.o - 0x00000c84 TimerReset - .text.TimerUpdate - 0x00000ca4 0x38 ARM Flash Debug/../../obj/timer.o - 0x00000ca4 TimerUpdate - .text.TimerGet - 0x00000cdc 0x1c ARM Flash Debug/../../obj/timer.o - 0x00000cdc TimerGet - .text.UartReceiveByte - 0x00000cf8 0x28 ARM Flash Debug/../../obj/uart.o - .text.UartTransmitByte - 0x00000d20 0x54 ARM Flash Debug/../../obj/uart.o - .text.UartInit - 0x00000d74 0x40 ARM Flash Debug/../../obj/uart.o - 0x00000d74 UartInit - .text.UartTransmitPacket - 0x00000db4 0x84 ARM Flash Debug/../../obj/uart.o - 0x00000db4 UartTransmitPacket - .text.UartReceivePacket - 0x00000e38 0x108 ARM Flash Debug/../../obj/uart.o - 0x00000e38 UartReceivePacket - .text.AssertFailure - 0x00000f40 0xc ARM Flash Debug/../../obj/assert.o - 0x00000f40 AssertFailure - .text.BackDoorCheck - 0x00000f4c 0x54 ARM Flash Debug/../../obj/backdoor.o - 0x00000f4c BackDoorCheck - .text.BackDoorInit - 0x00000fa0 0x30 ARM Flash Debug/../../obj/backdoor.o - 0x00000fa0 BackDoorInit - .text.BootInit - 0x00000fd0 0x24 ARM Flash Debug/../../obj/boot.o - 0x00000fd0 BootInit - .text.BootTask - 0x00000ff4 0x1c ARM Flash Debug/../../obj/boot.o - 0x00000ff4 BootTask - .text.ComInit 0x00001010 0x30 ARM Flash Debug/../../obj/com.o - 0x00001010 ComInit - .text.ComTask 0x00001040 0x5c ARM Flash Debug/../../obj/com.o - 0x00001040 ComTask - .text.ComFree 0x0000109c 0x4 ARM Flash Debug/../../obj/com.o - 0x0000109c ComFree - .text.ComTransmitPacket - 0x000010a0 0x4c ARM Flash Debug/../../obj/com.o - 0x000010a0 ComTransmitPacket - .text.ComGetActiveInterfaceMaxRxLen - 0x000010ec 0x38 ARM Flash Debug/../../obj/com.o - 0x000010ec ComGetActiveInterfaceMaxRxLen - .text.ComGetActiveInterfaceMaxTxLen - 0x00001124 0x38 ARM Flash Debug/../../obj/com.o - 0x00001124 ComGetActiveInterfaceMaxTxLen - .text.ComIsConnected - 0x0000115c 0x10 ARM Flash Debug/../../obj/com.o - 0x0000115c ComIsConnected - .text.CopInit 0x0000116c 0x4 ARM Flash Debug/../../obj/cop.o - 0x0000116c CopInit - .text.CopService - 0x00001170 0x4 ARM Flash Debug/../../obj/cop.o - 0x00001170 CopService - .text.XcpProtectResources - 0x00001174 0x14 ARM Flash Debug/../../obj/xcp.o - .text.XcpSetCtoError - 0x00001188 0x20 ARM Flash Debug/../../obj/xcp.o - .text.XcpInit 0x000011a8 0x28 ARM Flash Debug/../../obj/xcp.o - 0x000011a8 XcpInit - .text.XcpIsConnected - 0x000011d0 0x18 ARM Flash Debug/../../obj/xcp.o - 0x000011d0 XcpIsConnected - .text.XcpPacketTransmitted - 0x000011e8 0x14 ARM Flash Debug/../../obj/xcp.o - 0x000011e8 XcpPacketTransmitted - .text.XcpPacketReceived - 0x000011fc 0x538 ARM Flash Debug/../../obj/xcp.o - 0x000011fc XcpPacketReceived - *fill* 0x00001734 0xc 00 - .text.libc.__int32_div - 0x00001740 0x470 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - 0x00001740 __int32_div - 0x00001740 __aeabi_idiv - 0x00001740 __divsi3 - 0x00001a40 __aeabi_uidiv - 0x00001a40 __uint32_div - 0x00001a40 __udivsi3 - .text.libc.__int32_mod - 0x00001bb0 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - 0x00001bb0 __modsi3 - 0x00001bb0 __int32_mod - .text.libc.__aeabi_idivmod - 0x00001bd0 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - 0x00001bd0 __aeabi_idivmod - 0x00001c30 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x00001c30 __text_load_end__ = __text_end__ - -.vfp11_veneer 0x00000000 0x0 - .vfp11_veneer 0x00000000 0x0 linker stubs - -.v4_bx 0x00000000 0x0 - .v4_bx 0x00000000 0x0 linker stubs - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .text is too large to fit in FLASH memory segment) - 0x00001c30 __dtors_load_start__ = ALIGN (__text_end__, 0x4) - -.dtors 0x00001c30 0x0 - 0x00001c30 __dtors_start__ = . - *(SORT(.dtors.*)) - *(.dtors) - 0x00001c30 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x00001c30 __dtors_load_end__ = __dtors_end__ - 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .dtors is too large to fit in FLASH memory segment) - 0x00001c30 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) - -.ctors 0x00001c30 0x0 - 0x00001c30 __ctors_start__ = . - *(SORT(.ctors.*)) - *(.ctors) - 0x00001c30 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x00001c30 __ctors_load_end__ = __ctors_end__ - 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .ctors is too large to fit in FLASH memory segment) - 0x00001c30 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) - -.rodata 0x00001c30 0x250 - 0x00001c30 __rodata_start__ = . - *(.rodata .rodata.* .gnu.linkonce.r.*) - .rodata.flashLayout - 0x00001c30 0xc0 ARM Flash Debug/../../obj/flash.o - .rodata.str1.4 - 0x00001cf0 0x7d ARM Flash Debug/../../obj/can.o - 0x80 (size before relaxing) - *fill* 0x00001d6d 0x3 00 - .rodata.canTiming - 0x00001d70 0x48 ARM Flash Debug/../../obj/can.o - .rodata.str1.4 - 0x00001db8 0x80 ARM Flash Debug/../../obj/uart.o - .rodata.xcpStationId - 0x00001e38 0x8 ARM Flash Debug/../../obj/xcp.o - .rodata.libc.__aeabi_uidiv - 0x00001e40 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - 0x00001e40 __RAL_uidiv_inverse_lut - 0x00001e80 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x00001e80 __rodata_load_end__ = __rodata_end__ - 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .rodata is too large to fit in FLASH memory segment) - 0x00001e80 __data_load_start__ = ALIGN (__rodata_end__, 0x4) - -.data 0x4000023c 0x4 load address 0x00001e80 - 0x4000023c __data_start__ = . - *(.data .data.* .gnu.linkonce.d.*) - .data.comActiveInterface - 0x4000023c 0x4 ARM Flash Debug/../../obj/com.o - 0x40000240 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x00001e84 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) - 0x00000001 . = ASSERT ((((__data_load_start__ + SIZEOF (.data)) >= __FLASH_segment_start__) && ((__data_load_start__ + SIZEOF (.data)) <= (__FLASH_segment_start__ + 0x40000))), error: .data is too large to fit in FLASH memory segment) - -.data_run 0x4000023c 0x4 load address 0x00001e80 - 0x4000023c __data_run_start__ = . - 0x40000240 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) - *fill* 0x4000023c 0x4 00 - 0x40000240 __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) - 0x40000240 __data_run_load_end__ = __data_run_end__ - 0x00000001 . = ASSERT (((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .data_run is too large to fit in SRAM memory segment) - 0x40000240 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) - -.bss 0x40000240 0x4f4 - 0x40000240 __bss_start__ = . - *(.bss .bss.* .gnu.linkonce.b.*) - .bss.bootBlockInfo - 0x40000240 0x204 ARM Flash Debug/../../obj/flash.o - .bss.blockInfo - 0x40000444 0x204 ARM Flash Debug/../../obj/flash.o - .bss.millisecond_counter - 0x40000648 0x4 ARM Flash Debug/../../obj/timer.o - .bss.free_running_counter_last - 0x4000064c 0x4 ARM Flash Debug/../../obj/timer.o - .bss.xcpCtoRxLength.897 - 0x40000650 0x1 ARM Flash Debug/../../obj/uart.o - *fill* 0x40000651 0x3 00 - .bss.xcpCtoReqPacket.896 - 0x40000654 0x44 ARM Flash Debug/../../obj/uart.o - .bss.xcpCtoRxInProgress.898 - 0x40000698 0x1 ARM Flash Debug/../../obj/uart.o - *fill* 0x40000699 0x3 00 - .bss.xcpCtoRxStartTime.899 - 0x4000069c 0x4 ARM Flash Debug/../../obj/uart.o - .bss.backdoorOpen - 0x400006a0 0x1 ARM Flash Debug/../../obj/backdoor.o - *fill* 0x400006a1 0x3 00 - .bss.backdoorOpenTime - 0x400006a4 0x4 ARM Flash Debug/../../obj/backdoor.o - .bss.xcpCtoReqPacket.891 - 0x400006a8 0x40 ARM Flash Debug/../../obj/com.o - .bss.xcpInfo 0x400006e8 0x4c ARM Flash Debug/../../obj/xcp.o - *(COMMON) - 0x40000734 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x40000734 __bss_load_end__ = __bss_end__ - 0x00000001 . = ASSERT (((__bss_end__ >= __SRAM_segment_start__) && (__bss_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .bss is too large to fit in SRAM memory segment) - 0x40000734 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) - -.non_init 0x40000734 0x0 - 0x40000734 __non_init_start__ = . - *(.non_init .non_init.*) - 0x40000734 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x40000734 __non_init_load_end__ = __non_init_end__ - 0x00000001 . = ASSERT (((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .non_init is too large to fit in SRAM memory segment) - 0x40000734 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) - -.heap 0x40000734 0x400 - 0x40000734 __heap_start__ = . - *(.heap .heap.*) - 0x40000b34 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x40000734 0x400 00 - 0x40000b34 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x40000b34 __heap_load_end__ = __heap_end__ - 0x00000001 . = ASSERT (((__heap_end__ >= __SRAM_segment_start__) && (__heap_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .heap is too large to fit in SRAM memory segment) - 0x40000b34 __stack_load_start__ = ALIGN (__heap_end__, 0x4) - -.stack 0x40000b34 0x400 - 0x40000b34 __stack_start__ = . - *(.stack .stack.*) - 0x40000f34 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x40000b34 0x400 00 - 0x40000f34 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x40000f34 __stack_load_end__ = __stack_end__ - 0x00000001 . = ASSERT (((__stack_end__ >= __SRAM_segment_start__) && (__stack_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack is too large to fit in SRAM memory segment) - 0x40000f34 __stack_irq_load_start__ = ALIGN (__stack_end__, 0x4) - -.stack_irq 0x40000f34 0x100 - 0x40000f34 __stack_irq_start__ = . - *(.stack_irq .stack_irq.*) - 0x40001034 . = ALIGN (MAX ((__stack_irq_start__ + __STACKSIZE_IRQ__), .), 0x4) - *fill* 0x40000f34 0x100 00 - 0x40001034 __stack_irq_end__ = (__stack_irq_start__ + SIZEOF (.stack_irq)) - 0x40001034 __stack_irq_load_end__ = __stack_irq_end__ - 0x00000001 . = ASSERT (((__stack_irq_end__ >= __SRAM_segment_start__) && (__stack_irq_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_irq is too large to fit in SRAM memory segment) - 0x40001034 __stack_fiq_load_start__ = ALIGN (__stack_irq_end__, 0x4) - -.stack_fiq 0x40001034 0x100 - 0x40001034 __stack_fiq_start__ = . - *(.stack_fiq .stack_fiq.*) - 0x40001134 . = ALIGN (MAX ((__stack_fiq_start__ + __STACKSIZE_FIQ__), .), 0x4) - *fill* 0x40001034 0x100 00 - 0x40001134 __stack_fiq_end__ = (__stack_fiq_start__ + SIZEOF (.stack_fiq)) - 0x40001134 __stack_fiq_load_end__ = __stack_fiq_end__ - 0x00000001 . = ASSERT (((__stack_fiq_end__ >= __SRAM_segment_start__) && (__stack_fiq_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_fiq is too large to fit in SRAM memory segment) - 0x40001134 __stack_svc_load_start__ = ALIGN (__stack_fiq_end__, 0x4) - -.stack_svc 0x40001134 0x0 - 0x40001134 __stack_svc_start__ = . - *(.stack_svc .stack_svc.*) - 0x40001134 . = ALIGN (MAX ((__stack_svc_start__ + __STACKSIZE_SVC__), .), 0x4) - 0x40001134 __stack_svc_end__ = (__stack_svc_start__ + SIZEOF (.stack_svc)) - 0x40001134 __stack_svc_load_end__ = __stack_svc_end__ - 0x00000001 . = ASSERT (((__stack_svc_end__ >= __SRAM_segment_start__) && (__stack_svc_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_svc is too large to fit in SRAM memory segment) - 0x40001134 __stack_abt_load_start__ = ALIGN (__stack_svc_end__, 0x4) - -.stack_abt 0x40001134 0x0 - 0x40001134 __stack_abt_start__ = . - *(.stack_abt .stack_abt.*) - 0x40001134 . = ALIGN (MAX ((__stack_abt_start__ + __STACKSIZE_ABT__), .), 0x4) - 0x40001134 __stack_abt_end__ = (__stack_abt_start__ + SIZEOF (.stack_abt)) - 0x40001134 __stack_abt_load_end__ = __stack_abt_end__ - 0x00000001 . = ASSERT (((__stack_abt_end__ >= __SRAM_segment_start__) && (__stack_abt_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_abt is too large to fit in SRAM memory segment) - 0x40001134 __stack_und_load_start__ = ALIGN (__stack_abt_end__, 0x4) - -.stack_und 0x40001134 0x0 - 0x40001134 __stack_und_start__ = . - *(.stack_und .stack_und.*) - 0x40001134 . = ALIGN (MAX ((__stack_und_start__ + __STACKSIZE_UND__), .), 0x4) - 0x40001134 __stack_und_end__ = (__stack_und_start__ + SIZEOF (.stack_und)) - 0x40001134 __stack_und_load_end__ = __stack_und_end__ - 0x00000001 . = ASSERT (((__stack_und_end__ >= __SRAM_segment_start__) && (__stack_und_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_und is too large to fit in SRAM memory segment) - 0x00001e84 __fast_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) - -.fast 0x40001134 0x0 load address 0x00001e84 - 0x40001134 __fast_start__ = . - *(.fast .fast.*) - 0x40001134 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x00001e84 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) - 0x00001e84 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.fast)) - 0x00000001 . = ASSERT ((((__fast_load_start__ + SIZEOF (.fast)) >= __FLASH_segment_start__) && ((__fast_load_start__ + SIZEOF (.fast)) <= (__FLASH_segment_start__ + 0x40000))), error: .fast is too large to fit in FLASH memory segment) - -.fast_run 0x40001134 0x0 - 0x40001134 __fast_run_start__ = . - 0x40001134 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .) - 0x40001134 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) - 0x40001134 __fast_run_load_end__ = __fast_run_end__ - 0x40001134 __SRAM_segment_used_end__ = (ALIGN (__stack_und_end__, 0x4) + SIZEOF (.fast_run)) - 0x00000001 . = ASSERT (((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .fast_run is too large to fit in SRAM memory segment) -START GROUP -LOAD ARM Flash Debug/../../obj/hooks.o -LOAD ARM Flash Debug/../../obj/main.o -LOAD ARM Flash Debug/../../obj/extflash.o -LOAD ARM Flash Debug/../../obj/cstart.o -LOAD ARM Flash Debug/../../obj/flash.o -LOAD ARM Flash Debug/../../obj/cpu_comp.o -LOAD ARM Flash Debug/../../obj/can.o -LOAD ARM Flash Debug/../../obj/cpu.o -LOAD ARM Flash Debug/../../obj/nvm.o -LOAD ARM Flash Debug/../../obj/timer.o -LOAD ARM Flash Debug/../../obj/uart.o -LOAD ARM Flash Debug/../../obj/assert.o -LOAD ARM Flash Debug/../../obj/backdoor.o -LOAD ARM Flash Debug/../../obj/boot.o -LOAD ARM Flash Debug/../../obj/com.o -LOAD ARM Flash Debug/../../obj/cop.o -LOAD ARM Flash Debug/../../obj/xcp.o -LOAD C:/Users/voorburg/AppData/Local/Rowley Associates Limited/CrossWorks for ARM/packages/lib/liblpc2000_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcpp_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_targetio_impl_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a -END GROUP -OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/../bin/openblt_olimex_lpc_l2294_20mhz.elf elf32-littlearm) - -.debug_info 0x00000000 0x1b23 - .debug_info 0x00000000 0x5a ARM Flash Debug/../../obj/hooks.o - .debug_info 0x0000005a 0x116 ARM Flash Debug/../../obj/main.o - .debug_info 0x00000170 0x5a ARM Flash Debug/../../obj/extflash.o - .debug_info 0x000001ca 0x106 ARM Flash Debug/../../obj/cstart.o - .debug_info 0x000002d0 0x54c ARM Flash Debug/../../obj/flash.o - .debug_info 0x0000081c 0x105 ARM Flash Debug/../../obj/cpu_comp.o - .debug_info 0x00000921 0x201 ARM Flash Debug/../../obj/can.o - .debug_info 0x00000b22 0x14f ARM Flash Debug/../../obj/cpu.o - .debug_info 0x00000c71 0x177 ARM Flash Debug/../../obj/nvm.o - .debug_info 0x00000de8 0xf2 ARM Flash Debug/../../obj/timer.o - .debug_info 0x00000eda 0x1e1 ARM Flash Debug/../../obj/uart.o - .debug_info 0x000010bb 0xb2 ARM Flash Debug/../../obj/assert.o - .debug_info 0x0000116d 0xc0 ARM Flash Debug/../../obj/backdoor.o - .debug_info 0x0000122d 0x88 ARM Flash Debug/../../obj/boot.o - .debug_info 0x000012b5 0x1d6 ARM Flash Debug/../../obj/com.o - .debug_info 0x0000148b 0x86 ARM Flash Debug/../../obj/cop.o - .debug_info 0x00001511 0x612 ARM Flash Debug/../../obj/xcp.o - -.debug_abbrev 0x00000000 0xc7a - .debug_abbrev 0x00000000 0x28 ARM Flash Debug/../../obj/hooks.o - .debug_abbrev 0x00000028 0xc5 ARM Flash Debug/../../obj/main.o - .debug_abbrev 0x000000ed 0x28 ARM Flash Debug/../../obj/extflash.o - .debug_abbrev 0x00000115 0x12 ARM Flash Debug/../../obj/cstart.o - .debug_abbrev 0x00000127 0x227 ARM Flash Debug/../../obj/flash.o - .debug_abbrev 0x0000034e 0xbc ARM Flash Debug/../../obj/cpu_comp.o - .debug_abbrev 0x0000040a 0x164 ARM Flash Debug/../../obj/can.o - .debug_abbrev 0x0000056e 0xaf ARM Flash Debug/../../obj/cpu.o - .debug_abbrev 0x0000061d 0xa3 ARM Flash Debug/../../obj/nvm.o - .debug_abbrev 0x000006c0 0x89 ARM Flash Debug/../../obj/timer.o - .debug_abbrev 0x00000749 0x11f ARM Flash Debug/../../obj/uart.o - .debug_abbrev 0x00000868 0x66 ARM Flash Debug/../../obj/assert.o - .debug_abbrev 0x000008ce 0x5b ARM Flash Debug/../../obj/backdoor.o - .debug_abbrev 0x00000929 0x3f ARM Flash Debug/../../obj/boot.o - .debug_abbrev 0x00000968 0x115 ARM Flash Debug/../../obj/com.o - .debug_abbrev 0x00000a7d 0x3f ARM Flash Debug/../../obj/cop.o - .debug_abbrev 0x00000abc 0x1be ARM Flash Debug/../../obj/xcp.o - -.debug_line 0x00000000 0x1463 - .debug_line 0x00000000 0x1d ARM Flash Debug/../../obj/hooks.o - .debug_line 0x0000001d 0x12f ARM Flash Debug/../../obj/main.o - .debug_line 0x0000014c 0x1d ARM Flash Debug/../../obj/extflash.o - .debug_line 0x00000169 0x13f ARM Flash Debug/../../obj/cstart.o - .debug_line 0x000002a8 0x2dd ARM Flash Debug/../../obj/flash.o - .debug_line 0x00000585 0x177 ARM Flash Debug/../../obj/cpu_comp.o - .debug_line 0x000006fc 0x11d ARM Flash Debug/../../obj/can.o - .debug_line 0x00000819 0x106 ARM Flash Debug/../../obj/cpu.o - .debug_line 0x0000091f 0x11e ARM Flash Debug/../../obj/nvm.o - .debug_line 0x00000a3d 0xfc ARM Flash Debug/../../obj/timer.o - .debug_line 0x00000b39 0x163 ARM Flash Debug/../../obj/uart.o - .debug_line 0x00000c9c 0x129 ARM Flash Debug/../../obj/assert.o - .debug_line 0x00000dc5 0x147 ARM Flash Debug/../../obj/backdoor.o - .debug_line 0x00000f0c 0xbc ARM Flash Debug/../../obj/boot.o - .debug_line 0x00000fc8 0x1c2 ARM Flash Debug/../../obj/com.o - .debug_line 0x0000118a 0xb0 ARM Flash Debug/../../obj/cop.o - .debug_line 0x0000123a 0x229 ARM Flash Debug/../../obj/xcp.o - -.debug_str 0x00000000 0xfc6 - .debug_str 0x00000000 0xe8 ARM Flash Debug/../../obj/hooks.o - 0x106 (size before relaxing) - .debug_str 0x000000e8 0x9e ARM Flash Debug/../../obj/main.o - 0x147 (size before relaxing) - .debug_str 0x00000186 0x65 ARM Flash Debug/../../obj/extflash.o - 0x109 (size before relaxing) - .debug_str 0x000001eb 0x258 ARM Flash Debug/../../obj/flash.o - 0x320 (size before relaxing) - .debug_str 0x00000443 0xcb ARM Flash Debug/../../obj/cpu_comp.o - 0x17a (size before relaxing) - .debug_str 0x0000050e 0x117 ARM Flash Debug/../../obj/can.o - 0x1e5 (size before relaxing) - .debug_str 0x00000625 0xc9 ARM Flash Debug/../../obj/cpu.o - 0x196 (size before relaxing) - .debug_str 0x000006ee 0xcb ARM Flash Debug/../../obj/nvm.o - 0x1a0 (size before relaxing) - .debug_str 0x000007b9 0xf0 ARM Flash Debug/../../obj/timer.o - 0x19f (size before relaxing) - .debug_str 0x000008a9 0x12b ARM Flash Debug/../../obj/uart.o - 0x204 (size before relaxing) - .debug_str 0x000009d4 0x94 ARM Flash Debug/../../obj/assert.o - 0x143 (size before relaxing) - .debug_str 0x00000a68 0xae ARM Flash Debug/../../obj/backdoor.o - 0x166 (size before relaxing) - .debug_str 0x00000b16 0x83 ARM Flash Debug/../../obj/boot.o - 0x127 (size before relaxing) - .debug_str 0x00000b99 0x142 ARM Flash Debug/../../obj/com.o - 0x220 (size before relaxing) - .debug_str 0x00000cdb 0x83 ARM Flash Debug/../../obj/cop.o - 0x127 (size before relaxing) - .debug_str 0x00000d5e 0x268 ARM Flash Debug/../../obj/xcp.o - 0x349 (size before relaxing) - -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e ARM Flash Debug/../../obj/hooks.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/main.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/extflash.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/flash.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/cpu_comp.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/can.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/cpu.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/nvm.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/timer.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/uart.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/assert.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/backdoor.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/boot.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/com.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/cop.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/xcp.o - -.ARM.attributes - 0x00000000 0x10 - .ARM.attributes - 0x00000000 0x10 ARM Flash Debug/../../obj/hooks.o - .ARM.attributes - 0x00000010 0x10 ARM Flash Debug/../../obj/main.o - .ARM.attributes - 0x00000020 0x10 ARM Flash Debug/../../obj/extflash.o - .ARM.attributes - 0x00000030 0x10 ARM Flash Debug/../../obj/cstart.o - .ARM.attributes - 0x00000040 0x10 ARM Flash Debug/../../obj/flash.o - .ARM.attributes - 0x00000050 0x10 ARM Flash Debug/../../obj/cpu_comp.o - .ARM.attributes - 0x00000060 0x10 ARM Flash Debug/../../obj/can.o - .ARM.attributes - 0x00000070 0x10 ARM Flash Debug/../../obj/cpu.o - .ARM.attributes - 0x00000080 0x10 ARM Flash Debug/../../obj/nvm.o - .ARM.attributes - 0x00000090 0x10 ARM Flash Debug/../../obj/timer.o - .ARM.attributes - 0x000000a0 0x10 ARM Flash Debug/../../obj/uart.o - .ARM.attributes - 0x000000b0 0x10 ARM Flash Debug/../../obj/assert.o - .ARM.attributes - 0x000000c0 0x10 ARM Flash Debug/../../obj/backdoor.o - .ARM.attributes - 0x000000d0 0x10 ARM Flash Debug/../../obj/boot.o - .ARM.attributes - 0x000000e0 0x10 ARM Flash Debug/../../obj/com.o - .ARM.attributes - 0x000000f0 0x10 ARM Flash Debug/../../obj/cop.o - .ARM.attributes - 0x00000100 0x10 ARM Flash Debug/../../obj/xcp.o - .ARM.attributes - 0x00000110 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - -.debug_frame 0x00000000 0x910 - .debug_frame 0x00000000 0x2c ARM Flash Debug/../../obj/main.o - .debug_frame 0x0000002c 0x16c ARM Flash Debug/../../obj/flash.o - .debug_frame 0x00000198 0x68 ARM Flash Debug/../../obj/cpu_comp.o - .debug_frame 0x00000200 0x68 ARM Flash Debug/../../obj/can.o - .debug_frame 0x00000268 0x84 ARM Flash Debug/../../obj/cpu.o - .debug_frame 0x000002ec 0xb8 ARM Flash Debug/../../obj/nvm.o - .debug_frame 0x000003a4 0x5c ARM Flash Debug/../../obj/timer.o - .debug_frame 0x00000400 0x90 ARM Flash Debug/../../obj/uart.o - .debug_frame 0x00000490 0x2c ARM Flash Debug/../../obj/assert.o - .debug_frame 0x000004bc 0x48 ARM Flash Debug/../../obj/backdoor.o - .debug_frame 0x00000504 0x48 ARM Flash Debug/../../obj/boot.o - .debug_frame 0x0000054c 0xb4 ARM Flash Debug/../../obj/com.o - .debug_frame 0x00000600 0x30 ARM Flash Debug/../../obj/cop.o - .debug_frame 0x00000630 0x80 ARM Flash Debug/../../obj/xcp.o - .debug_frame 0x000006b0 0x260 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - -.debug_loc 0x00000000 0xd40 - .debug_loc 0x00000000 0x20 ARM Flash Debug/../../obj/main.o - .debug_loc 0x00000020 0x4b6 ARM Flash Debug/../../obj/flash.o - .debug_loc 0x000004d6 0x66 ARM Flash Debug/../../obj/cpu_comp.o - .debug_loc 0x0000053c 0xcf ARM Flash Debug/../../obj/can.o - .debug_loc 0x0000060b 0x129 ARM Flash Debug/../../obj/cpu.o - .debug_loc 0x00000734 0x11f ARM Flash Debug/../../obj/nvm.o - .debug_loc 0x00000853 0x20 ARM Flash Debug/../../obj/timer.o - .debug_loc 0x00000873 0x107 ARM Flash Debug/../../obj/uart.o - .debug_loc 0x0000097a 0x46 ARM Flash Debug/../../obj/assert.o - .debug_loc 0x000009c0 0x40 ARM Flash Debug/../../obj/backdoor.o - .debug_loc 0x00000a00 0x40 ARM Flash Debug/../../obj/boot.o - .debug_loc 0x00000a40 0xef ARM Flash Debug/../../obj/com.o - .debug_loc 0x00000b2f 0x211 ARM Flash Debug/../../obj/xcp.o - -.debug_aranges 0x00000000 0x350 - .debug_aranges - 0x00000000 0x20 ARM Flash Debug/../../obj/main.o - .debug_aranges - 0x00000020 0x28 ARM Flash Debug/../../obj/cstart.o - .debug_aranges - 0x00000048 0x78 ARM Flash Debug/../../obj/flash.o - .debug_aranges - 0x000000c0 0x38 ARM Flash Debug/../../obj/cpu_comp.o - .debug_aranges - 0x000000f8 0x30 ARM Flash Debug/../../obj/can.o - .debug_aranges - 0x00000128 0x38 ARM Flash Debug/../../obj/cpu.o - .debug_aranges - 0x00000160 0x48 ARM Flash Debug/../../obj/nvm.o - .debug_aranges - 0x000001a8 0x38 ARM Flash Debug/../../obj/timer.o - .debug_aranges - 0x000001e0 0x40 ARM Flash Debug/../../obj/uart.o - .debug_aranges - 0x00000220 0x20 ARM Flash Debug/../../obj/assert.o - .debug_aranges - 0x00000240 0x28 ARM Flash Debug/../../obj/backdoor.o - .debug_aranges - 0x00000268 0x28 ARM Flash Debug/../../obj/boot.o - .debug_aranges - 0x00000290 0x50 ARM Flash Debug/../../obj/com.o - .debug_aranges - 0x000002e0 0x28 ARM Flash Debug/../../obj/cop.o - .debug_aranges - 0x00000308 0x48 ARM Flash Debug/../../obj/xcp.o - -.debug_ranges 0x00000000 0x268 - .debug_ranges 0x00000000 0x10 ARM Flash Debug/../../obj/main.o - .debug_ranges 0x00000010 0x20 ARM Flash Debug/../../obj/cstart.o - .debug_ranges 0x00000030 0x68 ARM Flash Debug/../../obj/flash.o - .debug_ranges 0x00000098 0x28 ARM Flash Debug/../../obj/cpu_comp.o - .debug_ranges 0x000000c0 0x20 ARM Flash Debug/../../obj/can.o - .debug_ranges 0x000000e0 0x28 ARM Flash Debug/../../obj/cpu.o - .debug_ranges 0x00000108 0x38 ARM Flash Debug/../../obj/nvm.o - .debug_ranges 0x00000140 0x28 ARM Flash Debug/../../obj/timer.o - .debug_ranges 0x00000168 0x30 ARM Flash Debug/../../obj/uart.o - .debug_ranges 0x00000198 0x10 ARM Flash Debug/../../obj/assert.o - .debug_ranges 0x000001a8 0x18 ARM Flash Debug/../../obj/backdoor.o - .debug_ranges 0x000001c0 0x18 ARM Flash Debug/../../obj/boot.o - .debug_ranges 0x000001d8 0x40 ARM Flash Debug/../../obj/com.o - .debug_ranges 0x00000218 0x18 ARM Flash Debug/../../obj/cop.o - .debug_ranges 0x00000230 0x38 ARM Flash Debug/../../obj/xcp.o diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.srec b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.srec deleted file mode 100644 index ef40be2a..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.srec +++ /dev/null @@ -1,492 +0,0 @@ -S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF -S113000018F09FE518F09FE514F09FE514F09FE5C4 -S113001014F09FE5885F20B9F0FF1FE50CF09FE521 -S113002040000000B4010000B8010000BC01000061 -S1070030C001000007 -S113003400000000000000000000000000000FE1C8 -S11300441F00C0E31B1080E301F02FE170D19FE592 -S1130054171080E301F02FE168D19FE5121080E3CB -S113006401F02FE160D19FE5111080E301F02FE14D -S113007458D19FE5131080E301F02FE150D19FE59F -S11300841F1080E301F02FE148D19FE548019FE56B -S113009448119FE548219FE52E0000EB44019FE5AC -S11300A444119FE544219FE52A0000EB40019FE5AC -S11300B440119FE540219FE5260000EB3C019FE5AC -S11300C43C119FE53C219FE5220000EB38019FE5AC -S11300D438119FE538219FE51E0000EB34019FE5AC -S11300E434119FE534219FE51A0000EB30019FE5AC -S11300F430119FE50020A0E3280000EB28019FE5D0 -S113010428119FE5001041E0080051E30020A0A35A -S1130114042080A4001080A5E4009FE5E4109FE57A -S1130124010050E10500000A042090E403002DE9D5 -S11301340FE0A0E112FF2FE10300BDE8F7FFFFEA9F -S11301440000A0E30010A0E3E4209FE50FE0A0E199 -S113015412FF2FE1FEFFFFEA010050E10EF0A001BF -S1130164012052E00EF0A001013080E1023083E16D -S1130174030013E30400001A043090E4043081E41F -S1130184042052E2FBFFFF1A0EF0A0E10130D0E498 -S11301940130C1E4012052E2FBFFFF1A0EF0A0E19A -S11301A4010050E10EF0A0010120C0E4FBFFFFEACE -S11301B4FEFFFFEAFEFFFFEAFEFFFFEAFEFFFFEA9F -S11301C4FEFFFFEA341100403411004034100040B3 -S11301D43411004034110040340F0040801E0000EC -S11301E43C02004040020040400200004002000083 -S11301F4301C0000841E00003411004034110040FF -S1130204301C0000301C0000301C0000301C0000B6 -S1130214301C0000301C0000301C0000301C0000A6 -S1130224801E0000400200403407004034070040B0 -S10F0234340B0040400200000000A0E178 -S113024004E02DE594309FE52220A0E38420C3E55B -S11302505510E0E38C10C3E55520A0E38C20C3E5E2 -S11302600100A0E38000C3E58C10C3E58C20C3E546 -S1130270B828D3E1010B12E3FCFFFF0A5C309FE5D1 -S11302800320A0E38020C3E55520E0E38C20C3E5F0 -S11302905520A0E38C20C3E50020A0E30020C3E5A3 -S11302A00420A0E30420C3E50220A0E30020C3E56A -S11302B00120A0E30021C3E51D3843E2002093E5BB -S11302C0052082E3002083E5042093E5012782E3EF -S11302D0042083E53D0300EB450300EBFDFFFFEA4B -S11302E000C01FE070402DE90060A0E150509FE580 -S11302F00040A0E39D0300EB003095E5060053E1C8 -S11303000800008A041095E5013083E0030056E1FB -S11303100400002A842084E024309FE5022183E045 -S11303200800D2E5040000EA014084E20C5085E2B2 -S1130330100054E3EEFFFF1AFF00A0E37040BDE895 -S11303401EFF2FE1301C000030402DE920D04DE28B -S11303500040A0E1000090E5E1FFFFEBFF0050E367 -S11303600000A0033700000A3230A0E30C308DE512 -S113037010008DE514008DE50130A0E300308DE51B -S11303807A0300EB0C008DE20D10A0E13A31E0E3BA -S11303900FE0A0E113FF2FE100309DE5000053E3DF -S11303A00000A0132700001A3330A0E30C308DE5C1 -S11303B00450A0E1043095E410308DE514508DE52F -S11303C0023CA0E318308DE584309FE51C308DE5B8 -S11303D00130A0E300308DE5640300EB0C008DE2F6 -S11303E00D10A0E13A31E0E30FE0A0E113FF2FE1AB -S11303F000309DE5000053E30000A0131100001A33 -S11304003830A0E30C308DE5003094E510308DE5F4 -S113041014508DE5023CA0E318308DE50130A0E3D3 -S113042000308DE5510300EB0C008DE20D10A0E1CE -S11304303A31E0E30FE0A0E113FF2FE100009DE576 -S1130440010070E20000A03320D08DE23040BDE80E -S11304501EFF2FE160EA000004E02DE5813BB0E1DE -S11304600000A0130700001A003090E5010053E1DA -S11304700100A0030300000A041080E4022CA0E39E -S1130480AD0100EB0100A0E304E09DE41EFF2FE1B9 -S113049030402DE90040A0E10150A0E150309FE53B -S11304A0030050E10500000A020A51E30500000AB6 -S11304B0A4FFFFEB000050E30300001A080000EA69 -S11304C030409FE5000000EA24409FE50400A0E1DD -S11304D00510A0E1DFFFFFEB000050E30040A003A4 -S11304E0000000EA0040A0E30400A0E13040BDE8C1 -S11304F01EFF2FE14002004044040040F0452DE976 -S11305000050A0E10140A0E10270A0E10360A0E17D -S1130510A1A4A0E18AA4A0E1003090E5010073E366 -S11305200400001A0A10A0E1CAFFFFEB000050E328 -S11305300000A0032000000A003095E50A0053E102 -S11305400500000A0500A0E10A10A0E1CFFFFFEBBF -S1130550005050E20000A0031700000A003095E5A7 -S1130560044063E0044084E2044085E050809FE559 -S113057002AC8AE2FD0200EB043085E2043063E061 -S1130580080053E10500009A0500A0E10A10A0E16B -S1130590BEFFFFEB005050E20600000A044085E273 -S11305A00130D7E40130C4E4016056E2F0FFFF1AE1 -S11305B00100A0E3000000EA0000A0E3F045BDE86C -S11305C01EFF2FE1FF0100000030E0E30C209FE557 -S11305D0003082E508209FE5003082E51EFF2FE110 -S11305E0440400404002004070402DE90040A0E176 -S11305F00150A0E10260A0E139FFFFEBFF0050E3EE -S11306000000A0030D00000A010044E2050080E0A0 -S113061033FFFFEBFF0050E30000A0030700000AD4 -S1130620A434A0E1100053E318009F0518009F159F -S11306300410A0E10620A0E10530A0E1AEFFFFEB2D -S11306407040BDE81EFF2FE140020040440400401A -S113065070402DE920D04DE20050A0E10160A0E1FE -S11306601FFFFFEB0040A0E1010045E2060080E02F -S11306701BFFFFEB0050A0E1FF0050E3FF00541309 -S11306800000A0033900000A050054E10000A08323 -S11306903600008A000054E30000A0033300000A7F -S11306A0100055E30000A0833000008A3230A0E33C -S11306B000308DE504408DE508508DE50130A0E360 -S11306C014308DE5A90200EB0D00A0E114108DE2B9 -S11306D03A31E0E30FE0A0E113FF2FE114309DE590 -S11306E0000053E30000A0132000001A3430A0E3FC -S11306F000308DE504408DE508508DE578309FE5A8 -S11307000C308DE50130A0E314308DE5970200EB49 -S11307100D00A0E114108DE23A31E0E30FE0A0E116 -S113072013FF2FE114309DE5000053E30000A013F4 -S11307300E00001A3530A0E300308DE504408DE54D -S113074008508DE50130A0E314308DE5870200EBFD -S11307500D00A0E114108DE23A31E0E30FE0A0E1D6 -S113076013FF2FE114009DE5010070E20000A033A7 -S113077020D08DE27040BDE81EFF2FE160EA00004A -S113078004E02DE504D04DE268309FE5003093E5A8 -S1130790010073E30100A0031300000A54309FE535 -S11307A0060093E9011082E00C2093E5021081E039 -S11307B0102093E5021081E0142093E5021081E0FB -S11307C01C2093E5021081E0202093E5023081E0B3 -S11307D0003063E204208DE2043022E518009FE536 -S11307E00410A0E30D20A0E17EFFFFEB04D08DE216 -S11307F004E09DE41EFF2FE14002004014200000AD -S1130800023AA0E3050093E8000082E0082093E5A3 -S1130810020080E00C2093E5020080E0102093E5C4 -S1130820020080E0142093E5020080E0182093E5A4 -S1130830020080E01C3093E5030080E0010070E2D8 -S11308400000A0331EFF2FE104E02DE548309FE5B2 -S1130850003093E5010073E30400000A38009FE5CB -S1130860B8FEFFEB000050E30000A0030800000AFC -S113087028309FE5003093E5010073E30100A003F5 -S11308800300000A14009FE5AEFEFFEB000090E2B7 -S11308900100A01304E09DE41EFF2FE1400200408C -S11308A044040040020AA0E31EFF2FE100000FE110 -S11308B01EFF2FE100F029E11EFF2FE104E02DE5EA -S11308C0F9FFFFEB800080E3F9FFFFEB04E09DE418 -S11308D01EFF2FE1F0472DE90220A0E3D0309FE571 -S11308E00020C3E5023983E20120A0E3002083E570 -S11308F00040A0E3104083E5084083E5B4A09FE5F1 -S1130900B4809FE5B4909FE50A30A0E10460F3E76A -S11309100170D3E5075086E0015085E2853265E039 -S1130920035185E00551A0E10800A0E10510A0E114 -S11309309E0400EB000050E30E00001A0800A0E142 -S11309400510A0E17D0300EB0008A0E12038A0E140 -S1130950010840E2200859E10600003A013043E270 -S1130960016046E2017047E2077AA0E1066887E188 -S1130970033086E1030000EA044084E2480054E3C3 -S1130980E0FFFF1A050000EA34209FE5143082E5F9 -S11309900030A0E3003082E5F047BDE81EFF2FE100 -S11309A020009FE5C410A0E3640100EB0030A0E345 -S11309B0F4FFFFEA00C003E0701D000060EA0000DD -S11309C0FF030000004004E0F01C000030402DE96B -S11309D00040A0E1FF5001E29C309FE51C3093E50C -S11309E0040013E394009F05D610A0035301000BE9 -S11309F00558A0E180309FE5305083E580209FE5D5 -S1130A00342083E50310D4E50220D4E50228A0E1D4 -S1130A10012C82E00110D4E5012482E00010D4E529 -S1130A20012082E0382083E50710D4E50620D4E5D0 -S1130A300228A0E1012C82E00510D4E5012482E023 -S1130A400410D4E5012082E03C2083E52120A0E3CA -S1130A50042083E51C3093E5080013E30400001A26 -S1130A6014409FE5C10100EB1C3094E5080013E33A -S1130A70FBFFFF0A3040BDE81EFF2FE1004004E009 -S1130A80F01C0000E107000094309FE51C3093E562 -S1130A90010013E30000A0031EFF2F0180309FE537 -S1130AA0242093E57C309FE5030052E11A00001AEC -S1130AB06C309FE5282093E50020C0E5282093E5CD -S1130AC02224A0E10120C0E5282093E52228A0E10A -S1130AD00220C0E5282093E5222CA0E10320C0E5F4 -S1130AE02C2093E50420C0E52C2093E52224A0E1EA -S1130AF00520C0E52C2093E52228A0E10620C0E5CE -S1130B002C2093E5222CA0E10720C0E50420A0E3DB -S1130B10042083E50100A0E31EFF2FE10000A0E311 -S1130B201EFF2FE1004004E06706000004E02DE50D -S1130B3061FFFFEB04E09DE41EFF2FE170402DE90F -S1130B400160A0E10228A0E12228B0E10900000A26 -S1130B500040A0E1010080E2012042E20258A0E14D -S1130B60255880E00130D6E40130C4E47F0100EB75 -S1130B70050054E1FAFFFF1A7040BDE81EFF2FE1A3 -S1130B8004E02DE51D0000EB000050E30C00000A1A -S1130B90410100EB3A0000EB1C0000EB0010A0E167 -S1130BA00101A0E34020A0E3E3FFFFEB0220A0E368 -S1130BB014309FE5402083E50131A0E30FE0A0E17C -S1130BC013FF2FE104E09DE41EFF2FE100C01FE0AE -S1130BD004E02DE57BFEFFEB04E09DE41EFF2FE126 -S1130BE004E02DE57FFEFFEB04E09DE41EFF2FE112 -S1130BF004E02DE595FEFFEB04E09DE41EFF2FE1EC -S1130C0004E02DE5FDFEFFEB04E09DE41EFF2FE173 -S1130C1004E02DE522FFFFEB04E09DE41EFF2FE13D -S1130C2004E02DE5D5FEFFEB000050E30000A00337 -S1130C3004FFFF1B04E09DE41EFF2FE130309FE51D -S1130C400020A0E3142083E5282083E524109FE5F9 -S1130C500C1083E50110A0E3041083E5081093E56C -S1130C6014309FE5001083E510309FE5002083E5F4 -S1130C701EFF2FE1004000E05FEA00004C06004048 -S1130C804806004014309FE50020A0E3042083E5DB -S1130C900C2083E5082083E5102083E51EFF2FE167 -S1130CA0004000E024309FE5082093E520109FE5F4 -S1130CB0000091E5000082E018309FE500C093E554 -S1130CC000006CE0000081E5002083E51EFF2FE1B9 -S1130CD0004000E0480600404C06004004E02DE5DA -S1130CE0EFFFFFEB08309FE5000093E504E09DE48F -S1130CF01EFF2FE1480600401C309FE51430D3E569 -S1130D00010013E310309F150030D3150030C015D7 -S1130D100100A0130000A0031EFF2FE100C000E0AB -S1130D2010402DE944309FE51430D3E5200013E34F -S1130D300000A0030B00000A30309FE50000C3E56B -S1130D401430D3E5200013E30100A0130500001ABA -S1130D5018409FE5050100EB1430D4E5200013E3AF -S1130D60FBFFFF0A0100A0E31040BDE81EFF2FE1D6 -S1130D7000C000E034309FE50020A0E30420C3E578 -S1130D800820C3E51420C3E57F10E0E30C10C3E59D -S1130D904110A0E30010C3E50420C3E50320A0E351 -S1130DA00C20C3E50720A0E30820C3E51EFF2FE1C4 -S1130DB000C000E0F0412DE90050A0E1FF4001E255 -S1130DC0400054E368009F859310A0835B00008B70 -S1130DD00400A0E1D1FFFFEB010050E350009F1598 -S1130DE09710A0135500001B0460A0E1000054E319 -S1130DF00D00000A0040A0E334709FE5A080A0E34A -S1130E00DA0000EB0400D5E7C4FFFFEB010050E378 -S1130E100700A0110810A0114800001B014084E243 -S1130E200438A0E1230856E1F4FFFF8AF041BDE84D -S1130E301EFF2FE1B81D000030402DE90050A0E155 -S1130E40E4309FE50030D3E5000053E31300001ABB -S1130E50D8009FE5A7FFFFEB010050E30000A013BB -S1130E602F00001AC4309FE50030D3E5000053E39F -S1130E700000A0032A00000A97FFFFEBB0309FE5B3 -S1130E80000083E50000A0E3A8309FE50000C3E56F -S1130E900120A0E390309FE50020C3E5200000EA94 -S1130EA090309FE50040D3E58C009FE5000084E08E -S1130EB090FFFFEB010050E31000001A014084E2B0 -S1130EC0FF2004E26C309FE50020C3E55C309FE521 -S1130ED00030D3E5020053E10000A0131000001A13 -S1130EE00500A0E150109FE513FFFFEB0020A0E3F5 -S1130EF034309FE50020C3E50100A0E3080000EAC8 -S1130F0075FFFFEB28309FE5003093E5643083E202 -S1130F10030050E10000A0930000A08308309F85E7 -S1130F200000C3853040BDE81EFF2FE19806004055 -S1130F30540600409C060040500600405506004000 -S1130F4004E02DE5890000EBFDFFFFEA04E02DE558 -S1130F50810000EB010050E30C00000A34309FE5EF -S1130F600030D3E5010053E30800001A5AFFFFEBF9 -S1130F7024309FE5003093E57D3F83E2030050E198 -S1130F800020A0230C309F250020C325FBFEFF2B4F -S1130F9004E09DE41EFF2FE1A0060040A4060040EB -S1130FA004E02DE50120A0E318309FE50020C3E50F -S1130FB049FFFFEB10309FE5000083E5E2FFFFEB04 -S1130FC004E09DE41EFF2FE1A0060040A4060040BB -S1130FD004E02DE5D4FEFFEB630000EB16FFFFEB0E -S1130FE0FAFEFFEB090000EBECFFFFEB04E09DE4ED -S1130FF01EFF2FE104E02DE55C0000EB28FFFFEB72 -S11310000E0000EBD0FFFFEB04E09DE41EFF2FE198 -S113101010402DE9630000EB2DFEFFEB18409FE527 -S11310200130A0E3003084E551FFFFEB0030A0E382 -S1131030003084E51040BDE81EFF2FE13C02004073 -S113104004E02DE548009FE58EFEFFEB010050E330 -S11310500400001A0120A0E338309FE5002083E556 -S11310602C009FE5640000EB24009FE571FFFFEB7B -S1131070010050E30400001A0020A0E314309FE5AF -S1131080002083E508009FE55B0000EB04E09DE49D -S11310901EFF2FE1A80600403C0200401EFF2FE186 -S11310A030402DE90040A0E10118A0E12158A0E161 -S11310B030309FE5003093E5010053E3FF10050253 -S11310C041FEFF0B1C309FE5003093E5000053E325 -S11310D0FF1005020400A00135FFFF0B410000EBE7 -S11310E03040BDE81EFF2FE13C0200402C309FE55C -S11310F0000093E5020050E30000A0031EFF2F014F -S1131100030050E30300000A010050E30800A003B9 -S11311104000A0131EFF2FE10000A0E31EFF2FE1FB -S11311203C0200402C309FE5000093E5020050E3B0 -S11311300000A0031EFF2F01030050E30300000A78 -S1131140010050E30800A0034000A0131EFF2FE19C -S11311500000A0E31EFF2FE13C02004004E02DE567 -S11311601A0000EB04E09DE41EFF2FE11EFF2FE1B7 -S11311701EFF2FE10020A0E304309FE50120C3E51A -S11311801EFF2FE1E806004014309FE50120E0E354 -S11311900320C3E50400C3E50220A0E3B424C3E1B3 -S11311A01EFF2FE1E80600401C309FE50020A0E36D -S11311B00020C3E5482083E54320C3E5B424C3E10C -S11311C00220C3E50120C3E51EFF2FE1E80600402D -S11311D00C309FE50000D3E5000090E20100A0136D -S11311E01EFF2FE1E80600400020A0E304309FE545 -S11311F04320C3E51EFF2FE1E806004030402DE9FF -S11312000040A0E10030D0E5FF0053E31500001AD0 -S1131210D7FFFFEB10459FE50150A0E30050C4E564 -S11312200030E0E30330C4E51030A0E30430C4E54B -S11312300030A0E30530C4E5ABFFFFEB0600C4E5D6 -S1131240B7FFFFEB0700C4E5B5FFFFEB2004A0E107 -S11312500800C4E50950C4E50A50C4E50830A0E319 -S1131260B434C4E11F0100EABC249FE50020D2E5A8 -S1131270010052E32A01001AC93043E2350053E366 -S113128003F19F97150100EA54150000E0160000D1 -S1131290E0160000D4160000E0160000E01600007E -S11312A0B8160000B01500007C16000044160000BB -S11312B0E0160000E0160000E0160000E016000052 -S11312C0E0160000E0160000E0160000E016000042 -S11312D0E0160000E0160000E0160000E016000032 -S11312E0E0160000E0160000E0160000E016000022 -S11312F0E0160000E0160000E0160000E016000012 -S1131300E0160000E0160000E0160000E016000001 -S1131310E0160000E0160000E0160000E0160000F1 -S1131320E0160000E0160000E0160000E0160000E1 -S11313303C140000BC130000601300001C140000E7 -S1131340E0160000E0160000E0160000AC140000F7 -S1131350E0160000F0140000FC140000301500003A -S11313600150D0E560FFFFEB010040E2000055E1D1 -S1131370020000DA2200A0E382FFFFEBD90000EABA -S1131380A4539FE5040085E2481095E50120D4E5C7 -S1131390E9FDFFEB0030E0E30330C5E50120D4E5CF -S11313A0483095E5033082E0483085E50130D4E5E6 -S11313B0013083E2B434C5E1CA0000EA0150D0E54B -S11313C049FFFFEB010040E2000055E1020000DAB2 -S11313D02200A0E36BFFFFEBC20000EA041094E5D7 -S11313E044539FE5481085E5040085E20120D4E5D7 -S11313F0D1FDFFEB0030E0E30330C5E50120D4E587 -S1131400483095E5033082E0483085E50130D4E585 -S1131410013083E2B434C5E1B20000EA08339FE549 -S11314200020E0E30320C3E5042090E5482083E5A1 -S11314300120A0E3B424C3E1AA0000EAE8329FE556 -S11314400020E0E30320C3E5481093E5043090E571 -S1131450000053E30020A0030500000A0020A0E3DD -S11314600100D1E4002082E0FF2002E2013053E2D7 -S1131470FAFFFF1AB0329FE50010A0E30720C3E58E -S11314800810C3E50910C3E5222CA0E10A20C3E536 -S11314900120A0E30420C3E50510C3E50610C3E55D -S11314A00820A0E3B424C3E18E0000EA78329FE56B -S11314B00020E0E30320C3E570229FE5482083E594 -S11314C00020A0E30420C3E50520C3E50620C3E50E -S11314D00710A0E30710C3E50820C3E50920C3E50E -S11314E00A20C3E50820A0E3B424C3E17D0000EA98 -S11314F00000A0E323FFFFEB7A0000EA28329FE517 -S11315000020E0E30320C3E50020A0E30420C3E5BA -S11315100110D3E50510C3E50620C3E50720C3E5A4 -S11315200820C3E50620A0E3B424C3E16D0000EA6B -S1131530F4419FE50030A0E30030C4E50CFFFFEB6D -S11315400030E0E30330C4E50130A0E3B434C4E187 -S1131550640000EAD0319FE5485093E5E2FEFFEBDA -S1131560011040E20500A0E1012084E29BFDFFEBB5 -S1131570000050E30200001A3100A0E301FFFFEB7A -S1131580580000EAA0419FE50030E0E30330C4E5E1 -S1131590485094E5D4FEFFEB015045E2000085E09D -S11315A0480084E50130A0E3B434C4E14D0000EA0E -S11315B00150D0E5CCFEFFEB020040E2000055E113 -S11315C0020000DA2200A0E3EEFEFFEB450000EA91 -S11315D054319FE50020E0E30320C3E50120A0E3AC -S11315E0B424C3E10110D4E5000051E30500001A5E -S11315F08AFDFFEB000050E33A00001A3100A0E33B -S1131600E0FEFFEB370000EA1C319FE5480093E55C -S1131610022084E271FDFFEB000050E30200001A97 -S11316203100A0E3D7FEFFEB2E0000EAF8309FE57F -S11316300110D4E5482093E5022081E0482083E5A9 -S1131640280000EAE0409FE50030E0E30330C4E511 -S11316500050A0E30450C4E50550C4E5A2FEFFEB2E -S11316600600C4E50750C4E50850C4E50950C4E5C4 -S11316700730A0E3B434C4E11A0000EAA8309FE5BF -S1131680480093E5041094E558FDFFEB000050E397 -S11316900200001A3100A0E3BAFEFFEB110000EAD9 -S11316A084309FE50020E0E30320C3E50120A0E3AC -S11316B0B424C3E10B0000EA30FDFFEB68309FE582 -S11316C00020E0E30320C3E50120A0E3B424C3E148 -S11316D0040000EA3100A0E3AAFEFFEB010000EAE7 -S11316E02000A0E3A7FEFFEB3C309FE54330D3E5A9 -S11316F0010053E31000A003A2FEFF0B28309FE576 -S1131700B414D3E10138A0E1000053E3040000DA8B -S113171014009FE50130A0E34330C0E5030080E2FC -S11317205EFEFFEB3040BDE81EFF2FE1E8060040FF -S1131730381E00000000000000000000000000004F -S1131740010030E15A00004A000010E1000060424C -S113175000107142A00351E1052071922700008A14 -S11317600130B0E10020B0E3010853E310208232DD -S11317700338A031010453E3082082320334A0313A -S1131780010253E3042082320332A031030113E344 -S1131790022082020331B0018330A0510120925211 -S11317A0F8C39FE5A3CCDCE7072052E21CC2A0E10A -S11317B09C0101E09C2080E0001071E20030B0E365 -S11317C09120A3E0030080E000C0B0E39123ACE0EB -S11317D00C0080E00030B0E3912CA3E0030080E033 -S11317E000C0B0E39123ACE00C0080E00030B0E333 -S11317F0912CA3E0010072E10300A0E01EFF2FE1A1 -S1131800040051E31B00009A00C0A0E10000B0E313 -S11318102C0151E11100008AAC0351E181C34C90C9 -S1131820800080922C0351E101C34C9040008092CF -S1131830AC0251E181C24C90200080922C0251E113 -S113184001C24C9010008092AC0151E181C14C90D6 -S1131850080080922C0151E101C14C900400809257 -S1131860AC0051E181C04C90020080920C0051E127 -S1131870010080921EFF2FE12001A0011EFF2F0115 -S1131880010051E30000A0331EFF2F91020051E339 -S1131890A000A0011EFF2F01AB20A0E3AA2C82E32D -S11318A0AA2882E3AA2482E3923080E0A000B0E177 -S11318B01EFF2FE1010011E100007042001071428F -S11318C0C00371E1052071922900008A0130B0E162 -S11318D00020B0E3010853E3102082320338A03122 -S11318E0010453E3082082320334A031010253E39C -S11318F0042082320332A031030113E30220820266 -S11319000331B0018330A051012092528CC29FE573 -S1131910A3CCDCE7000070E2072052E21CC2A0E185 -S11319209C0101E09C2080E0001071E20030B0E3F3 -S11319309120A3E0030080E000C0B0E39123ACE079 -S11319400C0080E00030B0E3912CA3E0030080E0C1 -S113195000C0B0E39123ACE00C0080E00030B0E3C1 -S1131960912CA3E0010072E10300A0E0000070E20A -S11319701EFF2FE1040051E31B00009A00C070E237 -S11319800000B0E32C0151E11100008AAC0351E1E5 -S113199081C34C90800040922C0351E101C34C90D0 -S11319A040004092AC0251E181C24C902000409230 -S11319B02C0251E101C24C9010004092AC0151E163 -S11319C081C14C90080040922C0151E101C14C901E -S11319D004004092AC0051E181C04C90020040925E -S11319E00C0051E1010040921EFF2FE10300800230 -S11319F04001A0011EFF2F01010051E30000A033AC -S1131A001EFF2F91020051E301008002C000A001DB -S1131A101EFF2F01AB20A0E3AA2C82E3AA2882E3B5 -S1131A20AA2482E3000070E2923080E0A000B0E1DA -S1131A30000070E21EFF2FE10000A0E10000A0E121 -S1131A40A00351E1053071922700008A0130B0E112 -S1131A500020B0E3010853E3102082320338A031A0 -S1131A60010453E3082082320334A031010253E31A -S1131A70042082320332A031030113E302208202E4 -S1131A800331B0018330A051012092520CC19FE573 -S1131A90A3CCDCE7072052E21CC2A0E19C0101E0D8 -S1131AA09C2080E0001071E20030B0E39120A3E0BC -S1131AB0030080E000C0B0E39123ACE00C0080E0C0 -S1131AC00030B0E3912CA3E0030080E000C0B0E359 -S1131AD09123ACE00C0080E00030B0E3912CA3E053 -S1131AE0010072E10300A0E01EFF2FE1040051E3B6 -S1131AF01B00009A00C0A0E10000B0E32C0151E1FA -S1131B001100008AAC0351E181C34C9080008092A3 -S1131B102C0351E101C34C9040008092AC0251E18E -S1131B2081C24C90200080922C0251E101C24C9061 -S1131B3010008092AC0151E181C14C900800809268 -S1131B402C0151E101C14C9004008092AC0051E1A0 -S1131B5081C04C90020080920C0051E101008092FF -S1131B601EFF2FE12001A0011EFF2F01010051E300 -S1131B700000A0331EFF2F91020051E3A000A0013A -S1131B801EFF2F01AB20A0E3AA2C82E3AA2882E344 -S1131B90AA2482E3923080E0A000B0E11EFF2FE18E -S1131BA0001E0000C046C046C046C046C046C046EF -S1131BB000402DE9050000EB0100A0E10040BDE874 -S1131BC01EFF2FE10000A0E10000A0E10000A0E161 -S1131BD0023111E20010714240C033E00000602283 -S1131BE00120B0E10E00000AA00052E18220A09181 -S1131BF0FCFFFF3A020050E10330A3E00200402062 -S1131C00010032E1A220A011F9FFFF1A0010A0E1A7 -S1131C100300A0E18CC0B0E100006022001061422A -S1131C201EFF2FE10000B0E31EFF2FE10000A0E142 -S1131C30002000000020000001000000004000001F -S1131C4000200000020000000060000000200000EE -S1131C5003000000008000000020000004000000D9 -S1131C6000A00000002000000500000000C00000EB -S1131C70002000000600000000E00000002000003A -S1131C80070000000000010000000100080000003F -S1131C900000020000000100090000000000030031 -S1131CA0002000000A0000000020030000200000C3 -S1131CB00B00000000400300002000000C000000A6 -S1131CC000600300002000000D00000000800300FD -S1131CD0002000000E00000000A00300002000000F -S1131CE00F00000000C003000020000010000000EE -S1131CF0433A2F576F726B2F736F667477617265F7 -S1131D002F4F70656E424C542F5461726765742F67 -S1131D1044656D6F2F41524D375F4C504332303024 -S1131D20305F4F6C696D65785F4C50435F4C323265 -S1131D3039345F43726F7373776F726B732F426FB3 -S1131D406F742F6964652F2E2E2F2E2E2F2E2E2F7B -S1131D502E2E2F536F757263652F41524D375F4C92 -S1131D605043323030302F63616E2E630000000028 -S1131D70050200000602000006030000070300003D -S1131D800803000009030000090400000A0400001D -S1131D900B0400000C0400000C0500000D050000FD -S1131DA00E0500000F0500000F06000010060000DD -S1131DB01007000010080000433A2F576F726B2F72 -S1131DC0736F6674776172652F4F70656E424C5401 -S1131DD02F5461726765742F44656D6F2F41524DA6 -S1131DE0375F4C5043323030305F4F6C696D6578EB -S1131DF05F4C50435F4C323239345F43726F7373BC -S1131E00776F726B732F426F6F742F6964652F2E17 -S1131E102E2F2E2E2F2E2E2F2E2E2F536F757263B4 -S1131E20652F41524D375F4C5043323030302F755F -S1131E306172742E630000004F70656E424C540052 -S1131E40FCF8F4F0EDEAE6E3E0DDDAD7D4D2CFCC67 -S1131E50CAC7C5C3C0BEBCBAB8B6B4B2B0AEACAAE9 -S1131E60A8A7A5A3A2A09F9D9C9A999796949392A4 -S1131E70908F8E8D8C8A89888786858483828180E1 -S1071E800400000056 -S9030040BC diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/blt_conf.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/blt_conf.h deleted file mode 100644 index e0b9634b..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/blt_conf.h +++ /dev/null @@ -1,175 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\blt_conf.h -* \brief Bootloader configuration header file. -* \ingroup Boot_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef BLT_CONF_H -#define BLT_CONF_H - -/**************************************************************************************** -* C P U D R I V E R C O N F I G U R A T I O N -****************************************************************************************/ -/* To properly initialize the baudrate clocks of the communication interface, typically - * the speed of the crystal oscillator and/or the speed at which the system runs is - * needed. Set these through configurables BOOT_CPU_XTAL_SPEED_KHZ and - * BOOT_CPU_SYSTEM_SPEED_KHZ, respectively. To enable data exchange with the host that is - * not dependent on the targets architecture, the byte ordering needs to be known. - * Setting BOOT_CPU_BYTE_ORDER_MOTOROLA to 1 selects big endian mode and 0 selects - * little endian mode. - * - * Set BOOT_CPU_USER_PROGRAM_START_HOOK to 1 if you would like a hook function to be - * called the moment the user program is about to be started. This could be used to - * de-initialize application specific parts, for example to stop blinking an LED, etc. - */ -/** \brief Frequency of the external crystal oscillator. */ -#define BOOT_CPU_XTAL_SPEED_KHZ (20000) -/** \brief Desired system speed. */ -#define BOOT_CPU_SYSTEM_SPEED_KHZ (60000) -/** \brief Motorola or Intel style byte ordering. */ -#define BOOT_CPU_BYTE_ORDER_MOTOROLA (0) -/** \brief Enable/disable hook function call right before user program start. */ -#define BOOT_CPU_USER_PROGRAM_START_HOOK (0) - - -/**************************************************************************************** -* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N -****************************************************************************************/ -/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE - * configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed - * in bits/second. Two CAN messages are reserved for communication with the host. The - * message identifier for sending data from the target to the host is configured with - * BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with - * BOOT_COM_CAN_RXMSG_ID. The maximum amount of data bytes in a message for data - * transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and - * BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more - * than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the - * CAN controller channel. - * - */ -/** \brief Enable/disable CAN transport layer. */ -#define BOOT_COM_CAN_ENABLE (1) -/** \brief Configure the desired CAN baudrate. */ -#define BOOT_COM_CAN_BAUDRATE (500000) -/** \brief Configure CAN message ID target->host. */ -#define BOOT_COM_CAN_TX_MSG_ID (0x7E1) -/** \brief Configure number of bytes in the target->host CAN message. */ -#define BOOT_COM_CAN_TX_MAX_DATA (8) -/** \brief Configure CAN message ID host->target. */ -#define BOOT_COM_CAN_RX_MSG_ID (0x667) -/** \brief Configure number of bytes in the host->target CAN message. */ -#define BOOT_COM_CAN_RX_MAX_DATA (8) -/** \brief Select the desired CAN peripheral as a zero based index. */ -#define BOOT_COM_CAN_CHANNEL_INDEX (0) - -/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE - * configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed - * in bits/second. The maximum amount of data bytes in a message for data transmission - * and reception is set through BOOT_COM_UART_TX_MAX_DATA and BOOT_COM_UART_RX_MAX_DATA, - * respectively. It is common for a microcontroller to have more than 1 UART interface - * on board. The zero-based BOOT_COM_UART_CHANNEL_INDEX selects the UART interface. - * - */ -/** \brief Enable/disable UART transport layer. */ -#define BOOT_COM_UART_ENABLE (1) -/** \brief Configure the desired communication speed. */ -#define BOOT_COM_UART_BAUDRATE (57600) -/** \brief Configure number of bytes in the target->host data packet. */ -#define BOOT_COM_UART_TX_MAX_DATA (64) -/** \brief Configure number of bytes in the host->target data packet. */ -#define BOOT_COM_UART_RX_MAX_DATA (64) -/** \brief Select the desired UART peripheral as a zero based index. */ -#define BOOT_COM_UART_CHANNEL_INDEX (0) - - -/**************************************************************************************** -* B A C K D O O R E N T R Y C O N F I G U R A T I O N -****************************************************************************************/ -/* It is possible to implement an application specific method to force the bootloader to - * stay active after a reset. Such a backdoor entry into the bootloader is desired in - * situations where the user program does not run properly and therefore cannot - * reactivate the bootloader. By enabling these hook functions, the application can - * implement the backdoor, which overrides the default backdoor entry that is programmed - * into the bootloader. When desired for security purposes, these hook functions can - * also be implemented in a way that disables the backdoor entry altogether. - */ -/** \brief Enable/disable the backdoor override hook functions. */ -#define BOOT_BACKDOOR_HOOKS_ENABLE (0) - - -/**************************************************************************************** -* N O N - V O L A T I L E M E M O R Y D R I V E R C O N F I G U R A T I O N -****************************************************************************************/ -/* The NVM driver typically supports erase and program operations of the internal memory - * present on the microcontroller. Through these hook functions the NVM driver can be - * extended to support additional memory types such as external flash memory and serial - * eeproms. The size of the internal memory in kilobytes is specified with configurable - * BOOT_NVM_SIZE_KB. If desired the internal checksum writing and verification method can - * be overridden with a application specific method by enabling configuration switch - * BOOT_NVM_CHECKSUM_HOOKS_ENABLE. - */ -/** \brief Enable/disable the NVM hook function for supporting additional memory devices. */ -#define BOOT_NVM_HOOKS_ENABLE (0) -/** \brief Configure the size of the default memory device (typically flash EEPROM). */ -#define BOOT_NVM_SIZE_KB (256) -/** \brief Enable/disable hooks functions to override the user program checksum handling. */ -#define BOOT_NVM_CHECKSUM_HOOKS_ENABLE (0) - - -/**************************************************************************************** -* W A T C H D O G D R I V E R C O N F I G U R A T I O N -****************************************************************************************/ -/* The COP driver cannot be configured internally in the bootloader, because its use - * and configuration is application specific. The bootloader does need to service the - * watchdog in case it is used. When the application requires the use of a watchdog, - * set BOOT_COP_HOOKS_ENABLE to be able to initialize and service the watchdog through - * hook functions. - */ -/** \brief Enable/disable the hook functions for controlling the watchdog. */ -#define BOOT_COP_HOOKS_ENABLE (0) - - -/**************************************************************************************** -* S E E D / K E Y S E C U R I T Y C O N F I G U R A T I O N -****************************************************************************************/ -/* A security mechanism can be enabled in the bootloader's XCP module by setting configu- - * rable BOOT_XCP_SEED_KEY_ENABLE to 1. Before any memory erase or programming - * operations can be performed, access to this resource need to be unlocked. - * In the Microboot settings on tab "XCP Protection" you need to specify a DLL that - * implements the unlocking algorithm. The demo programs are configured for the (simple) - * algorithm in "FeaserKey.dll". The source code for this DLL is available so it can be - * customized to your needs. - * During the unlock sequence, Microboot requests a seed from the bootloader, which is in - * the format of a byte array. Using this seed the unlock algorithm in the DLL computes - * a key, which is also a byte array, and sends this back to the bootloader. The - * bootloader then verifies this key to determine if programming and erase operations are - * permitted. - * After enabling this feature the hook functions XcpGetSeedHook() and XcpVerifyKeyHook() - * are called by the bootloader to obtain the seed and to verify the key, respectively. - */ -#define BOOT_XCP_SEED_KEY_ENABLE (0) - - -#endif /* BLT_CONF_H */ -/*********************************** end of blt_conf.h *********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/boot.dox b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/boot.dox deleted file mode 100644 index a7843c0c..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/boot.dox +++ /dev/null @@ -1,7 +0,0 @@ -/** -\defgroup Boot_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks Bootloader -\brief Bootloader. -\ingroup ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -*/ - - diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c deleted file mode 100644 index ad52d59e..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c +++ /dev/null @@ -1,653 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\extflash.c -* \brief Bootloader external flash driver source file. -* \ingroup Boot_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "boot.h" /* bootloader generic header */ - - -#if (BOOT_NVM_HOOKS_ENABLE > 0) -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -/** \brief Value for an invalid flash sector. */ -#define FLASH_INVALID_SECTOR (0xff) -/** \brief Value for an invalid flash address. */ -#define FLASH_INVALID_ADDRESS (0xffffffff) -/** \brief Standard size of a flash block for writing. */ -#define FLASH_WRITE_BLOCK_SIZE (512) -/** \brief Total numbers of sectors in array flashLayout[]. */ -#define FLASH_TOTAL_SECTORS (sizeof(flashLayout)/sizeof(flashLayout[0])) -/** \brief C3 Intel flash read array command. */ -#define FLASH_CMD_READ_ARRAY_MODE (0xFF) -/** \brief C3 Intel flash read id command. */ -#define FLASH_CMD_READ_ID_MODE (0x90) -/** \brief C3 Intel flash erase command. */ -#define FLASH_CMD_ERASE_MODE (0x20) -/** \brief C3 Intel flash read status command. */ -#define FLASH_CMD_READ_STATUS_MODE (0x70) -/** \brief C3 Intel flash change lock command. */ -#define FLASH_CMD_CHANGE_LOCK_MODE (0x60) -/** \brief C3 Intel flash unlock sector command. */ -#define FLASH_CMD_UNLOCK_SECTOR (0xD0) -/** \brief C3 Intel flash lock sector command. */ -#define FLASH_CMD_LOCK_SECTOR (0x01) -/** \brief C3 Intel flash program command. */ -#define FLASH_CMD_PROGRAM_MODE (0x40) -/** \brief C3 Intel flash erase confirm command. */ -#define FLASH_CMD_ERASE_CONFIRM (0xD0) -/** \brief C3 Intel flash clear status command. */ -#define FLASH_CMD_CLEAR_STATUS (0x50) -/** \brief C3 Intel flash lock bit. */ -#define FLASH_LOCK_BIT (0x01) -/** \brief C3 Intel flash status ready bit. */ -#define FLASH_STATUS_READY_BIT (0x80) -/** \brief C3 Intel flash locked error code. */ -#define FLASH_ERR_LOCKED (0x02) -/** \brief C3 Intel flash Vpp range error code. */ -#define FLASH_ERR_VPP_RANGE (0x08) -/** \brief C3 Intel flash program error code. */ -#define FLASH_ERR_PROGRAM (0x10) -/** \brief C3 Intel flash command sequence error code. */ -#define FLASH_ERR_CMD_SEQ (0x10) -/** \brief C3 Intel flash erase error code. */ -#define FLASH_ERR_ERASE (0x20) -/** \brief Flash erase timeout value. */ -#define FLASH_ERASE_TIMEOUT ((blt_int32u)5000000) -/** \brief Flash program timeout value. */ -#define FLASH_PROGRAM_TIMEOUT ((blt_int32u)1000000) -/** \brief Supported Intel C3 flash manufacturer ID. */ -#define FLASH_DEV_MAN_ID ((blt_int16u)0x0089) -/** \brief Supported Intel C3 flash device ID. */ -#define FLASH_DEV_ID ((blt_int16u)0x88c3) -/** \brief Offset for reading manufacturer ID. */ -#define FLASH_DEVINFO_MAN_ID ((blt_int16u)0x0000) -/** \brief Offset for reading device ID. */ -#define FLASH_DEVINFO_DEV_ID ((blt_int16u)0x0001) -/** \brief Offset for reading lock status. */ -#define FLASH_DEVINFO_LOCK_STATUS ((blt_int16u)0x0002) -/** \brief Runtime efficient macro for obtaining the manufacturer ID. */ -#define ExtFlashGetManID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \ - FLASH_DEVINFO_MAN_ID)) -/** \brief Runtime efficient macro for obtaining the device ID. */ -#define ExtFlashGetDevID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \ - FLASH_DEVINFO_DEV_ID)) -/** \brief Runtime efficient macro for obtaining the lock status. */ -#define ExtFlashGetLockStatus(base) (ExtFlashGetDeviceInfo(base, \ - FLASH_DEVINFO_LOCK_STATUS)) - - -/**************************************************************************************** -* Type definitions -****************************************************************************************/ -/** \brief Flash sector descriptor type. */ -typedef struct -{ - blt_addr sector_start; /**< sector start address */ - blt_int32u sector_size; /**< sector size in bytes */ - blt_int8u sector_num; /**< sector number */ -} tFlashSector; - -/** \brief Structure type for grouping flash block information. - * \details Programming is done per block of max FLASH_WRITE_BLOCK_SIZE. for this a - * flash block manager is implemented in this driver. this flash block manager - * depends on this flash block info structure. It holds the base address of - * the flash block and the data that should be programmed into the flash - * block. - */ -typedef struct -{ - blt_addr base_addr; /**< Base address for the flash operation.*/ - blt_int8u data[FLASH_WRITE_BLOCK_SIZE]; /**< Data array. */ -} tFlashBlockInfo; - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address); -static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr); -static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address, - blt_int8u *data, blt_int32u len); -static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block); -static blt_bool ExtFlashEraseSector(blt_addr sector_base); -static blt_int16u ExtFlashGetDeviceInfo(blt_addr block_base, blt_int16u info); -static void ExtFlashLockSector(blt_addr sector_base); -static void ExtFlashUnlockSector(blt_addr sector_base); -static blt_int8u ExtFlashGetSector(blt_addr address); - - -/**************************************************************************************** -* Local constant declarations -****************************************************************************************/ -/** \brief Array wit the layout of the flash memory. - * \details The current layout supports the 2MB external C3 Intel flash: - * - manufacturer id = 0x0089 - * - device id = 0x88c3 (16 Mbit bottom boot device) - * Note that what Intel calls a block in the user manual, is called a sector in this - * driver. - */ -static const tFlashSector flashLayout[] = -{ - { 0x80000000, 0x02000, 0}, /* flash sector 0 - 8 kbyte */ - { 0x80002000, 0x02000, 1}, /* flash sector 1 - 8 kbyte */ - { 0x80004000, 0x02000, 2}, /* flash sector 2 - 8 kbyte */ - { 0x80006000, 0x02000, 3}, /* flash sector 3 - 8 kbyte */ - { 0x80008000, 0x02000, 4}, /* flash sector 4 - 8 kbyte */ - { 0x8000A000, 0x02000, 5}, /* flash sector 5 - 8 kbyte */ - { 0x8000C000, 0x02000, 6}, /* flash sector 6 - 8 kbyte */ - { 0x8000E000, 0x02000, 7}, /* flash sector 7 - 8 kbyte */ - { 0x80010000, 0x10000, 8}, /* flash sector 8 - 64 kbyte */ - { 0x80020000, 0x10000, 9}, /* flash sector 9 - 64 kbyte */ - { 0x80030000, 0x10000, 10}, /* flash sector 10 - 64 kbyte */ - { 0x80040000, 0x10000, 11}, /* flash sector 11 - 64 kbyte */ - { 0x80050000, 0x10000, 12}, /* flash sector 12 - 64 kbyte */ - { 0x80060000, 0x10000, 13}, /* flash sector 13 - 64 kbyte */ - { 0x80070000, 0x10000, 14}, /* flash sector 14 - 64 kbyte */ - { 0x80080000, 0x10000, 15}, /* flash sector 15 - 64 kbyte */ - { 0x80090000, 0x10000, 16}, /* flash sector 16 - 64 kbyte */ - { 0x800A0000, 0x10000, 17}, /* flash sector 17 - 64 kbyte */ - { 0x800B0000, 0x10000, 18}, /* flash sector 18 - 64 kbyte */ - { 0x800C0000, 0x10000, 19}, /* flash sector 19 - 64 kbyte */ - { 0x800D0000, 0x10000, 20}, /* flash sector 20 - 64 kbyte */ - { 0x800E0000, 0x10000, 21}, /* flash sector 21 - 64 kbyte */ - { 0x800F0000, 0x10000, 22}, /* flash sector 22 - 64 kbyte */ - { 0x80100000, 0x10000, 23}, /* flash sector 23 - 64 kbyte */ - { 0x80110000, 0x10000, 24}, /* flash sector 24 - 64 kbyte */ - { 0x80120000, 0x10000, 25}, /* flash sector 25 - 64 kbyte */ - { 0x80130000, 0x10000, 26}, /* flash sector 26 - 64 kbyte */ - { 0x80140000, 0x10000, 27}, /* flash sector 27 - 64 kbyte */ - { 0x80150000, 0x10000, 28}, /* flash sector 28 - 64 kbyte */ - { 0x80160000, 0x10000, 29}, /* flash sector 29 - 64 kbyte */ - { 0x80170000, 0x10000, 30}, /* flash sector 30 - 64 kbyte */ - { 0x80180000, 0x10000, 31}, /* flash sector 31 - 64 kbyte */ - { 0x80190000, 0x10000, 32}, /* flash sector 32 - 64 kbyte */ - { 0x801A0000, 0x10000, 33}, /* flash sector 33 - 64 kbyte */ - { 0x801B0000, 0x10000, 34}, /* flash sector 34 - 64 kbyte */ - { 0x801C0000, 0x10000, 35}, /* flash sector 35 - 64 kbyte */ - { 0x801D0000, 0x10000, 36}, /* flash sector 36 - 64 kbyte */ - { 0x801E0000, 0x10000, 37}, /* flash sector 37 - 64 kbyte */ - { 0x801F0000, 0x10000, 38} /* flash sector 38 - 64 kbyte */ -}; - - -/**************************************************************************************** -* Local data declarations -****************************************************************************************/ -/** \brief Local variable with information about the flash block that is currently - * being operated on. - * \details The smallest amount of flash that can be programmed is - * FLASH_WRITE_BLOCK_SIZE. A flash block manager is implemented in this driver - * and stores info in this variable. Whenever new data should be flashed, it - * is first added to a RAM buffer, which is part of this variable. Whenever - * the RAM buffer, which has the size of a flash block, is full or data needs - * to be written to a different block, the contents of the RAM buffer are - * programmed to flash. The flash block manager requires some software - * overhead, yet results is faster flash programming because data is first - * harvested, ideally until there is enough to program an entire flash block, - * before the flash device is actually operated on. - */ -static tFlashBlockInfo blockInfo; - - -/************************************************************************************//** -** \brief Initializes the flash driver. -** \return none. -** -****************************************************************************************/ -void ExtFlashInit(void) -{ - /* init the flash block info struct by setting the address to an invalid address */ - blockInfo.base_addr = FLASH_INVALID_ADDRESS; - /* check the flash device identification */ - if ((ExtFlashGetManID() != FLASH_DEV_MAN_ID) || (ExtFlashGetDevID() != FLASH_DEV_ID)) - { - ASSERT_RT(BLT_FALSE); - } -} /*** end of ExtFlashInit ***/ - - -/************************************************************************************//** -** \brief Writes the data to flash. -** \param addr Start address. -** \param len Length in bytes. -** \param data Pointer to the data buffer. -** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BLT_NVM_ERROR is the write -** operation failed. -** -****************************************************************************************/ -blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data) -{ - /* make sure the addresses are within the flash device */ - if ( (ExtFlashGetSector(addr) == FLASH_INVALID_SECTOR) || \ - (ExtFlashGetSector(addr+len-1) == FLASH_INVALID_SECTOR) ) - { - return BLT_NVM_NOT_IN_RANGE; - } - - /* let the block manager handle it */ - if (ExtFlashAddToBlock(&blockInfo, addr, data, len) == BLT_FALSE) - { - return BLT_NVM_ERROR; - } - return BLT_NVM_OKAY; -} /*** end of FlashWrite ***/ - - -/************************************************************************************//** -** \brief Erases the flash memory. Note that this function also checks that no -** data is erased outside the flash memory region. -** \param addr Start address. -** \param len Length in bytes. -** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BLT_NVM_ERROR is the erase -** operation failed. -** -****************************************************************************************/ -blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len) -{ - blt_int8u first_sector; - blt_int8u last_sector; - blt_int8u sectorIdx; - - /* obtain the first and last sector number */ - first_sector = ExtFlashGetSector(addr); - last_sector = ExtFlashGetSector(addr+len-1); - /* check them */ - if ( (first_sector == FLASH_INVALID_SECTOR) || (last_sector == FLASH_INVALID_SECTOR) ) - { - return BLT_NVM_NOT_IN_RANGE; - } - /* erase the sectors one-by-one */ - for (sectorIdx = first_sector; sectorIdx <= last_sector; sectorIdx++) - { - /* keep the watchdog happy */ - CopService(); - /* erase the sector */ - if (ExtFlashEraseSector(flashLayout[sectorIdx].sector_start) == BLT_FALSE) - { - return BLT_NVM_ERROR; - } - } - /* done so return the result of the operation */ - return BLT_NVM_OKAY; -} /*** end of ExtFlashErase ***/ - - -/************************************************************************************//** -** \brief Finalizes the flash driver operations. -** \return BLT_TRUE is succesful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool ExtFlashDone(void) -{ - /* check if there is still data waiting to be programmed */ - if (blockInfo.base_addr != FLASH_INVALID_ADDRESS) - { - if (ExtFlashWriteBlock(&blockInfo) == BLT_FALSE) - { - return BLT_FALSE; - } - } - /* still here so all is okay */ - return BLT_TRUE; -} /*** end of ExtFlashDone ***/ - - -/************************************************************************************//** -** \brief Copies data currently in flash to the block->data and sets the -** base address. -** \param block Pointer to flash block info structure to operate on. -** \param address Base address of the block data. -** \return BLT_TRUE is succesful, BLT_FALSE otherwise. -** -****************************************************************************************/ -static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address) -{ - /* check address alignment */ - if ((address % FLASH_WRITE_BLOCK_SIZE) != 0) - { - return BLT_FALSE; - } - /* make sure that we are initializing a new block and not the same one */ - if (block->base_addr == address) - { - /* block already initialized, so nothing to do */ - return BLT_TRUE; - } - /* set the base address and copies the current data from flash */ - block->base_addr = address; - CpuMemCopy((blt_addr)block->data, address, FLASH_WRITE_BLOCK_SIZE); - return BLT_TRUE; -} /*** end of ExtFlashInitBlock ***/ - - -/************************************************************************************//** -** \brief Switches blocks by programming the current one and initializing the next. -** \param block Pointer to flash block info structure to operate on. -** \param base_addr Base address for the next block. -** \return The pointer of the block info struct that is no being used, or a NULL -** pointer in case of error. -** -****************************************************************************************/ -static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr) -{ - /* need to switch to a new block, so program the current one and init the next */ - if (ExtFlashWriteBlock(block) == BLT_FALSE) - { - return BLT_NULL; - } - /* initialize the new block when necessary */ - if (ExtFlashInitBlock(block, base_addr) == BLT_FALSE) - { - return BLT_NULL; - } - /* still here to all is okay */ - return block; -} /*** end of ExtFlashSwitchBlock ***/ - - -/************************************************************************************//** -** \brief Programming is done per block. This function adds data to the block -** that is currently collecting data to be written to flash. If the -** address is outside of the current block, the current block is written -** to flash an a new block is initialized. -** \param block Pointer to flash block info structure to operate on. -** \param address Flash destination address. -** \param data Pointer to the byte array with data. -** \param len Number of bytes to add to the block. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address, - blt_int8u *data, blt_int32u len) -{ - blt_addr current_base_addr; - blt_int8u *dst; - blt_int8u *src; - - /* determine the current base address */ - current_base_addr = (address/FLASH_WRITE_BLOCK_SIZE)*FLASH_WRITE_BLOCK_SIZE; - - /* make sure the blockInfo is not uninitialized */ - if (block->base_addr == FLASH_INVALID_ADDRESS) - { - /* initialize the blockInfo struct for the current block */ - if (ExtFlashInitBlock(block, current_base_addr) == BLT_FALSE) - { - return BLT_FALSE; - } - } - /* check if the new data fits in the current block */ - if (block->base_addr != current_base_addr) - { - /* need to switch to a new block, so program the current one and init the next */ - block = ExtFlashSwitchBlock(block, current_base_addr); - if (block == BLT_NULL) - { - return BLT_FALSE; - } - } - /* add the data to the current block, but check for block overflow */ - dst = &(block->data[address - block->base_addr]); - src = data; - do - { - /* keep the watchdog happy */ - CopService(); - /* buffer overflow? */ - if ((blt_addr)(dst-&(block->data[0])) >= FLASH_WRITE_BLOCK_SIZE) - { - /* need to switch to a new block, so program the current one and init the next */ - block = ExtFlashSwitchBlock(block, current_base_addr+FLASH_WRITE_BLOCK_SIZE); - if (block == BLT_NULL) - { - return BLT_FALSE; - } - /* reset destination pointer */ - dst = &(block->data[0]); - } - /* write the data to the buffer */ - *dst = *src; - /* update pointers */ - dst++; - src++; - /* decrement byte counter */ - len--; - } - while (len > 0); - /* still here so all is good */ - return BLT_TRUE; -} /*** end of ExtFlashAddToBlock ***/ - - -/************************************************************************************//** -** \brief Programs FLASH_WRITE_BLOCK_SIZE bytes to flash from the block->data array. -** \param block Pointer to flash block info structure to operate on. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block) -{ - volatile blt_int16u *pAddr; - volatile blt_int16u *pData; - blt_bool result = BLT_TRUE; - volatile blt_int32u timeout = 0; - - /* unlock the sector */ - ExtFlashUnlockSector(block->base_addr); - /* init pointer to valid address in the flash block */ - pAddr = (blt_int16u *)block->base_addr; - /* init pointer to start of block data */ - pData = (blt_int16u *)block->data; - /* program all block data 16-bits at a time */ - while ((blt_addr)pAddr < (block->base_addr+FLASH_WRITE_BLOCK_SIZE)) - { - /* keep the watchdog happy */ - CopService(); - /* issue program setup command */ - *pAddr = FLASH_CMD_PROGRAM_MODE; - /* write 16-bit data that is to be programmed to start programming operation */ - *pAddr = *pData; - /* check status register for completion */ - *pAddr = FLASH_CMD_READ_STATUS_MODE; - /* wait for completion or timeout */ - while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_PROGRAM_TIMEOUT) ) - { - timeout++; - } - /* check for possible errors */ - if ( (timeout >= FLASH_ERASE_TIMEOUT) || \ - ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_PROGRAM))!= 0) ) - { - result = BLT_FALSE; - } - /* clear the status register */ - *pAddr = FLASH_CMD_CLEAR_STATUS; - /* increment address and data pointers */ - pAddr++; - pData++; - } - /* lock the sector. this also switches back to read array mode */ - ExtFlashLockSector(block->base_addr); - /* inform the caller about the result */ - return result; -} /*** end of ExtFlashWriteBlock ***/ - - -/************************************************************************************//** -** \brief Erases the flash sector. -** \param sector_base Base address of the sector to erase. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -static blt_bool ExtFlashEraseSector(blt_addr sector_base) -{ - volatile blt_int16u *pAddr; - blt_bool result = BLT_TRUE; - volatile blt_int32u timeout = 0; - - /* unlock the sector */ - ExtFlashUnlockSector(sector_base); - /* init pointer to valid address in the flash sector */ - pAddr = (blt_int16u *)sector_base; - /* issue erase setup command */ - *pAddr = FLASH_CMD_ERASE_MODE; - /* issue erase confirm command */ - *pAddr = FLASH_CMD_ERASE_CONFIRM; - /* check status register for completion */ - *pAddr = FLASH_CMD_READ_STATUS_MODE; - /* wait for completion or timeout */ - while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_ERASE_TIMEOUT) ) - { - timeout++; - } - /* check for possible errors */ - if ( (timeout >= FLASH_ERASE_TIMEOUT) || \ - ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_ERASE))!= 0) ) - { - result = BLT_FALSE; - } - /* clear the status register */ - *pAddr = FLASH_CMD_CLEAR_STATUS; - /* lock the sector. this also switches back to read array mode */ - ExtFlashLockSector(sector_base); - /* inform the caller about the result */ - return result; -} /*** end of ExtFlashEraseSector ***/ - - -/************************************************************************************//** -** \brief Locks the flash sector. -** \param sector_base Base address of the sector to lock. -** \return none. -** -****************************************************************************************/ -static void ExtFlashLockSector(blt_addr sector_base) -{ - volatile blt_int16u *pAddr; - - /* no need to lock a sector that is already locked */ - if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0) - { - return; - } - /* init pointer to valid address in the flash sector */ - pAddr = (blt_int16u *)sector_base; - /* switch to change lock mode */ - *pAddr = FLASH_CMD_CHANGE_LOCK_MODE; - /* unlock the sector */ - *pAddr = FLASH_CMD_LOCK_SECTOR; - /* check that the sector is now actually locked */ - ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0); -} /*** end of ExtFlashLockSector ***/ - - -/************************************************************************************//** -** \brief Unlocks the flash sector. -** \param sector_base Base address of the sector to unlock. -** \return none. -** -****************************************************************************************/ -static void ExtFlashUnlockSector(blt_addr sector_base) -{ - volatile blt_int16u *pAddr; - - /* no need to unlock a sector that is already unlocked */ - if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0) - { - return; - } - /* init pointer to valid address in the flash sector */ - pAddr = (blt_int16u *)sector_base; - /* switch to change lock mode */ - *pAddr = FLASH_CMD_CHANGE_LOCK_MODE; - /* unlock the sector */ - *pAddr = FLASH_CMD_UNLOCK_SECTOR; - /* check that the sector is now actually unlocked */ - ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0); -} /*** end of ExtFlashUnlockSector ***/ - - -/************************************************************************************//** -** \brief Obtains device information from the flash device. -** \param sector_base Base address of the sector to get the info from. -** \param info Identifier to the type of info to obtain. -** \return Device info. -** -****************************************************************************************/ -static blt_int16u ExtFlashGetDeviceInfo(blt_addr sector_base, blt_int16u info) -{ - volatile blt_int16u *pAddr; - blt_int16u readData; - - /* init pointer to any valid address in the flash device */ - pAddr = (blt_int16u *)sector_base + info; - /* switch to read identifier mode */ - *pAddr = FLASH_CMD_READ_ID_MODE; - /* read the info */ - readData = *pAddr; - /* switch back to reading mode */ - *pAddr = FLASH_CMD_READ_ARRAY_MODE; - /* return the result */ - return readData; -} /*** end of ExtFlashGetDeviceInfo ***/ - - -/************************************************************************************//** -** \brief Determines the flash sector the address is in. -** \param address Address in the flash sector. -** \return Flash sector number or FLASH_INVALID_SECTOR -** -****************************************************************************************/ -static blt_int8u ExtFlashGetSector(blt_addr address) -{ - blt_int8u sectorIdx; - - /* search through the sectors to find the right one */ - for (sectorIdx = 0; sectorIdx < FLASH_TOTAL_SECTORS; sectorIdx++) - { - /* keep the watchdog happy */ - CopService(); - /* is the address in this sector? */ - if ( (address >= flashLayout[sectorIdx].sector_start) && \ - (address < (flashLayout[sectorIdx].sector_start + \ - flashLayout[sectorIdx].sector_size)) ) - { - /* return the sector number */ - return flashLayout[sectorIdx].sector_num; - } - } - /* still here so no valid sector found */ - return FLASH_INVALID_SECTOR; -} /*** end of ExtFlashGetSector ***/ -#endif - -/*********************************** end of extflash.c *********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h deleted file mode 100644 index f9bb9547..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h +++ /dev/null @@ -1,42 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\extflash.h -* \brief Bootloader external flash driver header file. -* \ingroup Boot_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef EXTFLASH_H -#define EXTFLASH_H - -#if (BOOT_NVM_HOOKS_ENABLE > 0) -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void ExtFlashInit(void); -blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data); -blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len); -blt_bool ExtFlashDone(void); -#endif - -#endif /* EXTFLASH_H */ -/*********************************** end of extflash.h *********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c deleted file mode 100644 index 0104cd90..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c +++ /dev/null @@ -1,296 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\hooks.c -* \brief Bootloader callback source file. -* \ingroup Boot_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "boot.h" /* bootloader generic header */ -#include "lpc2294.h" /* CPU register definitions */ - - -/**************************************************************************************** -* B A C K D O O R E N T R Y H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_BACKDOOR_HOOKS_ENABLE > 0) -/************************************************************************************//** -** \brief Initializes the backdoor entry option. -** \return none. -** -****************************************************************************************/ -void BackDoorInitHook(void) -{ - /* configure the button connected to P0.16 as a digital input */ - IO0DIR &= ~(1<<16); -} /*** end of BackDoorInitHook ***/ - - -/************************************************************************************//** -** \brief Checks if a backdoor entry is requested. -** \return BLT_TRUE if the backdoor entry is requested, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool BackDoorEntryHook(void) -{ - /* button P0.16 has a pullup, so will read high by default. enter backdoor only when - * this button is pressed. this is the case when it reads low */ - if ((IO0PIN & (1<<16)) == 0) - { - return BLT_TRUE; - } - return BLT_FALSE; -} /*** end of BackDoorEntryHook ***/ -#endif /* BOOT_BACKDOOR_HOOKS_ENABLE > 0 */ - - -/**************************************************************************************** -* C P U D R I V E R H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_CPU_USER_PROGRAM_START_HOOK > 0) -/************************************************************************************//** -** \brief Callback that gets called when the bootloader is about to exit and -** hand over control to the user program. This is the last moment that -** some final checking can be performed and if necessary prevent the -** bootloader from activiting the user program. -** \return BLT_TRUE if it is okay to start the user program, BLT_FALSE to keep -** keep the bootloader active. -** -****************************************************************************************/ -blt_bool CpuUserProgramStartHook(void) -{ - /* okay to start the user program */ - return BLT_TRUE; -} /*** end of CpuUserProgramStartHook ***/ -#endif /* BOOT_CPU_USER_PROGRAM_START_HOOK > 0 */ - - -/**************************************************************************************** -* N O N - V O L A T I L E M E M O R Y D R I V E R H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_NVM_HOOKS_ENABLE > 0) -#include "extflash.h" -/************************************************************************************//** -** \brief Callback that gets called at the start of the internal NVM driver -** initialization routine. -** \return none. -** -****************************************************************************************/ -void NvmInitHook(void) -{ - /* init the external flash driver */ - ExtFlashInit(); -} /*** end of NvmInitHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the start of a firmware update to reinitialize -** the NVM driver. -** \return none. -** -****************************************************************************************/ -void NvmReinitHook(void) -{ -} /*** end of NvmReinitHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the start of the NVM driver write -** routine. It allows additional memory to be operated on. If the address -** is not within the range of the additional memory, then -** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't -** been written yet. -** \param addr Start address. -** \param len Length in bytes. -** \param data Pointer to the data buffer. -** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BLT_NVM_ERROR is the write -** operation failed. -** -****************************************************************************************/ -blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) -{ - /* attempt to write with the external flash driver */ - return ExtFlashWrite(addr, len, data); -} /*** end of NvmWriteHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the start of the NVM driver erase -** routine. It allows additional memory to be operated on. If the address -** is not within the range of the additional memory, then -** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory -** hasn't been erased yet. -** \param addr Start address. -** \param len Length in bytes. -** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BLT_NVM_ERROR is the erase -** operation failed. -** -****************************************************************************************/ -blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len) -{ - /* attempt to erase with the external flash driver */ - return ExtFlashErase(addr, len); -} /*** end of NvmEraseHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the end of the NVM programming session. -** \return BLT_TRUE is successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool NvmDoneHook(void) -{ - /* finish up the operations of the external flash driver */ - return ExtFlashDone(); -} /*** end of NvmDoneHook ***/ -#endif /* BOOT_NVM_HOOKS_ENABLE > 0 */ - - -#if (BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0) -/************************************************************************************//** -** \brief Verifies the checksum, which indicates that a valid user program is -** present and can be started. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool NvmVerifyChecksumHook(void) -{ - return BLT_TRUE; -} /*** end of NvmVerifyChecksum ***/ - - -/************************************************************************************//** -** \brief Writes a checksum of the user program to non-volatile memory. This is -** performed once the entire user program has been programmed. Through -** the checksum, the bootloader can check if a valid user programming is -** present and can be started. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool NvmWriteChecksumHook(void) -{ - return BLT_TRUE; -} -#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */ - - -/**************************************************************************************** -* W A T C H D O G D R I V E R H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_COP_HOOKS_ENABLE > 0) -/************************************************************************************//** -** \brief Callback that gets called at the end of the internal COP driver -** initialization routine. It can be used to configure and enable the -** watchdog. -** \return none. -** -****************************************************************************************/ -void CopInitHook(void) -{ -} /*** end of CopInitHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the end of the internal COP driver -** service routine. This gets called upon initialization and during -** potential long lasting loops and routine. It can be used to service -** the watchdog to prevent a watchdog reset. -** \return none. -** -****************************************************************************************/ -void CopServiceHook(void) -{ -} /*** end of CopServiceHook ***/ -#endif /* BOOT_COP_HOOKS_ENABLE > 0 */ - - -/**************************************************************************************** -* S E E D / K E Y S E C U R I T Y H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_XCP_SEED_KEY_ENABLE > 0) -/************************************************************************************//** -** \brief Provides a seed to the XCP master that will be used for the key -** generation when the master attempts to unlock the specified resource. -** Called by the GET_SEED command. -** \param resource Resource that the seed if requested for (XCP_RES_XXX). -** \param seed Pointer to byte buffer wher the seed will be stored. -** \return Length of the seed in bytes. -** -****************************************************************************************/ -blt_int8u XcpGetSeedHook(blt_int8u resource, blt_int8u *seed) -{ - /* request seed for unlocking ProGraMming resource */ - if ((resource & XCP_RES_PGM) != 0) - { - seed[0] = 0x55; - } - - /* return seed length */ - return 1; -} /*** end of XcpGetSeedHook ***/ - - -/************************************************************************************//** -** \brief Called by the UNLOCK command and checks if the key to unlock the -** specified resource was correct. If so, then the resource protection -** will be removed. -** \param resource resource to unlock (XCP_RES_XXX). -** \param key pointer to the byte buffer holding the key. -** \param len length of the key in bytes. -** \return 1 if the key was correct, 0 otherwise. -** -****************************************************************************************/ -blt_int8u XcpVerifyKeyHook(blt_int8u resource, blt_int8u *key, blt_int8u len) -{ - /* suppress compiler warning for unused parameter */ - len = len; - - /* the example key algorithm in "FeaserKey.dll" works as follows: - * - PGM will be unlocked if key = seed - 1 - */ - - /* check key for unlocking ProGraMming resource */ - if ((resource == XCP_RES_PGM) && (key[0] == (0x55-1))) - { - /* correct key received for unlocking PGM resource */ - return 1; - } - - /* still here so key incorrect */ - return 0; -} /*** end of XcpVerifyKeyHook ***/ -#endif /* BOOT_XCP_SEED_KEY_ENABLE > 0 */ - - - -/*********************************** end of hooks.c ************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp deleted file mode 100644 index f520e7db..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs deleted file mode 100644 index 8dad7215..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/readme.txt b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/readme.txt deleted file mode 100644 index a49767fb..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -Integrated Development Environment ----------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains -the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h deleted file mode 100644 index 07664a2d..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h +++ /dev/null @@ -1,404 +0,0 @@ -/**************************************************************************************** -| Description: NXP LPC2294 register definitions -| File Name: lpc2294.h -| -|---------------------------------------------------------------------------------------- -| C O P Y R I G H T -|---------------------------------------------------------------------------------------- -| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -| -|---------------------------------------------------------------------------------------- -| L I C E N S E -|---------------------------------------------------------------------------------------- -| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -| modify it under the terms of the GNU General Public License as published by the Free -| Software Foundation, either version 3 of the License, or (at your option) any later -| version. -| -| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -| PURPOSE. See the GNU General Public License for more details. -| -| You have received a copy of the GNU General Public License along with OpenBLT. It -| should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -| -****************************************************************************************/ -#ifndef LPC2294_H -#define LPC2294_H - - -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -/* EXTERNAL MEMORY CONTROLLER (EMC) */ -#define BCFG0 (*((volatile unsigned long *) 0xFFE00000)) /* lpc22xx only */ -#define BCFG1 (*((volatile unsigned long *) 0xFFE00004)) /* lpc22xx only */ -#define BCFG2 (*((volatile unsigned long *) 0xFFE00008)) /* lpc22xx only */ -#define BCFG3 (*((volatile unsigned long *) 0xFFE0000C)) /* lpc22xx only */ - -/* External Interrupts */ -#define EXTINT (*((volatile unsigned char *) 0xE01FC140)) -#define EXTWAKE (*((volatile unsigned char *) 0xE01FC144)) -#define EXTMODE (*((volatile unsigned char *) 0xE01FC148)) /* no in lpc210x*/ -#define EXTPOLAR (*((volatile unsigned char *) 0xE01FC14C)) /* no in lpc210x*/ - -/* SMemory mapping control. */ -#define MEMMAP (*((volatile unsigned long *) 0xE01FC040)) - -/* Phase Locked Loop (PLL) */ -#define PLLCON (*((volatile unsigned char *) 0xE01FC080)) -#define PLLCFG (*((volatile unsigned char *) 0xE01FC084)) -#define PLLSTAT (*((volatile unsigned short*) 0xE01FC088)) -#define PLLFEED (*((volatile unsigned char *) 0xE01FC08C)) - -/* Power Control */ -#define PCON (*((volatile unsigned char *) 0xE01FC0C0)) -#define PCONP (*((volatile unsigned long *) 0xE01FC0C4)) - -/* VPB Divider */ -#define VPBDIV (*((volatile unsigned char *) 0xE01FC100)) - -/* Memory Accelerator Module (MAM) */ -#define MAMCR (*((volatile unsigned char *) 0xE01FC000)) -#define MAMTIM (*((volatile unsigned char *) 0xE01FC004)) - -/* Vectored Interrupt Controller (VIC) */ -#define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) -#define VICFIQStatus (*((volatile unsigned long *) 0xFFFFF004)) -#define VICRawIntr (*((volatile unsigned long *) 0xFFFFF008)) -#define VICIntSelect (*((volatile unsigned long *) 0xFFFFF00C)) -#define VICIntEnable (*((volatile unsigned long *) 0xFFFFF010)) -#define VICIntEnClr (*((volatile unsigned long *) 0xFFFFF014)) -#define VICSoftInt (*((volatile unsigned long *) 0xFFFFF018)) -#define VICSoftIntClear (*((volatile unsigned long *) 0xFFFFF01C)) -#define VICProtection (*((volatile unsigned long *) 0xFFFFF020)) -#define VICVectAddr (*((volatile unsigned long *) 0xFFFFF030)) -#define VICDefVectAddr (*((volatile unsigned long *) 0xFFFFF034)) -#define VICVectAddr0 (*((volatile unsigned long *) 0xFFFFF100)) -#define VICVectAddr1 (*((volatile unsigned long *) 0xFFFFF104)) -#define VICVectAddr2 (*((volatile unsigned long *) 0xFFFFF108)) -#define VICVectAddr3 (*((volatile unsigned long *) 0xFFFFF10C)) -#define VICVectAddr4 (*((volatile unsigned long *) 0xFFFFF110)) -#define VICVectAddr5 (*((volatile unsigned long *) 0xFFFFF114)) -#define VICVectAddr6 (*((volatile unsigned long *) 0xFFFFF118)) -#define VICVectAddr7 (*((volatile unsigned long *) 0xFFFFF11C)) -#define VICVectAddr8 (*((volatile unsigned long *) 0xFFFFF120)) -#define VICVectAddr9 (*((volatile unsigned long *) 0xFFFFF124)) -#define VICVectAddr10 (*((volatile unsigned long *) 0xFFFFF128)) -#define VICVectAddr11 (*((volatile unsigned long *) 0xFFFFF12C)) -#define VICVectAddr12 (*((volatile unsigned long *) 0xFFFFF130)) -#define VICVectAddr13 (*((volatile unsigned long *) 0xFFFFF134)) -#define VICVectAddr14 (*((volatile unsigned long *) 0xFFFFF138)) -#define VICVectAddr15 (*((volatile unsigned long *) 0xFFFFF13C)) -#define VICVectCntl0 (*((volatile unsigned long *) 0xFFFFF200)) -#define VICVectCntl1 (*((volatile unsigned long *) 0xFFFFF204)) -#define VICVectCntl2 (*((volatile unsigned long *) 0xFFFFF208)) -#define VICVectCntl3 (*((volatile unsigned long *) 0xFFFFF20C)) -#define VICVectCntl4 (*((volatile unsigned long *) 0xFFFFF210)) -#define VICVectCntl5 (*((volatile unsigned long *) 0xFFFFF214)) -#define VICVectCntl6 (*((volatile unsigned long *) 0xFFFFF218)) -#define VICVectCntl7 (*((volatile unsigned long *) 0xFFFFF21C)) -#define VICVectCntl8 (*((volatile unsigned long *) 0xFFFFF220)) -#define VICVectCntl9 (*((volatile unsigned long *) 0xFFFFF224)) -#define VICVectCntl10 (*((volatile unsigned long *) 0xFFFFF228)) -#define VICVectCntl11 (*((volatile unsigned long *) 0xFFFFF22C)) -#define VICVectCntl12 (*((volatile unsigned long *) 0xFFFFF230)) -#define VICVectCntl13 (*((volatile unsigned long *) 0xFFFFF234)) -#define VICVectCntl14 (*((volatile unsigned long *) 0xFFFFF238)) -#define VICVectCntl15 (*((volatile unsigned long *) 0xFFFFF23C)) - -/* Pin Connect Block */ -#define PINSEL0 (*((volatile unsigned long *) 0xE002C000)) -#define PINSEL1 (*((volatile unsigned long *) 0xE002C004)) -#define PINSEL2 (*((volatile unsigned long *) 0xE002C014)) /* no in lpc210x*/ - -/* General Purpose Input/Output (GPIO) */ -#define IOPIN (*((volatile unsigned long *) 0xE0028000)) /* lpc210x only */ -#define IOSET (*((volatile unsigned long *) 0xE0028004)) /* lpc210x only */ -#define IODIR (*((volatile unsigned long *) 0xE0028008)) /* lpc210x only */ -#define IOCLR (*((volatile unsigned long *) 0xE002800C)) /* lpc210x only */ - -#define IO0PIN (*((volatile unsigned long *) 0xE0028000)) /* no in lpc210x*/ -#define IO0SET (*((volatile unsigned long *) 0xE0028004)) /* no in lpc210x*/ -#define IO0DIR (*((volatile unsigned long *) 0xE0028008)) /* no in lpc210x*/ -#define IO0CLR (*((volatile unsigned long *) 0xE002800C)) /* no in lpc210x*/ - -#define IO1PIN (*((volatile unsigned long *) 0xE0028010)) /* no in lpc210x*/ -#define IO1SET (*((volatile unsigned long *) 0xE0028014)) /* no in lpc210x*/ -#define IO1DIR (*((volatile unsigned long *) 0xE0028018)) /* no in lpc210x*/ -#define IO1CLR (*((volatile unsigned long *) 0xE002801C)) /* no in lpc210x*/ - -#define IO2PIN (*((volatile unsigned long *) 0xE0028020)) /* lpc22xx only */ -#define IO2SET (*((volatile unsigned long *) 0xE0028024)) /* lpc22xx only */ -#define IO2DIR (*((volatile unsigned long *) 0xE0028028)) /* lpc22xx only */ -#define IO2CLR (*((volatile unsigned long *) 0xE002802C)) /* lpc22xx only */ - -#define IO3PIN (*((volatile unsigned long *) 0xE0028030)) /* lpc22xx only */ -#define IO3SET (*((volatile unsigned long *) 0xE0028034)) /* lpc22xx only */ -#define IO3DIR (*((volatile unsigned long *) 0xE0028038)) /* lpc22xx only */ -#define IO3CLR (*((volatile unsigned long *) 0xE002803C)) /* lpc22xx only */ - -/* Universal Asynchronous Receiver Transmitter 0 (UART0) */ -#define U0RBR (*((volatile unsigned char *) 0xE000C000)) -#define U0THR (*((volatile unsigned char *) 0xE000C000)) -#define U0IER (*((volatile unsigned char *) 0xE000C004)) -#define U0IIR (*((volatile unsigned char *) 0xE000C008)) -#define U0FCR (*((volatile unsigned char *) 0xE000C008)) -#define U0LCR (*((volatile unsigned char *) 0xE000C00C)) -#define U0LSR (*((volatile unsigned char *) 0xE000C014)) -#define U0SCR (*((volatile unsigned char *) 0xE000C01C)) -#define U0DLL (*((volatile unsigned char *) 0xE000C000)) -#define U0DLM (*((volatile unsigned char *) 0xE000C004)) - -/* Universal Asynchronous Receiver Transmitter 1 (UART1) */ -#define U1RBR (*((volatile unsigned char *) 0xE0010000)) -#define U1THR (*((volatile unsigned char *) 0xE0010000)) -#define U1IER (*((volatile unsigned char *) 0xE0010004)) -#define U1IIR (*((volatile unsigned char *) 0xE0010008)) -#define U1FCR (*((volatile unsigned char *) 0xE0010008)) -#define U1LCR (*((volatile unsigned char *) 0xE001000C)) -#define U1MCR (*((volatile unsigned char *) 0xE0010010)) -#define U1LSR (*((volatile unsigned char *) 0xE0010014)) -#define U1MSR (*((volatile unsigned char *) 0xE0010018)) -#define U1SCR (*((volatile unsigned char *) 0xE001001C)) -#define U1DLL (*((volatile unsigned char *) 0xE0010000)) -#define U1DLM (*((volatile unsigned char *) 0xE0010004)) - -/* I2C (8/16 bit data bus) */ -#define I2CONSET (*((volatile unsigned long *) 0xE001C000)) -#define I2STAT (*((volatile unsigned long *) 0xE001C004)) -#define I2DAT (*((volatile unsigned long *) 0xE001C008)) -#define I2ADR (*((volatile unsigned long *) 0xE001C00C)) -#define I2SCLH (*((volatile unsigned long *) 0xE001C010)) -#define I2SCLL (*((volatile unsigned long *) 0xE001C014)) -#define I2CONCLR (*((volatile unsigned long *) 0xE001C018)) - -/* SPI (Serial Peripheral Interface) */ - /* only for lpc210x*/ -#define SPI_SPCR (*((volatile unsigned char *) 0xE0020000)) -#define SPI_SPSR (*((volatile unsigned char *) 0xE0020004)) -#define SPI_SPDR (*((volatile unsigned char *) 0xE0020008)) -#define SPI_SPCCR (*((volatile unsigned char *) 0xE002000C)) -#define SPI_SPINT (*((volatile unsigned char *) 0xE002001C)) - -#define S0PCR (*((volatile unsigned char *) 0xE0020000)) /* no in lpc210x*/ -#define S0PSR (*((volatile unsigned char *) 0xE0020004)) /* no in lpc210x*/ -#define S0PDR (*((volatile unsigned char *) 0xE0020008)) /* no in lpc210x*/ -#define S0PCCR (*((volatile unsigned char *) 0xE002000C)) /* no in lpc210x*/ -#define S0PINT (*((volatile unsigned char *) 0xE002001C)) /* no in lpc210x*/ - -#define S1PCR (*((volatile unsigned char *) 0xE0030000)) /* no in lpc210x*/ -#define S1PSR (*((volatile unsigned char *) 0xE0030004)) /* no in lpc210x*/ -#define S1PDR (*((volatile unsigned char *) 0xE0030008)) /* no in lpc210x*/ -#define S1PCCR (*((volatile unsigned char *) 0xE003000C)) /* no in lpc210x*/ -#define S1PINT (*((volatile unsigned char *) 0xE003001C)) /* no in lpc210x*/ - -/* CAN CONTROLLERS AND ACCEPTANCE FILTER */ -#define CAN1MOD (*((volatile unsigned long *) 0xE0044000)) /* All CAN Parts */ -#define CAN1CMR (*((volatile unsigned long *) 0xE0044004)) /* All CAN Parts */ -#define CAN1GSR (*((volatile unsigned long *) 0xE0044008)) /* All CAN Parts */ -#define CAN1ICR (*((volatile unsigned long *) 0xE004400C)) /* All CAN Parts */ -#define CAN1IER (*((volatile unsigned long *) 0xE0044010)) /* All CAN Parts */ -#define CAN1BTR (*((volatile unsigned long *) 0xE0044014)) /* All CAN Parts */ -#define CAN1EWL (*((volatile unsigned long *) 0xE0044018)) /* All CAN Parts */ -#define CAN1SR (*((volatile unsigned long *) 0xE004401C)) /* All CAN Parts */ -#define CAN1RFS (*((volatile unsigned long *) 0xE0044020)) /* All CAN Parts */ -#define CAN1RID (*((volatile unsigned long *) 0xE0044024)) /* All CAN Parts */ -#define CAN1RDA (*((volatile unsigned long *) 0xE0044028)) /* All CAN Parts */ -#define CAN1RDB (*((volatile unsigned long *) 0xE004402C)) /* All CAN Parts */ -#define CAN1TFI1 (*((volatile unsigned long *) 0xE0044030)) /* All CAN Parts */ -#define CAN1TID1 (*((volatile unsigned long *) 0xE0044034)) /* All CAN Parts */ -#define CAN1TDA1 (*((volatile unsigned long *) 0xE0044038)) /* All CAN Parts */ -#define CAN1TDB1 (*((volatile unsigned long *) 0xE004403C)) /* All CAN Parts */ -#define CAN1TFI2 (*((volatile unsigned long *) 0xE0044040)) /* All CAN Parts */ -#define CAN1TID2 (*((volatile unsigned long *) 0xE0044044)) /* All CAN Parts */ -#define CAN1TDA2 (*((volatile unsigned long *) 0xE0044048)) /* All CAN Parts */ -#define CAN1TDB2 (*((volatile unsigned long *) 0xE004404C)) /* All CAN Parts */ -#define CAN1TFI3 (*((volatile unsigned long *) 0xE0044050)) /* All CAN Parts */ -#define CAN1TID3 (*((volatile unsigned long *) 0xE0044054)) /* All CAN Parts */ -#define CAN1TDA3 (*((volatile unsigned long *) 0xE0044058)) /* All CAN Parts */ -#define CAN1TDB3 (*((volatile unsigned long *) 0xE004405C)) /* All CAN Parts */ - -#define CAN2MOD (*((volatile unsigned long *) 0xE0048000)) /* All CAN Parts */ -#define CAN2CMR (*((volatile unsigned long *) 0xE0048004)) /* All CAN Parts */ -#define CAN2GSR (*((volatile unsigned long *) 0xE0048008)) /* All CAN Parts */ -#define CAN2ICR (*((volatile unsigned long *) 0xE004800C)) /* All CAN Parts */ -#define CAN2IER (*((volatile unsigned long *) 0xE0048010)) /* All CAN Parts */ -#define CAN2BTR (*((volatile unsigned long *) 0xE0048014)) /* All CAN Parts */ -#define CAN2EWL (*((volatile unsigned long *) 0xE0048018)) /* All CAN Parts */ -#define CAN2SR (*((volatile unsigned long *) 0xE004801C)) /* All CAN Parts */ -#define CAN2RFS (*((volatile unsigned long *) 0xE0048020)) /* All CAN Parts */ -#define CAN2RID (*((volatile unsigned long *) 0xE0048024)) /* All CAN Parts */ -#define CAN2RDA (*((volatile unsigned long *) 0xE0048028)) /* All CAN Parts */ -#define CAN2RDB (*((volatile unsigned long *) 0xE004802C)) /* All CAN Parts */ -#define CAN2TFI1 (*((volatile unsigned long *) 0xE0048030)) /* All CAN Parts */ -#define CAN2TID1 (*((volatile unsigned long *) 0xE0048034)) /* All CAN Parts */ -#define CAN2TDA1 (*((volatile unsigned long *) 0xE0048038)) /* All CAN Parts */ -#define CAN2TDB1 (*((volatile unsigned long *) 0xE004803C)) /* All CAN Parts */ -#define CAN2TFI2 (*((volatile unsigned long *) 0xE0048040)) /* All CAN Parts */ -#define CAN2TID2 (*((volatile unsigned long *) 0xE0048044)) /* All CAN Parts */ -#define CAN2TDA2 (*((volatile unsigned long *) 0xE0048048)) /* All CAN Parts */ -#define CAN2TDB2 (*((volatile unsigned long *) 0xE004804C)) /* All CAN Parts */ -#define CAN2TFI3 (*((volatile unsigned long *) 0xE0048050)) /* All CAN Parts */ -#define CAN2TID3 (*((volatile unsigned long *) 0xE0048054)) /* All CAN Parts */ -#define CAN2TDA3 (*((volatile unsigned long *) 0xE0048058)) /* All CAN Parts */ -#define CAN2TDB3 (*((volatile unsigned long *) 0xE004805C)) /* All CAN Parts */ - -#define CAN3MOD (*((volatile unsigned long *) 0xE004C000)) /* lpc2194\lpc2294 only */ -#define CAN3CMR (*((volatile unsigned long *) 0xE004C004)) /* lpc2194\lpc2294 only */ -#define CAN3GSR (*((volatile unsigned long *) 0xE004C008)) /* lpc2194\lpc2294 only */ -#define CAN3ICR (*((volatile unsigned long *) 0xE004C00C)) /* lpc2194\lpc2294 only */ -#define CAN3IER (*((volatile unsigned long *) 0xE004C010)) /* lpc2194\lpc2294 only */ -#define CAN3BTR (*((volatile unsigned long *) 0xE004C014)) /* lpc2194\lpc2294 only */ -#define CAN3EWL (*((volatile unsigned long *) 0xE004C018)) /* lpc2194\lpc2294 only */ -#define CAN3SR (*((volatile unsigned long *) 0xE004C01C)) /* lpc2194\lpc2294 only */ -#define CAN3RFS (*((volatile unsigned long *) 0xE004C020)) /* lpc2194\lpc2294 only */ -#define CAN3RID (*((volatile unsigned long *) 0xE004C024)) /* lpc2194\lpc2294 only */ -#define CAN3RDA (*((volatile unsigned long *) 0xE004C028)) /* lpc2194\lpc2294 only */ -#define CAN3RDB (*((volatile unsigned long *) 0xE004C02C)) /* lpc2194\lpc2294 only */ -#define CAN3TFI1 (*((volatile unsigned long *) 0xE004C030)) /* lpc2194\lpc2294 only */ -#define CAN3TID1 (*((volatile unsigned long *) 0xE004C034)) /* lpc2194\lpc2294 only */ -#define CAN3TDA1 (*((volatile unsigned long *) 0xE004C038)) /* lpc2194\lpc2294 only */ -#define CAN3TDB1 (*((volatile unsigned long *) 0xE004C03C)) /* lpc2194\lpc2294 only */ -#define CAN3TFI2 (*((volatile unsigned long *) 0xE004C040)) /* lpc2194\lpc2294 only */ -#define CAN3TID2 (*((volatile unsigned long *) 0xE004C044)) /* lpc2194\lpc2294 only */ -#define CAN3TDA2 (*((volatile unsigned long *) 0xE004C048)) /* lpc2194\lpc2294 only */ -#define CAN3TDB2 (*((volatile unsigned long *) 0xE004C04C)) /* lpc2194\lpc2294 only */ -#define CAN3TFI3 (*((volatile unsigned long *) 0xE004C050)) /* lpc2194\lpc2294 only */ -#define CAN3TID3 (*((volatile unsigned long *) 0xE004C054)) /* lpc2194\lpc2294 only */ -#define CAN3TDA3 (*((volatile unsigned long *) 0xE004C058)) /* lpc2194\lpc2294 only */ -#define CAN3TDB3 (*((volatile unsigned long *) 0xE004C05C)) /* lpc2194\lpc2294 only */ - -#define CAN4MOD (*((volatile unsigned long *) 0xE0050000)) /* lpc2194\lpc2294 only */ -#define CAN4CMR (*((volatile unsigned long *) 0xE0050004)) /* lpc2194\lpc2294 only */ -#define CAN4GSR (*((volatile unsigned long *) 0xE0050008)) /* lpc2194\lpc2294 only */ -#define CAN4ICR (*((volatile unsigned long *) 0xE005000C)) /* lpc2194\lpc2294 only */ -#define CAN4IER (*((volatile unsigned long *) 0xE0050010)) /* lpc2194\lpc2294 only */ -#define CAN4BTR (*((volatile unsigned long *) 0xE0050014)) /* lpc2194\lpc2294 only */ -#define CAN4EWL (*((volatile unsigned long *) 0xE0050018)) /* lpc2194\lpc2294 only */ -#define CAN4SR (*((volatile unsigned long *) 0xE005001C)) /* lpc2194\lpc2294 only */ -#define CAN4RFS (*((volatile unsigned long *) 0xE0050020)) /* lpc2194\lpc2294 only */ -#define CAN4RID (*((volatile unsigned long *) 0xE0050024)) /* lpc2194\lpc2294 only */ -#define CAN4RDA (*((volatile unsigned long *) 0xE0050028)) /* lpc2194\lpc2294 only */ -#define CAN4RDB (*((volatile unsigned long *) 0xE005002C)) /* lpc2194\lpc2294 only */ -#define CAN4TFI1 (*((volatile unsigned long *) 0xE0050030)) /* lpc2194\lpc2294 only */ -#define CAN4TID1 (*((volatile unsigned long *) 0xE0050034)) /* lpc2194\lpc2294 only */ -#define CAN4TDA1 (*((volatile unsigned long *) 0xE0050038)) /* lpc2194\lpc2294 only */ -#define CAN4TDB1 (*((volatile unsigned long *) 0xE005003C)) /* lpc2194\lpc2294 only */ -#define CAN4TFI2 (*((volatile unsigned long *) 0xE0050040)) /* lpc2194\lpc2294 only */ -#define CAN4TID2 (*((volatile unsigned long *) 0xE0050044)) /* lpc2194\lpc2294 only */ -#define CAN4TDA2 (*((volatile unsigned long *) 0xE0050048)) /* lpc2194\lpc2294 only */ -#define CAN4TDB2 (*((volatile unsigned long *) 0xE005004C)) /* lpc2194\lpc2294 only */ -#define CAN4TFI3 (*((volatile unsigned long *) 0xE0050050)) /* lpc2194\lpc2294 only */ -#define CAN4TID3 (*((volatile unsigned long *) 0xE0050054)) /* lpc2194\lpc2294 only */ -#define CAN4TDA3 (*((volatile unsigned long *) 0xE0050058)) /* lpc2194\lpc2294 only */ -#define CAN4TDB3 (*((volatile unsigned long *) 0xE005005C)) /* lpc2194\lpc2294 only */ - - -#define CANTxSR (*((volatile unsigned long *) 0xE0040000)) /* ALL CAN Parts */ -#define CANRxSR (*((volatile unsigned long *) 0xE0040004)) /* ALL CAN Parts */ -#define CANMSR (*((volatile unsigned long *) 0xE0040008)) /* ALL CAN Parts */ - -#define CANAFMR (*((volatile unsigned char *) 0xE003C000)) /* ALL CAN Parts */ -#define CANSFF_sa (*((volatile unsigned short*) 0xE003C004)) /* ALL CAN Parts */ -#define CANSFF_GRP_sa (*((volatile unsigned short*) 0xE003C008)) /* ALL CAN Parts */ -#define CANEFF_sa (*((volatile unsigned short*) 0xE003C00C)) /* ALL CAN Parts */ -#define CANEFF_GRP_sa (*((volatile unsigned short*) 0xE003C010)) /* ALL CAN Parts */ -#define CANENDofTable (*((volatile unsigned short*) 0xE003C014)) /* ALL CAN Parts */ -#define CANLUTerrAd (*((volatile unsigned short*) 0xE003C018)) /* ALL CAN Parts */ -#define CANLUTerr (*((volatile unsigned char *) 0xE003C01C)) /* ALL CAN Parts */ - - -/* Timer 0 */ -#define T0IR (*((volatile unsigned long *) 0xE0004000)) -#define T0TCR (*((volatile unsigned long *) 0xE0004004)) -#define T0TC (*((volatile unsigned long *) 0xE0004008)) -#define T0PR (*((volatile unsigned long *) 0xE000400C)) -#define T0PC (*((volatile unsigned long *) 0xE0004010)) -#define T0MCR (*((volatile unsigned long *) 0xE0004014)) -#define T0MR0 (*((volatile unsigned long *) 0xE0004018)) -#define T0MR1 (*((volatile unsigned long *) 0xE000401C)) -#define T0MR2 (*((volatile unsigned long *) 0xE0004020)) -#define T0MR3 (*((volatile unsigned long *) 0xE0004024)) -#define T0CCR (*((volatile unsigned long *) 0xE0004028)) -#define T0CR0 (*((volatile unsigned long *) 0xE000402C)) -#define T0CR1 (*((volatile unsigned long *) 0xE0004030)) -#define T0CR2 (*((volatile unsigned long *) 0xE0004034)) -#define T0CR3 (*((volatile unsigned long *) 0xE0004038)) -#define T0EMR (*((volatile unsigned long *) 0xE000403C)) - -/* Timer 1 */ -#define T1IR (*((volatile unsigned long *) 0xE0008000)) -#define T1TCR (*((volatile unsigned long *) 0xE0008004)) -#define T1TC (*((volatile unsigned long *) 0xE0008008)) -#define T1PR (*((volatile unsigned long *) 0xE000800C)) -#define T1PC (*((volatile unsigned long *) 0xE0008010)) -#define T1MCR (*((volatile unsigned long *) 0xE0008014)) -#define T1MR0 (*((volatile unsigned long *) 0xE0008018)) -#define T1MR1 (*((volatile unsigned long *) 0xE000801C)) -#define T1MR2 (*((volatile unsigned long *) 0xE0008020)) -#define T1MR3 (*((volatile unsigned long *) 0xE0008024)) -#define T1CCR (*((volatile unsigned long *) 0xE0008028)) -#define T1CR0 (*((volatile unsigned long *) 0xE000802C)) -#define T1CR1 (*((volatile unsigned long *) 0xE0008030)) -#define T1CR2 (*((volatile unsigned long *) 0xE0008034)) -#define T1CR3 (*((volatile unsigned long *) 0xE0008038)) -#define T1EMR (*((volatile unsigned long *) 0xE000803C)) - -/* Pulse Width Modulator (PWM) */ -#define PWMIR (*((volatile unsigned long *) 0xE0014000)) -#define PWMTCR (*((volatile unsigned long *) 0xE0014004)) -#define PWMTC (*((volatile unsigned long *) 0xE0014008)) -#define PWMPR (*((volatile unsigned long *) 0xE001400C)) -#define PWMPC (*((volatile unsigned long *) 0xE0014010)) -#define PWMMCR (*((volatile unsigned long *) 0xE0014014)) -#define PWMMR0 (*((volatile unsigned long *) 0xE0014018)) -#define PWMMR1 (*((volatile unsigned long *) 0xE001401C)) -#define PWMMR2 (*((volatile unsigned long *) 0xE0014020)) -#define PWMMR3 (*((volatile unsigned long *) 0xE0014024)) -#define PWMMR4 (*((volatile unsigned long *) 0xE0014040)) -#define PWMMR5 (*((volatile unsigned long *) 0xE0014044)) -#define PWMMR6 (*((volatile unsigned long *) 0xE0014048)) -#define PWMPCR (*((volatile unsigned long *) 0xE001404C)) -#define PWMLER (*((volatile unsigned long *) 0xE0014050)) - -/* A/D CONVERTER */ -#define ADCR (*((volatile unsigned long *) 0xE0034000)) /* no in lpc210x*/ -#define ADDR (*((volatile unsigned long *) 0xE0034004)) /* no in lpc210x*/ - -/* Real Time Clock */ -#define ILR (*((volatile unsigned char *) 0xE0024000)) -#define CTC (*((volatile unsigned short*) 0xE0024004)) -#define CCR (*((volatile unsigned char *) 0xE0024008)) -#define CIIR (*((volatile unsigned char *) 0xE002400C)) -#define AMR (*((volatile unsigned char *) 0xE0024010)) -#define CTIME0 (*((volatile unsigned long *) 0xE0024014)) -#define CTIME1 (*((volatile unsigned long *) 0xE0024018)) -#define CTIME2 (*((volatile unsigned long *) 0xE002401C)) -#define SEC (*((volatile unsigned char *) 0xE0024020)) -#define MIN (*((volatile unsigned char *) 0xE0024024)) -#define HOUR (*((volatile unsigned char *) 0xE0024028)) -#define DOM (*((volatile unsigned char *) 0xE002402C)) -#define DOW (*((volatile unsigned char *) 0xE0024030)) -#define DOY (*((volatile unsigned short*) 0xE0024034)) -#define MONTH (*((volatile unsigned char *) 0xE0024038)) -#define YEAR (*((volatile unsigned short*) 0xE002403C)) -#define ALSEC (*((volatile unsigned char *) 0xE0024060)) -#define ALMIN (*((volatile unsigned char *) 0xE0024064)) -#define ALHOUR (*((volatile unsigned char *) 0xE0024068)) -#define ALDOM (*((volatile unsigned char *) 0xE002406C)) -#define ALDOW (*((volatile unsigned char *) 0xE0024070)) -#define ALDOY (*((volatile unsigned short*) 0xE0024074)) -#define ALMON (*((volatile unsigned char *) 0xE0024078)) -#define ALYEAR (*((volatile unsigned short*) 0xE002407C)) -#define PREINT (*((volatile unsigned short*) 0xE0024080)) -#define PREFRAC (*((volatile unsigned short*) 0xE0024084)) - -/* Watchdog */ -#define WDMOD (*((volatile unsigned char *) 0xE0000000)) -#define WDTC (*((volatile unsigned long *) 0xE0000004)) -#define WDFEED (*((volatile unsigned char *) 0xE0000008)) -#define WDTV (*((volatile unsigned long *) 0xE000000C)) - -#endif /* LPC2294_H */ -/*********************************** end of lpc2294.h **********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c deleted file mode 100644 index 4f79f95b..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c +++ /dev/null @@ -1,174 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\main.c -* \brief Bootloader application source file. -* \ingroup Boot_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "boot.h" /* bootloader generic header */ -#include "lpc2294.h" /* CPU register definitions */ - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -static void Init(void); - - -/************************************************************************************//** -** \brief This is the entry point for the bootloader application and is called -** by the reset interrupt vector after the C-startup routines executed. -** \return Program return code. -** -****************************************************************************************/ -int main(void) -{ - /* initialize the microcontroller */ - Init(); - /* initialize the bootloader */ - BootInit(); - /* start the infinite program loop */ - while (1) - { - /* run the bootloader task */ - BootTask(); - } - - /* program should never get here */ - return 0; -} /*** end of main ***/ - - -/************************************************************************************//** -** \brief Initializes the microcontroller. The Fpll is set to 60MHz and Fvpb is -** configured equal to Fpll. The GPIO pin of the status LED is configured -** as digital output. -** \return none. -** -****************************************************************************************/ -static void Init(void) -{ - blt_int8u m_sel; /* pll multiplier register value */ - static blt_int8u pll_dividers[] = { 1, 2, 4, 8 }; /* possible pll dividers */ - blt_int8u p_sel_cnt; /* loop counter to find p_sel */ - blt_int32u f_cco; /* current controller oscillator */ - - /* check that pll multiplier value will be in the range 1..32 */ - ASSERT_CT((BOOT_CPU_SYSTEM_SPEED_KHZ + ((BOOT_CPU_XTAL_SPEED_KHZ+1)/2)) / \ - BOOT_CPU_XTAL_SPEED_KHZ >= 1); - - ASSERT_CT((BOOT_CPU_SYSTEM_SPEED_KHZ + ((BOOT_CPU_XTAL_SPEED_KHZ+1)/2)) / \ - BOOT_CPU_XTAL_SPEED_KHZ <= 32); - - /* calculate MSEL: M = round(Fcclk / Fosc) */ - m_sel = (BOOT_CPU_SYSTEM_SPEED_KHZ + ((BOOT_CPU_XTAL_SPEED_KHZ+1)/2)) / \ - BOOT_CPU_XTAL_SPEED_KHZ; - /* value for the PLLCFG register is -1 */ - m_sel--; - - /* find PSEL value so that Fcco(= Fcclk * 2 * P) is in the 156000..320000 kHz range. */ - for (p_sel_cnt=0; p_sel_cnt= 156000) && (f_cco <= 320000) ) - { - /* found a valid pll divider value */ - break; - } - } - /* check that a valid value was found */ - ASSERT_RT(p_sel_cnt < (sizeof(pll_dividers)/sizeof(pll_dividers[0]))); - - /* set multiplier and divider values */ - PLLCFG = (p_sel_cnt << 5) | m_sel; - PLLFEED = 0xAA; - PLLFEED = 0x55; - /* enable the PLL */ - PLLCON = 0x1; - PLLFEED = 0xAA; - PLLFEED = 0x55; - /* wait for the PLL to lock to set frequency */ - while(!(PLLSTAT & 0x400)) { ; } - /* connect the PLL as the clock source */ - PLLCON = 0x3; - PLLFEED = 0xAA; - PLLFEED = 0x55; - /* enable MAM and set number of clocks used for Flash memory fetch. Recommended: - * Fcclk >= 60 MHz: 4 clock cycles - * Fcclk >= 40 MHz: 3 clock cycles - * Fcclk >= 20 MHz: 2 clock cycles - * Fcclk < 20 MHz: 1 clock cycle - */ - MAMCR = 0x0; -#if (BOOT_CPU_SYSTEM_SPEED_KHZ >= 60000) - MAMTIM = 4; -#elif (BOOT_CPU_SYSTEM_SPEED_KHZ >= 40000) - MAMTIM = 3; -#elif (BOOT_CPU_SYSTEM_SPEED_KHZ >= 20000) - MAMTIM = 2; -#else - MAMTIM = 1; -#endif - MAMCR = 0x2; - /* setting peripheral Clock (pclk) to System Clock (cclk) */ - VPBDIV = 0x1; -#if (BOOT_NVM_HOOKS_ENABLE > 0) - /* in this the external memory on the Olimex LPC-L2294 board is used so configure - * the memory banks for the external flash EEPROM and RAM - */ - /* external flash EEPROM: - * IDCY=3 (idle timing) - * WST1=4 (read timing) - * RBLE=1 - * WST2=6 (write timing) - * MW=1 (16-bit data bus) - */ - BCFG0 = (0x3 << 0) | (0x4 << 5) | (0x1 << 10) | (0x6 << 11) | (0x1 << 28); - /* external RAM: - * IDCY=0 (idle timing) - * WST1=0 (read timing) - * RBLE=1 - * WST2=0 (write timing) - * MW=2 (32-bit data bus) - */ - BCFG1 = (0x0 << 0) | (0x0 << 5) | (0x1 << 10) | (0x0 << 11) | (0x2 << 28); - /* configure use of data bus and strobe pins for the external memory */ - PINSEL2 = 0x0F000924; -#endif -#if (BOOT_COM_UART_ENABLE > 0) - /* configure P0.0 for UART0 Tx and P0.1 for UART0 Rx functionality */ - PINSEL0 |= 0x05; -#endif -#if (BOOT_COM_CAN_ENABLE > 0) - /* configure P0.25 for CAN1 Rx functionality */ - PINSEL1 |= 0x00040000L; -#endif -} /*** end of Init ***/ - - -/*********************************** end of main.c *************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf deleted file mode 100644 index fa2b5b52a5938195bbabe5892c1ac7c7fc307f39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63181 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 z 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 diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map deleted file mode 100644 index ce9478b9..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map +++ /dev/null @@ -1,1487 +0,0 @@ -Archive member included because of file (symbol) - -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - ARM Flash Debug/../../obj/boot.o (__divsi3) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - ARM Flash Debug/../../obj/main.o (memcpy) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - (__vfprintf_int) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - (__vfscanf_int) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) (__getc) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - (__do_debug_operation_dcc) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) (__errno) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) (libarm_dcc_write) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) (libarm_run_dcc_port_server) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) (__floatsisf) - -Discarded input sections - - .text 0x00000000 0x0 ARM Flash Debug/../../obj/boot.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/boot.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/boot.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_abt 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_irq 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_fiq 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_svc 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .stack_und 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .heap 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/irq.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/irq.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/irq.o - .bss.oldInterruptStatus - 0x00000000 0x4 ARM Flash Debug/../../obj/irq.o - .bss.interruptNesting - 0x00000000 0x1 ARM Flash Debug/../../obj/irq.o - .text.IrqInterruptDisable - 0x00000000 0x84 ARM Flash Debug/../../obj/irq.o - .text.IrqInterruptRestore - 0x00000000 0x88 ARM Flash Debug/../../obj/irq.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/led.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/led.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/led.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/main.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/main.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/main.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o - .text 0x00000000 0x0 ARM Flash Debug/../../obj/vectors.o - .data 0x00000000 0x0 ARM Flash Debug/../../obj/vectors.o - .bss 0x00000000 0x0 ARM Flash Debug/../../obj/vectors.o - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r4 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r1 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r2 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r3 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r0 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r5 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_sp - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r7 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r8 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r9 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_sl - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_r6 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_lr - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_ip - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc._call_via_fp - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_umod - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_asr - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_div - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_lsl - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_lsr - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_mod - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_udivmod - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__aeabi_ldivmod - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_cmp - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int64_ucmp - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.muldi3 - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__int32_umod - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__aeabi_uidivmod - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.ctl_count_leading_zeros_32 - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.ctl_count_leading_zeros_16 - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_shi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_si - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_sqi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_uhi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc.__gnu_thumb1_case_uqi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .text.libc.longjmp - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .text.libc.memcpy_fast - 0x00000000 0x400 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .text.libc.memcpy_small - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .text.libc.memset - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .text.libc.__aeabi_memset - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .text.libc.setjmp - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .text.libc.strcpy - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .text.libc.strcmp - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.twodigit - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.month_name - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.checked_day_name - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.put_ch - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.put_str - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.put_nstr - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.put_digit - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.put_twodigit - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.put_twodigits_leading_blank - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.put_twodigit2 - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.put_formatted - 0x00000000 0x5b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.__RAL_pow10 - 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.__stdin_ungetc - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.__xlltoa - 0x00000000 0xc8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.__xltoa - 0x00000000 0x9c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.__xtoa - 0x00000000 0x9c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.abs - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.asctime_r - 0x00000000 0x144 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.asctime - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.atexit - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc._execute_at_exit_fns - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.bsearch - 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ctl_is_exact_power_of_two - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ctl_round_power_of_two - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ctl_count_leading_zeroes - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ctl_ilogb - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.buddy_alloc - 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.buddy_free - 0x00000000 0x174 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.buddy_heap_init - 0x00000000 0x108 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.isalpha - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.isxdigit - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.__strtoull - 0x00000000 0x1b0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.__strtoul - 0x00000000 0x148 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ispunct - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.isalnum - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.isprint - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.isgraph - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.iscntrl - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.tolower - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.toupper - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.isblank - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.div - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.itoa - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.labs - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ldiv - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.linked_heap_init - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.linked_heap_alloc - 0x00000000 0x130 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.linked_heap_free - 0x00000000 0x160 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.linked_heap_realloc - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.llabs - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.lldiv - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.lltoa - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.localeconv - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.setlocale - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ltoa - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.malloc - 0x00000000 0xe0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.calloc - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.free - 0x00000000 0xfc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.realloc - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.memccpy - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.mempcpy - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.memchr - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.memcmp - 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.memmove - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.qsort - 0x00000000 0x3f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.rand - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.snprintf - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.sprintf - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.srand - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.sscanf - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strcasecmp - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strcasestr - 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strcat - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strchr - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strcspn - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strdup - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strftime - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strncasecmp - 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strncasestr - 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strncat - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strlcat - 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strnchr - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strncmp - 0x00000000 0x9c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strncpy - 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strlcpy - 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strnlen - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strndup - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strnstr - 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strpbrk - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strrchr - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strsep - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strspn - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strstr - 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strtod - 0x00000000 0x250 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strtof - 0x00000000 0x220 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strtok - 0x00000000 0xdc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strtok_r - 0x00000000 0xd0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strtol - 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.atol - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.atoi - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.atof - 0x00000000 0x1dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strtoll - 0x00000000 0xf4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.atoll - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strtoul - 0x00000000 0xe8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.strtoull - 0x00000000 0x108 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.localtime_r - 0x00000000 0x200 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.difftime - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.checktm - 0x00000000 0x2f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.mktime - 0x00000000 0x224 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ctime - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ctime_r - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.gmtime - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.gmtime_r - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.localtime - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.gettimeofday - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.settimeofday - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ulltoa - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.ultoa - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.utoa - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.vsnprintf - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.vsprintf - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.vsscanf - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcscat - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcschr - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcscmp - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcscpy - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcscspn - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcslen - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsdup - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsncat - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsnchr - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsncmp - 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsncpy - 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsnlen - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsnstr - 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcspbrk - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsrchr - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcssep - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsspn - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcsstr - 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcstok - 0x00000000 0xdc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wcstok_r - 0x00000000 0xd0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wmemcpy - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wmemccpy - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wmempcpy - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wmemmove - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wmemcmp - 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wmemchr - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text.libc.wmemset - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .data.libc.heap - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .bss.libc.__crt_get_time_of_day - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.year_lengths - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.mon_name - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .bss.libc.last.2692 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .bss.libc.__atexitfns - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.invalid - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.str1.4 - 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .data.libc.__RAL_rand_next - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.power - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.__RAL_mon_lengths - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .bss.libc.last.3164 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.day_name - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.month_names - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .bss.libc.asctime_buf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.__ctype - 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .bss.libc.__crt_set_time_of_day - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .bss.libc.atexitfn_count - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .data.libc.__ungot - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .data.libc._lconv - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .bss.libc._tm 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .rodata.libc.day_names - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio - 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.__do_nvdebug_operation - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.__do_debug_operation_mempoll - 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_abort - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fopen - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fgets - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fputc - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fputs - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fread - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fwrite - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fseek - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_ftell - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_gets - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fflush - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fclose - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fgetc - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getchar - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_putchar - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_puts - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_rewind - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_clearerr - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_feof - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_ferror - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getch - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_time - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_vprintf - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_vfprintf - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_ungetc - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fgetpos - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_fsetpos - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_freopen - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_perror - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_remove - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_rename - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_tmpfile - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_tmpnam - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getenv - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_system - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_vfscanf - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_vscanf - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_exit - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_enabled - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_kbhit - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_ioctl - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_runtime_error - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_break - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getargs - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_geti - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getu - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getl - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getul - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getf - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getd - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getll - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_getull - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_filesize - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_accept - 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_bind - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_listen - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_shutdown - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_socket - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_htons - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_htonl - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_loadsymbols - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text.libdebugio.debug_unloadsymbols - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .bss.libdebugio.dbgCommWord - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .bss.libdebugio.getenv_buffer - 0x00000000 0x400 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .bss.libdebugio.__dbgEnabled - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .bss.libdebugio.tmpnam_buffer - 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .bss.libdebugio.dbgCntrlWord_mempoll - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .text.libc.__errno - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .text.libc.__heap_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .text.libc.__heap_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .text.libc.__printf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .text.libc.__printf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .text.libc.__scanf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .text.libc.__scanf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .bss.libc.errno - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .text.libarm 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .data.libarm 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .bss.libarm 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_disable_irq_fiq - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_isr_enable_disable_irq - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .init.libarm_mmu_initialise_level_1_table - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .init.libarm_mmu_set_level_1_descriptor_bits - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .init.libarm_mmu_set_level_2_small_page_descriptor_bits - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .init.libarm_mmu_map_section - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .init.libarm_mmu_flat_initialise_level_1_table - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .init.libarm_mmu_flat_initialise_level_2_small_page_table - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .init.libarm_mmu_flat_set_level_1_cacheable_region - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .init.libarm_mmu_flat_set_level_2_small_page_cacheable_region - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_restore_irq_fiq - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_set_fiq - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_set_irq - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_enable_irq - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_disable_irq - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_enable_fiq - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_disable_fiq - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_enable_irq_fiq - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_set_cpsr - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libarm.libarm_get_cpsr - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text.libdebugio_dcc.libarm_dcc_purge - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - .text.libarm 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__int32_to_float32 - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__int32_to_float64 - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__uint32_to_float32 - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__uint32_to_float64 - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__int64_to_float32 - 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__int64_to_float64 - 0x00000000 0xc0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__uint64_to_float32 - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__uint64_to_float64 - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_to_int32 - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_to_int64 - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_to_uint32 - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_to_uint64 - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_to_int32 - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_to_int64 - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_to_uint32 - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_to_uint64 - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_to_float64 - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_to_float32 - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_add - 0x00000000 0x1a0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_mul - 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_div - 0x00000000 0x210 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_cmp - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_fcmpeq - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_fcmplt - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_fcmple - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_fcmpge - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_fcmpgt - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_add - 0x00000000 0x350 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_mul - 0x00000000 0x1b0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_div - 0x00000000 0x330 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_cmp - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_dcmpeq - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_dcmplt - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_dcmple - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_dcmpge - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__aeabi_dcmpgt - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_signbit - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_signbit - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_isinf - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_isinf - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_isnan - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_isnan - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_isfinite - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_isfinite - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_isnormal - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_isnormal - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float32_classify - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .text.libc.__float64_classify - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .rodata.libc.__float32_infinity - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .rodata.libc.__float32_nan - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .rodata.libc.__float64_infinity - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - .rodata.libc.__float64_nan - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - -Memory Configuration - -Name Origin Length Attributes -UNPLACED_SECTIONS 0xffffffff 0x00000000 xw -AHB_Peripherals 0xffe00000 0x00200000 xw -VPB_Peripherals 0xe0000000 0x00200000 xw -BANK3 0x83000000 0x01000000 xw -BANK2 0x82000000 0x01000000 xw -External_SRAM 0x81000000 0x00100000 xw -External_FLASH 0x80000000 0x00200000 xr -SRAM 0x40000200 0x00003ce0 xw -FLASH 0x00002000 0x0003e000 xr -*default* 0x00000000 0xffffffff - -Linker script and memory map - - 0x0000459c __do_debug_operation = __do_debug_operation_dcc - 0x00003350 __vfprintf = __vfprintf_int - 0x00003e34 __vfscanf = __vfscanf_int - 0xffe00000 __AHB_Peripherals_segment_start__ = 0xffe00000 - 0x00000000 __AHB_Peripherals_segment_end__ = 0x0 - 0xe0000000 __VPB_Peripherals_segment_start__ = 0xe0000000 - 0xe0200000 __VPB_Peripherals_segment_end__ = 0xe0200000 - 0x83000000 __BANK3_segment_start__ = 0x83000000 - 0x84000000 __BANK3_segment_end__ = 0x84000000 - 0x82000000 __BANK2_segment_start__ = 0x82000000 - 0x83000000 __BANK2_segment_end__ = 0x83000000 - 0x81000000 __External_SRAM_segment_start__ = 0x81000000 - 0x81100000 __External_SRAM_segment_end__ = 0x81100000 - 0x80000000 __External_FLASH_segment_start__ = 0x80000000 - 0x80200000 __External_FLASH_segment_end__ = 0x80200000 - 0x40002000 __SRAM_segment_start__ = 0x40002000 - 0x40003ee0 __SRAM_segment_end__ = 0x40003ee0 - 0x00002000 __FLASH_segment_start__ = 0x2000 - 0x00040000 __FLASH_segment_end__ = 0x40000 - 0x00000400 __STACKSIZE__ = 0x400 - 0x00000100 __STACKSIZE_IRQ__ = 0x100 - 0x00000100 __STACKSIZE_FIQ__ = 0x100 - 0x00000100 __STACKSIZE_SVC__ = 0x100 - 0x00000100 __STACKSIZE_ABT__ = 0x100 - 0x00000100 __STACKSIZE_UND__ = 0x100 - 0x00000400 __HEAPSIZE__ = 0x400 - 0x80000000 __text2_load_start__ = ALIGN (__External_FLASH_segment_start__, 0x4) - -.text2 0x80000000 0x0 - 0x80000000 __text2_start__ = . - *(.text2 .text2.*) - 0x80000000 __text2_end__ = (__text2_start__ + SIZEOF (.text2)) - 0x80000000 __text2_load_end__ = __text2_end__ - 0x00000001 . = ASSERT (((__text2_end__ >= __External_FLASH_segment_start__) && (__text2_end__ <= (__External_FLASH_segment_start__ + 0x400000))), error: .text2 is too large to fit in External_FLASH memory segment) - 0x80000000 __rodata2_load_start__ = ALIGN (__text2_end__, 0x4) - -.rodata2 0x80000000 0x0 - 0x80000000 __rodata2_start__ = . - *(.rodata2 .rodata2.*) - 0x80000000 __rodata2_end__ = (__rodata2_start__ + SIZEOF (.rodata2)) - 0x80000000 __rodata2_load_end__ = __rodata2_end__ - 0x00000001 . = ASSERT (((__rodata2_end__ >= __External_FLASH_segment_start__) && (__rodata2_end__ <= (__External_FLASH_segment_start__ + 0x400000))), error: .rodata2 is too large to fit in External_FLASH memory segment) - 0x80000000 __data2_load_start__ = ALIGN (__rodata2_end__, 0x4) - -.data2 0x81000000 0x0 load address 0x80000000 - 0x81000000 __data2_start__ = . - *(.data2 .data2.*) - 0x81000000 __data2_end__ = (__data2_start__ + SIZEOF (.data2)) - 0x80000000 __data2_load_end__ = (__data2_load_start__ + SIZEOF (.data2)) - 0x80000000 __External_FLASH_segment_used_end__ = (ALIGN (__rodata2_end__, 0x4) + SIZEOF (.data2)) - 0x00000001 . = ASSERT ((((__data2_load_start__ + SIZEOF (.data2)) >= __External_FLASH_segment_start__) && ((__data2_load_start__ + SIZEOF (.data2)) <= (__External_FLASH_segment_start__ + 0x400000))), error: .data2 is too large to fit in External_FLASH memory segment) - -.data2_run 0x81000000 0x0 - 0x81000000 __data2_run_start__ = . - 0x81000000 . = MAX ((__data2_run_start__ + SIZEOF (.data2)), .) - 0x81000000 __data2_run_end__ = (__data2_run_start__ + SIZEOF (.data2_run)) - 0x81000000 __data2_run_load_end__ = __data2_run_end__ - 0x00000001 . = ASSERT (((__data2_run_end__ >= __External_SRAM_segment_start__) && (__data2_run_end__ <= (__External_SRAM_segment_start__ + 0x100000))), error: .data2_run is too large to fit in External_SRAM memory segment) - 0x81000000 __bss2_load_start__ = ALIGN (__data2_run_end__, 0x4) - -.bss2 0x81000000 0x0 - 0x81000000 __bss2_start__ = . - *(.bss2 .bss2.*) - 0x81000000 __bss2_end__ = (__bss2_start__ + SIZEOF (.bss2)) - 0x81000000 __bss2_load_end__ = __bss2_end__ - 0x81000000 __External_SRAM_segment_used_end__ = (ALIGN (__data2_run_end__, 0x4) + SIZEOF (.bss2)) - 0x00000001 . = ASSERT (((__bss2_end__ >= __External_SRAM_segment_start__) && (__bss2_end__ <= (__External_SRAM_segment_start__ + 0x100000))), error: .bss2 is too large to fit in External_SRAM memory segment) - 0x40002000 __vectors_ram_load_start__ = __SRAM_segment_start__ - -.vectors_ram 0x40002000 0x3c - 0x40002000 __vectors_ram_start__ = . - *(.vectors_ram .vectors_ram.*) - 0x4000203c . = MAX ((__vectors_ram_start__ + 0x3c), .) - *fill* 0x40002000 0x3c 00 - 0x4000203c __vectors_ram_end__ = (__vectors_ram_start__ + SIZEOF (.vectors_ram)) - 0x4000203c __vectors_ram_load_end__ = __vectors_ram_end__ - 0x00000001 . = ASSERT (((__vectors_ram_end__ >= __SRAM_segment_start__) && (__vectors_ram_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .vectors_ram is too large to fit in SRAM memory segment) - 0x00002000 __vectors_load_start__ = __FLASH_segment_start__ - -.vectors 0x00002000 0x38 - 0x00002000 __vectors_start__ = . - *(.vectors .vectors.*) - .vectors 0x00002000 0x38 ARM Flash Debug/../../obj/cstart.o - 0x00002000 _vectors - 0x00002038 __vectors_end__ = (__vectors_start__ + SIZEOF (.vectors)) - 0x00002038 __vectors_load_end__ = __vectors_end__ - 0x00000001 . = ASSERT (((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .vectors is too large to fit in FLASH memory segment) - 0x00002038 __init_load_start__ = ALIGN (__vectors_end__, 0x4) - -.init 0x00002038 0x218 - 0x00002038 __init_start__ = . - *(.init .init.*) - *fill* 0x00002038 0x8 00 - .init 0x00002040 0x210 ARM Flash Debug/../../obj/cstart.o - 0x00002040 undef_handler - 0x00002044 swi_handler - 0x00002048 pabort_handler - 0x0000204c dabort_handler - 0x00002050 fiq_handler - 0x00002054 irq_handler - 0x00002060 _start - 0x00002060 __start - 0x00002178 exit - 0x00002250 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x00002250 __init_load_end__ = __init_end__ - 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .init is too large to fit in FLASH memory segment) - 0x00002250 __text_load_start__ = ALIGN (__init_end__, 0x4) - -.text 0x00002250 0x2608 - 0x00002250 __text_start__ = . - *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs - .text.BootComInit - 0x00002250 0x34 ARM Flash Debug/../../obj/boot.o - 0x00002250 BootComInit - .text.BootComCheckActivationRequest - 0x00002284 0x34 ARM Flash Debug/../../obj/boot.o - 0x00002284 BootComCheckActivationRequest - .text.BootActivate - 0x000022b8 0x5c ARM Flash Debug/../../obj/boot.o - 0x000022b8 BootActivate - .text.BootComUartInit - 0x00002314 0xb8 ARM Flash Debug/../../obj/boot.o - .text.BootComUartCheckActivationRequest - 0x000023cc 0x108 ARM Flash Debug/../../obj/boot.o - .text.UartReceiveByte - 0x000024d4 0x64 ARM Flash Debug/../../obj/boot.o - .text.CanGetSpeedConfig - 0x00002538 0x19c ARM Flash Debug/../../obj/boot.o - .text.BootComCanInit - 0x000026d4 0x9c ARM Flash Debug/../../obj/boot.o - .text.BootComCanCheckActivationRequest - 0x00002770 0xbc ARM Flash Debug/../../obj/boot.o - .text.IrqGetCPSR - 0x0000282c 0x28 ARM Flash Debug/../../obj/irq.o - .text.IrqSetCPSR - 0x00002854 0x24 ARM Flash Debug/../../obj/irq.o - .text.IrqInterruptEnable - 0x00002878 0x48 ARM Flash Debug/../../obj/irq.o - 0x00002878 IrqInterruptEnable - .text.LedInit 0x000028c0 0x3c ARM Flash Debug/../../obj/led.o - 0x000028c0 LedInit - .text.LedToggle - 0x000028fc 0xb4 ARM Flash Debug/../../obj/led.o - 0x000028fc LedToggle - .text.main 0x000029b0 0x4c ARM Flash Debug/../../obj/main.o - 0x000029b0 main - .text.Init 0x000029fc 0x218 ARM Flash Debug/../../obj/main.o - .text.TimerInit - 0x00002c14 0x90 ARM Flash Debug/../../obj/timer.o - 0x00002c14 TimerInit - .text.TimerUpdate - 0x00002ca4 0x2c ARM Flash Debug/../../obj/timer.o - 0x00002ca4 TimerUpdate - .text.TimerSet - 0x00002cd0 0x2c ARM Flash Debug/../../obj/timer.o - 0x00002cd0 TimerSet - .text.TimerGet - 0x00002cfc 0x24 ARM Flash Debug/../../obj/timer.o - 0x00002cfc TimerGet - .text.TIMER0_ISR - 0x00002d20 0x44 ARM Flash Debug/../../obj/vectors.o - 0x00002d20 TIMER0_ISR - *fill* 0x00002d64 0xc 00 - .text.libc.__int32_div - 0x00002d70 0x470 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - 0x00002d70 __int32_div - 0x00002d70 __aeabi_idiv - 0x00002d70 __divsi3 - 0x00003070 __aeabi_uidiv - 0x00003070 __uint32_div - 0x00003070 __udivsi3 - .text.libc.__int32_mod - 0x000031e0 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - 0x000031e0 __modsi3 - 0x000031e0 __int32_mod - .text.libc.__aeabi_idivmod - 0x00003200 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - 0x00003200 __aeabi_idivmod - .text.libc.memcpy - 0x00003260 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - 0x00003260 __aeabi_memcpy - 0x00003260 __aeabi_memcpy4 - 0x00003260 __aeabi_memcpy8 - 0x00003260 memcpy - .text.libc.strlen - 0x000032c0 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - 0x000032c0 strlen - .text.libc.__vfprintf_int - 0x00003350 0x8d8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - 0x00003350 __vfprintf_int - .text.libc.__ungetc - 0x00003c28 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .text.libc.rd_int - 0x00003c68 0x1cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .text.libc.__vfscanf_int - 0x00003e34 0x5a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - 0x00003e34 __vfscanf_int - .text.libc.__getc - 0x000043d8 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x000043d8 __getc - .text.libc.__putc - 0x00004424 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x00004424 __putc - .text.libc.__print_padding - 0x00004490 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x00004490 __print_padding - .text.libc.__pre_padding - 0x000044cc 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x000044cc __pre_padding - .text.libc.isupper - 0x000044f4 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x000044f4 isupper - .text.libc.islower - 0x00004508 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x00004508 islower - .text.libc.isdigit - 0x0000451c 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x0000451c isdigit - .text.libc.__digit - 0x00004530 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x00004530 __digit - .text.libc.isspace - 0x00004584 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x00004584 isspace - .text.libdebugio.__do_debug_operation_dcc - 0x0000459c 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - 0x0000459c __do_debug_operation_dcc - .text.libc.__debug_io_lock - 0x000045dc 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - 0x000045dc __debug_io_lock - .text.libc.__debug_io_unlock - 0x000045e0 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - 0x000045e0 __debug_io_unlock - *fill* 0x000045e4 0xc 00 - .text.libdebugio_dcc.libarm_dcc_read - 0x000045f0 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - 0x000045f0 libarm_dcc_read - .text.libdebugio_dcc.libarm_dcc_write - 0x00004610 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - 0x00004610 libarm_dcc_write - .text.libarm.libarm_run_dcc_port_server - 0x00004630 0x228 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - 0x00004630 libarm_run_dcc_port_server - 0x00004858 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x00004858 __text_load_end__ = __text_end__ - -.vfp11_veneer 0x00000000 0x0 - .vfp11_veneer 0x00000000 0x0 linker stubs - -.v4_bx 0x00000000 0x0 - .v4_bx 0x00000000 0x0 linker stubs - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .text is too large to fit in FLASH memory segment) - 0x00004858 __dtors_load_start__ = ALIGN (__text_end__, 0x4) - -.dtors 0x00004858 0x0 - 0x00004858 __dtors_start__ = . - *(SORT(.dtors.*)) - *(.dtors) - 0x00004858 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x00004858 __dtors_load_end__ = __dtors_end__ - 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .dtors is too large to fit in FLASH memory segment) - 0x00004858 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) - -.ctors 0x00004858 0x0 - 0x00004858 __ctors_start__ = . - *(SORT(.ctors.*)) - *(.ctors) - 0x00004858 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x00004858 __ctors_load_end__ = __ctors_end__ - 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .ctors is too large to fit in FLASH memory segment) - 0x00004858 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) - -.rodata 0x00004858 0xb4 - 0x00004858 __rodata_start__ = . - *(.rodata .rodata.* .gnu.linkonce.r.*) - .rodata.canTiming - 0x00004858 0x48 ARM Flash Debug/../../obj/boot.o - .rodata 0x000048a0 0x4 ARM Flash Debug/../../obj/main.o - .rodata.libc.__aeabi_uidiv - 0x000048a4 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - 0x000048a4 __RAL_uidiv_inverse_lut - .rodata.libc.str1.4 - 0x000048e4 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .rodata.libc.__hex_lc - 0x000048ec 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x000048ec __hex_lc - .rodata.libc.__hex_uc - 0x000048fc 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x000048fc __hex_uc - 0x0000490c __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x0000490c __rodata_load_end__ = __rodata_end__ - 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .rodata is too large to fit in FLASH memory segment) - 0x0000490c __data_load_start__ = ALIGN (__rodata_end__, 0x4) - -.data 0x4000203c 0x0 load address 0x0000490c - 0x4000203c __data_start__ = . - *(.data .data.* .gnu.linkonce.d.*) - 0x4000203c __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x0000490c __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) - 0x00000001 . = ASSERT ((((__data_load_start__ + SIZEOF (.data)) >= __FLASH_segment_start__) && ((__data_load_start__ + SIZEOF (.data)) <= (__FLASH_segment_start__ + 0x40000))), error: .data is too large to fit in FLASH memory segment) - -.data_run 0x4000203c 0x0 - 0x4000203c __data_run_start__ = . - 0x4000203c . = MAX ((__data_run_start__ + SIZEOF (.data)), .) - 0x4000203c __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) - 0x4000203c __data_run_load_end__ = __data_run_end__ - 0x00000001 . = ASSERT (((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .data_run is too large to fit in SRAM memory segment) - 0x4000203c __bss_load_start__ = ALIGN (__data_run_end__, 0x4) - -.bss 0x4000203c 0x5c - 0x4000203c __bss_start__ = . - *(.bss .bss.* .gnu.linkonce.b.*) - .bss.xcpCtoRxInProgress.831 - 0x4000203c 0x1 ARM Flash Debug/../../obj/boot.o - *fill* 0x4000203d 0x3 00 - .bss.xcpCtoReqPacket.829 - 0x40002040 0x44 ARM Flash Debug/../../obj/boot.o - .bss.xcpCtoRxLength.830 - 0x40002084 0x1 ARM Flash Debug/../../obj/boot.o - *fill* 0x40002085 0x3 00 - .bss.timer_counter_last.810 - 0x40002088 0x4 ARM Flash Debug/../../obj/led.o - .bss.led_toggle_state.809 - 0x4000208c 0x1 ARM Flash Debug/../../obj/led.o - *fill* 0x4000208d 0x3 00 - .bss.millisecond_counter - 0x40002090 0x4 ARM Flash Debug/../../obj/timer.o - .bss.libc.__format_extender - 0x40002094 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x40002094 __format_extender - *(COMMON) - 0x40002098 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x40002098 __bss_load_end__ = __bss_end__ - 0x00000001 . = ASSERT (((__bss_end__ >= __SRAM_segment_start__) && (__bss_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .bss is too large to fit in SRAM memory segment) - 0x40002098 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) - -.non_init 0x40002098 0x0 - 0x40002098 __non_init_start__ = . - *(.non_init .non_init.*) - 0x40002098 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x40002098 __non_init_load_end__ = __non_init_end__ - 0x00000001 . = ASSERT (((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .non_init is too large to fit in SRAM memory segment) - 0x40002098 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) - -.heap 0x40002098 0x400 - 0x40002098 __heap_start__ = . - *(.heap .heap.*) - 0x40002498 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x40002098 0x400 00 - 0x40002498 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x40002498 __heap_load_end__ = __heap_end__ - 0x00000001 . = ASSERT (((__heap_end__ >= __SRAM_segment_start__) && (__heap_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .heap is too large to fit in SRAM memory segment) - 0x40002498 __stack_load_start__ = ALIGN (__heap_end__, 0x4) - -.stack 0x40002498 0x400 - 0x40002498 __stack_start__ = . - *(.stack .stack.*) - 0x40002898 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x40002498 0x400 00 - 0x40002898 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x40002898 __stack_load_end__ = __stack_end__ - 0x00000001 . = ASSERT (((__stack_end__ >= __SRAM_segment_start__) && (__stack_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack is too large to fit in SRAM memory segment) - 0x40002898 __stack_irq_load_start__ = ALIGN (__stack_end__, 0x4) - -.stack_irq 0x40002898 0x100 - 0x40002898 __stack_irq_start__ = . - *(.stack_irq .stack_irq.*) - 0x40002998 . = ALIGN (MAX ((__stack_irq_start__ + __STACKSIZE_IRQ__), .), 0x4) - *fill* 0x40002898 0x100 00 - 0x40002998 __stack_irq_end__ = (__stack_irq_start__ + SIZEOF (.stack_irq)) - 0x40002998 __stack_irq_load_end__ = __stack_irq_end__ - 0x00000001 . = ASSERT (((__stack_irq_end__ >= __SRAM_segment_start__) && (__stack_irq_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_irq is too large to fit in SRAM memory segment) - 0x40002998 __stack_fiq_load_start__ = ALIGN (__stack_irq_end__, 0x4) - -.stack_fiq 0x40002998 0x100 - 0x40002998 __stack_fiq_start__ = . - *(.stack_fiq .stack_fiq.*) - 0x40002a98 . = ALIGN (MAX ((__stack_fiq_start__ + __STACKSIZE_FIQ__), .), 0x4) - *fill* 0x40002998 0x100 00 - 0x40002a98 __stack_fiq_end__ = (__stack_fiq_start__ + SIZEOF (.stack_fiq)) - 0x40002a98 __stack_fiq_load_end__ = __stack_fiq_end__ - 0x00000001 . = ASSERT (((__stack_fiq_end__ >= __SRAM_segment_start__) && (__stack_fiq_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_fiq is too large to fit in SRAM memory segment) - 0x40002a98 __stack_svc_load_start__ = ALIGN (__stack_fiq_end__, 0x4) - -.stack_svc 0x40002a98 0x100 - 0x40002a98 __stack_svc_start__ = . - *(.stack_svc .stack_svc.*) - 0x40002b98 . = ALIGN (MAX ((__stack_svc_start__ + __STACKSIZE_SVC__), .), 0x4) - *fill* 0x40002a98 0x100 00 - 0x40002b98 __stack_svc_end__ = (__stack_svc_start__ + SIZEOF (.stack_svc)) - 0x40002b98 __stack_svc_load_end__ = __stack_svc_end__ - 0x00000001 . = ASSERT (((__stack_svc_end__ >= __SRAM_segment_start__) && (__stack_svc_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_svc is too large to fit in SRAM memory segment) - 0x40002b98 __stack_abt_load_start__ = ALIGN (__stack_svc_end__, 0x4) - -.stack_abt 0x40002b98 0x100 - 0x40002b98 __stack_abt_start__ = . - *(.stack_abt .stack_abt.*) - 0x40002c98 . = ALIGN (MAX ((__stack_abt_start__ + __STACKSIZE_ABT__), .), 0x4) - *fill* 0x40002b98 0x100 00 - 0x40002c98 __stack_abt_end__ = (__stack_abt_start__ + SIZEOF (.stack_abt)) - 0x40002c98 __stack_abt_load_end__ = __stack_abt_end__ - 0x00000001 . = ASSERT (((__stack_abt_end__ >= __SRAM_segment_start__) && (__stack_abt_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_abt is too large to fit in SRAM memory segment) - 0x40002c98 __stack_und_load_start__ = ALIGN (__stack_abt_end__, 0x4) - -.stack_und 0x40002c98 0x100 - 0x40002c98 __stack_und_start__ = . - *(.stack_und .stack_und.*) - 0x40002d98 . = ALIGN (MAX ((__stack_und_start__ + __STACKSIZE_UND__), .), 0x4) - *fill* 0x40002c98 0x100 00 - 0x40002d98 __stack_und_end__ = (__stack_und_start__ + SIZEOF (.stack_und)) - 0x40002d98 __stack_und_load_end__ = __stack_und_end__ - 0x00000001 . = ASSERT (((__stack_und_end__ >= __SRAM_segment_start__) && (__stack_und_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_und is too large to fit in SRAM memory segment) - 0x0000490c __fast_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) - -.fast 0x40002d98 0x0 load address 0x0000490c - 0x40002d98 __fast_start__ = . - *(.fast .fast.*) - 0x40002d98 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x0000490c __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) - 0x0000490c __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.fast)) - 0x00000001 . = ASSERT ((((__fast_load_start__ + SIZEOF (.fast)) >= __FLASH_segment_start__) && ((__fast_load_start__ + SIZEOF (.fast)) <= (__FLASH_segment_start__ + 0x40000))), error: .fast is too large to fit in FLASH memory segment) - -.fast_run 0x40002d98 0x0 - 0x40002d98 __fast_run_start__ = . - 0x40002d98 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .) - 0x40002d98 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) - 0x40002d98 __fast_run_load_end__ = __fast_run_end__ - 0x40002d98 __SRAM_segment_used_end__ = (ALIGN (__stack_und_end__, 0x4) + SIZEOF (.fast_run)) - 0x00000001 . = ASSERT (((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .fast_run is too large to fit in SRAM memory segment) -START GROUP -LOAD ARM Flash Debug/../../obj/boot.o -LOAD ARM Flash Debug/../../obj/cstart.o -LOAD ARM Flash Debug/../../obj/irq.o -LOAD ARM Flash Debug/../../obj/led.o -LOAD ARM Flash Debug/../../obj/main.o -LOAD ARM Flash Debug/../../obj/timer.o -LOAD ARM Flash Debug/../../obj/vectors.o -LOAD C:/Users/voorburg/AppData/Local/Rowley Associates Limited/CrossWorks for ARM/packages/lib/liblpc2000_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcpp_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_targetio_impl_v4t_a_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a -END GROUP -OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/../bin/demoprog_olimex_lpc_l2294_20mhz.elf elf32-littlearm) - -.debug_frame 0x00000000 0x2b34 - .debug_frame 0x00000000 0x148 ARM Flash Debug/../../obj/boot.o - .debug_frame 0x00000148 0xc0 ARM Flash Debug/../../obj/irq.o - .debug_frame 0x00000208 0x54 ARM Flash Debug/../../obj/led.o - .debug_frame 0x0000025c 0x58 ARM Flash Debug/../../obj/main.o - .debug_frame 0x000002b4 0x94 ARM Flash Debug/../../obj/timer.o - .debug_frame 0x00000348 0x40 ARM Flash Debug/../../obj/vectors.o - .debug_frame 0x00000388 0x260 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .debug_frame 0x000005e8 0x120 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .debug_frame 0x00000708 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .debug_frame 0x00000748 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .debug_frame 0x000007d0 0x1238 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .debug_frame 0x00001a08 0x794 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .debug_frame 0x0000219c 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .debug_frame 0x0000223c 0x2c0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .debug_frame 0x000024fc 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - .debug_frame 0x00002534 0x600 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) - -.debug_info 0x00000000 0x19ac - .debug_info 0x00000000 0x24f ARM Flash Debug/../../obj/boot.o - .debug_info 0x0000024f 0xde ARM Flash Debug/../../obj/cstart.o - .debug_info 0x0000032d 0x127 ARM Flash Debug/../../obj/irq.o - .debug_info 0x00000454 0x93 ARM Flash Debug/../../obj/led.o - .debug_info 0x000004e7 0xb5 ARM Flash Debug/../../obj/main.o - .debug_info 0x0000059c 0xa9 ARM Flash Debug/../../obj/timer.o - .debug_info 0x00000645 0x3b ARM Flash Debug/../../obj/vectors.o - .debug_info 0x00000680 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .debug_info 0x000006b6 0x65 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .debug_info 0x0000071b 0xc5b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .debug_info 0x00001376 0x533 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .debug_info 0x000018a9 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .debug_info 0x00001976 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - -.debug_abbrev 0x00000000 0x4c9 - .debug_abbrev 0x00000000 0x133 ARM Flash Debug/../../obj/boot.o - .debug_abbrev 0x00000133 0x12 ARM Flash Debug/../../obj/cstart.o - .debug_abbrev 0x00000145 0x80 ARM Flash Debug/../../obj/irq.o - .debug_abbrev 0x000001c5 0x5a ARM Flash Debug/../../obj/led.o - .debug_abbrev 0x0000021f 0x77 ARM Flash Debug/../../obj/main.o - .debug_abbrev 0x00000296 0x80 ARM Flash Debug/../../obj/timer.o - .debug_abbrev 0x00000316 0x29 ARM Flash Debug/../../obj/vectors.o - .debug_abbrev 0x0000033f 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .debug_abbrev 0x00000364 0x43 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .debug_abbrev 0x000003a7 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .debug_abbrev 0x00000447 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .debug_abbrev 0x0000047f 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .debug_abbrev 0x000004a4 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - -.debug_loc 0x00000000 0x1c25 - .debug_loc 0x00000000 0x18c ARM Flash Debug/../../obj/boot.o - .debug_loc 0x0000018c 0xdc ARM Flash Debug/../../obj/irq.o - .debug_loc 0x00000268 0x58 ARM Flash Debug/../../obj/led.o - .debug_loc 0x000002c0 0x58 ARM Flash Debug/../../obj/main.o - .debug_loc 0x00000318 0xb0 ARM Flash Debug/../../obj/timer.o - .debug_loc 0x000003c8 0x2c ARM Flash Debug/../../obj/vectors.o - .debug_loc 0x000003f4 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .debug_loc 0x00000420 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .debug_loc 0x0000048c 0xf59 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .debug_loc 0x000013e5 0x820 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .debug_loc 0x00001c05 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - -.debug_aranges 0x00000000 0x968 - .debug_aranges - 0x00000000 0x60 ARM Flash Debug/../../obj/boot.o - .debug_aranges - 0x00000060 0x28 ARM Flash Debug/../../obj/cstart.o - .debug_aranges - 0x00000088 0x40 ARM Flash Debug/../../obj/irq.o - .debug_aranges - 0x000000c8 0x28 ARM Flash Debug/../../obj/led.o - .debug_aranges - 0x000000f0 0x28 ARM Flash Debug/../../obj/main.o - .debug_aranges - 0x00000118 0x38 ARM Flash Debug/../../obj/timer.o - .debug_aranges - 0x00000150 0x20 ARM Flash Debug/../../obj/vectors.o - .debug_aranges - 0x00000170 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .debug_aranges - 0x00000190 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .debug_aranges - 0x000001c0 0x508 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .debug_aranges - 0x000006c8 0x220 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .debug_aranges - 0x000008e8 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .debug_aranges - 0x00000948 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - -.debug_ranges 0x00000000 0x8a0 - .debug_ranges 0x00000000 0x50 ARM Flash Debug/../../obj/boot.o - .debug_ranges 0x00000050 0x20 ARM Flash Debug/../../obj/cstart.o - .debug_ranges 0x00000070 0x30 ARM Flash Debug/../../obj/irq.o - .debug_ranges 0x000000a0 0x18 ARM Flash Debug/../../obj/led.o - .debug_ranges 0x000000b8 0x18 ARM Flash Debug/../../obj/main.o - .debug_ranges 0x000000d0 0x28 ARM Flash Debug/../../obj/timer.o - .debug_ranges 0x000000f8 0x10 ARM Flash Debug/../../obj/vectors.o - .debug_ranges 0x00000108 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .debug_ranges 0x00000118 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .debug_ranges 0x00000138 0x4f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .debug_ranges 0x00000630 0x210 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .debug_ranges 0x00000840 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .debug_ranges 0x00000890 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - -.debug_line 0x00000000 0x1376 - .debug_line 0x00000000 0x180 ARM Flash Debug/../../obj/boot.o - .debug_line 0x00000180 0x118 ARM Flash Debug/../../obj/cstart.o - .debug_line 0x00000298 0xe3 ARM Flash Debug/../../obj/irq.o - .debug_line 0x0000037b 0xaf ARM Flash Debug/../../obj/led.o - .debug_line 0x0000042a 0xe5 ARM Flash Debug/../../obj/main.o - .debug_line 0x0000050f 0xcf ARM Flash Debug/../../obj/timer.o - .debug_line 0x000005de 0x97 ARM Flash Debug/../../obj/vectors.o - .debug_line 0x00000675 0x75 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .debug_line 0x000006ea 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .debug_line 0x0000075e 0x5b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .debug_line 0x00000d11 0x56a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .debug_line 0x0000127b 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .debug_line 0x000012ef 0x87 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - -.debug_str 0x00000000 0x10db - .debug_str 0x00000000 0x230 ARM Flash Debug/../../obj/boot.o - .debug_str 0x00000230 0xe2 ARM Flash Debug/../../obj/irq.o - 0x158 (size before relaxing) - .debug_str 0x00000312 0xa8 ARM Flash Debug/../../obj/led.o - 0x111 (size before relaxing) - .debug_str 0x000003ba 0x89 ARM Flash Debug/../../obj/main.o - 0xf7 (size before relaxing) - .debug_str 0x00000443 0xaa ARM Flash Debug/../../obj/timer.o - 0x105 (size before relaxing) - .debug_str 0x000004ed 0x6f ARM Flash Debug/../../obj/vectors.o - 0xb8 (size before relaxing) - .debug_str 0x0000055c 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - 0xad (size before relaxing) - .debug_str 0x000005c0 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - 0xc5 (size before relaxing) - .debug_str 0x0000063c 0x57f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - 0x655 (size before relaxing) - .debug_str 0x00000bbb 0x3cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - 0x415 (size before relaxing) - .debug_str 0x00000f87 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - 0x11b (size before relaxing) - .debug_str 0x00001059 0x82 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - 0xcb (size before relaxing) - -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e ARM Flash Debug/../../obj/boot.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/irq.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/led.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/main.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/timer.o - .comment 0x00000000 0x4f ARM Flash Debug/../../obj/vectors.o - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - -.ARM.attributes - 0x00000000 0x10 - .ARM.attributes - 0x00000000 0x10 ARM Flash Debug/../../obj/boot.o - .ARM.attributes - 0x00000010 0x10 ARM Flash Debug/../../obj/cstart.o - .ARM.attributes - 0x00000020 0x10 ARM Flash Debug/../../obj/irq.o - .ARM.attributes - 0x00000030 0x10 ARM Flash Debug/../../obj/led.o - .ARM.attributes - 0x00000040 0x10 ARM Flash Debug/../../obj/main.o - .ARM.attributes - 0x00000050 0x10 ARM Flash Debug/../../obj/timer.o - .ARM.attributes - 0x00000060 0x10 ARM Flash Debug/../../obj/vectors.o - .ARM.attributes - 0x00000070 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc_asm.o) - .ARM.attributes - 0x00000080 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2_asm.o) - .ARM.attributes - 0x00000090 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .ARM.attributes - 0x000000a0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .ARM.attributes - 0x000000b0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v4t_a_le.a(libc2.o) - .ARM.attributes - 0x000000c0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .ARM.attributes - 0x000000d0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .ARM.attributes - 0x000000e0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm.o) - .ARM.attributes - 0x000000f0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) - .ARM.attributes - 0x00000100 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v4t_a_le.a(libm_asm.o) diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.srec b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.srec deleted file mode 100644 index 26cb0033..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.srec +++ /dev/null @@ -1,661 +0,0 @@ -S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF -S113200018F09FE518F09FE518F09FE518F09FE59C -S113201018F09FE5885F20B9F0FF1FE510F09FE5F9 -S11320206020000040200000442000004820000000 -S10B20304C20000050200000C8 -S11320380000000000000000FEFFFFEAFEFFFFEAC8 -S1132048FEFFFFEAFEFFFFEAFEFFFFEAFEFFFFEAEC -S11320580000A0E10000A0E100000FE11F00C0E3C0 -S11320681B1080E301F02FE15CD19FE5171080E39A -S113207801F02FE154D19FE5121080E301F02FE124 -S11320884CD19FE5111080E301F02FE144D19FE585 -S1132098131080E301F02FE13CD19FE51F1080E38A -S11320A801F02FE134D19FE534019FE534119FE518 -S11320B834219FE52E0000EB30019FE530119FE5A8 -S11320C830219FE52A0000EB2C019FE52C119FE5A8 -S11320D82C219FE5260000EB28019FE528119FE5A8 -S11320E828219FE5220000EB24019FE524119FE5A8 -S11320F824219FE51E0000EB20019FE520119FE5A8 -S113210820219FE51A0000EB1C019FE51C119FE5A7 -S11321180020A0E3280000EB14019FE514119FE5BB -S1132128001041E0080051E30020A0A3042080A48B -S1132138001080A5D0009FE5D0109FE5010050E174 -S11321480500000A042090E403002DE90FE0A0E153 -S113215812FF2FE10300BDE8F7FFFFEA0000A0E348 -S11321680010A0E3D0209FE50FE0A0E112FF2FE1CB -S1132178FEFFFFEA010050E10EF0A001012052E049 -S11321880EF0A001013080E1023083E1030013E383 -S11321980400001A043090E4043081E4042052E27C -S11321A8FBFFFF1A0EF0A0E10130D0E40130C1E4D6 -S11321B8012052E2FBFFFF1A0EF0A0E1010050E1FA -S11321C80EF0A0010120C0E4FBFFFFEA982D0040B7 -S11321D8982C004098290040982A0040982B0040E9 -S11321E8982800400C4900003C2000403C20004056 -S11321F85022000050220000584800000C490000FA -S1132208982D0040982D0040584800005848000078 -S11322185848000058480000584800005848000032 -S113222858480000584800000C4900003C20004071 -S1132238982000409820004098240040B0290000CD -S10B22480000A0E10000A0E188 -S113225000482DE904B08DE21C309FE50FE0A0E1B9 -S113226013FF2FE114309FE50FE0A0E113FF2FE1EE -S113227004D04BE20048BDE81EFF2FE11423000008 -S1132280D426000000482DE904B08DE21C309FE5FF -S11322900FE0A0E113FF2FE114309FE50FE0A0E170 -S11322A013FF2FE104D04BE20048BDE81EFF2FE1ED -S11322B0CC2300007027000004B02DE500B08DE2AF -S11322C04E32A0E3012BA0E3002083E50E32A0E30D -S11322D00320A0E30020C3E58E32A0E35520E0E311 -S11322E00020C3E58E32A0E35520A0E30020C3E51F -S11322F08E32A0E35520E0E30020C3E58E32A0E354 -S11323000020A0E30020C3E500D08BE20008BDE874 -S11323101EFF2FE104B02DE500B08DE204D04DE2A4 -S11323208C309FE588209FE5002092E5052082E31C -S1132330002083E57C309FE50020A0E30020C3E576 -S113234074309FE50020A0E30020C3E56C309FE5D6 -S11323500020A0E30020C3E564309FE57F20E0E394 -S11323600020C3E54130A0E304300BE554309FE581 -S113237004201BE5FF2002E20020C3E534309FE582 -S113238004201BE52224A0E1FF2002E20020C3E593 -S11323902C309FE50320A0E30020C3E518309FE51F -S11323A00720A0E30020C3E500D08BE20008BDE8CD -S11323B01EFF2FE100C002E004C000E008C000E0FE -S11323C014C000E00CC000E000C000E000482DE9AB -S11323D004B08DE2E4309FE50030D3E5000053E320 -S11323E00D00001AD8009FE5D8309FE50FE0A0E16A -S11323F013FF2FE10030A0E1010053E32C00001A89 -S1132400B8309FE50120A0E30020C3E5B8309FE584 -S11324100020A0E30020C3E5250000EAA8309FE5E2 -S11324200030D3E5012083E294309FE5033082E05D -S11324300300A0E18C309FE50FE0A0E113FF2FE142 -S11324400030A0E1010053E31900001A78309FE541 -S11324500030D3E5013083E2FF2003E268309FE5DA -S11324600020C3E558309FE50020D3E558309FE5B0 -S11324700030D3E5030052E10D00001A3C309FE523 -S11324800020A0E30020C3E534309FE50130D3E50C -S1132490FF0053E30600001A24309FE50230D3E521 -S11324A0000053E30200001A20309FE50FE0A0E192 -S11324B013FF2FE104D04BE20048BDE81EFF2FE1DB -S11324C03C20004040200040D424000084200040F0 -S11324D0B822000004B02DE500B08DE204D04DE236 -S11324E004000BE544309FE50030D3E5FF3003E200 -S11324F0013003E2FF3003E2000053E30600000A68 -S11325002C309FE50030D3E5FF2003E204301BE5C7 -S11325100020C3E50130A0E3000000EA0030A0E39E -S11325200300A0E100D08BE20008BDE81EFF2FE10C -S113253014C000E000C000E000482DE904B08DE2C2 -S11325400CD04DE20030A0E110100BE5BC304BE1A3 -S11325500030A0E305304BE5510000EABC305BE1FC -S113256005105BE558219FE50121D2E70210A0E1A7 -S113257005005BE548C19FE50120A0E30001A0E15F -S113258000008CE0022080E00020D2E5022081E0FF -S1132590012082E2930202E028119FE528319FE5A1 -S11325A00100A0E10210A0E10FE0A0E113FF2FE180 -S11325B00030A0E1000053E33600001ABC305BE1B8 -S11325C005105BE5F8209FE50121D2E70210A0E1A8 -S11325D005005BE5E8C09FE50120A0E30001A0E160 -S11325E000008CE0022080E00020D2E5022081E09F -S11325F0012082E2930202E0D0309FE5C4009FE50F -S11326000210A0E10FE0A0E113FF2FE10030A0E1F0 -S1132610B8304BE1B8305BE1000053E31D00000A21 -S1132620B8305BE1010B53E31A00008AB8305BE178 -S1132630013043E20320A0E110301BE5002083E5D4 -S113264010301BE5002093E505105BE570009FE565 -S11326500130A0E30111A0E1011080E0033081E02A -S11326600030D3E5013043E2031AA0E105005BE545 -S11326704C309FE50031D3E7013043E20338A0E159 -S1132680033081E1032082E110301BE5002083E563 -S11326900130A0E3060000EA05305BE5013083E287 -S11326A005304BE505305BE5110053E3AAFFFF9AC3 -S11326B00030A0E30300A0E104D04BE20048BDE8F1 -S11326C01EFF2FE15848000060EA0000E0310000DE -S11326D0702D000000482DE904B08DE204D04DE2D5 -S11326E070309FE50220A0E30020C3E568309FE539 -S11326F00120A0E3002083E560309FE50020A0E3F3 -S1132700002083E558309FE50020A0E3002083E506 -S113271008304BE27D0FA0E30310A0E144309FE5B5 -S11327200FE0A0E113FF2FE10030A0E1010053E32B -S11327300200001A30309FE508201BE5002083E5E5 -S113274014309FE50020A0E3002083E504D04BE291 -S11327500048BDE81EFF2FE100C003E0004004E094 -S1132760104004E0084004E038250000144004E070 -S113277000482DE904B08DE204D04DE290309FE58D -S1132780003093E5013003E2000053E31A00000A2D -S113279080309FE5002093E57C309FE5030052E103 -S11327A01700001A74309FE5003093E5FF3003E210 -S11327B008304BE564309FE5003093E52334A0E115 -S11327C0FF3003E207304BE554309FE50420A0E3DB -S11327D0002083E508305BE5FF0053E30900001A9D -S11327E007305BE5000053E30600001A34309FE530 -S11327F00FE0A0E113FF2FE1020000EA0000A0E1D6 -S1132800000000EA0000A0E104D04BE20048BDE86B -S11328101EFF2FE11C4004E0244004E06706000092 -S1132820284004E0044004E0B822000010082DE928 -S113283004B08DE204D04DE200400FE108400BE506 -S113284008301BE50300A0E104D04BE21008BDE80A -S11328501EFF2FE104B02DE500B08DE204D04DE25F -S113286004000BE504301BE503F029E100D08BE202 -S11328700008BDE81EFF2FE100482DE904B08DE2F9 -S113288004D04DE22C309FE50FE0A0E113FF2FE1CF -S113289008000BE508301BE58030C3E30300A0E12A -S11328A014309FE50FE0A0E113FF2FE104D04BE2C9 -S11328B00048BDE81EFF2FE12C280000542800002A -S11328C004B02DE500B08DE224309FE520209FE583 -S11328D0002092E5022582E3002083E514309FE581 -S11328E00225A0E3002083E500D08BE20008BDE8C8 -S11328F01EFF2FE1188002E0148002E000482DE959 -S113290004B08DE204D04DE288309FE50FE0A0E1F1 -S113291013FF2FE108000BE57C309FE5003093E5C1 -S113292008201BE5022063E070309FE5030052E1BC -S11329301400009A68309FE50030D3E5000053E3AB -S11329400600001A58309FE50120A0E30020C3E5EB -S113295050309FE50225A0E3002083E5050000EA4E -S11329603C309FE50020A0E30020C3E538309FE51C -S11329700225A0E3002083E51C309FE508201BE529 -S1132980002083E5000000EA0000A0E104D04BE24F -S11329900048BDE81EFF2FE1FC2C00008820004009 -S11329A0F30100008C2000401C8002E0148002E04F -S11329B000482DE904B08DE22C309FE50FE0A0E142 -S11329C013FF2FE124309FE50FE0A0E113FF2FE177 -S11329D01C309FE50FE0A0E113FF2FE114309FE5C9 -S11329E00FE0A0E113FF2FE1F8FFFFEAFC2900004C -S11329F050220000FC2800008422000000482DE939 -S1132A0004B08DE20CD04DE2CC319FE510104BE2C6 -S1132A100320A0E10430A0E30100A0E10210A0E142 -S1132A200320A0E1B4319FE50FE0A0E113FF2FE103 -S1132A300330A0E306304BE506305BE5013043E2AA -S1132A4006304BE50030A0E305304BE51C0000EAFE -S1132A5005205BE50B30E0E304104BE2022081E04B -S1132A60033082E00030D3E50320A0E10230A0E18E -S1132A708332A0E1033062E00331A0E1023083E05D -S1132A800322A0E1022063E00233A0E10320A0E1DD -S1132A900230A0E10C300BE50C201BE540319FE532 -S1132AA0030052E10300009A0C201BE534319FE53A -S1132AB0030052E10600009A05305BE5013083E231 -S1132AC005304BE505305BE5030053E3DFFFFF9A78 -S1132AD0000000EA0000A0E10C319FE505205BE561 -S1132AE08222A0E1FF1002E206205BE5022081E1E0 -S1132AF0FF2002E2FF2002E20020C3E5EC309FE564 -S1132B005520E0E30020C3E5E0309FE55520A0E335 -S1132B100020C3E5D8309FE50120A0E30020C3E5F1 -S1132B20C8309FE55520E0E30020C3E5BC309FE5B5 -S1132B305520A0E30020C3E50000A0E1B4309FE5E8 -S1132B40B030D3E10338A0E12338A0E1013B03E234 -S1132B50000053E3F8FFFF0A94309FE50320A0E34D -S1132B600020C3E584309FE55520E0E30020C3E561 -S1132B7078309FE55520A0E30020C3E578309FE539 -S1132B800020A0E30020C3E570309FE50420A0E30B -S1132B900020C3E560309FE50220A0E30020C3E5E8 -S1132BA05C309FE50120A0E30020C3E554309FE59D -S1132BB00FE0A0E113FF2FE14C309FE50FE0A0E10F -S1132BC013FF2FE144309FE50FE0A0E113FF2FE155 -S1132BD004D04BE20048BDE81EFF2FE1A0480000EE -S1132BE0603200005F61020000E2040084C01FE064 -S1132BF08CC01FE080C01FE088C01FE000C01FE041 -S1132C0004C01FE000C11FE0C0280000142C000015 -S1132C107828000000482DE904B08DE25C309FE57F -S1132C205C209FE5002083E558309FE50320A0E366 -S1132C30002083E550309FE50120A0E3002083E5D8 -S1132C4048309FE548209FE5002083E544309FE518 -S1132C502420A0E3002083E53C309FE51020A0E37E -S1132C60002083E50000A0E330309FE50FE0A0E101 -S1132C7013FF2FE104D04BE20048BDE81EFF2FE113 -S1132C80184000E05FEA0000144000E0044000E067 -S1132C9000F1FFFF202D000000F2FFFF10F0FFFF06 -S1132CA0D02C000004B02DE500B08DE218309FE573 -S1132CB0003093E5012083E20C309FE5002083E59A -S1132CC000D08BE20008BDE81EFF2FE190200040F9 -S1132CD004B02DE500B08DE204D04DE204000BE514 -S1132CE010309FE504201BE5002083E500D08BE233 -S1132CF00008BDE81EFF2FE19020004004B02DE540 -S1132D0000B08DE210309FE5003093E50300A0E1B0 -S1132D1000D08BE20008BDE81EFF2FE190200040A8 -S1132D2004E04EE20F582DE918B08DE224309FE5FF -S1132D300120A0E3002083E51C309FE50020A0E3F0 -S1132D40002083E514309FE50FE0A0E113FF2FE19D -S1132D5018D04BE20F98FDE8004000E030F0FFFF90 -S1132D60A42C00000000000000000000000000008F -S1132D70010030E15A00004A000010E10000604206 -S1132D8000107142A00351E1052071922700008ACE -S1132D900130B0E10020B0E3010853E31020823297 -S1132DA00338A031010453E3082082320334A031F4 -S1132DB0010253E3042082320332A031030113E3FE -S1132DC0022082020331B0018330A05101209252CB -S1132DD0F8C39FE5A3CCDCE7072052E21CC2A0E1C4 -S1132DE09C0101E09C2080E0001071E20030B0E31F -S1132DF09120A3E0030080E000C0B0E39123ACE0A5 -S1132E000C0080E00030B0E3912CA3E0030080E0EC -S1132E1000C0B0E39123ACE00C0080E00030B0E3EC -S1132E20912CA3E0010072E10300A0E01EFF2FE15A -S1132E30040051E31B00009A00C0A0E10000B0E3CD -S1132E402C0151E11100008AAC0351E181C34C9083 -S1132E50800080922C0351E101C34C904000809289 -S1132E60AC0251E181C24C90200080922C0251E1CD -S1132E7001C24C9010008092AC0151E181C14C9090 -S1132E80080080922C0151E101C14C900400809211 -S1132E90AC0051E181C04C90020080920C0051E1E1 -S1132EA0010080921EFF2FE12001A0011EFF2F01CF -S1132EB0010051E30000A0331EFF2F91020051E3F3 -S1132EC0A000A0011EFF2F01AB20A0E3AA2C82E3E7 -S1132ED0AA2882E3AA2482E3923080E0A000B0E131 -S1132EE01EFF2FE1010011E1000070420010714249 -S1132EF0C00371E1052071922900008A0130B0E11C -S1132F000020B0E3010853E3102082320338A031DB -S1132F10010453E3082082320334A031010253E355 -S1132F20042082320332A031030113E3022082021F -S1132F300331B0018330A051012092528CC29FE52D -S1132F40A3CCDCE7000070E2072052E21CC2A0E13F -S1132F509C0101E09C2080E0001071E20030B0E3AD -S1132F609120A3E0030080E000C0B0E39123ACE033 -S1132F700C0080E00030B0E3912CA3E0030080E07B -S1132F8000C0B0E39123ACE00C0080E00030B0E37B -S1132F90912CA3E0010072E10300A0E0000070E2C4 -S1132FA01EFF2FE1040051E31B00009A00C070E2F1 -S1132FB00000B0E32C0151E11100008AAC0351E19F -S1132FC081C34C90800040922C0351E101C34C908A -S1132FD040004092AC0251E181C24C9020004092EA -S1132FE02C0251E101C24C9010004092AC0151E11D -S1132FF081C14C90080040922C0151E101C14C90D8 -S113300004004092AC0051E181C04C900200409217 -S11330100C0051E1010040921EFF2FE103008002E9 -S11330204001A0011EFF2F01010051E30000A03365 -S11330301EFF2F91020051E301008002C000A00195 -S11330401EFF2F01AB20A0E3AA2C82E3AA2882E36F -S1133050AA2482E3000070E2923080E0A000B0E194 -S1133060000070E21EFF2FE10000A0E10000A0E1DB -S1133070A00351E1053071922700008A0130B0E1CC -S11330800020B0E3010853E3102082320338A0315A -S1133090010453E3082082320334A031010253E3D4 -S11330A0042082320332A031030113E3022082029E -S11330B00331B0018330A051012092520CC19FE52D -S11330C0A3CCDCE7072052E21CC2A0E19C0101E092 -S11330D09C2080E0001071E20030B0E39120A3E076 -S11330E0030080E000C0B0E39123ACE00C0080E07A -S11330F00030B0E3912CA3E0030080E000C0B0E313 -S11331009123ACE00C0080E00030B0E3912CA3E00C -S1133110010072E10300A0E01EFF2FE1040051E36F -S11331201B00009A00C0A0E10000B0E32C0151E1B3 -S11331301100008AAC0351E181C34C90800080925D -S11331402C0351E101C34C9040008092AC0251E148 -S113315081C24C90200080922C0251E101C24C901B -S113316010008092AC0151E181C14C900800809222 -S11331702C0151E101C14C9004008092AC0051E15A -S113318081C04C90020080920C0051E101008092B9 -S11331901EFF2FE12001A0011EFF2F01010051E3BA -S11331A00000A0331EFF2F91020051E3A000A001F4 -S11331B01EFF2F01AB20A0E3AA2C82E3AA2882E3FE -S11331C0AA2482E3923080E0A000B0E11EFF2FE148 -S11331D064480000C046C046C046C046C046C0461B -S11331E000402DE9050000EB0100A0E10040BDE82E -S11331F01EFF2FE10000A0E10000A0E10000A0E11B -S1133200023111E20010714240C033E0000060223C -S11332100120B0E10E00000AA00052E18220A0913A -S1133220FCFFFF3A020050E10330A3E0020040201B -S1133230010032E1A220A011F9FFFF1A0010A0E161 -S11332400300A0E18CC0B0E10000602200106142E4 -S11332501EFF2FE10000B0E31EFF2FE10000A0E1FC -S113326000C0A0E1013080E1030013E30800001A6C -S1133270240052E30600003AF00F2DE9F80FB1E8FC -S1133280F80FA0E8242042E2240052E3FAFFFF2AC8 -S1133290F00FBDE8000052E30300000A0130D1E45E -S11332A00130C0E4012052E2FBFFFF1A0C00A0E150 -S11332B01EFF2FE10000A0E10000A0E10000A0E15A -S11332C0011080E2030010E30C00000A0120D0E4A6 -S11332D0000052E31700000A030010E30700000A8D -S11332E00120D0E4000052E31200000A030010E3BE -S11332F00200000A0120D0E4000052E30D00000A9D -S113330070002DE934209FE534309FE5044090E4BB -S1133310025044E00450C5E1035015E00000001AD7 -S1133320F9FFFFEA040040E27000BDE80120D0E4A8 -S1133330000052E3FCFFFF1A010040E01EFF2FE1F2 -S113334001010101808080800000A0E10000A0E173 -S1133350F04F2DE918D04DE20070A0E10140A0E14A -S113336008208DE50030A0E3003080E598B89FE5A3 -S11333700150A0E1130200EA015085E2250051E367 -S11333800530A0010060A0030200000A0700A0E1CC -S1133390230400EB0B0200EA0310A0E10100D3E4D4 -S11333A00350A0E1202040E2100052E302F19F9775 -S11333B01C0000EAF8330000283400002834000020 -S11333C000340000283400002834000028340000B1 -S11333D00834000028340000283400002834000099 -S11333E01034000028340000183400002834000091 -S11333F02834000020340000406086E3E5FFFFEA43 -S1133400806086E3E3FFFFEA026986E3E1FFFFEA07 -S1133410206086E3DFFFFFEA106086E3DDFFFFEA5A -S1133420026C86E3DBFFFFEA2A0050E30400000A93 -S1133430302040E2090052E30090A0830A00009A81 -S1133440120000EA08309DE5040083E208008DE5DF -S1133450009093E5000059E3009069B2106086B3D0 -S11334600100D1E5025081E2080000EA0090A0E3E7 -S1133470099189E0300040E2899080E00100D3E4C2 -S11334800350A0E1302040E2090052E3F7FFFF9A25 -S1133490C99FC9E12E0050E30080A0131C00001A4C -S11334A00000D5E52A0050E30500000A015085E23A -S11334B0303040E2090053E30080A0830700009A03 -S11334C0120000EA08309DE5042083E208208DE51F -S11334D0008093E50100D5E5025085E2090000EA89 -S11334E00530A0E10080A0E3088188E0300040E2DC -S11334F0888080E00100D3E40350A0E1302040E262 -S1133500090052E3F7FFFF9A000058E3000000BAF5 -S1133510016C86E3680050E30600001A0000D5E55C -S1133520680050E3086086030100D5050250850257 -S11335300150851204608613780050E300F19F97D0 -S1133540780000EAFC3B0000283700002837000020 -S113355028370000283700002837000028370000EB -S113356028370000283700002837000028370000DB -S113357028370000283700002837000028370000CB -S113358028370000283700002837000028370000BB -S113359028370000283700002837000028370000AB -S11335A0283700002837000028370000283700009B -S11335B0283700002837000028370000283700008B -S11335C0283700002837000028370000283700007B -S11335D028370000283700005C3700002837000037 -S11335E0283700002837000028370000283700005B -S11335F0283700002837000028370000283700004B -S1133600283700002837000028370000283700003A -S1133610283700002837000028370000283700002A -S1133620283700002837000028370000283700001A -S1133630283700002837000028370000283700000A -S113364028370000283700002837000028370000FA -S113365028370000283700002837000028370000EA -S113366028370000283700002837000028370000DA -S113367028370000283700002837000028370000CA -S113368028370000283700002837000028370000BA -S113369028370000283700002837000028370000AA -S11336A0283700008C380000283700002837000035 -S11336B0283700002837000028370000283700008A -S11336C0283700002837000028370000283700007A -S11336D06C370000E8380000283700002837000065 -S11336E02837000028370000E83800002837000099 -S11336F0283700002837000028370000B8370000BA -S1133700B83800006038000028370000283700006F -S1133710DC37000028370000D438000028370000C8 -S11337202837000090380000E0349FE500C093E59E -S113373000005CE32301000A00808DE508308DE27F -S113374004308DE50710A0E10620A0E10930A0E1D6 -S11337500FE0A0E11CFF2FE11A0100EA0700A0E13D -S11337602510A0E32E0300EB160100EA08309DE5C6 -S1133770042083E208208DE50040D3E5019049E26E -S11337800600A0E10910A0E10720A0E14E0300EB30 -S11337900700A0E10410A0E1210300EB100016E3F0 -S11337A00801000A2000A0E30910A0E10720A0E11D -S11337B0360300EB030100EA080016E308309DE538 -S11337C0042083E208208DE5003093E5002097E58E -S11337D00020C31500208305FA0000EA08309DE5A7 -S11337E0042083E208208DE5004093E520149FE542 -S11337F0000054E30140A001026CC6E30400A0E110 -S1133800AEFEFFEB00A0A0E1010C16E30030A00324 -S11338100130A013000058E10030A0A3013003B22E -S1133820000053E308A0A01109906AE00600A0E19B -S11338300910A0E10720A0E1230300EB00005AE3F4 -S1133840D5FFFF0A0A80A0E10700A0E10110D4E43B -S1133850F30200EB018058E2FAFFFF1ACEFFFFEA01 -S113386008309DE5042083E208208DE5003093E5CF -S113387080A006E200005AE323A0A01300A0A00346 -S1133880016C86E30880A0E33E0000EA026A86E356 -S1133890800016E300A0A0030300000A74339FE530 -S11338A074A39FE5780050E303A0A001010C16E384 -S11338B0026CC6130F0000EA80A006E200005AE37F -S11338C030A0A01300A0A003010C16E3026CC613E1 -S11338D0080000EA010C16E3026CC61300A0A01352 -S11338E00400001A020000EA016986E300A0A0E3D4 -S11338F0000000EA00A0A0E3010916E31400000A96 -S113390008309DE5042083E208208DE5003093E52E -S1133910040016E30338A0114338A0110100001A73 -S1133920080016E3FF300312000053E3003063B2D3 -S11339302DA0A0B3100000BA200016E32BA0A01302 -S11339400D00001A402006E2000052E320A0A0135C -S1133950090000EA08309DE5042083E208208DE593 -S1133960003093E5040016E30338A0112338A011B6 -S11339700100001A080016E3FF300312010C16E3DD -S11339800200000A026CC6E3010C16E30000001AF0 -S11339900180A0E3580040E2200050E300F19F972B -S11339A0590000EA483A00000C3B00000C3B0000C0 -S11339B00C3B00000C3B00000C3B00000C3B0000E7 -S11339C00C3B00000C3B00000C3B00000C3B0000D7 -S11339D00C3B0000383A00000C3B00000C3B00009C -S11339E00C3B00000C3B0000383A00000C3B00008C -S11339F00C3B00000C3B00000C3B00000C3B0000A7 -S1133A00283A0000483A00000C3B00000C3B000040 -S1133A100C3B00000C3B0000383A00000C3B00005B -S1133A200C3B0000483A0000000053E30040A003B0 -S1133A301500001A350000EA000053E30040A0031B -S1133A401A00001A310000EA000053E30040A0030A -S1133A502E00000A0040A0E3022A06E2000052E31E -S1133A600F1003E2B4C19F150100DC17B0E19F05FC -S1133A700100DE070C108DE20100C4E7014084E27E -S1133A802332B0E1F4FFFF1A200000EA0040A0E373 -S1133A90071003E2301081E20C208DE20210C4E72B -S1133AA0014084E2A331B0E1F8FFFF1A170000EAF5 -S1133AB00040A0E3020906E22CC0A0E3000050E3AA -S1133AC00500000A032004E2030052E318108D02EB -S1133AD0042081000CC042050140840218208DE2BC -S1133AE0041082E09BE382E0A221A0E102E182E0F3 -S1133AF08E3043E0303083E20C3041E5014084E213 -S1133B00003052E2ECFFFF1A000000EA0040A0E39C -S1133B10088064E0C88FC8E1099068E0099064E017 -S1133B20FF005AE30190498200005AE301904912D0 -S1133B30020C16E30400001A0600A0E10910A0E13B -S1133B400720A0E1600200EB0090A0E3FF005AE32D -S1133B502A14A0810700A081FF1001823002008B8B -S1133B6000005AE3FF100A120700A0112C02001BE8 -S1133B700600A0E10910A0E10720A0E1520200EB39 -S1133B803000A0E30810A0E10720A0E13F0200EB11 -S1133B90010054E30600004A0C808DE2044088E0F2 -S1133BA00700A0E1011074E51D0200EB080054E1D8 -S1133BB0FAFFFF1A100016E32000A0130910A01149 -S1133BC00720A0113102001B0010D5E5000051E3CD -S1133BD0E8FDFF1A083097E5000053E30400000AEB -S1133BE0002097E5041097E5010052E10010A0338E -S1133BF00210C337000097E5000000EA0000E0E38C -S1133C0018D08DE2F04FBDE81EFF2FE1CDCCCCCC17 -S1133C1094200040E4480000783000005830000050 -S1133C20FC480000EC48000010402DE90040A0E1F1 -S1133C300030D1E5000053E30400000A010070E302 -S1133C40043091150130431204308115020000EA5A -S1133C5008C091E50FE0A0E11CFF2FE10400A0E102 -S1133C601040BDE81EFF2FE1F04F2DE90090A0E1C8 -S1133C7001B0A0E10280A0E103A0A0E124609DE5E1 -S1133C800050E0E3000000EA0450A0E1014085E2B6 -S1133C900900A0E1CF0100EB0070A0E1380200EBC5 -S1133CA0000050E3F7FFFF1A0730A0E1010077E3BB -S1133CB00040E0035900000A068CC8E3000056E304 -S1133CC02B0000DA800018E30900000A2B0057E3F8 -S1133CD00200000A2D0057E30500001A018B88E357 -S1133CE0024085E20900A0E1BA0100EB0070A0E106 -S1133CF0016046E2000056E30030A0D30130A0C3C7 -S1133D00300057E30030A013000053E31800000A0A -S1133D10028C88E3016046E2015084E20900A0E1DC -S1133D20AC0100EB0070A0E1000056E30D0000DAE6 -S1133D30580050E3780050130A00001A10005AE3A8 -S1133D4000005A130700001A028CC8E3016046E21F -S1133D50025084E20900A0E19E0100EB0070A0E1A2 -S1133D6010A0A0E3300000EA00005AE308A0A0037A -S1133D702D0000EA00005AE30AA0A003000056E365 -S1133D800050A0D30A0000CA0F0000EA028C88E3A6 -S1133D90016046E29A0525E0014084E20900A0E1C1 -S1133DA08C0100EB0070A0E1000056E30100001A52 -S1133DB0050000EA0050A0E30700A0E10A10A0E11A -S1133DC0DA0100EB000050E3EFFFFFAA0700A0E1D7 -S1133DD00910A0E193FFFFEB020C18E30140E0039C -S1133DE00E00000A010018E30C00001A00309BE5E5 -S1133DF0042083E200208BE5003093E5122D08E2D5 -S1133E00120D52E300506502100018E30050C31570 -S1133E100200001A080018E3B050C31100508305D3 -S1133E200400A0E1F04FBDE81EFF2FE10540A0E132 -S1133E30D1FFFFEAF04F2DE914D04DE204008DE5E7 -S1133E4001A0A0E110208DE50090A0E308908DE58D -S1133E507CB59FE50A60A0E10140D6E4000054E38C -S1133E605701000A250054E32900000A0400A0E1D8 -S1133E70C30100EB000050E30100001A120000EA45 -S1133E800460A0E1014086E20000D6E5BC0100EB3D -S1133E90000050E3F9FFFF1A000000EA019089E2F4 -S1133EA004009DE54B0100EB0040A0E1B40100EBF0 -S1133EB0000050E3F8FFFF1A0400A0E104109DE5A0 -S1133EC058FFFFEB06A0A0E1E1FFFFEA04009DE537 -S1133ED0400100EB0050A0E1040050E10190890290 -S1133EE006A0A001DAFFFF0A04109DE54DFFFFEBD9 -S1133EF008209DE5000052E3010075030050A01363 -S1133F000150A003000055E30020E01308208DE5D4 -S1133F102B0100EA0130DAE52A0053E302608A0249 -S1133F200180A0030080A0130640A0E10050A0E39C -S1133F30060000EA0B0055E1210100CA055185E0A5 -S1133F40306046E2855096E01D01004A208088E3F7 -S1133F500470A0E1014084E20060D7E504A0A0E180 -S1133F600600A0E16C0100EB000050E3F0FFFF1A33 -S1133F700810A0E1202008E2000052E30251E0030F -S1133F804C0056E30160D70502A0870244808803F1 -S1133F900800000A680056E30600001A0160D7E52D -S1133FA0680056E3108088030260D70503A08702E7 -S1133FB002A0871208808113256046E2530056E36D -S1133FC006F19F97FE0000EA18410000C443000078 -S1133FD0C4430000C4430000C4430000C4430000C1 -S1133FE0C4430000C4430000C4430000C4430000B1 -S1133FF0C4430000C4430000C4430000C4430000A1 -S1134000C4430000C4430000C4430000C443000090 -S1134010C4430000C4430000C4430000C443000080 -S1134020C4430000C4430000C4430000C443000070 -S1134030C4430000C4430000C4430000C443000060 -S1134040C4430000C4430000C4430000C443000050 -S1134050C4430000C4430000C4430000C443000040 -S1134060C4430000C4430000C4430000C443000030 -S1134070C4430000C4430000C4430000C443000020 -S1134080C4430000C4430000C4430000C443000010 -S1134090C443000064430000C4430000C443000060 -S11340A0C4430000C4430000C4430000C4430000F0 -S11340B0C4430000C4430000C4430000C4430000E0 -S11340C05C410000D8410000C4430000C443000028 -S11340D0C4430000C4430000F8410000C44300008E -S11340E0C4430000C4430000C4430000184200005D -S11340F04C4200006C420000C4430000C443000072 -S11341008C420000C443000044430000C443000048 -S1134110C44300006443000004009DE5AD0000EBCF -S11341200040A0E1250050E30190890248FFFF0A06 -S113413004109DE5BBFEFFEB08309DE5010074E330 -S1134140000053030040A0030140A013000054E307 -S11341500030E00308308DE5990000EA203008E2E1 -S1134160000053E30150A003018018E210309D05C4 -S11341700420830210208D05004093050040A01305 -S1134180000055E38E00000A0D0000DA04009DE5EE -S1134190900000EB010070E30400001A08209DE584 -S11341A0000052E30020E00308208DE5840000EACB -S11341B0000058E30100C404019089E2015055E273 -S11341C0F1FFFF1A000058E308309D050130830217 -S11341D008308D051EFFFFEA00508DE504009DE5C3 -S11341E010108DE2802088E30A30A0E39DFEFFEBEF -S11341F00040A0E1610000EA00508DE504009DE567 -S113420010108DE2802088E30030A0E395FEFFEBE0 -S11342100040A0E1590000EA010018E30CFFFF1A76 -S113422010309DE5042083E210208DE5003093E5F5 -S1134230100018E30090C31505FFFF1A080018E3E7 -S1134240B090C3110090830501FFFFEA00508DE593 -S113425004009DE510108DE2802088E30830A0E37F -S113426080FEFFEB0040A0E1440000EA00508DE531 -S113427004009DE510108DE21E20C8E31030A0E379 -S113428078FEFFEB0040A0E13C0000EA0040E0E3E0 -S1134290014084E204009DE54E0000EB0060A0E1D3 -S11342A0B70000EB000050E3F8FFFF1A010076E3CB -S11342B00040E0033100000A017018E210309D054F -S11342C00420830210208D05003093050C308D05E9 -S11342D00020A0130C208D15000055E30C0000CA2B -S11342E00F0000EA015045E2000057E30C309D0541 -S11342F00160C3040C308D05014084E204009DE597 -S1134300340000EB0060A0E1010070E300005513ED -S1134310030000DA0600A0E1990000EB000050E37E -S1134320EFFFFF0A0600A0E104109DE53DFEFFEB50 -S1134330000057E30020A0030C309D050020C305B6 -S11343400E0000EA00508DE504009DE510108DE29A -S1134350802088E30A30A0E342FEFFEB0040A0E1A6 -S1134360060000EA00508DE504009DE510108DE282 -S1134370802088E31030A0E33AFEFFEB0040A0E188 -S1134380000054E3080000AA08209DE5010074E33E -S1134390000052030040A0030140A013000054E3B6 -S11343A00020E00308208DE5050000EA010018E381 -S11343B008309D050130830208308D05049089E0A2 -S11343C0A3FEFFEA08009DE514D08DE2F04FBDE89E -S11343D01EFF2FE1CCCCCC0C04E02DE50030A0E195 -S11343E00020D0E5000052E30600000A042090E516 -S11343F00000D2E5000050E301208212042083155E -S11344000500001A030000EA04C090E50FE0A0E1F3 -S11344101CFF2FE1000000EA0000E0E304E09DE45B -S11344201EFF2FE110402DE90040A0E1FF0001E252 -S1134430081094E5000051E30600000A003094E5FA -S1134440042094E501C083E202005CE10000A003C3 -S1134450020053E10300C1370C3094E5000053E33C -S11344600500000A001094E5042094E5020051E1DF -S11344700410A0310FE0A03113FF2F31003094E578 -S1134480013083E2003084E51040BDE81EFF2FE1D7 -S1134490F0402DE90250A0E1010051E30800004A78 -S11344A00160A0E10040A0E3FF7000E20500A0E18C -S11344B00710A0E1DAFFFFEB014084E2060054E1BB -S11344C0F9FFFF1AF040BDE81EFF2FE104E02DE5DF -S11344D0100010E30400001A020C00E2000050E394 -S11344E02000A0033000A013E8FFFFEB04E09DE4EC -S11344F01EFF2FE1410040E2190050E30000A083B9 -S11345000100A0931EFF2FE1610040E2190050E377 -S11345100000A0830100A0931EFF2FE1300040E2C1 -S1134520090050E30000A0830100A0931EFF2FE1C7 -S113453030402DE90040A0E10150A0E1F6FFFFEB7F -S1134540000050E3300044120900001A0400A0E106 -S1134550ECFFFFEB000050E3570044120400001A84 -S11345600400A0E1E2FFFFEB000050E33700441237 -S11345700000E003050050E10000E0A33040BDE886 -S11345801EFF2FE1093040E2200050E304005313E2 -S11345900000A0830100A0931EFF2FE130402DE90D -S11345A004D04DE20050A0E104408DE2041024E563 -S11345B0090000EB0500A0E1140000EB0D00A0E1F0 -S11345C0120000EB190000EB040000EB00009DE575 -S11345D004D08DE23040BDE81EFF2FE11EFF2FE125 -S11345E01EFF2FE10000000000000000000000009A -S11345F0100E10EE010010E3FCFFFF0A100E11EE86 -S11346001EFF2FE10000A0E10000A0E10000A0E1F6 -S113461002002DE9101E10EE020011E3FCFFFF1A48 -S1134620100E01EE0200BDE81EFF2FE10000A0E124 -S1134630F0472DE90480A0E30870A0E10090A0E316 -S1134640EAFFFFEB2042A0E10F0000E20A0050E382 -S113465000F19F97F9FFFFEA84460000D846000066 -S113466094470000C0470000D047000020480000E5 -S1134670304700004046000040460000DC47000090 -S113468050480000D9FFFFEB000054E36600001A15 -S11346900D0000EAD5FFFFEB0730A0E10100C5E4FF -S11346A0014054E20020A0030120A013013053E292 -S11346B00010A00301100212000051E32004A01115 -S11346C0F5FFFF1A000052E3F1FFFF1A0100A0E317 -S11346D0CEFFFFEBD9FFFFEAC4FFFFEB000054E37A -S11346E00060A0110950A0110B00001A0C0000EA90 -S11346F02554A0E1000054E30120D614025C851186 -S113470001404412013053E2F8FFFF1A0500A0E112 -S1134710BEFFFFEB000054E30100000A0730A0E1F4 -S1134720F2FFFFEA0100A0E3B8FFFFEBC3FFFFEADB -S1134730AEFFFFEB000054E30150A0033E00001A5B -S1134740100000EAA9FFFFEB0730A0E10110D6E456 -S1134750FF2000E2020051E10050A013014054E2A6 -S11347600020A0030120A013013053E20010A00395 -S113477001100212000051E32004A011F2FFFF1AFD -S1134780000052E3EEFFFF1A0500A0E19FFFFFEBDC -S1134790AAFFFFEA95FFFFEB0050A0E193FFFFEBB8 -S11347A0000054E30200000A0100C5E4014054E2A1 -S11347B0FCFFFF1A0100A0E394FFFFEB9FFFFFEA59 -S11347C08AFFFFEB0100A0E390FFFFEB9BFFFFEAF2 -S11347D00100A0E38DFFFFEB98FFFFEA83FFFFEBEF -S11347E00040A0E181FFFFEB0050A0E17FFFFFEB61 -S11347F00060A0E17DFFFFEB00A0A0E17BFFFFEBE9 -S11348000030A0E10500A0E10610A0E10A20A0E12B -S11348100FE0A0E114FF2FE17CFFFFEB87FFFFEA2D -S11348200100A0E379FFFFEB080000EA0050A0E1DB -S11348306EFFFFEB0830A0E197FFFFEA0060A0E104 -S11348406AFFFFEB0150A0E30830A0E1BEFFFFEADE -S10B4850F047BDE81EFF2FE153 -S1134858050200000602000006030000070300002A -S11348680803000009030000090400000A0400000A -S11348780B0400000C0400000C0500000D050000EA -S11348880E0500000F0500000F06000010060000CA -S1134898100700001008000001020408FCF8F4F0F6 -S11348A8EDEAE6E3E0DDDAD7D4D2CFCCCAC7C5C394 -S11348B8C0BEBCBAB8B6B4B2B0AEACAAA8A7A5A3D9 -S11348C8A2A09F9D9C9A999796949392908F8E8D6F -S11348D88C8A89888786858483828180286E756C12 -S11348E86C29000030313233343536373839616257 -S11348F8636465663031323334353637383941428A -S10749084344454695 -S90320607C diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/boot.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/boot.c deleted file mode 100644 index 5a172b5a..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/boot.c +++ /dev/null @@ -1,404 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\boot.c -* \brief Demo program bootloader interface source file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -#if (BOOT_COM_UART_ENABLE > 0) -static void BootComUartInit(void); -static void BootComUartCheckActivationRequest(void); -#endif -#if (BOOT_COM_CAN_ENABLE > 0) -static void BootComCanInit(void); -static void BootComCanCheckActivationRequest(void); -#endif - -/************************************************************************************//** -** \brief Initializes the communication interface. -** \return none. -** -****************************************************************************************/ -void BootComInit(void) -{ -#if (BOOT_COM_UART_ENABLE > 0) - BootComUartInit(); -#endif -#if (BOOT_COM_CAN_ENABLE > 0) - BootComCanInit(); -#endif -} /*** end of BootComInit ***/ - - -/************************************************************************************//** -** \brief Receives the CONNECT request from the host, which indicates that the -** bootloader should be activated and, if so, activates it. -** \return none. -** -****************************************************************************************/ -void BootComCheckActivationRequest(void) -{ -#if (BOOT_COM_UART_ENABLE > 0) - BootComUartCheckActivationRequest(); -#endif -#if (BOOT_COM_CAN_ENABLE > 0) - BootComCanCheckActivationRequest(); -#endif -} /*** end of BootComCheckActivationRequest ***/ - - -/************************************************************************************//** -** \brief Bootloader activation function. Performs a software reset by configuring -** and triggering the watchdog. -** \return none. -** -****************************************************************************************/ -void BootActivate(void) -{ - #define WDEN_BIT (0x01) /* watchdog enable bit (set only) */ - #define WDRESET_BIT (0x02) /* watchdog reset enable bit */ - - /* configure a short timeout. not really interesting as we won't be using it */ - WDTC = 1024; - /* enable the watchdog and configure it such that a watchdog timeout causes a reset */ - WDMOD = WDEN_BIT | WDRESET_BIT; - /* start the watchdog */ - WDFEED = 0xAA; - WDFEED = 0x55; - /* write invalid feed sequence to cause an instant reset */ - WDFEED = 0xAA; - WDFEED = 0x00; -} /*** end of BootActivate ***/ - - -#if (BOOT_COM_UART_ENABLE > 0) -/**************************************************************************************** -* U N I V E R S A L A S Y N C H R O N O U S R X T X I N T E R F A C E -****************************************************************************************/ - -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -/** \brief Divisor latch access bit. */ -#define UART_DLAB (0x80) -/** \brief 8 data and 1 stop bit, no parity. */ -#define UART_MODE_8N1 (0x03) -/** \brief FIFO reset and RX FIFO 1 deep. */ -#define UART_FIFO_RX1 (0x07) -/** \brief Receiver data ready. */ -#define UART_RDR (0x01) - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -static unsigned char UartReceiveByte(unsigned char *data); - - -/************************************************************************************//** -** \brief Initializes the UART communication interface. -** \return none. -** -****************************************************************************************/ -static void BootComUartInit(void) -{ - unsigned long baud_reg_value; /* baudrate register value */ - - /* configure P0.0 for UART0 Tx and P0.1 for UART0 Rx functionality */ - PINSEL0 |= 0x05; - /* disable UART related interrupt generation. this driver works in polling mode */ - U0IER = 0; - /* clear interrupt id register */ - U0IIR = 0; - /* clear line status register */ - U0LSR = 0; - /* set divisor latch DLAB = 1 so buadrate can be configured */ - U0LCR = UART_DLAB; - /* Baudrate calculation: - * y = BOOT_CPU_SYSTEM_SPEED_KHZ * 1000 / 16 / BOOT_COM_UART_BAUDRATE and add - * smartness to automatically round the value up/down using the following trick: - * y = x/n can round with y = (x + (n + 1)/2 ) / n - */ - baud_reg_value = (((BOOT_CPU_SYSTEM_SPEED_KHZ*1000/16)+ \ - ((BOOT_COM_UART_BAUDRATE+1)/2))/BOOT_COM_UART_BAUDRATE); - /* write the calculated baudrate selector value to the registers */ - U0DLL = (unsigned char)baud_reg_value; - U0DLM = (unsigned char)(baud_reg_value >> 8); - /* configure 8 data bits, no parity and 1 stop bit and set DLAB = 0 */ - U0LCR = UART_MODE_8N1; - /* enable and reset transmit and receive FIFO. necessary for UART operation */ - U0FCR = UART_FIFO_RX1; -} /*** end of BootComUartInit ***/ - - -/************************************************************************************//** -** \brief Receives the CONNECT request from the host, which indicates that the -** bootloader should be activated and, if so, activates it. -** \return none. -** -****************************************************************************************/ -static void BootComUartCheckActivationRequest(void) -{ - static unsigned char xcpCtoReqPacket[BOOT_COM_UART_RX_MAX_DATA+1]; - static unsigned char xcpCtoRxLength; - static unsigned char xcpCtoRxInProgress = 0; - - /* start of cto packet received? */ - if (xcpCtoRxInProgress == 0) - { - /* store the message length when received */ - if (UartReceiveByte(&xcpCtoReqPacket[0]) == 1) - { - /* indicate that a cto packet is being received */ - xcpCtoRxInProgress = 1; - - /* reset packet data count */ - xcpCtoRxLength = 0; - } - } - else - { - /* store the next packet byte */ - if (UartReceiveByte(&xcpCtoReqPacket[xcpCtoRxLength+1]) == 1) - { - /* increment the packet data count */ - xcpCtoRxLength++; - - /* check to see if the entire packet was received */ - if (xcpCtoRxLength == xcpCtoReqPacket[0]) - { - /* done with cto packet reception */ - xcpCtoRxInProgress = 0; - - /* check if this was an XCP CONNECT command */ - if ((xcpCtoReqPacket[1] == 0xff) && (xcpCtoReqPacket[2] == 0x00)) - { - /* connection request received so start the bootloader */ - BootActivate(); - } - } - } - } -} /*** end of BootComUartCheckActivationRequest ***/ - - -/************************************************************************************//** -** \brief Receives a communication interface byte if one is present. -** \param data Pointer to byte where the data is to be stored. -** \return 1 if a byte was received, 0 otherwise. -** -****************************************************************************************/ -static unsigned char UartReceiveByte(unsigned char *data) -{ - /* check if a new byte was received by means of the RDR-bit */ - if((U0LSR & UART_RDR) != 0) - { - /* store the received byte */ - data[0] = U0RBR; - /* inform caller of the newly received byte */ - return 1; - } - /* inform caller that no new data was received */ - return 0; -} /*** end of UartReceiveByte ***/ -#endif /* BOOT_COM_UART_ENABLE > 0 */ - - -#if (BOOT_COM_CAN_ENABLE > 0) -/**************************************************************************************** -* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E -****************************************************************************************/ - -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -/** \brief Transmit buffer 1 idle. */ -#define CAN_TBS1 (0x00000004) -/** \brief Transmit buffer 1 complete. */ -#define CAN_TCS1 (0x00000008) -/** \brief Receive buffer release. */ -#define CAN_RRB (0x04) -/** \brief Receive buffer status. */ -#define CAN_RBS (0x01) -/** \brief Transmission request. */ -#define CAN_TR (0x01) -/** \brief Select tx buffer 1 for transmit. */ -#define CAN_STB1 (0x20) - - -/**************************************************************************************** -* Type definitions -****************************************************************************************/ -/** \brief Structure type for grouping CAN bus timing related information. */ -typedef struct t_can_bus_timing -{ - unsigned char tseg1; /**< CAN time segment 1 */ - unsigned char tseg2; /**< CAN time segment 2 */ -} tCanBusTiming; - - -/**************************************************************************************** -* Local constant declarations -****************************************************************************************/ -/** \brief CAN bittiming table for dynamically calculating the bittiming settings. - * \details According to the CAN protocol 1 bit-time can be made up of between 8..25 - * time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC - * always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) * - * 100%. This array contains possible and valid time quanta configurations with - * a sample point between 68..78%. - */ -static const tCanBusTiming canTiming[] = -{ /* TQ | TSEG1 | TSEG2 | SP */ - /* ------------------------- */ - { 5, 2 }, /* 8 | 5 | 2 | 75% */ - { 6, 2 }, /* 9 | 6 | 2 | 78% */ - { 6, 3 }, /* 10 | 6 | 3 | 70% */ - { 7, 3 }, /* 11 | 7 | 3 | 73% */ - { 8, 3 }, /* 12 | 8 | 3 | 75% */ - { 9, 3 }, /* 13 | 9 | 3 | 77% */ - { 9, 4 }, /* 14 | 9 | 4 | 71% */ - { 10, 4 }, /* 15 | 10 | 4 | 73% */ - { 11, 4 }, /* 16 | 11 | 4 | 75% */ - { 12, 4 }, /* 17 | 12 | 4 | 76% */ - { 12, 5 }, /* 18 | 12 | 5 | 72% */ - { 13, 5 }, /* 19 | 13 | 5 | 74% */ - { 14, 5 }, /* 20 | 14 | 5 | 75% */ - { 15, 5 }, /* 21 | 15 | 5 | 76% */ - { 15, 6 }, /* 22 | 15 | 6 | 73% */ - { 16, 6 }, /* 23 | 16 | 6 | 74% */ - { 16, 7 }, /* 24 | 16 | 7 | 71% */ - { 16, 8 } /* 25 | 16 | 8 | 68% */ -}; - - -/************************************************************************************//** -** \brief Search algorithm to match the desired baudrate to a possible bus -** timing configuration. -** \param baud The desired baudrate in kbps. Valid values are 10..1000. -** \param btr Pointer to where the value for register CANxBTR will be stored. -** \return 1 if the CAN bustiming register values were found, 0 otherwise. -** -****************************************************************************************/ -static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned long *btr) -{ - unsigned short prescaler; - unsigned char cnt; - - /* loop through all possible time quanta configurations to find a match */ - for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++) - { - if ((BOOT_CPU_SYSTEM_SPEED_KHZ % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0) - { - /* compute the prescaler that goes with this TQ configuration */ - prescaler = BOOT_CPU_SYSTEM_SPEED_KHZ/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1)); - - /* make sure the prescaler is valid */ - if ( (prescaler > 0) && (prescaler <= 1024) ) - { - /* store the prescaler and bustiming register value */ - *btr = prescaler - 1; - *btr |= ((canTiming[cnt].tseg2 - 1) << 20) | ((canTiming[cnt].tseg1 - 1) << 16); - /* found a good bus timing configuration */ - return 1; - } - } - } - /* could not find a good bus timing configuration */ - return 0; -} /*** end of CanGetSpeedConfig ***/ - - -/************************************************************************************//** -** \brief Initializes the CAN communication interface. -** \return none. -** -****************************************************************************************/ -static void BootComCanInit(void) -{ - unsigned long btr_reg_value; - - /* configure acceptance filter for bypass mode so it receives all messages */ - CANAFMR = 0x00000002L; - /* take CAN controller offline and go into reset mode */ - CAN1MOD = 1; - /* disable all interrupts. driver only needs to work in polling mode */ - CAN1IER = 0; - /* reset CAN controller status */ - CAN1GSR = 0; - /* configure the bittiming */ - if (CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &btr_reg_value) == 1) - { - /* write the bittiming configuration to the register */ - CAN1BTR = btr_reg_value; - } - /* enter normal operating mode and synchronize to the CAN bus */ - CAN1MOD = 0; -} /*** end of BootComCanInit ***/ - - -/************************************************************************************//** -** \brief Receives the CONNECT request from the host, which indicates that the -** bootloader should be activated and, if so, activates it. -** \return none. -** -****************************************************************************************/ -static void BootComCanCheckActivationRequest(void) -{ - unsigned char data[2]; - - /* check if a new message was received */ - if ((CAN1SR & CAN_RBS) == 0) - { - return; - } - /* see if this is the message identifier that we are interested in */ - if (CAN1RID != BOOT_COM_CAN_RX_MSG_ID) - { - return; - } - /* store the message data */ - data[0] = (unsigned char)CAN1RDA; - data[1] = (unsigned char)(CAN1RDA >> 8); - /* release the receive buffer */ - CAN1CMR = CAN_RRB; - /* check if this was an XCP CONNECT command */ - if ((data[0] == 0xff) && (data[1] == 0x00)) - { - /* connection request received so start the bootloader */ - BootActivate(); - } -} /*** end of BootComCanCheckActivationRequest ***/ -#endif /* BOOT_COM_CAN_ENABLE > 0 */ - - -/*********************************** end of boot.c *************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/boot.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/boot.h deleted file mode 100644 index 450665f8..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/boot.h +++ /dev/null @@ -1,40 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\boot.h -* \brief Demo program bootloader interface header file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef BOOT_H -#define BOOT_H - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void BootComInit(void); -void BootComCheckActivationRequest(void); -void BootActivate(void); - - -#endif /* BOOT_H */ -/*********************************** end of boot.h *************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/cstart.s b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/cstart.s deleted file mode 100644 index 35f28e4b..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/cstart.s +++ /dev/null @@ -1,415 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2001, 2002 Rowley Associates Limited. * - * * - * This file may be distributed under the terms of the License Agreement * - * provided with this software. * - * * - * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE * - * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - *****************************************************************************/ - -/***************************************************************************** - * Preprocessor Definitions - * ------------------------ - * APP_ENTRY_POINT - * - * Defines the application entry point function, if undefined this setting - * defaults to "main". - * - * INITIALIZE_STACKS - * - * If defined, the contents of the stacks will be initialized to a the - * value 0xCC. - * - * INITIALIZE_SECONDARY_SECTIONS - * - * If defined, the .text2, .data2 and .bss2 sections will be initialized. - * - * SUPERVISOR_START - * - * If defined, the application will start up in supervisor mode. If - * undefined the application will start up in system mode. - * - * FULL_LIBRARY - * - * If defined then - * - argc, argv are setup by the debug_getargs. - * - the exit symbol is defined and executes on return from main. - * - the exit symbol calls destructors, atexit functions and then debug_exit. - * - * If not defined then - * - argc and argv are zero. - * - the exit symbol is defined, executes on return from main and loops - * - *****************************************************************************/ - - .section .vectors, "ax" - .code 32 - .align 0 - .global _vectors - .global reset_handler - -/***************************************************************************** - * Exception Vectors * - *****************************************************************************/ -_vectors: - ldr pc, [pc, #reset_handler_address - . - 8] /* reset */ - ldr pc, [pc, #undef_handler_address - . - 8] /* undefined instruction */ - ldr pc, [pc, #swi_handler_address - . - 8] /* swi handler */ - ldr pc, [pc, #pabort_handler_address - . - 8] /* abort prefetch */ - ldr pc, [pc, #dabort_handler_address - . - 8] /* abort data */ - .word 0xB9205F88 /* boot loader checksum */ - ldr pc, [pc, #-0xFF0] /* irq handler */ - ldr pc, [pc, #fiq_handler_address - . - 8] /* fiq handler */ - -reset_handler_address: - .word _start -undef_handler_address: - .word undef_handler -swi_handler_address: - .word swi_handler -pabort_handler_address: - .word pabort_handler -dabort_handler_address: - .word dabort_handler -fiq_handler_address: - .word fiq_handler - - .section .init, "ax" - .code 32 - .align 0 - -/****************************************************************************** - * * - * Default exception handlers * - * * - ******************************************************************************/ -/****************************************************************************** - * * - * Default exception handlers * - * These are declared weak symbols so they can be redefined in user code. * - * * - ******************************************************************************/ -undef_handler: - b undef_handler - -swi_handler: - b swi_handler - -pabort_handler: - b pabort_handler - -dabort_handler: - b dabort_handler - -fiq_handler: - b fiq_handler - -irq_handler: - b irq_handler - - .weak undef_handler, swi_handler, pabort_handler, dabort_handler, fiq_handler, irq_handler - - .section .init, "ax" - .code 32 - .align 4 - -#ifndef APP_ENTRY_POINT -#define APP_ENTRY_POINT main -#endif - -#ifndef ARGSSPACE -#define ARGSSPACE 128 -#endif - - .weak _start - .global __start - .global __gccmain - .extern APP_ENTRY_POINT - .global exit - -/***************************************************************************** - * Function : _start * - * Description : Main entry point and startup code for C system. * - *****************************************************************************/ -_start: -__start: - mrs r0, cpsr - bic r0, r0, #0x1F - - /* Setup stacks */ - orr r1, r0, #0x1B /* Undefined mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_und_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - - orr r1, r0, #0x17 /* Abort mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_abt_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - - orr r1, r0, #0x12 /* IRQ mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_irq_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - - orr r1, r0, #0x11 /* FIQ mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_fiq_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - - orr r1, r0, #0x13 /* Supervisor mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_svc_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - -#ifdef SUPERVISOR_START - /* Start application in supervisor mode */ - ldr r1, =__stack_end__ /* Setup user/system mode stack */ -#ifdef __ARM_EABI__ - bic r1, r1, #0x7 -#endif - mov r2, sp - stmfd r2!, {r1} - ldmfd r2, {sp}^ -#else - /* Start application in system mode */ - orr r1, r0, #0x1F /* System mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif -#endif - -#ifdef INITIALIZE_STACKS - mov r2, #0xCC - ldr r0, =__stack_und_start__ - ldr r1, =__stack_und_end__ - bl memory_set - ldr r0, =__stack_abt_start__ - ldr r1, =__stack_abt_end__ - bl memory_set - ldr r0, =__stack_irq_start__ - ldr r1, =__stack_irq_end__ - bl memory_set - ldr r0, =__stack_fiq_start__ - ldr r1, =__stack_fiq_end__ - bl memory_set - ldr r0, =__stack_svc_start__ - ldr r1, =__stack_svc_end__ - bl memory_set - ldr r0, =__stack_start__ - ldr r1, =__stack_end__ - bl memory_set -#endif - - /* Copy initialised memory sections into RAM (if necessary). */ - ldr r0, =__data_load_start__ - ldr r1, =__data_start__ - ldr r2, =__data_end__ - bl memory_copy - ldr r0, =__text_load_start__ - ldr r1, =__text_start__ - ldr r2, =__text_end__ - bl memory_copy - ldr r0, =__fast_load_start__ - ldr r1, =__fast_start__ - ldr r2, =__fast_end__ - bl memory_copy - ldr r0, =__ctors_load_start__ - ldr r1, =__ctors_start__ - ldr r2, =__ctors_end__ - bl memory_copy - ldr r0, =__dtors_load_start__ - ldr r1, =__dtors_start__ - ldr r2, =__dtors_end__ - bl memory_copy - ldr r0, =__rodata_load_start__ - ldr r1, =__rodata_start__ - ldr r2, =__rodata_end__ - bl memory_copy -#ifdef INITIALIZE_SECONDARY_SECTIONS - ldr r0, =__data2_load_start__ - ldr r1, =__data2_start__ - ldr r2, =__data2_end__ - bl memory_copy - ldr r0, =__text2_load_start__ - ldr r1, =__text2_start__ - ldr r2, =__text2_end__ - bl memory_copy - ldr r0, =__rodata2_load_start__ - ldr r1, =__rodata2_start__ - ldr r2, =__rodata2_end__ - bl memory_copy -#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */ - - /* Zero the bss. */ - ldr r0, =__bss_start__ - ldr r1, =__bss_end__ - mov r2, #0 - bl memory_set -#ifdef INITIALIZE_SECONDARY_SECTIONS - ldr r0, =__bss2_start__ - ldr r1, =__bss2_end__ - mov r2, #0 - bl memory_set -#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */ - - /* Initialise the heap */ - ldr r0, = __heap_start__ - ldr r1, = __heap_end__ - sub r1, r1, r0 - cmp r1, #8 - movge r2, #0 - strge r2, [r0], #+4 - strge r1, [r0] - - /* Call constructors */ - ldr r0, =__ctors_start__ - ldr r1, =__ctors_end__ -ctor_loop: - cmp r0, r1 - beq ctor_end - ldr r2, [r0], #+4 - stmfd sp!, {r0-r1} - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - ldmfd sp!, {r0-r1} - b ctor_loop -ctor_end: - - .type start, function -start: - /* Jump to application entry point */ -#ifdef FULL_LIBRARY - mov r0, #ARGSSPACE - ldr r1, =args - ldr r2, =debug_getargs - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - ldr r1, =args -#else - mov r0, #0 - mov r1, #0 -#endif - ldr r2, =APP_ENTRY_POINT - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - -exit: -#ifdef FULL_LIBRARY - mov r5, r0 // save the exit parameter/return result - - /* Call destructors */ - ldr r0, =__dtors_start__ - ldr r1, =__dtors_end__ -dtor_loop: - cmp r0, r1 - beq dtor_end - ldr r2, [r0], #+4 - stmfd sp!, {r0-r1} - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - ldmfd sp!, {r0-r1} - b dtor_loop -dtor_end: - - /* Call atexit functions */ - ldr r2, =_execute_at_exit_fns - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - - /* Call debug_exit with return result/exit parameter */ - mov r0, r5 - ldr r2, =debug_exit - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - -#endif - - /* Returned from application entry point/debug_exit, loop forever. */ -exit_loop: - b exit_loop - -memory_copy: - cmp r0, r1 - moveq pc, lr - subs r2, r2, r1 - moveq pc, lr - - /* if either pointer or length is not word aligned then byte copy */ - orr r3, r0, r1 - orr r3, r3, r2 - tst r3, #0x3 - bne 2f - /* word copy */ -1: - ldr r3, [r0], #+4 - str r3, [r1], #+4 - subs r2, r2, #4 - bne 1b - mov pc, lr - /* byte copy */ -2: - ldrb r3, [r0], #+1 - strb r3, [r1], #+1 - subs r2, r2, #1 - bne 2b - mov pc, lr - -memory_set: - cmp r0, r1 - moveq pc, lr - strb r2, [r0], #1 - b memory_set - -#ifdef FULL_LIBRARY - .bss -args: - .space ARGSSPACE -#endif - - /* Setup attibutes of stack and heap sections so they don't take up unnecessary room in the elf file */ - .section .stack, "wa", %nobits - .section .stack_abt, "wa", %nobits - .section .stack_irq, "wa", %nobits - .section .stack_fiq, "wa", %nobits - .section .stack_svc, "wa", %nobits - .section .stack_und, "wa", %nobits - .section .heap, "wa", %nobits - diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/header.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/header.h deleted file mode 100644 index 1584de97..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/header.h +++ /dev/null @@ -1,43 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\header.h -* \brief Generic header file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef HEADER_H -#define HEADER_H - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "../Boot/blt_conf.h" /* bootloader configuration */ -#include "lpc2294.h" /* CPU register definitions */ -#include "boot.h" /* bootloader interface driver */ -#include "irq.h" /* IRQ driver */ -#include "led.h" /* LED driver */ -#include "timer.h" /* Timer driver */ - - -#endif /* HEADER_H */ -/*********************************** end of header.h ***********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp deleted file mode 100644 index 773e1a8a..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs deleted file mode 100644 index b71bbe7b..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/readme.txt b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/readme.txt deleted file mode 100644 index a49767fb..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -Integrated Development Environment ----------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains -the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/irq.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/irq.c deleted file mode 100644 index e94ae90a..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/irq.c +++ /dev/null @@ -1,130 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\irq.c -* \brief IRQ driver source file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Local data definitions -****************************************************************************************/ -/** \brief Interrupt status before disabling. Used for global interrupt en/disable. */ -static unsigned long oldInterruptStatus; -/** \brief Interrupt nesting counter. Used for global interrupt en/disable. */ -static unsigned char interruptNesting = 0; - - -/************************************************************************************//** -** \brief Obtains current value of CPSR CPU register. Derived from a sample by R O -** Software that is Copyright 2004, R O SoftWare, and can be used for hobby -** or commercial purposes. -** \return CPSR value. -** -****************************************************************************************/ -static unsigned long IrqGetCPSR(void) -{ - unsigned long retval; - __asm__ volatile (" mrs %0, cpsr" : "=r" (retval) : /* no inputs */ ); - return retval; -} /*** end of IrqGetCPSR ***/ - - -/************************************************************************************//** -** \brief Update value of CPSR CPU register. Derived from a sample by R O -** Software that is Copyright 2004, R O SoftWare, and can be used for hobby -** or commercial purposes. -** \param val CPSR value. -** \return none. -** -****************************************************************************************/ -static void IrqSetCPSR(unsigned long val) -{ - __asm__ volatile (" msr cpsr, %0" : /* no outputs */ : "r" (val) ); -} /*** end of IrqSetCPSR ***/ - - -/************************************************************************************//** -** \brief Enables the generation IRQ interrupts. Typically called once during -** software startup after completion of the initialization. -** \return none. -** -****************************************************************************************/ -void IrqInterruptEnable(void) -{ - unsigned _cpsr; - - _cpsr = IrqGetCPSR(); - IrqSetCPSR(_cpsr & ~0x00000080); -} /*** end of IrqInterruptEnable ***/ - - -/************************************************************************************//** -** \brief Disables the generation IRQ interrupts and stores information on -** whether or not the interrupts were already disabled before explicitly -** disabling them with this function. Normally used as a pair together -** with IrqInterruptRestore during a critical section. -** \return none. -** -****************************************************************************************/ -void IrqInterruptDisable(void) -{ - unsigned long _cpsr; - - if (interruptNesting == 0) - { - _cpsr = IrqGetCPSR(); - IrqSetCPSR(_cpsr | 0x00000080); - oldInterruptStatus = _cpsr; - } - interruptNesting++; -} /*** end of IrqInterruptDisable ***/ - - -/************************************************************************************//** -** \brief Restore the generation IRQ interrupts to the setting it had prior to -** calling IrqInterruptDisable. Normally used as a pair together with -** IrqInterruptDisable during a critical section. -** \return none. -** -****************************************************************************************/ -void IrqInterruptRestore(void) -{ - unsigned _cpsr; - - interruptNesting--; - if (interruptNesting == 0) - { - _cpsr = IrqGetCPSR(); - IrqSetCPSR((_cpsr & ~0x00000080) | (oldInterruptStatus & 0x00000080)); - } -} /*** end of IrqInterruptRestore ***/ - - -/*********************************** end of irq.c **************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/irq.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/irq.h deleted file mode 100644 index 86a0d69c..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/irq.h +++ /dev/null @@ -1,40 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\irq.h -* \brief IRQ driver header file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef IRQ_H -#define IRQ_H - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void IrqInterruptEnable(void); -void IrqInterruptDisable(void); -void IrqInterruptRestore(void); - - -#endif /* IRQ_H */ -/*********************************** end of irq.h **************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/led.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/led.c deleted file mode 100644 index f02e3f77..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/led.c +++ /dev/null @@ -1,94 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\led.c -* \brief LED driver source file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -/** \brief Toggle interval time in milliseconds. */ -#define LED_TOGGLE_MS (500) - - -/************************************************************************************//** -** \brief Initializes the LED. -** \return none. -** -****************************************************************************************/ -void LedInit(void) -{ - /* set io pins for led P1.23 */ - IO1DIR |= 0x00800000; - /* turn the led off */ - IO1SET = 0x00800000; -} /*** end of LedInit ***/ - - -/************************************************************************************//** -** \brief Toggles the LED at a fixed time interval. -** \return none. -** -****************************************************************************************/ -void LedToggle(void) -{ - static unsigned char led_toggle_state = 0; - static unsigned long timer_counter_last = 0; - unsigned long timer_counter_now; - - /* check if toggle interval time passed */ - timer_counter_now = TimerGet(); - if ( (timer_counter_now - timer_counter_last) < LED_TOGGLE_MS) - { - /* not yet time to toggle */ - return; - } - - /* determine toggle action */ - if (led_toggle_state == 0) - { - led_toggle_state = 1; - /* turn the LED on */ - IO1CLR = 0x00800000; - } - else - { - led_toggle_state = 0; - /* turn the LED off */ - IO1SET = 0x00800000; - } - - /* store toggle time to determine next toggle interval */ - timer_counter_last = timer_counter_now; -} /*** end of LedToggle ***/ - - -/*********************************** end of led.c **************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/led.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/led.h deleted file mode 100644 index 70d183d1..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/led.h +++ /dev/null @@ -1,39 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\led.h -* \brief LED driver header file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef LED_H -#define LED_H - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void LedInit(void); -void LedToggle(void); - - -#endif /* LED_H */ -/*********************************** end of led.h **************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/lpc2294.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/lpc2294.h deleted file mode 100644 index 933080db..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/lpc2294.h +++ /dev/null @@ -1,404 +0,0 @@ -/**************************************************************************************** -| Description: NXP LPC2294 register definitions -| File Name: lpc2294.h -| -|---------------------------------------------------------------------------------------- -| C O P Y R I G H T -|---------------------------------------------------------------------------------------- -| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -| -|---------------------------------------------------------------------------------------- -| L I C E N S E -|---------------------------------------------------------------------------------------- -| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -| modify it under the terms of the GNU General Public License as published by the Free -| Software Foundation, either version 3 of the License, or (at your option) any later -| version. -| -| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -| PURPOSE. See the GNU General Public License for more details. -| -| You have received a copy of the GNU General Public License along with OpenBLT. It -| should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -| -****************************************************************************************/ -#ifndef LPC2294_H -#define LPC2294_H - - -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -/* EXTERNAL MEMORY CONTROLLER (EMC) */ -#define BCFG0 (*((volatile unsigned long *) 0xFFE00000)) /* lpc22xx only */ -#define BCFG1 (*((volatile unsigned long *) 0xFFE00004)) /* lpc22xx only */ -#define BCFG2 (*((volatile unsigned long *) 0xFFE00008)) /* lpc22xx only */ -#define BCFG3 (*((volatile unsigned long *) 0xFFE0000C)) /* lpc22xx only */ - -/* External Interrupts */ -#define EXTINT (*((volatile unsigned char *) 0xE01FC140)) -#define EXTWAKE (*((volatile unsigned char *) 0xE01FC144)) -#define EXTMODE (*((volatile unsigned char *) 0xE01FC148)) /* no in lpc210x*/ -#define EXTPOLAR (*((volatile unsigned char *) 0xE01FC14C)) /* no in lpc210x*/ - -/* SMemory mapping control. */ -#define MEMMAP (*((volatile unsigned long *) 0xE01FC040)) - -/* Phase Locked Loop (PLL) */ -#define PLLCON (*((volatile unsigned char *) 0xE01FC080)) -#define PLLCFG (*((volatile unsigned char *) 0xE01FC084)) -#define PLLSTAT (*((volatile unsigned short*) 0xE01FC088)) -#define PLLFEED (*((volatile unsigned char *) 0xE01FC08C)) - -/* Power Control */ -#define PCON (*((volatile unsigned char *) 0xE01FC0C0)) -#define PCONP (*((volatile unsigned long *) 0xE01FC0C4)) - -/* VPB Divider */ -#define VPBDIV (*((volatile unsigned char *) 0xE01FC100)) - -/* Memory Accelerator Module (MAM) */ -#define MAMCR (*((volatile unsigned char *) 0xE01FC000)) -#define MAMTIM (*((volatile unsigned char *) 0xE01FC004)) - -/* Vectored Interrupt Controller (VIC) */ -#define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) -#define VICFIQStatus (*((volatile unsigned long *) 0xFFFFF004)) -#define VICRawIntr (*((volatile unsigned long *) 0xFFFFF008)) -#define VICIntSelect (*((volatile unsigned long *) 0xFFFFF00C)) -#define VICIntEnable (*((volatile unsigned long *) 0xFFFFF010)) -#define VICIntEnClr (*((volatile unsigned long *) 0xFFFFF014)) -#define VICSoftInt (*((volatile unsigned long *) 0xFFFFF018)) -#define VICSoftIntClear (*((volatile unsigned long *) 0xFFFFF01C)) -#define VICProtection (*((volatile unsigned long *) 0xFFFFF020)) -#define VICVectAddr (*((volatile unsigned long *) 0xFFFFF030)) -#define VICDefVectAddr (*((volatile unsigned long *) 0xFFFFF034)) -#define VICVectAddr0 (*((volatile unsigned long *) 0xFFFFF100)) -#define VICVectAddr1 (*((volatile unsigned long *) 0xFFFFF104)) -#define VICVectAddr2 (*((volatile unsigned long *) 0xFFFFF108)) -#define VICVectAddr3 (*((volatile unsigned long *) 0xFFFFF10C)) -#define VICVectAddr4 (*((volatile unsigned long *) 0xFFFFF110)) -#define VICVectAddr5 (*((volatile unsigned long *) 0xFFFFF114)) -#define VICVectAddr6 (*((volatile unsigned long *) 0xFFFFF118)) -#define VICVectAddr7 (*((volatile unsigned long *) 0xFFFFF11C)) -#define VICVectAddr8 (*((volatile unsigned long *) 0xFFFFF120)) -#define VICVectAddr9 (*((volatile unsigned long *) 0xFFFFF124)) -#define VICVectAddr10 (*((volatile unsigned long *) 0xFFFFF128)) -#define VICVectAddr11 (*((volatile unsigned long *) 0xFFFFF12C)) -#define VICVectAddr12 (*((volatile unsigned long *) 0xFFFFF130)) -#define VICVectAddr13 (*((volatile unsigned long *) 0xFFFFF134)) -#define VICVectAddr14 (*((volatile unsigned long *) 0xFFFFF138)) -#define VICVectAddr15 (*((volatile unsigned long *) 0xFFFFF13C)) -#define VICVectCntl0 (*((volatile unsigned long *) 0xFFFFF200)) -#define VICVectCntl1 (*((volatile unsigned long *) 0xFFFFF204)) -#define VICVectCntl2 (*((volatile unsigned long *) 0xFFFFF208)) -#define VICVectCntl3 (*((volatile unsigned long *) 0xFFFFF20C)) -#define VICVectCntl4 (*((volatile unsigned long *) 0xFFFFF210)) -#define VICVectCntl5 (*((volatile unsigned long *) 0xFFFFF214)) -#define VICVectCntl6 (*((volatile unsigned long *) 0xFFFFF218)) -#define VICVectCntl7 (*((volatile unsigned long *) 0xFFFFF21C)) -#define VICVectCntl8 (*((volatile unsigned long *) 0xFFFFF220)) -#define VICVectCntl9 (*((volatile unsigned long *) 0xFFFFF224)) -#define VICVectCntl10 (*((volatile unsigned long *) 0xFFFFF228)) -#define VICVectCntl11 (*((volatile unsigned long *) 0xFFFFF22C)) -#define VICVectCntl12 (*((volatile unsigned long *) 0xFFFFF230)) -#define VICVectCntl13 (*((volatile unsigned long *) 0xFFFFF234)) -#define VICVectCntl14 (*((volatile unsigned long *) 0xFFFFF238)) -#define VICVectCntl15 (*((volatile unsigned long *) 0xFFFFF23C)) - -/* Pin Connect Block */ -#define PINSEL0 (*((volatile unsigned long *) 0xE002C000)) -#define PINSEL1 (*((volatile unsigned long *) 0xE002C004)) -#define PINSEL2 (*((volatile unsigned long *) 0xE002C014)) /* no in lpc210x*/ - -/* General Purpose Input/Output (GPIO) */ -#define IOPIN (*((volatile unsigned long *) 0xE0028000)) /* lpc210x only */ -#define IOSET (*((volatile unsigned long *) 0xE0028004)) /* lpc210x only */ -#define IODIR (*((volatile unsigned long *) 0xE0028008)) /* lpc210x only */ -#define IOCLR (*((volatile unsigned long *) 0xE002800C)) /* lpc210x only */ - -#define IO0PIN (*((volatile unsigned long *) 0xE0028000)) /* no in lpc210x*/ -#define IO0SET (*((volatile unsigned long *) 0xE0028004)) /* no in lpc210x*/ -#define IO0DIR (*((volatile unsigned long *) 0xE0028008)) /* no in lpc210x*/ -#define IO0CLR (*((volatile unsigned long *) 0xE002800C)) /* no in lpc210x*/ - -#define IO1PIN (*((volatile unsigned long *) 0xE0028010)) /* no in lpc210x*/ -#define IO1SET (*((volatile unsigned long *) 0xE0028014)) /* no in lpc210x*/ -#define IO1DIR (*((volatile unsigned long *) 0xE0028018)) /* no in lpc210x*/ -#define IO1CLR (*((volatile unsigned long *) 0xE002801C)) /* no in lpc210x*/ - -#define IO2PIN (*((volatile unsigned long *) 0xE0028020)) /* lpc22xx only */ -#define IO2SET (*((volatile unsigned long *) 0xE0028024)) /* lpc22xx only */ -#define IO2DIR (*((volatile unsigned long *) 0xE0028028)) /* lpc22xx only */ -#define IO2CLR (*((volatile unsigned long *) 0xE002802C)) /* lpc22xx only */ - -#define IO3PIN (*((volatile unsigned long *) 0xE0028030)) /* lpc22xx only */ -#define IO3SET (*((volatile unsigned long *) 0xE0028034)) /* lpc22xx only */ -#define IO3DIR (*((volatile unsigned long *) 0xE0028038)) /* lpc22xx only */ -#define IO3CLR (*((volatile unsigned long *) 0xE002803C)) /* lpc22xx only */ - -/* Universal Asynchronous Receiver Transmitter 0 (UART0) */ -#define U0RBR (*((volatile unsigned char *) 0xE000C000)) -#define U0THR (*((volatile unsigned char *) 0xE000C000)) -#define U0IER (*((volatile unsigned char *) 0xE000C004)) -#define U0IIR (*((volatile unsigned char *) 0xE000C008)) -#define U0FCR (*((volatile unsigned char *) 0xE000C008)) -#define U0LCR (*((volatile unsigned char *) 0xE000C00C)) -#define U0LSR (*((volatile unsigned char *) 0xE000C014)) -#define U0SCR (*((volatile unsigned char *) 0xE000C01C)) -#define U0DLL (*((volatile unsigned char *) 0xE000C000)) -#define U0DLM (*((volatile unsigned char *) 0xE000C004)) - -/* Universal Asynchronous Receiver Transmitter 1 (UART1) */ -#define U1RBR (*((volatile unsigned char *) 0xE0010000)) -#define U1THR (*((volatile unsigned char *) 0xE0010000)) -#define U1IER (*((volatile unsigned char *) 0xE0010004)) -#define U1IIR (*((volatile unsigned char *) 0xE0010008)) -#define U1FCR (*((volatile unsigned char *) 0xE0010008)) -#define U1LCR (*((volatile unsigned char *) 0xE001000C)) -#define U1MCR (*((volatile unsigned char *) 0xE0010010)) -#define U1LSR (*((volatile unsigned char *) 0xE0010014)) -#define U1MSR (*((volatile unsigned char *) 0xE0010018)) -#define U1SCR (*((volatile unsigned char *) 0xE001001C)) -#define U1DLL (*((volatile unsigned char *) 0xE0010000)) -#define U1DLM (*((volatile unsigned char *) 0xE0010004)) - -/* I2C (8/16 bit data bus) */ -#define I2CONSET (*((volatile unsigned long *) 0xE001C000)) -#define I2STAT (*((volatile unsigned long *) 0xE001C004)) -#define I2DAT (*((volatile unsigned long *) 0xE001C008)) -#define I2ADR (*((volatile unsigned long *) 0xE001C00C)) -#define I2SCLH (*((volatile unsigned long *) 0xE001C010)) -#define I2SCLL (*((volatile unsigned long *) 0xE001C014)) -#define I2CONCLR (*((volatile unsigned long *) 0xE001C018)) - -/* SPI (Serial Peripheral Interface) */ - /* only for lpc210x*/ -#define SPI_SPCR (*((volatile unsigned char *) 0xE0020000)) -#define SPI_SPSR (*((volatile unsigned char *) 0xE0020004)) -#define SPI_SPDR (*((volatile unsigned char *) 0xE0020008)) -#define SPI_SPCCR (*((volatile unsigned char *) 0xE002000C)) -#define SPI_SPINT (*((volatile unsigned char *) 0xE002001C)) - -#define S0PCR (*((volatile unsigned char *) 0xE0020000)) /* no in lpc210x*/ -#define S0PSR (*((volatile unsigned char *) 0xE0020004)) /* no in lpc210x*/ -#define S0PDR (*((volatile unsigned char *) 0xE0020008)) /* no in lpc210x*/ -#define S0PCCR (*((volatile unsigned char *) 0xE002000C)) /* no in lpc210x*/ -#define S0PINT (*((volatile unsigned char *) 0xE002001C)) /* no in lpc210x*/ - -#define S1PCR (*((volatile unsigned char *) 0xE0030000)) /* no in lpc210x*/ -#define S1PSR (*((volatile unsigned char *) 0xE0030004)) /* no in lpc210x*/ -#define S1PDR (*((volatile unsigned char *) 0xE0030008)) /* no in lpc210x*/ -#define S1PCCR (*((volatile unsigned char *) 0xE003000C)) /* no in lpc210x*/ -#define S1PINT (*((volatile unsigned char *) 0xE003001C)) /* no in lpc210x*/ - -/* CAN CONTROLLERS AND ACCEPTANCE FILTER */ -#define CAN1MOD (*((volatile unsigned long *) 0xE0044000)) /* All CAN Parts */ -#define CAN1CMR (*((volatile unsigned long *) 0xE0044004)) /* All CAN Parts */ -#define CAN1GSR (*((volatile unsigned long *) 0xE0044008)) /* All CAN Parts */ -#define CAN1ICR (*((volatile unsigned long *) 0xE004400C)) /* All CAN Parts */ -#define CAN1IER (*((volatile unsigned long *) 0xE0044010)) /* All CAN Parts */ -#define CAN1BTR (*((volatile unsigned long *) 0xE0044014)) /* All CAN Parts */ -#define CAN1EWL (*((volatile unsigned long *) 0xE0044018)) /* All CAN Parts */ -#define CAN1SR (*((volatile unsigned long *) 0xE004401C)) /* All CAN Parts */ -#define CAN1RFS (*((volatile unsigned long *) 0xE0044020)) /* All CAN Parts */ -#define CAN1RID (*((volatile unsigned long *) 0xE0044024)) /* All CAN Parts */ -#define CAN1RDA (*((volatile unsigned long *) 0xE0044028)) /* All CAN Parts */ -#define CAN1RDB (*((volatile unsigned long *) 0xE004402C)) /* All CAN Parts */ -#define CAN1TFI1 (*((volatile unsigned long *) 0xE0044030)) /* All CAN Parts */ -#define CAN1TID1 (*((volatile unsigned long *) 0xE0044034)) /* All CAN Parts */ -#define CAN1TDA1 (*((volatile unsigned long *) 0xE0044038)) /* All CAN Parts */ -#define CAN1TDB1 (*((volatile unsigned long *) 0xE004403C)) /* All CAN Parts */ -#define CAN1TFI2 (*((volatile unsigned long *) 0xE0044040)) /* All CAN Parts */ -#define CAN1TID2 (*((volatile unsigned long *) 0xE0044044)) /* All CAN Parts */ -#define CAN1TDA2 (*((volatile unsigned long *) 0xE0044048)) /* All CAN Parts */ -#define CAN1TDB2 (*((volatile unsigned long *) 0xE004404C)) /* All CAN Parts */ -#define CAN1TFI3 (*((volatile unsigned long *) 0xE0044050)) /* All CAN Parts */ -#define CAN1TID3 (*((volatile unsigned long *) 0xE0044054)) /* All CAN Parts */ -#define CAN1TDA3 (*((volatile unsigned long *) 0xE0044058)) /* All CAN Parts */ -#define CAN1TDB3 (*((volatile unsigned long *) 0xE004405C)) /* All CAN Parts */ - -#define CAN2MOD (*((volatile unsigned long *) 0xE0048000)) /* All CAN Parts */ -#define CAN2CMR (*((volatile unsigned long *) 0xE0048004)) /* All CAN Parts */ -#define CAN2GSR (*((volatile unsigned long *) 0xE0048008)) /* All CAN Parts */ -#define CAN2ICR (*((volatile unsigned long *) 0xE004800C)) /* All CAN Parts */ -#define CAN2IER (*((volatile unsigned long *) 0xE0048010)) /* All CAN Parts */ -#define CAN2BTR (*((volatile unsigned long *) 0xE0048014)) /* All CAN Parts */ -#define CAN2EWL (*((volatile unsigned long *) 0xE0048018)) /* All CAN Parts */ -#define CAN2SR (*((volatile unsigned long *) 0xE004801C)) /* All CAN Parts */ -#define CAN2RFS (*((volatile unsigned long *) 0xE0048020)) /* All CAN Parts */ -#define CAN2RID (*((volatile unsigned long *) 0xE0048024)) /* All CAN Parts */ -#define CAN2RDA (*((volatile unsigned long *) 0xE0048028)) /* All CAN Parts */ -#define CAN2RDB (*((volatile unsigned long *) 0xE004802C)) /* All CAN Parts */ -#define CAN2TFI1 (*((volatile unsigned long *) 0xE0048030)) /* All CAN Parts */ -#define CAN2TID1 (*((volatile unsigned long *) 0xE0048034)) /* All CAN Parts */ -#define CAN2TDA1 (*((volatile unsigned long *) 0xE0048038)) /* All CAN Parts */ -#define CAN2TDB1 (*((volatile unsigned long *) 0xE004803C)) /* All CAN Parts */ -#define CAN2TFI2 (*((volatile unsigned long *) 0xE0048040)) /* All CAN Parts */ -#define CAN2TID2 (*((volatile unsigned long *) 0xE0048044)) /* All CAN Parts */ -#define CAN2TDA2 (*((volatile unsigned long *) 0xE0048048)) /* All CAN Parts */ -#define CAN2TDB2 (*((volatile unsigned long *) 0xE004804C)) /* All CAN Parts */ -#define CAN2TFI3 (*((volatile unsigned long *) 0xE0048050)) /* All CAN Parts */ -#define CAN2TID3 (*((volatile unsigned long *) 0xE0048054)) /* All CAN Parts */ -#define CAN2TDA3 (*((volatile unsigned long *) 0xE0048058)) /* All CAN Parts */ -#define CAN2TDB3 (*((volatile unsigned long *) 0xE004805C)) /* All CAN Parts */ - -#define CAN3MOD (*((volatile unsigned long *) 0xE004C000)) /* lpc2194\lpc2294 only */ -#define CAN3CMR (*((volatile unsigned long *) 0xE004C004)) /* lpc2194\lpc2294 only */ -#define CAN3GSR (*((volatile unsigned long *) 0xE004C008)) /* lpc2194\lpc2294 only */ -#define CAN3ICR (*((volatile unsigned long *) 0xE004C00C)) /* lpc2194\lpc2294 only */ -#define CAN3IER (*((volatile unsigned long *) 0xE004C010)) /* lpc2194\lpc2294 only */ -#define CAN3BTR (*((volatile unsigned long *) 0xE004C014)) /* lpc2194\lpc2294 only */ -#define CAN3EWL (*((volatile unsigned long *) 0xE004C018)) /* lpc2194\lpc2294 only */ -#define CAN3SR (*((volatile unsigned long *) 0xE004C01C)) /* lpc2194\lpc2294 only */ -#define CAN3RFS (*((volatile unsigned long *) 0xE004C020)) /* lpc2194\lpc2294 only */ -#define CAN3RID (*((volatile unsigned long *) 0xE004C024)) /* lpc2194\lpc2294 only */ -#define CAN3RDA (*((volatile unsigned long *) 0xE004C028)) /* lpc2194\lpc2294 only */ -#define CAN3RDB (*((volatile unsigned long *) 0xE004C02C)) /* lpc2194\lpc2294 only */ -#define CAN3TFI1 (*((volatile unsigned long *) 0xE004C030)) /* lpc2194\lpc2294 only */ -#define CAN3TID1 (*((volatile unsigned long *) 0xE004C034)) /* lpc2194\lpc2294 only */ -#define CAN3TDA1 (*((volatile unsigned long *) 0xE004C038)) /* lpc2194\lpc2294 only */ -#define CAN3TDB1 (*((volatile unsigned long *) 0xE004C03C)) /* lpc2194\lpc2294 only */ -#define CAN3TFI2 (*((volatile unsigned long *) 0xE004C040)) /* lpc2194\lpc2294 only */ -#define CAN3TID2 (*((volatile unsigned long *) 0xE004C044)) /* lpc2194\lpc2294 only */ -#define CAN3TDA2 (*((volatile unsigned long *) 0xE004C048)) /* lpc2194\lpc2294 only */ -#define CAN3TDB2 (*((volatile unsigned long *) 0xE004C04C)) /* lpc2194\lpc2294 only */ -#define CAN3TFI3 (*((volatile unsigned long *) 0xE004C050)) /* lpc2194\lpc2294 only */ -#define CAN3TID3 (*((volatile unsigned long *) 0xE004C054)) /* lpc2194\lpc2294 only */ -#define CAN3TDA3 (*((volatile unsigned long *) 0xE004C058)) /* lpc2194\lpc2294 only */ -#define CAN3TDB3 (*((volatile unsigned long *) 0xE004C05C)) /* lpc2194\lpc2294 only */ - -#define CAN4MOD (*((volatile unsigned long *) 0xE0050000)) /* lpc2194\lpc2294 only */ -#define CAN4CMR (*((volatile unsigned long *) 0xE0050004)) /* lpc2194\lpc2294 only */ -#define CAN4GSR (*((volatile unsigned long *) 0xE0050008)) /* lpc2194\lpc2294 only */ -#define CAN4ICR (*((volatile unsigned long *) 0xE005000C)) /* lpc2194\lpc2294 only */ -#define CAN4IER (*((volatile unsigned long *) 0xE0050010)) /* lpc2194\lpc2294 only */ -#define CAN4BTR (*((volatile unsigned long *) 0xE0050014)) /* lpc2194\lpc2294 only */ -#define CAN4EWL (*((volatile unsigned long *) 0xE0050018)) /* lpc2194\lpc2294 only */ -#define CAN4SR (*((volatile unsigned long *) 0xE005001C)) /* lpc2194\lpc2294 only */ -#define CAN4RFS (*((volatile unsigned long *) 0xE0050020)) /* lpc2194\lpc2294 only */ -#define CAN4RID (*((volatile unsigned long *) 0xE0050024)) /* lpc2194\lpc2294 only */ -#define CAN4RDA (*((volatile unsigned long *) 0xE0050028)) /* lpc2194\lpc2294 only */ -#define CAN4RDB (*((volatile unsigned long *) 0xE005002C)) /* lpc2194\lpc2294 only */ -#define CAN4TFI1 (*((volatile unsigned long *) 0xE0050030)) /* lpc2194\lpc2294 only */ -#define CAN4TID1 (*((volatile unsigned long *) 0xE0050034)) /* lpc2194\lpc2294 only */ -#define CAN4TDA1 (*((volatile unsigned long *) 0xE0050038)) /* lpc2194\lpc2294 only */ -#define CAN4TDB1 (*((volatile unsigned long *) 0xE005003C)) /* lpc2194\lpc2294 only */ -#define CAN4TFI2 (*((volatile unsigned long *) 0xE0050040)) /* lpc2194\lpc2294 only */ -#define CAN4TID2 (*((volatile unsigned long *) 0xE0050044)) /* lpc2194\lpc2294 only */ -#define CAN4TDA2 (*((volatile unsigned long *) 0xE0050048)) /* lpc2194\lpc2294 only */ -#define CAN4TDB2 (*((volatile unsigned long *) 0xE005004C)) /* lpc2194\lpc2294 only */ -#define CAN4TFI3 (*((volatile unsigned long *) 0xE0050050)) /* lpc2194\lpc2294 only */ -#define CAN4TID3 (*((volatile unsigned long *) 0xE0050054)) /* lpc2194\lpc2294 only */ -#define CAN4TDA3 (*((volatile unsigned long *) 0xE0050058)) /* lpc2194\lpc2294 only */ -#define CAN4TDB3 (*((volatile unsigned long *) 0xE005005C)) /* lpc2194\lpc2294 only */ - - -#define CANTxSR (*((volatile unsigned long *) 0xE0040000)) /* ALL CAN Parts */ -#define CANRxSR (*((volatile unsigned long *) 0xE0040004)) /* ALL CAN Parts */ -#define CANMSR (*((volatile unsigned long *) 0xE0040008)) /* ALL CAN Parts */ - -#define CANAFMR (*((volatile unsigned char *) 0xE003C000)) /* ALL CAN Parts */ -#define CANSFF_sa (*((volatile unsigned short*) 0xE003C004)) /* ALL CAN Parts */ -#define CANSFF_GRP_sa (*((volatile unsigned short*) 0xE003C008)) /* ALL CAN Parts */ -#define CANEFF_sa (*((volatile unsigned short*) 0xE003C00C)) /* ALL CAN Parts */ -#define CANEFF_GRP_sa (*((volatile unsigned short*) 0xE003C010)) /* ALL CAN Parts */ -#define CANENDofTable (*((volatile unsigned short*) 0xE003C014)) /* ALL CAN Parts */ -#define CANLUTerrAd (*((volatile unsigned short*) 0xE003C018)) /* ALL CAN Parts */ -#define CANLUTerr (*((volatile unsigned char *) 0xE003C01C)) /* ALL CAN Parts */ - - -/* Timer 0 */ -#define T0IR (*((volatile unsigned long *) 0xE0004000)) -#define T0TCR (*((volatile unsigned long *) 0xE0004004)) -#define T0TC (*((volatile unsigned long *) 0xE0004008)) -#define T0PR (*((volatile unsigned long *) 0xE000400C)) -#define T0PC (*((volatile unsigned long *) 0xE0004010)) -#define T0MCR (*((volatile unsigned long *) 0xE0004014)) -#define T0MR0 (*((volatile unsigned long *) 0xE0004018)) -#define T0MR1 (*((volatile unsigned long *) 0xE000401C)) -#define T0MR2 (*((volatile unsigned long *) 0xE0004020)) -#define T0MR3 (*((volatile unsigned long *) 0xE0004024)) -#define T0CCR (*((volatile unsigned long *) 0xE0004028)) -#define T0CR0 (*((volatile unsigned long *) 0xE000402C)) -#define T0CR1 (*((volatile unsigned long *) 0xE0004030)) -#define T0CR2 (*((volatile unsigned long *) 0xE0004034)) -#define T0CR3 (*((volatile unsigned long *) 0xE0004038)) -#define T0EMR (*((volatile unsigned long *) 0xE000403C)) - -/* Timer 1 */ -#define T1IR (*((volatile unsigned long *) 0xE0008000)) -#define T1TCR (*((volatile unsigned long *) 0xE0008004)) -#define T1TC (*((volatile unsigned long *) 0xE0008008)) -#define T1PR (*((volatile unsigned long *) 0xE000800C)) -#define T1PC (*((volatile unsigned long *) 0xE0008010)) -#define T1MCR (*((volatile unsigned long *) 0xE0008014)) -#define T1MR0 (*((volatile unsigned long *) 0xE0008018)) -#define T1MR1 (*((volatile unsigned long *) 0xE000801C)) -#define T1MR2 (*((volatile unsigned long *) 0xE0008020)) -#define T1MR3 (*((volatile unsigned long *) 0xE0008024)) -#define T1CCR (*((volatile unsigned long *) 0xE0008028)) -#define T1CR0 (*((volatile unsigned long *) 0xE000802C)) -#define T1CR1 (*((volatile unsigned long *) 0xE0008030)) -#define T1CR2 (*((volatile unsigned long *) 0xE0008034)) -#define T1CR3 (*((volatile unsigned long *) 0xE0008038)) -#define T1EMR (*((volatile unsigned long *) 0xE000803C)) - -/* Pulse Width Modulator (PWM) */ -#define PWMIR (*((volatile unsigned long *) 0xE0014000)) -#define PWMTCR (*((volatile unsigned long *) 0xE0014004)) -#define PWMTC (*((volatile unsigned long *) 0xE0014008)) -#define PWMPR (*((volatile unsigned long *) 0xE001400C)) -#define PWMPC (*((volatile unsigned long *) 0xE0014010)) -#define PWMMCR (*((volatile unsigned long *) 0xE0014014)) -#define PWMMR0 (*((volatile unsigned long *) 0xE0014018)) -#define PWMMR1 (*((volatile unsigned long *) 0xE001401C)) -#define PWMMR2 (*((volatile unsigned long *) 0xE0014020)) -#define PWMMR3 (*((volatile unsigned long *) 0xE0014024)) -#define PWMMR4 (*((volatile unsigned long *) 0xE0014040)) -#define PWMMR5 (*((volatile unsigned long *) 0xE0014044)) -#define PWMMR6 (*((volatile unsigned long *) 0xE0014048)) -#define PWMPCR (*((volatile unsigned long *) 0xE001404C)) -#define PWMLER (*((volatile unsigned long *) 0xE0014050)) - -/* A/D CONVERTER */ -#define ADCR (*((volatile unsigned long *) 0xE0034000)) /* no in lpc210x*/ -#define ADDR (*((volatile unsigned long *) 0xE0034004)) /* no in lpc210x*/ - -/* Real Time Clock */ -#define ILR (*((volatile unsigned char *) 0xE0024000)) -#define CTC (*((volatile unsigned short*) 0xE0024004)) -#define CCR (*((volatile unsigned char *) 0xE0024008)) -#define CIIR (*((volatile unsigned char *) 0xE002400C)) -#define AMR (*((volatile unsigned char *) 0xE0024010)) -#define CTIME0 (*((volatile unsigned long *) 0xE0024014)) -#define CTIME1 (*((volatile unsigned long *) 0xE0024018)) -#define CTIME2 (*((volatile unsigned long *) 0xE002401C)) -#define SEC (*((volatile unsigned char *) 0xE0024020)) -#define MIN (*((volatile unsigned char *) 0xE0024024)) -#define HOUR (*((volatile unsigned char *) 0xE0024028)) -#define DOM (*((volatile unsigned char *) 0xE002402C)) -#define DOW (*((volatile unsigned char *) 0xE0024030)) -#define DOY (*((volatile unsigned short*) 0xE0024034)) -#define MONTH (*((volatile unsigned char *) 0xE0024038)) -#define YEAR (*((volatile unsigned short*) 0xE002403C)) -#define ALSEC (*((volatile unsigned char *) 0xE0024060)) -#define ALMIN (*((volatile unsigned char *) 0xE0024064)) -#define ALHOUR (*((volatile unsigned char *) 0xE0024068)) -#define ALDOM (*((volatile unsigned char *) 0xE002406C)) -#define ALDOW (*((volatile unsigned char *) 0xE0024070)) -#define ALDOY (*((volatile unsigned short*) 0xE0024074)) -#define ALMON (*((volatile unsigned char *) 0xE0024078)) -#define ALYEAR (*((volatile unsigned short*) 0xE002407C)) -#define PREINT (*((volatile unsigned short*) 0xE0024080)) -#define PREFRAC (*((volatile unsigned short*) 0xE0024084)) - -/* Watchdog */ -#define WDMOD (*((volatile unsigned char *) 0xE0000000)) -#define WDTC (*((volatile unsigned long *) 0xE0000004)) -#define WDFEED (*((volatile unsigned char *) 0xE0000008)) -#define WDTV (*((volatile unsigned long *) 0xE000000C)) - -#endif /* LPC2294_H */ -/*********************************** end of lpc2294.h **********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c deleted file mode 100644 index aeceabc1..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c +++ /dev/null @@ -1,164 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\main.c -* \brief Demo program application source file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -static void Init(void); - - -/**************************************************************************************** -* Constant data declarations -****************************************************************************************/ -#if (BOOT_NVM_HOOKS_ENABLE > 0) -/** \brief Array with test data to program in the external flash. - * \details ROM data allocated to the external flash on the Olimex LPC-L2294 board to - * test the programming of data in external flash. To test programming with - * the additional external flash driver, build the bootloader and this program - * with configurable BOOT_NVM_HOOKS_ENABLE set to 1 in blt_conf.h - */ -__attribute__((section (".rodata2"))) const unsigned long ExtFlashTestData[] = -{ - 0x00000000, 0x11111111, 0x22222222, 0x33333333, - 0x44444444, 0x55555555, 0x66666666, 0x77777777, - 0x88888888, 0x99999999, 0xAAAAAAAA, 0xBBBBBBBB, - 0xCCCCCCCC, 0xDDDDDDDD, 0xEEEEEEEE, 0xFFFFFFFF -}; -#endif - - -/************************************************************************************//** -** \brief This is the entry point for the bootloader application and is called -** by the reset interrupt vector after the C-startup routines executed. -** \return Program return code. -** -****************************************************************************************/ -int main(void) -{ - /* initialize the microcontroller */ - Init(); - - /* initialize the bootloader interface */ - BootComInit(); - - /* start the infinite program loop */ - while (1) - { - /* toggle LED with a fixed frequency */ - LedToggle(); - - /* check for bootloader activation request */ - BootComCheckActivationRequest(); - } - - /* program should never get here */ - return 0; -} /*** end of main ***/ - - -/************************************************************************************//** -** \brief Initializes the microcontroller. The Fpll is set to 60MHz and Fvpb is -** configured equal to Fpll. The GPIO pin of the status LED is configured -** as digital output. -** \return none. -** -****************************************************************************************/ -static void Init(void) -{ - unsigned char m_sel; /* pll multiplier register value */ - unsigned char pll_dividers[] = { 1, 2, 4, 8 }; /* possible pll dividers */ - unsigned char p_sel_cnt; /* loop counter to find p_sel */ - unsigned long f_cco; /* current controller oscillator */ - - /* calculate MSEL: M = round(Fcclk / Fosc) */ - m_sel = (BOOT_CPU_SYSTEM_SPEED_KHZ + ((BOOT_CPU_XTAL_SPEED_KHZ+1)/2)) / \ - BOOT_CPU_XTAL_SPEED_KHZ; - /* value for the PLLCFG register is -1 */ - m_sel--; - - /* find PSEL value so that Fcco(= Fcclk * 2 * P) is in the 156000..320000 kHz range. */ - for (p_sel_cnt=0; p_sel_cnt= 156000) && (f_cco <= 320000) ) - { - /* found a valid pll divider value */ - break; - } - } - - /* set multiplier and divider values */ - PLLCFG = (p_sel_cnt << 5) | m_sel; - PLLFEED = 0xAA; - PLLFEED = 0x55; - /* enable the PLL */ - PLLCON = 0x1; - PLLFEED = 0xAA; - PLLFEED = 0x55; - /* wait for the PLL to lock to set frequency */ - while(!(PLLSTAT & 0x400)) { ; } - /* connect the PLL as the clock source */ - PLLCON = 0x3; - PLLFEED = 0xAA; - PLLFEED = 0x55; - /* enable MAM and set number of clocks used for Flash memory fetch. Recommended: - * Fcclk >= 60 MHz: 4 clock cycles - * Fcclk >= 40 MHz: 3 clock cycles - * Fcclk >= 20 MHz: 2 clock cycles - * Fcclk < 20 MHz: 1 clock cycle - */ - MAMCR = 0x0; -#if (BOOT_CPU_SYSTEM_SPEED_KHZ >= 60000) - MAMTIM = 4; -#elif (BOOT_CPU_SYSTEM_SPEED_KHZ >= 40000) - MAMTIM = 3; -#elif (BOOT_CPU_SYSTEM_SPEED_KHZ >= 20000) - MAMTIM = 2; -#else - MAMTIM = 1; -#endif - MAMCR = 0x2; - /* setting peripheral Clock (pclk) to System Clock (cclk) */ - VPBDIV = 0x1; - /* init the led driver */ - LedInit(); - /* init the timer driver */ - TimerInit(); - /* enable IRQ's */ - IrqInterruptEnable(); -} /*** end of Init ***/ - - -/*********************************** end of main.c *************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x deleted file mode 100644 index 70cbf672..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x +++ /dev/null @@ -1,356 +0,0 @@ -MEMORY -{ - UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0 - AHB_Peripherals (wx) : ORIGIN = 0xffe00000, LENGTH = 0x00200000 - VPB_Peripherals (wx) : ORIGIN = 0xe0000000, LENGTH = 0x00200000 - BANK3 (wx) : ORIGIN = 0x83000000, LENGTH = 0x01000000 - BANK2 (wx) : ORIGIN = 0x82000000, LENGTH = 0x01000000 - External_SRAM (wx) : ORIGIN = 0x81000000, LENGTH = 0x00100000 - External_FLASH (rx) : ORIGIN = 0x80000000, LENGTH = 0x00200000 - SRAM (wx) : ORIGIN = 0x40000200, LENGTH = 0x00003CE0 - FLASH (rx) : ORIGIN = 0x00002000, LENGTH = 0x0003E000 -} - - -SECTIONS -{ - __AHB_Peripherals_segment_start__ = 0xffe00000; - __AHB_Peripherals_segment_end__ = 0x00000000; - __VPB_Peripherals_segment_start__ = 0xe0000000; - __VPB_Peripherals_segment_end__ = 0xe0200000; - __BANK3_segment_start__ = 0x83000000; - __BANK3_segment_end__ = 0x84000000; - __BANK2_segment_start__ = 0x82000000; - __BANK2_segment_end__ = 0x83000000; - __External_SRAM_segment_start__ = 0x81000000; - __External_SRAM_segment_end__ = 0x81100000; - __External_FLASH_segment_start__ = 0x80000000; - __External_FLASH_segment_end__ = 0x80200000; - __SRAM_segment_start__ = 0x40002000; - __SRAM_segment_end__ = 0x40003EE0; - __FLASH_segment_start__ = 0x00002000; - __FLASH_segment_end__ = 0x00040000; - - __STACKSIZE__ = 1024; - __STACKSIZE_IRQ__ = 256; - __STACKSIZE_FIQ__ = 256; - __STACKSIZE_SVC__ = 256; - __STACKSIZE_ABT__ = 256; - __STACKSIZE_UND__ = 256; - __HEAPSIZE__ = 1024; - - __text2_load_start__ = ALIGN(__External_FLASH_segment_start__ , 4); - .text2 ALIGN(__External_FLASH_segment_start__ , 4) : AT(ALIGN(__External_FLASH_segment_start__ , 4)) - { - __text2_start__ = .; - *(.text2 .text2.*) - } - __text2_end__ = __text2_start__ + SIZEOF(.text2); - - __text2_load_end__ = __text2_end__; - - . = ASSERT(__text2_end__ >= __External_FLASH_segment_start__ && __text2_end__ <= (__External_FLASH_segment_start__ + 0x00400000) , "error: .text2 is too large to fit in External_FLASH memory segment"); - - __rodata2_load_start__ = ALIGN(__text2_end__ , 4); - .rodata2 ALIGN(__text2_end__ , 4) : AT(ALIGN(__text2_end__ , 4)) - { - __rodata2_start__ = .; - *(.rodata2 .rodata2.*) - } - __rodata2_end__ = __rodata2_start__ + SIZEOF(.rodata2); - - __rodata2_load_end__ = __rodata2_end__; - - . = ASSERT(__rodata2_end__ >= __External_FLASH_segment_start__ && __rodata2_end__ <= (__External_FLASH_segment_start__ + 0x00400000) , "error: .rodata2 is too large to fit in External_FLASH memory segment"); - - __data2_load_start__ = ALIGN(__rodata2_end__ , 4); - .data2 ALIGN(__External_SRAM_segment_start__ , 4) : AT(ALIGN(__rodata2_end__ , 4)) - { - __data2_start__ = .; - *(.data2 .data2.*) - } - __data2_end__ = __data2_start__ + SIZEOF(.data2); - - __data2_load_end__ = __data2_load_start__ + SIZEOF(.data2); - - __External_FLASH_segment_used_end__ = ALIGN(__rodata2_end__ , 4) + SIZEOF(.data2); - - . = ASSERT((__data2_load_start__ + SIZEOF(.data2)) >= __External_FLASH_segment_start__ && (__data2_load_start__ + SIZEOF(.data2)) <= (__External_FLASH_segment_start__ + 0x00400000) , "error: .data2 is too large to fit in External_FLASH memory segment"); - - .data2_run ALIGN(__External_SRAM_segment_start__ , 4) (NOLOAD) : - { - __data2_run_start__ = .; - . = MAX(__data2_run_start__ + SIZEOF(.data2), .); - } - __data2_run_end__ = __data2_run_start__ + SIZEOF(.data2_run); - - __data2_run_load_end__ = __data2_run_end__; - - . = ASSERT(__data2_run_end__ >= __External_SRAM_segment_start__ && __data2_run_end__ <= (__External_SRAM_segment_start__ + 0x00100000) , "error: .data2_run is too large to fit in External_SRAM memory segment"); - - __bss2_load_start__ = ALIGN(__data2_run_end__ , 4); - .bss2 ALIGN(__data2_run_end__ , 4) (NOLOAD) : AT(ALIGN(__data2_run_end__ , 4)) - { - __bss2_start__ = .; - *(.bss2 .bss2.*) - } - __bss2_end__ = __bss2_start__ + SIZEOF(.bss2); - - __bss2_load_end__ = __bss2_end__; - - __External_SRAM_segment_used_end__ = ALIGN(__data2_run_end__ , 4) + SIZEOF(.bss2); - - . = ASSERT(__bss2_end__ >= __External_SRAM_segment_start__ && __bss2_end__ <= (__External_SRAM_segment_start__ + 0x00100000) , "error: .bss2 is too large to fit in External_SRAM memory segment"); - - __vectors_ram_load_start__ = __SRAM_segment_start__; - .vectors_ram __SRAM_segment_start__ (NOLOAD) : AT(__SRAM_segment_start__) - { - __vectors_ram_start__ = .; - *(.vectors_ram .vectors_ram.*) - . = MAX(__vectors_ram_start__ + 0x0000003C , .); - } - __vectors_ram_end__ = __vectors_ram_start__ + SIZEOF(.vectors_ram); - - __vectors_ram_load_end__ = __vectors_ram_end__; - - . = ASSERT(__vectors_ram_end__ >= __SRAM_segment_start__ && __vectors_ram_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .vectors_ram is too large to fit in SRAM memory segment"); - - __vectors_load_start__ = __FLASH_segment_start__; - .vectors __FLASH_segment_start__ : AT(__FLASH_segment_start__) - { - __vectors_start__ = .; - *(.vectors .vectors.*) - } - __vectors_end__ = __vectors_start__ + SIZEOF(.vectors); - - __vectors_load_end__ = __vectors_end__; - - . = ASSERT(__vectors_end__ >= __FLASH_segment_start__ && __vectors_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .vectors is too large to fit in FLASH memory segment"); - - __init_load_start__ = ALIGN(__vectors_end__ , 4); - .init ALIGN(__vectors_end__ , 4) : AT(ALIGN(__vectors_end__ , 4)) - { - __init_start__ = .; - *(.init .init.*) - } - __init_end__ = __init_start__ + SIZEOF(.init); - - __init_load_end__ = __init_end__; - - . = ASSERT(__init_end__ >= __FLASH_segment_start__ && __init_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .init is too large to fit in FLASH memory segment"); - - __text_load_start__ = ALIGN(__init_end__ , 4); - .text ALIGN(__init_end__ , 4) : AT(ALIGN(__init_end__ , 4)) - { - __text_start__ = .; - *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table) - } - __text_end__ = __text_start__ + SIZEOF(.text); - - __text_load_end__ = __text_end__; - - . = ASSERT(__text_end__ >= __FLASH_segment_start__ && __text_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .text is too large to fit in FLASH memory segment"); - - __dtors_load_start__ = ALIGN(__text_end__ , 4); - .dtors ALIGN(__text_end__ , 4) : AT(ALIGN(__text_end__ , 4)) - { - __dtors_start__ = .; - KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) - } - __dtors_end__ = __dtors_start__ + SIZEOF(.dtors); - - __dtors_load_end__ = __dtors_end__; - - . = ASSERT(__dtors_end__ >= __FLASH_segment_start__ && __dtors_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .dtors is too large to fit in FLASH memory segment"); - - __ctors_load_start__ = ALIGN(__dtors_end__ , 4); - .ctors ALIGN(__dtors_end__ , 4) : AT(ALIGN(__dtors_end__ , 4)) - { - __ctors_start__ = .; - KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) - } - __ctors_end__ = __ctors_start__ + SIZEOF(.ctors); - - __ctors_load_end__ = __ctors_end__; - - . = ASSERT(__ctors_end__ >= __FLASH_segment_start__ && __ctors_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .ctors is too large to fit in FLASH memory segment"); - - __rodata_load_start__ = ALIGN(__ctors_end__ , 4); - .rodata ALIGN(__ctors_end__ , 4) : AT(ALIGN(__ctors_end__ , 4)) - { - __rodata_start__ = .; - *(.rodata .rodata.* .gnu.linkonce.r.*) - } - __rodata_end__ = __rodata_start__ + SIZEOF(.rodata); - - __rodata_load_end__ = __rodata_end__; - - . = ASSERT(__rodata_end__ >= __FLASH_segment_start__ && __rodata_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .rodata is too large to fit in FLASH memory segment"); - - __data_load_start__ = ALIGN(__rodata_end__ , 4); - .data ALIGN(__vectors_ram_end__ , 4) : AT(ALIGN(__rodata_end__ , 4)) - { - __data_start__ = .; - *(.data .data.* .gnu.linkonce.d.*) - } - __data_end__ = __data_start__ + SIZEOF(.data); - - __data_load_end__ = __data_load_start__ + SIZEOF(.data); - - . = ASSERT((__data_load_start__ + SIZEOF(.data)) >= __FLASH_segment_start__ && (__data_load_start__ + SIZEOF(.data)) <= (__FLASH_segment_start__ + 0x00040000) , "error: .data is too large to fit in FLASH memory segment"); - - .data_run ALIGN(__vectors_ram_end__ , 4) (NOLOAD) : - { - __data_run_start__ = .; - . = MAX(__data_run_start__ + SIZEOF(.data), .); - } - __data_run_end__ = __data_run_start__ + SIZEOF(.data_run); - - __data_run_load_end__ = __data_run_end__; - - . = ASSERT(__data_run_end__ >= __SRAM_segment_start__ && __data_run_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .data_run is too large to fit in SRAM memory segment"); - - __bss_load_start__ = ALIGN(__data_run_end__ , 4); - .bss ALIGN(__data_run_end__ , 4) (NOLOAD) : AT(ALIGN(__data_run_end__ , 4)) - { - __bss_start__ = .; - *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) - } - __bss_end__ = __bss_start__ + SIZEOF(.bss); - - __bss_load_end__ = __bss_end__; - - . = ASSERT(__bss_end__ >= __SRAM_segment_start__ && __bss_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .bss is too large to fit in SRAM memory segment"); - - __non_init_load_start__ = ALIGN(__bss_end__ , 4); - .non_init ALIGN(__bss_end__ , 4) (NOLOAD) : AT(ALIGN(__bss_end__ , 4)) - { - __non_init_start__ = .; - *(.non_init .non_init.*) - } - __non_init_end__ = __non_init_start__ + SIZEOF(.non_init); - - __non_init_load_end__ = __non_init_end__; - - . = ASSERT(__non_init_end__ >= __SRAM_segment_start__ && __non_init_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .non_init is too large to fit in SRAM memory segment"); - - __heap_load_start__ = ALIGN(__non_init_end__ , 4); - .heap ALIGN(__non_init_end__ , 4) (NOLOAD) : AT(ALIGN(__non_init_end__ , 4)) - { - __heap_start__ = .; - *(.heap .heap.*) - . = ALIGN(MAX(__heap_start__ + __HEAPSIZE__ , .), 4); - } - __heap_end__ = __heap_start__ + SIZEOF(.heap); - - __heap_load_end__ = __heap_end__; - - . = ASSERT(__heap_end__ >= __SRAM_segment_start__ && __heap_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .heap is too large to fit in SRAM memory segment"); - - __stack_load_start__ = ALIGN(__heap_end__ , 4); - .stack ALIGN(__heap_end__ , 4) (NOLOAD) : AT(ALIGN(__heap_end__ , 4)) - { - __stack_start__ = .; - *(.stack .stack.*) - . = ALIGN(MAX(__stack_start__ + __STACKSIZE__ , .), 4); - } - __stack_end__ = __stack_start__ + SIZEOF(.stack); - - __stack_load_end__ = __stack_end__; - - . = ASSERT(__stack_end__ >= __SRAM_segment_start__ && __stack_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack is too large to fit in SRAM memory segment"); - - __stack_irq_load_start__ = ALIGN(__stack_end__ , 4); - .stack_irq ALIGN(__stack_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_end__ , 4)) - { - __stack_irq_start__ = .; - *(.stack_irq .stack_irq.*) - . = ALIGN(MAX(__stack_irq_start__ + __STACKSIZE_IRQ__ , .), 4); - } - __stack_irq_end__ = __stack_irq_start__ + SIZEOF(.stack_irq); - - __stack_irq_load_end__ = __stack_irq_end__; - - . = ASSERT(__stack_irq_end__ >= __SRAM_segment_start__ && __stack_irq_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_irq is too large to fit in SRAM memory segment"); - - __stack_fiq_load_start__ = ALIGN(__stack_irq_end__ , 4); - .stack_fiq ALIGN(__stack_irq_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_irq_end__ , 4)) - { - __stack_fiq_start__ = .; - *(.stack_fiq .stack_fiq.*) - . = ALIGN(MAX(__stack_fiq_start__ + __STACKSIZE_FIQ__ , .), 4); - } - __stack_fiq_end__ = __stack_fiq_start__ + SIZEOF(.stack_fiq); - - __stack_fiq_load_end__ = __stack_fiq_end__; - - . = ASSERT(__stack_fiq_end__ >= __SRAM_segment_start__ && __stack_fiq_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_fiq is too large to fit in SRAM memory segment"); - - __stack_svc_load_start__ = ALIGN(__stack_fiq_end__ , 4); - .stack_svc ALIGN(__stack_fiq_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_fiq_end__ , 4)) - { - __stack_svc_start__ = .; - *(.stack_svc .stack_svc.*) - . = ALIGN(MAX(__stack_svc_start__ + __STACKSIZE_SVC__ , .), 4); - } - __stack_svc_end__ = __stack_svc_start__ + SIZEOF(.stack_svc); - - __stack_svc_load_end__ = __stack_svc_end__; - - . = ASSERT(__stack_svc_end__ >= __SRAM_segment_start__ && __stack_svc_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_svc is too large to fit in SRAM memory segment"); - - __stack_abt_load_start__ = ALIGN(__stack_svc_end__ , 4); - .stack_abt ALIGN(__stack_svc_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_svc_end__ , 4)) - { - __stack_abt_start__ = .; - *(.stack_abt .stack_abt.*) - . = ALIGN(MAX(__stack_abt_start__ + __STACKSIZE_ABT__ , .), 4); - } - __stack_abt_end__ = __stack_abt_start__ + SIZEOF(.stack_abt); - - __stack_abt_load_end__ = __stack_abt_end__; - - . = ASSERT(__stack_abt_end__ >= __SRAM_segment_start__ && __stack_abt_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_abt is too large to fit in SRAM memory segment"); - - __stack_und_load_start__ = ALIGN(__stack_abt_end__ , 4); - .stack_und ALIGN(__stack_abt_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_abt_end__ , 4)) - { - __stack_und_start__ = .; - *(.stack_und .stack_und.*) - . = ALIGN(MAX(__stack_und_start__ + __STACKSIZE_UND__ , .), 4); - } - __stack_und_end__ = __stack_und_start__ + SIZEOF(.stack_und); - - __stack_und_load_end__ = __stack_und_end__; - - . = ASSERT(__stack_und_end__ >= __SRAM_segment_start__ && __stack_und_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_und is too large to fit in SRAM memory segment"); - - __fast_load_start__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4); - .fast ALIGN(__stack_und_end__ , 4) : AT(ALIGN(__data_load_start__ + SIZEOF(.data) , 4)) - { - __fast_start__ = .; - *(.fast .fast.*) - } - __fast_end__ = __fast_start__ + SIZEOF(.fast); - - __fast_load_end__ = __fast_load_start__ + SIZEOF(.fast); - - __FLASH_segment_used_end__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4) + SIZEOF(.fast); - - . = ASSERT((__fast_load_start__ + SIZEOF(.fast)) >= __FLASH_segment_start__ && (__fast_load_start__ + SIZEOF(.fast)) <= (__FLASH_segment_start__ + 0x00040000) , "error: .fast is too large to fit in FLASH memory segment"); - - .fast_run ALIGN(__stack_und_end__ , 4) (NOLOAD) : - { - __fast_run_start__ = .; - . = MAX(__fast_run_start__ + SIZEOF(.fast), .); - } - __fast_run_end__ = __fast_run_start__ + SIZEOF(.fast_run); - - __fast_run_load_end__ = __fast_run_end__; - - __SRAM_segment_used_end__ = ALIGN(__stack_und_end__ , 4) + SIZEOF(.fast_run); - - . = ASSERT(__fast_run_end__ >= __SRAM_segment_start__ && __fast_run_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .fast_run is too large to fit in SRAM memory segment"); - -} - diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/prog.dox b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/prog.dox deleted file mode 100644 index 5da523f9..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/prog.dox +++ /dev/null @@ -1,7 +0,0 @@ -/** -\defgroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks User Program -\brief User Program. -\ingroup ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -*/ - - diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/timer.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/timer.c deleted file mode 100644 index 7998238e..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/timer.c +++ /dev/null @@ -1,112 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\timer.c -* \brief Timer driver source file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Local data declarations -****************************************************************************************/ -/** \brief Local variable for storing the number of milliseconds that have elapsed since - * startup. - */ -static unsigned long millisecond_counter; - - -/**************************************************************************************** -* External functions -****************************************************************************************/ -extern void TIMER0_ISR(void); - - -/************************************************************************************//** -** \brief Initializes the timer. -** \return none. -** -****************************************************************************************/ -void TimerInit(void) -{ - /* configure timer0 as 1 ms software output compare */ - T0MR0 = BOOT_CPU_SYSTEM_SPEED_KHZ-1; - /* enable interrupt and automatic reset upon compare */ - T0MCR = 0x01 | 0x02; - /* enable the output compare */ - T0TCR = 0x01; - /* set the interrupt service routine for the output compare event */ - VICVectAddr0 = (unsigned long)TIMER0_ISR; - /* connect vectored IRQ slot 0 to Timer0's channel 4 */ - VICVectCntl0 = 0x20 | 4; - /* enable the timer0 interrupt */ - VICIntEnable = 0x10; - /* reset the millisecond counter */ - TimerSet(0); -} /*** end of TimerInit ***/ - - -/************************************************************************************//** -** \brief Updates the millisecond timer. Should be called every millisecond by -** the timer interrupt service routine. -** \return none. -** -****************************************************************************************/ -void TimerUpdate(void) -{ - /* increment the millisecond counter */ - millisecond_counter++; -} /*** end of TimerUpdate ***/ - - -/************************************************************************************//** -** \brief Sets the initial counter value of the millisecond timer. -** \param timer_value initialize value of the millisecond timer. -** \return none. -** -****************************************************************************************/ -void TimerSet(unsigned long timer_value) -{ - /* set the millisecond counter */ - millisecond_counter = timer_value; -} /*** end of TimerSet ***/ - - -/************************************************************************************//** -** \brief Obtains the counter value of the millisecond timer. -** \return Current value of the millisecond timer. -** -****************************************************************************************/ -unsigned long TimerGet(void) -{ - /* read and return the millisecond counter value */ - return millisecond_counter; -} /*** end of TimerGet ***/ - - -/*********************************** end of timer.c ************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/timer.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/timer.h deleted file mode 100644 index 8e44a8b0..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/timer.h +++ /dev/null @@ -1,41 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\timer.h -* \brief Timer driver header file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef TIMER_H -#define TIMER_H - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void TimerInit(void); -void TimerUpdate(void); -void TimerSet(unsigned long timer_value); -unsigned long TimerGet(void); - - -#endif /* TIMER_H */ -/*********************************** end of timer.h ************************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/vectors.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/vectors.c deleted file mode 100644 index 7f4c245d..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/vectors.c +++ /dev/null @@ -1,57 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\vectors.c -* \brief Demo program interrupt vectors source file. -* \ingroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void __attribute__ ((interrupt("IRQ"))) TIMER0_ISR(void); - - -/************************************************************************************//** -** \brief Timer0 exception routine. -** \return none. -** -****************************************************************************************/ -void TIMER0_ISR(void) -{ - /* clear the interrupt flag */ - T0IR = 0x01; - /* acknowledge interrupt */ - VICVectAddr = 0; - /* process time tick */ - TimerUpdate(); -} /*** end of TIMER0_ISR ***/ - - -/*********************************** end of vectors.c **********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/demo.dox b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/demo.dox deleted file mode 100644 index d89ec7df..00000000 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/demo.dox +++ /dev/null @@ -1,8 +0,0 @@ -/** -\defgroup ARM7_LPC2000_Olimex_LPC_L2294_Crossworks Demo for Olimex LPC-L2294/Crossworks -\brief Preconfigured programs for the Olimex LPC-L2294 and the Crossworks IDE. -\details Refer to http://feaser.com/openblt/doku.php?id=manual:demos - for detailed getting started instructions. -*/ - - diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.elf b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.elf index 124c44ec14a251bcb1cb4d5c825e1f750e9f6f0b..db60538c30d297a87b01a51aafa7d91b2cd63a45 100644 GIT binary patch literal 106260 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

BWdI;)JZd%inV7Pc9NYOqvA zQ80U|`rXAVu?%C4oQ0{o*42($UZgBbtF3g0N~xC9MStLl;hU7Id0Pc?Ab# z7MAGqFpsjrh^zju+VK4If23df$ES<`tpiZq|NJu#h1%VtJtO@O)SQUI-{=olvy_fU zxt$Vpj(X`H;x{;ulEbpD7rwH`PAx^iV z!Ns*aH2)vFAh?(p1Q+9ipunXmYuY@ktf*{UQHhW}A22-x5+A8@4_tlw4sZRdW0Fbl z?LhFli!al|?-d!+eFrha^9)4{*AV16dUwEMPq)QBftYE!a1>s+Oj&gqsBQ%*S$#P` zPe)g$kTs0}g*V0|SKS0h)~sKz*{=rT8^BpPXZOCkPSG zBO-D%4JEt?=NUYSbVf6*7MT94fdw9?#fCwEE|g(Vd8kBmyAPo~?X*)+9kgR`C`L&Y~fl+u^zgfeOzn3~@8>!!&8u zU*LK_BysL*0Qrl-d_}}C3t|%B#QNbFT_Se4{f^1OTg3THs>c5Th`gi$t_4)~Hp6nl zi<(#r!f-r^+-R1U5UnJ-x^*qkc>r7Rc;gw^%cyq=P=D9D2=)*#;WMZ4^$_A=iZIMZ zlJ%!Z@4LytZyI1@2%Vxrpvo@Wc-;leuv7RHG9ty?PGMWrF7b8>w^PPWVPzM7!!G=n z+RDeJu(67zV#rnWfS>zPL$!?8bukgI=P+M(Np;CHAZ0fG8Lr#KJG7o_!QJe63hu?8 zW`z49&q1WYg~IETjmb!dn6q(0K+a^T5HWioCTB5|&6vfc&t}GXg)vB^nPy{6LoTSI z;#|@e*@|C*Wx1GSQ^Zkc4nW^-07o$~-ABnYhl3RVOZxC*j5hGP5`={B+5`>HuwiX7 z(WD9gUr53gDa!wb@;|i+lnLm}m6G92&>@goCP{}($%q{WC;1a*{O=9IZOGXwyk&19 zpcL)t?+ps`NNj2n1A9c+)M@kCoRnzkFpU8)^!`txuyWV3NT+&RXL zi!BZ!8a;}d_gB6FX+tIftm@(4wTKg4F06(#CSm`#*cw#E{2l_LDm-ev77`j zYZGWDe9Bq_U?_m$V?f4orOo1zDb1P!AiWkW2C2(rkj@1>SH)t=BSiLauw3dMz*+#L z2Ul$9;w?PNe~Gwm3DPuvFK`|4^8sK3UdW)qOZYnCPlBdn_bPzlj>M-~>07`* z7V(Y8MLcvXST4nnL(Ya-JMv7OjYzLY9W~H3MTD2I5cl)Olcm$+A}Hm2091^42d;bz zkVw<4+-ngZUVA!KqvN2Nbq7dp2LB!arxVx%;2Qu&{s_Rk0P-3j{ucoGWaU#ZpK7B> zFQ61YI}idNLHr1>NPdM1ZBh!n0m;)P&K053Oi?%&beCGHqcTSwlFiKZLvn70oQKyO z)a-{C@Nd|Ky%*{U&oh6%p=(3JQm9AZq`8dz-3I%Zq%O+bW5d6ufqQj+CjE#q-?CwT zzE0k!^IgPGp&_4QZIwTxFDq>VD|V8ux(SM~h`*6)hqMVf5S2Wn!(&Sx(XfdB9!*@O zJ&*~|N{XZEH8ywj-9&=A1>(&zfuxhYccN`g(M?fM*Q_#lU>DG!ZjR0ao~jcdEE$|1 z5Z8&2qwzlhFJfL^2$LzFzACT;_c%CkcqIf)flNENBzyOQ1?EMS0hF(n0RGkIJja}Ja0oSGY zO-&e3u@73PfpQFrE|@|TXM-U(YCF89SEudphDEBj)2;2C#gG=WwUD=HQC`}s(xNjU zn&yX>cAJ;RM%e~)asY}F)@!+2mk{3OBTe?kbwG_z>2BZ&qKw^ec_*yOE3O3DrTDSl zvKD~lqoE=nWl!i*`~+3zd zZzaV3pN21=Ic8xWh7rhdV-{BiJe8BG5IFdVNNTQdtm_v)(F%3A*fL}GMT(7GDvVW3{!Q?yc$pKpw9f^Ho08?98FWMefa&TgzY z#A9vrgy_%p^oKVGZGYB9{kfk0j04s7=X&~c1`VJ3DZ{WeleQk9EnYdaZCwvrZjJ_o zr=09ZX|W~B{x;bw$c`@{`w!ISb;L}(WpBb-fbMScQFob}9O6ZC^9U3;e&z31G04sT zg4vZ%j=T}(+)oXI_xS{c`+CGgjv{P&PM_8!WC3BX@N%N0zDjQ43V<;W5L_W+Zsxl~ z#@@&G?8^~)3vAi@d$@6T!r8)Dku+EMh~EXoN4(c}4_>@zXvaVP4JJwtJ>p%%6fKjE zI43*~)TQ{%Pmy>&{i&jmOYtkUA_u8qiWk6)Bvl=bwLb_o{*D6H1z&x}xc&ISx+*P% zxQa|qIapVEI`kO@Uyc2A!PkRzbI8T8p$F^cP%ZPBgLPI{_f9w-Lchf0WkTTU&U{y) z@dt!FmO0`oGAJbCYG&37SFuLS*!79vlo)%c6*~fB1y`x&_+l3#9b9D^@yA|Cq+BB@ zvBRk|M(d=-9zgoJ#%d%pwuYQ>8nI&EB4@nT$%*{{3Fn%ik-WI+b;31KOBDj1CtQ;> zqXbBea81_8n7HYu%o45&jZBDr6T>an6pd8G{xS|orADe^Um{Yat<}cP!r@L=wefvK zryy0L}qmA&iL!NWnLt62HS>Bm*c!Q29mUMBc37 zXQ2`$3>v5=i4Q@h#Po{9Baq=24ile+ObKdC;wEb4B#1;jNDT;=6UYTnO`r}y0_^ZR z$%)$$Fn$OvaTfu8LD?@0sa9sJW-5NnfG6Az-(swTw4H#6bK;JOmN1`pi{ zH^B8I%mLRc;B0;q|E5ZE%|Ms1=3uu7o(N)5Jgx*ZJ9zM7dEconB7zWsr@LNcF6Aq$S#w1(-dTc^2=m9-3;+ZiXDJv2xv}a8W7aB`Q8Iu?YI|fGOJj#55$(FDbp2>u-=|Ge~&?Ssk z$~P7rlW%61p0G>HPXW`L@H}9jFz$k~aq3yeBp2LC$-lBRCHx3M_Y3171F?7u=mEd6 z;$ys%DjEH=83>Wo4OwFi+X6G`V`vy1guO{WLj;WtjEpZSodMd&K*T4#O!-aP8-$cX z=idiL@*9lDvq9*}9CRG^MC#dTz(w+-2!i~X<~2rnKO>l`XRD8rC5D)k9=e#}-LASQ z_$KXd*Wh~$+jfQxf^4SJh9M2)lzue5_kk#Te+nr5f-t~J#?rX4C1VbZ)S+DmD&&Hn z02|f@ryI70oeAJt03!1pC}R2Nc@VO&Q0HUa%EFkfRAhca)<$vEX2~*=$7OLkoF(T` zzzgdTupkFrTVOl|N-0nxGW`_j5|eEK7)O%Y#)qeYHP4~5-jH4}NR2ssR8J``?o(pD_A;+Sj7-UkeTx_D)cufwAXX+QRQa*OSrit&W8`wD2r2t`TSp>uBNSs0EOR)8~6^ic9e$ z=}Z#uYBBr~5P$qBMu*6L_fy18m=YggdA^(x;@G?wZ`sRAZzs#;OqT0_rhlJuSCZpW zRTvSZzlq8szrb{IsY^(RLyeJJXvw7}knlAUu3D`L{6u;#D~ttSx+NGldMTV5>deDvHa!^6Ji?6@GcE8jXJANvFBlbcT@@6)g6J*^E zxNg5D68r<=>gFe0W#Q>S2Z0KYnFm+AfX5Wq9}DSS(0Vlz(yy}h`&%oqkr7>F821@t zH)AYAdeWq2N&um_P`cNF#hcZ&c+1|~;Cg-x)bltT?`v>GOg2SNV>aYzq5Tx{0gX+A z<5K({y@>k~V>u%T(4{U#9>o<>t%>n;DSkd*>;!0vafoyzGa4a*o=X3ALj4~f-=DO9 z@MC(F$1BwnU`+O22iH}^z?IP%M`scp)_r#!9O3yDb!uAx+p%)3q`)dVYvH&z!V%(i z@@RP3XkTIw^;WSqcw%Mr7fVcw-2tD#majVBji!Ev5YsTOEjNzjTqgUv=Vfw zEy$|ao#4j+#njTK2;UW=nla=J1}0MmA;eK9%c<;r4pK=LP!aQE8X3bBb}0)h3}OvHQ@n*hM2cukGNz!B z>>h;lf4Yc%La(Mu*8=#!OWStph@YdyGR0)H77-86OSPBYAtvsC=YO+&{kt15#_y82GEUfwVU;B<-|m+wb0tN zQf8wh*s;1+$1p*Uc&?R9Gm*H3`giJeRP2~QQg7khDVd7C)97sk=8A*-nwIe|$G0!< z(mF^YN(SzwXCF)6qz8mba1CrF-9zIa+s2zk@^}ip%A57}+C<8qNO(U81zxQ8YsJ(@ zNsN)aSZ`C}Rxua@hJ23U)A=(HiG4a{6P0`~%1OjG9AGDI9y!k%GJr{yt@CU|r;?lt zl`M#IE{y1WnVc_}@{}m&3z77{oe{wS&?QmMw<8?>y&U;xQ*MfK{%muG9Hq4(lHUWU zLhxko^+>^?I`~6$Ml3=rkjA{e5+Y@ce5QN_X41Jkew`0P&I|xogUO7Mqm5y=0nXeG z2V<4YyX^O{2k;hIEKRQg>ZWL;cxY60oqZlv5sk=H=W zr$_@B!xzHI=6D{gG-k|d5Ju7BXnBO<-14f2xWzKt1twdE4`$CiA=^AGW~MUUL!xP2GDND`Z!riE|&rI^gS&Mh-)jl zF`p>8TaaD?njfRNFmvQLU?Q|=nhcS~QuH_oxg?w-cTjo)XkkcaJ`D!O{y8t>eH%E8 zd^g;=#<@~tzG-ts8q3=tka4upAi0H*J{PoUurcf-FovZd6NZQ2XkA1!jU{mm2+SQh zOMXBdu0brJj-IBcv9YKE9~6NZSQd(3I*&kHM3Gu5rm=OJ1xQEdRLR*~`d2`^ojO@; zQ#OLT6&}hSxt`o4z~2Ek-3{PJ07hI22}I1Le#J4E$ea({rMR4syD|zwKvp45zXBV4 zbgS$UBhP?8c@3=JPjR2brT8~iMzW^l1xf8sL>MsPp=oX@n&N!;8R^PqVj47nVDNVj zq@8mxkyYGC_Y*l7unH+;3~7L9&5G@#Y&4z$`BODK* zt$4f~(;^OARF`xhc3G?Es33z1xnWX8tQ^hk|ZdIb|7_}K`5a$;YjwS0}_>E%o{O0o~;(xOlW z8s^I4JbuxMDp*;>GNT%;kqLU45eNCnsfc}>eimz_DmIo#iAL;|MOCUJ-JsVTRhc&3 ztXCs(VvGh(js1|J8KaT;v6E?Ftn2}2aqM4_O=_Ixw8R!NI^#8GMeJgVP0*aS*by`^ zQFB(uUQNy<&FP4pOJuUzU8;Vu&PkwqhH6D{+yy3l3qfadP)9mno03~pEB=|p61m%4~MP7cnzq&Ev_t?iCl=+am$vpAmZ7Axh##C@od3dL5+Ch*@C%38u7)m1#^Wp;*Vzw z=E~7XN<3RI*9eWI#j^!-o8&X}>1xwkl;EtqSZ=Cs7K1#^wpoE7nG!CVtGr!Af>m}{cu ztd3_3=9;8A9r0|zT$44YE1oTwt3q?SyaJ77u9 z4p@@21D53MfF(IQU`fsnSdy~?mgMY!B{@4_NzM*flCuMrD~V?+fA zr9{eO4ESjpk@t~12oFGL1v5?e<7e2C>5Y`Uj9T(h2xinpaglCNsYCPL0&m!g_Km=Y zBe62ISf}nW;iF&Te30t@%4XQT3fz@lk;cC}^>X~_Wn8dGbfZzu8zVac5lTM!*7 z2x9mm_^c|`1z=?G$cL&VI1JakG2EfZu#HPs3pI^kcGsE?p=z|EWwHSZ9%YCc`SqX@ zptAQHP!26$c{a|sQfvo$eG#0=P~OOo37x8ixWN*Bib;ASg=Dj>aWj#}sFB0m;MasO zIfhXKldKWvGSbbtoL_OwF_JjO|I877WvEt5&V*$C%^)3tnNeT0RcgTo-DV8IU?JC` z6i}kD0et*Mzsf|HFq(&V;n9+AulyF=Uj5c*f70)#%MuAae@hf%SRI0fqO;=?pnx=(}nIC z9hgyAuPD)@x94hWUT z`LmCg7_|tPWT~*t-2`(TH0M>rFg4WXQfZFFW9Fh_wz+YR#L4FRV2(#fWwu)7m^*{Q zBpx#t6|>DnB~CW?2Fz`zxzTE`V~(p%<4HVbE-Gf5i%Ohq&WAGkAk9@MFIr9=*^6k7 z#AD{7Vz#-c#L4C+!CW8BEmvna=C;xtiO0-E#cXp?iIdHp4s)DK%TDzT$J`E@Bk`EI zsF-aoDsh~-iOepSx&rmT@IHW(c59q}CvP&79;bNW{vMuGVE#WwOlAVw#Mh4znG80O z^*aSOJ9!D1cwe1h#UcbSo#%ge|)}DAa_s<*Uy@>6YwZMCCUr`9~eQ z6==LLCxiEFL+qC0k2>9MfG>74_L7#|3A~(PY(jgMhOo#M^GTrN2^Z7?n%WE}7ZIB> z7a}gjjY#B^%f~ZC_!Vw}XOn*i$EEl;C*OiNv%6GGelvoJ{S#wbm;^jWicSWP?7aetRl1l=aI=`mW-;v|3T=0DY{?&j z1HrLRuxxx+t8Uel5aL;sLD}zW*@=j4i9xAdZkDKp#C4l{zs9czUb=1r?$&(I%?!B{ z_+-dMlFV%<8kPxX zUFBLlOv~>Pznvko@fU!XOe4Nbo6P}OvYA0zuJI+rD;by-QGRtFyc1*B((h6iHzXg` zey;>%7u!-7tNWLsJ5G1wr7kA!_i1YZ)2iIH5E_Sp+lfEM#jw`Epq)8mHUCQDEfA99 zH2!7ck5GTS#?Jy+%Hfi%&^Sl7x_M|rPs>6fzu|ft>7kp4yTR1W!w(3sdFTU>>xk;+ z;Z;zO{~1tsDgKGWI6M_Rr&Gc6He%v%&C!J*7hvHiIFrgWQMa_GYmk~Vv?l7#aq3f6 zMA^FRAIB1-FJnA+>ojH{bnDi8C#=}Hxm)L^z-67yT5lVfQ>%^4&_?8(F>KNKV^HKg zug^j*lc8%Bc`(}1PXqqa1G0IwfSwPZUZU9K`?Q;5UzcL@CHP=86}Lr zdC)q3$;$N^OIB(Ge08NZK|FF_P_2TxYsguk9KU+y8rngbe{c1QN#M$Z}lj98#@n|H^dpQxWMhd-~iNt86#5;yatVYIoeMI6kGQoQb5uZjXVw&sV zX}o*{{#3=(5=oGZLPN~7S|EuUY4To09lv}YoM!J@A^|xFq(#Isj&V1_VOV`v5EHK3 z0LRhJ!wwN21pY4ISQ0enDTkwk>lfsZpgD&ejwxI(kwZd!CVfqkx6%V9emWLlwRbKX z=M7YiV`(POW5_PxdPUJ=r>XERg$0jGN8Hp4dLBDXy?XJ`vo6XjigqMqX9xGy&i+P@)M!a4w=6OOI@p-wJ=Lu`X@8x2iCr2YG zUM}W&Mrb6>%f&oTu0}GwT+H)~)QAM zne&9FP)lJs6N`DC(Hfbc*ET&x8maJdG0#)1kt#12^E@RQskIZPR7bkO%f&oTnKs?* zF6d0sB&dB$l@ix0M>X+%6p4 zY}JKBig+&Od8%X&!k0J)xof;=sKmQbHjIM+t_Pr=lgd95Eb|c+*Z_jQsA}I->U|KV zlIp>f3s?*npxsI4eKYIbrrf09zVaPM|H~S#tOZ0Sd`%Cqy`jC}ffR5?-GUQpTwa%Oo9^937TN zA!p&woL0!QfX7>KGQLcq1zO0bh5ibm;CvchpaY1ZVQ3YTxLfkej5-~A!&69^J`EZ! zm4-cx9QF|It4)28i5n1NAvzRO%t4Wf^bo&7Ot-);e>q_$nSHJKZ*E|!Pi>9W_nA5;B3+yOT_*R32UA&dk})SLTO$ie~v_sX%^;X8WOrbn^#C4 zgFfg>r+-&!T_Jsm#J-?0Q~JELyG3JO={rjQuhN)L#&aXUyjo*^V0FU0Mu#Sa$UI?Q zt66EpYJ_>6#xkXkRn)veW0v%tNe{MaEJymd{BGW;F>Gih97O~e#>901Tq0pMUavTK zjELRKc;2MTykD{tc1_^b`@jV(P62(kKcLU{2lUzg0M84W0sCyfx*8F6RkBZs=+^LH zLm&*Y2+Xli#sW=%jle#@N~l42=4vX2OhkUpW0cp|0s{J4KtNv$2sB|VuLAm7K;U{b zkFJ2e77)}vsP5>m+3xdeVCai!6y zRDRU^WUe$Cl>}2br#7mXI4K+m8q)}-a_DT-5X6D^jc|v)j2Ot7B(TQH-pNo-`@KaX z2YigP7#e_gvV|X!w1w7D=<5_}VcK>AN?U_;ku6NFo3+lZWM3!nTY*RReif~jt#ci9 zc7vVX(T;B#Tu*=A1e!68CT^ghoSW85WGj(G_@1UGhc^-}0Xj_20d8hQnt^8WdkXw{ z@yKs-#W3rAkXpgZdJ{l5ftLVW0{}6$C9_S$V+Sb5S%4}Im9;n)9&jxD!m;qIV}X*| z!eMQ}a>9UA5^|^ZKQjl+_U^F=lNQr5Cy^3c$ONsK*LV#=V*BkP&>b#XL0>K(9pVb zu?F)3xpJNeH!&2$B(O*jmcwAq*DXz@#rL2yLWg0Pq*7WKPVTuBDA5F<5mjELwN*h5&rO5%4?16aS4YJz*J4K@mb2fMVsW%` z=tHXowOdc};Y(4~Tea#miiTgHDDP1^0r^c-?Auyw8N_TKzO4;jrq%AH8k=yWJs#Pc zivG=x`p>o6T@V|g=YT)gYCokJy~kqXf7WKsW5_vlcYJS(nt5KE@r-bMe_or(11|C+ zz3Y4k>oWx6E2w#<_#&HXd;axi5OoYO;cp-pxin*_#R?w9~vq$C}dwpRK*&x zuOq4wgR>UximKTZ}QW6&-N4q65xWbimn)4mexU0cR^Z z;A}+)oUQ19vlSh1wxR>hR&>DGiViqi(E(>GI^b+Y2b`_wfU^}HaJHfY&Q^55*@_N0 zThRe$D>~q8MF*U%=serimwE$L=JIQ|SPMpbwjLrwwCY@H%H|=u@tVsVW|zmlU0y(pKMRlSeG!6bEEG0l zI@+qVr=oJJfTrJ0Z!WTpWc-x8i-~LpFJmjw%|w3zbl5U{maB)@JHW)yuao;r;`~+N zk-ZaL@IeRimki`&G;|qyt@$y^-APpMRsNbqYd286+=#gfl1kAP!*?)1AMn$>O+aNY zx8!Y;AJF8_p=3wtLz;{k36w=$enfOE&%rFZ_dFu@SX zrzAT$Ew|AzaWw!j>al2a-SGTaf|iNwLCsnK*Cw-&v(*Yd$T+<$p>7{m?!67F1v;T$ z)^U=}ItCQbF?daGgv7CQ(Md(lF%p)HodjmW$q%Fs?Hx{NcQLeL^l#~PvQZ3}Us%?W z>-{N=+xeVqu$VnU+0mC#bhObxJ^XCZfvD(cE&3;l1~*Z3ropc;+a;&U>sXwr#oYP8 z^@01D+V3*p+1%icmcvL%(L0I3OIZ!pAgLUCTch^YXnXUb_SWbCZl*nof7+gfCGE%v zr59H8PJ!46+ol+W*-~VL@&J77Ko;|Na1}ikrT)T`?0WjIUgzY?KFO%w zAZ(vxRDUIGpJY^T61Gn=s<#N+CmGe-G-ID+RPT^(pJY^rE&yzwWK>70Afrz*s&`4Y zPco|aC~lu*RD*==lZ@(p!uCl<^#Ng=WSor`t;DSZfKo}k*})?x8P$h9pz@CmAqI_C zf*bEbaS;jnV{HlgV{HlgV{His(cWDs)NG8G%{hx8nK%uge3MG}S@*$_y%M?PpMfS& zzDaO9GC80N(VHHia*qE-t<(TvAMz~eDxw2KM-yE}^lhSzK$BM!eTOJM)sbQ{1}SDd z45cQPlXW9KhsRbIMS6Lh+<%*9(DPMM4{oN3eL%&K9Sk<#G+`)Q}&>^9Cl9}6rVT}o(KMkBjHwR{CgV` z3n5@1r_E7SDi)FUK7=r+YJI#j(TM5&DUn)@c)h@DACY>E zqf)HInIljmQj*SR!VB4zNab4Z`E`s(CnAj-b3w;%Qn$cyAJsfTZpo3tz`|>9R9%JYVTvvc0V0LLH3FNdk;3py$+4{e`xliXS?+vh zlch&-twfmIxl%*s612aw*a+~m=Sr;H?i=8E2;GCny9EwL8e7aPoT);>^LVnEEh%JQ zurMu+*cU9!phoNq7G_8z_5}+wtP%Tyg_)xf`+|izLL>GC3o}-k#XPuhC;3QzbVmw zZc3CSSsUFs1`p}@_j8@buTSLq^@&`+K9TG1;i8F1)Uuul(s4vLUX}LiRcXIomG}4UIcM z$O^!@xDc52JPZXfL*hsEM2L36y#4zN2!Je0f;<@#)F(r7&Ibcish4e@%ZJ155SoLt zQ#n00i(hzw8d&&5QiOG-&B{OoY!<$i6k%O!v$zmxv%Y3Hteb3BbChL7S=(&ZIZ;+p zl=T&xb!C(lin8vqS$9TRSRjc6<6fJ^^Rad?I-{(eHtP>j)}>Jv5BecB-ifj>?THxt zfz66XZrKK3jIw@gv+|;>ccQFEZB|W`^>~!^JDbHLfH24mnIk7MSH=eQ2Xw4wArR$Y zA{y!kL5yH$j1P!>0eY?#AYh$G_;FexNhe6DyHz=}NKl=`Lw$N;d3F27g8aw3f=iNo};KhA=Qkwd7&=Y$vdQdqa^Es zqOpJw+|tmZ0c3yIA#u6Upvs-zu*M*%ty;NmsShtWzT5t4#&`BtGr|+B^HN+In+4J+ zuv;%Ep5|_r(w}li<%ZHCK`2Ows|X8^+k+bzWj^5&MeXK2gg4A z^s+RFLb~L#Fm$1pvF^*mWEa2{Avb`iMs`eGsbk`a5Rd^8h{MXG-~;3A47B) zrm(`CpJ5nd&&sO)*;&;;#}o%0W1WtF=URR_)i}=#B2wnp`r+t&9j;#I$E6FjZ(yAA z6HCWxKOR)ppcm0uY^iRo3JaT1(Z$({F44xRoY{*|*L*))Ja2$rqBX4Z0a;WnwT1Mf zZx~R+xCdM0GCNK3Tf$QVns(4y-_NGA3tzbe%ZS7DhIiWTI8kvCiC zF!EBBGXpPbp#$;>I!>(AaROVLY1lH=!LdWT0Mi9Y801%(CR(k!vBtJlPR(^S;=6hz z%+7@@d1VDN+8lyd&1aUs9J?3ghUCh;UPP1FG3^DW5f$iC73i`Jp?~`MWO-UR`BmVG zAXq=zs_eKn4C^4Q4O1E&H+97;sZL7qvBfC6Rf#oM4yzYv+BFt$+6e=4j6uUh)>u5+ z28(!Rd8)}0L*8050?YJpnvTGybN1B55_SZ%YjI@8n}tk`XPU84Qis7AL$evN3pNj| zAa#^ITSv@u%tVcqIM<5Mf0p)KAC!^hJRg>fU+ZU4jJZ+gU(6U{HOanK{Jf^-*a~Js zU5PS>S0PaxzeI^^HRz3BjGyGEl~q|DnYLV=SW$h}n3hS3Az8;{Ry7b4@m4j$kP%)n zbi6)o0aZKQ;xo#LSCBALS>$c@ zdKAX!{A=mSNqU*rM0D;%?8mOPK|>_#(?YCK#?u2U8RfC~(mJDwlFYIGvMs42+^Z8i zpBbAeYIZ>f%Ciz#M%&Q)m6|Ul=cJObh1bnnZJa9u6Qa)3@#D4rb@2Q|O5Ku|L~^`9 zdJ+nb*y=lEr|AE zrrc)4f%-Qs*w>q5{`k<%hy{sSjnDwLCGcll4u?_O_F}#>hFvImXUz6X?bMK}bZS3| zWy7GK&Mxqhh+AbJ!*o#yictL_JdfpxW+S&?dunf(Bs9NQw#=9JJF zfz7E#nPej#Zsy+F3^rB;ye#%G5qnBoodD(Vt>}Xb>9nJh&0XsTrO$Y&I^#>J({^;C`vBc{_Zlz~O5=aZn zh6UR$uTI&%db$CjKY4ZXgAmpa+0h6qhm>C&2&lZ7jb}4!CGEK9Cgkllqg*$b>Kg0Nm{rL-!e0~^LtPH{T01#sE?Wo&kU zIzgACej5?LsNmH$wN6OKd(1mD>uFl8M&R9Rk?aqxiq{*0_lg?74gaaB1>P0ATvMoWhcm_WzZgeqPtcH zL%jZ2P0nwi%3gHX?~u9gRi<^U;LR&-aXFo zu_O%J9AQ{Fci!NDZh;vY4o5ri;H(9nhvC+tR{HpOp5*iKUq`53BjK-ut9EO^!pGBC zGDF{wDLgUHX;h0VhYgzdXrN?P%KD(~ls28*ul*-v_@AF?-?f zgMTM{y~`9q`Lb#alJz32S7wf2`LrGIgYetoKMQ{we44Yt|M;*h)$YS9G~aEA#Ll8T z^tT6?XF3S)4gS91kHDwQ^x1+ywVS~a1YeIMh%W$lFMMPYZ=L%*;5C5txe$SB$2&%R zx~CEU0C0LSkKRP1^uC?`6a$~9e-MQue|^>=Q0=b4uZuojuNTo9M6z_fIF#t=^!^UL zlSAoRgNb41AbYjo_>4do>*|#Q5`8xN5g~ou*f7#A;)hbSkF;!fFS&jHwACmxsPu_a&mh zKjHa2{A!$#SN>}JPwo4u-9EL-$7I|12hTn_Xa=p&-Hw)?0<5O3)W#H0QJ=Km-9aQC zh0*BpC``Gip&>Q;LxKy13NOsT-x_?aKS9P-yDz_9>qFc@{=vhx;ImKu`o7N~)9Xk5 zAetAm8{!{4r@-k)unIq)&+k(BEaa;^G@i6GaMiB3UCX0iEHSRY zKX|sm=@&ivZ4L3{qo1`9J`Ya6$so-7uYqz??tIi|cncil(53kTEIfceaB_TIkEH8K zbVSJmg+;oF9!;l*q8SNgix2avcK@bN>Gb5C60mH?@zl7g8&=}&k}w|~$1BAb5U=An z;|c3{UWp!+b2^^0Y=m`Ouf=%nR@NP{!uuc4{B=xtXz9!@y&~FslB!4DAO<>(&${_Y0f`Vck_~47T>z) zXzgt^?__!2%%lb1UZmGK#h0W09koYlZYDq0iShfwTod@cW7(0VH`m>=QdW?_+?*w>`y=QY09k*(DGOwo!g$T zJk*az;dK7HpOeky0?LhuI#|GJoZecnIxsh4L`B!0`hZW`#RmzNVAid7Z z`F6DRW?$`vZaj^&4Io|Vo{(iyo@>?C9_n)u4lq1_!*8qW5ifmYWEzRbQqQ|9c> zl%16a(+nZGt{p6YmXm3eM%NXV2BNCSmuVjXUtMe1I2Ip!n(f6%Y^VjtU1?#9%>~rBdqJ4O7!<3Ue`N} zC#>rpg?0U-u&#qRwvb-eL%vR#ak7>&N@EL4Rk`16f}ZNSiEThw*H5+$SO&)NVc5b2 z1M3<~<8`g2Fi0KQD6DHQg&AK6@mB8`|8*qPH5kiESl42vU4=K}bbUtsA*|~(8EV74 zMav&{-qL)4cH7`AybrMQ(zTuCwH@)ce{rl~zPkSNv}x{9-nuT_8t8R>Sj$cr%K6#I zTiUYrf-IaVC-YU_2+CS=6MUA1&mC~SZR_JWHU-?WFZ!8?T><+)^LSXEl)r`9uPw|n z6yTVru2+4YwMVLITM>hS0*}g5*RocgZ$`Y8r{#Yk;w(N#sM%rKqRDb``rQvAVl z5YFT+v>JCA;^-9KM_M++O4bF-X}63MxNn%cEJ!44%DgrGI)p8(Wn;Xqwew{q%rT5l zls#Zwa~FWu_#uRSe^_HyTR|Ry2iN7AM%U-QPS2mlmV-Qg8klQsOaIftw%%YRYj^Uq zZA!Qn%B$}H3X{G7M}1>FpKWkv+^8)8wqpTxn6&!d;N_G0FU!MteV?eMM*IFM_0)V= zPvxcW8iAMgzYP6(px1KiyNJSwk~qy<-%UI}nY%?lG;hgQbk)a^kCj&eFz?O6BkwMi z^oDtn<^j;mAZ%nNWnrAY>yQ;;edi%;^CNsO{^&c8!az&g@OFqA8 zM^jY7CzhdS^!k$f%sg~65{X>CuTd=nV}o4-2TGD)CFU97Bi!AG@Ig_kN6ScQ@apN= zarf7X-d!q>4j+nmuEvGDb#kKQ-mDPHq;0F&m!_xPEaHbL+0KDOG}85JfcI0t9TUTo zj`j`qPfmJ~3kL1uZi4fBk6#R$wDa0=wv4+6F$f1KeZoV&fq3;EqI{JmJ&-FoI|4`+ zC@GCtAy#Sy#%>>+-?97!#C!-4m8e`SP2*y(`xWe)8XACld{kj6<}(T*D|Z@FkB^Rx zjZT*aCntvb2PbDIW=eb)!o_}Q3BS9^cLaW)JvctwLhRiVtad6ThY~9R9{b1v3HXgl#OJ9YjF6OE+rLQqx*#nPLgi1sNRkpZN*KF28|*+ z!8JGHM9lP8O7PA|y-OU!$ z)QVK^wwR7aV1C_VT6PuN+&vc4)Yjwfw}{pqO%5Ldriw95XPf(k#kDnexIeLo&h{qv z1&b*5wz#iYL}y!&d4Ev-}KlKXBB=Z;xKSIbT`=s)IB4Xy@*Ol$yBHM$iR)!E+c zPR=0O`lN+&i=x zMgujwBL-@5?=(=WyTd?j?k)qhyZZyQV{)hztNx!1vSVTj!`mO`F-!2#x(jKco;7k3(gp zS_ftZU_x|yt2<*J?ovndU4bqvXtqU+U(gf}y7nBZ_n_;{q1;swv2(I(0PBQ9ZYrYM zt}RUj@w!yuB9W0ZoH5XeYEwsXRO|SlTggu=ijmD*s|ghA6W`daxaSXMkxF8+&=$_I{%gm&os(6DqC`DIjv4LSD z;*WZiZzauyvgcLRzBqkTW0M1DjELwN!E6$+KTO!t%#N7>#|x=_y5`x@u^}m157yAU z;o0Lu_0aIHEsvDBEkoveFYg5h+7~l)&ms3)XxW2z?16Y+e?AU(2`^7x=5@MV3*ajiKd>(oWsdwbjjY8cs551MtG!uz(NaeZYzs|y3 z@*lPcF8Ob>2*2ciuSNCwCI4^C!!@{j=iwUN?`3eZApDp`g@x)T=iwUMWAkv0?g@+Y zOa8CrQ4Q{|EQ(A1?^%Q_`FW>%6pSqSpR*WQ@-M;c7HMS3UvDw8+<)`PUDJd8vWWlh7Uoj>O9>&%_y1{O68w2W z#P#_P9;^+hzw5t#9Eq2`X>=BAyk{ax64nHnjTVPoi51EJrk85os0nhOc{;fgVs zVQ0#dV~&?!O1{|Z+F#~g1uw6RB|!mM4Bks=aU5}Z9c09XjXvJtMjVEwP+Z;?7pbro zx`yodiw}`p8(m)tX?aT;k#W!^MM_yZ%ucnI#s&^C#ny!)nUXh_F(oIz<&|WNFil1J;gj<8y|WXe69R@*E$Dw{1T6;AX7JO09yi{Lfkp89mx;%z& zeePE(VZ)o?J4{@BslKfO(!ZYmTN9%%)$f~+W42P?-^j=DrTRk^kfAugQz0t6+5X;w zQ6cRgR3PxB{`f*MA>}6*iVsC;1J`BwhRM+T4#{|2=*9}G!@+JtS!v4Kq7xOj;gJfE6jT;p6{2y6V z@8p34`00XIEO$`iX-rYN-IhjHfMHY6)5r>N z#L~zL@EVJe72x$2!xi8=EP^Y*+btrj0N-bETmgR2BDezND@trit^gmjh`0j$cn0fN zfS=0Y+~+L9uK=ISqZ-^d@~B4lZHwXx@b5B+umXH`KC%Hn(Z?O6%*4$Xps=$f>mRQ?EPukcR^;HVxrz+ z2;#&NVGco`vIq`ApR))*1U+d{VF=>xNn|9r2KViGIIN8`IC%->nZuYg3_(>^X$9Bd zmd(R8y44ovhoCd^s0MegMR5q)U=cC|U1BjZ1Z}ez8G^XI5eq6qP|;#!2>K<9ks)Zv zVmJhiTLg!oYb_!SL2tJ>4napPf5dbibD{8gh+@m1pVcFWP|&WN5+@X;}+&?-6D)JU_}CX^;>RX5}cF} z@!f76aOnr33k=lkHW{eJU2LFMcbS3OT(g1NU0;A?EhfvA8SEnsplfqc&fH>5=j3%* zZo7dze*5Tw5qBVu1+}|AATtYNZUyOT*)NQ5$zx<;e0wEqSj};(NO{DC@!b`Weu+uj z^-8V_W9}m5aB*S$k$fB%#t&9NhT?FmDZ>l&VRgzwq?MyW+D}y=@TKO)R6eQ1gp^-g zC_ZHU#%a7drX=Z!?H^cGy7+gAaa~7c4iD@})r;Cbnk>e z(=lCcpT(BOp97f2VUn3cQ+|fvFD&T@(92VD7Bo}xA`mPppU=Rh<3-O?Af7RtFG>oS zLKxt2p{4+U_tshY?9NL0ml0b*%9wanj13phI*Q3tv4qzF$`pMpQB&wQ0@RwkrHVEA z4n{Vfak|i^6kTB5SX3O08FQNf2(}G@`PE`&W3@U1;H$-7=4`b_3C~v^);4Gdt2Gs= zSlpWcWvaz`25MI8Hh`qN!~2^X`>~_LG(ZaQVE|HU`9sp*%V09h`7>Ws!qt${jBIv= z<5t}fAt$Kf&mDh)ROz(P%O=hRwB(L9brs9(glzR&AvkN7bbsXI1w%Gnm*q)av^Y6;=1oAQ*k~ zzMOsnTZV|s<&{P*#U+xC=~{nT@g(|4FJkWj?{{m~*_g%d}fyhW|HABoja7 z%LzUtX}EY=B$;UkPWh%k-U*P&>TDC72w(;$6XG2F1gO%H1Ga}PB~?G>5&J+Yk}PxQ zuS__eFl(-Q;mdmBO3R9o99`m&Jpdp(WOF!4m{Mx6T<)H0nI z$XALZW#ktpXclEF7C{^_Qw5tM6jQJSJwVeB6_pBd{g5G&8iPt=*=tgDn3mlpVKOPN zM^vmJuPo#4l2-6SEI)09S7FjQvBuv)odl&-UI&qQ8ocaAvR=i;os}5H zi@+rTcT6Id_pK+%aT7NE?m|h~L5e*#Hdq{_v_ChII*y@KkqYX>ejL?_nnIOe|5b%y zYsEYmNj+x@QMP}+I`Jaf+=BC|gqpYDtb?#BFE|@hOm4x+0WzeSx8URv`4E>`a8}3h z!wv_p&os(+A%V0ZPXXCR`B$LMT@bV#Sa~NSepA3N?EGjcsv;`p)*{N=vfvJWzOI`= z5tZX#{)ED77>m1h^fonjw#8cV(!iFc&W`3{Q*XlZXO;@TRm4=3%^9Fczet=_Q5LaR z$`Bi6#f~IP2(z*FqISv_Tt4$;t@ivOgtdoq$q>6Mr`I&rvkXpG521 zxtAwYUr0W*Q$kxL`Y=peBy_Ynq7TEgIYPG`eCbBu^m!wCUn|_3;da95a|6OR!f}(i z3lok$Jf{BpaQ_*OTeA9C+|vfnyzUE*c0}m*1@{bmI@aAz6K}XH!nkKIND~QJqFrb(1-RGXj4I-cOrZ{+8=9-3X`8dl9}1?rymE8~o!4KMD60 zxTg&MdkB9Y?(gBAF?d|=eHgs+5qE8H&|{Hl8AE{5xc z+Y6^pCk~hGgByYyfzyXFpuGn=+IFC$O$R!j&Qm$4PaJJ8(9y;M9c?Sn(I$b?{j@&Q z(p~`_zt?}E^jiKr-On4J&re~NnRWy8Q9N<91)#9{#PNH2gSD0ab2d^;0{2pCl%?CceaTiypas|?K1;_8v^* zKEzL*q7df6*Kfpmh^seFPY%yqhfhZ~@|&RM&fbl^1LXsynT@Tb@yU%%#T_j>Hutx+ z@4!NN*BCw!I@sTa@a0>#Zfb96+}hLomj0IV!)Xi-f&=I76o3v3*hj?OTKyD~G1OooT?n;^d~S&wg)>5~B8IS*J^UVu=p+3}DZA1#efP9#eL72c4{ z#!@mrz|3%Pb$SM0h4rJJ{r%=uD=wO{76?2P&JF!b(IGS)zV05Mf)b&8YSv(gzx@N2 zbIkgQJk1~Q!>j{xuxUF^4vgVj(BbmrxR_etx9*gc{95^nRu6STbwa!0r!UBhs!cTnYzW6>KD{1B;KYt2A?lXSD z$!Gf6DXbV#YHU4%F8w~3&-Uo+M8-fxyB)uuTR4RFq3d7Fz*<`C%CMcHKZZA%cgVU7C!?V zoGq726VMxs#=b8jAiK(E_F78KA&$!osFCEJz{LU53UI^!?lByBDEZ(?;XoghT z|2{4Cl~UnD4dm_Fi*SZV%Srn>dUx~}4>r#Z52LGRe%g+*f{hcHpzu;cKpGCd&sU98 zz(@Hi=`3P$eFd1%)m~8@ow#-!8Y=cPQ1n-J(x0If50s{oO^(i8O|8C|;d_b9kKR&# zX%h+gGpYVVa@`Yabj7``O}$O?&L4$CL%kBamnKp0EBgL$dUhVQJ*~u(OtfUsoQ}|i zrxyn)+lx&*+A40&rSo|B-mItNa!(0t*piQj=Mu_iE7lldYJd2X z<0L;}pI4EH@CVksuu?_hfyCmjzTP(CL+*06FJ{7{juj7dVe}FEL$9cE)8GK~Ned`7 zm4kS({P-G)mOUaY$3(p z6Z>&jA)93^g48xGOdL$K)(;7gO*>vtnjz2xIU?LJ2AIQ*>G79+`M z@FSLpCv+pgbGF8Uf>dpxy>e~T$TASl+oZ>L^t30T^m_WzHfIokF*H$Z>uD?QZfo6? z3dfVpA&=bYk__u~@G@3QjyFfh^DvA(LRuwuS{}g7vlSf*Co6-_(DVV`e2j$sXZtZT zIWBP1uigX#oxASn)q->t;) zS%C+my$`Le_LwAip6d3*$>>K{UuRESOK-6=(-%SqQsHz=h_L{!<@{u_cb-hWIK!M0 zh`J(G9DxEstPYRvV_N9#>v84MFhACeX+*!E1g5n@YAu$$zi{G9RSf6yBmZzFKMOZH zd}=5LPJ%deu555)qp%>BwJ9<@ijTBj?%{ku%$i^f=X-~|?Pn~Myxhgn%uygUrXu}7 z@!TSjhR|491HbH2XhPB+{^lO6 zu6QDEi3VZm5+0W|x)SKTWflOv*`^qbmUcWLvW~Tcm z`mgTC8@KE$GS)Y>=0K5 z{$1P{oH&rR2;(;v$s7%c?`_4vkB5RRUv6zfEud{!)xtho+s;ju?7qmGL?)Uq0rF{Q zAkW#4(Zx=K({~k_Srxqn*)??mg5f_k93$NL2C4{ScLs$E)c6G(ONl@ezo5^<71;2z zM$b7~v>|Gk6D^r?;>W5SMg%kU6iv>h10Ae6f()-)POG#za>qg|*2P=ZA@84etHOfB z#+DsD9X zr=x8KmKMzu#L&5`F8h>5KakF67 zA(>(zKADDK+hDE2b7`tUlDTl_9+4VqAmMar27BWN+@4}bZySrbN8a;8dU>G;VQ-jl zWEi{nrNObQ{W&+<4S~H{e1GW;iuhwmp`3AvDoLR!o6!7h;-=09NiJ<2cDwoVC?p{O z_4k-YA@w_BY99ohU#x%(vN{rEE2WavhRDiip@qvG@QhT!IE+_$8DLP9)USd9;oQF)Nla8KD`Yg&m@3 zYR6mPLBoq#J0Q8rj8J_vh3?}Mz?1>3%O$l z35`*jMhk4Vz!tZoZHEY9ckiyE>%hj6L}M)~_HSC5+jjl|(_%26(?po;jfoqIl@i8_ zvrm~huj==A`Rv#5+5!M>h2&>h5c}`m4%WGSBc0?nV9B5_H5pC6Qfs+v#gh?YW z8G-Y=Z5E=Xvxswn-XcyuQOsGI5+z|Pw>NcmN}$-$)8;8+E3(zJv|gFII(Blow9}(A z$DNfhHc`jUo;Li~jj)Wd4&5A!+hoOqG?H=6?BvWSen!(YvNjF0nw~NXDF04ZF7b=! zA^fbRXpCWFS7Y>7M3^dGq2a}E!$Cu^f6k{? zxK65|>iC@ymEbfezX*!i5JJhU2q^L=kNKl|3vJFj{1A$>HbdyINE0lJFeq(2gPlDn z4vDydjTIGtE5*;=81SZDR|oc#@uz`*u>S67-ON8*_~#=2xtM=0(POO85S`y}PNiudTu%<_am<59S?#9v`?0T*{>bUgij>47pfn>*+DJ z0tUV1mY=&+*gH{qF-uUu;oJ-0s$4HUn*6VlZ(ig~7LN<_Gm9$MMUSU>Yu!Iob|0v?1zdFkCF z!9IHT!DWlCwAF6Y9EtA~;$C`p!PU5#s#r*-=4TDyOON*Ut6U#F9%#<;eF)fxg`n#Z zc%Sh>E#cz;pAi(l1d)d<&V&PVdS^?pm)`jvOK+#g(%a{;^OJX{Vs4bwNSuRw3J}OeNa5S-x%Fw$@g1z)U;IZ@`^H_S1dn`Sgs)8CS zb8@12{wmi^kCtnYHNAV_d<_`-h>xJh)8yHzk;zR$P^9Ox*h5cglO~dOL}+{H`3(0m zi;oF*FE0{g(xtHPaLAo;(48F>ght$ag56reI?8ytd+zkP#9}u&kwvY$_V5jJT8>1j zmH+)fXM|1ElWJS$3|K6*!@{@48MyWzXm`{ z(Ce09H@za9S9ON=N<=R`9@h5}np@)6o%r=7em$07_gv!FXZa-!P5g?9-=4&;X!#Wl zzde>;YHC{fVd^Eg0Qb^!FI_jMtd_u(x*(Jxo2E-JS~u2q8V(vx?WGST}ATxR5^B%YJ_*gJ^&795k)|9gqSpwF**HHBziBs)8T5|!8C91)0Kw=xy%(9_|I_FkO2Mv3RmTd^u8&<9(v#QSbBd0 zSLc>JTv$Afp@z`+;Fh?u69j=Dz%2%X1S&j!`$F4!P*8gO3?{35iJ;pOB*jVuMN5$S z4|(?ZEa>s;nrs${pxY9pEZXq_%$wn=-IiEz#Vy9wXsvbIBAy@1d;ks=qW7Ex_tN9% zGuezuOS^!WHRvfp%J{Ru{s3;Vo5jtAXUsADEL@$3 XGM?hq*6e`zyfO`ZEomx@% z%}0F&sK0_+;rT5)e*APy6q?}c&l}6qz8Ve{rFVw}chlo{LD`BHfZ>-&i(SpOMXoTX zUnD84IVv61RcRR3c*W(@@r$NCa3{H%Uj_d=tLl!QUekoo*>gnyGTaKxg9%H_KDbrD zN|DY;ahe&KlExN*pGv*t8Btyj!9kMr_!(7Je2Jjj5+pt07gK)?2M+Z3;Z&9b3BD}^ z-Sm_oap1R2{~it;=sg@cF!VzoL66^4dDaYVf

=jS}pmcag`^YxP)qmwPO|F^{Ep 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 literal 196450 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�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 z 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 __FLASH_segment_start__) && (__vectors_end__ <= __FLASH_segment_end__)), error: .vectors is too large to fit in FLASH memory segment) 0x000000b8 __init_load_start__ = ALIGN (__vectors_end__, 0x4) -.init 0x000000b8 0x11c +.init 0x000000b8 0x124 0x000000b8 __init_start__ = . *(.init .init.*) - .init 0x000000b8 0x11c THUMB Flash Debug/../../obj/cstart.o + .init 0x000000b8 0x124 THUMB Flash Debug/../../obj/cstart.o 0x000000b8 reset_handler - 0x00000148 exit - 0x000001d4 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x000001d4 __init_load_end__ = __init_end__ + 0x00000150 exit + 0x000001dc __init_end__ = (__init_start__ + SIZEOF (.init)) + 0x000001dc __init_load_end__ = __init_end__ 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment) - 0x000001d4 __text_load_start__ = ALIGN (__init_end__, 0x4) + 0x000001dc __text_load_start__ = ALIGN (__init_end__, 0x4) -.text 0x000001d4 0x1560 - 0x000001d4 __text_start__ = . +.text 0x000001dc 0x1494 + 0x000001dc __text_start__ = . *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs + .glue_7 0x000001dc 0x0 linker stubs + .glue_7t 0x000001dc 0x0 linker stubs .text.UnusedISR - 0x000001d4 0x18 THUMB Flash Debug/../../obj/vectors.o - 0x000001d4 UnusedISR + 0x000001dc 0x10 THUMB Flash Debug/../../obj/vectors.o + 0x000001dc UnusedISR .text.CpuIrqDisable 0x000001ec 0x4 THUMB Flash Debug/../../obj/cpu_comp.o 0x000001ec CpuIrqDisable .text.CpuIrqEnable 0x000001f0 0x4 THUMB Flash Debug/../../obj/cpu_comp.o 0x000001f0 CpuIrqEnable - .text.CpuInit 0x000001f4 0x10 THUMB Flash Debug/../../obj/cpu.o + .text.CpuInit 0x000001f4 0x8 THUMB Flash Debug/../../obj/cpu.o 0x000001f4 CpuInit .text.CpuStartUserProgram - 0x00000204 0x44 THUMB Flash Debug/../../obj/cpu.o - 0x00000204 CpuStartUserProgram + 0x000001fc 0x4c THUMB Flash Debug/../../obj/cpu.o + 0x000001fc CpuStartUserProgram .text.CpuMemCopy - 0x00000248 0x24 THUMB Flash Debug/../../obj/cpu.o + 0x00000248 0x20 THUMB Flash Debug/../../obj/cpu.o 0x00000248 CpuMemCopy .text.FlashGetSector - 0x0000026c 0x3c THUMB Flash Debug/../../obj/flash.o + 0x00000268 0x40 THUMB Flash Debug/../../obj/flash.o .text.FlashWriteBlock - 0x000002a8 0x58 THUMB Flash Debug/../../obj/flash.o + 0x000002a8 0x60 THUMB Flash Debug/../../obj/flash.o .text.FlashSwitchBlock - 0x00000300 0x58 THUMB Flash Debug/../../obj/flash.o + 0x00000308 0x58 THUMB Flash Debug/../../obj/flash.o .text.FlashAddToBlock - 0x00000358 0x94 THUMB Flash Debug/../../obj/flash.o + 0x00000360 0x94 THUMB Flash Debug/../../obj/flash.o .text.FlashInit - 0x000003ec 0x24 THUMB Flash Debug/../../obj/flash.o - 0x000003ec FlashInit + 0x000003f4 0x20 THUMB Flash Debug/../../obj/flash.o + 0x000003f4 FlashInit .text.FlashWrite - 0x00000410 0x50 THUMB Flash Debug/../../obj/flash.o - 0x00000410 FlashWrite + 0x00000414 0x54 THUMB Flash Debug/../../obj/flash.o + 0x00000414 FlashWrite .text.FlashErase - 0x00000460 0x124 THUMB Flash Debug/../../obj/flash.o - 0x00000460 FlashErase + 0x00000468 0x100 THUMB Flash Debug/../../obj/flash.o + 0x00000468 FlashErase .text.FlashWriteChecksum - 0x00000584 0x48 THUMB Flash Debug/../../obj/flash.o - 0x00000584 FlashWriteChecksum + 0x00000568 0x48 THUMB Flash Debug/../../obj/flash.o + 0x00000568 FlashWriteChecksum .text.FlashVerifyChecksum - 0x000005cc 0x48 THUMB Flash Debug/../../obj/flash.o - 0x000005cc FlashVerifyChecksum + 0x000005b0 0x46 THUMB Flash Debug/../../obj/flash.o + 0x000005b0 FlashVerifyChecksum + *fill* 0x000005f6 0x2 .text.FlashDone - 0x00000614 0x38 THUMB Flash Debug/../../obj/flash.o - 0x00000614 FlashDone + 0x000005f8 0x40 THUMB Flash Debug/../../obj/flash.o + 0x000005f8 FlashDone .text.FlashGetUserProgBaseAddress - 0x0000064c 0x6 THUMB Flash Debug/../../obj/flash.o - 0x0000064c FlashGetUserProgBaseAddress - *fill* 0x00000652 0x2 00 - .text.NvmInit 0x00000654 0x10 THUMB Flash Debug/../../obj/nvm.o - 0x00000654 NvmInit + 0x00000638 0x6 THUMB Flash Debug/../../obj/flash.o + 0x00000638 FlashGetUserProgBaseAddress + *fill* 0x0000063e 0x2 + .text.NvmInit 0x00000640 0x8 THUMB Flash Debug/../../obj/nvm.o + 0x00000640 NvmInit .text.NvmWrite - 0x00000664 0x10 THUMB Flash Debug/../../obj/nvm.o - 0x00000664 NvmWrite + 0x00000648 0x8 THUMB Flash Debug/../../obj/nvm.o + 0x00000648 NvmWrite .text.NvmErase - 0x00000674 0x10 THUMB Flash Debug/../../obj/nvm.o - 0x00000674 NvmErase + 0x00000650 0x8 THUMB Flash Debug/../../obj/nvm.o + 0x00000650 NvmErase .text.NvmVerifyChecksum - 0x00000684 0x10 THUMB Flash Debug/../../obj/nvm.o - 0x00000684 NvmVerifyChecksum + 0x00000658 0x8 THUMB Flash Debug/../../obj/nvm.o + 0x00000658 NvmVerifyChecksum .text.NvmGetUserProgBaseAddress - 0x00000694 0x10 THUMB Flash Debug/../../obj/nvm.o - 0x00000694 NvmGetUserProgBaseAddress - .text.NvmDone 0x000006a4 0x18 THUMB Flash Debug/../../obj/nvm.o - 0x000006a4 NvmDone + 0x00000660 0x8 THUMB Flash Debug/../../obj/nvm.o + 0x00000660 NvmGetUserProgBaseAddress + .text.NvmDone 0x00000668 0x1c THUMB Flash Debug/../../obj/nvm.o + 0x00000668 NvmDone .text.TimerInit - 0x000006bc 0x20 THUMB Flash Debug/../../obj/timer.o - 0x000006bc TimerInit + 0x00000684 0x20 THUMB Flash Debug/../../obj/timer.o + 0x00000684 TimerInit .text.TimerReset - 0x000006dc 0xc THUMB Flash Debug/../../obj/timer.o - 0x000006dc TimerReset + 0x000006a4 0xc THUMB Flash Debug/../../obj/timer.o + 0x000006a4 TimerReset .text.TimerUpdate - 0x000006e8 0x1c THUMB Flash Debug/../../obj/timer.o - 0x000006e8 TimerUpdate + 0x000006b0 0x1c THUMB Flash Debug/../../obj/timer.o + 0x000006b0 TimerUpdate .text.TimerGet - 0x00000704 0x18 THUMB Flash Debug/../../obj/timer.o - 0x00000704 TimerGet + 0x000006cc 0x14 THUMB Flash Debug/../../obj/timer.o + 0x000006cc TimerGet .text.UartInit - 0x0000071c 0xb8 THUMB Flash Debug/../../obj/uart.o - 0x0000071c UartInit + 0x000006e0 0xac THUMB Flash Debug/../../obj/uart.o + 0x000006e0 UartInit .text.UartTransmitPacket - 0x000007d4 0x8c THUMB Flash Debug/../../obj/uart.o - 0x000007d4 UartTransmitPacket + 0x0000078c 0x88 THUMB Flash Debug/../../obj/uart.o + 0x0000078c UartTransmitPacket .text.UartReceivePacket - 0x00000860 0xb0 THUMB Flash Debug/../../obj/uart.o - 0x00000860 UartReceivePacket + 0x00000814 0x9c THUMB Flash Debug/../../obj/uart.o + 0x00000814 UartReceivePacket .text.AssertFailure - 0x00000910 0x1c THUMB Flash Debug/../../obj/assert.o - 0x00000910 AssertFailure + 0x000008b0 0xc THUMB Flash Debug/../../obj/assert.o + 0x000008b0 AssertFailure .text.BackDoorCheck - 0x0000092c 0x40 THUMB Flash Debug/../../obj/backdoor.o - 0x0000092c BackDoorCheck + 0x000008bc 0x44 THUMB Flash Debug/../../obj/backdoor.o + 0x000008bc BackDoorCheck .text.BackDoorInit - 0x0000096c 0x28 THUMB Flash Debug/../../obj/backdoor.o - 0x0000096c BackDoorInit + 0x00000900 0x28 THUMB Flash Debug/../../obj/backdoor.o + 0x00000900 BackDoorInit .text.BootInit - 0x00000994 0x38 THUMB Flash Debug/../../obj/boot.o - 0x00000994 BootInit + 0x00000928 0x38 THUMB Flash Debug/../../obj/boot.o + 0x00000928 BootInit .text.BootTask - 0x000009cc 0x28 THUMB Flash Debug/../../obj/boot.o - 0x000009cc BootTask - .text.ComInit 0x000009f4 0x20 THUMB Flash Debug/../../obj/com.o - 0x000009f4 ComInit - .text.ComTask 0x00000a14 0x2c THUMB Flash Debug/../../obj/com.o - 0x00000a14 ComTask - .text.ComFree 0x00000a40 0x2 THUMB Flash Debug/../../obj/com.o - 0x00000a40 ComFree - *fill* 0x00000a42 0x2 00 + 0x00000960 0x28 THUMB Flash Debug/../../obj/boot.o + 0x00000960 BootTask + .text.ComInit 0x00000988 0x20 THUMB Flash Debug/../../obj/com.o + 0x00000988 ComInit + .text.ComTask 0x000009a8 0x30 THUMB Flash Debug/../../obj/com.o + 0x000009a8 ComTask + .text.ComFree 0x000009d8 0x2 THUMB Flash Debug/../../obj/com.o + 0x000009d8 ComFree + *fill* 0x000009da 0x2 .text.ComTransmitPacket - 0x00000a44 0x24 THUMB Flash Debug/../../obj/com.o - 0x00000a44 ComTransmitPacket - .text.ComGetActiveInterfaceMaxRxLen - 0x00000a68 0x14 THUMB Flash Debug/../../obj/com.o - 0x00000a68 ComGetActiveInterfaceMaxRxLen + 0x000009dc 0x24 THUMB Flash Debug/../../obj/com.o + 0x000009dc ComTransmitPacket .text.ComGetActiveInterfaceMaxTxLen - 0x00000a7c 0x14 THUMB Flash Debug/../../obj/com.o - 0x00000a7c ComGetActiveInterfaceMaxTxLen + 0x00000a00 0x14 THUMB Flash Debug/../../obj/com.o + 0x00000a00 ComGetActiveInterfaceMaxTxLen + .text.ComGetActiveInterfaceMaxRxLen + 0x00000a14 0x8 THUMB Flash Debug/../../obj/com.o + 0x00000a14 ComGetActiveInterfaceMaxRxLen .text.ComIsConnected - 0x00000a90 0x10 THUMB Flash Debug/../../obj/com.o - 0x00000a90 ComIsConnected - .text.CopInit 0x00000aa0 0x2 THUMB Flash Debug/../../obj/cop.o - 0x00000aa0 CopInit + 0x00000a1c 0x8 THUMB Flash Debug/../../obj/com.o + 0x00000a1c ComIsConnected + .text.CopInit 0x00000a24 0x2 THUMB Flash Debug/../../obj/cop.o + 0x00000a24 CopInit .text.CopService - 0x00000aa2 0x2 THUMB Flash Debug/../../obj/cop.o - 0x00000aa2 CopService + 0x00000a26 0x2 THUMB Flash Debug/../../obj/cop.o + 0x00000a26 CopService .text.XcpSetCtoError - 0x00000aa4 0x14 THUMB Flash Debug/../../obj/xcp.o - .text.XcpInit 0x00000ab8 0x1c THUMB Flash Debug/../../obj/xcp.o - 0x00000ab8 XcpInit + 0x00000a28 0x14 THUMB Flash Debug/../../obj/xcp.o + .text.XcpInit 0x00000a3c 0x1c THUMB Flash Debug/../../obj/xcp.o + 0x00000a3c XcpInit .text.XcpIsConnected - 0x00000ad4 0x10 THUMB Flash Debug/../../obj/xcp.o - 0x00000ad4 XcpIsConnected + 0x00000a58 0x10 THUMB Flash Debug/../../obj/xcp.o + 0x00000a58 XcpIsConnected .text.XcpPacketTransmitted - 0x00000ae4 0x10 THUMB Flash Debug/../../obj/xcp.o - 0x00000ae4 XcpPacketTransmitted + 0x00000a68 0x10 THUMB Flash Debug/../../obj/xcp.o + 0x00000a68 XcpPacketTransmitted .text.XcpPacketReceived - 0x00000af4 0x240 THUMB Flash Debug/../../obj/xcp.o - 0x00000af4 XcpPacketReceived + 0x00000a78 0x240 THUMB Flash Debug/../../obj/xcp.o + 0x00000a78 XcpPacketReceived .text.SystemHFClockGet - 0x00000d34 0x98 THUMB Flash Debug/../../obj/system_efm32.o - 0x00000d34 SystemHFClockGet + 0x00000cb8 0x94 THUMB Flash Debug/../../obj/system_efm32.o + 0x00000cb8 SystemHFClockGet .text.SystemCoreClockGet - 0x00000dcc 0x28 THUMB Flash Debug/../../obj/system_efm32.o - 0x00000dcc SystemCoreClockGet + 0x00000d4c 0x24 THUMB Flash Debug/../../obj/system_efm32.o + 0x00000d4c SystemCoreClockGet .text.SystemInit - 0x00000df4 0x2 THUMB Flash Debug/../../obj/system_efm32.o - 0x00000df4 SystemInit + 0x00000d70 0x2 THUMB Flash Debug/../../obj/system_efm32.o + 0x00000d70 SystemInit .text.SystemLFRCOClockGet - 0x00000df6 0x6 THUMB Flash Debug/../../obj/system_efm32.o - 0x00000df6 SystemLFRCOClockGet + 0x00000d72 0x6 THUMB Flash Debug/../../obj/system_efm32.o + 0x00000d72 SystemLFRCOClockGet .text.SystemLFXOClockGet - 0x00000dfc 0xc THUMB Flash Debug/../../obj/system_efm32.o - 0x00000dfc SystemLFXOClockGet + 0x00000d78 0xc THUMB Flash Debug/../../obj/system_efm32.o + 0x00000d78 SystemLFXOClockGet .text.CMU_FlashWaitStateMax - 0x00000e08 0x30 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000d84 0x30 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_FlashWaitStateControl - 0x00000e38 0x54 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000db4 0x54 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_Sync - 0x00000e8c 0x14 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000e08 0x14 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_LFClkGet - 0x00000ea0 0x48 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000e1c 0x44 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_ClockDivSet - 0x00000ee8 0x12c THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00000ee8 CMU_ClockDivSet + 0x00000e60 0x12c THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000e60 CMU_ClockDivSet .text.CMU_ClockEnable - 0x00001014 0x70 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00001014 CMU_ClockEnable + 0x00000f8c 0x70 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000f8c CMU_ClockEnable .text.CMU_ClockSelectGet - 0x00001084 0x6c THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00001084 CMU_ClockSelectGet + 0x00000ffc 0x68 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000ffc CMU_ClockSelectGet .text.CMU_ClockFreqGet - 0x000010f0 0x13c THUMB Flash Debug/../../obj/efm32_cmu.o - 0x000010f0 CMU_ClockFreqGet + 0x00001064 0x124 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00001064 CMU_ClockFreqGet .text.CMU_OscillatorEnable - 0x0000122c 0x54 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x0000122c CMU_OscillatorEnable + 0x00001188 0x54 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00001188 CMU_OscillatorEnable .text.CMU_ClockSelectSet - 0x00001280 0xc8 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00001280 CMU_ClockSelectSet + 0x000011dc 0xc8 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x000011dc CMU_ClockSelectSet .text.EMU_UpdateOscConfig - 0x00001348 0x14 THUMB Flash Debug/../../obj/efm32_emu.o - 0x00001348 EMU_UpdateOscConfig + 0x000012a4 0x14 THUMB Flash Debug/../../obj/efm32_emu.o + 0x000012a4 EMU_UpdateOscConfig .text.GPIO_DriveModeSet - 0x0000135c 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o - 0x0000135c GPIO_DriveModeSet + 0x000012b8 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x000012b8 GPIO_DriveModeSet .text.GPIO_PinModeSet - 0x00001374 0x80 THUMB Flash Debug/../../obj/efm32_gpio.o - 0x00001374 GPIO_PinModeSet + 0x000012d0 0x7a THUMB Flash Debug/../../obj/efm32_gpio.o + 0x000012d0 GPIO_PinModeSet .text.LEUART_Sync - 0x000013f4 0xe THUMB Flash Debug/../../obj/efm32_leuart.o - *fill* 0x00001402 0x2 00 + 0x0000134a 0xe THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_BaudrateSet - 0x00001404 0x4c THUMB Flash Debug/../../obj/efm32_leuart.o - 0x00001404 LEUART_BaudrateSet + 0x00001358 0x4c THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00001358 LEUART_BaudrateSet .text.LEUART_Enable - 0x00001450 0x1c THUMB Flash Debug/../../obj/efm32_leuart.o - 0x00001450 LEUART_Enable - .text.LEUART_FreezeEnable - 0x0000146c 0x14 THUMB Flash Debug/../../obj/efm32_leuart.o - 0x0000146c LEUART_FreezeEnable + 0x000013a4 0x1c THUMB Flash Debug/../../obj/efm32_leuart.o + 0x000013a4 LEUART_Enable .text.LEUART_Init - 0x00001480 0x50 THUMB Flash Debug/../../obj/efm32_leuart.o - 0x00001480 LEUART_Init + 0x000013c0 0x48 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x000013c0 LEUART_Init .text.LEUART_Rx - 0x000014d0 0xc THUMB Flash Debug/../../obj/efm32_leuart.o - 0x000014d0 LEUART_Rx + 0x00001408 0xc THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00001408 LEUART_Rx .text.LEUART_Tx - 0x000014dc 0x1c THUMB Flash Debug/../../obj/efm32_leuart.o - 0x000014dc LEUART_Tx + 0x00001414 0x1c THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00001414 LEUART_Tx .text.MSC_Init - 0x000014f8 0x20 THUMB Flash Debug/../../obj/efm32_msc.o - 0x000014f8 MSC_Init + 0x00001430 0x20 THUMB Flash Debug/../../obj/efm32_msc.o + 0x00001430 MSC_Init .text.MSC_Deinit - 0x00001518 0x1c THUMB Flash Debug/../../obj/efm32_msc.o - 0x00001518 MSC_Deinit + 0x00001450 0x1c THUMB Flash Debug/../../obj/efm32_msc.o + 0x00001450 MSC_Deinit .text.SYSTEM_ChipRevisionGet - 0x00001534 0x20 THUMB Flash Debug/../../obj/efm32_system.o - 0x00001534 SYSTEM_ChipRevisionGet + 0x0000146c 0x20 THUMB Flash Debug/../../obj/efm32_system.o + 0x0000146c SYSTEM_ChipRevisionGet .text.startup.main - 0x00001554 0x1e0 THUMB Flash Debug/../../obj/main.o - 0x00001554 main - 0x00001734 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x00001734 __text_load_end__ = __text_end__ + 0x0000148c 0x1e4 THUMB Flash Debug/../../obj/main.o + 0x0000148c main + 0x00001670 __text_end__ = (__text_start__ + SIZEOF (.text)) + 0x00001670 __text_load_end__ = __text_end__ .vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0 linker stubs .v4_bx 0x00000000 0x0 .v4_bx 0x00000000 0x0 linker stubs - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) - 0x00001734 __dtors_load_start__ = ALIGN (__text_end__, 0x4) -.dtors 0x00001734 0x0 - 0x00001734 __dtors_start__ = . +.iplt 0x00000000 0x0 + .iplt 0x00000000 0x0 THUMB Flash Debug/../../obj/cstart.o + 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) + 0x00001670 __dtors_load_start__ = ALIGN (__text_end__, 0x4) + +.dtors 0x00001670 0x0 + 0x00001670 __dtors_start__ = . *(SORT(.dtors.*)) *(.dtors) *(.fini_array .fini_array.*) - 0x00001734 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x00001734 __dtors_load_end__ = __dtors_end__ + 0x00001670 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) + 0x00001670 __dtors_load_end__ = __dtors_end__ 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment) - 0x00001734 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) + 0x00001670 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) -.ctors 0x00001734 0x0 - 0x00001734 __ctors_start__ = . +.ctors 0x00001670 0x0 + 0x00001670 __ctors_start__ = . *(SORT(.ctors.*)) *(.ctors) *(.init_array .init_array.*) - 0x00001734 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x00001734 __ctors_load_end__ = __ctors_end__ + 0x00001670 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) + 0x00001670 __ctors_load_end__ = __ctors_end__ 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment) - 0x00001734 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) + 0x00001670 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) -.rodata 0x00001734 0x1ef - 0x00001734 __rodata_start__ = . +.rodata 0x00001670 0x1e7 + 0x00001670 __rodata_start__ = . *(.rodata .rodata.* .gnu.linkonce.r.*) .rodata.str1.1 - 0x00001734 0x92 THUMB Flash Debug/../../obj/vectors.o - *fill* 0x000017c6 0x2 00 + 0x00001670 0x92 THUMB Flash Debug/../../obj/vectors.o + *fill* 0x00001702 0x2 .rodata.flashLayout - 0x000017c8 0xb4 THUMB Flash Debug/../../obj/flash.o - .rodata 0x0000187c 0x18 THUMB Flash Debug/../../obj/uart.o + 0x00001704 0xb4 THUMB Flash Debug/../../obj/flash.o + .rodata 0x000017b8 0x10 THUMB Flash Debug/../../obj/uart.o .rodata.str1.1 - 0x00001894 0x84 THUMB Flash Debug/../../obj/uart.o + 0x000017c8 0x84 THUMB Flash Debug/../../obj/uart.o .rodata.xcpStationId - 0x00001918 0x8 THUMB Flash Debug/../../obj/xcp.o - .rodata.CSWTCH.5 - 0x00001920 0x3 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00001923 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x00001923 __rodata_load_end__ = __rodata_end__ + 0x0000184c 0x8 THUMB Flash Debug/../../obj/xcp.o + .rodata.CSWTCH.17 + 0x00001854 0x3 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00001857 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) + 0x00001857 __rodata_load_end__ = __rodata_end__ 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment) - 0x00001924 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) + 0x00001858 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) -.ARM.exidx 0x00001924 0x0 - 0x00001924 __ARM.exidx_start__ = . - 0x00001924 __exidx_start = __ARM.exidx_start__ +.ARM.exidx 0x00001858 0x0 + 0x00001858 __ARM.exidx_start__ = . + 0x00001858 __exidx_start = __ARM.exidx_start__ *(.ARM.exidx .ARM.exidx.*) - 0x00001924 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) - 0x00001924 __exidx_end = __ARM.exidx_end__ - 0x00001924 __ARM.exidx_load_end__ = __ARM.exidx_end__ + 0x00001858 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) + 0x00001858 __exidx_end = __ARM.exidx_end__ + 0x00001858 __ARM.exidx_load_end__ = __ARM.exidx_end__ 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment) - 0x00001924 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) + 0x00001858 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) -.fast 0x20000000 0x138 load address 0x00001924 +.fast 0x20000000 0x120 load address 0x00001858 0x20000000 __fast_start__ = . *(.fast .fast.*) - .fast 0x20000000 0x138 THUMB Flash Debug/../../obj/efm32_msc.o - 0x20000000 MSC_ErasePage - 0x20000078 MSC_WriteWord - 0x20000138 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x00001a5c __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) + .fast 0x20000000 0x120 THUMB Flash Debug/../../obj/efm32_msc.o + 0x20000000 MSC_WriteWord + 0x200000ac MSC_ErasePage + 0x20000120 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) + 0x00001978 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) + +.rel.dyn 0x00000000 0x0 + .rel.iplt 0x00000000 0x0 THUMB Flash Debug/../../obj/cstart.o 0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment) -.fast_run 0x20000000 0x138 load address 0x00001924 +.fast_run 0x20000000 0x120 load address 0x00001858 0x20000000 __fast_run_start__ = . - 0x20000138 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .) - *fill* 0x20000000 0x138 00 - 0x20000138 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) - 0x20000138 __fast_run_load_end__ = __fast_run_end__ + 0x20000120 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .) + *fill* 0x20000000 0x120 + 0x20000120 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) + 0x20000120 __fast_run_load_end__ = __fast_run_end__ 0x00000001 . = ASSERT (((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <= __SRAM_segment_end__)), error: .fast_run is too large to fit in SRAM memory segment) - 0x00001a5c __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) + 0x00001978 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) -.data 0x20000138 0xc load address 0x00001a5c - 0x20000138 __data_start__ = . +.data 0x20000120 0xc load address 0x00001978 + 0x20000120 __data_start__ = . *(.data .data.* .gnu.linkonce.d.*) .data.comActiveInterface - 0x20000138 0x4 THUMB Flash Debug/../../obj/com.o + 0x20000120 0x1 THUMB Flash Debug/../../obj/com.o + *fill* 0x20000121 0x3 .data.SystemLFXOClock - 0x2000013c 0x4 THUMB Flash Debug/../../obj/system_efm32.o + 0x20000124 0x4 THUMB Flash Debug/../../obj/system_efm32.o .data.SystemHFXOClock - 0x20000140 0x4 THUMB Flash Debug/../../obj/system_efm32.o - 0x20000144 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x00001a68 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + 0x20000128 0x4 THUMB Flash Debug/../../obj/system_efm32.o + 0x2000012c __data_end__ = (__data_start__ + SIZEOF (.data)) + 0x00001984 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + +.igot.plt 0x00000000 0x0 + .igot.plt 0x00000000 0x0 THUMB Flash Debug/../../obj/cstart.o 0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment) -.data_run 0x20000138 0xc load address 0x00001a5c - 0x20000138 __data_run_start__ = . - 0x20000144 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) - *fill* 0x20000138 0xc 00 - 0x20000144 __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) - 0x20000144 __data_run_load_end__ = __data_run_end__ +.data_run 0x20000120 0xc load address 0x00001978 + 0x20000120 __data_run_start__ = . + 0x2000012c . = MAX ((__data_run_start__ + SIZEOF (.data)), .) + *fill* 0x20000120 0xc + 0x2000012c __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) + 0x2000012c __data_run_load_end__ = __data_run_end__ 0x00000001 . = ASSERT (((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <= __SRAM_segment_end__)), error: .data_run is too large to fit in SRAM memory segment) - 0x20000144 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) + 0x2000012c __bss_load_start__ = ALIGN (__data_run_end__, 0x4) -.bss 0x20000144 0x4f6 - 0x20000144 __bss_start__ = . +.bss 0x2000012c 0x4ee + 0x2000012c __bss_start__ = . *(.bss .bss.* .gnu.linkonce.b.*) .bss.bootBlockInfo - 0x20000144 0x204 THUMB Flash Debug/../../obj/flash.o + 0x2000012c 0x204 THUMB Flash Debug/../../obj/flash.o .bss.blockInfo - 0x20000348 0x204 THUMB Flash Debug/../../obj/flash.o + 0x20000330 0x204 THUMB Flash Debug/../../obj/flash.o .bss.millisecond_counter - 0x2000054c 0x4 THUMB Flash Debug/../../obj/timer.o - .bss.xcpCtoRxStartTime.2187 - 0x20000550 0x4 THUMB Flash Debug/../../obj/uart.o - .bss.xcpCtoRxLength.2185 - 0x20000554 0x1 THUMB Flash Debug/../../obj/uart.o - .bss.xcpCtoRxInProgress.2186 - 0x20000555 0x1 THUMB Flash Debug/../../obj/uart.o - .bss.xcpCtoReqPacket.2184 - 0x20000556 0x41 THUMB Flash Debug/../../obj/uart.o - *fill* 0x20000597 0x1 00 - .bss.assert_failure_file - 0x20000598 0x4 THUMB Flash Debug/../../obj/assert.o - .bss.assert_failure_line - 0x2000059c 0x4 THUMB Flash Debug/../../obj/assert.o + 0x20000534 0x4 THUMB Flash Debug/../../obj/timer.o + .bss.xcpCtoRxInProgress.5094 + 0x20000538 0x1 THUMB Flash Debug/../../obj/uart.o + *fill* 0x20000539 0x3 + .bss.xcpCtoRxStartTime.5095 + 0x2000053c 0x4 THUMB Flash Debug/../../obj/uart.o + .bss.xcpCtoReqPacket.5092 + 0x20000540 0x41 THUMB Flash Debug/../../obj/uart.o + .bss.xcpCtoRxLength.5093 + 0x20000581 0x1 THUMB Flash Debug/../../obj/uart.o .bss.backdoorOpen - 0x200005a0 0x1 THUMB Flash Debug/../../obj/backdoor.o - *fill* 0x200005a1 0x3 00 + 0x20000582 0x1 THUMB Flash Debug/../../obj/backdoor.o + *fill* 0x20000583 0x1 .bss.backdoorOpenTime - 0x200005a4 0x4 THUMB Flash Debug/../../obj/backdoor.o - .bss.xcpCtoReqPacket.884 - 0x200005a8 0x40 THUMB Flash Debug/../../obj/com.o - .bss.xcpInfo 0x200005e8 0x4c THUMB Flash Debug/../../obj/xcp.o + 0x20000584 0x4 THUMB Flash Debug/../../obj/backdoor.o + .bss.xcpCtoReqPacket.3788 + 0x20000588 0x40 THUMB Flash Debug/../../obj/com.o + .bss.xcpInfo 0x200005c8 0x4c THUMB Flash Debug/../../obj/xcp.o .bss.SystemCoreClock - 0x20000634 0x4 THUMB Flash Debug/../../obj/system_efm32.o - 0x20000634 SystemCoreClock + 0x20000614 0x4 THUMB Flash Debug/../../obj/system_efm32.o + 0x20000614 SystemCoreClock .bss.cmuStatus - 0x20000638 0x2 THUMB Flash Debug/../../obj/efm32_emu.o + 0x20000618 0x2 THUMB Flash Debug/../../obj/efm32_emu.o *(COMMON) - 0x2000063a __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x2000063a __bss_load_end__ = __bss_end__ + 0x2000061a __bss_end__ = (__bss_start__ + SIZEOF (.bss)) + 0x2000061a __bss_load_end__ = __bss_end__ 0x00000001 . = ASSERT (((__bss_end__ >= __SRAM_segment_start__) && (__bss_end__ <= __SRAM_segment_end__)), error: .bss is too large to fit in SRAM memory segment) - 0x2000063c __non_init_load_start__ = ALIGN (__bss_end__, 0x4) + 0x2000061c __non_init_load_start__ = ALIGN (__bss_end__, 0x4) -.non_init 0x2000063c 0x0 - 0x2000063c __non_init_start__ = . +.non_init 0x2000061c 0x0 + 0x2000061c __non_init_start__ = . *(.non_init .non_init.*) - 0x2000063c __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x2000063c __non_init_load_end__ = __non_init_end__ + 0x2000061c __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) + 0x2000061c __non_init_load_end__ = __non_init_end__ 0x00000001 . = ASSERT (((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <= __SRAM_segment_end__)), error: .non_init is too large to fit in SRAM memory segment) - 0x2000063c __heap_load_start__ = ALIGN (__non_init_end__, 0x4) + 0x2000061c __heap_load_start__ = ALIGN (__non_init_end__, 0x4) -.heap 0x2000063c 0x80 - 0x2000063c __heap_start__ = . +.heap 0x2000061c 0x80 + 0x2000061c __heap_start__ = . *(.heap .heap.*) - 0x200006bc . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x2000063c 0x80 00 - 0x200006bc __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x200006bc __heap_load_end__ = __heap_end__ + 0x2000069c . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) + *fill* 0x2000061c 0x80 + 0x2000069c __heap_end__ = (__heap_start__ + SIZEOF (.heap)) + 0x2000069c __heap_load_end__ = __heap_end__ 0x00000001 . = ASSERT (((__heap_end__ >= __SRAM_segment_start__) && (__heap_end__ <= __SRAM_segment_end__)), error: .heap is too large to fit in SRAM memory segment) - 0x200006bc __stack_load_start__ = ALIGN (__heap_end__, 0x4) + 0x2000069c __stack_load_start__ = ALIGN (__heap_end__, 0x4) -.stack 0x200006bc 0x100 - 0x200006bc __stack_start__ = . +.stack 0x2000069c 0x100 + 0x2000069c __stack_start__ = . *(.stack .stack.*) - 0x200007bc . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x200006bc 0x100 00 - 0x200007bc __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x200007bc __stack_load_end__ = __stack_end__ + 0x2000079c . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) + *fill* 0x2000069c 0x100 + 0x2000079c __stack_end__ = (__stack_start__ + SIZEOF (.stack)) + 0x2000079c __stack_load_end__ = __stack_end__ 0x00000001 . = ASSERT (((__stack_end__ >= __SRAM_segment_start__) && (__stack_end__ <= __SRAM_segment_end__)), error: .stack is too large to fit in SRAM memory segment) - 0x200007bc __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) + 0x2000079c __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) -.stack_process 0x200007bc 0x0 - 0x200007bc __stack_process_start__ = . +.stack_process 0x2000079c 0x0 + 0x2000079c __stack_process_start__ = . *(.stack_process .stack_process.*) - 0x200007bc . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) - 0x200007bc __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) - 0x200007bc __stack_process_load_end__ = __stack_process_end__ + 0x2000079c . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) + 0x2000079c __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) + 0x2000079c __stack_process_load_end__ = __stack_process_end__ 0x00000001 . = ASSERT (((__stack_process_end__ >= __SRAM_segment_start__) && (__stack_process_end__ <= __SRAM_segment_end__)), error: .stack_process is too large to fit in SRAM memory segment) - 0x200007bc __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) + 0x2000079c __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) -.tbss 0x200007bc 0x0 - 0x200007bc __tbss_start__ = . +.tbss 0x2000079c 0x0 + 0x2000079c __tbss_start__ = . *(.tbss .tbss.*) - 0x200007bc __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) - 0x200007bc __tbss_load_end__ = __tbss_end__ + 0x2000079c __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) + 0x2000079c __tbss_load_end__ = __tbss_end__ 0x00000001 . = ASSERT (((__tbss_end__ >= __SRAM_segment_start__) && (__tbss_end__ <= __SRAM_segment_end__)), error: .tbss is too large to fit in SRAM memory segment) - 0x00001a68 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + 0x00001984 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) -.tdata 0x200007bc 0x0 load address 0x00001a68 - 0x200007bc __tdata_start__ = . +.tdata 0x2000079c 0x0 load address 0x00001984 + 0x2000079c __tdata_start__ = . *(.tdata .tdata.*) - 0x200007bc __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) - 0x00001a68 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) - 0x00001a68 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) + 0x2000079c __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) + 0x00001984 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) + 0x00001984 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) 0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment) -.tdata_run 0x200007bc 0x0 - 0x200007bc __tdata_run_start__ = . - 0x200007bc . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) - 0x200007bc __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) - 0x200007bc __tdata_run_load_end__ = __tdata_run_end__ - 0x200007bc __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) +.tdata_run 0x2000079c 0x0 + 0x2000079c __tdata_run_start__ = . + 0x2000079c . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) + 0x2000079c __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) + 0x2000079c __tdata_run_load_end__ = __tdata_run_end__ + 0x2000079c __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) 0x00000001 . = ASSERT (((__tdata_run_end__ >= __SRAM_segment_start__) && (__tdata_run_end__ <= __SRAM_segment_end__)), error: .tdata_run is too large to fit in SRAM memory segment) START GROUP LOAD THUMB Flash Debug/../../obj/cstart.o @@ -1041,298 +1419,149 @@ END GROUP OUTPUT(THUMB Flash Debug/../../bin/openbtl_olimex_efm32g880.elf elf32-littlearm) .ARM.attributes - 0x00000000 0x10 + 0x00000000 0x2f .ARM.attributes - 0x00000000 0x10 THUMB Flash Debug/../../obj/cstart.o + 0x00000000 0x21 THUMB Flash Debug/../../obj/cstart.o .ARM.attributes - 0x00000010 0x10 THUMB Flash Debug/../../obj/vectors.o + 0x00000021 0x33 THUMB Flash Debug/../../obj/vectors.o .ARM.attributes - 0x00000020 0x10 THUMB Flash Debug/../../obj/cpu_comp.o + 0x00000054 0x33 THUMB Flash Debug/../../obj/cpu_comp.o .ARM.attributes - 0x00000030 0x10 THUMB Flash Debug/../../obj/cpu.o + 0x00000087 0x33 THUMB Flash Debug/../../obj/cpu.o .ARM.attributes - 0x00000040 0x10 THUMB Flash Debug/../../obj/flash.o + 0x000000ba 0x33 THUMB Flash Debug/../../obj/flash.o .ARM.attributes - 0x00000050 0x10 THUMB Flash Debug/../../obj/nvm.o + 0x000000ed 0x33 THUMB Flash Debug/../../obj/nvm.o .ARM.attributes - 0x00000060 0x10 THUMB Flash Debug/../../obj/timer.o + 0x00000120 0x33 THUMB Flash Debug/../../obj/timer.o .ARM.attributes - 0x00000070 0x10 THUMB Flash Debug/../../obj/uart.o + 0x00000153 0x33 THUMB Flash Debug/../../obj/uart.o .ARM.attributes - 0x00000080 0x10 THUMB Flash Debug/../../obj/assert.o + 0x00000186 0x33 THUMB Flash Debug/../../obj/assert.o .ARM.attributes - 0x00000090 0x10 THUMB Flash Debug/../../obj/backdoor.o + 0x000001b9 0x33 THUMB Flash Debug/../../obj/backdoor.o .ARM.attributes - 0x000000a0 0x10 THUMB Flash Debug/../../obj/boot.o + 0x000001ec 0x33 THUMB Flash Debug/../../obj/boot.o .ARM.attributes - 0x000000b0 0x10 THUMB Flash Debug/../../obj/com.o + 0x0000021f 0x33 THUMB Flash Debug/../../obj/com.o .ARM.attributes - 0x000000c0 0x10 THUMB Flash Debug/../../obj/cop.o + 0x00000252 0x33 THUMB Flash Debug/../../obj/cop.o .ARM.attributes - 0x000000d0 0x10 THUMB Flash Debug/../../obj/xcp.o + 0x00000285 0x33 THUMB Flash Debug/../../obj/xcp.o .ARM.attributes - 0x000000e0 0x10 THUMB Flash Debug/../../obj/core_cm3.o + 0x000002b8 0x33 THUMB Flash Debug/../../obj/system_efm32.o .ARM.attributes - 0x000000f0 0x10 THUMB Flash Debug/../../obj/system_efm32.o + 0x000002eb 0x33 THUMB Flash Debug/../../obj/efm32_cmu.o .ARM.attributes - 0x00000100 0x10 THUMB Flash Debug/../../obj/efm32_acmp.o + 0x0000031e 0x33 THUMB Flash Debug/../../obj/efm32_emu.o .ARM.attributes - 0x00000110 0x10 THUMB Flash Debug/../../obj/efm32_adc.o + 0x00000351 0x33 THUMB Flash Debug/../../obj/efm32_gpio.o .ARM.attributes - 0x00000120 0x10 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000384 0x33 THUMB Flash Debug/../../obj/efm32_leuart.o .ARM.attributes - 0x00000130 0x10 THUMB Flash Debug/../../obj/efm32_assert.o + 0x000003b7 0x33 THUMB Flash Debug/../../obj/efm32_msc.o .ARM.attributes - 0x00000140 0x10 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x000003ea 0x33 THUMB Flash Debug/../../obj/efm32_system.o .ARM.attributes - 0x00000150 0x10 THUMB Flash Debug/../../obj/efm32_dac.o - .ARM.attributes - 0x00000160 0x10 THUMB Flash Debug/../../obj/efm32_dbg.o - .ARM.attributes - 0x00000170 0x10 THUMB Flash Debug/../../obj/efm32_dma.o - .ARM.attributes - 0x00000180 0x10 THUMB Flash Debug/../../obj/efm32_ebi.o - .ARM.attributes - 0x00000190 0x10 THUMB Flash Debug/../../obj/efm32_emu.o - .ARM.attributes - 0x000001a0 0x10 THUMB Flash Debug/../../obj/efm32_gpio.o - .ARM.attributes - 0x000001b0 0x10 THUMB Flash Debug/../../obj/efm32_i2c.o - .ARM.attributes - 0x000001c0 0x10 THUMB Flash Debug/../../obj/efm32_int.o - .ARM.attributes - 0x000001d0 0x10 THUMB Flash Debug/../../obj/efm32_lcd.o - .ARM.attributes - 0x000001e0 0x10 THUMB Flash Debug/../../obj/efm32_lesense.o - .ARM.attributes - 0x000001f0 0x10 THUMB Flash Debug/../../obj/efm32_letimer.o - .ARM.attributes - 0x00000200 0x10 THUMB Flash Debug/../../obj/efm32_leuart.o - .ARM.attributes - 0x00000210 0x10 THUMB Flash Debug/../../obj/efm32_mpu.o - .ARM.attributes - 0x00000220 0x10 THUMB Flash Debug/../../obj/efm32_msc.o - .ARM.attributes - 0x00000230 0x10 THUMB Flash Debug/../../obj/efm32_opamp.o - .ARM.attributes - 0x00000240 0x10 THUMB Flash Debug/../../obj/efm32_pcnt.o - .ARM.attributes - 0x00000250 0x10 THUMB Flash Debug/../../obj/efm32_prs.o - .ARM.attributes - 0x00000260 0x10 THUMB Flash Debug/../../obj/efm32_rmu.o - .ARM.attributes - 0x00000270 0x10 THUMB Flash Debug/../../obj/efm32_rtc.o - .ARM.attributes - 0x00000280 0x10 THUMB Flash Debug/../../obj/efm32_system.o - .ARM.attributes - 0x00000290 0x10 THUMB Flash Debug/../../obj/efm32_timer.o - .ARM.attributes - 0x000002a0 0x10 THUMB Flash Debug/../../obj/efm32_usart.o - .ARM.attributes - 0x000002b0 0x10 THUMB Flash Debug/../../obj/efm32_vcmp.o - .ARM.attributes - 0x000002c0 0x10 THUMB Flash Debug/../../obj/efm32_wdog.o - .ARM.attributes - 0x000002d0 0x10 THUMB Flash Debug/../../obj/hooks.o - .ARM.attributes - 0x000002e0 0x10 THUMB Flash Debug/../../obj/main.o + 0x0000041d 0x33 THUMB Flash Debug/../../obj/main.o -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e THUMB Flash Debug/../../obj/vectors.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/cpu_comp.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/cpu.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/flash.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/nvm.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/timer.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/uart.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/assert.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/backdoor.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/boot.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/com.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/cop.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/xcp.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/core_cm3.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/system_efm32.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_acmp.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_adc.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_aes.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_assert.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_cmu.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_dac.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_dbg.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_dma.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_ebi.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_emu.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_gpio.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_i2c.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_int.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_lcd.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_lesense.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_letimer.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_leuart.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_mpu.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_msc.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_opamp.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_pcnt.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_prs.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_rmu.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_rtc.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_system.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_timer.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_usart.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_vcmp.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_wdog.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/hooks.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/main.o +.comment 0x00000000 0x4c + .comment 0x00000000 0x4c THUMB Flash Debug/../../obj/vectors.o + 0x4d (size before relaxing) + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/cpu_comp.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/cpu.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/flash.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/nvm.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/timer.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/uart.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/assert.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/backdoor.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/boot.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/com.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/cop.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/xcp.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/system_efm32.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_cmu.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_emu.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_gpio.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_leuart.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_msc.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_system.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/main.o -.debug_line 0x00000000 0x876f - .debug_line 0x00000000 0x11b THUMB Flash Debug/../../obj/cstart.o - .debug_line 0x0000011b 0x14b THUMB Flash Debug/../../obj/vectors.o - .debug_line 0x00000266 0xd5 THUMB Flash Debug/../../obj/cpu_comp.o - .debug_line 0x0000033b 0x10c THUMB Flash Debug/../../obj/cpu.o - .debug_line 0x00000447 0x412 THUMB Flash Debug/../../obj/flash.o - .debug_line 0x00000859 0x122 THUMB Flash Debug/../../obj/nvm.o - .debug_line 0x0000097b 0x108 THUMB Flash Debug/../../obj/timer.o - .debug_line 0x00000a83 0x3b1 THUMB Flash Debug/../../obj/uart.o - .debug_line 0x00000e34 0x13b THUMB Flash Debug/../../obj/assert.o - .debug_line 0x00000f6f 0x158 THUMB Flash Debug/../../obj/backdoor.o - .debug_line 0x000010c7 0xc2 THUMB Flash Debug/../../obj/boot.o - .debug_line 0x00001189 0x1c2 THUMB Flash Debug/../../obj/com.o - .debug_line 0x0000134b 0xb6 THUMB Flash Debug/../../obj/cop.o - .debug_line 0x00001401 0x232 THUMB Flash Debug/../../obj/xcp.o - .debug_line 0x00001633 0x1d THUMB Flash Debug/../../obj/core_cm3.o - .debug_line 0x00001650 0x287 THUMB Flash Debug/../../obj/system_efm32.o - .debug_line 0x000018d7 0x3a7 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_line 0x00001c7e 0x3ce THUMB Flash Debug/../../obj/efm32_adc.o - .debug_line 0x0000204c 0xd02 THUMB Flash Debug/../../obj/efm32_aes.o - .debug_line 0x00002d4e 0x0 THUMB Flash Debug/../../obj/efm32_assert.o - .debug_line 0x00002d4e 0x6e9 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_line 0x00003437 0x372 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_line 0x000037a9 0x2f0 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_line 0x00003a99 0x50c THUMB Flash Debug/../../obj/efm32_dma.o - .debug_line 0x00003fa5 0x3e2 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_line 0x00004387 0x3c5 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_line 0x0000474c 0x3ff THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_line 0x00004b4b 0x485 THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_line 0x00004fd0 0x201 THUMB Flash Debug/../../obj/efm32_int.o - .debug_line 0x000051d1 0x440 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_line 0x00005611 0x101 THUMB Flash Debug/../../obj/efm32_lesense.o - .debug_line 0x00005712 0x3c5 THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_line 0x00005ad7 0x3ff THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_line 0x00005ed6 0x223 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_line 0x000060f9 0x364 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_line 0x0000645d 0x101 THUMB Flash Debug/../../obj/efm32_opamp.o - .debug_line 0x0000655e 0x424 THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_line 0x00006982 0x2b8 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_line 0x00006c3a 0x321 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_line 0x00006f5b 0x37e THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_line 0x000072d9 0x2e4 THUMB Flash Debug/../../obj/efm32_system.o - .debug_line 0x000075bd 0x36d THUMB Flash Debug/../../obj/efm32_timer.o - .debug_line 0x0000792a 0x49d THUMB Flash Debug/../../obj/efm32_usart.o - .debug_line 0x00007dc7 0x31f THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_line 0x000080e6 0x340 THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_line 0x00008426 0x1d THUMB Flash Debug/../../obj/hooks.o - .debug_line 0x00008443 0x32c THUMB Flash Debug/../../obj/main.o +.debug_line 0x00000000 0x33e9 + .debug_line 0x00000000 0x146 THUMB Flash Debug/../../obj/cstart.o + .debug_line 0x00000146 0x101 THUMB Flash Debug/../../obj/vectors.o + .debug_line 0x00000247 0xd3 THUMB Flash Debug/../../obj/cpu_comp.o + .debug_line 0x0000031a 0x127 THUMB Flash Debug/../../obj/cpu.o + .debug_line 0x00000441 0x425 THUMB Flash Debug/../../obj/flash.o + .debug_line 0x00000866 0x165 THUMB Flash Debug/../../obj/nvm.o + .debug_line 0x000009cb 0x134 THUMB Flash Debug/../../obj/timer.o + .debug_line 0x00000aff 0x3b2 THUMB Flash Debug/../../obj/uart.o + .debug_line 0x00000eb1 0xee THUMB Flash Debug/../../obj/assert.o + .debug_line 0x00000f9f 0x111 THUMB Flash Debug/../../obj/backdoor.o + .debug_line 0x000010b0 0xc2 THUMB Flash Debug/../../obj/boot.o + .debug_line 0x00001172 0x186 THUMB Flash Debug/../../obj/com.o + .debug_line 0x000012f8 0xa5 THUMB Flash Debug/../../obj/cop.o + .debug_line 0x0000139d 0x20c THUMB Flash Debug/../../obj/xcp.o + .debug_line 0x000015a9 0x2f4 THUMB Flash Debug/../../obj/system_efm32.o + .debug_line 0x0000189d 0x6b6 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_line 0x00001f53 0x3d1 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_line 0x00002324 0x3cc THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_line 0x000026f0 0x3e8 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_line 0x00002ad8 0x337 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_line 0x00002e0f 0x2cc THUMB Flash Debug/../../obj/efm32_system.o + .debug_line 0x000030db 0x30e THUMB Flash Debug/../../obj/main.o -.debug_info 0x00000000 0xe3c9 +.debug_info 0x00000000 0x5d08 .debug_info 0x00000000 0x116 THUMB Flash Debug/../../obj/cstart.o - .debug_info 0x00000116 0xf1 THUMB Flash Debug/../../obj/vectors.o - .debug_info 0x00000207 0x86 THUMB Flash Debug/../../obj/cpu_comp.o - .debug_info 0x0000028d 0x14f THUMB Flash Debug/../../obj/cpu.o - .debug_info 0x000003dc 0x744 THUMB Flash Debug/../../obj/flash.o - .debug_info 0x00000b20 0x177 THUMB Flash Debug/../../obj/nvm.o - .debug_info 0x00000c97 0x12c THUMB Flash Debug/../../obj/timer.o - .debug_info 0x00000dc3 0x7c2 THUMB Flash Debug/../../obj/uart.o - .debug_info 0x00001585 0xe4 THUMB Flash Debug/../../obj/assert.o - .debug_info 0x00001669 0xc0 THUMB Flash Debug/../../obj/backdoor.o - .debug_info 0x00001729 0x88 THUMB Flash Debug/../../obj/boot.o - .debug_info 0x000017b1 0x1d2 THUMB Flash Debug/../../obj/com.o - .debug_info 0x00001983 0x86 THUMB Flash Debug/../../obj/cop.o - .debug_info 0x00001a09 0x5e2 THUMB Flash Debug/../../obj/xcp.o - .debug_info 0x00001feb 0x5a THUMB Flash Debug/../../obj/core_cm3.o - .debug_info 0x00002045 0x429 THUMB Flash Debug/../../obj/system_efm32.o - .debug_info 0x0000246e 0x5f6 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_info 0x00002a64 0xa59 THUMB Flash Debug/../../obj/efm32_adc.o - .debug_info 0x000034bd 0x152c THUMB Flash Debug/../../obj/efm32_aes.o - .debug_info 0x000049e9 0x11a2 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_info 0x00005b8b 0x809 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_info 0x00006394 0x410 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_info 0x000067a4 0x10ad THUMB Flash Debug/../../obj/efm32_dma.o - .debug_info 0x00007851 0x590 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_info 0x00007de1 0x681 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_info 0x00008462 0x7cc THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_info 0x00008c2e 0x82a THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_info 0x00009458 0xb0 THUMB Flash Debug/../../obj/efm32_int.o - .debug_info 0x00009508 0xab1 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_info 0x00009fb9 0x86 THUMB Flash Debug/../../obj/efm32_lesense.o - .debug_info 0x0000a03f 0x59e THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_info 0x0000a5dd 0x78c THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_info 0x0000ad69 0x33f THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_info 0x0000b0a8 0x2b6 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_info 0x0000b35e 0x86 THUMB Flash Debug/../../obj/efm32_opamp.o - .debug_info 0x0000b3e4 0x68b THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_info 0x0000ba6f 0x1bf THUMB Flash Debug/../../obj/efm32_prs.o - .debug_info 0x0000bc2e 0x2ea THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_info 0x0000bf18 0x3a8 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_info 0x0000c2c0 0x241 THUMB Flash Debug/../../obj/efm32_system.o - .debug_info 0x0000c501 0x703 THUMB Flash Debug/../../obj/efm32_timer.o - .debug_info 0x0000cc04 0xafd THUMB Flash Debug/../../obj/efm32_usart.o - .debug_info 0x0000d701 0x2fc THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_info 0x0000d9fd 0x39a THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_info 0x0000dd97 0x5a THUMB Flash Debug/../../obj/hooks.o - .debug_info 0x0000ddf1 0x5d8 THUMB Flash Debug/../../obj/main.o + .debug_info 0x00000116 0xfe THUMB Flash Debug/../../obj/vectors.o + .debug_info 0x00000214 0x7c THUMB Flash Debug/../../obj/cpu_comp.o + .debug_info 0x00000290 0x157 THUMB Flash Debug/../../obj/cpu.o + .debug_info 0x000003e7 0x8bf THUMB Flash Debug/../../obj/flash.o + .debug_info 0x00000ca6 0x1ce THUMB Flash Debug/../../obj/nvm.o + .debug_info 0x00000e74 0x12b THUMB Flash Debug/../../obj/timer.o + .debug_info 0x00000f9f 0x928 THUMB Flash Debug/../../obj/uart.o + .debug_info 0x000018c7 0xaa THUMB Flash Debug/../../obj/assert.o + .debug_info 0x00001971 0xe3 THUMB Flash Debug/../../obj/backdoor.o + .debug_info 0x00001a54 0xb4 THUMB Flash Debug/../../obj/boot.o + .debug_info 0x00001b08 0x1ef THUMB Flash Debug/../../obj/com.o + .debug_info 0x00001cf7 0x71 THUMB Flash Debug/../../obj/cop.o + .debug_info 0x00001d68 0x6cb THUMB Flash Debug/../../obj/xcp.o + .debug_info 0x00002433 0x3ec THUMB Flash Debug/../../obj/system_efm32.o + .debug_info 0x0000281f 0x12b3 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_info 0x00003ad2 0x622 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_info 0x000040f4 0x75e THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_info 0x00004852 0x8a2 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_info 0x000050f4 0x27a THUMB Flash Debug/../../obj/efm32_msc.o + .debug_info 0x0000536e 0x20d THUMB Flash Debug/../../obj/efm32_system.o + .debug_info 0x0000557b 0x78d THUMB Flash Debug/../../obj/main.o -.debug_abbrev 0x00000000 0x415b +.debug_abbrev 0x00000000 0x1f47 .debug_abbrev 0x00000000 0x14 THUMB Flash Debug/../../obj/cstart.o - .debug_abbrev 0x00000014 0xbe THUMB Flash Debug/../../obj/vectors.o - .debug_abbrev 0x000000d2 0x3f THUMB Flash Debug/../../obj/cpu_comp.o - .debug_abbrev 0x00000111 0xaf THUMB Flash Debug/../../obj/cpu.o - .debug_abbrev 0x000001c0 0x27b THUMB Flash Debug/../../obj/flash.o - .debug_abbrev 0x0000043b 0xa3 THUMB Flash Debug/../../obj/nvm.o - .debug_abbrev 0x000004de 0xe8 THUMB Flash Debug/../../obj/timer.o - .debug_abbrev 0x000005c6 0x1ef THUMB Flash Debug/../../obj/uart.o - .debug_abbrev 0x000007b5 0x7c THUMB Flash Debug/../../obj/assert.o - .debug_abbrev 0x00000831 0x5b THUMB Flash Debug/../../obj/backdoor.o - .debug_abbrev 0x0000088c 0x3f THUMB Flash Debug/../../obj/boot.o - .debug_abbrev 0x000008cb 0x106 THUMB Flash Debug/../../obj/com.o - .debug_abbrev 0x000009d1 0x3f THUMB Flash Debug/../../obj/cop.o - .debug_abbrev 0x00000a10 0x1d1 THUMB Flash Debug/../../obj/xcp.o - .debug_abbrev 0x00000be1 0x1d THUMB Flash Debug/../../obj/core_cm3.o - .debug_abbrev 0x00000bfe 0x1a5 THUMB Flash Debug/../../obj/system_efm32.o - .debug_abbrev 0x00000da3 0x1c2 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_abbrev 0x00000f65 0x1fb THUMB Flash Debug/../../obj/efm32_adc.o - .debug_abbrev 0x00001160 0x29e THUMB Flash Debug/../../obj/efm32_aes.o - .debug_abbrev 0x000013fe 0x1 THUMB Flash Debug/../../obj/efm32_assert.o - .debug_abbrev 0x000013ff 0x38a THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_abbrev 0x00001789 0x21c THUMB Flash Debug/../../obj/efm32_dac.o - .debug_abbrev 0x000019a5 0x17f THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_abbrev 0x00001b24 0x314 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_abbrev 0x00001e38 0x204 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_abbrev 0x0000203c 0x1d0 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_abbrev 0x0000220c 0x235 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_abbrev 0x00002441 0x2a8 THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_abbrev 0x000026e9 0x64 THUMB Flash Debug/../../obj/efm32_int.o - .debug_abbrev 0x0000274d 0x28f THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_abbrev 0x000029dc 0x42 THUMB Flash Debug/../../obj/efm32_lesense.o - .debug_abbrev 0x00002a1e 0x223 THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_abbrev 0x00002c41 0x21c THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_abbrev 0x00002e5d 0xf3 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_abbrev 0x00002f50 0x112 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_abbrev 0x00003062 0x42 THUMB Flash Debug/../../obj/efm32_opamp.o - .debug_abbrev 0x000030a4 0x304 THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_abbrev 0x000033a8 0xe8 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_abbrev 0x00003490 0x1ab THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_abbrev 0x0000363b 0x214 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_abbrev 0x0000384f 0x110 THUMB Flash Debug/../../obj/efm32_system.o - .debug_abbrev 0x0000395f 0x16b THUMB Flash Debug/../../obj/efm32_timer.o - .debug_abbrev 0x00003aca 0x1d1 THUMB Flash Debug/../../obj/efm32_usart.o - .debug_abbrev 0x00003c9b 0x16b THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_abbrev 0x00003e06 0x1b4 THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_abbrev 0x00003fba 0x28 THUMB Flash Debug/../../obj/hooks.o - .debug_abbrev 0x00003fe2 0x179 THUMB Flash Debug/../../obj/main.o + .debug_abbrev 0x00000014 0xdc THUMB Flash Debug/../../obj/vectors.o + .debug_abbrev 0x000000f0 0x43 THUMB Flash Debug/../../obj/cpu_comp.o + .debug_abbrev 0x00000133 0xf0 THUMB Flash Debug/../../obj/cpu.o + .debug_abbrev 0x00000223 0x2f5 THUMB Flash Debug/../../obj/flash.o + .debug_abbrev 0x00000518 0xdc THUMB Flash Debug/../../obj/nvm.o + .debug_abbrev 0x000005f4 0xeb THUMB Flash Debug/../../obj/timer.o + .debug_abbrev 0x000006df 0x242 THUMB Flash Debug/../../obj/uart.o + .debug_abbrev 0x00000921 0x6d THUMB Flash Debug/../../obj/assert.o + .debug_abbrev 0x0000098e 0xa8 THUMB Flash Debug/../../obj/backdoor.o + .debug_abbrev 0x00000a36 0x72 THUMB Flash Debug/../../obj/boot.o + .debug_abbrev 0x00000aa8 0x147 THUMB Flash Debug/../../obj/com.o + .debug_abbrev 0x00000bef 0x4c THUMB Flash Debug/../../obj/cop.o + .debug_abbrev 0x00000c3b 0x23f THUMB Flash Debug/../../obj/xcp.o + .debug_abbrev 0x00000e7a 0x1e9 THUMB Flash Debug/../../obj/system_efm32.o + .debug_abbrev 0x00001063 0x3cd THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_abbrev 0x00001430 0x221 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_abbrev 0x00001651 0x244 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_abbrev 0x00001895 0x295 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_abbrev 0x00001b2a 0x133 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_abbrev 0x00001c5d 0x117 THUMB Flash Debug/../../obj/efm32_system.o + .debug_abbrev 0x00001d74 0x1d3 THUMB Flash Debug/../../obj/main.o -.debug_aranges 0x00000000 0xbe8 +.debug_aranges 0x00000000 0x5e0 .debug_aranges 0x00000000 0x20 THUMB Flash Debug/../../obj/cstart.o .debug_aranges @@ -1340,293 +1569,237 @@ OUTPUT(THUMB Flash Debug/../../bin/openbtl_olimex_efm32g880.elf elf32-littlearm) .debug_aranges 0x00000040 0x28 THUMB Flash Debug/../../obj/cpu_comp.o .debug_aranges - 0x00000068 0x38 THUMB Flash Debug/../../obj/cpu.o + 0x00000068 0x30 THUMB Flash Debug/../../obj/cpu.o .debug_aranges - 0x000000a0 0x70 THUMB Flash Debug/../../obj/flash.o + 0x00000098 0x78 THUMB Flash Debug/../../obj/flash.o .debug_aranges - 0x00000110 0x48 THUMB Flash Debug/../../obj/nvm.o + 0x00000110 0x50 THUMB Flash Debug/../../obj/nvm.o .debug_aranges - 0x00000158 0x38 THUMB Flash Debug/../../obj/timer.o + 0x00000160 0x38 THUMB Flash Debug/../../obj/timer.o .debug_aranges - 0x00000190 0x30 THUMB Flash Debug/../../obj/uart.o + 0x00000198 0x30 THUMB Flash Debug/../../obj/uart.o .debug_aranges - 0x000001c0 0x20 THUMB Flash Debug/../../obj/assert.o + 0x000001c8 0x20 THUMB Flash Debug/../../obj/assert.o .debug_aranges - 0x000001e0 0x28 THUMB Flash Debug/../../obj/backdoor.o + 0x000001e8 0x28 THUMB Flash Debug/../../obj/backdoor.o .debug_aranges - 0x00000208 0x28 THUMB Flash Debug/../../obj/boot.o + 0x00000210 0x28 THUMB Flash Debug/../../obj/boot.o .debug_aranges - 0x00000230 0x50 THUMB Flash Debug/../../obj/com.o + 0x00000238 0x48 THUMB Flash Debug/../../obj/com.o .debug_aranges - 0x00000280 0x28 THUMB Flash Debug/../../obj/cop.o + 0x00000280 0x20 THUMB Flash Debug/../../obj/cop.o .debug_aranges - 0x000002a8 0x40 THUMB Flash Debug/../../obj/xcp.o + 0x000002a0 0x40 THUMB Flash Debug/../../obj/xcp.o .debug_aranges - 0x000002e8 0x60 THUMB Flash Debug/../../obj/system_efm32.o + 0x000002e0 0x60 THUMB Flash Debug/../../obj/system_efm32.o .debug_aranges - 0x00000348 0x58 THUMB Flash Debug/../../obj/efm32_acmp.o + 0x00000340 0xd0 THUMB Flash Debug/../../obj/efm32_cmu.o .debug_aranges - 0x000003a0 0x48 THUMB Flash Debug/../../obj/efm32_adc.o + 0x00000410 0x48 THUMB Flash Debug/../../obj/efm32_emu.o .debug_aranges - 0x000003e8 0x80 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000458 0x90 THUMB Flash Debug/../../obj/efm32_gpio.o .debug_aranges - 0x00000468 0xd0 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x000004e8 0x78 THUMB Flash Debug/../../obj/efm32_leuart.o .debug_aranges - 0x00000538 0x40 THUMB Flash Debug/../../obj/efm32_dac.o + 0x00000560 0x38 THUMB Flash Debug/../../obj/efm32_msc.o .debug_aranges - 0x00000578 0x20 THUMB Flash Debug/../../obj/efm32_dbg.o + 0x00000598 0x28 THUMB Flash Debug/../../obj/efm32_system.o .debug_aranges - 0x00000598 0x80 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_aranges - 0x00000618 0x68 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_aranges - 0x00000680 0x48 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_aranges - 0x000006c8 0x90 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_aranges - 0x00000758 0x50 THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_aranges - 0x000007a8 0x70 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_aranges - 0x00000818 0x60 THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_aranges - 0x00000878 0x78 THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_aranges - 0x000008f0 0x20 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_aranges - 0x00000910 0x38 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_aranges - 0x00000948 0x60 THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_aranges - 0x000009a8 0x20 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_aranges - 0x000009c8 0x30 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_aranges - 0x000009f8 0x58 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_aranges - 0x00000a50 0x28 THUMB Flash Debug/../../obj/efm32_system.o - .debug_aranges - 0x00000a78 0x48 THUMB Flash Debug/../../obj/efm32_timer.o - .debug_aranges - 0x00000ac0 0xa0 THUMB Flash Debug/../../obj/efm32_usart.o - .debug_aranges - 0x00000b60 0x30 THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_aranges - 0x00000b90 0x38 THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_aranges - 0x00000bc8 0x20 THUMB Flash Debug/../../obj/main.o + 0x000005c0 0x20 THUMB Flash Debug/../../obj/main.o -.debug_frame 0x00000000 0x1ad8 - .debug_frame 0x00000000 0x2c THUMB Flash Debug/../../obj/vectors.o - .debug_frame 0x0000002c 0x30 THUMB Flash Debug/../../obj/cpu_comp.o - .debug_frame 0x0000005c 0x88 THUMB Flash Debug/../../obj/cpu.o - .debug_frame 0x000000e4 0x16c THUMB Flash Debug/../../obj/flash.o - .debug_frame 0x00000250 0xb8 THUMB Flash Debug/../../obj/nvm.o - .debug_frame 0x00000308 0x5c THUMB Flash Debug/../../obj/timer.o - .debug_frame 0x00000364 0x80 THUMB Flash Debug/../../obj/uart.o - .debug_frame 0x000003e4 0x2c THUMB Flash Debug/../../obj/assert.o - .debug_frame 0x00000410 0x48 THUMB Flash Debug/../../obj/backdoor.o - .debug_frame 0x00000458 0x48 THUMB Flash Debug/../../obj/boot.o - .debug_frame 0x000004a0 0xb0 THUMB Flash Debug/../../obj/com.o - .debug_frame 0x00000550 0x30 THUMB Flash Debug/../../obj/cop.o - .debug_frame 0x00000580 0x74 THUMB Flash Debug/../../obj/xcp.o - .debug_frame 0x000005f4 0xc4 THUMB Flash Debug/../../obj/system_efm32.o - .debug_frame 0x000006b8 0xb4 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_frame 0x0000076c 0xa8 THUMB Flash Debug/../../obj/efm32_adc.o - .debug_frame 0x00000814 0x204 THUMB Flash Debug/../../obj/efm32_aes.o - .debug_frame 0x00000a18 0x1e8 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_frame 0x00000c00 0x78 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_frame 0x00000c78 0x30 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_frame 0x00000ca8 0x1b0 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_frame 0x00000e58 0x10c THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_frame 0x00000f64 0x94 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_frame 0x00000ff8 0x128 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_frame 0x00001120 0xcc THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_frame 0x000011ec 0xcc THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_frame 0x000012b8 0xf4 THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_frame 0x000013ac 0x13c THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_frame 0x000014e8 0x20 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_frame 0x00001508 0x70 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_frame 0x00001578 0x114 THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_frame 0x0000168c 0x2c THUMB Flash Debug/../../obj/efm32_prs.o - .debug_frame 0x000016b8 0x40 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_frame 0x000016f8 0xc4 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_frame 0x000017bc 0x30 THUMB Flash Debug/../../obj/efm32_system.o - .debug_frame 0x000017ec 0x88 THUMB Flash Debug/../../obj/efm32_timer.o - .debug_frame 0x00001874 0x18c THUMB Flash Debug/../../obj/efm32_usart.o - .debug_frame 0x00001a00 0x50 THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_frame 0x00001a50 0x5c THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_frame 0x00001aac 0x2c THUMB Flash Debug/../../obj/main.o +.debug_frame 0x00000000 0xd00 + .debug_frame 0x00000000 0x20 THUMB Flash Debug/../../obj/vectors.o + .debug_frame 0x00000020 0x30 THUMB Flash Debug/../../obj/cpu_comp.o + .debug_frame 0x00000050 0x70 THUMB Flash Debug/../../obj/cpu.o + .debug_frame 0x000000c0 0x19c THUMB Flash Debug/../../obj/flash.o + .debug_frame 0x0000025c 0x9c THUMB Flash Debug/../../obj/nvm.o + .debug_frame 0x000002f8 0x5c THUMB Flash Debug/../../obj/timer.o + .debug_frame 0x00000354 0x84 THUMB Flash Debug/../../obj/uart.o + .debug_frame 0x000003d8 0x2c THUMB Flash Debug/../../obj/assert.o + .debug_frame 0x00000404 0x60 THUMB Flash Debug/../../obj/backdoor.o + .debug_frame 0x00000464 0x58 THUMB Flash Debug/../../obj/boot.o + .debug_frame 0x000004bc 0xbc THUMB Flash Debug/../../obj/com.o + .debug_frame 0x00000578 0x30 THUMB Flash Debug/../../obj/cop.o + .debug_frame 0x000005a8 0x88 THUMB Flash Debug/../../obj/xcp.o + .debug_frame 0x00000630 0xac THUMB Flash Debug/../../obj/system_efm32.o + .debug_frame 0x000006dc 0x254 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_frame 0x00000930 0xac THUMB Flash Debug/../../obj/efm32_emu.o + .debug_frame 0x000009dc 0x128 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_frame 0x00000b04 0x130 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_frame 0x00000c34 0x70 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_frame 0x00000ca4 0x30 THUMB Flash Debug/../../obj/efm32_system.o + .debug_frame 0x00000cd4 0x2c THUMB Flash Debug/../../obj/main.o -.debug_loc 0x00000000 0x65be - .debug_loc 0x00000000 0x20 THUMB Flash Debug/../../obj/vectors.o - .debug_loc 0x00000020 0x109 THUMB Flash Debug/../../obj/cpu.o - .debug_loc 0x00000129 0x6c3 THUMB Flash Debug/../../obj/flash.o - .debug_loc 0x000007ec 0x11f THUMB Flash Debug/../../obj/nvm.o - .debug_loc 0x0000090b 0x20 THUMB Flash Debug/../../obj/timer.o - .debug_loc 0x0000092b 0x276 THUMB Flash Debug/../../obj/uart.o - .debug_loc 0x00000ba1 0x46 THUMB Flash Debug/../../obj/assert.o - .debug_loc 0x00000be7 0x40 THUMB Flash Debug/../../obj/backdoor.o - .debug_loc 0x00000c27 0x40 THUMB Flash Debug/../../obj/boot.o - .debug_loc 0x00000c67 0xa6 THUMB Flash Debug/../../obj/com.o - .debug_loc 0x00000d0d 0x1ea THUMB Flash Debug/../../obj/xcp.o - .debug_loc 0x00000ef7 0xf1 THUMB Flash Debug/../../obj/system_efm32.o - .debug_loc 0x00000fe8 0x16a THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_loc 0x00001152 0x220 THUMB Flash Debug/../../obj/efm32_adc.o - .debug_loc 0x00001372 0x1479 THUMB Flash Debug/../../obj/efm32_aes.o - .debug_loc 0x000027eb 0xe7d THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_loc 0x00003668 0x1eb THUMB Flash Debug/../../obj/efm32_dac.o - .debug_loc 0x00003853 0x96 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_loc 0x000038e9 0x70d THUMB Flash Debug/../../obj/efm32_dma.o - .debug_loc 0x00003ff6 0x37d THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_loc 0x00004373 0xf7 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_loc 0x0000446a 0x2a6 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_loc 0x00004710 0x39b THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_loc 0x00004aab 0x5ba THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_loc 0x00005065 0x34e THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_loc 0x000053b3 0x338 THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_loc 0x000056eb 0x11f THUMB Flash Debug/../../obj/efm32_msc.o - .debug_loc 0x0000580a 0x386 THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_loc 0x00005b90 0x66 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_loc 0x00005bf6 0x40 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_loc 0x00005c36 0x165 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_loc 0x00005d9b 0x7d THUMB Flash Debug/../../obj/efm32_system.o - .debug_loc 0x00005e18 0xbe THUMB Flash Debug/../../obj/efm32_timer.o - .debug_loc 0x00005ed6 0x492 THUMB Flash Debug/../../obj/efm32_usart.o - .debug_loc 0x00006368 0x51 THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_loc 0x000063b9 0xcc THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_loc 0x00006485 0x139 THUMB Flash Debug/../../obj/main.o +.debug_pubnames + 0x00000000 0x2376 + .debug_pubnames + 0x00000000 0x2d THUMB Flash Debug/../../obj/vectors.o + .debug_pubnames + 0x0000002d 0x35 THUMB Flash Debug/../../obj/cpu_comp.o + .debug_pubnames + 0x00000062 0x45 THUMB Flash Debug/../../obj/cpu.o + .debug_pubnames + 0x000000a7 0x205 THUMB Flash Debug/../../obj/flash.o + .debug_pubnames + 0x000002ac 0x86 THUMB Flash Debug/../../obj/nvm.o + .debug_pubnames + 0x00000332 0x64 THUMB Flash Debug/../../obj/timer.o + .debug_pubnames + 0x00000396 0x69e THUMB Flash Debug/../../obj/uart.o + .debug_pubnames + 0x00000a34 0x24 THUMB Flash Debug/../../obj/assert.o + .debug_pubnames + 0x00000a58 0x5b THUMB Flash Debug/../../obj/backdoor.o + .debug_pubnames + 0x00000ab3 0x2c THUMB Flash Debug/../../obj/boot.o + .debug_pubnames + 0x00000adf 0xe6 THUMB Flash Debug/../../obj/com.o + .debug_pubnames + 0x00000bc5 0x21 THUMB Flash Debug/../../obj/cop.o + .debug_pubnames + 0x00000be6 0x205 THUMB Flash Debug/../../obj/xcp.o + .debug_pubnames + 0x00000deb 0x116 THUMB Flash Debug/../../obj/system_efm32.o + .debug_pubnames + 0x00000f01 0x6b8 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_pubnames + 0x000015b9 0xce THUMB Flash Debug/../../obj/efm32_emu.o + .debug_pubnames + 0x00001687 0x304 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_pubnames + 0x0000198b 0x37c THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_pubnames + 0x00001d07 0xbb THUMB Flash Debug/../../obj/efm32_msc.o + .debug_pubnames + 0x00001dc2 0x4c THUMB Flash Debug/../../obj/efm32_system.o + .debug_pubnames + 0x00001e0e 0x568 THUMB Flash Debug/../../obj/main.o -.debug_ranges 0x00000000 0x1060 +.debug_pubtypes + 0x00000000 0x144a + .debug_pubtypes + 0x00000000 0xba THUMB Flash Debug/../../obj/vectors.o + .debug_pubtypes + 0x000000ba 0x91 THUMB Flash Debug/../../obj/cpu_comp.o + .debug_pubtypes + 0x0000014b 0xca THUMB Flash Debug/../../obj/cpu.o + .debug_pubtypes + 0x00000215 0x14f THUMB Flash Debug/../../obj/flash.o + .debug_pubtypes + 0x00000364 0xc8 THUMB Flash Debug/../../obj/nvm.o + .debug_pubtypes + 0x0000042c 0xb1 THUMB Flash Debug/../../obj/timer.o + .debug_pubtypes + 0x000004dd 0x1b4 THUMB Flash Debug/../../obj/uart.o + .debug_pubtypes + 0x00000691 0xad THUMB Flash Debug/../../obj/assert.o + .debug_pubtypes + 0x0000073e 0xad THUMB Flash Debug/../../obj/backdoor.o + .debug_pubtypes + 0x000007eb 0x91 THUMB Flash Debug/../../obj/boot.o + .debug_pubtypes + 0x0000087c 0xdc THUMB Flash Debug/../../obj/com.o + .debug_pubtypes + 0x00000958 0x91 THUMB Flash Debug/../../obj/cop.o + .debug_pubtypes + 0x000009e9 0xff THUMB Flash Debug/../../obj/xcp.o + .debug_pubtypes + 0x00000ae8 0xd5 THUMB Flash Debug/../../obj/system_efm32.o + .debug_pubtypes + 0x00000bbd 0x181 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_pubtypes + 0x00000d3e 0x115 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_pubtypes + 0x00000e53 0x13a THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_pubtypes + 0x00000f8d 0x195 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_pubtypes + 0x00001122 0xec THUMB Flash Debug/../../obj/efm32_msc.o + .debug_pubtypes + 0x0000120e 0x11c THUMB Flash Debug/../../obj/efm32_system.o + .debug_pubtypes + 0x0000132a 0x120 THUMB Flash Debug/../../obj/main.o + +.debug_ranges 0x00000000 0x6d8 .debug_ranges 0x00000000 0x10 THUMB Flash Debug/../../obj/vectors.o .debug_ranges 0x00000010 0x18 THUMB Flash Debug/../../obj/cpu_comp.o - .debug_ranges 0x00000028 0x28 THUMB Flash Debug/../../obj/cpu.o - .debug_ranges 0x00000050 0x158 THUMB Flash Debug/../../obj/flash.o - .debug_ranges 0x000001a8 0x38 THUMB Flash Debug/../../obj/nvm.o - .debug_ranges 0x000001e0 0x40 THUMB Flash Debug/../../obj/timer.o - .debug_ranges 0x00000220 0xc0 THUMB Flash Debug/../../obj/uart.o - .debug_ranges 0x000002e0 0x10 THUMB Flash Debug/../../obj/assert.o - .debug_ranges 0x000002f0 0x18 THUMB Flash Debug/../../obj/backdoor.o - .debug_ranges 0x00000308 0x18 THUMB Flash Debug/../../obj/boot.o - .debug_ranges 0x00000320 0x40 THUMB Flash Debug/../../obj/com.o - .debug_ranges 0x00000360 0x18 THUMB Flash Debug/../../obj/cop.o - .debug_ranges 0x00000378 0x48 THUMB Flash Debug/../../obj/xcp.o - .debug_ranges 0x000003c0 0x50 THUMB Flash Debug/../../obj/system_efm32.o - .debug_ranges 0x00000410 0x48 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_ranges 0x00000458 0x38 THUMB Flash Debug/../../obj/efm32_adc.o - .debug_ranges 0x00000490 0x70 THUMB Flash Debug/../../obj/efm32_aes.o - .debug_ranges 0x00000500 0x420 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_ranges 0x00000920 0x30 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_ranges 0x00000950 0x10 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_ranges 0x00000960 0x88 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_ranges 0x000009e8 0x58 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_ranges 0x00000a40 0x50 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_ranges 0x00000a90 0x80 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_ranges 0x00000b10 0xb8 THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_ranges 0x00000bc8 0x78 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_ranges 0x00000c40 0x50 THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_ranges 0x00000c90 0x68 THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_ranges 0x00000cf8 0x10 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_ranges 0x00000d08 0x28 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_ranges 0x00000d30 0xd8 THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_ranges 0x00000e08 0x10 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_ranges 0x00000e18 0xb0 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_ranges 0x00000ec8 0x48 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_ranges 0x00000f10 0x18 THUMB Flash Debug/../../obj/efm32_system.o - .debug_ranges 0x00000f28 0x38 THUMB Flash Debug/../../obj/efm32_timer.o - .debug_ranges 0x00000f60 0x90 THUMB Flash Debug/../../obj/efm32_usart.o - .debug_ranges 0x00000ff0 0x20 THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_ranges 0x00001010 0x28 THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_ranges 0x00001038 0x28 THUMB Flash Debug/../../obj/main.o + .debug_ranges 0x00000028 0x20 THUMB Flash Debug/../../obj/cpu.o + .debug_ranges 0x00000048 0xc8 THUMB Flash Debug/../../obj/flash.o + .debug_ranges 0x00000110 0x40 THUMB Flash Debug/../../obj/nvm.o + .debug_ranges 0x00000150 0x28 THUMB Flash Debug/../../obj/timer.o + .debug_ranges 0x00000178 0x60 THUMB Flash Debug/../../obj/uart.o + .debug_ranges 0x000001d8 0x10 THUMB Flash Debug/../../obj/assert.o + .debug_ranges 0x000001e8 0x18 THUMB Flash Debug/../../obj/backdoor.o + .debug_ranges 0x00000200 0x18 THUMB Flash Debug/../../obj/boot.o + .debug_ranges 0x00000218 0x38 THUMB Flash Debug/../../obj/com.o + .debug_ranges 0x00000250 0x10 THUMB Flash Debug/../../obj/cop.o + .debug_ranges 0x00000260 0x78 THUMB Flash Debug/../../obj/xcp.o + .debug_ranges 0x000002d8 0x68 THUMB Flash Debug/../../obj/system_efm32.o + .debug_ranges 0x00000340 0x1b0 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_ranges 0x000004f0 0x98 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_ranges 0x00000588 0x80 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_ranges 0x00000608 0x68 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_ranges 0x00000670 0x28 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_ranges 0x00000698 0x18 THUMB Flash Debug/../../obj/efm32_system.o + .debug_ranges 0x000006b0 0x28 THUMB Flash Debug/../../obj/main.o -.debug_str 0x00000000 0x66d5 - .debug_str 0x00000000 0x140 THUMB Flash Debug/../../obj/vectors.o - 0x170 (size before relaxing) - .debug_str 0x00000140 0xae THUMB Flash Debug/../../obj/cpu_comp.o - 0x152 (size before relaxing) - .debug_str 0x000001ee 0xed THUMB Flash Debug/../../obj/cpu.o - 0x19c (size before relaxing) - .debug_str 0x000002db 0x34a THUMB Flash Debug/../../obj/flash.o - 0x443 (size before relaxing) - .debug_str 0x00000625 0xd1 THUMB Flash Debug/../../obj/nvm.o - 0x1a6 (size before relaxing) - .debug_str 0x000006f6 0xd5 THUMB Flash Debug/../../obj/timer.o - 0x189 (size before relaxing) - .debug_str 0x000007cb 0x735 THUMB Flash Debug/../../obj/uart.o - 0x872 (size before relaxing) - .debug_str 0x00000f00 0xb8 THUMB Flash Debug/../../obj/assert.o - 0x171 (size before relaxing) - .debug_str 0x00000fb8 0xb4 THUMB Flash Debug/../../obj/backdoor.o - 0x16c (size before relaxing) - .debug_str 0x0000106c 0x89 THUMB Flash Debug/../../obj/boot.o - 0x12d (size before relaxing) - .debug_str 0x000010f5 0x148 THUMB Flash Debug/../../obj/com.o - 0x226 (size before relaxing) - .debug_str 0x0000123d 0x89 THUMB Flash Debug/../../obj/cop.o - 0x12d (size before relaxing) - .debug_str 0x000012c6 0x26e THUMB Flash Debug/../../obj/xcp.o - 0x34f (size before relaxing) - .debug_str 0x00001534 0x85 THUMB Flash Debug/../../obj/core_cm3.o - 0x145 (size before relaxing) - .debug_str 0x000015b9 0x24d THUMB Flash Debug/../../obj/system_efm32.o - 0x366 (size before relaxing) - .debug_str 0x00001806 0x46a THUMB Flash Debug/../../obj/efm32_acmp.o - 0x56b (size before relaxing) - .debug_str 0x00001c70 0x74c THUMB Flash Debug/../../obj/efm32_adc.o - 0xa5e (size before relaxing) - .debug_str 0x000023bc 0x1ba THUMB Flash Debug/../../obj/efm32_aes.o - 0x2e0 (size before relaxing) - .debug_str 0x00002576 0x447 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x995 (size before relaxing) - .debug_str 0x000029bd 0x30b THUMB Flash Debug/../../obj/efm32_dac.o - 0x702 (size before relaxing) - .debug_str 0x00002cc8 0x130 THUMB Flash Debug/../../obj/efm32_dbg.o - 0x445 (size before relaxing) - .debug_str 0x00002df8 0x7ef THUMB Flash Debug/../../obj/efm32_dma.o - 0xb70 (size before relaxing) - .debug_str 0x000035e7 0x353 THUMB Flash Debug/../../obj/efm32_ebi.o - 0x47d (size before relaxing) - .debug_str 0x0000393a 0x189 THUMB Flash Debug/../../obj/efm32_emu.o - 0x397 (size before relaxing) - .debug_str 0x00003ac3 0x20b THUMB Flash Debug/../../obj/efm32_gpio.o - 0x57b (size before relaxing) - .debug_str 0x00003cce 0x360 THUMB Flash Debug/../../obj/efm32_i2c.o - 0x6c6 (size before relaxing) - .debug_str 0x0000402e 0x89 THUMB Flash Debug/../../obj/efm32_int.o - 0x167 (size before relaxing) - .debug_str 0x000040b7 0x638 THUMB Flash Debug/../../obj/efm32_lcd.o - 0x774 (size before relaxing) - .debug_str 0x000046ef 0x81 THUMB Flash Debug/../../obj/efm32_lesense.o - 0x156 (size before relaxing) - .debug_str 0x00004770 0x295 THUMB Flash Debug/../../obj/efm32_letimer.o - 0x3d1 (size before relaxing) - .debug_str 0x00004a05 0x151 THUMB Flash Debug/../../obj/efm32_leuart.o - 0x649 (size before relaxing) - .debug_str 0x00004b56 0x3d6 THUMB Flash Debug/../../obj/efm32_mpu.o - 0x4d1 (size before relaxing) - .debug_str 0x00004f2c 0xf1 THUMB Flash Debug/../../obj/efm32_msc.o - 0x28a (size before relaxing) - .debug_str 0x0000501d 0x7f THUMB Flash Debug/../../obj/efm32_opamp.o - 0x154 (size before relaxing) - .debug_str 0x0000509c 0x19f THUMB Flash Debug/../../obj/efm32_pcnt.o - 0x2f8 (size before relaxing) - .debug_str 0x0000523b 0x106 THUMB Flash Debug/../../obj/efm32_prs.o - 0x207 (size before relaxing) - .debug_str 0x00005341 0xf2 THUMB Flash Debug/../../obj/efm32_rmu.o - 0x21e (size before relaxing) - .debug_str 0x00005433 0x101 THUMB Flash Debug/../../obj/efm32_rtc.o - 0x26a (size before relaxing) - .debug_str 0x00005534 0x14c THUMB Flash Debug/../../obj/efm32_system.o +.debug_str 0x00000000 0x2571 + .debug_str 0x00000000 0x229 THUMB Flash Debug/../../obj/vectors.o + 0x259 (size before relaxing) + .debug_str 0x00000229 0xae THUMB Flash Debug/../../obj/cpu_comp.o 0x232 (size before relaxing) - .debug_str 0x00005680 0x555 THUMB Flash Debug/../../obj/efm32_timer.o - 0x6f7 (size before relaxing) - .debug_str 0x00005bd5 0x5c5 THUMB Flash Debug/../../obj/efm32_usart.o - 0x968 (size before relaxing) - .debug_str 0x0000619a 0x221 THUMB Flash Debug/../../obj/efm32_vcmp.o - 0x33f (size before relaxing) - .debug_str 0x000063bb 0x234 THUMB Flash Debug/../../obj/efm32_wdog.o - 0x367 (size before relaxing) - .debug_str 0x000065ef 0x68 THUMB Flash Debug/../../obj/hooks.o - 0x10c (size before relaxing) - .debug_str 0x00006657 0x7e THUMB Flash Debug/../../obj/main.o - 0x6e3 (size before relaxing) + .debug_str 0x000002d7 0xe4 THUMB Flash Debug/../../obj/cpu.o + 0x273 (size before relaxing) + .debug_str 0x000003bb 0x356 THUMB Flash Debug/../../obj/flash.o + 0x52f (size before relaxing) + .debug_str 0x00000711 0xdb THUMB Flash Debug/../../obj/nvm.o + 0x290 (size before relaxing) + .debug_str 0x000007ec 0xd5 THUMB Flash Debug/../../obj/timer.o + 0x269 (size before relaxing) + .debug_str 0x000008c1 0x73c THUMB Flash Debug/../../obj/uart.o + 0x952 (size before relaxing) + .debug_str 0x00000ffd 0x9a THUMB Flash Debug/../../obj/assert.o + 0x229 (size before relaxing) + .debug_str 0x00001097 0xb4 THUMB Flash Debug/../../obj/backdoor.o + 0x24c (size before relaxing) + .debug_str 0x0000114b 0x89 THUMB Flash Debug/../../obj/boot.o + 0x20d (size before relaxing) + .debug_str 0x000011d4 0x12a THUMB Flash Debug/../../obj/com.o + 0x2f1 (size before relaxing) + .debug_str 0x000012fe 0x81 THUMB Flash Debug/../../obj/cop.o + 0x205 (size before relaxing) + .debug_str 0x0000137f 0x26e THUMB Flash Debug/../../obj/xcp.o + 0x438 (size before relaxing) + .debug_str 0x000015ed 0x252 THUMB Flash Debug/../../obj/system_efm32.o + 0x441 (size before relaxing) + .debug_str 0x0000183f 0x4e8 THUMB Flash Debug/../../obj/efm32_cmu.o + 0xa63 (size before relaxing) + .debug_str 0x00001d27 0x192 THUMB Flash Debug/../../obj/efm32_emu.o + 0x472 (size before relaxing) + .debug_str 0x00001eb9 0x2ac THUMB Flash Debug/../../obj/efm32_gpio.o + 0x649 (size before relaxing) + .debug_str 0x00002165 0x151 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x724 (size before relaxing) + .debug_str 0x000022b6 0xf1 THUMB Flash Debug/../../obj/efm32_msc.o + 0x365 (size before relaxing) + .debug_str 0x000023a7 0x14c THUMB Flash Debug/../../obj/efm32_system.o + 0x30d (size before relaxing) + .debug_str 0x000024f3 0x7e THUMB Flash Debug/../../obj/main.o + 0x7c3 (size before relaxing) + +.debug_loc 0x00000000 0x2cdd + .debug_loc 0x00000000 0xce THUMB Flash Debug/../../obj/cpu.o + .debug_loc 0x000000ce 0x705 THUMB Flash Debug/../../obj/flash.o + .debug_loc 0x000007d3 0xa5 THUMB Flash Debug/../../obj/nvm.o + .debug_loc 0x00000878 0x25f THUMB Flash Debug/../../obj/uart.o + .debug_loc 0x00000ad7 0x42 THUMB Flash Debug/../../obj/assert.o + .debug_loc 0x00000b19 0x42 THUMB Flash Debug/../../obj/com.o + .debug_loc 0x00000b5b 0x37e THUMB Flash Debug/../../obj/xcp.o + .debug_loc 0x00000ed9 0xca THUMB Flash Debug/../../obj/system_efm32.o + .debug_loc 0x00000fa3 0xfb6 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_loc 0x00001f59 0xf8 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_loc 0x00002051 0x4f8 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_loc 0x00002549 0x457 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_loc 0x000029a0 0x140 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_loc 0x00002ae0 0x98 THUMB Flash Debug/../../obj/efm32_system.o + .debug_loc 0x00002b78 0x165 THUMB Flash Debug/../../obj/main.o diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.srec b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.srec index 59faa1c7..3685518e 100644 --- a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.srec +++ b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.srec @@ -1,426 +1,413 @@ S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF -S1130000BC070020B9000000D5010000D5010000A4 -S1130010D5010000D5010000D5010000D501000084 -S1130020D5010000D5010000D5010000D501000074 -S1130030D5010000D5010000D5010000D501000064 -S1130040D5010000D5010000D5010000D501000054 -S1130050D5010000D5010000D5010000D501000044 -S1130060D5010000D5010000D5010000D501000034 -S1130070D5010000D5010000D5010000D501000024 -S1130080D5010000D5010000D5010000D501000014 -S1130090D5010000D5010000D5010000D501000004 -S11300A0D5010000D5010000D5010000D5010000F4 -S10B00B0D5010000D501000098 -S11300B82C498D462C492D480A1A04D081F3098805 -S11300C8022282F314882A482A492B4A00F039F874 -S11300D82A482B492B4A00F034F82B482B492C4A40 -S11300E800F02FF82B482C492C4A00F02AF82C4809 -S11300F82C492D4A00F025F82C482D492D4A00F0AA -S113010820F82D482D49002200F026F82C482D49C6 -S1130118091A082903DB00220260043001601E4822 -S11301281E49884205D00268043003B4904703BCD2 -S1130138F7E700208646EC4600200021224A904733 -S1130148FEE7884207D0521A05D0037801300B70B5 -S11301580131013AF9D17047884202D00270013066 -S1130168FAE77047BC070020BC070020BC07002042 -S11301785C1A00003801002044010020D40100006A -S1130188D4010000341700002419000000000020E6 -S11301983801002034170000341700003417000019 -S11301A83417000034170000341700003417000017 -S11301B83417000023190000440100203A060020E7 -S10F01C83C060020BC0600205515000079 -S11301D400B503483821034B98475DF804FB00BF7E -S11301E4341700001109000072B6704762B67047F4 -S11301F400B5024B98475DF804FB00BFED01000015 -S113020410B50A4B984780B1094B9847094C0A4BDF -S11302149847A047094B20F0604020F07F00186005 -S1130224A047074B44689847A04710BD85060000C3 -S1130234410A000095060000DD06000008ED00E018 -S1130244F1010000F0B50C4695B20646054F06E0F0 -S113025414F8013B013D06F8013BB847ADB2002D4B -S1130264F6D1F0BDA30A0000F0B50C4D0C4F0646C0 -S11302740024B8472B689E4209D36A689B189E429F -S113028405D2064B0C2202FB0434207AF0BD01345F -S11302940C350F2CEDD1FF20F0BD00BFC8170000B2 -S11302A4A30A00002DE9F147114B0546006898475D -S11302B4FF281AD0DFF83C90DFF83C8000242F6834 -S11302C4261DAB5904EB070A0093C84750466946F8 -S11302D40422C04748B9E259009B9A4206D1B6F5B4 -S11302E4007F3446EBD1012000E00020BDE8F8870C -S11302F46D020000A30A000079000020114B30B500 -S1130304984204460D4606D0B1F5005F05D00E4B65 -S1130314984718B910E00D4C00E01C46EB050DD1CC -S11303242368AB420BD0204640F8045B29464FF4C3 -S11303340072074B984702E0044600E0002420467C -S113034430BD00BF44010020A9020000480300207E -S1130354490200002DE9F04F9846036821F4FE7722 -S1130364013304460D46164627F0030706D140F828 -S1130374047B39464FF40072184B98472368BB42F8 -S113038405D020463946164B9847044610B32368D3 -S1130394DFF850A0C3EB050B0BF1040B104DA34481 -S11303A440F2FF19D047231DC3EB0B034B4507D978 -S11303B4204607F50071A847044668B100F1040B10 -S11303C416F8013BB8F101080BF8013BEAD101200E -S11303D4BDE8F08FBDE8F08FBDE8F08F490200005E -S11303E401030000A30A0000054B00B59847054A21 -S11303F44FF0FF331360044A13605DF804FB00BF3D -S1130404F91400004803002044010020F0B50F4C07 -S113041405460E461746A047FF2813D0681E8019C8 -S1130424A047FF2810D025F4FE7323F00303B3F58B -S1130434005F074C0CBF0748074829463A46334631 -S1130444A047F0BD0020F0BD0020F0BD6D02000007 -S11304545903000044010020480300202DE9F0471B -S1130464424E0F460446B047013C0546E019B047E6 -S1130474FF2D074673D0FF2874D085426FD8002D12 -S11304846AD00F286BD83A4B1E78472E08D0492ED1 -S113049406D0482E14BF4FF400664FF4805601E092 -S11304A44FF40076DFF8CC80DFF8D0A0C1460024F6 -S11304B4D04799F80830AB4204D10C235C432D4B4C -S11304C41C5906E001340F2C09F10C09F0D14FF04A -S11304D4FF34DFF8A090DFF8A4A00025D04799F8F2 -S11304E40830BB4205D10C235D43224B53F80590DD -S11304F406E001350F2D09F10C09EFD14FF0FF3956 -S1130504DFF878A00025D04798F80830BB4205D11D -S1130514184B0C2202FB05356B6805E001350F2DE1 -S113052408F10C08EFD10023C4EB09099944B9FB81 -S1130534F6F91FFA89F90025DFF840800E4F06E02A -S1130544C0472046B847A41948B90135ADB24D4552 -S1130554F6D30120BDE8F0872846BDE8F0870020E3 -S1130564BDE8F0870020BDE8F08700BF6D020000FD -S1130574FE81E00FC817000001000020A30A000058 -S11305840F4B01B51A68013217D05A68996842F2C0 -S1130594B8008918DA6889181A6989185A6989188F -S11305A49A698918DA698B185B4201AA42F8043DF6 -S11305B404216A46034B984700E0012008BD00BFAC -S11305C4440100201104000042F2040318684FF4AB -S11305D400531B68C01842F208031B68C01842F297 -S11305E40C031B68C01842F210031B68C01842F2C3 -S11305F414031B68C01842F218031B68C01842F2A3 -S1130604B8031B68C018D0F1010038BF002070473C -S1130614094800B50368013302D0084B984748B130 -S113062407480368013302D0044B984710B1054BC3 -S1130634984701205DF804FB44010020A90200004E -S113064448030020191500004FF4005070470000BF -S113065400B5024B98475DF804FB00BFED030000AE -S113066400B5024B98475DF804FB00BF1104000079 -S113067400B5024B98475DF804FB00BF6104000019 -S113068400B5024B98475DF804FB00BFCD0500009C -S113069400B5024B98475DF804FB00BF4D0600000B -S11306A400B5034B984708B1024B98475DF804FB27 -S11306B48505000015060000054B002243F2AF61D6 -S11306C41A60596005219A601960024B1A607047D8 -S11306D410E000E04C050020014B00221A60704732 -S11306E410E000E0044B1B68DB0303D5034B1A68DA -S11306F401321A60704700BF10E000E04C0500208E -S113070400B5034B9847034B18685DF804FB00BF1E -S1130714E90600004C05002030B5204D86B06C4637 -S11307240FCD0FC495E8030084E803001C4C012199 -S11307341C48A0471C4D0220062104220123A8477B -S11307440122002302200721A8470121174D18483C -S1130754A04702211748184B984728460121174BF4 -S1130764984728460121A047154C002506A941F8BD -S1130774185D20466946134B9847204629464FF492 -S11307841652114B9847032363650423636320467D -S113079405210E4B984706B030BD00BF7C180000FD -S11307A41510000000C20200751300004015160065 -S11307B4002304000300120081120000E90E00006B -S11307C40044084081140000051400005114000082 -S11307D42DE9F043CDB2402D814603D91A486C214A -S11307E41A4B98471A4CA368D8060AD520462946BA -S11307F4184B9847184E00E0B047A368D906FBD5B8 -S113080403E011487021114B9847114E0024124FF4 -S1130814B04614E0B847B36819F80410DA0609D5E9 -S11308240B480C4B984700E0B847D8F80830DB066F -S1130834FAD503E004487921044B98470134A3B260 -S1130844AB42E7D3BDE8F08394180000110900001B -S113085400440840DD140000A30A00002DE9F0411F -S1130864224C0746267822489EB9C56A15F0040529 -S113087438D0204B9847204B1870002831D01F4B98 -S113088498471F4B354618601E4B1E700123237076 -S113089428E0C56A1B4E15F0040596F800800ED0B6 -S11308A4144B984714493378884488F80100013379 -S11308B40A78DBB29A42337009D0002512E00F4B58 -S11308C498470F4B1B686433984208D80AE00E4BD0 -S11308D438460131984700232370012502E025702E -S11308E400E005462846BDE8F08100BF5505002018 -S11308F400440840D11400005605002005070000F8 -S1130904500500205405002049020000034B00B5A3 -S11309141860034B034C1960A047FDE798050020B9 -S11309249C050020A30A000010B50A4B984701282F -S11309340FD0094C2378012B0BD1084B9847084B53 -S11309441B6803F5FA73984203D300232370054B01 -S1130954984710BD910A0000A00500200507000077 -S1130964A405002005020000054B012200B51A70FD -S1130974044B9847044B1860044B98475DF804FBF8 -S1130984A005002005070000A40500202D0900008F -S113099400B5074B9847074B9847074B9847074BB5 -S11309A49847074B9847074B98475DF804FB00BFEB -S11309B4F5010000A10A0000BD0600005506000070 -S11309C4F50900006D09000000B5054B9847054B77 -S11309D49847054B9847054B98475DF804FB00BFBF -S11309E4A30A0000E9060000150A00002D0900000E -S11309F400B5044B9847044B9847044B00221A60F3 -S1130A045DF804FBB90A00001D070000380100204A -S1130A1400B50648064B9847012805D1054B00222A -S1130A241A600248044B98475DF804FBA8050020AB -S1130A346108000038010020F50A00007047000036 -S1130A44054B00B51B6889B213B9C9B2034B984767 -S1130A54034B98475DF804FB38010020D5070000D8 -S1130A64E50A0000034B1868013802288CBF4020B3 -S1130A740020704738010020034B1868013802280D -S1130A848CBF4020002070473801002000B5024B81 -S1130A9498475DF804FB00BFD50A0000704770470F -S1130AA4034BFE22DA7002221871A3F84420704723 -S1130AB4E8050020054B00221A709A6483F8432049 -S1130AC4A3F844209A705A70704700BFE8050020C8 -S1130AD4024B1878003018BF01207047E805002045 -S1130AE4024B002283F84320704700BFE80500202E -S1130AF42DE9F04103780546FF2B824C13D10022E3 -S1130B040125E370102362706271237125707E4B9A -S1130B1498477E4EA071B047E071B047000A207236 -S1130B246572A57272E02678012E40F0E980F32BF9 -S1130B3446D012D8CF2B00F0C28005D8C92B78D068 -S1130B44CC2B40F0C580C1E0D12B00F0B280C0F0C2 -S1130B548380D22B40F0BC809CE0FA2B49D006D889 -S1130B64F52B0CD013D3F62B40F0B28023E0FD2BED -S1130B7450D0FE2B59D0FC2B40F0AA8048E0624BA5 -S1130B8498476A7890426DDD201DA16C08E05E4BA5 -S1130B9498476B78984265DD6968201DA1646A787A -S1130BA45B4B9847FF23E3706A78A36CD318A36460 -S1130BB46B7801337AE0FF23E3704368A36482E033 -S1130BC4FF23E3700023A06C69681A4603E01C5CED -S1130BD401331219D2B28B42F9D14A4BC3F807201C -S1130BE401221A7100225A719A710822A3F844202E -S1130BF471E0FF23E370474B0722A36400232371AE -S1130C046371A371E27123726372A37208234DE0CA -S1130C1400205EE0FF236278E37000232371A37154 -S1130C24E37123726271062340E00023237063702E -S1130C3447E0354FD4F84880B8476A1C411E364B08 -S1130C4440469847002841D0FF23E370A56CB84779 -S1130C54013D2D18A56436E02B4B98476B78013879 -S1130C64984201DC222034E0FF23E370A4F84460BA -S1130C74697821B9294B984700282CD126E0214CC6 -S1130C84AA1CA06C244B984700B36A78A36CD318AD -S1130C94A36420E00025FF23E37025711A4B6571DA -S1130CA49847E571A071257265720723A4F844304E -S1130CB411E0A06C69681A4B984710B906E0194B07 -S1130CC49847FF23E370A4F8446004E0312000E073 -S1130CD42020154B98470B4C94F84330012B02D138 -S1130CE41020114B9847B4F8441006480BB2002B5B -S1130CF406DD012380F8433089B203300B4B984757 -S1130D04BDE8F081E8050020690A00007D0A0000BE -S1130D14490200001819000065060000A506000039 -S1130D247506000005020000A50A0000450A00003B -S1130D341C4AD36A03F47053B3F5805F2DD0B3F522 -S1130D44005F03D0B3F5006F05D101E0164B00E05A -S1130D54164B18687047D36803F4E063B3F5007F57 -S1130D6413D004D8ABB1B3F5807F14D10FE0B3F53D -S1130D74806F15D0B3F5A06F03D0B3F5407F0AD1CB -S1130D8401E00B4870470B4870470B4870470B4809 -S1130D9470470B487047002070474FF40040704779 -S1130DA40848704700800C403C01002040010020AA -S1130DB4003FAB01809FD500C0D8A700C0CF6A0014 -S1130DC440420F00406F400100B5064B9847064B64 -S1130DD45B6803F00F0320FA03F0044B18605DF81A -S1130DE404FB00BF350D000000800C4034060020D5 -S1130DF470474FF400407047014B1868704700BFB8 -S1130E043C0100200A494B6803F00702032A0CD86A -S1130E14DFE802F00202070723F0070343F00103AB -S1130E2403E023F0070343F003034B60704700BF60 -S1130E3400000C40104A10B5104C11498218A2420B -S1130E444B680BD803F00702023A012A23F0070384 -S1130E5494BF43F0030343F001030BE0094A9042B7 -S1130E6408D803F00702023A012A23F0070398BFC3 -S1130E7443F002034B6010BDFFDB0BFFFF23F400C0 -S1130E8400000C400024F400034B5A6DD20702D432 -S1130E941A6D1042FCD1704700800C400D4B400089 -S1130EA49B6A00B523FA00F000F00300022805D081 -S1130EB4032807D001280AD1074B00E0074B9847C1 -S1130EC45DF804FB064B984740085DF804FB0020DA -S1130ED45DF804FB00800C40F70D0000FD0D0000DC -S1130EE4CD0D0000C0F30313013B10B50C46032BD6 -S1130EF47FD8DFE803F0020E2058B1FA81F43D4BA9 -S1130F04E4B29A68C4F11F0422F00F0214439C60F3 -S1130F1410BD394B9847B4FA84F4364BE4B25A689A -S1130F24C4F11F0422F00F0214435C60334B98474E -S1130F34334B984710BD334B984215D003F5F63321 -S1130F44984220D0A3F57F33984252D104202E4BEB -S1130F549847B4FA84F4274BE4B29A6EC4F11F049C -S1130F6422F00F0214431CE00420274B9847B4FAE0 -S1130F7484F4204BE4B29A6EC4F11F0422F0F0020C -S1130F8442EA04140DE004201F4B9847B4FA84F495 -S1130F94184BE4B29A6EC4F10F0422F4407242EA8C -S1130FA404249C6610BD194B984204D003F5043301 -S1130FB498421ED10EE04020134B9847B4FA84F4AF -S1130FC40C4BE4B21A6FC4F11F0422F0030214435D -S1130FD41C6710BD40200C4B9847B4FA84F4054BAD -S1130FE4E4B21A6FC4F11F0422F0300242EA04147A -S1130FF41C6710BD00800C40090E0000CD0D0000DC -S1131004390E000030140A008D0E0000400514004F -S1131014C0F30322013A70B50346CDB2052A20D8A1 -S1131024DFE802F0031206090C0F00200D4C0DE05A -S113103400200D4C0AE001200C4C07E010200C4C5D -S113104404E000200B4C01E00B4C0020C3F30436F5 -S113105408B10A4B984704F1047406EBC406B600BD -S1131064356070BD08800C4040800C4058800C40B2 -S113107460800C4078800C4044800C408D0E00004D -S113108400F00F000138032827D8DFE800F0041823 -S1131094220207207047134BD86A00F47050B0F54D -S11310A4805F0AD0B0F5005F05D0B0F5006F0CBFC7 -S11310B40420052070470220704703207047094B21 -S11310C49B6A03F00303013B022B08D8064AD05C55 -S11310D47047044B01209B6A70470020704701202D -S11310E4704700BF00800C402019000000F4781001 -S11310F4B0F5402F00B542D013D8B0F5802F2AD0D4 -S113110405D8002877D0B0F5003F78D11EE0B0F5BB -S1131114002F24D0B0F5202F29D0B0F5C02F6ED1E4 -S11311241BE0B0F5A01F48D006D8B0F5602F2ED030 -S1131134B0F5901F63D13BE0B0F5C01F50D0B0F5BB -S1131144D01F55D0B0F5B01F59D13EE02F4B98476E -S11311542F4B9B6808E02F4B4EE0002029E02E4BD8 -S1131164002098472A4B9B6E03F00F0334E02A4B6C -S113117400209847264B9B6EC3F303132CE0264BA5 -S113118400209847224B9B6EC3F3012324E0224B97 -S1131194002098471E4B9A6EDB6FC2F3012220FA9B -S11311A402F003F007030133B0FBF3F05DF804FB32 -S11311B40120194B98475DF804FB174B012098470D -S11311C4134B1B6F03F0030306E0134B01209847F2 -S11311D40F4B1B6FC3F3011320FA03F05DF804FBF8 -S11311E40E480F4B9847072802D008280AD102E07A -S11311F40C485DF804FB054B98475DF804FB00209C -S11312045DF804FB00205DF804FB00BF350D00000D -S113121400800C40CD0D0000A10E00000400180055 -S113122485100000809FD50010B5C9B2D2B204283D -S11312341FD8DFE800F00C09110306000120022383 -S11312440CE01020202309E04020802306E04FF422 -S113125480704FF4007301E004200823054C29B185 -S1131264206222B1E26A1342FCD000E02362024B02 -S1131274984710BD00800C404913000010B500F0DD -S11312840F04012C03D04ED3032C4CD820E0023994 -S1131294032948D8DFE801F0020B050800200424E0 -S11312A407E00220044604E00320012401E00120B5 -S11312B4032401210A461C4B98471C4B98471C4B9A -S11312C45C621C4B98471C4B98471C4B984710BDB9 -S11312D40139022C14BF02240024052923D8DFE891 -S11312E401F016030A22221101210F4B00200A46A1 -S11312F4984702230CE001200B4B01460246984711 -S1131304012305E00E4B01221A60032300E00023AD -S1131314032003FA04F300FA04F4054A916A21EA67 -S113132404042343936210BD2D120000090E00002F -S113133400800C4049130000CD0D0000390E00005C -S113134408089043024BDA6A024B1A80704700BFC4 -S113135400800C403806002024225043034B1A58C2 -S113136422F0030211431950704700BF006000408B -S1131374F0B562B124244443012504F1804405FA00 -S113138401F504F5C0440BB1256100E065614FF03B -S1131394240404FB00F4072904F1804404F5C04444 -S11313A40BD88D000F2606FA05F602FA05F56768D0 -S11313B427EA0606354365600BE08D00203D0F26C1 -S11313C406FA05F602FA05F5A76827EA0606354380 -S11313D4A56062B924225043012400F1804004FA38 -S11313E401F100F5C0400BB10161F0BD4161F0BDF4 -S11313F4036CDB0702D4436C1942FCD17047000030 -S113140430B50446154661B90B4B984205D003F533 -S1131414806398420FD1094800E00948094B984772 -S113142401464901B1FBF5F5203DED0020460421B8 -S1131434054B9847E56030BD004008404015160050 -S113144440051400F1100000F513000030B5CD433D -S113145405F00505044641EA4505024B0221984777 -S1131464656030BDF5130000C9B229B1436C002B8B -S1131474FCD10123036470470164704770B5104BB9 -S11314840D460221044698470A236360204601213D -S11314940C4EB0472969EB6822680B43696922F052 -S11314A41C020B431343236020466968AA68064B55 -S11314B498472B68204663600021B04770BD00BF85 -S11314C4F51300006D1400000514000083689A06E7 -S11314D4FCD5C069C0B2704730B50446CDB2A36828 -S11314E4D806FCD520464021014B9847A56230BD5F -S11314F4F5130000064B9A6842F001029A6041F623 -S11315047132DA639A6822F001029A60704700BF6C -S113151400000C40054B9A6842F001029A600022D4 -S1131524DA639A6822F001029A60704700000C4062 -S1131534064B1A6902F03F0202709A69DB6902F0F1 -S1131544F002C3F30313134343707047D0FF0FE057 -S1131554554B01B59847554B1B681B0E0ED1544B84 -S11315641A6822F070021A60524B1A6822F0604220 -S11315741A601A6862F060621A6001E0032B0BD8E7 -S11315844C4B1A6822F4FC521A604B4A0023136031 -S11315945360936113629363484B684698479DF87C -S11315A40030012B10D19DF8013023B9424B1A6845 -S11315B442F002021A609DF80130012B04D8404B1A -S11315C41A6842F001021A603E4B1A683E4B9A4272 -S11315D420D83B4B1A6842F490421A603B4A106884 -S11315E411681568146805F4FE4204F07F0422436C -S11315F401F07F0142EA0141C0F30620344A41EA82 -S113160400611160334A1168334A11601A6822F484 -S113161490421A60012100200A46304B9847304B0F -S1131624304C1A6C002142F00F021A645A6C2E4892 -S11316346FEA12426FEA02425A64A04700212B481F -S1131644A04700212A48A04700212A48A047002196 -S11316542948A04700212948A04700212848A04739 -S113166400212848A04700212748A04700212748F3 -S1131674A04700212648A04700212648A04700216E -S11316842548A04700212548A047012009210346F5 -S11316940522234CA04701200221224B9847224BC8 -S11316A49847224CA047FDE7F50D0000FC81E00FAC -S11316B40CA00C4020600C4040800C403515000008 -S11316C444800C40F081E00FFFB98A4CB481E00FF0 -S11316D434200040C881E00F2C4000402D1200004B -S11316E400800C40151000000003040000130400E3 -S11316F40033040000A202000002020000120200EF -S11317040022020000320200007202000082020081 -S113171400B2020000E2020000F2020000D2020061 -S1131724751300005D13000095090000CD09000045 -S1131734433A2F576F726B2F736F667477617265B8 -S11317442F4F70656E424C542F5461726765742F29 -S113175444656D6F2F41524D434D335F45464D33C0 -S1131764325F4F6C696D65785F454D333247383865 -S1131774304631323853544B5F43726F7373776F0F -S1131784726B732F426F6F742F6964652F2E2E2F23 -S11317942E2E2F2E2E2F2E2E2F536F757263652F00 -S11317A441524D434D335F45464D33322F43726F9F -S11317B47373776F726B732F766563746F72732EA2 -S11317C4630000000020000000200000010000006D -S11317D4004000000020000002000000006000003F -S11317E4002000000300000000800000002000002E -S11317F40400000000A00000002000000500000018 -S113180400C00000002000000600000000E000000A -S11318140020000007000000000001000020000078 -S1131824080000000020010000200000090000005E -S113183400400100002000000A00000000600100D4 -S1131844002000000B0000000080010000200000C4 -S11318540C00000000A00100002000000D000000A6 -S113186400C00100002000000E00000000E00100A0 -S1131874002000000F00000005000000000000002C -S113188480250000000000000000000000000000AB -S1131894433A2F576F726B2F736F66747761726557 -S11318A42F4F70656E424C542F5461726765742FC8 -S11318B444656D6F2F41524D434D335F45464D335F -S11318C4325F4F6C696D65785F454D333247383804 -S11318D4304631323853544B5F43726F7373776FAE -S11318E4726B732F426F6F742F6964652F2E2E2FC2 -S11318F42E2E2F2E2E2F2E2E2F536F757263652F9F -S113190441524D434D335F45464D33322F75617219 -S1121914742E63004F70656E424C54000302063C -S11319241B4B10B59A6842F001029A6001221861B7 -S1131934DA60DA69510706D59A684FF0FF3022F06D -S113194401029A6010BDDA69920706D59A686FF0AD -S1131954010022F001029A6010BD0222DA600D4AED -S113196400E0013AD8690A4910F001000C4602D09B -S1131974002AF6D100E032B9A3686FF0020023F024 -S11319840103A36010BD8B6823F001038B6010BDB9 -S113199400000C40809698002D4B2DE9F0419C6882 -S11319A4921044F001049C6000254FF001081F4686 -S11319B44FF0080C41E01861C3F80C80DE6916F09E -S11319C4040F07D0A3684FF0FF3023F00103A36092 -S11319D4BDE8F081DE6916F0020F09D0A3686FF048 -S11319E4010023F00103A360BDE8F081013C00E0A1 -S11319F4184CDE6916F0080F154E02D1002CF5D1EF -S1131A0412E08CB151F8044BBC61C7F80CC0114C02 -S1131A1400E0013CDE6916F0010F0D4E02D0002CEB -S1131A24F7D101E004303CB9B3686FF0020023F04D -S1131A340103B360BDE8F08101359542044CBADB7F -S1131A44A368002023F00103A360BDE8F08100BF74 -S10B1A5400000C40809698008C -S10F1A5C04000000008000000048E801C5 +S11300009C070020B9000000DD010000DD010000B4 +S1130010DD010000DD010000DD010000DD01000064 +S1130020DD010000DD010000DD010000DD01000054 +S1130030DD010000DD010000DD010000DD01000044 +S1130040DD010000DD010000DD010000DD01000034 +S1130050DD010000DD010000DD010000DD01000024 +S1130060DD010000DD010000DD010000DD01000014 +S1130070DD010000DD010000DD010000DD01000004 +S1130080DD010000DD010000DD010000DD010000F4 +S1130090DD010000DD010000DD010000DD010000E4 +S11300A0DD010000DD010000DD010000DD010000D4 +S10B00B0DD010000DD01000088 +S11300B82E49072291438D462D492E480A1A06D007 +S11300C80722914381F30988022282F314882A487B +S11300D82A492B4A00F039F82A482B492B4A00F0C0 +S11300E834F82B482B492C4A00F02FF82B482C497C +S11300F82C4A00F02AF82C482C492D4A00F025F8FF +S11301082C482D492D4A00F020F82D482D4900226D +S113011800F026F82C482D49091A082903DB002287 +S11301280260043001601E481E49884205D00268F6 +S1130138043003B4904703BCF7E700208646EC4636 +S113014800200021224A9047FEE7884207D0521A2D +S113015805D0037801300B700131013AF9D17047A9 +S1130168884202D002700130FAE770479C070020E9 +S11301789C0700209C07002078190000200100201B +S11301882C010020DC010000DC01000070160000D6 +S113019858180000000000202001002070160000FC +S11301A8701600007016000070160000701600002B +S11301B87016000070160000701600005718000032 +S11301C82C0100201A0600201C0600209C06002092 +S10701D88D1400007E +S11301DC38210148014B184770160000B108000083 +S11301EC72B6704762B67047004B1847ED010000B9 +S11301FC10B50C4B984798B10B4B98470B4C0C4BC8 +S113020C9847A0470B4B20F0604020F07F0018600B +S113021CA0474468084B98472346BDE8104018474C +S113022C10BD00BF59060000D9090000610600008A +S113023CA506000008ED00E0F1010000F8B5013A54 +S113024C054F4D1E5618441AB54204D015F8013FFB +S113025C6355B847F8E7F8BD270A00002DE9F041CB +S113026C05460C4F0C4E00244FF00C08B84708FB05 +S113027C04F39959A94207D833445A680A4495425D +S113028C02D2187ABDE8F08101340F2CEED1FF2094 +S113029CBDE8F081270A0000041700002DE9F3479C +S11302AC134B054600689847FF2801D100201BE03A +S11302BCDFF84080DFF840900024261D2F68AB59EE +S11302CC04EB070A0193C04704220DEB02015046CC +S11302DCC8470028EAD1E259019B9A42E6D1B6F507 +S11302EC007F3446E9D1012002B0BDE8F08700BF9D +S11302FC69020000270A00000100002038B5114BE8 +S113030C044698420D4606D0B1F5005F05D00E4B5D +S113031C984718B911E00D4C00E01C46C5F30803CE +S113032C5BB923689D420AD020464FF4007240F812 +S113033C045B2946064B984701E0002038BD204653 +S113034C38BD00BF2C010020A9020000300300209E +S113035C490200002DE9F84F9846036821F4FF7612 +S113036C013304460D46174626F0010606D140F823 +S113037C046B4FF400723146184B984723689E4225 +S113038C08D020463146164B9847044610B9002035 +S113039CBDE8F88FB9462368DFF848A0ED1A254468 +S11303ACDFF83CB0043506F50076D047231DEB1A74 +S11303BCB3F5007F06D320463146D84704460028BF +S11303CCE5D0051D19F8013B05F8013BC9EB080301 +S11303DCDF42EAD10120BDE8F88F00BF49020000DA +S11303EC09030000270A000008B5044B9847044A87 +S11303FC4FF0FF331360034A136008BD311400003F +S113040C300300202C0100202DE9F0410F4E04464E +S113041C0D461746B047FF2815D0681E2044B04738 +S113042CFF2810D024F4FF7323F00103084EB3F516 +S113043C005F3A462B462146B446BDE8F0410CBF5A +S113044C0448054860470020BDE8F08169020000BB +S113045C610300002C010020300300202DE9F84F2B +S113046C394E0C460746B0470546601E3844B04723 +S113047C8542814602D90020BDE8F88F6B1EDBB2A1 +S113048CFD2BF8D80F28F6D8304B1B78472B08D007 +S113049C492B06D0482B0CBF4FF480564FF4006602 +S11304AC01E04FF40076DFF8A880DFF8A8B0002450 +S11304BCC0470C2303FB04B31A7A254FAA42DFF876 +S11304CC94A001D11D6804E001340F2CF0D14FF03D +S11304DCFF3500244FF00C08B84708FB04A31A7A24 +S11304EC4A4501D11C6804E001340F2CF4D14FF0BF +S11304FCFF344FF000084FF00C0BB8470BFB08A36C +S113050C1A7A4A4501D15B6805E008F10108B8F193 +S113051C0F0FF2D10023641B1C44B4FBF6F4DFF878 +S113052C3890A4B24FF000081FFA88F3A34208D203 +S113053CB8472846C84708F1010835440028F3D0C9 +S113054C99E70120BDE8F88F69020000FE81E00FF5 +S113055C270A000004170000AD0000200F4B07B55C +S113056C1A68013216D09A68596842F2B8001144DC +S113057CDA6811441A6911445A6911449A6911448C +S113058CDA698B185B4202AA42F8043D0421044B3D +S113059C984700E0012003B05DF804FB2C01002017 +S11305AC150400004FF400531A6842F204031B684C +S11305BC134442F208021268134442F20C02126809 +S11305CC134442F21002116842F2140212680B44F2 +S11305DC1A4442F218031B68134442F2B80212681C +S11305ECD3420CBF01200020704700000B4808B513 +S11305FC0368013304D10A480368013306D109E0C6 +S113060C084B98470028F6D1002008BD054B9847A5 +S113061C0028F9D0044B9847012008BD2C01002078 +S113062C30030020A9020000511400004FF40050C4 +S113063C70470000004B1847F5030000004B1847A7 +S113064C15040000004B184769040000004B1847C0 +S113065CB1050000004B18473906000010B5044BD7 +S113066C984718B1BDE81040024B184710BD00BFA5 +S113067C69050000F905000043F2AF61044B002248 +S113068C1A60596005219A601960024B1A60704710 +S113069C10E000E034050020014B00221A60704782 +S11306AC10E000E0044B1B68DB0341BF034A1368F2 +S11306BC01331360704700BF10E000E034050020E4 +S11306CC08B5024B9847024B186808BDB1060000E8 +S11306DC340500207FB51D4B1D4C0FCB8DE80F004E +S11306EC01211C48A0471C4E012304220621022090 +S11306FCB0470122002307210220B047174E0121E5 +S113070C1748A04702211748174B98473046174BF8 +S113071C0121984730460121A047154C0026694613 +S113072C2046144B8DF8006098474FF4165231460E +S113073C2046114B98470323636504236363052107 +S113074C20460E4B984704B070BD00BFB81700008C +S113075C8D0F000000C20200D112000040151600DB +S113076C0023040003001200DD110000610E0000E0 +S113077C00440840C113000059130000A5130000E5 +S113078C40292DE9F84380460F4603D96C211948BA +S113079C194B9847194CA368D80609D539462046F5 +S11307AC174B9847174DA368D90605D4A847FAE701 +S11307BC70211048104B9847124E4546B146C8EB71 +S11307CC05039BB29F4212D9B047A368DA0608D539 +S11307DC29780A480A4B9847A368DB0605D4C8470E +S11307ECFAE779210348044B98470135E7E7BDE85C +S11307FCF88300BFC8170000B1080000004408408B +S113080C15140000270A0000F8B51E4D06462C7876 +S113081C1D489CB9C36A5B0701D4002430E01B4B10 +S113082C98471B4B18700028F7D01A4B98471A4B53 +S113083C18601A4B1C7001232B7021E0C46A14F04D +S113084C040415D0154C114B27789847104923787C +S113085C0F44787001330A78DBB29A422370DCD1EE +S113086C0F4B01313046984700232B70012407E0CD +S113087C084B9847084B1B6864339842CDD92C70AD +S113088C2046F8BD38050020004408400914000037 +S113089C40050020CD0600003C0500208105002009 +S11308AC4902000008B5014CA047FDE7270A0000E7 +S11308BC10B50B4B9847012811D00A4C2378012B07 +S11308CC0DD1094B9847094B1B6803F5FA739842F1 +S11308DC05D300232370BDE81040054B184710BD09 +S11308EC1D0A000082050020CD06000084050020AE +S11308FCFD010000054B012210B51A70044B9847FA +S113090CBDE81040034B1860034B184782050020C8 +S113091CCD06000084050020BD08000010B5074B6F +S113092C9847074B9847074B9847074B9847074BF3 +S113093C9847BDE81040064B184700BFF50100006E +S113094C250A000085060000410600008909000004 +S113095C0109000010B5054B9847054B9847054B0A +S113096C9847BDE81040044B184700BF270A000005 +S113097CB1060000A9090000BD08000008B5044B2D +S113098C9847044B9847044B00221A7008BD00BFCB +S113099C3D0A0000E10600002001002010B50748C4 +S11309AC074B9847012807D1BDE81040054B00229E +S11309BC1A700248044B184710BD00BF880500206C +S11309CC1508000020010020790A0000704700007F +S11309DC054B10B51B7813B9C9B2044B9847BDE845 +S11309EC1040034B184700BF200100208D07000066 +S11309FC690A0000034B1B78013B022B8CBF40207F +S1130A0C0020704720010020004B1847010A000009 +S1130A1C004B1847590A000070477047034BFE22DD +S1130A2CDA7002221871A3F844207047C80500201C +S1130A3C054B00221A709A6483F84320A3F84420CF +S1130A4C9A705A70704700BFC8050020024B187882 +S1130A5C003018BF01207047C8050020024B00224B +S1130A6C83F84320704700BFC80500202DE9F041EE +S1130A7C03780546FF2B814C18D1E3701023002218 +S1130A8C012523717E4B62706271257098477D4EEF +S1130A9CA071B047E071B0470823000AA4F84430B1 +S1130AAC794B20726572A5729847CFE02678012E97 +S1130ABC40F0E180F32B53D01ED8CF2B00F0BA803A +S1130ACC05D8C92B7FD0CC2B00F0BB80BBE0D12B3D +S1130ADC00F0AA80C0F08A80D22B40F0B480FF23AF +S1130AEC0025E370664B257165719847E571A0711B +S1130AFC25726572072394E0FA2B46D00AD8F52B9D +S1130B0C11D019D3F62B40F09E80FF23E370436879 +S1130B1CA36493E0FD2B47D0FE2B50D0FC2B40F06C +S1130B2C9280002090E0564B98476A78904201DC02 +S1130B3C222089E0A16C07E0514B98476B789842CE +S1130B4CF6DD6968A1646A78504B201D9847FF2331 +S1130B5CE3706B78A26C1344A3646B78013360E08C +S1130B6CFF23E370A26C4168002311448A4204D031 +S1130B7C12F8010B0344DBB2F8E7C4F80730012385 +S1130B8C237100236371A3710CE0FF23E370404BCA +S1130B9C0722A364002323716371A371E27123728E +S1130BAC6372A37208233CE0FF236278E370002392 +S1130BBC2371A371E37123726271062331E0002364 +S1130BCC2370637038E02E4FD4F84880B8476A1C01 +S1130BDC411E304B40469847002832D0FF23E37027 +S1130BECB847A36C01381844A06427E0244B9847F9 +S1130BFC6B78013898429BDDFF23E370A4F84460C2 +S1130C0C697819B9244B984700BB1AE0AA1CA06C4C +S1130C1C204B1A4E9847A0B16B78B26C1344B36452 +S1130C2C14E0A4F8443011E041681C4BA06C9847C4 +S1130C3C10B906E01A4B9847FF23E370A4F84460FC +S1130C4C04E0312000E02020164B984794F8433000 +S1130C5C012B02D11020134B9847B4F944100748C8 +S1130C6C002908DD012380F8433089B203300E4B90 +S1130C7CBDE8F0411847BDE8F08100BFC80500206D +S1130C8C150A0000010A0000410600004902000098 +S1130C9C4C180000490600006906000051060000CB +S1130CACFD010000290A0000DD0900001B4AD36A7B +S1130CBC03F47053B3F5805F2AD0B3F5005F04D00E +S1130CCCB3F5006F04D1164B00E0164B186870474F +S1130CDCD36803F4E063B3F5007F13D005D89BB15C +S1130CECB3F5807F12D110487047B3F5806F07D0ED +S1130CFCB3F5A06F0FD0B3F5407F07D10B48704705 +S1130D0C0B4870470B4870470B48704700207047DE +S1130D1C4FF4004070470948704700BF00800C40F6 +S1130D2C2801002024010020C0CF6A00809FD50038 +S1130D3C406F4001C0D8A70040420F00003FAB01F8 +S1130D4C08B5054B9847054B5B6803F00F03D84077 +S1130D5C034B186008BD00BFB90C000000800C40A8 +S1130D6C1406002070474FF400407047014B18687C +S1130D7C704700BF240100200A4A536803F007019E +S1130D8C03290CD8DFE801F00202070723F007035C +S1130D9C43F0010303E023F0070343F00303536020 +S1130DAC704700BF00000C40104910B5104C114A9C +S1130DBC0144A14253680BD803F0070102390129FD +S1130DCC23F0070394BF43F0030343F001030BE048 +S1130DDC0949884208D803F007010239012923F094 +S1130DEC070398BF43F00203536010BDFFDB0BFFF6 +S1130DFCFF23F40000000C400024F400034B5A6D54 +S1130E0CD20702D41A6D1042FCD1704700800C40FA +S1130E1C0C4B40009B6A10B523FA00F000F0030061 +S1130E2C022805D0032807D0012809D1064B00E07D +S1130E3C064BBDE810401847054B9847400810BDB9 +S1130E4C002010BD00800C40730D0000790D0000D3 +S1130E5C4D0D0000C0F30313013B10B50C46032BDE +S1130E6C7FD8DFE803F0020E2159B1FA81F43D4A30 +S1130E7CE4B29368C4F11F0423F00F031C43946081 +S1130E8C10BD394B9847B4FA84F4364AE4B253682B +S1130E9CC4F11F0423F00F031C435460334B9847D5 +S1130EACBDE81040324B1847324B984215D003F52D +S1130EBCF633984221D0A3F57F33984251D10420C4 +S1130ECC2D4B9847B1FA81F4264AE4B2936EC4F1DF +S1130EDC1F0423F00F031C430DE00420264B9847FA +S1130EECB1FA81F41F4AE4B2936EC4F11F0423F0E7 +S1130EFCF00343EA0414946610BD04201E4B984777 +S1130F0CB1FA81F4174AE4B2936EC4F10F0423F4DA +S1130F1C407343EA0424EEE7184B984204D003F5DB +S1130F2C043398420ED010BD4020134B9847B1FAAD +S1130F3C81F40C4AE4B2136FC4F11F0423F00303CD +S1130F4C1C430DE040200C4B9847B1FA81F4054A40 +S1130F5CE4B2136FC4F11F0423F0300343EA041406 +S1130F6C146710BD00800C40850D00004D0D000071 +S1130F7CB50D000030140A00090E000040051400E1 +S1130F8CC0F30322013A38B50346052A20D8DFE81A +S1130F9C02F0120306090C0F00200E4D0DE0002088 +S1130FAC0D4D0AE001200D4D07E010200C4D04E01E +S1130FBC00200C4D01E00C4D0020C3F3043408B1A7 +S1130FCC0A4B984705F1047304EBC3039B001960A7 +S1130FDC38BD00BF44800C4040800C4058800C400D +S1130FEC60800C4078800C4008800C40090E000096 +S1130FFC00F00F000138032803D8DFE800F00416D2 +S113100C202300207047124BDB6A03F47053B3F5B2 +S113101C805F08D0B3F5005F16D0B3F5006F0CBF3A +S113102C04200520704703207047094B9B6A03F08A +S113103C0303013B022B09D8064AD05C7047044BCE +S113104C9B6A03E007207047022070470120704719 +S113105C00800C405418000000F47810B0F5402FB8 +S113106C10B548D018D8B0F5802F32D009D8002844 +S113107C6FD0B0F5003F6AD1394B9847394B9B6818 +S113108C2EE0B0F5002F26D0B0F5202F2BD0B0F5E4 +S113109CC02F5CD1002046E0B0F5A01F47D007D884 +S11310ACB0F5602F2FD0B0F5901F50D101203AE04D +S11310BCB0F5C01F44D0B0F5D01F4ED0B0F5B01F62 +S11310CC45D1294B01209847264B1B6FC3F30113C1 +S11310DC34E0264B3EE0244B00209847214B9B6E7A +S11310EC03F00F032AE0204B002098471D4B9B6E06 +S11310FCC3F3031322E01C4B00209847194B9B6E3F +S113110CC3F301231AE0184B00209847154A936E39 +S113111CC3F3012320FA03F3D06F00F0070001306E +S113112CB3FBF0F010BD104BBDE8104018470E4B4C +S113113C012098470B4B1B6F03F00303D84010BDE1 +S113114C0B480C4B9847072807D0082801D00020DF +S113115C10BD034BBDE810401847074810BD00BF35 +S113116CB90C000000800C401D0E00004D0D000059 +S113117C04001800FD0F0000809FD50010B4042853 +S113118C20D8DFE800F00C09031106000420082322 +S113119C0CE01020202309E04020802306E04FF4CB +S11311AC80704FF4007301E001200223064C29B136 +S11311BC206222B1E26A1342FCD000E02362034BAA +S11311CC10BC184710BC704700800C40A5120000DE +S11311DC00F00F00012810B503D04ED3032822D9F8 +S11311EC10BD0239032948D8DFE801F00B020508C9 +S11311FC0120032407E00220044604E00320012418 +S113120C01E000200424012211461C4B98471C4B7E +S113121C98471C4B5C621C4B98471C4B9847BDE889 +S113122C10401B4B1847022801F1FF310CBF00245E +S113123C0224052921D8DFE801F016030A20201125 +S113124C01220E4B11460020984702230CE0012288 +S113125C0A4B114610469847012305E00D4B012219 +S113126C1A60032300E0002306480322816AA2408B +S113127C21EA0202A3401343836210BD89110000CA +S113128C850D000000800C40A51200004D0D0000DF +S113129CB50D000008089043024BDA6A024B1A8021 +S11312AC704700BF00800C401806002024235843CC +S11312BC00F1804000F5C040036823F00303194398 +S11312CC01607047F0B55AB124244443012504F15C +S11312DC80448D4004F5C0440BB1256100E0656188 +S11312EC24244443072904F1804404F5C0440AD857 +S11312FC67688D000F26AE4027EA060602FA05F54C +S113130C354365600CE001F18045083DA768AD00EC +S113131C0F26AE4027EA060602FA05F53543A5600A +S113132C62B924225043012400F1804004FA01F1F3 +S113133C00F5C0400BB10161F0BD4161F0BD036C1F +S113134CDB0702D4436C0B42FCD1704738B504461E +S113135C154661B90B4B984205D003F5806398424E +S113136C0FD1094800E00948094B98470146490147 +S113137CB1FBF5F22046203A0421064BD2009847E3 +S113138CE26038BD004008404015160040051400CA +S113139C651000004B130000CB435B0003F00A0301 +S11313AC41EA030210B50221014B9847426010BD7B +S11313BC4B13000070B50F4B0D46022104469847A1 +S11313CC0A234360666C002EFCD10123236423683A +S11313DC297B6A7B23F01C030B431A43AB7B6968A0 +S11313EC13432360AA68044B204698472B78636008 +S11313FC266470BD4B1300005913000083689B06D0 +S113140CFCD5C069C0B2704710B502460C4693684F +S113141CDB06FCD540211046014B9847946210BD65 +S113142C4B130000064B9A6842F001029A6041F695 +S113143C7132DA639A6822F001029A60704700BF35 +S113144C00000C40054B9A6842F001029A6000229D +S113145CDA639A6822F001029A60704700000C402B +S113146C06490B6903F03F0303708B6903F0F00228 +S113147CCB69C3F30313134343707047D0FF0FE0DE +S113148C564B07B59847564B1B681B0E0ED1554A45 +S113149C136823F070031360534B1A6822F06042F4 +S11314AC1A601A6862F060621A6001E0032B0DD8AE +S11314BC4D4A136823F4FC53136002F500520023C5 +S11314CC203213605360936113629363474B01A8FA +S11314DC98479DF80430012B0FD19DF805302BB99A +S11314EC434A136843F00203136001E0012B04D850 +S11314FC404A136843F0010313603F4B1A683F4B97 +S113150C9A4220D83B4C3E48236843F490432360D2 +S113151C036801681B0403F0FE420368006803F4CB +S113152CFE45090400F07F032B4301F4FE010B4339 +S113153C1343344A1360344B1A68344B1A602368CF +S113154C23F490432360012211460020304B98472A +S113155C304A314C136C002143F00F031364536C69 +S113156C2E486FEA13436FEA03435364A0470021E8 +S113157C2B48A04700212B48A04700212A48A0470C +S113158C00212A48A04700212948A04700212948C6 +S113159CA04700212848A04700212848A047002143 +S11315AC2748A04700212748A04700212648A047E8 +S11315BC00212648A04700212548A04701230522E5 +S11315CC18460921234CA04702210120224B98479D +S11315DC224B9847224CA047FDE700BF710D000039 +S11315ECFC81E00F0CA00C4020600C406D1400003A +S11315FC40800C4044800C40F081E00FFFB98A4CD1 +S113160CB481E00F34200040C881E00F2C4000402E +S113161C8911000000800C408D0F000000030400B1 +S113162C001304000033040000A2020000020200B4 +S113163C00120200002202000032020000720200BA +S113164C0082020000B2020000E2020000F202007A +S113165C00D20200D1120000B912000029090000C6 +S107166C610900000C +S1131670433A2F576F726B2F736F6674776172657D +S11316802F4F70656E424C542F5461726765742FEE +S113169044656D6F2F41524D434D335F45464D3385 +S11316A0325F4F6C696D65785F454D33324738382A +S11316B0304631323853544B5F43726F7373776FD4 +S11316C0726B732F426F6F742F6964652F2E2E2FE8 +S11316D02E2E2F2E2E2F2E2E2F536F757263652FC5 +S11316E041524D434D335F45464D33322F43726F64 +S11316F07373776F726B732F766563746F72732E67 +S11317006300000000200000002000000100000031 +S11317100040000000200000020000000060000003 +S113172000200000030000000080000000200000F2 +S11317300400000000A000000020000005000000DC +S113174000C00000002000000600000000E00000CF +S1131750002000000700000000000100002000003D +S11317600800000000200100002000000900000023 +S113177000400100002000000A0000000060010099 +S1131780002000000B000000008001000020000089 +S11317900C00000000A00100002000000D0000006B +S11317A000C00100002000000E00000000E0010065 +S11317B0002000000F0000000500000000000000F1 +S11317C08025000000000000433A2F576F726B2FF2 +S11317D0736F6674776172652F4F70656E424C54F7 +S11317E02F5461726765742F44656D6F2F41524D9C +S11317F0434D335F45464D33325F4F6C696D6578B9 +S11318005F454D3332473838304631323853544BC4 +S11318105F43726F7373776F726B732F426F6F7462 +S11318202F6964652F2E2E2F2E2E2F2E2E2F2E2E27 +S11318302F536F757263652F41524D434D335F458E +S1131840464D33322F756172742E63004F70656E8E +S10A1850424C5400030206A0 +S1131858284BF0B51E469C68921044F001049C6025 +S113186800254FF0010E4FF0080C9542214C3ADA4E +S113187800EB85071F61C3F80CE0DF697F0706D515 +S1131888A3684FF0FF3023F00103A360F0BDDF69C4 +S1131898BF0701D4184C08E0A3686FF0010023F0D7 +S11318A80103A360F0BDACB1013CDF6917F0080F78 +S11318B8104FF8D074B151F82540B4610E4CC6F8F5 +S11318C80CC0DF6917F0010F0A4F02D014B1013CB4 +S11318D8F7E734B9BB686FF0020023F00103BB607B +S11318E8F0BD0135C1E7A368002023F00103A3601C +S11318F8F0BD00BF00000C40809698001A4B10B54C +S11319089A6842F001029A6001221861DA60DA6981 +S1131918510706D59A684FF0FF3022F001029A6009 +S113192810BDDA69920706D59A686FF0010022F0B3 +S113193801029A6010BD0222DA600C4AD8690A4989 +S113194810F001000C4602D012B1013AF6E732B9A0 +S1131958A3686FF0020023F00103A36010BD8B6835 +S113196823F001038B6010BD00000C4080969800A2 +S10F197804000000008000000048E801AA S90300B943 diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/ide/EFM32G880_crossworks.hzs b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/ide/EFM32G880_crossworks.hzs index 4ca95bf9..e70a572d 100644 --- a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/ide/EFM32G880_crossworks.hzs +++ b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/ide/EFM32G880_crossworks.hzs @@ -1,19 +1,22 @@ - + + + + - + - + - + - + @@ -21,20 +24,18 @@ - - - + - + - + - + @@ -53,8 +54,7 @@ - - + - + diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/ide/readme.txt b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/ide/readme.txt index a49767fb..a10a52ca 100644 --- a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/ide/readme.txt +++ b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/ide/readme.txt @@ -1,4 +1,4 @@ Integrated Development Environment ---------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains +Rowleys CrossWorks (version 3.7.6) was used as the editor during the development of this software program. This directory contains the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.elf b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.elf index 0bc3a753fee8524029b0e9d70bc49b83c972d3c0..48add7eb4aecf3204be104e936858033b4374c73 100644 GIT binary patch literal 90236 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 literal 220198 zcmeFadwf*I88<$2X3k!+yV(U22qD0da0w6~+$17uNFYQ-2^SR=HQY2HN(5@7wGsst z(IRTCh*nXtrM4>IrP4}?ir0EcDs55P8mkor#Z8QWi01u1Gjn#&ZW3twd;8Dt^Bz8X zGT(Ww^UUSUnKS3GeB$IX&iQO+4vXb8j`Wp%7#oGZ`NIXXJd}zJfupj7F&`52gPJ%!$3;hWoKCXzBRXWF^aEs{Bh!&@;Ver2Z5!~P z{~rA>Wd0jFj?6P76Fwg3^w`-$Py0#P(9?#Mr)A6f>%a1^vT|?uDq~eadBJHzPG_+b z4;PdVQK?afhafc+dBczzs#1dv4@GJi^7a~Z&k@c@$}kB;`u{+S@fo|&&v?iK7CJLJL&tqt4h4})3WV)QNs%Z)qFS~ z`%Odjq*WzWy;aQ%kL<0U)T2D-G+z18UW&W(qk6@m>gQ9`1^uGPbMlEs_*g&UrTSfF zel7U>lfKCNf;GZF7I{XNO=($Gy0h6Q_AKlYli^@Ja4|3|ZQhbs*UZGaNzv*lG0q~} zr^Fz!z3`cvHZLlh&>ZatsvUkSyz}l)1zU;Vl$Mg>x@L=ko0lAXYZT~m!=x!O%JJ|i zF=>G!N}J!aNph2+ctPQyFoB$wU`1WCR2oQ9u)5~XKo<1fy;OTMrRA}+>zcdT`DNP9 z>s@rd#w5jT&#%TG&bkmKnSheWXxW0Y(&nj7Y03to%w4CUd`1#>#N7GtPt2Vgg;txF zHfI`c&*sAIY{!nTrrbWIq!O(V6= zNMnMF{ByWEp^h9L$4X9RWIKE2`pqQ=A40ULEtWSQ?NWEJacPgL9_bkkr#A=1PW-Z~ za%0t2c4b*}G>$7vvMaNz=EN%JWLNS=F*tX(i`sH@T6Sf5bFl?!)%LmoO;CtZGvles zc&f&vs^I4frgi-MFe~JPyEgp%FfTl58}u3LB{2)$P%aE--nBjnao&Q2i>ctmI%%Q=d~>SgDHNqLNtH%AR-rqQ(0< zmn`0Am7G6sN=tFI?u*Rbn_JeI9?CfSTFc}llxzCGrZLD<-`8j@I1|X1gvyi9$4OeO zBs3xk%}GK_lF&3a!uT~M=Eq25TLSg>oV-w|DXr0?l`zmSv+O*S>=95j7N}79` z`Yve>O@yRf(mYy?Zkr};m~?b6+fm#+Q}uzY%IZnzN3kfQ$dw$-oUU8#goE!+f1!Df zc;s6at^4Yp2y1FBJgYe(FrJ8+mCndACDzDqIGh)unp#&mCFVt2DQO;VywKx=u~St& z$+4MTMWaAAS>AzBXopj$dlrh8>gi8?U3+nP{Zn7Fiv^t*2ODhkKc>A^T4X#Om#h*k zjdQ`hynDUe9e4^lmghBOHRA8$e$cXEG3hE^-n~IKPHDLob@%H?^`z4d)>hXw|Cv=! zI`d#1%KuBGCLgRr-a@1%G#5wfn!`v@>2Pjg#nqF_4pJK{hBVv3FwSf@WpzBcpi0ET zB6>u`ikoMd2vZ!0Uu&S)CrSg|s;7~h*Ajz*yFd8ULSOWH^I~36imQ)k)F~mrt9tbG z%IZm*kJQHMw$?TE*8UkCXC7=F@y@}(k{dAowhpgrZsDs-0=r4`!%ddO2a%?q?kL68 zgEUWRiA)2JwYJ2c!m|!MR+7C$tf<^hY42M&WnVGNJHlcNS3WC0tzP7Z>v?|HhLVGi zn)XShFFE*l68eEbQ}$IbqEm$FFWV7$CRkSYmFOaxT1Se(tocyw2cL?V)p__PA4Y*D zN6w4_>oJOktw`xQjJhQUw;5`*9nSL&=gi8IgO2r*gWnm6$oBEgg{5`PX<}VTLH(3i zA@YMrPr}^drnz;v0<9}4j%}%R%6-A*U1B`!Z2&Hz@wf}H41e3up5^sd7#}aee8l+u zpUTH9jGU2m|Fwn~W{X}`QzNVefSof7I zEN}Ly{@@|6F>eaWyvuu*9Br_gqkU+##cOl*SUv#k+2y?l-yUHxm6OxI;v_;_{?$1<|`Yx6h?VC-lF#c4dS5DQl^T zZ2r1<*fsSTyW!EWl6rf0`BU)c)Z*BewSyax8deVfqQlO`xo%i-?Bm)o$lcJJ#qO^4 zLZ))q6`-u`T^##s?G2#Rf%2Q$&0p8!@2mK`8I(6_*ES|bLe<~fjEnch$3;CJIDOFR z{Urx4@1n0fZF8I&y6*~SY&{mwOBg+9{5>`g&pS5H`YT@iiswd;Sg}2eF@6fs#Kq=s zzcN}mu9V6Cx^os$Y{RpyUYEw*#0oA6-{!6miD&eR`}in0(=#YojMANo`6GL)iPAWtIC z#};gHN|iHb4yDz&_wK^1lB4x>P1U1D)|}F2XWWl$k32)Yg`;J&{N-r7Ki+*(<3mjr z7XxeH36EJ3Z-7RAvJr$Oi^($BMoT8|$TrP&1nhI}o&zREddKc8m)-WqcPl?*ht-$$ zciG1|C`*yv%aE zxp$#;L^e}7*b&*%XP=ZArT5QCjE(OvEN-q;bA#+!Juj%k$iW2LU&p5Gt7X|UX*}&z z+P$KBQtavXw_LUbmTdb7{~8=}%D$CSHq}m$U)N3OH=E+tK5hPN@4(F6sS=k~P1$$7 zJtY?Qc#hZy2ki5BtRwczOB+8shHE==_RQtu{1HalJ2-UX5gdyqmOzvPs*(t zxL|)(pmf24Kxu9)$Ldm=SGl0-v8pKM?am$h;3_T0_~uE~@NGp^msm9XZGGK>x~-}W z9IRjZc5_%{FR)^#T2}RX{EbJ*nB#EGa%^OYtddiVrE=N2|J@5^EiC{+#0GdAd); z?+(zXP#a=?>AceUE9R}3|I)md=9gYU^+oL`Fz{66-B?c`oYB2kUjC5bqtWLuYvpnT zdW8@5Ms`Snpp-E$+|8 zc5!p-$Vb3yi@ZvstEF~nU2~53$idJvcg`ainP{#c%B-5PTS}@THN{)#{_Olpx~7y? z=@l3FQAn8j?Q2^fsyb~;Ue%l`TovuROME+6^sbVk9k0#!sA}+*KFGhLg#W2e*}6%2 z!~y$-+hfmUmhpjsUFqmMOuo7`zwE@a)LKj|OxS!~M9 zo4sYhGI1xh0Z}=jxo9w2QeZ-JxoTn7U4Q&1MXcXI(U3=x^oYhHlw?%vj(>J9>vEU} za>_O|MXku79P|w<=I_xX*rP{}Fn*nTWcKKh#mZvEp3nA{#cDmD>@90yWgj6O^)%uf z@%)`~u6lp(pnPxrhNeQS)AfrS>Xy74}u-2VtWs-)<<2`8-;WXe4`O zG3lwvzXp+s#Ku@xv;RB)R{vkpb8K%~+O@J4&C`)fq<+o({6oe6Tb#2L$3a%yT&2d> zo>goJi*368Eks%Tn%{L|*@&{~Wt%2F@L>^JR6pK&DD?fh4^@4mE_&9aHMNc{ESp+3 z7VT{4_eEHXZasALyRPV|EOz7dG;`Fn^zVQCVb_>1>`3;g8e5gIBfC1g^2&s^s-D{> zG|yD)@cq%&@}X{Wgg}|sHN}t z?ztxJJJj%py$L&>SgoJVN*Yo+-WR6CQQNEQHth*eV(+ zB3V23Y-NMx`!6-o2tLH0jofHBv%wQ9w%DL7cpdde;;p|&m6pD5t4B$T`aN68%3$TK zR6dY5oMtWP6*E~he=*uLi*>&uab!|bov!Gl@{#V&0>6jP_Jxhp)!*|P+2FIW+JUDJ zEo|D~5BnNNY{4BC?{%0n`KziKb|ax44#HU9!~aFYDb&+#+!Jx$RLJFHznWo#vd8yz z!*E4`uE~=RzIE1{2j4tvPT9t?jIvox)#4(5=Q_pzznpZHeb zPW?}owf_e8$o^v7X%z~7I5>{zUCP*?4;to`;SK{fRjloo_xpVL`#!CC4ejJ*{I)f< zhF9&NR!VJv*Hfx%3tR4Ka9Yv3Ml$5vfk zwYp^74%X-18AVm(cWa?{^Y%|;x6^zeP;=6j%}uSRdg{->^|5v28I`>8R$OPJWs&W4 z4Y;A~*0Qx__m=q|gxqM>IJyk6@KnHd!BL6xlSf&8OT*L9z+x+F^IPhw*szoTo`qH( zt{+?=>W38g8_HX1tL!FANp*shx2bgu8#d_gg$4Pbu^Pf2M3}U4(AluAf3L~s^)vH3 zH&A4(`fW{-@T`XXIIpF6_kWA$Z?TAfN+WUk&~|C=*reC)LYN`EX?I|8us8x1+F>P9}lx=k1Aiw z+BsXlUc1=0Ub`DJVwH>{}aL2ax-9Lw*^*xAjoh)`!a8+e@?yLEBs+8i@CyvUm0p z)!X_E>Zv%k{(5UY8$|JH9bw&h=ZE*=Nz0(Yo*jN%<)|OSH~QJZ#;8#0Yx>dk<*}%50C^=(sd=c3JiQ4%eA?iPMKOl>b}WvuiIa!g4cDP&Eq{4z zf-k+XYG@F+3c2O6i0==e2)}65bf51RP5nI6hqC4~um9lFuCW>H4F13WSJ1AF%h>&K z>%WYrwzAjRE`>h8xsQ@8;1uUy9g$`I@+}qT92Mmm-&1cWj_s|r?qh>hlt)^3eb9*L z2*SJ{+LW{#B+X(hd1o)xCz*$?gm2ZdAzl7XdVhRG^~wgfj_r-XZ63_4RQ;d4zkwAj zZ~5p63wpS)?)v*D<*{0e-Obm@U(vl`>!IG?%d$0%?p%i44CJmrYvtkPEjyoZyy#Iy zE!nDHahPp>?i1aXA3^#h{5B_P_CZJUcd~4DV}7hx++GB^dy#t%wf#}lHmDTYM?7d9 zKR-e(^jSn@81*NwCtmg*RpKs-dLXXuY)GfSWj5MPt)qKy!_^DDLEPo&IrxpI>|`}g zN!2r!LE~pgQLDcHyS>|#hWoOsX`Q5XR7O&nDH7}9nLjC){JkBytib<1)mON|-6wo1 zJ_31k_hH@n$b_MvSnF&xYGO@T&F5LH+u`EoMS31nS=?N$QaP2`WnHT1zL3TIae7u2 ztpU)z0{v_}E~cZlpZ@Ed3x|&wIcoF?V~S3kJ!kH``IjW{_>$5I6U*|i_`#w@14$6S z@=tjXe_C;H#;;8ehFBIb9kkbB6#hyJr*z*MzS5%Y3hKzoWegA24K28a-)OBAnz1kG zqa%Xn+1Ta~*Eb5d4p_6vH5}>oY+sA~7VwfEZeGGf3qomaoTmLs)sqAIPW)~I@5Asv zu16<)sr-an@S`JwpMwjrkA~7@o9N?!XW?&LAJPu*I>YPWjli7^-5p<|SEBIGfli?% zoJy|+{dv%z1&wSIUY5^T0n(|qiAD$Mad-(2!mmBv4bbD*CE1O@wC9NA9bInx8_@q9 z-R?4w9}~z3jtcyYA1ldK(&f;cSUWf^g`SFgf$r8F1wNK;H}8ygc-=meUx$s)W059V z2WP`^ZO3;b^#eDp>oI7FvM1W9qx19>8^yq;EbaCUG-b9<;Dn-Mn>R)4VyW`7PEeakIS1zR|PNtGNpb zTza32^G0vwtF2qaDtWVgljlb7N}uK~)P3La4Xi=Bk14L8t$ymj2wr&zP%9S*(x_N#U=ShlT63?0rc-&?C zO`NAq%v9M@+afvg94e>?a?~~n$ABsAU?iE-M~HqD^m#6NCB}K8Q#^=H9mn(8l(zf}c{J?65JF$7~zTu7cfxWg~0MIMaqd3Z6p4{~YnR)1UHPJh#Pp`mW)(TC2q^a+Q6v=O*uszLkE^qAp&F zV^aNUkoE8IxNTlUdX!&TYub#1eX$SMWpe}Zsx}`VTUD%`GOmr&6Jw1-D?bL!)t2IY z!jYr;cl)5m!4w~;o*e!eNK^egIMJsQZP8t)B)f}(i^G|dICui`-1M<2IF)`n=w#cG z?~k;OSK`{(5zTFf%1b|oSH}BO$8C+|@23F`M?HSzhl8n)X+QKh;-)Q&(-QG< zV6x%Z*;vR}SA$dI**5?J4ySJtejfZzxg7d$z?0gZNWVjO^Y4cI?tg(IzH$vT+&wHueDU~02&I`t(t zUYUaD9S1vgk!s&v7Si8n%0m1U2M441wJDoJbIRsminUwzv17;{&kohGqjywXPjZ_` zEyG4?95|x*ksl78jI_HhNjK3p4`*ynoR+Mc=oy%7L_w$c5FQ0gWpv~#fYo(GkIV7v zp+g6&tF5=yzZvr6vZJ5)Q*o~px`R{8z5!dd=(q$w(w9oFGxVsTcZ6RAo$A%0pG9M^ zL`FOPr9C_O5%A)0>es;!BhS=9{95PGC|;z?!4%`D3%4MxWi!^e=j3h~>Q_|fj*dlf znZ)?+(46tz9V3$c*!Z3sm(|zv_R1OQ1ST9#eL47iU~Dgm>rPw`$hJeD6Q}EPxMdS#U81kL>0{%v z2|C5l(M>M6G1a|Wep);7ZhB&zOZe`lCwy<;zS9;Re^N2|=Jqd@emvZfyt^)lr+^v& zjwpU^Ox=s>!l7r-*kU2WtR)g}s;-(8UB|+t+o4~Jv}t4Ud)idpyP*5y5m`skR9pXP77hT+z`A<6dJ4`o=zB}?{U(@wHfLoS)PnC7kDORbr-MZ;o z?AA^Ej@{3(F4s|=J35L->-9Fb4!8X!as7$1xnoCZhrbHCisJl<`i>%xeA)ndB38-Q zQOBR1;30i(f7Cs*smofTsrJ%N`vlGL1xYrOcvas{+%q4K?k<}T@=^Spcpi!CYu|T} zS?4&9u4}hGG~*=yPKfg+V&$&CIYd`wZQEzvdYv)T@za@~IoP=-JDBKE{2c6ykAcbM za`PMjzm8?cJarxLxP7JgJGc>b?e;yEf@$JPbf?ZDz~kaJ5;1f1fux=e%Ft59v?E#P9SSqDS#F zeJ8%=?D&%Cdu`h$we^2jk7}2yU+J;fsUN6dPsi;i#tS$7PYJs7j3B8kQeSVcow;L{ zTBjGqWu#M8)~#Z-yv1G>U%-ok$B9GNIKT2=n}Y$j4QGz$$P_@v9iP;G?k?k+xc)>N zbmDNb)chUANuZ=dd(Bi^K*fu`uEHk4}LUA7T%dSZU+#9>;TmKamr zvNXnN-Fn@P=Ch7$CEAQrL2cGpwNM>3D|bE6wUgR}ql5aB(Z7PeLWGU zAn{&rm?CS;V<{SI-L@!AGLEf8TWnvR>MZKwCwxD$C(hIM`I@^t7^a;% zRrlp?Ul+w`iMH;RP59cjttQ5W_Sk%)cAcK)5VQUTv}n@+^g-AA71PCIC4KBfiLGg_zo>yOW$ z?=HvB$bLKV>Wh3w=M8b5w(ZRA>uqtqHhoWf3Z?G0M>aH}{c*fKy4&95f1|8!{)hiV z|JrM7Zha5L^>tV``EGu7?UoQq@0g!#I&ohcFJDp{(;!B`-+s40hP3S1T?ijRpO>o=!|2k&7 z%hQ$OqQ{Lk_cN(wb^A!|=2&%}h-KSrcyU5Derx|r?D+nKh1$8_NLL%6+hh!Bl_O9*4)%) ztg&evB)-P+?LYga*gJY?Jkoj+a|VZ|^yslyJ->*$dvkAzm5N~d`*Z?8fD~?02HgqSJsruI% zdTs~$Hyiq$9nk9y{eceXF+-=iXwQFo9!LkZllJI^hJH#1^a?}2rUQDlq0@Y$J^gD9 zy`#DGW30lnJLhw}FIuQl{P zbs)dl&>K6DuQzlw;dcFx89H4T+ACj#3WlS@`Zx5BD$m!Iayqz}1%1 zb&g+-Mwfb6-190b!?NreEVGF3!D2^fbhM-$!UbI%!m5Yese*F2?`6g6or$-7#COEn zWr1S#jzN31e6|k~md`r^NL~bry-a?$34ERsT03c_q?O0KGoeN@ejUl?N$+Ta+(4iA zHR81l4Em;*PGeFS81a=7lm=$_rk7VRY4hz$bC!1rtrd9;wXgSV_#?dr=6fF}%{~JQ zyoX_5`VB1f4k6hz14nuLkXHc%i@ax(Y|y}QzKSxq5#oPRc8h%z2&Qvgz;fUC34mb( zCwtYKV-Zdt&A0L@yl*3XvJZ2QC&kV zT{p~EdgcV?8D^mL?#1NIQ)uaO`n=NufWr+n==}~#JtGW^c!$BLXQY7{UV4|yGs?(j zdFK=JXajS+j}!F-1EXGY(lf@$_VqpoS3N}r=KD@7W1bTYZvoJB<{4{p(0gk)`olfx?@oXCYIs)ru|K?u{;o_5-vHNYccz8k zg{9h$)51+~qIP8<{5<7v41^yeyfY9!UC{&K-{S9v+DP~$(tlGV{36-=MI`(N0$uw` zBzzI^e-a7rz~38cv%>FyzIjzN90lIIDL=fP{?-k%70IFH|TqJ$ra-@SyY=xjT<0;K`-T~q|0c`^w;D|8sIT@by9`fxh zYu-69;JKcPdnp;msOxzbdaTQ-<73eE+(CbC_6M zoGQ7<{2OHWHcpoo`h)|0s)3F_LPgj86s2vHj8a~PB(BccC;^|t`99=#TQ>(ll@s6D zqU$}rpHDi{^B6k?a3YwyH;@KorXiD$%yyDJ{(*e!j#=F=!`~LrkKo6z$yos?d)DC0 zCiseRX1(~^R_m5s@=d(#{b9JvVW_ z9n#(Q5Ll&>{UOP3q4IV60hMnxC0QDs-vU;{crl82A@QBU$%hvF7J{COn(0p7oM1Bf z_-rTH<38lu_}nZ$;qwcXoJ`3rDtV@kYqT70$kmeG&g5KTZ#GNLV*8L~F}fB>UJT~v zqq?$6#|}Gp@si7iEnR%cvLDV~GJn{V>iJicOr9}p#_T1R&R;fc!u-n@4;w%2%+fPQ zUOchv%#kB5p0a4c<@0MUo{03MqN2jG;UkKs&p6}a(j|+RF8v`?Ege>|WbviL7R;MJ zZ0OKgbC)igy=2+YrL1)9EHX69F*M5IjI(~X|#LyAL zhYn}F_V*T*_61d1HDl`KNBPZ>kH1CK%-hbGEccA5ooSNQMfEe;-ZW`C)Y?mN@=)q0 z_<4z0GGCSW#A<{ue!3)!Pc33XKlZOeZHdnel>UPR_ZjH(-%D`6fk8iAu*K(AjgpP{ zmk{*}L(TBl5IkUDRvIp=;!DGu12moC`|sLp6tI+uCIkDX(PdRM8<_8>E2U^b=O7;o z{2w52;%h@K_S2c_NjWYl-)87O3-ozTNWf5F)bg~&vR z-tm^97M$(SFOlyFZ9>```YqDF(0rWzp)#D)La!n}z|#30Kp2Fmcha|CRzq)?Uq_ka zIAzdBULHf{&tW!ll=4rR2xyBL=y#F3p@pAHb#DuF{%EJ^#8FHcZ{Wu|o6h=cNSn@@ zoW)+DA(}l4x|#47p}5XbjKn7xLfUD*!rgq;gkN+t;TOl7@LvZr9`bn|e%=K*ag8@Q z7|~lLdvf~PjcVDlx0zHk|71)jWz<0Fm$<`{eGK&Zj}SH2z@Yy;f_Vl;{D%nkH88`! zhhRSgv;0wl{SD0V|B2uL1EXm)$(8vA_Vo`#*yKP1^Hmp;gVeMcO`AH29Bfdb>Ljwj z@QzZQL=G{qNOcl9)WC86Tv9yDz+(S{1PcwEpt_J8&Q~E&m~5)HD@PbZ6{=;+k%oDO zzl2IK%D|ca4FpGX3c8gy%b!J>PcYO<|Idgz#!%<^A0t>~s8#-_37%-Ei~Iu!jy2S3 z{~rjRWT?yh!wHTv)Ea+;s_0|`ul3UeS)QVx$gAc4rMS?@Qw_#ujX)Oh7jtS1=zyc& z1%D_TD(x}U6EM1k4#Rc3NF$EEOz^}fz?UvPTP=w$_5Wtr$CzPz`dWi1NFN|>EPM+> z%fl}qZH4#aEW*pE{t!!V(YeI-@6DvWr8UI-Yo+rerSmPNb1u??v`zhx82;B&?M|=3 zo^>J@Ju%XCUNZkGW}Qr9O_#Bhe+soGbU<5L{F9RoWXGf5e4ZqZpBkcuOEMq-sB=@bB&w^$~^5iVmN&_{ELaQ0c*M*D< z{Gpj4T~MvdktszX-I0kivEsHw^uW!)QgJ^z*)p*N)E|gF$iGVL$N5L%b)2siH-mbe zxC`m!VgjiZzeAdfFk~&!A88>r;4H<3pxWXVq&;E{(q2)8vrn9g9KX02deX#FqywS| zvO#eMazf&-IH!wzaE8TJq$A>6oI8mz$muMGAl*fTz@H&HLpD=EWt@7u)s2@yr!2JRh6)V<3z)$-C9Y<+5|miHEv%lhnUO%+}mgROmrD!e|D z-G7~?N-vGU*5@m~cYqKO{wXhg+2ut~v~*Bc`E#k=#$C!g^VN zN~JQ%ZFdCG#Z<5KS?WtsrTKg8?!pmy-{%S|mfutnUt> z61=nkXth!jaZINLKnpi`ki@-cIxPTN+(2LYYs6(47!1<_pd}29glPfLk_KjkX#vo( zxu71Hmz7QnfR@Kl`=-+Zpyf3%Kb;l;EuVn}>4(vVEWd$;>9hc7r5QLXofZJCfPqEn zXOnEuz;R((0JK6pOW7?B(*mHC&UFFH!?XZsg$>rhCwqDU5*N|bRpb)p48 zt22Kc<~m2LU3?QV)9LQQ`im(SOFy4l@m~#;;d91MX4Y;4ed(7G^*vLrAnQagpIPto zIZ)I^+FN%cf^ zD`3K`fC;k#hIBnE9#1st(+CW${56Gq6rUUxFNmAM&V|b-xl8 z`5DwbvC@*we@t*VCl2}!7wsQ!fH331z-7GPWV}!*N3in)@n)1E}REOLn3z)`8$w=Z7~z- zl6hDN1dDwOW9AY#5B$zii$p7h@;|y4x7xh{$HKH;q^Ek>62?pEew=x^ zPZC*NK;#KkNc#C-DLtCghcSPr3z$X)#QTNMgN_1@#Gl|N#5IJp;D5MDq9>6;w}ayw z{L+baC=0($a^(S(pWA{(aRvPh1a=O77JCH|Gy!P=pL1MGttTlM=J`$XYDBvcVALTk z_EAFfzaoxaOoNcTw~co7py+?F?17s_io(zFQ_CQ9vnYDFLvUVXDDh8U=C7R68l_06IfW}v=V6om%rn?*64>-83W zvnWOwL;7Y>j5N&pW>JhXP~R+y(flXMM}4y>PB2t`vna+Gs=iso7_P&tZx+RghN^EC z#aKhtH;dvVL)ABnVw|Dsn?-T5f%;}qoT6a-W>K7KuyeC0ia9lgAm4&E$=7gd9nYiB zEx|k|@w-XIA@o6g42Aef_;uc=@=5$GK-Pu-o-#5yCnFDQr!x3oD6=nDYU#7J zk2!?<$=n!CFsi8-8T@J@lxqTg$d*2+2|^~{M5?gn?Qqi~I_*U7syvyaOk7W{bfX~# zi@Ce-$J|w9{TW*AL8`F4`)y?6R01~5GosyJA=Rhr4CF?WHDr@8KVJ#kVixF(hJK6D z`lA_wZlrw_=4iy<9B51)hSWfjw7`@+BB{s7;@?^yjmnp;?_oqeqLiB91dU7b=G{g+`z(+970`qX@fg?Cu0bf^)OH7Obu*au?2fSsAiT6Rsv%u3h^T6vkTY-Pz zECOHQECW95$*==GarOj8;Oxc!4GmTHloPa$8BdXp(<$PCOL69bnK)a4vtdXC&Vqyt z`~W$2pa^1~z(TF#kN9KHzeej==tma_+=DC@*oZR^Y{A(I`~hbXSgHK@5NSJb0B29& zTb#Xt-@$?}Fa=uufha7bG4Uvs?q+)HE*Q1f+(*6eF3P%-lC+HDB~N~)5f61Ew0=6w zV!9u?pEw_&;#hgU&_%FnKSTk-qo>e#;(U}si$_nPiA4LA){+rwBDu%4maGsx+_E=o zS`J#BwFG1_m?XAjfCk52s6b!Pj=h}Z*y~A-y`@#kP?QYRYnm@~1*v*hBfoa~uiELL zcKUtobR={KasFL%W@x8B)F@Ls{V#37IQ^-ngb)8eWxEn5qzf^#d zkvR*NF{_y5BUjOK#&}A0T6TFgvq~w+I?JUvcj3bjIes1jr;ndPI1SxAqbur-pGV23 zk(Ie_4#5Z@pW5{T6ka;zIXoA#g>yfa_5=*Zpy> zN8?<#k*;UlTr|Vi4m@MHy6_y*MYkgQ=ns|*3~QQgm+|ur@^cr3w~SO!Q{%g+*7&rH zNn}QW^FV`l?-KKYxJDHGoVdaRMqxQs!T~DyB2pNky84nJpT>IfTGD|3)W!J3mV@VY z=;)<_=jEj2LHv5F%JXuf@u|_I+Uw2RR^L|0Bv;>`k%ObNdK%1^(%o<2`2I22;!ZVx56fKO(!=S^-InNB&3_hLQD#8uYJ1Va0t0M)YH^`wh&X zhXLZ}MwFhP;fdJ;hDZ<4@Wkvv1Ec<}-JxlNVeaeihbN5UAp`N>a`gaw*uVn+!ft?% z7+9EAira9p(Wn}wpSJzNTBlqt@?T6o{?bs#u|P9f+GJ5Id=+AV_$?ZmRxwcMVluy% zcm^3L{SktL4fOfD6D%+=sO=3AtCYQnznWYhYN%QMs|gM>Fvow8N>XTGR6Uvy!;NfT z|5Fs+5r$ge-%fC(fraWxg%~9^DMO?DUeY|;P>cPor1=B`C-_h82{^{Ua{pq2MFvjB z1rB{qoG55hRZz+kEHw7eEzrP1cjL@M58-Tuc9PD}c9d6!_9KpVXfBL;LU$nT4Lyu% z@G*$GKk~-gwT{&u3H-Xm;XKOvhN={koA5sCUVru#B?9{9EYoW#Qo{t;YBpNK+oC zx~BWxeWa;Br)CVR{>>y(z^N9=?1NN0!?<2y4Ei4+565tN^nrPlKTOoI#%zXvGiVxrPVe6CNmTebb97RSS?IX8|(gEI@|L0%XW6K!(f$ zWXLQ)hRgzF=sPIE7QB#IfDD-h$dFlp46Q;HU;#2@79c}r0WxG3AVX#WGGrDYLuLUo zWELPpW&tu}79c}r0WxG3AVX#WGGrDYLs5)7Sbz+f1;~(DfDD-h$dFlp44DPUkh1_8 zauy&%@dd~T--pU}-PmHb62$#nr`hx7BAb%DqO+Q29O_J9Y8RSn@^7dm;a)RC(gig` zW`SnUL5s+Ypmp%GIiHN2u1d?d z&*J3lUl53`x z*Tid&ssDTEB8>3uOf6-b9V@bh8Gs)128 zAG4>KO&NXtQ+tCt-B1htXCR373F1{V3J67?Jd$N6&zo@-#SKbPQ411I?N z37%(QxxW*sI^RG{u|^ZVKyBv`e}#+Ul)tFi*57ar@lSD1rxS+ei8zN3fW_)#sTLx- zV^oX$kQVX#SQmlX>2adwsWj_+ISh+cT+pioU2X+gtRg0?lyOk_J)~6~ub`z(z!;Lb z_y<@8yoby+BP(;k6^ySVLInLObJ2Xjd#3=F6TEEx)r_wvYAs;b1y?bCA0g`w*6kg* z!S6puA(^#+@dqwMdIR{n?;z5H^8invK7KLT*su_A24MFfIrb32+W@mKCan(>gw`ID z5h=cL6fAO|J-=p953?S;cVW)lDJ&UN??w&CxJu9nLG z(#;P4Kv0wQpVkil+rM@AXSLy9+z$W8dma88+VDTz4*!?k5EE5i+L)5;&xeXXnpEDy ziWigM6y7e#!4Z_FL!V6z439U)A!ueTsE^)l5maxY1Z6dGT?DRN{xH>Juf*urADYIZ z(d4N%)Jrv7dbJ^sD!4bNmhmHksue{!HKUD$RWs_N=zjz5OEsRWAga8dYDjt9w50xM zN&PrACECZrxg$XT^+K{sU$rB!fM4whc<|&ZS%5aUq!xN1f6Nh> z*hXM}I|7UN9!KEDHUf{fBXAWDqJ61CKi5WJw-OkfR1eF!Vx|YZ$^NJ5r+&G-82S8# zL?iAA!ebbvbR&L2HR98dryB8#s#VS+s2cH0su5pHST*9EioO9@HR6|(8}TddM*Ny; zwsm05SIzcy)ogi%ZnSTxW*Nbwg8{11{!!sVVBKurbein|wZ;D}1uKZG=6G+LW;`Rg zRqp0zpkyi{*Mc`WBJ@lpwMIYU*E#~vw-NYM2_(n+sE)T63$MxAvyp=%m+z!OBWlGj zJVQV@55tv?chsUQ&w0pG@$O^Mps|Rcig&I>gT`{gD&BdD{s^#&cV7kLgGN8gHE0a5 zXwY~8tTbrkD`aE+P)C2DMT3SD{XrHD8QnqE(I2dE0kDpKfx@t(qd!DJdZeJEKh)9} zsEXw1pKQI33yq5YRp3pI&%?+`js7Xt5l7&KHUeL?BT#G&MkJMm5Y}gtEu4rP#*(XR zrlpu?wqd?ZF{8T9g%W;mqPngF;c*(Y)fj)Ts;&o+r>bkcivJdZs=Dq|)wPqbs;>JL z{Zrt+b7^nD&y_gUm!Gcd4_JRhLHIP zd>(Lq3pKHgiXXa@E8$7&EO@UedAjX|kh3$>o^HhNvaib$}3dnH*U8)(W>^F&L9rkH% zcBP+g|5JzJn{~uix|y}^so>4!61oSOQ4~?fM$8Wg&2KB4r*9WZ0B^-~O)cB2% zgHSXjP}xSHwjF^{@&ZR-LmPoQC6GLjo+_30585y{D`o_|69s&EBH%Wz#c$CBKsD3l zD&YN)rvhH90$M~+1^jvy@G}UjfZw3#^gv2Y?^Y;?OF9h$H>w!l4w{bfO)ADu0P7gv ztYZ2C(N!y5rSL9bJ%_tR;WqPwpGw-Vph`*8h~%JWD41MJcT3ujq69{PoGdUy!Q>b| zs$+O*8)ma;m&>1qVg5=YhCc!8WL$Q23|~<(d>nZyhOeri)DcuMd`-phU0~g4UsrTK zT}AK>cLd*55u^(Zwb{26qU)fJ=i4ftCjjeszN6xG8nAA&^$I(;(GBfKbB}x;lO7eE zS&)P&eW)SeTI8fQ;eW|59D&>02t3)2z$da7BBLz4-A3S_N+3D>%{u&6G}WC<MK*UuqQ5i=$1X5bvw|pCis@P0Lcx z`t7e)C<{62(X{>bGQ~+RxH9{oCeg-Ctj-?NVzhA+i?fF{!oE$s`f7ipQIUGb%|4>h zIK6UA8r3EQEPr1FTPq!m4+C6BzJ9w7xq(%7PfmMkg0uzSj=u&Oq@AsH{58lRy#{H= zUxN(N@{t{X4KhftLE7=xAcOQ8q#b_^GDxpM+VR&QgY+7t9e)inNUuTK@z)?j^ctic ze+@E7uR+@J*C2!RCb1oV4KhU0ioXU4gmA@Qg9Jpp;;%u5RKVh|K?dnHNIU)-WRPBi zwBxTq2I);=JN_DEkY3@n=aq{u*SEUW2sbuR#XsHAs6j*L6QDNUuTK@z)@O z^a_qW#!%-4=`~0@{u*SEUcs?XG}J{wdJWQ!zXlnkS8(i;40TzMUW2sbuR#XsHAp-D z8f5S^3o!8-WRPBiv|X=3rqgSXb}_#l?IKWN4-mKGsv4p_9(H_#MvyjW*zpY-LE4~U z$2VvMX@iCx-=Lv`7T=%|qzxK&e1k@iHfY%K4H`k(pkc>1Xy~BDH)sTDgN7a7pb?}E z8g_hxhK}JVq5I6JAZ^gF;~O-Bv_Zp;Z_o&yitB+L-=Gns>!F?4ppi}+H0%@AjyKWV z2Yuxh>MUXD`N_M8N8}7-u}DQ8hO@{7^cpL2A#y}yUlapaB!o1+oiP^#&-!10A97nQ ztja~yj1LTHb%)V|K(wBI_0AMT&2esbnsaw+3y5@UW8r=Aaz&1z+n*p6z}hrrrv9xeM< z--jSf1#9nhXpwvgNzMa|u7SrSaS%UV(`N%9vE@2>dA~uF@tyk zX~7~jX>ksO_;FHFPu{$sNTZP)tac2%z^O^{saV>u$;gEkr^q_TbTHDF6Y|$Y6_Gmp zQsfOenV2tDO=ml>_NdY#*})*Op}Y>+e2>LnLqXmc%-GM6{h8lUwZ|e=&mwP_s?R-2 zGywO9sEzi2SE^qotW5nw;oZQ6)O0Ty#Mn*v@f@)XI{VN!)z0k;yNdb?P+lSGAaSQd zy(~`s6cisE;wOsD4t05)S`JDTQ7gsU4)rdg4kx>-K-omp#X{NKL=+U3njU{h@Ha`i zfU)h!e=^M}>_dVI`*-AxP+MCc5=7%u5jC{>M^s<(^g|S>6Y-6LYHtegkSDPS!XH(* z26!a7@I6e_bL77x=;@$x<98sk;nZ1!FrI@Se^>N51iTxRKA$78pAz&*r0YFL%xeb_Ez-> z@L6Eic{MeZLApiqVNfwjHQoZ%4oA&hbQ!~z5)wxX{DOEt6pEAqquIkSgbZNpzPRNN zRU}VDp0@mvip^x;;pE;cL!k#kyi(>m>AbEWd<2fXTqHvI;9zVt-%7TMJP4#d&`Vwd zT~|<%M^#V-JAuDMd>cHRE|Jaw-l4pj+V_(Q1t&oBm>@!QHAy__A%Sy{H{>@_;4Nxm zx}30T-&+;l1w3%^Qfvi!%0n^O3k;jPNCRG@P3gs>`SoP8i`VV+HDvNVolpGsK&9fR zWVCNPD(Gg4pOmCxJ5=aic#?VvYyhbk%6pR+m0q5Mfc_M}8OSaQfmJzN>7{{V8S?T~ zo38Xy$etoxMBZpjqu7v-$d@@v^~Z#NL3pmhy$1nbNG{Eb(_#7p(lFfSWOidAp7Vf> z-d@+k&~TfY-_^()rpB=0HpT8XQuS-{d8B&m{10Fq+fg>TI%F_@D)yrly_&FUt|utG zg0Q5fKStr*!1^)GIED8Et1h+(4qbyE|Ano(ST4GV>S8BQg1Xr0NaQ+fs*BA*4vs-Q zN+o-`O}$jm`lyQQ(<-jlfM2)pXH{IDAbCu*DN_GRs=QT@9IPb&r6hU9FuMMNi(11! zNp28-DhjzSK2BBS9B9OUp^*MV)9Bh#h(4#SX8MSA9`KM~lFhC@()J@@c(I0ZCi%Ea z(|KV>(!?B$aiN(!{5ZQF=~SdiYcoNJpMe_Z87t#iyz;z6jY9DU3C>!D7^> zK2#X@kOSB|K)2rB)$&qUHMic$SVN)e z9&B_PC7-lta<4zlv&Fg&KGMxN-Tld}W@gd1e}jDfV% ziOFY;C~b6_&g5?mk@n1&GWnc=IsUPvc$sHvJiQHG#_zJ! zHh3Ao%Tn9mW&AEnZG)GIyDYU0UY;mwQK{G=d-6jFLa3ZtU#J`6!$YT_?yxR#0HL+V z-vlbSCcZ^nbCAVCXDY5r;tJh{9Bhz&f_P8=jpm)wNr3BoaIw&(igy{#R_J=1v5_2S z8M+T=J4BNcPv{w(u^IhE%9^=b>$q?X=~$w?`WVW2=zg5xRS~l6**T!Xt4rn**CmQ; zFwQ*G3uh}d9lpV<5dPSg(T66|v+SkxievZ}&|+UjVrau*+A?ilO{QquwoUBUQbDnQ zI!tp8dpQLMySBr$YumnYq6&W`{AY4?6)CjxI)z6N=dBub4i6#P8jZSyO9KT7cBcR&B(&EJKNr@5f8VL%4apQ!n7ycex4$Z zA~3O+h}$!vBZ#}-8*PN=|80K8he&E)W9@BzcHXhufk1WA@7PhYGfi_Xb+6c2zhg%i z7q#)(Dy1Yg;?g*n$$#7rt!}dWLUWb}_n`A;W5zU@l1Fes=r*?sXa*3UnnhL1CsXzD zY2DTI`YbZpZzyJyRA0`)XZ4`(bnD=8l@j;XCSOQ~dhdY>dOYW@QD9P)&@9C@&f zBQGjPl1p%P8@c^$g~oZu!v)D&)f z4iJ0=koDs)kdu+bZYu=%?tq>;gP1FcX1Y{h{9+ zpQ5qQoaT5Ff&cmy>b`O@Pe-KnE7Vt-SMizmyaDiMiGkAlHhhvx4fJ_`OK_QiLGP0U ze_&w5yM$z~GBCqCmEaEz%<@e*4O4*{^I?JSp%0ZF$Q-YYD+-At@2xETo6NB%!^h@El8@$2t-c9P)8obf+s!!hC zVKBbR6rgyM^FeA&HVaJ0pH2?;Gymn}|D8M=Y$0j)wI+g=u9oD|ZwWv&T`kF_t0lQ~ zy(EXF&Y~s6_AE7=^g5h)`lHmc(%(l~q<@UFOh14#mPnt60ne$V7IITRAvyJ-wsiGP z?v(ng`mjI@+ABQ1r%jI@+ABP}J-f0yDMxrKawf{Rm0p2kqm6O?o= zqM3Xi!p=x&r5P?@#K?!7s_C zH|vH$qC3UMIXs)Q{U$&AE994gA^UqIE_FpNaaS$LfslraL5a9EPcdQ0#oR#e9-qefLck4npar`tF-l-+hznyKho` z_f4wrzDf1nH>tk+Ce?S}r26igRNsA*>bq}JefLe$wpbz6ci*J??weHKeUs|DZ&H2t zO{(v{N%h?~slNLr)py^d`tFtk+Ce?S} zr26igRNsA*>bq}JefLe)h7e(?zWXK@!ndBxrtiMVStAjf+s}+4Suz` zRQ=I6@%b99S$*_Pd_mvAgjxO3H*w%81fTGSw{* zW#YX)%1k*ao(CL3eDv)sC?cau5kC4xG{r==f~1H(`bOq#`ska8-HK$0h>GhoN7UeN z9BiSf$R~JbR9Bdue#*_9gb;2PIY76XTR8D{iguFE@sBaGh1Ct{@Axjw6}~4QOusim zGTfPDo;T1J4insNn1kU)tn$b|7#IoDdZgT8m@~pZBIY^+v%+NrUobEyya4S-zGz@H zyp`;}WMJR$TB7bWFh6_&!Iupz2=63SuNYVu-cGWw8aOKaAW>g4uqeEa;OhpC3)5pz z`39#5T6x9cuSoMB4Rvyu9(2k#Rb=o#N`(JOvTvyZioCTsVfDe+w>b^oxTxiXA0W%` z82Y-LFg@#(4g6~aR^;8E)0wV;e=_9SC?KwZ?|ePJmtj8IxwM?g_jsm)wYj<}kS*0<77Lw0+^SjCXiV%1pTzvsF8Vpx%OcNF`QGQf zkd0Sz^W+af3vZ%Y9iY;5cb7@Ens1=gt!kjut;!d^iXt$`z#t1;3k_W)J;KX~jHcKQ zmcs!urRSv0_$%K*9+P`;=5jC2mb?Sz1heUX>+}@UC;P!W@h`+n&r+DY9A_?9;%qVd z4E*t&_Iu5Bmd^wFlZrkP;+9;4vyfZKuJpn)53}FLmCAG8hg#yIi%3HK$Ek9e^5F*M z!_ROQaz5(fMP7q* zSH2eKZt8Ror5?bEE;X)KXtHGYpl1y|;Pk#uCAxb7k~AhZ6Iw?SxDWMqBlIAR6}Xkg z*UTwI8|Xakoa&+vyUZJybQ&;eCOOeMkYtoxS%D#QC{) zHG(|~6#OrSL1TK3C&aUTn3ybGGM9NGTo;aYp0{)v^K>!r|FHKZU{(}Y+g;s#x9NLl z?yL;M00T4Ziy%7!jsl81t0-=)0uf|KjH2Tfm!Q$OM-$vNZb{r?5;d5(#kgzyG%j(A z`+~+57611=Rn@n9<{HrG|9$`eeEmH4cAZnF&N)?eYOk*H%S3RE(z4QJBDuW*vt=T> zUTN9+GLhX?Y2j66W2s6vIn@tmRhEe^1C&;#uIw+=Ww_GG(!t5^Pk4knnaZV;qt%{J zPKVjqgmKCqWXjAFFHQ(l`o|&G`3_9&gH?9~sK&h{$7f(nGB4oURdF2uj78^`*IBF` z-b><}RdIg^$|>$8@y)8ZobZBGao?={lSrzxqs<;#>+)E-EhkHqUvnuYJ zRdN4n)JeFP#5b$r{%?^nxR=D|sw?g#@y)8Ze?N>7tK$BFq<=N$z++Y1 zH>={lSrzxqs<>}f#r^Zazhzx}obsgS1$?_I?uV=5b+)&92NJ4-o)@6AUe62AGVArc z0G%By-4o!LDD#O|5XX%oGkgcrYv&|Xg(ug%C`?;?0r zmsqchv{%EE$iT>fHz%SG_y&l&$oV;!v&dcvRF|J4_th1wU49R+D~qAJlJ=t}ckxi% z)l~!@gkK}ASp8CL`V6O$Ca$j5kl&SNsjeYc_l$JYmy~@SjqL>lY`O^rMqN*EGr(>r zp6XXDp5+4pEj$!_e$Aw40@%HYGJiu*P3$I<3^x$i5q?e&m8EZ4VF!Rss(;fd9(qv=ewF z;NIAQSu4z^0CM{1etHjeDcP(lC^sLzo1sEqQD>FZm1hFiR}y)(l+xb-?k5R*m{boB z6PBc1Bk*T{`%B^;F5$6fv!^7{5u%QoibUbku)3)rw-)_dZiCQrZ<281fYWks7P+$t zOa9&>a0_6q$8SaMnSi$uJ#N+2))_{P-x)Q02p&kmUlau2jzFcbTrKzup?o70^rZ+& z4Tk?AOsUPnxEtYF%+{|29t*htk73rzakV)){jVXYTw`nfH_~KX1E%};W?;_{XQ9?O za^JD=iODRmyd+d>N1;51VkQ1#T^jgVgimCA#on(?*VHg+gbe8-UDb< z6I>dVn%YZ>(Jn4c>Oqo99_=bH&Is(G7LoO@3Oc<9qQ&U#_7~gumB>&N`^lD(U%B)t z8v@G{v;K`p><4%tt6}@7zqWZ;= z*p=Wvv%#;o!S8Gn{Ame}>Z%Db?x7B3B5x{0=tFov1a)-YZ;}XA4FxR5{<$P_55PK# zU$~?l30OyQvqW(Zz!1R3xrf@3iNCC{=YKT=mw}ldo-4tNF!;u z!XxdyfO|^Ttnze~0`_d6hpM;8{`a2Pq)sGMU2C0LlpuNXd*S$ZaDXzMdx5&nNABw9 z9iRv0Eoq%k;kjXeCAJ-Wnp6Ye{$gVF0;|cofOYg~$YbEE3s@(CQLuG6?<~ylAz1&r zsA7YJMWw3a(bZ>Ft)}Z_YxJ24lfbICRHIFpfWtfjU~Pci1XdG!OGVmUpi|-N3{yGA zXmue*i2HIxh;`cun}({RTkUU8H&2Ej4y zfxU%h+T;EHmK*kXAhd!>#)tXe%}J8A{%rLuL?va^IalWC(1T2F#src-&wzgNP^jY{ zY`}E#cJwy=`3B4;hYSF?z<~KAw|n{v4Or!*Zerjc$dqE*PfTY*XD$bSC$m5Js7yBm z$J*8yyb`lt2Od-hH} zCbbHMr0TE09e|QrwE+&^Oz1^i;Q67B^WI_gWUuv|;hD zA}so<&n=5!gwdiC9n@l5IO1CD3Jk`XF)aotiNtIhe3cD;a+}~6OK=<^bOKXp`!%>R`*_50=G4mc>hLSZop&@uWUUCw0Yk zCKBD~U?fJs5s$T|IL6t9UDHO!E6rDAAps28eE zX!9iM3$5TIt>Dw!2);@L#|?G8nq^sRuq+<8EM9BF;;SMoE>S$>UbJX8%0$069gO}M zIO5UY8<^I4c)5DbvN+VTIL5L#yA6x$ghf09uF@HBw+;T34gPkU;QnYy@eb;IX29cx z45)`k3v!@+4Rhdesn|vV*FM8M(C}V>E6y$WV^Mi;LVpu$pH0>s)L3FZE-+pP^wS~Z zkA?BIA!7~yF=VV^FusanKNZH0k#V_tgC(%0(7A-kbU~j$D_rBU%KswdqhU3v{x=L& z>#{hOjlo|>br&(5rqIt|V5`w<=yVNJWH_Buf$GdMsYWu~a)1r7%H_?UL9pcdZ{a7E zi}OluDB^K>rZP`16{&`1Y441*)iVJ~1XERX5%RaaKhsw-<~r;*{R zTAb!ETobG37B{~me9Qa}h*h_xHA6kQ4S{ z&Hgzm>>@p=E!^(x>GhJ?;AGZI`-x45%-9PWlGa7dOKfTZ$mD6P9}}7zUVobGN8Wb zIhi(~zUVobF`&NaIay*rebI9=FrdEZIhi$}zUUb7VfcFLxAS{CI~Y1IP(IjedwiERQmIoV?gmnh1~os`05e`rCqfX;@alj2uy zsfJJhzj8};F(E;FUDK@|y%%l^1IAl1h}yjgmRlj>_|akDg*MN<6? zI9xUsr1~3hREl4@;R5(16RtxX5~TKQHyR*`6QzEr75dP z71zUDf`$#^iTZwJ`-ShQp!)MUO0q zMrveGvgX4eOzV(IMtWcFr4vt!zp_ zbF&}lO>3}Mgfc|Qa zuyR7#I{@LUW!usobdG68%*`rnm0AYTn2)#(#q=p%R4*X;K|P3O3Qq!gHRpKLOeWl1 zhOSXunNX*OQVs+5Db#N|+^GzAE>P`cL)2-MswPzrV3?nf>}L2?A3*SQf=>X{`&iE) zh{;a*j8dJ+PWNl@tosNI?W3;beRCaZ!SoCG)#rqJM;=?9p5-)mvUHsrfype}aQeFA z)wWIRTXVVkT+5}y4skBoB3xbwxirLd`E@<@P}8DX~81g^~ zSqDn3?|~AsA47ImAG6t6+-7p;_%QTh3EiyaETo*{V{+~YDUTP*DWGgRLetS=57u&8 zh&iW?9DbUp<9CjPK3vP0#Pq)|CZ{_ZKuvj_P_7H*Tqncf^*ZDR%DFcda%mXyUI}>v zD7&%R039{Fo1Ek$XAM84IqgbL&&N1j9ddeJIK9P?64&R2(`JV3X~vSbg4i_fag?(Y z2Dz^D2Fj*s%TMCUiFtT#>IKbPZp+(#og`yPuVOYBMaPofmd29oGABp*Yu&X99Y~p| zKiVY{6WG#y_gf5z%`?!{KgQ)yhnqcQm)Nle%%*sVtACs!&Zk~RF8aqCuqw6PV1OqW zur@UhJp3P-u=T0k$@xSBHl%KK0iI-tn>aA=Pd1)CWnkc+Vmvu&z<#M88xX?=ZkJkT zz`=S4@u>zJ?qvE?&}r_O5RZxIpI(MY2VJ2W_SNBE1;4{TmJ4!tCC)h+zM#5*1H|Bl zA@tvbe<%1QypImJDtAA?Jj}c?h@GTE`izZ5}55Sf!Xd7nC&h>4Xhp8 zT>`V+B{17v0<+yEFxy>%lOP0l00ia`h=BW)u-zqiA9~>u(!gwY39cr5R}h%(F2Qd> zhwUzb+3pgU?JmLnhzhp51ZKNSV79viX1hz!06y665}55Sf!Xd7nC&is+3pgU?Jj}c z?h@GTE)6oEXl7Fc1~ognu_!1|#r-`+)a@FMvq|ufUxQ&Oqj-g45wn z2S?yPgMEH@sePE%*}R%_D){A68K4d(Yvgy12RNvOv{RZ;lH`kYj;3=BkfWB+0Nlos z@)h%zVG)=tXi%m2WDi>W1tQgoF+f(>P8WM0mAcbKXO-@B(JZTUr;E;N-RYtetWL&% zjVhN}=Rlxp6T?7y0YmQvust@6Ur1m!0I*|)RHrUw zTpoZ^KPSU)eaPwovic=Z9ax6cgA9EyLHX48A%g!TIF#{wn5D=Yrv*JqzZwE^0>NVh zM+3waQ&T806|4H?hE`ENr6_VDC_Ax_3ObfzHL3G2d;~TRhOiBH0>(G3w-DX+8vM^0 zhrWfSXyO3$N5J6erp8mf_63Q*g2!F3-Hsx%y@-4mxbCuM++NY|9l$+eLNS2@ycRrJ z1S=67jBhQtKQNfhjfL)RRGt!1`Jgr-50j9{ockdvF&0s;S0_??T(d}?e9&?G1in2* z`C+0wc6Rhq&y#MxQnXV0oCbdDkaaqy^M&|&;Pg8DLb0Mx0r!!eNIwv`%T9#J>=4DU z?*Z;DX1z$!uG{U5)%AZc6W2q(NZk9#DacD*#$g1AXk=$1Krc0wHv6y}Q*C!pya@JM zwTE5i`y${vil|3iin<7}R^>65s@wtC>BlYrK2UxS2-5{9qeveOztp0h)Bhx@cT6=f z2@vD|LlBoynckKP{oQ#~>v(R%&{T2G&b0{WI;*>YwVoBILwT~#=i}hn_INRs=VDdS z`)XzGSyj#uf4QeUzGdHMyl}7ZS`a9ez>0yBEQLg`%U*(s`={vTj}b4ez4H*pnb?O= z(D!KSVxC_k?q47$i|8CX60OKAhF^Igm=vEcp8}u63j8JMIu$?pG~Rd83lguoFTfP_ zL1?d=n%$DVy)z@GY;wGUCU5YNWG8SWKHd}Mr^GYKSY;$s7j z%W&67;u8Z-$h=1_J~iO(8QyY`_{@M4GZ)c!lL4n@UZwBn2HYp}I(@$|;Qkpo5Nxvn zXJ+KMu&+#v<~l)^dN>|aIqSP4awvYeM=>+y})0)^|i@ZZvc&fZ?6SPmB{R=-1vClT7o)q#0S zOFqZd%a)dg+(>y3$n7fc4fqgS9FI7;ABf`xC-*~fY(xx~frWeYC7SDTol$mjT$FWk zYw!=vawp0=ojXU~S;ynnAa~uTI>hNeWQe~YMO3aH6mIT$u=aCVxYM~j7WMKu?i*^z zeGWkzoZOw1taAT_5G`(QJ4WBneFTcH@Bz4jr+Zy*utXGpa}il@fESX2TIOy5QzX^Z zq`LJ4O?BHnr23ms?E!z4%fXH0I)kr2U!$q+) zP_X5rYxlqCL~o_cBf--wkm#+Holoc)O2eR{Y%_IuPWxrcc0@ege`vpa*(VU=zDS8U zY%uH$-$bi=^#h8_x^J8nihJ9L%dcF5J;d)?as1re-N^iaIP3|g^!H~W6qNn&%P{mO zHuU0EYaI78+A@{Bl9B(M)=Fjnz`$S9D$$uL<5IBu6>X3=ZFQlalH0VYZSW2w<|j@wVbjpX*>r8lUA9|f>yc)=VI=p6tUemQ#C3|f=nCmR~RI%6Q zZBJ)4du?7bqh8Hko3{gxLroYCDEYPC&0J0}1v~&2IpzZzrgZF`pToh}{7pD2`L<2_|!Abvb1o9LhxPwgW{n z8P&l|Mm4d)r^p2qiOV}XtC>{ixM+|C2-0QMTwrO{(!N)5k#}P)vRYk7=a0ZjbN&@M zpHI%rNc*UVyY5loEZ=4G>*>yF7i#l-l=EKX>`~zJtP0)*tM=06e4d7aDWlHnDcFko zG8*V|RNqZ=mMjLEPBpO$EkFa=T`Y$$g~Q}-v?Kdqn>YK=oz?=k5|o{m!*L=V^Wpdz z9NjHxkCTA80T}dMV=U@$RE%Nqpk?ubW${rP7P(#9vgo4rwJdtVTeR4Y4r;L{9C0lU zF2bURy3n#X#R z!-f4rz8?tREEYF4-w!0DGJG}E3}4OnL-Ab+7<|*zcf1=d4L<_ke!EbE@hcTa-G>tXgzfgd?AF{rwVCZq&Mq+eGj~N z7nWM6Q~c%NYr5Ui(+*MisFPY;R?uSg7^?$%2{5;6q2cm}?it7s z>0*0(n8SkfMQ+}n1~hj9@8upxWg62ZWA~iucoPkn&0K|bS8tLb&S$PCIN5+znS%&U zF<@ao+K&{&u~++cc39|#$*o?);mb94CZaPcOVUNO;8Qz&f;I?hQQy=ZPN@Y$E(82 zAOCaEfOgk6NjnxO^v#5JKe*kT!-zTFqj>pK{sNlPDu2d#5G!3Pe}6jJwOT`h12m+{ z-h?^&2WrSITS&iyG~|^96gyKxe%U_so28*d*%bQC9uFnl#$;JPXzS0>P^#?U$Kn9)TK2qvemiNB55`5ytBUkGw+Wb___y5-#j5T{fk(+-3{T$fFg zsZ^gLlv>^T7(AX%R3!mdGvFqa)9TMy!dKG=x2(%yB5TO0aZl>6w-&cki<;qGxYm4k zcwT`J)xzs?^1_wr!s!ZfS_J=UejB8&Bri3&wj;IuCBvKozgli!Q&-dPDuC@d^=Kb; zSKXfgJ`Q}{Z{c_q4#w*!{C7~BsqJ%!qJGfp`6ATgIjx7j1N}MXhME*-{c=57yB*0F zvnoy}bqv!f8>>%wF>PmwSXOC{ou%iHRhp&KpoTKk=t8K^pyNNoV54m?nQ$7d=!3~D z_8Zmqk|pgiuhnm z%*eY6DS-n~oO{4XC*WNsC3*;(yM;|pP;?gCxJS}LP43AJi`WK3>(~jtJ;gfi7vH&n z;}LvaNAPrbNGe?l2Q{f7lT8IpZUO%NFiM+5lP5{ri%mk}6#pxDnuaNkavnif4k^_G z1y46jM>kW3e)d7IClL8>-XzE(liOyI$=#|&riGAxDSoMy_`~UU`*?lbr%(=b>(Jk< z(U{g@8v~lwVSrivNoTmqWE=hyV875Q*H22m^n}QMoVR_H(;}2op8@u-@Oz2MuT^?nc@G zx;nY(@JQz-z>R5%8xYW+IzUtH%Ts7_L(w~Sa`fX+DLs zP2#x1U(D?12>J}X{iPa8m%R){{S}M`N6>?)&}u4z%q;5%DgNOU$N{v+GbjBYa^nRr zpLQYjf6re-Vtmc{Yrz8z$YY#74wC%YJ0R~TbsnI}b42Qi7*7AmoFzh2sEX zx#)JX+9bRADzJoq4zNeVs5F~RWOEBpIx3%&%@YLAfJ1#j@B@JDBxail<|kVrUr|US zzz(HwY#s<}2YP;J7YI*b_fU>3{;RrJP`- z=!L2i6n!vlV0vYZsxt%MuGB;XydJ-wPsTzvXgZ6Iw@c{Tf$J=tfZG-Qo&hXc?Tr8j z?w366=25*`YD}hEeh5}wGv}f%wD!e`v@QMf+#*t!^nnuz}eLVfI!S)XP5SeE~ z>PnYMHceA!NZrqsfZA2rpLgl~={{7KYcag65;A6T z?NAT9PN!a|1$CSL`B>3U{%(bF-G|iq=52a(w}`t{_jmX8PIZSV6#Jn_E$=60P^34H zc&D3Dke{Bs=VVM48!(+(MdF_tFq`7qqIaeN^QjBQ0X)lqRjK3Yd$s{85uA+wWUvlY zsh}G;r-Qfgp9vP>za+Q>|3Pp8=(E9ExO2e_{Feq?Un>i4#D6|`7uHZ7{1!A7!Fceg z4BiC3DmVq0>fkx})&x1=+XYVnUmN@#9NGsz!GB$FKWI7x3hw&gaJV}LRd9C-=7PR6 z)&%hK=ZuBU(0yTF7s}iN9!@Y7v?|yU|86h`|6b4)|B2vUgid0oHvoU>R|uD__1F9z z;c|~a5C4aBa>u|2Bsc=x0jbxMCWP<9j&?K zbK6n977dl>en{vT4OQf>CFQXisw`cxe6Hgkr{z_ZuAH~V@tMisSvakAEVVd+TkY|c z2i)?>8)!(j*5Nrtd8v!0(TN(c+~>- za|Okl=e`6kj+h35wkxJ?9s>kBOHyR@(cP-m$7b)1U67u#!ODAU1v%m8XDzfrhqp&me5{M zQV1`!FuI^eQPe^hn>{?}$-#Q%|4tia2kv=Wp# zbvE3QPtlO^Idv>?^Wm)@;7U~^ac3y9w-4|c7sm61c+q(Tbjx2)@XRuRGAUo~Q{f6d z&snJk()ZmMpT|IO3K^X$eq{6kP*u`Kyh|T7sq7Z@_kDuP09GGP z@B@Nqw95U{;ize6Mse$j)g~K9nd!yd`h+I?A=ubw{Jvjfu9(FvZm!>QdhuX%!(Hdp zf)-~@usWd7py2E@qo^j|&Bq6W{e#`GQ}^wR6kTk>RaT zFE$ab;?ht~ju%+NV64HXl!4$V+A`|wQZ8~Pj@M8+_awL`PGKO{*((U0rlDN!Wxb62g-C((~Ut{)^HtN$8d{3DWHffCkkV@Lq%AG1lQt;C;vO@~gvKMM>R-dNbvB%Gteb!50OOecoH(^-u{YN@M3kvTLS(|vT{MX9T) z6xJ@~RGh0BU(TH&f0PC$ca`sGuN9xE?KrZwkGh4c@9if5)ek(|kA`ChIGi}uA2`ue zODeySBxnoc1b@8O5+sWg{P}fD;1(x%h{GIFWU5tUL0d)sHrP@fVX1yXs`^-@o)tcq zSc+Rn!2`aTv7d&Ch>ZPRn1-L~G^~-G`k&I||AJ6WG6T7Z3HL0(ZZRpIk`z%kKG@&> zG9_RXMtOW7;ysAyA=xwy9eXBS51AXCCabR)AN5puW-ewIbr{Fl1W`vPG3_S7&X!{@W2K)<9hQ=rcd>g|$ePikHtojRC(>gZ7TWrYZ7$i>ivSQsWWbNQ9WPRF_mALH? zJs}%o$tDX~Oyg2_KafR>P9uwsni}fckA)|@vZZB1eo#|mLOw%@XJCyhV&+*fhf@ry ziW9&&@lSB;uIiXIb7JGJ=i#d}bdIYtw7+ccpCjM5t4VPg3*30IL3V#cBk5n@xej6< zOWEx1FHElmZX3zo0WK@5cy^6(CxO0AcHNIaVe}=tUY8ifEn$ee1cAj8>i21rOS`yd zkTo;Y81_`BTP)>wb-!t^eRBhy9%{yU+sk!_O;Mp~v}sbkSL%oP=MJJz9m+ zJ-u_)#c-ziJ%o3@S^+njTqpA+6!LziNShkqU93JJ(JzR+)DopD2wrADANvdeUSSSp z$Li(;$Gb|xafvKJDa;0uoN_Y1XW(C|>wre*c?h@CXa5SElU2K-s%U9RXFmoAM?Ra? zm|DmCCs6)Ko?etwSHP`yfKxvsVN>S-DxHIi5_X_#1~6r{2&;Bvynjfrj)BG!JQZO6 z9)ja29MzXuLMu1j)oX~=-PJhC*$5+bo%}Xo_U#HG_Tj{J-&sYo?|azanQ+oQ@fE{M zkgoT4`Zjwq{MJ5^u-T(;lua5itv6bx<&1pvoHG2@K9MoLO-{+NgiF+^;G51S%2hWc zh89p63UILQpQth!?gw(wYqb^Nl-!F%Nz|x!!6Iun+aCfp@>PbrJ)Nb6FC0ttW_#vL z85e^Iu%y(OqSNT|;m3xt_GtW<3K)cD543=!BvHw<{!uYe)q_GoTR~a;>d-+`N<+*%KkMp6g1jicC zPYobA&VcFE5Q5_km`zm>+{u9XR6Bw@8?Y)>PjG?(Yg1ha?qb0D)HH&-8nD4hpG!Qc@QnZHJB5(JA?~1ki8| z;k?Do1V?ZdF;L497#|Sv}=NqB2+LO-ZK$ZWDq!T$Oa0Mwa8lO}L;4#AvOwE*Fsm~Z!n(j`2&=?Df zqZ}@!yAHn;H5PRDBrq{g11#vuA8grzzV(DMYYBEk~e0qflr zFWTNo$ykh3y_XE=XZFB4qW7}xon|Hwe8u?U9W#lyGBcLG%7AM!y$HGnJTkMH<-(IGKAy{yIUDrto_hZd5Nsb3xs%dAl z2cJ6zyqw%Lc&J=^P`SB3Y1-@Y@|QiVX=T4%?$^-H$(?|ImAgPR?S;_LbWZ^Ov7c+& z6IqsW`ysfKdmaBO_o(Qw5&xh)jykOC0UE^WjFqJQHGG`hZunO@ZpCwRztenwftUaD zDVp|@`$^j#{y17o^c^O&JK^8Uor=(Y?ocR_$W2ACWbR|gPUX1O4PV{hKa)EgDN^Ei zCFFYj(VFXxocYQ<1eB9|4*x3mHvZk*=lJ(>B}|0epAkBd>kW4@H-cQTk%;1M`x|(a z*86we1|E7F%)NA?Lf2a}@7Iu$TMzvQ83AsJc?|sgN0_19R5_nAp5=};Zi=~*e*e%= zzKj!M{!2_yEd7+tg--rIHP70zd#J+e8fst0&+`1YG*nl{+ob(>HPj*OTiwB~;Ct<% zVY-TVwMMf5u>rV&)lOkh5DRm?Pwm;OavyBRQ_ zd75BP16E~3_dbd?j$`FAoQU@OE3H#~W-{dtG+@Wf0&*T{z)qQC=sVhgot>bH-ec55 z&?B!L6e4v1YHj_XyTMPw%XaJbDVK#6tvu%bnq&UyKg3X2)wI>*)6*PoCeVL9xMDw zz$BRbd38Qws{S5wMP!Z)nf_ff1ywCIet4I{R&RS;n%{e&j4P`fPKtIK)Xs_IWSS?};R$;)bUO}xiJM!{!u7y`+ ze5+Ejr?A@i>VqsioUF;rY^+Zmf#T`4GhjpNHZ;>-tpS@-vg5G50ehzIrf;1A`=*Wq z53hp}G(Zl)@ahdXIMsv19St}<)fGcsuaf~saS-QqHk_Je5a%@*&v7z{^ST&tf?nM1 zYQWu7!}tVwiF#`AgX=Zjk}pWt9$rrHHxe`i1Hq?dgA=?$kc|6K zrv_54z$ zn~m_i4%-MsiAagpQYeZV;Uk z(Gv`qPKmVLloppw@vszsPvHaUsRPJ=k^#$8uQ7+GD&_!piJA$jOeLvisjd*7?CT$` zvZz{9GZ?936_bJ^tRFMgPcWS7Q)3w9Bm;I#9m_0Rr<8i`i63hAs? z(zyXB**mOO(JG%ONJ~+x34Q@EzhpJe6+ettTDL#i-Gg?3@8R?vPB4Qqs(wgtZ-8j? z*)mkBe^J6KvE8P}z<(ZEEG_O82DuohGGX{nf;SQ5Mi2EW4f+LuTKa30UUh&K_Xde4 z5WJYmyh(6A!4qMp>MeplB)A)W-zNAof;9x+A$SA8DsGN_mk?G-XTvPjJQdUTZV+vN zzBQ6s^AwZopTOzuvGax2I}nq(l0XX-b*us0UShCNtQebR2f}E1EEfgw83B?GSe?;q z&k?r!0#_qDf6o!NhY^-+(D2!S^@iE=#Q#RX_{t?ot)D5d<_r)x*Nei>2xm31p49@V zSS{fCW*Or@CtTjsTu!8sxL&9rxSSkvaXm&GOW$?sUeb*zEN7J;a3F9s z()}9a(r+)ou!;NOOk9X8ty7nwKEVArp|r)ID9PC5@Px~$As5f3-!+;`9?k^ol{z(v z8GU4d%U?jzOfDk(NSE$6bf}#eiZxS5)rp}-c(Ln~5!=HVP||FK#5Oe(N_SMfX^6P% z0{Is{pymZPntHlW*Uf})N98beR(X=JmK@Z73#nHLbw5r02sJsg4Q~&8I1 z2gUs->c&_OjR2+2=Np9*`79f!ZuG_@2>Q?+WZ_BSqAtMlK$|6Ds3&8gp7a<=2{nPS z-V_UUc^GO_EYv1%p$#>kMqcAbWjzyys`0fAX$@;+nH;k0@vFQC%yfR^DCbj{tn2JD z47I-Q{Br5RKCh!_9ovDUCPaDu|iu$|Rf0Wjf z_sP(Ig*x-QgQ zs&Y%H)FC=tZSGM*hiboi=`XoUwO@nnTi^^-USQ(=k)+GG&{Q^;&KG4~+{^!lz$Xfy zA)#XbF{0;wf$P;szq@Ba;sgo{5r%6pwY zdg?rma?W9=$KgFD#`b%lHMCC}_32Mnf#CbH{jA@?y9v^??RPYbPi8}4Cj+eBR2q#Zrqr?kTk&uLiK=9{T=_< zp@)AjD8;`Y+{ggIGW;ilKjA+WTnv0VxC8&0;4A!>1i!+65WETBZ15wvb3qO%RvP>S zm@*9NfJ*H3Dr91(-`+1mramrkUpi^_vP!nUhE(olgi0KwAvZUefoE&T%l(~x^EBk= zj-cNH4JC5V)9(-sC3Bo{N*wwOgmRDfXY^af=%TxC4c%MF@XKcaTWVLT`@t&8^a2~5 z`NB$dzOYhV9$Bfbkd^96bvAgZ(O{(?SoKd4zDjI=G?l`#^uI!HfIHRH&;lp63-EGk zkvSMjr6bGIU5Ih=WAWEPy-xO1!th{UsX8K&)rKhU69kD%xv!l_5h4E92+3<9_39C% zl3Efnylkf9EJj)AC@uREI`0Ci)0Le;wv1)|C4g~xS9PYmU>4TZ7_ZKBFlvL~Xpa!` zG%#wr0fPtW2fm5dmE&~blnhp*e}tDQnQ@eJTMilMEEpM<%ysA#+GhYt=3mx;z+5b$ zFE}^rm!7WF%!yyV+v=+MJx|E3=ZR-Z9cOhyZaq)Pt>+23^*kZB zo+rjZ6(=FLo+sqi^F(*hdkMMqJR!H9C*;=igxq?bkXz3aa_f0QZaq)Pt>+23^*kZB zo+th*3rkGMt>+23^*kZBo+sqi^Mu@bo{(G56LRZ$LT)`z$gSrIx%E6Dx1J~D*7Jni zdY-r&JnIws*7GE9J@@vX0L|moS8_8F!k1gmlf3oZFFzCrvv!l@EgpVF3o-iE^W>K# zH@BXrwnb*9{8IPDIdG(T-MRbn3OG@+Wpj}G${K+h(q0*`|2zp0*AmhXk@Qu1^1Ac% zAo{*`s`ho$yms1s-T1oclbQ8zuuLJWm*%C@?wiKfOQ#w3t#h@npXMFX?%Nk?&VFW> ziH`fuZQ3)L9)f&w-@Q}7jj42w;Cqj0-+HIyM8u8i2i=fNDJRQV36gpXvYkeXPvK8! zuC+A7oRT?UM4=MqJts>)A)>4txgX~`S&B>Yx^s8q`EZufQ>a*$C8*LcCszdaG~CX@ zzJ|HJApWHq9%f-wXeW6c6>p@@%YLuUib9Y*d0w00H5ky(^V$rriviPlUYp@{HDET+ zYcsq?1LpI*Hp6Q&U{#*iW?+3(bFR%d5bSQi`aG}A@Ol`qpLpRKZ#k#_`WR>cAS|i%HMD~PV&$u!0f(2%cOCr=I4aL;GrVmK*qrCJ8QuT` zj?2r=wSnq2kuxFx6%x$b)(D!I=UH&xAVWMg&ucTh!3NwXe-XhUiiwVEGxEGP!y9UR zXXa_U9*%|--?@2So8b*Nz67iYpsAM0(x&4 z(9eHN@J$1z^E?sId&_`XojGsg_6|^*D_QrRp{>_hx6ybu z=&XC+fK58yO;E8}(;Tw&z zRp}?1-a+anZU#dq!6CRxJc)ldk)w#j@%Z->AL2iexDxne;wrdPiQmGVPRzr9Cb1L# zOA_}2A2`V+m?TIHxez?7)+C2_#Gos~!-`P}zKSM(UbS-o{yrfn_eBMTXCAlBh7a(ueJ7M@aF?n-CdA+IMy!$|xdfiX{V0Wg| z-Q=-|P6$koCdK0Y0eOx0CDZ+=;Gv8Nz;t>q`YxdcUgPWO^bCSaDHgsNr=%lX3@Yj+ zosvBOFS0Op9B>XSx$IM5t9iS&dl7Ee{we%x*m(fN&Vy6^NG|}quKT*s>pJb#?ko1s zhO1Y$b)0d7K!r_Aps8In2dB9Wr&CR=mD8q%qeFu!fc6d0UkNa07BKoY*>;B$J4cbl zO`6RR*oS5_C(33{l#Kv?CYuh*N6b|(#n4Y^4hMiky(rR$9Gr{N&6r5x{Fpk8(UPZe zHgXsS-bn~gBjH{^wU?toPNT5J06QPL3dgaXPVjdGu_!0N0|X>`0=`914r>#zWRBxB z)XjuE0eb=LEGHEUIDz1y^X41h`2f3I&eS|(6|}=9$Bt?ib-gpx^+b>?3U$4cx?TyC z7V&2)cQ<)LIRV}yAleA%%>^jB3fK-HL`-DDKNX7T11$Ia=;U~cBBle?{sjD~r|8oH zSA)z2{hbom6I@Ov0^U!sJOp1Sct0cc3?r4A2T)S>S#}BP0BVh%BRGPf=qunp1QD0# zDdsQ$uobqr=&?P7;@?#bp%@&R!|dLuvwSc3H%d-s6?Mm0ysP53ovqeN4-4r!TDm4R zgZu_6MPBC(cARq{^B*AWCJYA(;Vr;*!+iBX#cJ>gLQ8Pu^*}`>KLFTWQh1QS`GWyV zgf#pUz}NuSi*gQ8VVZvk^mH^~TFxONr)oYn^3T(RWW6n5&3dt7T1^Dp^EM`|hL_ME ziFK$5K8+Cd(%^LfA-5gbty79|8#Bal{s#0fL%Hij?nl7&nzMKniwOOkmTYtH!;q3Z z`1x)8)K#j_34l8=JJ{Xost#xR-d~6h>VVA%s`KG~lfIhi0|ln6W$dFKRejiEfoWga z6>*B6Mg5~xb|1vG-&qilT+M1rsS?^ze|Sobwx84Y*GPn9jp`)y;=8-`EphseW6%~g zN__i0&ID^>dMXtc)ITC4;Zd(`qKpkH%1xvCM_49U!WtY7d|an$G#WxZt2m7l#pXE= zk#LWn2?daJ`ayEJugwA)sawD_5<^YpAKxC_kX&)0B4t-)CEr z$3c=%r-H^S=N;_}@cWnGUVwbRlcnPU1xa-`R83$mP(O%ILbV6GWS+q;!fz1B5^{7` zvMb>~;WtHayC7(?*Ij^Lz;A`%_Jp=63^DX`rr;8YR64}nD7b+Ln+b7`1D8^>X0LF{ zY3=feD!&AosXi^O#s&5R{8{D!ZVyFh9Fjt}0LJcQZ-m+K>*Y%E~R(zeL+!;Fb?@onf9y^%`Q3`-7zu)h;Ku zyJDyvDD#0B>K_dFSPZq8sHbA6%|tyPLp@FQuf$MXhswPfL8TQNcFtJnXE*4YP@Rwi zl_BmB(SOEFbPeOSwjN~FA=!^5=sHB8rpmIrMsSxPXiaDee-+#k;!d=5Zwc;k@T+;+ z;(|p?wtYd@E-v;LAgc|<_5oQ!Wg)hGh?_1!uK`_MH_J{^{6>(~^@*SoDhE`DFywK< zZ7dSAKD6*l1=kyN_4PLBp9OaWl&eP()6dI-`v;`f-(YdxVrtiACb}%4j7GtI3>lq5 z+*rZg0U4b`+#JFE7IY0E?l{4{0|V|7mdZ2p)|g z4>9lu=rC%6ZJ>y@=Z zZxx&mT<;L~l;D1X6zda){Zw$f&P0;wh- zhlIxqZaQ$=gbXhe+=&Q0AjI7zxI6?83~{drt`4PU+Ysk3r818KHz>q43GR|9)bC@29UI1Xg5cf7vOpT&o z%s@>GQEv;g!w_=s5GNJW2S7~^Z6Ldv@ybDueL}Lnz$H~Fx&-@%I0-r*5@v*`-6iOC z2)bX0TO_zc5Y_!d+&aOX1F;8$#q?UieFVA#L%Ih9R|ByJg}Ao`cMp_#LB{M5x4YnOhkkQH+#!VuS2aJNHeu4CwDci@t073dBLaY$xoTXLP~vh=Gn|fcx+}AA#JT5p^oTnlYIC z0LnX-s7IBr*3t13RSS>jcW|7iDWn6&HLg<+lo|ajnP(Nlb|+EoX^eN3Z?TEP5kMUe zoSS|DTxxbi!y&jEf%CvlKa&KfI0^}I%LF$bbcqmmhT!_4%1MT}-w5th;8G#(QNcZk zu;~!@zTgHyM&a^&2NVkjNt^mIv#4QwD4ft_0kbce<-0XSiEQYw71vd$F zr6KNbg8MJfm4&#E1Xl|jPyg0W^%2x%0dy%3aYF<*AG%b8xM_mBA7Lv)+$zB>2VGT& zJ6mugp-Xj$yIF7p5w<48{Y`LPK*w7k^z)J6+JPT0oYqhEk<_ml`n3;nI|%L^;Oau$ zEWz!8urwF_93!~D0#_g6E*9LEklQiD-6^=&K-Ve6y(qYTpz9ps_+^l*4g{_t#B~we ze$b^$h}%JMe*|6E5I0M3-9d-jMXY{;y908YLfplIn*m(6FzlUzdm6azA?`)N<-o5; zh*L*VzpkL`8REJC=cz-WOE1sLMR|AC=kw6r3yaJS5_C1#^$Bsa1a~ZOeM8(af(sy` zUx>R{aJztC|4{6mg4;Y7J-d+ZMZp~oRR)AObu?9e8DR&8xGsXb9CCTKqkeV}+;q_K zYCHYR65JTzc-oA9juG53(2ti2>gQs?y$iabA?{AWrJ&2O5ci_s_JmxXDWMU;Ug9oToS?Haf&1J3Ms*P-CJfS6zHC z`gNg%-yx){Mu4n2#61n1^B4SFXX==+di($}u+M#Hb6s`BLR61oGbq`=gs2)zCa76N zb%>#MBB~*V`VF|NZZXtUQuU6Z?j+SVG1N;$4X#C9T!)`Xe1xbG^#D6*l%sHVLTP2- zm6qfDr)kMNQp9b-CYdonA?0cuuXJRvU9d|fVmrj)D^ZCL#EDY?lK5)C5DYIt)oj4T zE|mn+0Mj5fV5Yk;C{b#cN(K(P0Ny4*ZEM7U4%MvTpCC!89}!m86T<4z{^Si-NXq+b z6%swNoLa8vue3%4$pY1Q z)OkiYQf2$>D2_{1Io3o;;H5jHyQQUJ_!b$cvmt4-A!V~69ZmU6JS$7$Ss6rgEE~tD;Ckd}FKq&LbTy204>hFfH2sR#|N;Gi4-M zR>V3h3kd+54PZ^x)^KZ#xd+6vutn8vQEqrsamj4Q{L0C(5*^oAF3Cs z0MBN)AFV7Bg-RreluFnN!`2WcrECphz>KxY5^Ixzu5_{jqfpq|L5g;1+(ygdHk#L2 zULG~oil~WKM(wuBR0vXyur#7OC52rorJ928E|t1oY1hWSk@Icq2r1dgnn(XN{rM8beu>gmExg9F0naYSo5C zJ-4=r`_3ziXolM?qLJa$0$b|Y-jo)hlM0eCH_0sVjwY<-hk7#_ykJ)tRD{+CA(dfZ z*t*S?swlF+5zVBj#4T;CnMB!$Hj`mXRU6GHHeKxt24%t1ik4_w zyFig*{f}r(fD54uby#5QuZa&1O{)qSAh|mF8-)nfI+}kJr7{&+X$4}sAGtZWh!bG(Zgga z>X#6N9t{yaPz|-IUH(TDvuK_cIwH|LWg8Lcu;#<0uvsE0grT|3Oy)tf00Cs{94U;& z`jpy0*qaQ^fPKjjD6|u?EMPl98fF0mVYD610<_ps-}-otNbi!NI@zYavu)}zdJY4^ zEHH2m*#hhurU7&@MPEvJW7I=e6s)tFB5ELbH-Jphu<-wnumoG?a@DFwmRe(`hW&nY zK()4vs?H_M&DaPOx}J#57RM4{@>tuERAc$I)`8@S*Z?yJ2CBi z#666j2J9IDLEI}s46t`ZGa1kIi6Sr+5~i{(DN;iF*?O?Q9cFD~E5rc>d1l=7eORQV zxE&;!?yDUn88C=8P1p=$lZ;IhM+~N<%ZMS`G?hiGvAk`X$_-W$$&PZR#A-9P<6N=a zszMqR#=0Oj^-}AWEMk>17ig_cH{8YqVUM;{bto_>)C=_{V`H?o!YjotF6--ZJkDow1oiytwox06|qPTxO+rPeZj~vYiIL>8b>V? zVDG5q*)9>Ql0GI1v~Of(%tE8}XTL%wkbVCszk(95TWblV8W1&qN*fqOV2UoHGlUPK zFT1szGa&h3lM7-7L)wUxJQ!NMvo|cFFIW$^MQntWEa*0}KoHJI{Pz#UqorkQ8+~h; zx;(JCH@2i3`_SSeO?`awsMXYlBx|&)M{2Q9SxZN9qQho|&}vxKTVD{@MRFO2k2&>X zlSed=B9(iD6*zZ^vZ6^8s`yw##VS5hf|^2G0aetDyM-RH8W>aKq1{4iq|*P7Z6jK5 zev>Xe!f~QO%0Xa9k9z6=X_|{xpry82jaRmXI_tZ#jM#X|RE?2oMVdmi6F|#|=AU!| zb^ji>)3DY+!*A=rj)i8t(>E=e@kt!tCPyMViSymg-01OIX*6?fZyc2sTfuy^6)cbD zW<|WYth5bL)euZ%R7Y!o8r$JR@navZmZV5jBUYMi%)i7d02DV{6lA{EmP|b(7S;xs zw-vImA&rcY&~_EL7HW6f*ETti^(iZeId6MerqyE4I#MFpvyM~|Y}2eS!lF$pHZ(8N z+hQQLRj53A8uMl<7s{#97I5e^GYI_A2`i?&%%g*`4R%CG=qEfy;vv{~AO z2U!zFE2S|*BF2tk<=tY1)+yFr;awqNbUS z8eGN}osvRg1_e{l^$6CJZQh|GGHHuk$GF6#odEbiQ_q~`qb;<>mvuQ2NnYlZBr zgDD{Yu0P1g#2PnQ@71#)C`oWYH=!-)6m?S!^5n{Tt^ z6<^OPi_iCC!a^I8ow{S9MAu7@9~F^xBovLUoOUXniFQHEwKPv-)q`vPD}kyJqwrSr7N({xFp`?l`9at_Rwi2YMWx5_?K__|DBb-8cUgmAonBbGw3UdSU4mEZ zF9kp>4|!{>8R9p==TwoujC2#f-%yUmJ5lGDqg`S>LxF ztAv?g4O4hTI#CQ%n0$`4RxqS6qd;Y=f7T7ix6bhf2@{uSx`3C70JifmBHfrZT04{q zp90&CQ$#I}QzFe!kEjINIwt|Fg+WrUFmeS86F#lGPVv^QFHWx&Ddp&(M+W}d`Y=hQ zYi%9N=zLV0^{V)ui-Hu*DWMlXk_CnupNb-wVo@3YZOdNKBCvHs^SGU3K})Bqwev_{ zM;bPrs@6BMlA_m9!cu@9PoYS(v*oPN--#Kr?d_m2F(o65RW!5MDlHADu)iZ>S};|Z zwl>wyp-EXWQjy#J9YzdC3PxXw(S{E3t%vCmGWd3j$dqw!cUvwnAlKr1MoD1ch2}Rl z!&T^1N9VVoNpxfYi5wY3%9Ay1)3|Tb+F+x0`0Z>x%HjVZOK#o#$0wPr3C22S(FQGI z%QS~*tB*{G*fV`&yFdzq&(_s=#1LSg=*4RTDfHiC_F1rNTMHNVEyb$z$S9cQ1>@ji z!vU@s+Ip7u9Z^OMw=s%9KR(JOnlN^z*BD&uX{bnT4k?j-0Mm&xyvBC_<8Fa%qrb21 zQ_%?vJ5OSo|HvSq*fiC5U|UQiQ!m*rKS3m6WU?yS;fLi!`x9HS!v*67-Ma+S!q_lo zSgkt;@tTMAXT+ddbrE2QZF`u~kbk{peTUW&ol5v7Q<%{fbL%>d@fNe~20LkMB4ZC0 z(Q<1d-{sc2sKMGO8-ul@VgnZ0<`s>1*3PKp!tr2OF%{ndD9 z)yXszOPJjxVYH2P(^?H<3mq>GVomcz9z8>aY^^8?^@>ozusJS?1nLv775heFEX^#& zCTR7+om0BD`UDv1xakR9!?Ue%Z*3pUHjqg>h)qSUlvRQe!D+Nibbi&YqoZumFZi0u z!FDrZ*@b-`(Qb6>O2MQZvjv>(#97foytVN((*!oUTh||mMmI23xQTAIbxY8AabJ4Pr> z?b^~NRufycW@gIFAt!3KG;>HpX**I7rmSL3)xbh(a~s8jV4HD*{mj5tlA!4pb{s4c z(!P_GfUPi-Xwl9@?Sj=>#4fN%)GB`@_FO8m#*L`7-XUxYd90%s?RrOAU}mVT;*5<{ zM0!8pVX^sUm0!HR+nR4lqRH5HFjOoVBg1W4&DLzfwW*F&ixv`qt%uu%L@Z1pSxb{l zv{OjNX6+QxchSy78&TWMHZ6zkW*acxrbZjlts7aiu}|rK6lqZ-3D?@(ths)DSG!P` zBiTcdNX@8G+s+@;6ZsM8d=s=|QsZlPQ3Av)N0en@YNRmd5z9B!TG6T}HZG0Uy#Esx zrM`KF7R)xXs>p6PMoX z{J&aubXCtj7u&^1sri=Q3P`;YO=6^Y^?%Y!3){#rPtj@@&oeICL^=u9`c0csr04cc zo0fuQ`tglP2|E{%j4tbPBoTg6W=9gxMn)2*bunO(uTAw5O3r>#R;t_dvS`JcH%+yv zN$v8R0V|?SeEci2XhVeppeqw=1d&=y=4`Er6h?sPZ$%q_+l-imj_$uL*5*Za;IeyF zsJ(0sO9AApTBOG2j*AEwU6lY2`<(|hfWZ~E62_`cyN`(#FsNcPY=t_v^;)hG%s`M7 z9sB|;GIL8ULCmPdc8$x9TsPH^(^&Kjloe@wf^;x8j#{ zve}EW&FkrYOv4Q`0Y3@%s}Y#)4>jD}0)M(UYj_-Cy3-H=e)|xnyF$Y=3DaG#;WdPZ z!o8D*h2NfVAE;sBw-WB_BQV{!YItyi1AXCsK*N2T0n`12h9$g>=TCt<3%`W3%$d-% zp3Zad%L%yDNgrL;+|*?~QCHws<*dTZu}9aDwoB+s+2pO9NtW#>B=#7c;PO6CyM62b zI^Z|)L+uDu!-sHwtU-`84DN|jCGbOHwXFY}vwjTRJ85{sQ&&3cC%`??zz_exSw9)> z85(ZhvCLV&KisqNbDaU}m*Tw~Kbp3ARsvit-fQK3k#>j5Svp#geWEsMaS@gl^?xTw zL~zns+S0ON$$G1ReWwMVAJP>1B%GyA1hj;aOtYvhMOI_>*gF%I*nz$HZe z$5Cw+ue6n6-^!V0ou$r7G4$cxCN!;bx`c@siD#s;h}1wag727JSUE+6ScSJ7w=f+e z)?-6Q@+#si_(mj$b!|k6NW$fja6CQZ=(-8rhJP1H_sto$vBYnbHevicXN3y$y^s{4 z>2E2aB7|Ggs7=ii$)bqUD$y!F`3Szjy6rm>JmM_)hFW^gVN1j4M&jlaz zXZg{QaK-V3aA8s)dE4@Jok1b5s5@4`!W@cHu&TFGTxVd!y=}xDBT=^{h!ntx)B3t7llFl-qA=OfciMPOh3_RSzIJ42;N}P_FXjl+Qg()`Kq;{fk#gv{zNzy zcUtmDkt*&i5Ed^(k@hB5<_h6Ldx})e);C&KVu@5R_wTa^xz4aiaVxm3dRv`#o^xcO z+K41%topKCw`^>CTT=T*kkIJhZm@X!jwlNI8(`7)jUa6O z=kQ`VzdTZymN!@lu2XPZT%@Om2E0u=BS@rvU7okWfDhdk7h#3Y<_3!n->!3b)EycT z@S)ohM0geJmPBm75F#uN7S+n2!Zfk|--{7#u^x$Z7NXV5H&rS$mah@G)rH>*MwVJ9 znu+B_vLvj#EM3tAoM?URyHz$cSiF4~%E+vybI(-&;ud;>EO0Y_?Q#+lYH(nN0v>>#`!*8it4Xtt%s82+KK=v?%(8@u~HXjqM}E z*1wgB{5vH*XKC9SuSlju%T^JI5u@7@N6#tJyFgM}<-aCbLvt;btC5z;viW9dFtbQs zCM+}1xUK&d5@ZYJk3?$AGLr0HBXUcLG_?@>PG|9wF!P;EIM;^`cwU=(fHee-fu2)U(n zYGa(y=ArmZ$QIh8rEQv*NIi{N!VOlr@cr*cDu2TK=9Bor82^sf3)=Y#UK_R3@*()4 zpu+m#V}P6R%Q$;2#q#ikZiVR$>s2&ILk7uS*lL0wgb%=LPwkwF*G%oS!WRKN6h9ge z-}h*DXxa2X62FMJp8@=ZMqP#1wc7c6yzbD>KjB3_kuX+V1Ql^w-&R%}Dq;O2LB6Ha za!R2yF}U0Ibzx8IdqG%f-%{Cc66`*t_x<=W3HiRiPke_4{a?ZlJl)>-G6g?4oAEkH zJFmd&KJ9!RuM&g@L4Uk{pq(e-b+vZdc#-Kl!gLZ}?}~FOUz^1#qH2ZdRK9v@{*?Mt zjpgeSjimyQX)Ir_Xe@Q95~)-9>Z%psi>jgLnqN=HO2JR%>v(Zaq`Eh0EMNC%tkrxl z*pAi`Eb0NM{0e@dCD?Qd5jM3#giW&$VN)(d*z^k#HWfpJ6@M_aAwSnCET$1A%P5X8 zxkhml0F$xjq?<#FCgQ%<$OnLU2tS$$-wQAs3wPRTLH`f&L)O>BYb1Vf?vB@N?X-li zg6LiRu&qS)*ldLR3k|1bj}F|tOcZ_Rp?Hx4oCo4HS34~uN~0) zZN!q~1fL(&wAAUkZPR*7UV^z8i?fNqY*-{*LqSA6gdb-q`F=v&L)Y{Dp~3UL$>90U z_tW%zSKx;TVX9u|Nq0@y8y;jT=&Cw_Zndv0}dDh36GUz3`wxGE6K(X$+onTuw=bh z$!~{cC9R~jS6Z>Vl57Gt1q>u5DG;DErPv`PO;SQ=L-XZ9Qu1h$l1KY*(k4yPgrs>i zZQ4LWlQfU!`<*j$=FYuZd2MWLLVWGj%$YfJ=FFKhuQN0EzQWJd8v(vq1>FzlQRV$0 zoF|m`DL7wL-fzJ9iSjx%$O%7izZA|D%DWCuR(Y?3vqyRFfb)>@J_hI0%6l4kI|DyZ zI2#VJY6Gg;jg((qa@g}jPPQBhJS^~ogBIL_TBA*9gUBIHnsYtl@D8K2J zD1H@wAa(_u7UgY))1|yUa5gIMW;oX^DN7 z__yL`NtA*f;h?L?c^W?$Yr^{@NO~!LSfY~Cf*-;|`v>6JDnJ&VTLh4jQ^udbkLL5_ zKE?jJ{p5a`{jvSzeuMq>`^lx;P!4hw&z?==VB~BP{|PcES1A%pK=ypjp--43DLkQ4 z5Rac$USjc!%1a!6Re6czYL%Qyzgc;u?3OGqLCjk@)+`iy08*l`Q@4KvE~TRW_&T^Z zvcG;mN$_s`EF%%2sc7%)j2Gsep^-3*p?oe?if4t-pMPiEjOY??Fj|$@NG`S&|YmGzW_SATDpD2v;qU5nH_j} z8Ksk;KoZj-O1vdDt2^~#4M9t5CDtCyEwhmw?4kOG?!^)=?!noxcbg>z8h#{&aYA5m zslO4wxWJvibWzK!@PKd*)7~xAt)hEDrXMUR)mavp682pys6-A6oV(^%G%PLn&IFrT zjqnjD;8F<}*RCpS`eO$Rs-?$Xkg@oAL8jm*;j~}uA|rE44%Rk)=}?cFX@?SYGG7Q- z=h2mjQalHWZzhZgKbX1PVoIo6+Fw!-hEGe8?c6;&Mr2{i;HKU_N*;6G{ zPYEIP34h|26vn}-#1d5rrUOcG@Ud`KH6JQ7vq}-j_Aqs^WVQ!mu4Dq!xJtG{L#{;6 zXDfuQcJ?@HZ(!KAwXn0o=w8@aY5BdAw_#_M372{gNbKMhWdaC#5(H#VC=Q%poz)vgHx=ih8)y387)-_CypLb@&B> zzRW@8RQ=#8)F;`AYc2fj0~21fnMO$v?8csjO9Bs{j8(X=qF`UckLrfp$71YXEW|1P zCWIl$-EbaMUORRV2VF(6Z&hA9_Bsygr`Y?HS7ODrnDK(H60f)=vHB!d+!Fm($%HR3 z`J>5KiPg!WkUy-pHX!m7w}jBnLYIoK6TD*8Mf73=r%Ls5vj(R?zQ*8Cf^x}~gQ=O4 zRcVA#vO}KLT+Tw5aR@w@%<tP0(B><3qLw2c)!Eq$92+|8i0)QFq2%P~lAZHp7Md zA`Zu9c(rX&UjVa1AV?C-MTjgFB}~+T;*~hgXhi8N>7j=TV^-Dqyhc$xM57(PHT~~a zsFbDxJBWBp>kGnyr`|#$5IS+A8WLtnO@acocksn>nJN>SRyLMbVuS1lVZjSI9otmz=lHLHfx#c`ntetOjOzMN=$QE$j8tSoxSHWD)mK zI&|EU^sVHjyj~iMkuqK{jYZK)bEKgq=pR~;PlSex5@`>Pco?HhiFRnsOf9c4;WuV` zhU$`pX7!~O-yXq(ugGm{yEXAS-MMytMcvYC7h%gcV5BfJqEc&8+ej}gl;mo*k*x%p z6;#?=B8!6~zOZ%YZG7=rG>^LyHB};LmP!V=J@{g*7M{>%6w2{{yPwH1o}PmaCnzv28ud4+E;HbF=~ z<5)ATC2%p5GeO@$kRoTq^?w@6ZjBOVF|q`NB24Tm$^9IF=W$R!ITU*mBpzG3pS%qm zW03m*Ch#LMko&0eFBW1HKY<^_Kn_J)xl?SOgRUY+#hOxWM9|!6C5J#In+lM4tIn*P z9|P?VbIwL$B@&bf@{u!Xtx!pWncI!`-S4emte#0w0<0f=4LR#BxHW_d!C;<2*y7)Y&pm&~OEX{#~J ziY;Bgi=1MKT9^DvSK%zu#|h0hC7Gpu<*MOm%j)3y1@xzcO~LSkJ?ZO946R0Oq;g7h zK0HWxn->94652{;`z0Rz($Z_J<2OOr!n<+a9o|`G>d$Og@T@M+5|S5dN^Zqk-or*b z3|W`VW|n@JzzXDHwC|rWpna7GwFEie!0!}{-1DD#MZ-n5``1I*U--57JcflwjQN9R9b+LxN!DJ=rOX#t!l{VM*SW&8{53sUW zvJlr2mL*Lu)-YOP1hCk&Hf6oE*63lzX)o5IJgZmtA2IR{Pgt@SLV*GvOkE_2RTQht z^U&|_IapQrikt9=8Lt;)mAs5s(%5xpWhBuSpAy6uaRewK7+R7PpVyM)5NE4i-ln^f zpbBc>*LdA-3HAc@cG!7Z>SMf;y(PdBGYYHv@me`=U^y9kDyKNs9gY%Q)A+IC=#}f> z&0LZ#0nJLj4dSymuM-0)CcP#N-}LVVWVo65(yJ_ zx9o*^otK31s8PZ&kMPCLVsG;BU5u3T>uG74SOjOW@-BgMj`E%dC!)Md;asA;m%@oE zZv&iF%G(HMt?~*VtpInZpb0od<=q8mkMiCG=XT}21J2#bdmo$!l=lFfcPj6D;5??h zLSNi~_?KGYQSpmw$-m?)KT63T$L~!`@ufG&Hinl|zj(#9$Jml;GO=18 z73?>|Eyd4A7}SRxini)Nat`9SPx%|t~j|g9DQQQ{%D1UOt zl)qehQ$E7qq0^IlK=}=S1V5zX$^C@#FOmE|1^ClCp4_LEzg+%HCB3+ZDL=#i9O(^z zbHtb9&y;_T^brXcH^6_n{0}*P@k;E7;79by?Na`7{2BQoU8C?QZh%)C_fo+TH-KAC zZbuq#TJ;?Hm#g=3@#W-h_(!>oT;|}#@Cw{=^+c4D0XmID?`$*%<$)#Mp$sc7Yr+?*W z9dbPKD%al_T8D{yq-7|_S2_Ado^#aqk)}6tnS;J*Q**?ZD_=SOkCcA7zNQ@ga&5Pq ze9D!tT>X@zf5_=Sg@xE>^}>wYr<8vwx$kNuL(dIQN*!{*dk~1m;E?-SP`13lR z+_P6R?ouIe4&d`t7`qqfcyhnl%($xrS6s?V9{5eg*$wh(r2URc&+geROzV(^V9^&Z zm9d5`vfW3}f1ZFcSoSNx29@0QZpPf^?>CkCfIN>C4HW9Ixf#%kf_> z|KlBh$mK&_mBTGpmLpAHj()lL zi0FX0fj-{QI)pyl;FhB`NBoi2i}(U9MY3G7lGJ~9-5=*JbQ}Z-GTUrEJGb8HOS{9 zFOzsmO3gBQF=)YUgu5N?{ThB4?iqmPQS?8CtQDUhM7%|w(}tZ_y+Y!jK>P=gxOfT5 zqlt*P@tSt$0KzH#!*DBfJh_hmw()e7GXPK6Nn9ZGDZEcdO82r*!{P#&pNMt^k7&u$ z3Qri{k+A7rp(9_R>)~weN`9R>eyw)NxgNi;^LD)5TFHmPR_SyD+I^A&@qAD@&I8)L zN4uwKcZYU&Y4<_x-lyF+YxfcDlJgDx!p_T39F_kEA;(n+qc3QPJV`FU20RRxzI8z` zeZ)cz7T9#@`vqZC5WV%D_@sBPzXvY8sk}m0d>vqVM6O>}pn;(b{75{qcFx1AhpAlj zdgjGiE|^5~Bl2CR;U(H7rxCxfb4S0FkHUn$$Pp~^Bk5nQVRFvHFYMflFI{@|LvoPk zdU(RlJCb(1)YBarN%$1^Y8`$+yLW0=@|XIPa!5T7XgrZSf!py5I}c3S`Ahq2)%aIv zSKv+!FAKO-R(j@X`I4W~gq?5VQD{?PtSmZ`}LvO7QtDc0~>e4L4|4(uv%}U8Lg$4!Xg3LcbKhu=C76+5AN)0?%UQI7=+O zAs)ickI?ma`WVr8LHBwcPEHZOuygA-Bpsc%yar)(E^-p?<8UKz>G_#*xbDe&0KYFI z{yYNkkW0s>-o=pWgXy%)J2ec_=9zaA<=g%rk}pMw{w&d0;)))K-UuxCLYH)i9%-jP zavg`xt6ZXj@j4#$ki6*}$||^Y-h}AUxe_VIjezOdtQ_Oc*YGd3dxmyVM1H9MpeLvY z!jI^`!1Hze{kKZyJgHscgU+>(o;;&n2gC`c^BIjA@6~YWe1^26wVK|KbUc-h9>SwX z_!U>=8`MV$k8mol9ZLBnT*~>l#`{O@ioAudt9AI<+Fht!(s6o(pEoPe)Ze=_EO^om zh2J_IpU|$lx!t6jm9@(ceh zI$rV@SMY?6xI$m}=+o(+(DnUR?cS%uZ_@4^+LiK&+okaz((#i2gBq6lyi?;X(%~&y zt{>CkQorJg-Uz6ij6eJMaFP^n+yP|1SDQc_>ZT`Id<% zQ-1_uWWlF-16k@njebs^C8#5;uYWG|DEw^v$np--{D}N1Z+fKurM|=!elJjHW?n4t zD|EP&S6rz#i5FMm%ejIt?N|7ra?m4i&=tOd^aW4SOL?Vyf-mtR7YSdavNipb(35zP zr@&JF=j#fc8lA7`ujDJP@GJTxa+7eOLu9t&hxzKSZM|5i>FZ{Vc=a62J*S1}KyS6H zlQ?AmA=?lAPOHW^g&)~|=tnjjdB{(;9Qu*XMjrClz=k3ZRNJ8+*=xvFLqD?B(2s02 z^!osQ@{oPz!xl{Tm^><)>@j3}5qjcM*hBb{J?1@DJlSK&mLPaSU*PBKK3_V|H{Fr) zDIds_uj2_HBpb4^(2r~@k`MXG#zMax_>rAOefZPEAzc1AC2TBYXCWI4{pkC2{6#qa zOp_m9=$CWJ&O$a8`q3J`9KMvN9G=7n@q@77y-@Da&hK#PkxV~~pFC1dvV)M#Ltt?! zjMm%&A1ybS|KZX-()8u>J6iPTqC+x00}~ChV~`Dlem(e+9YejOMai7(7$3uLE`Edb zgYcoIn+va8crd>pEa_k9@N)S`d^uP6B)i3TEV)Z~x%9#K=bJ7_=V-y@_$e1Jd2Blt(#CA$LI5Q20mjBE<@qq{3) zSD>|g5bt=w#LIuE0tY=Yze{_`G+l7!cVxKj84enge+ccIw1WX*%8QA zAP@P;W{%Gl!NR9bSh8a6YlSaEP{G)xb;qUfmh&1c7Y4oxs!-dP&yCh*hSRk*HO>o6 zzc!m0tWA%M*VmCJGcj~bGK_ckcl6gnB(?EeKHWbxIho5BDQ7BqJ~bX`&t%hu$R)d0 zt$bB&A~%yw?~XJV3b~<7s)+Ee%y_1l9Zugjsp0f7E=g;8 zIx{3?scoA`=SO#UXNK~*TCR3%sN{0RnjumemUl9no=WA5HDhFn8iE*-L*pG2g<>8d zP&XY?ub@J4I5R=G^K|M_XwC>U2SKp2DuP4fQvg9tfuoa|oPzO!%`lm^+z*99(S7^Z z)P_S)VFZ$$%Z-NI`kMDW`geCvKl()1miOL0FYLa$abC#X+US00?@c&P!l+~lb3f;V z=DF_QxS@IT+|SLc`4E5)ygm|k6$)9&+|?oXi%ul-zM1>x$KEnC^SSWJhCG6~_ zzsI`$I75XZiMhao0m@8gwcItKi`)f~%F4=%YAaX5sV(tyUsi)qcLDw7XK7`X@m0E~ zL;$*#k);Sz;Z@|Vta2}iEUl^vUygFW2bF*F;OBQw)is^BC7@Kocvqng*<+T0c)`r~kYA}XPZQdH&ck|Y|ebZaFZrwK8v*z~h zTeoEQ%~V%czUI|yV)fg%Y{ww?#NN&WH;=t{%6ev=c*|CI-R7&iobbHRI{H(^t>$Ok zncw_UZ63$3yYq4`H;4LN9MpW>j#I?kKd;({rN5rib$YddCBG?6)TN@jDk z%ScnSC0itf_8Z+;s0z*D1?}=&5L6>Vhe0%yFw^ldKbb6?m%NJ%3>Xss)Yoy6K?E||jLM;4q5fXOJ zq`yJoJI-G2ljsP|tjJ?K2D}to?i}@~hNvXB>)DkV9NADc{`&PLA2X{Gs_{36LTAl? z`PG+PT|NIT*Q~Er|7zWh5%;V{_m!Q}s_8U<`>YeHe%(FWqz#kaxc`du+Xah5ejW-{ zZ`;RfFsKzB7jW+lht3onIyc}x91gu)mT;Wt{|krCl7L4D^LuOB;3nOKH#Mj1d4~1SnE$xS! z%b$coXRh~!ykl0#Uxz|xH*INZ@}Ye>6so^xxtd&}buzIZheGF6T^c)osSoqEaL7G1 za{l)7o0_5*zUsoJ26uOa>=&Dsfz5~aFrWV#Qj9*z?eWiFEbZ~cD(m^0e*N9s@ionA zlVWOksQid0%ey3DdlpNWH_1GSxvVuF+AR@d)j6xHFRz^%UKWj2`t<+p;m|Voul6*) zWy{tpx}tSkwk)rzTn^WU>YMI%-xZ2fzP7e@^?41^nEF@gYrNkkI-ejqhC=0QR@(## ztZzcB`zIml6`~hL=OXri8>-7rCaT`Hr7FPg-@0h+O_lh!T4z-4E6xwxP-WG<&0F?0 zF?XwQ|1<2ctuQ#lI~J2TGoT%-5wvude@u(2ThmLpbCMRD)(Z~Z=wych!-F1TfxsIM zvsRmynGwy@YP393>GA4;P{>`h*`26yU*0({3}Z>y{du?(cNod{2E0WR?gjO0+@Ydd zEeQW<5bo6ozzQ|ETWZ`(JKX_6d$U`k={#tmCEeamCVm-=JnZ>OIHK|1eM5voF0I&H z;pS_IDA8QgxcgT3gL`Y-FF2j<`}ca}vB|*%{>CETP|;c8zHcvve~x;yE3}_dNRd$BOO+!qg8#BD+7{ zqhyC{AeyTi-HSWjErNENk>G(n!obrZVfAe$>{}-6?TXxGM9y7U<6fnNxS~-P^dAl8 zqkB9d=9v8o_1C>R;x>^iKaA3R4zm1fBg@;uBFj(h5gwliN%j4$3Hyi%`^+9@ppE%i zP(xCG)JXj{Bg_A%*q&4B?=)sjEaILo8IMW6=a>+w?{g(&R6<_K1-J}*S2lB} zMcf|6+$v$NTT;|>rEjcruV&^dh(M@-_~1z)_ms_UuIQdEM1F?)RW0d_AtkvL zZo0;e)S#qVz3$j63UZG|sizEL?pDRnrJFV4(|d%Y10iNTo7O1kM9S;=w>`Y~8p zG_uRxp=wF;`p6#1>uIQ)YR3l**>9V${U+?+6i=6}R6K20JiS_Yy2~K`*y3rzr(`=K zKGxn-5kl|q%Ns(d&^Ls^h5Pdxpa<|r{4<-6SA;Hf7YOTLzdNTPqEgWxxL(BYlZz?8jlIWYc*i^;{@m+@_?t}FPfge#&13dW7rR-pRwMHLzQKI!JdZVh7rP_kF86bI z^8)U#uPwS~jcEDa^?H%mkLL;TyA1JX6dUKSq&9edjXN~ro==RSv2n)}c9)4zZ#0Q+ zJc&8lNR4f##$8*fH52w_)li)$x#8cM^4<9&5)!GVoq|v>wv&Vg%i0fO|NuTxP zNy6uo*NF%}uF{>~pm>vxKzMtZ+iDFA?Ag<4x|2k^H)m~qW7ow!W($X| zD7nwz+)dcM?IapbZhU=X%(t4n*|s*(4JP+4*n!<8n;%VXuOCag3pN{Kbg#+%KTO#p zA!D(kJ5KIDg+mw3KWj^Di+g&_w0l|&rii{S`{P*A&P-LSf9`_fHW?VY-NFd)eGL8U zywF8acj3s)mKgqjZhA}I^cJ_a#vSQ&ml?8jh06WshI+)o0&+kKp({t@2r zDQbd8m$KZqos3!YxsR;B#7)(>|MU9I7)IZILval9`)NhZ@~fA-r**pj@AWnAJ@f9| zjya&auu;lOce&i#7lh7^x=%Ydxo_Xw=q~=OTO4uEz@+REY%ABgFN=t8b;SKcAiz9- zexv(Y$H;*$g1O&5IaD29arV{j%WJN_8xq}8KUFt%cRl}yXWCsIv-pVqB$@ItH{i);rZ4~_Q0v3GyV3+_njJQm>H{{=6_?=?!w|! zZ2Mic7r2We+uUnM;Pa8b>9in$x11I_dsFRJU!6XDT4>2GU&u#J3%&den`*-+DQ4*E zn)~!=q2?J>ePgt?n*X~yBT=`qrfM58Uv>L-K4*eSI9+ga|8gPbZ;|NCt;^k08kf5Z zBTJV@-SNnBx4LHEwr$(DZCU1?+Ij!}+NF2ZQuR$?Uut@58O~h@e*|I#mz>>t{ zr-#nUOjnOpk1ehDar(W}LuY0;)pjl0RM~a$rb^+M1^br8p|f{PEycfOs1Cn<_A`s= zwA-(8k!fUn&*BIZ&7$#!oe%%s3^>L*^wKw(9E(x3wCzg|IKwGzUR8sIH@raG%CiM3Wb)fRuNTo{ymN#VE{TK;_fO|z4OxO zy6gN4qC3N(C2Tq!UCr(7KdGfTA34$9UV0~@kAHg`96hq#Mbp4k^Yczz&(Yxi!3ptl zry^2QQTy6j%n9CyW_8U78sE}lco7D(x1cTmJ`XQ1;RTe}^_N?JpkW-3f;eN*&a;nDyyoinwD*+-}==%wpH!ez6D3_ zeKv+a3Wv}hM%KV!xy4-s`__m%*tmLabM4Z~rs&nQcDSI%eO-j+kDYIhe_R{rw@KdlH|yn6N8%<8o}R#(9mrBPQmyTu3&Cirsw@X4XG z?($7-55RtPYB5oD>x_{v2^ZHHdu~A0(8P9tE;>0L?ViZ2i3v2p5<=r?>#=ogCa=WZan9|{xQ&#?ca?EfVDKhA#aI{N7Tu^T!Q=#Sh`3}0ZaYQKb? zs?#Fu}R%dec>eW&D zx3=<%+FJJ&k$wAiBm1XmFUS38X#VDmvKl?aE&qw%+m?S~LQ-FM)Nf|$8AMtPtg0QG z*|eUF$XNwwVBpX!CdsB}zLIN7-d0QRf^ zeCGO_kosdGO8x0Qk*b|Y{nowyUf{#w(Am41UR!w~{#E(=tbak2IfYAaGIG(|EZJ|3 z&nFJyz69?LANN%fU9#6;=H>_!&yHzE95h?LcTdGe2Il9R250;4xxwJ5E|iaLTRQ|Zz;T*==+h<% zU|Ov?rOo_3%*6{DFR40Eb?J0h6`vdGTI*}CI3AA<;3MiB{AWUbGxnc^Lu;D0-Ujg~EvY)Senp>8y1()ij{r zX>|YDsll$)GWWU~_cMDU)ps{{4Wo!U~l?CzJ8nLqSjm_25mtA!0*i>b&yWo-4P48@Kx_xHNG&U36&)qQM{#CfK&S&lT z2beC9;VrLcvV2CRv7#wH)l^$q-L$&yb!**z-s?PXGxs>Zp}S?y&*^W8!^ywHt(Ibh@W>Hr3YFR##&H_%WSDcJJL| z-f+VctM5CZGq=^o$O`S7aM2+fzv=Z(gj^GCih$vAU)vj0?bc z(=3c{hC-E9xB3$O1_Ry8A{nd^|8h^{0GRt4Saj)r7Xd$D;ExsX90PCMQvxc~-aVbY?vFy9&F&;Fvu~CoBjnPBJ@kxwtF!ST4G(A@eR>W zVHLe|tRE*_x8@oohTgdD{u<4=y0J<{?pR;zKDejmD);G7r!+EpA3L1|J{L2f|G5Ei zZwPl9BQ(9F-Q9<)tFxLry|&%`C>r7YH#A=5{xICRW?y9!F0o&{FJ_Jz^X%%oZm3>2 z!=}om<~4-$ns@gte1|A>X159EB=0R9`~?+U<=%RI=T+|ix*nUH>c1rV`>#jzpUl(I zOKGs4b20mZ&soeEqi@>&4!8Nhr0dv;j)rI5M8+re`Fy*HSCcXwm$@+z2IFj3!KLkF_CDO|;4!~G|wc8CAM+Q6dk#MDk+32U^ra5(Q!7zg&j zrgW=9FTZ6qu3bq#&%NId@aC>tR{OhNY@VFEuX0WI&1?7Fymkgx!Q4n^*QMyn!?=6f zTz&J}n`_p2QG`c;g%Ox8Z*Hj) zA}t`Yrmmyfg57nEZe!=owQPX=y{2dyutN7`feD`PxPdP&ywPpkx81$#2GILS zxYNCjCab>)citXrS+=a#{r2^ZR{?iJCl&AWKy|-_5cl1#x@ao9QU8Y6o39UD<^C!- z=X`WtXeDKKJ?}D|-st|9Tim+OeVa}9_IZtKd~*8@$o=s3Aos`fI^FNQ9<2T8yiRou z>HR!eJuwM+9&gP*F$o#O+x1JmV_&+9QtzSUexQ_XX%g56n}mGI2`ydTbm2apJD_P2EVpTv2j zU0bjl^MMfEg!|;4BK+?UJqZ67_SDGLW1fBgH@1-6$mX?cdtvQtT)P(E5#TO=@qwhL$oxCtvRlHTq^i&tW4}uP0}A_^-C(#k82;Me&M&x9-7P0e%>|$-gO! zGkQy=_$rH!;@85Vswp*x`VXE%J$S;9bHb2w)bFk6PZb=xkzXg6VCc66cd8SwM~Jz_nmYFsb%-IsBg_LQwEcv(A9Za% z-2G^UKZmZfUjM5Tst#->{|09H=-M^3CET=nQx*TanC>Iu8s-_1sBh!>131Rbh)qqa z(^Y9gcBgS$bF*w_aVB5G@o&E&^uOpevv|V*&RSMhUcmn^?xI1Y%QuMp8P0C2gx9gz z?nSepIblV632hWl73kY!hdzWTd~Q{0y;E+R_~#frsyeG4dI&d~YnRr#QxSJb&1h|H zbiI1_u&i%>fLYptnycOOBkq}U6pi6 z`IMSk|FjHO8r;gps)uT$by3{QwvUf}-NoK=?HYgJO%UtZb?p^UVN1hRfdD zDl5|$;^5wEFT&1*e{UEUx|`jXZEjkA(Odixzn&M0zOOra>r`#iYg+ux|3eia8b5>E z%wH)T{67-x=lCrrmn8Cj6x*SfKe1_W zkdJk~2+fWMwE|8DKCi&=5m--fB(}0@m+v~{!?Qk@5DPU#ckCG57TvW2|3|lVk5-M( zWLEFWQnRd3?~cTqXYsmZb%w+Jv%QT?SUmp1p|_yEX|J-&)N`{qv6ptj%6Rmxj5EWz zBYZCqQ#hD8rAgU5md*>`GB4!6YV;*1^zwbaQSeF3VYzYO-KZ7rAKitA?s>i*y(LKF$O>GqKLw5_E zUr~cY#d><3@dYkfCi1{M%{8TOLRzAJ9H^Sky{?kOWk6vpb29D40mcz}+k zg!+Ar>#Lzqa)#cMoZej3v((MpnaBL6h> zDf(Cm5`2pjJbe94RktXF_hIut?7W-)mbl=tp^(lOYA5r#;i;iwp>}X8lO3+b*RJIo z=BfO+1tzEKY71ldJo<1gzQ#=7MaNCJA;(D-hR9GLE1>*{2PKn0(^l8a za%#eknjV?VgC<#lxwgvxqZdwz) zwt$bbtHgQw_?B9&PAH*k$Ol+hg`w2Mh{h@Ahf;;K$pc~{m_B%}*S~9E zH)Vl6Jf&*{{)r$(4zNigz@wS9feAZ@37f46BOg%8+Q39M?J+Xp4K#RGeZD$t&m@8n*5@HvKPz=@xNKfW`Opl=927~hHU~NJ}0!-%9x@R!N^XZ8c&!S97 zaeQ(F?<%x;LJ+X*5U`Y=JS>+vsa{4q6d}9*nlO=*^yfefA)8!Bw_GL!#!2lX2?F2slkzkg# zt4W_pLIN*juJZ{!H8hl-r0&^Z4F(i7o52_FeeJg}HdP$X&G^G|Lp!;fH+05|xe1>L zD8N^wY%Voi*gZa&%lh!9CT2w(lRkV3D~2RZ`ymZlOR7t9{l(lQ&T$p$oR(a!7|)G& zOk|4Al|36G@km3>%9^@JT{KpQd!j2Nm*mrE)P?k`BHNl1-L>iQ!SwKOdU$z5a^>*)^oU2XE8glPldb(NPJhRh3g6_`ykRpT z_CqQ|#U!A0?TL7=6{Of{?byg~@Owc`_k*ZB)T`lbU3*_!!Wm8#Q&hRLBdZ>*#fQHg?35{kzfl#}jFc1fu^Nup<~BOAqaA#?pA2CkKi2wNqFq5dmG=Y6QcX(@e_c;jL?rcdgd~ZR1WkvCHG5Io{nD^@B0PeILedW}TGZ zSx0oWruL;UH`r}-wYeh^PcZkI^GH>m+R3I@Bcc>B*>7g`4*RmTuik6&oc1Cv6FBy^=QFu3qXeP}G zXObmvsz@uCuYLuXPEV+MauRL*ZHbL-tx>0cT^!OWjG;W-aEz?`68*xW(h`%eFeojD zG-AV~SMrTeArDgATeYSFxSF(tRUZ{3%MDV~?vJ-{_D%~GS*y~nuJpucam?8`&}-{= z8_kWp{5$H(r`#4P(@(`Zjd+x5Wn% zT}GT86Ks4=7Ycfa-0asXjFGB3^suMK(an7Z%k-8Sp#$yD$)`u!^XY31l4y-py&B!9 zp6=THuvG^fU*}*!&C>*3T4_iz2LoiXe@k~uZ&$M2q4{GzIh4ap67EE9#*SX+G$-1w zZ05f$PFH$(AU8UiO*^d}{e3JO1hKeVni=eGyRtR5&Zf}UwE^wK%W&KVniGlShQ44( zYmY;8>enf!i=4I|lwvqpMMGJC+Y2w5 z@l=MU-aLcRc~b*q9i};Ce-T#DRDPIRVQ*n5$LnCu}K*)XDy zt1dJL&9a#*QduQX%_(HGs59dR+E{zDWO>Bb`U)Rycvsb6LKi<|8?`~z*skaH{ zPm>tQn;8@#Gu!c24vTkhFp?Oc27M)F5PBdSiHV2u6hWZi&}gh+p4#bbF(@iu%T%E~1>>!Ps9kemJK}u_hej*~ zzR=sG+)1N>NwKNjV?ET7UVZ*Gg{Z+q`FZ}$dDE<3g$YY67M-)y5>Eyc8fV?Mv8_jetz?($&SCwQ%d3zL z1?Y_>>i&&!?8m4$*1XnqhL*V)Nv;vG&2~l=Y!|_ZO zCWQ1*ZemzQKBw4G$hS{T487o^$TU`-Io@(hYOk|l0t@}&4$Q$uhy&Um!y+JwR+db@ z;QY}0HA^0Osx@2Ttaw;-QOC@aK0QWF#D?8eqshkCSRJT+NJ zPZZF`(R%W*wqahFXUt8o)KfcY@IkSaK5&%}iq)+;CJM>ori#KgQY`~XDjO<*%Ovw2 z2GsIPMNl^bX-`egF1r~Zv$>hR+)O&3NMrS%o)}6i0>jQ2RW(bfD?JUdVi^F#>eOVh zcOn53*~Dnu@MxOFp=I0vloXj9(i?e%Bo^2Ci9{Jc5Ev^JSXU~rzEq&9uK>*zr7%@h z1~4xJ*VE~IkrRjxtZYyc)2nJ<+=^J8iX;^>Vr1DXGmNEns=Qi0s+<~7<MCK+v1FFO`18C!k39=G`6vB1uQt&&xO_1hfPJWvyVE{!^27!?O;ET zN<|c%Ku!B{mm=1!Sm{ipN2%Yiq+Pdhg@ZwzC#C&3fq=eesH;z{JX_P~Lnxph0;S2q zWb;5<{{V%c4Ylnms&Gi3Op&c^8#{X1d%e7ehkB zO$A!eA4i`HGkBkoiYX9@iG(>dX@bT^u;s+dc+hDcx|VuXk~0?fs*AB1XxTlPf(@aV z%4A1r9g8FoBUL~)JyL8Q-Z4c}eq9$Tw$Qt=pL`bAb@8!!7`S_`>{3<=e=Hi0T_Ch> z9~_I;afqRZ(V{go4OQ~x!8qWJ#u9%F+M|VuiE!^!5lw$qSPW}I8rGV-Xlbf^ENqiA z1JmIy&f&_afC5NamB+xn&>R#t; z=;^p>L)$v-b~(e;I}%=>RvT7V>AEU3`!?xbK~(y1HD%obQ(J6sCc;Pf~i=Y z?o_?BG&2Mjx$Kl0)|mSdJ0DogF<|QUE&x*$fO8jsJ0k(OClY`gm;l@W1;EUJq`?`P ztf6Ciiip>{U^m65rNCzmMWAUB8}sQA^oDg#ANEHG9cs*j_6&4+!=#K+(%)M$K#Rn> zIo=Xioqqv_0}knJZ=sN64&x(ZC>WE^{O(B|ROIDnUomeOPbL#>8=d4(G4E{dO>iHg z$&;{?JJY*`IKk`NwybOBzb*VX&XKKY&SHIfH!+~|*63Y~*oAchF+Gr=VDh%bnOpM0 zFrfB(j#mpz(>^?L;uVD0giLs`PK7r7n-UHrHcVn4HC@kYN~z6)K^2ckpsSrGL3Odv zy5eX}1=4D=rNQzD69LZqh>-f@y4449DN*a$7>hq61lApN^1$j%V&+A8HWBBFBgGE_Gjg4{_IXQw1`x@_eBM z7QJL$tb5&ckZLxO9(B@M&;gWHghDifbw_#4fOU?9B^4D&LB0%_zCWZv=ovPo$~gdn z$YYt=n#MtYiWr9_jdMW9F_7!ZjbhLOGZ@_Hpn<5LDKoGr6|D8Uaq6moV`-qnDOmI> znPdo#fnSmcl|*S7*^d3i*Y%fZLmx-6!s9cB7Dy~_5}7d@CIQi)(`P)ADv&8@A87AHH>Kb9HM z?Xg`mU<9iqXOhb*L-FC$;_ei0>w9IrjB0#1HH4`w)-kdWj<1Vxgz*!FiT8H5_z3IOp{7I20YXMwo2CKBP>8RKa&1zi zR0gsZy#CbqWH!AnmmPL6*eDgic!(W`DCbtlOh`@G1)yAI5RKYE%m(Ugpxy==Y+!{A zth9m4xJ-fZIXkH}m5RhxD)DHMm~v{tTIjxskE#I@J*JEvfY~+?MCBMlh!lZQXO@|m z%AwCeD39r0(p8!akN!kNXMLP{axjLT9QDdm5M3xLuPNA&Ru|NFjMZdlEXw)@K~Y(x z)JjcyF@5w3i}@Y^rLd&XY_b;>W1!FE!(i*+X#b{OEt0m)108*s->q}R*X6Y0lu>`% z0K1ADoeMEUx_etOnLS>z9Ha}2#Noh|T@JC*1#>E_V(8V9Ua<%v-j(1&wKsQlu_u9j zET^xdr>i%Sb~P<<)!lFIMaA>8?* zQy%TZ**72GH0_(vJd+^k$WT8{pPG__7YReh=K*#4;2WmHb}$-@!s(b8!fsj`#hMtV ziC=#LySl9uYwD>bRmi}UkRK#Vm@_oU(^uY5(<2QPDZXw~bH{*|AnnCDbOID>0#$aN ziqqyR@*s4QCr0*`W@sOk$7i3#nb}<&Do4zWNaE{Iqb(Z}{iqE}#=4r$qi?`os*#1( z6d9JhM5=B{tDG_H+V|x%;JYu;K{X7g-HqjDoVm0Vz{Xw0@Csnnff0|68k79k% z0$>i-nS{ffB?Qtkm4{|gEQGL5Z~4;c$k<98k{cT1wQ05}+DVA5I1P~K=)*}UkDS#= zF+{}IVIQ8kq84Y=wx24|G-hsk25R6$ehiEl7CtMHQ333b`c@oj>82U85?ragBcoD zTVpGm@gGN$aSArsm&@|`L7Iy5^$wa@afKGp!=)vfaTB-?0=psFCSijd_rh?yFz3R# zw@nG`SHoaSQ4|#K$4n8%Z`!WXBq>We-lAr)dSs5Fy?24 zt`x50Xc3F_Od6<~lA2YGgw(9kdi6x>A6+B3H|I%sQY$G=<4@p3i9$Ej`8TW#gs zg4wQDW+7SvlOaQy8M#nnbdK+kPy4$)9SEIW3zkxWKOY@oM38%nteyU`WH636i1_lXr|!B#k0lb>S1aqR1jqg2M-$ z*=k13Wm9|I#BlS_&K?}^ar_Yy+E1;V;s#)kDPa4se}<1W8FZeYVh-rwYsST>bTN-vEG1MkZ$xw9 zHnkI54puzOv(3MhRoJ5K4W=LkG(9Pil|Uax0zG41odcvfNN$9#0UCjTfjqWNX^_-X z5hBc*A#at=J8Z`J=#I_KzdwDgNjQ`p%bVOzc z3S?z!ogWvmC6rP~-4AQp%r^;iQ@cc2beIF!8`0q~_c}LfkAqVq9W?Ey33Qthq24>R z(gPoN0Q4F5KA)gjEi6=1KvE`4$j7Nq2WM!ryxBekLv}~c0C$jai2ZnR#GeqsJ72n| zb`4-jn@#WH1KS(1Q=les3^q?>#(gafDf-i+bWApytfzOzXbAVa>Q`_QLeIc_d0m>K z>4XVs1sdNl-Y$dfk1PcfUABfMun<$n&fDWyN?~4~^=4L-g6$GsK6TM#T|MW6o|!sl zqwI9Vm2xuyNThMD#41Dc(mRn}heK$laLj~BGDv6Bh>#Y8i9l*Kpb|SUMo(dO?JEbb zqP-j`J;iJ3G~=RKGug0-Hkd+pQ{d4orR9q+|EWMqgetjeDm9D)TvRI_mHL&*dR%A% z2~8I5l%~7D(EM)1W)9B%pr7JGu$PbF*aaaWK@0<98JufxRyJuuZ_lU3u|@hGgAknCr0;j9>|fy$ye9c8x zUPh2qCM@#)deMaiifKPxIC;ZZUK}^1!VvZ{VnodY>-=DYAH>x;R=rlEcAh|4HMl1w zBr1(QgyOG0iZoi%j4_SWn^nfHXRbF>HArIV5OZw7%(4Y@mt(hK8z{T##s4mG6{Bq!3 zHX-!+cOzTEAqnZv8q+>O468eV6Y0rxs;KU~V!b1&RWS7pQzN-ll>b8Z>TEqO+fKk3 zc17(AdJ&q=`Ib0+BcEp;ath#LaH_Cdin5`-x4Ca-91C5!N+;TIw-jnor|} zITJb~d~y}d7cgx}tm+VSsw_(R?sZ0D`(>jVy;j~i?yb^Zv)nDl#NdjeR(u~@PX%|-^8Ls!29Xeu{y(d>ny!ErSI;ajSNwa(^8}mz$*fRa;z?Qx?T;WH@ zIlDGuTJU7kV-53@Z9r91Nt~h75MFFZm8sM)=EpNv?fYyg2vQ-vJDnNe@WO=p+QZm@qjdbblH(=K+$2uYK=pYy zn(eW4icRKT^yN<)YW3y{U&BN<$Cv2UG=#BvOc+rw&fx$I*wpV2^!Bx=G~Kvaf!i2- zvxtbQP~Tv~2^CSv7Q+rLZ51*PcS2pw?T86=o(LnW`U(nSUgIh3@Y8I~AEIpObY!6!hZkhXcj(SDH!|{AGgSpz z&5;6B8zP^cagkT}I9>wbw+s>^zBW$*zLqEfTw-e((AR;N)ZkBy{@}!V2VNwNKMnL} z1^rn`e=d`ECqS@rUj#EJb!#zBBsMm8ZNPRbUHVVJc5K8_;++dzIlbKj%`IIX9_A@( z=r~StRM<2*HR zv!<}=8qqMO96-bg5{4B{94~23;U?RxOnAw4ExK;%LN_-k1oCf~OAaP(On@2Jg6X(jn1xQSrv`{=*v7mId#5GU0 z$owL*V`xn9i6ZI;g)c2AsY4Cc`;m2(GGFSZvOiwyCI%M1fODA>k8feRFOE{Rs#nP{QA@Wht@4G!HWNf;SskYyl6gS~$u3o#R6y$h$x};1AAvAP zK6TQqjZbN2@`+tg1sqVs^t~hB3WMAL&U&_~cWvegO}@^@wPs^qq27cMyJgRgZ5@Av)JScjWe)ITf;WcEAW_EDuRy1 zWm}^OTs%EpP{^=8jil%m9*Q`Sbs^x>48y0HQ-W#l-H@RDR%Xh0@MbVYQCYD#C#1wk zGDMRiQh$|&mhPrr3(Objk|YUu+~7$$qo$k*DW@WC-ghP?QBoiyR*LH?lkcO;a=1i| zj{?w50y@mfX+5q3Ou%AnG=P|j1>m{>Tpxh7@Pv1rTtM7;?9U{Gwj4OZn49m5q*EaYW0K2|Uv_w%AtNj@uW zni3e3s-&-SVNRCG4JTK`>Ky{rRE^)!XT_rScjB6B@0B=`=36ECa4usCnqW*P;DV&b z8`MRZ^mrX@v{}jO>vqz85$Y1G(3LA}C{}m5%3aa6muczodLgJ-Q?IB}=%S@WSPF)> zRH#T_O%-Nxg(1bF%|(MQgdUBoC~$2-F^IH zEPbAWAEyRHyrRp(RBMtiBu&5|l}u$P$5Ml69|(rgm);|o#<&G&B$LK1#SwE{23v96 z@eN6Ow`f=M793mN)RyRO8))+mH_{e;nqL5`cm46onPGk6inRz-asEw*v@jF9`6vQT z4$*qLrFj7KwwSg>1lc^U4p#7s-?3Xpx2blkHi-|X&^vSqQExLz*2hA~IG<39AD?Q% zM=sLz;RRyFy7xjLm2LtTK(GTN3XM0S_HOc~v4qt#g}1-wsZNxy;P643ZhX-IFTuuJ zfoIgAEfq`RqT>}xCX`-gQ#~8HTdYcHYwt!3eeevX{5*Xe2FICk=>xA6oWvFZ%^(p@ zpN8Rhe9Fa<54<@1og{u2QkGU6NSJ8uQXj5zO`B>s5i!(VUR7m0t*2Gs*#i1fM9EC4)@#nefP(j#@ z%ue8NDD#KXVwZ9OgO`?zEV&MBcgiA%EX#7;s@%bWE zjxiiQFe0H3G(jW^=8xWxgv}?m@TP=pGLMakVG=9e@S7VUK@dgyKoDmHeEwt>13Hko z!t`Ihtd$(0lN7cXk;f=LJfe8RF&h5zl4B>q0zaqYaoQPDK~F${S>>QS9#iUTW?XF42B|gBR6=-I^WfsELL@e> zr7V4Hj0=b=L(yTFLd%`@Nv)2Bj2dS?i{n0lVS|!IHjYz_V~Tsw*7|_VylTxtjhJ=C zrI9q);_roFzmh4Ttxy3ogOM@ zHJzck2$xt_h5kq#Dg_m-M8OT3#6`M^=BGbNNAytN$OjrfF#?x4#7#5Q7K;^}aPI+^ zHHSWehV3mxk6_zFl?&y;7jKl3;AI4Z?BlIF)7Y;|=X10NsRfh9X@RL?I+-d$r!XTM z!Sx2Pf)7=ZLo&}4u*HOPw$!Ll3eFKxI%m8*3d01>=Bdx|VY^>GewSov08{Ehe~L;8 z0BS}BQP~g%kwgedCQ}&ArzXeXPU5N`ntz^NyFkh5D_7_wFd;=Jktrw_spyMrl$vYA z`^*$r;A!+x>DN56=-l$d^zlCG)G3&&j59;{(aw{JBTM;sq5gIg8fiv*<*P4V%n-d& zUVY<zI^>dsYql#B{`kIrZ23^5d-QhM? zP_r#dUQ?(Je2q)dHlN~3l8RENt-`I3<>-(UeSu5+^>>yugbo%P*-Ug|IzU#)@#lU7 zA59UjJ=M@4Qt#A$>Uy-7$9_d@ggXZ1_kG4kqpHtNX+Z5FX#fc&n<4#WEFD9&BV{G} zf>xltOey9Fed|jn;O`81iSY#~4d_o?X-GFHiBli8(hz^UNMh)NSCU3`o4T;{!7&}7 zzFj3L_=ce*(LJn6qdvE!qtsWiG(eK`+7o|#O3<*gN@K3ATk?rJjlyb+dR2L$v&Sf~ z6R_$s45)a>K}6CA3=rn32xl3~ink_PDWr5-a3=@=AtBIjHgk6#hF1Rq;^ z)zSFYQuFEfs#6LFi!x3KU*>b18eFo1X&f$wMRv!;CvS_c;qj#g6WpRxgOAD5#j6_c zZxSB`b7}^0n5KrfCrWhNtVU}HEw=>7OpN5jpBhA4nidE}7Hd?>P7OXcRf7>SpBcm`TcDyH+Ve`F(WkEP(Jse{IL_m6o*=(|@YQ90mf|nr zRp9qT#BnA8TuK4@5xiFerr?wD`}a!6c>si0MF8kW@S=bTkMfPQIL?==9A_>3@(A84 z1Q4F9A|gww9cR8E!4W|Rtw(yD???wwx==EE8 z&uKhnSmO%bR>0z?D9ShbT8#up@*RcW#_PHoc)#)RB#x?B{1kirwve-%grFaZ`vbt@ zr>Ot=laTYjH8jtjWp7BqIotrbtPk)IX{hrjW;5}38Iz0%JNAUg*0nmX-311y`9g97~ z`^yxbpgBFj`xgUwWhA##q%=tuA zjH|h$_C=4YbEbBrV3h;47X^#fI1vSNpGIB{Q)}hA(=fG4$02E}Md;B#+^r=?7$8{_PM6m0esU@Uv<~h&)mN@$0#gfK# zILC;~1QqMvzfykF?mU8T^RIy>e=fj(};7b74X!vx*5C_rVkw^Rz4o`zc{_)z zKT_W3EdHoI7cCVeRiAwpy>}yuVA6cz@8fU>0NeZ#j9@$}f9l)Rv(Wj9c;QO^cLehL zvcXyCeADB{1A*M!hfBUoCS&(E$@@KKEbPrKNs-?EB;mdohl7TEOcIF z{2u=wwDMnp_zwZ5ah~*>^8cb0Pv!f^0Q`&vuSfc40aH&T?c>*0{1(Lj2Jo;If6c1^ z@Z&lK#HRpLPbcZKR{S3zejG53-xB{>E1vlMrUetf-wD8fpQRREuf(ifo0eI|E zjjrXf%Yq62`T)FSxra~j=hb>J@%L&Arub+8zQ=+I|8WZ@{0~|%#WzIphaaVHS6DE` z-(!ZMgbv|y%YUM%&@f3dAJ01AiC5)YLY+Q83T_C%eF69}3#R-Yr$78Gbe=4c-;)9SUzlNVq4W18 z@V{%}e+%*71AGnWOZ)k?6;DN-SI?Q_kK!L^R`ugL&mw&r;7No?`t4Rcr5_H!j|bo{ z2jFKcn2P>O3nqFMG??+D__^PL2_J1WqT*G3e|L$3sFltmMbMAv&)O9dqUhm>fqoQx zAOL?V06!gop9#RuN)DzWRf4%UOsR7FEw8ow&*WH z`R~^7>8Q_F0{)lT(aJ_<3gCqvDrYFvV|f5qu@TADRAC$>-ugeivEkizWDfSEJB#of{GV zZom-)nf~00e*@zG4sZ|Jg~Xp@)>W$fYu9-6NT2`Rf{Fi2X%WoNLg&sB{5;((@rqtH zpdV<95rv`j-|OEOI)7Gz-Z?EEJ>us)3nqRJnD({Md3PW^#SfUUh0X_zUyaukKi|b4 zeik~PC=vfIEB=cm;_pA%OaHYJ@r&ns@!u~Izt)QXNs0LHF7VR-Uy1mEMPB?u!>d=m zrDoZ(&^fzA{4-YkvJ&x+o$k@ED-r(>R{ZJ`@v9bl>DQNtf6j{ER3biNjTb{D;;*sd zb0y*%&hYZTp+x*+R{S59h;Ov|=le^<-)_Z|K0R)=4}!h^d!h4=K>Ei5@Dl;}^8xs4 z0r-c2KN>}wKt5-n|N0f+u@+U{#aKTsrpc>;U8f50b0O9K7GqVv0`NPK{%oDT1Msz# zD*YMgAvOU%3-hlE=pE4?1B@p^e->l@JOkLHx6rwb@G(9U0^#2an8pW6_A<YgPRxkZY z&V_)VGv%M}TnZT7XN0m`4EbL{@kYNFI$eO@dx=^5kZDR z62e-Nl@R!a26eG++D01YYB!3Hx%*<&mRW0U1QlL&6V*k8(M^F$bmc{*fl!1*h(v@? zLD45cH}MumUA_JObLPy<^JovXJpcJPbLN~gGtatb&H-=dd*J#s{z34C)%-hd!q0#& zq7PqBN5MQJ`l0z81K0eVY}L;Tr@li-^Fr@#-u|Gq@;1+YIF?=`T#2c6!VRzIRP+8^Ep7kTvuXTgh^&z;nZ|8wAT z*n`XaD=`1%{yzX-XZ>8u9M%3W@G{2p`3-Y67Jlc3CE#K|^TP=EEb{mujkiWPQWw2B zVH3FM1AFPI|xMe%fLk*!(o-Rr?>RcAKU>h@>vkZTev^i-)a9O zcn$K?Cx+-h2QKu{Ke*Uee{j52&wdB~hV$j?)c;fP@*6|=GvP15Z{Je%`7QYKTfu2Q zzk>_?IpJUMe&nr3^17N2!cp`CiOAn|V6B&5*eAvB3NR)!V(qUAYg@QK*aEiEO+I_T z#UA>DS@1Q;_eENX-cfMjXDGY@KF;85Te1EwFSP(HjHvjOd5iK33WD(N_O?;gwGNx4`xJ_@V0a zcnia4;M%^v1K$Pxz3?OcegpH2=!fJ#2SwHMUkWbzpC3ZW=eu$ytR%=n%!5r{VLW!y zyS#^VW2l)v#HFzKrcjkJ@&Wm5@IHza1Z>ll_T6~H?d(nV2EdnYQemG$6UnRLql+%458Ad$$nT_HJ=G?HvK;zA64x z#uiM*+7T=ym#0_`R>6(bTw&n?tel8wx!ldtYW%K@p>&PIKypb}>Z@k*v2~dMzH0fM z{7cG@oUup#FbbsV0LxwV;!md(+5m z#l~uLQmfiIcDdkElUZSOTyNUb*rlD9?Czeb0`0K-*0Rgm=Hd#%zK8Ro7N-w*x#Jzp zCU%Z)&nmQ*?jUMgaE^Yi##s-en|DP$m;+JDHJ?1AvSYAkq9<{KVs6zeH%-={3$m78 zDT^*tJ_E_7R25NKz44om5Q)K^=d*;84yCkFyVTJUK_PE?jF_oMnagUNm&)L*D6J9h zAa+QyjZWomwbrd4v0GydiKms>rEJvQn;NzBo3NYAIlU>YLOs#~bIu;_%{E84=|R05 zs~b{4YHj$;5}&EAsC4VSwzSlpw6$r<-mA8{QkLDPD|hf@dd5u_yqV^NnPzk?#cMCQ z#w8;vWTj{8@1Fs2GmC~DTfv=ep7lEJnw!&epY-NRn~t-RT?z}`xP*&PaqMfAl#SX4 zs;s1H$q_gvPjE%R%AT$=z@&j}Sx!bDPfXAZ%*QW!ns{(5F1@%iyic{BIy+D4xcmOQ z=@_>Y(?gPbr$gD93vsg`khK$$bJcr5NBiRimzGoe3RL5k#M0|_DY{4PM@+n zcLj|u;njZa%`V#^yC;!1WUR?YaUrdCA0M8@ks`K~^;7B0w-TkCmXX?)I=*FeM?8fZ zKM?cPVC3*Wv2L0sd4X1^yphj4tEkILaDJ4LAc8jMHXpyp<%^~F4XW_!x26&=~SDFi`Vy^4kJ;`)+T+Kx-Gl#eMjna zbpPdgZTnc4pIvz=6$R=ft>)x{avJfxa310^Ftx@7*lOgU{ejck$4x^{t+LXJ0Xw;E V4|ZW?9!pnSTvflO$tG@`{0FpJ|9AiZ diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.map b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.map index 7326831a..86ac99e2 100644 --- a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.map +++ b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.map @@ -1,21 +1,17 @@ -Archive member included because of file (symbol) +Archive member included to satisfy reference by file (symbol) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) THUMB Flash Debug/../../obj/lcdcontroller.o (abs) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) (memcpy) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - (__vfprintf_int) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - (__vfscanf_int) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) (__umoddi3) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - (__do_debug_operation_mempoll) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) (__errno) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) (__floatsisf) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) (memcpy) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) (__aeabi_uldivmod) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) (__aeabi_i2f) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o (frexp) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) (fabs) Discarded input sections @@ -39,29 +35,44 @@ Discarded input sections .data 0x00000000 0x0 THUMB Flash Debug/../../obj/timer.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/timer.o .text.TimerDeinit - 0x00000000 0x10 THUMB Flash Debug/../../obj/timer.o + 0x00000000 0xc THUMB Flash Debug/../../obj/timer.o + .text.TimerSet + 0x00000000 0xc THUMB Flash Debug/../../obj/timer.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/vectors.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/vectors.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/vectors.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/core_cm3.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/core_cm3.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/core_cm3.o + .debug_info 0x00000000 0x52 THUMB Flash Debug/../../obj/core_cm3.o + .debug_abbrev 0x00000000 0x27 THUMB Flash Debug/../../obj/core_cm3.o + .debug_pubnames + 0x00000000 0x12 THUMB Flash Debug/../../obj/core_cm3.o + .debug_pubtypes + 0x00000000 0x9f THUMB Flash Debug/../../obj/core_cm3.o + .debug_aranges + 0x00000000 0x18 THUMB Flash Debug/../../obj/core_cm3.o + .debug_line 0x00000000 0x1d THUMB Flash Debug/../../obj/core_cm3.o + .debug_str 0x00000000 0x217 THUMB Flash Debug/../../obj/core_cm3.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/core_cm3.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/core_cm3.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/system_efm32.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/system_efm32.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/system_efm32.o .text.SystemHFXOClockGet 0x00000000 0xc THUMB Flash Debug/../../obj/system_efm32.o .text.SystemHFXOClockSet - 0x00000000 0x2c THUMB Flash Debug/../../obj/system_efm32.o + 0x00000000 0x24 THUMB Flash Debug/../../obj/system_efm32.o .text.SystemULFRCOClockGet 0x00000000 0x8 THUMB Flash Debug/../../obj/system_efm32.o .text.SystemLFXOClockSet - 0x00000000 0x2c THUMB Flash Debug/../../obj/system_efm32.o + 0x00000000 0x24 THUMB Flash Debug/../../obj/system_efm32.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_acmp.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_acmp.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_CapsenseInit - 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_acmp.o + 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_CapsenseChannelSet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_Disable @@ -69,396 +80,711 @@ Discarded input sections .text.ACMP_Enable 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_Reset - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_acmp.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_GPIOSetup - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_acmp.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_ChannelSet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_Init - 0x00000000 0x54 THUMB Flash Debug/../../obj/efm32_acmp.o + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_frame 0x00000000 0xcc THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_info 0x00000000 0x5b1 THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_abbrev 0x00000000 0x1ad THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_loc 0x00000000 0x21f THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_pubnames + 0x00000000 0xc0 THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_pubtypes + 0x00000000 0x18a THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_aranges + 0x00000000 0x58 THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_ranges 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_line 0x00000000 0x35d THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_str 0x00000000 0x646 THUMB Flash Debug/../../obj/efm32_acmp.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_acmp.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_acmp.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_adc.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_adc.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_adc.o .text.ADC_Init - 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_adc.o + 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_adc.o .text.ADC_InitScan - 0x00000000 0x11c THUMB Flash Debug/../../obj/efm32_adc.o + 0x00000000 0xf8 THUMB Flash Debug/../../obj/efm32_adc.o .text.ADC_InitSingle - 0x00000000 0x118 THUMB Flash Debug/../../obj/efm32_adc.o + 0x00000000 0xf4 THUMB Flash Debug/../../obj/efm32_adc.o .text.ADC_PrescaleCalc - 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_adc.o - .text.ADC_Reset - 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_adc.o - .text.ADC_TimebaseCalc 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_adc.o + .text.ADC_Reset + 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_adc.o + .text.ADC_TimebaseCalc + 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_frame 0x00000000 0xb0 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_info 0x00000000 0xa27 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_abbrev 0x00000000 0x219 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_loc 0x00000000 0x2bc THUMB Flash Debug/../../obj/efm32_adc.o + .debug_pubnames + 0x00000000 0x3b0 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_pubtypes + 0x00000000 0x206 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_aranges + 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_ranges 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_line 0x00000000 0x369 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_str 0x00000000 0xb39 THUMB Flash Debug/../../obj/efm32_adc.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_adc.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_adc.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_aes.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_aes.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CBC128 - 0x00000000 0x138 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0xfc THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CBC256 - 0x00000000 0x154 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x128 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CFB128 - 0x00000000 0xc0 THUMB Flash Debug/../../obj/efm32_aes.o - .text.AES_CFB256 - 0x00000000 0xb8 THUMB Flash Debug/../../obj/efm32_aes.o - .text.AES_CTR128 0x00000000 0x9c THUMB Flash Debug/../../obj/efm32_aes.o + .text.AES_CFB256 + 0x00000000 0xa8 THUMB Flash Debug/../../obj/efm32_aes.o + .text.AES_CTR128 + 0x00000000 0x7c THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CTR256 - 0x00000000 0x94 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x8c THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CTRUpdate32Bit - 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_DecryptKey128 - 0x00000000 0x6c THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_DecryptKey256 - 0x00000000 0x78 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_ECB128 - 0x00000000 0xa0 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x78 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_ECB256 - 0x00000000 0x98 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x80 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_OFB128 - 0x00000000 0x90 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_OFB256 - 0x00000000 0xac THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x84 THUMB Flash Debug/../../obj/efm32_aes.o + .debug_frame 0x00000000 0x21c THUMB Flash Debug/../../obj/efm32_aes.o + .debug_info 0x00000000 0x145f THUMB Flash Debug/../../obj/efm32_aes.o + .debug_abbrev 0x00000000 0x25b THUMB Flash Debug/../../obj/efm32_aes.o + .debug_loc 0x00000000 0x182c THUMB Flash Debug/../../obj/efm32_aes.o + .debug_pubnames + 0x00000000 0x106 THUMB Flash Debug/../../obj/efm32_aes.o + .debug_pubtypes + 0x00000000 0x106 THUMB Flash Debug/../../obj/efm32_aes.o + .debug_aranges + 0x00000000 0x80 THUMB Flash Debug/../../obj/efm32_aes.o + .debug_ranges 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_aes.o + .debug_line 0x00000000 0xa28 THUMB Flash Debug/../../obj/efm32_aes.o + .debug_str 0x00000000 0x3ae THUMB Flash Debug/../../obj/efm32_aes.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_aes.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_aes.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_assert.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_assert.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_assert.o + .debug_line 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_assert.o + .debug_str 0x00000000 0x1a9 THUMB Flash Debug/../../obj/efm32_assert.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_assert.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_assert.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_cmu.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_cmu.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_cmu.o - .text.CMU_Log2ToDiv - 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_Calibrate - 0x00000000 0x90 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0x54 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_ClockDivGet - 0x00000000 0xac THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_FreezeEnable - 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_HFRCOBandGet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_HFRCOBandSet - 0x00000000 0xd4 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0xa0 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_HFRCOStartupDelayGet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_HFRCOStartupDelaySet - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_LCDClkFDIVGet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_LCDClkFDIVSet - 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_OscillatorTuningGet - 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_OscillatorTuningSet - 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_PCNTClockExternalGet - 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_PCNTClockExternalSet - 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_cmu.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_dac.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_dac.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_dac.o .text.DAC_Enable - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_dac.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_dac.o .text.DAC_Init - 0x00000000 0x9c THUMB Flash Debug/../../obj/efm32_dac.o + 0x00000000 0x80 THUMB Flash Debug/../../obj/efm32_dac.o .text.DAC_InitChannel 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_dac.o .text.DAC_PrescaleCalc - 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_dac.o + 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_dac.o .text.DAC_Reset - 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_dac.o + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_frame 0x00000000 0x80 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_info 0x00000000 0x7e2 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_abbrev 0x00000000 0x228 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_loc 0x00000000 0x22a THUMB Flash Debug/../../obj/efm32_dac.o + .debug_pubnames + 0x00000000 0x332 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_pubtypes + 0x00000000 0x1a3 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_aranges + 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_ranges 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_line 0x00000000 0x340 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_str 0x00000000 0x7d0 THUMB Flash Debug/../../obj/efm32_dac.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_dac.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_dac.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_dbg.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_dbg.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_dbg.o .text.DBG_SWOEnable - 0x00000000 0x64 THUMB Flash Debug/../../obj/efm32_dbg.o + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_frame 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_info 0x00000000 0x41c THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_abbrev 0x00000000 0x1d9 THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_loc 0x00000000 0xa2 THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_pubnames + 0x00000000 0x24b THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_pubtypes + 0x00000000 0x109 THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_aranges + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_ranges 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_line 0x00000000 0x2da THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_str 0x00000000 0x513 THUMB Flash Debug/../../obj/efm32_dbg.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_dbg.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_dbg.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_dma.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_dma.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_Prepare - 0x00000000 0xb8 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x94 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_IRQHandler - 0x00000000 0x8c THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x7c THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ActivateAuto - 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ActivateBasic - 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ActivatePingPong - 0x00000000 0x60 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ActivateScatterGather - 0x00000000 0xa0 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x84 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_CfgChannel - 0x00000000 0x90 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x64 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_CfgDescr - 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_CfgDescrScatterGather - 0x00000000 0x78 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ChannelEnabled 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_RefreshPingPong - 0x00000000 0x94 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x7c THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_Reset - 0x00000000 0x54 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_Init - 0x00000000 0x5c THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_dma.o + .debug_frame 0x00000000 0x1e4 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_info 0x00000000 0x1184 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_abbrev 0x00000000 0x366 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_loc 0x00000000 0xa4d THUMB Flash Debug/../../obj/efm32_dma.o + .debug_pubnames + 0x00000000 0x866 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_pubtypes + 0x00000000 0x25c THUMB Flash Debug/../../obj/efm32_dma.o + .debug_aranges + 0x00000000 0x80 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_ranges 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_line 0x00000000 0x479 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_str 0x00000000 0xca9 THUMB Flash Debug/../../obj/efm32_dma.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_dma.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_dma.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_ebi.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_ebi.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_Disable - 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_ebi.o + 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_BankEnable - 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_ebi.o - .text.EBI_BankAddress 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_ebi.o + .text.EBI_BankAddress + 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_ChipSelectEnable - 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_ebi.o + 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_PolaritySet - 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_ebi.o + 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_ReadTimingSet - 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_ebi.o + 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_WriteTimingSet - 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_ebi.o + 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_AddressTimingSet 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_Init - 0x00000000 0x104 THUMB Flash Debug/../../obj/efm32_ebi.o + 0x00000000 0xd4 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_frame 0x00000000 0xd8 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_info 0x00000000 0xb07 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_abbrev 0x00000000 0x263 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_loc 0x00000000 0x66f THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_pubnames + 0x00000000 0x162 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_pubtypes + 0x00000000 0x14d THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_aranges + 0x00000000 0x60 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_ranges 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_line 0x00000000 0x40a THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_str 0x00000000 0x5b6 THUMB Flash Debug/../../obj/efm32_ebi.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_ebi.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_ebi.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_emu.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_emu.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_emu.o .text.EMU_Restore - 0x00000000 0xd0 THUMB Flash Debug/../../obj/efm32_emu.o + 0x00000000 0x88 THUMB Flash Debug/../../obj/efm32_emu.o .text.EMU_EnterEM2 - 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_emu.o + 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_emu.o .text.EMU_EnterEM3 - 0x00000000 0x74 THUMB Flash Debug/../../obj/efm32_emu.o + 0x00000000 0x60 THUMB Flash Debug/../../obj/efm32_emu.o .text.EMU_EnterEM4 - 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_emu.o + 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_emu.o .text.EMU_MemPwrDown 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_emu.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_gpio.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_gpio.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_DbgLocationSet - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_IntConfig - 0x00000000 0xac THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x68 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinInGet - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinOutClear - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinOutGet - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinOutSet - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinOutToggle - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PortInGet - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PortOutClear - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PortOutGet - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PortOutSet - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PortOutSetVal - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PortOutToggle - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_gpio.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_i2c.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_i2c.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_BusFreqGet - 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_BusFreqSet - 0x00000000 0x54 THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_Enable - 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_Init - 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_Reset - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_Transfer - 0x00000000 0x454 THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0x4a8 THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_TransferInit - 0x00000000 0xa0 THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0x88 THUMB Flash Debug/../../obj/efm32_i2c.o .rodata.i2cNSum 0x00000000 0x4 THUMB Flash Debug/../../obj/efm32_i2c.o .bss.i2cTransfer - 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_frame 0x00000000 0x114 THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_info 0x00000000 0x869 THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_abbrev 0x00000000 0x2af THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_loc 0x00000000 0x618 THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_pubnames + 0x00000000 0x4d7 THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_pubtypes + 0x00000000 0x198 THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_aranges + 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_ranges 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_line 0x00000000 0x42e THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_str 0x00000000 0x7a1 THUMB Flash Debug/../../obj/efm32_i2c.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_i2c.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_i2c.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_int.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_int.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_int.o .bss.INT_LockCnt 0x00000000 0x4 THUMB Flash Debug/../../obj/efm32_int.o + .debug_info 0x00000000 0x91 THUMB Flash Debug/../../obj/efm32_int.o + .debug_abbrev 0x00000000 0x5d THUMB Flash Debug/../../obj/efm32_int.o + .debug_pubnames + 0x00000000 0x22 THUMB Flash Debug/../../obj/efm32_int.o + .debug_pubtypes + 0x00000000 0xc5 THUMB Flash Debug/../../obj/efm32_int.o + .debug_aranges + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_int.o + .debug_line 0x00000000 0x17a THUMB Flash Debug/../../obj/efm32_int.o + .debug_str 0x00000000 0x242 THUMB Flash Debug/../../obj/efm32_int.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_int.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_int.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_lcd.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_lcd.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_Initialize - 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_VLCDSelect - 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_UpdateCtrl 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_FrameCountInit - 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_AnimInit - 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_SegmentRangeEnable - 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_SegmentSet - 0x00000000 0x84 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_SegmentSetLow - 0x00000000 0x64 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_SegmentSetHigh - 0x00000000 0x64 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_ContrastSet - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_VBoostSet 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_frame 0x00000000 0xc0 THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_info 0x00000000 0xa84 THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_abbrev 0x00000000 0x26b THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_loc 0x00000000 0x89a THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_pubnames + 0x00000000 0x170 THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_pubtypes + 0x00000000 0x23d THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_aranges + 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_ranges 0x00000000 0x60 THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_line 0x00000000 0x3e7 THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_str 0x00000000 0x84f THUMB Flash Debug/../../obj/efm32_lcd.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_lcd.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_lcd.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_lesense.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_lesense.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_lesense.o + .debug_info 0x00000000 0x75 THUMB Flash Debug/../../obj/efm32_lesense.o + .debug_abbrev 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_lesense.o + .debug_pubnames + 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_lesense.o + .debug_pubtypes + 0x00000000 0xb8 THUMB Flash Debug/../../obj/efm32_lesense.o + .debug_aranges + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_lesense.o + .debug_line 0x00000000 0xfa THUMB Flash Debug/../../obj/efm32_lesense.o + .debug_str 0x00000000 0x231 THUMB Flash Debug/../../obj/efm32_lesense.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_lesense.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_lesense.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_letimer.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_letimer.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_CompareGet - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_CompareSet - 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_Enable - 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_FreezeEnable - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_Init - 0x00000000 0xac THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0xa4 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_RepeatGet - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_RepeatSet - 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_Reset - 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_frame 0x00000000 0xcc THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_info 0x00000000 0x613 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_abbrev 0x00000000 0x278 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_loc 0x00000000 0x394 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_pubnames + 0x00000000 0xcc THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_pubtypes + 0x00000000 0x140 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_aranges + 0x00000000 0x58 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_ranges 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_line 0x00000000 0x3ab THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_str 0x00000000 0x49f THUMB Flash Debug/../../obj/efm32_letimer.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_letimer.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_letimer.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_leuart.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_leuart.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_BaudrateCalc 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_BaudrateGet - 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_leuart.o + .text.LEUART_FreezeEnable + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_Reset - 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_RxExt 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_Tx - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_TxExt - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_leuart.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_mpu.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_mpu.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_mpu.o .text.MPU_ConfigureRegion - 0x00000000 0x68 THUMB Flash Debug/../../obj/efm32_mpu.o + 0x00000000 0x54 THUMB Flash Debug/../../obj/efm32_mpu.o + .debug_frame 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_mpu.o + .debug_info 0x00000000 0x30b THUMB Flash Debug/../../obj/efm32_mpu.o + .debug_abbrev 0x00000000 0x104 THUMB Flash Debug/../../obj/efm32_mpu.o + .debug_pubnames + 0x00000000 0x2a THUMB Flash Debug/../../obj/efm32_mpu.o + .debug_pubtypes + 0x00000000 0x137 THUMB Flash Debug/../../obj/efm32_mpu.o + .debug_aranges + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_mpu.o + .debug_ranges 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_mpu.o + .debug_line 0x00000000 0x20c THUMB Flash Debug/../../obj/efm32_mpu.o + .debug_str 0x00000000 0x5ac THUMB Flash Debug/../../obj/efm32_mpu.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_mpu.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_mpu.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_msc.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_msc.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_msc.o + .fast 0x00000000 0x180 THUMB Flash Debug/../../obj/efm32_msc.o .text.MSC_Init 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_msc.o .text.MSC_Deinit - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_msc.o - .fast 0x00000000 0x214 THUMB Flash Debug/../../obj/efm32_msc.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_msc.o + .debug_frame 0x00000000 0x64 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_info 0x00000000 0x27e THUMB Flash Debug/../../obj/efm32_msc.o + .debug_abbrev 0x00000000 0x115 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_loc 0x00000000 0x211 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_pubnames + 0x00000000 0xbb THUMB Flash Debug/../../obj/efm32_msc.o + .debug_pubtypes + 0x00000000 0xec THUMB Flash Debug/../../obj/efm32_msc.o + .debug_aranges + 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_ranges 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_line 0x00000000 0x327 THUMB Flash Debug/../../obj/efm32_msc.o + .debug_str 0x00000000 0x365 THUMB Flash Debug/../../obj/efm32_msc.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_msc.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_msc.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_opamp.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_opamp.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_opamp.o + .debug_info 0x00000000 0x75 THUMB Flash Debug/../../obj/efm32_opamp.o + .debug_abbrev 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_opamp.o + .debug_pubnames + 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_opamp.o + .debug_pubtypes + 0x00000000 0xb8 THUMB Flash Debug/../../obj/efm32_opamp.o + .debug_aranges + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_opamp.o + .debug_line 0x00000000 0xfa THUMB Flash Debug/../../obj/efm32_opamp.o + .debug_str 0x00000000 0x22f THUMB Flash Debug/../../obj/efm32_opamp.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_opamp.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_opamp.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_pcnt.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_pcnt.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_CounterReset - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_CounterTopSet - 0x00000000 0xa4 THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0x9c THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_Enable 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_FreezeEnable - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_Init - 0x00000000 0xf4 THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0xdc THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_TopBufferSet 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_Reset - 0x00000000 0x6c THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_TopSet - 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_frame 0x00000000 0xc8 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_info 0x00000000 0x8b1 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_abbrev 0x00000000 0x284 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_loc 0x00000000 0x5e7 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_pubnames + 0x00000000 0x12e THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_pubtypes + 0x00000000 0x10c THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_aranges + 0x00000000 0x58 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_ranges 0x00000000 0x60 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_line 0x00000000 0x408 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_str 0x00000000 0x3c6 THUMB Flash Debug/../../obj/efm32_pcnt.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_pcnt.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_pcnt.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_prs.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_prs.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_prs.o .text.PRS_SourceSignalSet - 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_prs.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_prs.o + .debug_frame 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_prs.o + .debug_info 0x00000000 0x1a3 THUMB Flash Debug/../../obj/efm32_prs.o + .debug_abbrev 0x00000000 0xf3 THUMB Flash Debug/../../obj/efm32_prs.o + .debug_loc 0x00000000 0x83 THUMB Flash Debug/../../obj/efm32_prs.o + .debug_pubnames + 0x00000000 0x2a THUMB Flash Debug/../../obj/efm32_prs.o + .debug_pubtypes + 0x00000000 0xfd THUMB Flash Debug/../../obj/efm32_prs.o + .debug_aranges + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_prs.o + .debug_ranges 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_prs.o + .debug_line 0x00000000 0x29f THUMB Flash Debug/../../obj/efm32_prs.o + .debug_str 0x00000000 0x2d5 THUMB Flash Debug/../../obj/efm32_prs.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_prs.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_prs.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_rmu.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_rmu.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_rmu.o .text.RMU_LockupResetDisable - 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_rmu.o + 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_rmu.o .text.RMU_ResetCauseClear - 0x00000000 0x5c THUMB Flash Debug/../../obj/efm32_rmu.o + 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_rmu.o .text.RMU_ResetCauseGet - 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_rmu.o + 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_frame 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_info 0x00000000 0x2d6 THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_abbrev 0x00000000 0x1b4 THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_loc 0x00000000 0x19b THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_pubnames + 0x00000000 0x8e THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_pubtypes + 0x00000000 0xef THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_aranges + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_ranges 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_line 0x00000000 0x304 THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_str 0x00000000 0x2f9 THUMB Flash Debug/../../obj/efm32_rmu.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_rmu.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_rmu.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_rtc.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_rtc.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_rtc.o .text.RTC_CompareGet - 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_rtc.o - .text.RTC_CompareSet - 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_rtc.o - .text.RTC_Enable - 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_rtc.o - .text.RTC_FreezeEnable - 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_rtc.o - .text.RTC_Init - 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_rtc.o - .text.RTC_Reset 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_rtc.o - .text.RTC_CounterReset + .text.RTC_CompareSet + 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_rtc.o + .text.RTC_Enable + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_rtc.o + .text.RTC_FreezeEnable + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_rtc.o + .text.RTC_Init + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_rtc.o + .text.RTC_Reset 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_rtc.o + .text.RTC_CounterReset + 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_frame 0x00000000 0xa0 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_info 0x00000000 0x3a2 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_abbrev 0x00000000 0x21e THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_loc 0x00000000 0x154 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_pubnames + 0x00000000 0xb0 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_pubtypes + 0x00000000 0xf4 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_aranges + 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_ranges 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_line 0x00000000 0x356 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_str 0x00000000 0x338 THUMB Flash Debug/../../obj/efm32_rtc.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_rtc.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_rtc.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_system.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_system.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_system.o .text.SYSTEM_GetCalibrationValue - 0x00000000 0x6c THUMB Flash Debug/../../obj/efm32_system.o + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_system.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_timer.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_timer.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_Enable - 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_timer.o + 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_Init - 0x00000000 0x78 THUMB Flash Debug/../../obj/efm32_timer.o + 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_InitCC - 0x00000000 0x6c THUMB Flash Debug/../../obj/efm32_timer.o + 0x00000000 0x68 THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_Lock - 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_timer.o + 0x00000000 0x8 THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_Reset - 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_timer.o + 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_Unlock 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_timer.o + .debug_frame 0x00000000 0x84 THUMB Flash Debug/../../obj/efm32_timer.o + .debug_info 0x00000000 0x695 THUMB Flash Debug/../../obj/efm32_timer.o + .debug_abbrev 0x00000000 0x15d THUMB Flash Debug/../../obj/efm32_timer.o + .debug_loc 0x00000000 0x87 THUMB Flash Debug/../../obj/efm32_timer.o + .debug_pubnames + 0x00000000 0x73 THUMB Flash Debug/../../obj/efm32_timer.o + .debug_pubtypes + 0x00000000 0x20f THUMB Flash Debug/../../obj/efm32_timer.o + .debug_aranges + 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_timer.o + .debug_ranges 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_timer.o + .debug_line 0x00000000 0x335 THUMB Flash Debug/../../obj/efm32_timer.o + .debug_str 0x00000000 0x7c5 THUMB Flash Debug/../../obj/efm32_timer.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_timer.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_timer.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_usart.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_usart.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_BaudrateAsyncSet - 0x00000000 0x74 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x60 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_BaudrateCalc - 0x00000000 0x64 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_BaudrateGet - 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_BaudrateSyncSet - 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_Enable - 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_Reset - 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_usart.o - .text.USART_InitSync - 0x00000000 0x54 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_InitAsync - 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_InitIrDA - 0x00000000 0x64 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_usart.o + .text.USART_InitSync + 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_Rx 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_RxDouble @@ -468,13 +794,29 @@ Discarded input sections .text.USART_RxExt 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_Tx - 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_TxDouble - 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_TxDoubleExt 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_TxExt - 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_usart.o + .debug_frame 0x00000000 0x194 THUMB Flash Debug/../../obj/efm32_usart.o + .debug_info 0x00000000 0xb4d THUMB Flash Debug/../../obj/efm32_usart.o + .debug_abbrev 0x00000000 0x20b THUMB Flash Debug/../../obj/efm32_usart.o + .debug_loc 0x00000000 0x579 THUMB Flash Debug/../../obj/efm32_usart.o + .debug_pubnames + 0x00000000 0x3e6 THUMB Flash Debug/../../obj/efm32_usart.o + .debug_pubtypes + 0x00000000 0x21c THUMB Flash Debug/../../obj/efm32_usart.o + .debug_aranges + 0x00000000 0xa0 THUMB Flash Debug/../../obj/efm32_usart.o + .debug_ranges 0x00000000 0x90 THUMB Flash Debug/../../obj/efm32_usart.o + .debug_line 0x00000000 0x452 THUMB Flash Debug/../../obj/efm32_usart.o + .debug_str 0x00000000 0xa43 THUMB Flash Debug/../../obj/efm32_usart.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_usart.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_usart.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_vcmp.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_vcmp.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_vcmp.o @@ -483,760 +825,1909 @@ Discarded input sections .text.VCMP_TriggerSet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_vcmp.o .text.VCMP_Init - 0x00000000 0x114 THUMB Flash Debug/../../obj/efm32_vcmp.o + 0x00000000 0x108 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_frame 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_info 0x00000000 0x2e5 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_abbrev 0x00000000 0x180 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_loc 0x00000000 0x61 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_pubnames + 0x00000000 0x8f THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_pubtypes + 0x00000000 0x12c THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_aranges + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_ranges 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_line 0x00000000 0x2fb THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_str 0x00000000 0x41a THUMB Flash Debug/../../obj/efm32_vcmp.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_vcmp.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_vcmp.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_wdog.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_wdog.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_wdog.o .text.WDOG_Enable - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_wdog.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_wdog.o .text.WDOG_Feed - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_wdog.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_wdog.o .text.WDOG_Lock - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_wdog.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_wdog.o .text.WDOG_Init - 0x00000000 0x7c THUMB Flash Debug/../../obj/efm32_wdog.o + 0x00000000 0x68 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_frame 0x00000000 0x5c THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_info 0x00000000 0x389 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_abbrev 0x00000000 0x1aa THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_loc 0x00000000 0x15c THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_pubnames + 0x00000000 0x63 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_pubtypes + 0x00000000 0x129 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_aranges + 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_ranges 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_line 0x00000000 0x318 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_str 0x00000000 0x442 THUMB Flash Debug/../../obj/efm32_wdog.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/efm32_wdog.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/efm32_wdog.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/lcdcontroller.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/lcdcontroller.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/lcdcontroller.o .text.LCD_Number - 0x00000000 0xf8 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00000000 0xd8 THUMB Flash Debug/../../obj/lcdcontroller.o .text.LCD_NumberOff - 0x00000000 0x4c THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00000000 0x40 THUMB Flash Debug/../../obj/lcdcontroller.o .text.LCD_Write - 0x00000000 0xa0 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00000000 0x90 THUMB Flash Debug/../../obj/lcdcontroller.o .text.LCD_AllOn 0x00000000 0x1c THUMB Flash Debug/../../obj/lcdcontroller.o .text.LCD_Battery - 0x00000000 0x44 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00000000 0x40 THUMB Flash Debug/../../obj/lcdcontroller.o .text.LCD_Disable - 0x00000000 0x34 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00000000 0x2c THUMB Flash Debug/../../obj/lcdcontroller.o .data.EM_alphabet 0x00000000 0xb8 THUMB Flash Debug/../../obj/lcdcontroller.o .data.EM_Numbers - 0x00000000 0x18 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00000000 0x16 THUMB Flash Debug/../../obj/lcdcontroller.o .data.EFMDisplay 0x00000000 0x4e8 THUMB Flash Debug/../../obj/lcdcontroller.o - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.twodigit - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.month_name - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.checked_day_name - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_ch - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_str - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_nstr - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_digit - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_twodigit - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_twodigits_leading_blank - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_twodigit2 - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_formatted - 0x00000000 0x3ec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.__RAL_pow10 - 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__stdin_ungetc - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.twodigit + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc_fn + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_isctype + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_toupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_tolower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_iswctype + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towlower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_ch + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_str + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigits_leading_blank + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit_optional_zero_suppress + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_wctomb + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_wctomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_mbtowc + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__getc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pow10 + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__putc + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_print_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pre_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__xlltoa - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__xltoa - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__xtoa - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.abs - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.asctime_r - 0x00000000 0xfc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.asctime - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.atexit - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc._execute_at_exit_fns - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.bsearch - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towupper + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_toupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towlower + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctl_is_exact_power_of_two - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctl_round_power_of_two - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctl_count_leading_zeroes - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctl_ilogb - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.buddy_alloc - 0x00000000 0x108 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.buddy_free - 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.buddy_heap_init - 0x00000000 0xc0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_isctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_isctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isalpha - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.islower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__digit + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isxdigit - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.__strtoull - 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.__strtoul - 0x00000000 0xec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isspace + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ispunct - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isalnum - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isprint - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isgraph - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.iscntrl - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.tolower - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.toupper - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isblank - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.toupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.islower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ispunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iscntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.toupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.div - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__aeabi_errno_addr + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_free + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoul + 0x00000000 0xdc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoull + 0x00000000 0x148 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fopen + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfprintf + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfscanf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fscanf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetpos + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ftell + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fileno + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.feof + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ferror + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fstat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gets + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.itoa - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.labs - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ldiv - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.linked_heap_init - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.linked_heap_alloc - 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.linked_heap_free - 0x00000000 0xd4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.linked_heap_realloc - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.llabs - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.lldiv - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.lltoa - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_global_locale_category + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_locale_category + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localeconv_l + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.localeconv - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.setlocale - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_compare_locale_name + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ltoa - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.malloc - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getBuf + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fflush + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fseek + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fsetpos + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.rewind + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.output_fn + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputs + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fwrite + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc_fn + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fread + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgets + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.calloc - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.free - 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setBuf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fclose + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setbuf + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setvbuf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.realloc - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.memccpy - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.mempcpy - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.memchr - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.memcmp - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.memmove - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.printf + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.puts + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.qsort - 0x00000000 0x260 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.rand - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.scanf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.snprintf - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.sprintf - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.srand - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.sscanf - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strcasecmp - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strcasestr - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_decode_error + 0x00000000 0x78 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strerror + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_register_error_decoder + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strcat - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_encode_locale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strchr - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcoll + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strcspn - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strdup - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.strftime - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_encode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_decode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime_r + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncasecmp - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncasestr - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncat - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strlcat - 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strnchr - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncmp - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncpy - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strlcpy - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strnlen - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strndup - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strnstr - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strpbrk - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strrchr - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strsep - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strspn - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strstr - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtod - 0x00000000 0x1bc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtof - 0x00000000 0x19c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtok - 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtok_r - 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtol - 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.atol - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.atoi - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.atof - 0x00000000 0x14c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atol + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtoll - 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xd0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.atoll - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtoul - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtoull - 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strxfrm + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.localtime_r - 0x00000000 0x190 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x14c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.difftime - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.checktm - 0x00000000 0x244 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.mktime - 0x00000000 0x1c0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x180 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctime - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctime_r - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.gmtime - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.gmtime_r - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.localtime - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.gettimeofday - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.settimeofday - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.time + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ulltoa - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ultoa - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.utoa - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vprintf + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vscanf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.vsnprintf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.vsprintf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.vsscanf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcscat - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcschr - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcscmp - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcscpy - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcscspn - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcslen - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsdup - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsncat - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsnchr - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsncmp - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsncpy - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsnlen - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsnstr - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcspbrk - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsrchr - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcssep - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsspn - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsstr - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcstok - 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcstok_r - 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemcpy - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemccpy - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmempcpy - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemmove - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemcmp - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemchr - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemset - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .data.libc.heap - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.__crt_get_time_of_day - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.year_lengths - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.mon_name - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.last.2692 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.__atexitfns - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.invalid - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.str1.4 - 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .data.libc.__RAL_rand_next - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tmpnam + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.duplocale + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.freelocale + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_find_locale + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_set_locale + 0x00000000 0x9c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setlocale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.newlocale + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__user_find_locale + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsinit + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen_l + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen_l + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_wide_char + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_formatted + 0x00000000 0x4cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime_l + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb_l + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc_l + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs_l + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs_l + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs_l + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs_l + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_init_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_mb_max + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_1 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_2 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_3 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_4 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_5 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_6 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_7 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_8 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_9 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_10 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_11 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_13 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_14 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_15 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_16 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1250 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1251 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1252 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1253 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1254 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1255 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1256 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1257 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1258 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans_l + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans_l + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalpha + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswprint + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswblank + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswcntrl + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswspace + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalnum + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswlower + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswupper + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswgraph + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswpunct + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswctype + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_isctype + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1258_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_singleton_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_11 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_13 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_14 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_15 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_16 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1253_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctrans_name_list + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_abbrev_month_names + 0x00000000 0x31 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1253 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_4 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_period + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_singleton + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_6 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_3_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcsrtombs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .rodata.libc.power - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.__RAL_mon_lengths - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.last.3164 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.day_name - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.month_names - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.asctime_buf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.__ctype - 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.__crt_set_time_of_day - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.atexitfn_count - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_9 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_strtok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EDOM + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_singleton_map + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_9_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_singleton_map + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_singleton_map + 0x00000000 0xe0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_range + 0x00000000 0x470 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_singleton_map + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__RAL_global_locale + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_10_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_4_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_fileno + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_get_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_uc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_singleton + 0x00000000 0xac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_range + 0x00000000 0x534 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_14_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1256_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_11_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_singleton_map + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_range + 0x00000000 0x2d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_singleton + 0x00000000 0x52 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unknown_string + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.str1.4 + 0x00000000 0xf1 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_empty_string + 0x00000000 0x1 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_plus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1250 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_8_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range2_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1251_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.streams + 0x00000000 0xc0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_singleton_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1255 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_singleton_map + 0x00000000 0x134 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_tmpnam_template + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1258 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_ascii_ctype_mask + 0x00000000 0xd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_singleton_map + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_1_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_singleton_map + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stdout + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod2 + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wctomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .data.libc.__ungot - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .data.libc._lconv - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc._tm 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.day_names - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.stdin + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_3 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_7_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.atexitfn_count + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_singleton_map + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_day_names + 0x00000000 0x3a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_abbrev_day_names + 0x00000000 0x1d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbsrtowcs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_2_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_singleton_map + 0x00000000 0xec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_singleton_map + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_space + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.heap + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_am_pm_indicator + 0x00000000 0x7 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_range_map + 0x00000000 0x5a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_buf + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcrtomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_data + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_range_map + 0x00000000 0x72 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_mon_lengths + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_asctime_buf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_range_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_1 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_2 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.errno_val + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrlen_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_5 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_singleton_map + 0x00000000 0x124 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_7 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1254_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_year_lengths + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_singleton_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_ascii + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1250_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1252 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1254 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_13_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1256 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1257 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_singleton_map + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_month_names + 0x00000000 0x57 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_date_time_format + 0x00000000 0xf C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_range_map + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EILSEQ + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_minus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_lconv_data + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1255_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_lc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctype_class_name_list + 0x00000000 0x4a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1251 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_range + 0x00000000 0x46c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_1_range_map + 0x00000000 0x6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_singleton_map + 0x00000000 0x168 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_singleton + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_set_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_5_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_format_extender + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_singleton_map + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcstok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stderr + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_range_map + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_15_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_time_format + 0x00000000 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__RAL_rand_next + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_date_format + 0x00000000 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_error_decoder_head + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__atexitfns + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_singleton_map + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_6_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_singleton_map + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_utf8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1257_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_comma + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc._tm 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_16_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range2_map + 0x00000000 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1252_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_ERANGE + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_range_map + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_ascii_ctype_map + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_11_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_frame 0x00000000 0x3d6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_info 0x00000000 0x2374 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_abbrev 0x00000000 0x179 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_aranges + 0x00000000 0xfa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_ranges 0x00000000 0xf90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_line 0x00000000 0xb26 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_str 0x00000000 0x203c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.longjmp - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.memcpy - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.memcpy_fast - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x3ac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.memcpy_small - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.memset - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.__aeabi_memset - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.setjmp - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.strcpy - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.strcmp - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r4 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r1 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r2 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r3 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r0 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r5 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_sp - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r7 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r8 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r9 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_sl - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r6 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_lr - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_ip - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_fp - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strlen + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .debug_frame 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_umod - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_asr - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_div - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_lsl - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_lsr - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_mod - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_udivmod - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__aeabi_ldivmod - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_cmp - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_ucmp - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.muldi3 - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int32_umod - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int32_div - 0x00000000 0x310 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x310 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .rodata.libc.__aeabi_idiv - 0x00000000 0xa C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0xa C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .rodata.libc.__aeabi_uidiv - 0x00000000 0x46 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x46 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int32_mod - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__aeabi_uidivmod - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__aeabi_idivmod - 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.ctl_count_leading_zeros_32 - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.ctl_count_leading_zeros_16 - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_shi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_si - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_sqi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_uhi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_uqi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio - 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.__do_nvdebug_operation - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_abort - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fopen - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgets - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputs - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fread - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fwrite - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fseek - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ftell - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_gets - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fflush - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fclose - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetc - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_putchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_puts - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rewind - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_clearerr - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_feof - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ferror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getch - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_time - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vprintf - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfprintf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ungetc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fsetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_freopen - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_perror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_remove - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rename - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpfile - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpnam - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getenv - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_system - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfscanf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vscanf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_exit - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_enabled - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_kbhit - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ioctl - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_runtime_error - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_break - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getargs - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_geti - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getu - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getl - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getul - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getd - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getll - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getull - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_filesize - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_accept - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_bind - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_listen - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_shutdown - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_socket - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htons - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htonl - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_loadsymbols - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_unloadsymbols - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.getenv_buffer - 0x00000000 0x400 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.__dbgEnabled - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.tmpnam_buffer - 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__errno - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss.libc.errno - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .debug_frame 0x00000000 0x164 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int + 0x00000000 0x5e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp + 0x00000000 0x49c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long + 0x00000000 0x600 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp + 0x00000000 0x4b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long + 0x00000000 0x730 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp + 0x00000000 0x580 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_compute_wide_metrics + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_print_wide_string + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_wchar + 0x00000000 0x698 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp_wchar + 0x00000000 0x4e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_wchar + 0x00000000 0x6a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp_wchar + 0x00000000 0x4e8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_wchar + 0x00000000 0x7d8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp_wchar + 0x00000000 0x604 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.str1.4 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.ipow10 + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x3f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x160 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x36e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__ungetc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long_long + 0x00000000 0x1c8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_real + 0x00000000 0x274 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int_cc + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_cc + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long_cc + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_cc + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long_cc + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x38c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x14b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x2dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__int32_to_float32 - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__int32_to_float64 - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__uint32_to_float32 - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__uint32_to_float64 - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__int64_to_float32 - 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__int64_to_float64 - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__uint64_to_float32 - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__uint64_to_float64 - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_int32 - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_int64 - 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_uint32 - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_uint64 - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_int32 - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_int64 - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_uint32 - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_uint64 - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_float64 - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_float32 - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_add - 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_mul - 0x00000000 0xd4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0xd4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_div - 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_cmp - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfrcmple + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__aeabi_fcmpeq - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__aeabi_fcmplt - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__aeabi_fcmple - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_fcmpge - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__aeabi_fcmpgt - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpge + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_add - 0x00000000 0x294 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x294 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_mul - 0x00000000 0x16c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x16c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_div - 0x00000000 0x214 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x214 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_cmp - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmpeq - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmplt - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmple - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmpge - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmpgt - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdrcmple + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpeq + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmple + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpge + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmplt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpgt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_signbit - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_signbit - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_isinf - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_isinf - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_isnan - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_isnan - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_isfinite - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_isfinite - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_isnormal - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_isnormal - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_classify - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_classify - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .rodata.libc.__float32_infinity - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .rodata.libc.__float32_nan - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .rodata.libc.__float64_infinity - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .rodata.libc.__float64_nan - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .debug_frame 0x00000000 0x440 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_eval + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_evalf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_eval + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_evalf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincos + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincosf + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2 + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanf + 0x00000000 0x170 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2f + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ceil + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cos + 0x00000000 0x1b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosf + 0x00000000 0x258 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.expf + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.coshf + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fma + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmax + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaxf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmin + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fminf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.frexp + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ldexp + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosh + 0x00000000 0xf4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log + 0x00000000 0x240 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanh + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.logf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10f + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modf + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modff + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.pow + 0x00000000 0x118 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2 + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.powf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2f + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbn + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbnf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sin + 0x00000000 0x1b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinf + 0x00000000 0x224 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinh + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinhf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tan + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanf + 0x00000000 0x150 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanh + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanhf + 0x00000000 0x130 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrt + 0x00000000 0x110 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacos + 0x00000000 0x2c0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosh + 0x00000000 0x108 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinh + 0x00000000 0x114 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypot + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asin + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acos + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrtf + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacosf + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acoshf + 0x00000000 0xc8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypotf + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosf + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrtf + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrt + 0x00000000 0x1cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.floor + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmodf + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmod + 0x00000000 0x154 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_a + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_b + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.atanf_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_b + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_frame 0x00000000 0xb80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_info 0x00000000 0x847 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_abbrev 0x00000000 0xdb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_aranges + 0x00000000 0x228 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_ranges 0x00000000 0x750 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_line 0x00000000 0x345 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_str 0x00000000 0x364 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabsf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ceilf + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.floorf + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ldexpf + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.frexpf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .debug_frame 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) Memory Configuration @@ -1248,9 +2739,8 @@ FLASH 0x00002000 0x0001e000 xr Linker script and memory map - 0x000041e0 __do_debug_operation = __do_debug_operation_mempoll - 0x000036c4 __vfprintf = __vfprintf_int - 0x00003e18 __vfscanf = __vfscanf_int + 0x00000000 __vfprintf = __vfprintf_float_long_long + 0x00000000 __vfscanf = __vfscanf_float_long_long_cc 0x20000000 __SRAM_segment_start__ = 0x20000000 0x20004000 __SRAM_segment_end__ = 0x20004000 0x00002000 __FLASH_segment_start__ = 0x2000 @@ -1283,254 +2773,191 @@ Linker script and memory map 0x00000001 . = ASSERT (((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <= __FLASH_segment_end__)), error: .vectors is too large to fit in FLASH memory segment) 0x000020bc __init_load_start__ = ALIGN (__vectors_end__, 0x4) -.init 0x000020bc 0x12c +.init 0x000020bc 0x134 0x000020bc __init_start__ = . *(.init .init.*) - .init 0x000020bc 0x12c THUMB Flash Debug/../../obj/cstart.o + .init 0x000020bc 0x134 THUMB Flash Debug/../../obj/cstart.o 0x000020bc _start - 0x0000214c exit - 0x00002170 reset_handler - 0x000021e8 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x000021e8 __init_load_end__ = __init_end__ + 0x00002154 exit + 0x00002178 reset_handler + 0x000021f0 __init_end__ = (__init_start__ + SIZEOF (.init)) + 0x000021f0 __init_load_end__ = __init_end__ 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment) - 0x000021e8 __text_load_start__ = ALIGN (__init_end__, 0x4) + 0x000021f0 __text_load_start__ = ALIGN (__init_end__, 0x4) -.text 0x000021e8 0x2038 - 0x000021e8 __text_start__ = . +.text 0x000021f0 0xe9c + 0x000021f0 __text_start__ = . *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs - .text.UartReceiveByte - 0x000021e8 0x34 THUMB Flash Debug/../../obj/boot.o + .glue_7 0x000021f0 0x0 linker stubs + .glue_7t 0x000021f0 0x0 linker stubs .text.BootComInit - 0x0000221c 0xf4 THUMB Flash Debug/../../obj/boot.o - 0x0000221c BootComInit + 0x000021f0 0xac THUMB Flash Debug/../../obj/boot.o + 0x000021f0 BootComInit .text.BootActivate - 0x00002310 0x24 THUMB Flash Debug/../../obj/boot.o - 0x00002310 BootActivate + 0x0000229c 0x20 THUMB Flash Debug/../../obj/boot.o + 0x0000229c BootActivate .text.BootComCheckActivationRequest - 0x00002334 0xc0 THUMB Flash Debug/../../obj/boot.o - 0x00002334 BootComCheckActivationRequest - .text.LedInit 0x000023f4 0x18 THUMB Flash Debug/../../obj/led.o - 0x000023f4 LedInit + 0x000022bc 0x84 THUMB Flash Debug/../../obj/boot.o + 0x000022bc BootComCheckActivationRequest + .text.LedInit 0x00002340 0x14 THUMB Flash Debug/../../obj/led.o + 0x00002340 LedInit .text.LedToggle - 0x0000240c 0x80 THUMB Flash Debug/../../obj/led.o - 0x0000240c LedToggle - .text.main 0x0000248c 0x2a4 THUMB Flash Debug/../../obj/main.o - 0x0000248c main - .text.TimerSet - 0x00002730 0xc THUMB Flash Debug/../../obj/timer.o - 0x00002730 TimerSet + 0x00002354 0x54 THUMB Flash Debug/../../obj/led.o + 0x00002354 LedToggle + .text.main 0x000023a8 0x208 THUMB Flash Debug/../../obj/main.o + 0x000023a8 main .text.TimerInit - 0x0000273c 0x5c THUMB Flash Debug/../../obj/timer.o - 0x0000273c TimerInit + 0x000025b0 0x44 THUMB Flash Debug/../../obj/timer.o + 0x000025b0 TimerInit .text.TimerGet - 0x00002798 0xc THUMB Flash Debug/../../obj/timer.o - 0x00002798 TimerGet + 0x000025f4 0xc THUMB Flash Debug/../../obj/timer.o + 0x000025f4 TimerGet .text.TimerISRHandler - 0x000027a4 0x14 THUMB Flash Debug/../../obj/timer.o - 0x000027a4 TimerISRHandler + 0x00002600 0x10 THUMB Flash Debug/../../obj/timer.o + 0x00002600 TimerISRHandler .text.UnusedISR - 0x000027b8 0x4 THUMB Flash Debug/../../obj/vectors.o - 0x000027b8 UnusedISR + 0x00002610 0x4 THUMB Flash Debug/../../obj/vectors.o + 0x00002610 UnusedISR .text.SystemHFClockGet - 0x000027bc 0xb8 THUMB Flash Debug/../../obj/system_efm32.o - 0x000027bc SystemHFClockGet + 0x00002614 0x9c THUMB Flash Debug/../../obj/system_efm32.o + 0x00002614 SystemHFClockGet .text.SystemCoreClockGet - 0x00002874 0x2c THUMB Flash Debug/../../obj/system_efm32.o - 0x00002874 SystemCoreClockGet + 0x000026b0 0x24 THUMB Flash Debug/../../obj/system_efm32.o + 0x000026b0 SystemCoreClockGet .text.SystemInit - 0x000028a0 0x4 THUMB Flash Debug/../../obj/system_efm32.o - 0x000028a0 SystemInit + 0x000026d4 0x4 THUMB Flash Debug/../../obj/system_efm32.o + 0x000026d4 SystemInit .text.SystemLFRCOClockGet - 0x000028a4 0x8 THUMB Flash Debug/../../obj/system_efm32.o - 0x000028a4 SystemLFRCOClockGet + 0x000026d8 0x8 THUMB Flash Debug/../../obj/system_efm32.o + 0x000026d8 SystemLFRCOClockGet .text.SystemLFXOClockGet - 0x000028ac 0xc THUMB Flash Debug/../../obj/system_efm32.o - 0x000028ac SystemLFXOClockGet + 0x000026e0 0xc THUMB Flash Debug/../../obj/system_efm32.o + 0x000026e0 SystemLFXOClockGet .text.CMU_FlashWaitStateMax - 0x000028b8 0x38 THUMB Flash Debug/../../obj/efm32_cmu.o - .text.CMU_DivToLog2 - 0x000028f0 0xc THUMB Flash Debug/../../obj/efm32_cmu.o + 0x000026ec 0x30 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_FlashWaitStateControl - 0x000028fc 0x64 THUMB Flash Debug/../../obj/efm32_cmu.o - .text.CMU_AUXClkGet - 0x00002960 0xc THUMB Flash Debug/../../obj/efm32_cmu.o + 0x0000271c 0x54 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_LFClkGet - 0x0000296c 0x5c THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00002770 0x44 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_ClockDivSet - 0x000029c8 0x204 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x000029c8 CMU_ClockDivSet + 0x000027b4 0x178 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x000027b4 CMU_ClockDivSet .text.CMU_ClockEnable - 0x00002bcc 0x9c THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00002bcc CMU_ClockEnable + 0x0000292c 0x80 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x0000292c CMU_ClockEnable .text.CMU_ClockSelectGet - 0x00002c68 0xac THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00002c68 CMU_ClockSelectGet + 0x000029ac 0x8c THUMB Flash Debug/../../obj/efm32_cmu.o + 0x000029ac CMU_ClockSelectGet .text.CMU_ClockFreqGet - 0x00002d14 0x208 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00002d14 CMU_ClockFreqGet + 0x00002a38 0x144 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00002a38 CMU_ClockFreqGet .text.CMU_OscillatorEnable - 0x00002f1c 0x78 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00002f1c CMU_OscillatorEnable + 0x00002b7c 0x54 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00002b7c CMU_OscillatorEnable .text.CMU_ClockSelectSet - 0x00002f94 0x110 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x00002f94 CMU_ClockSelectSet + 0x00002bd0 0xc8 THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00002bd0 CMU_ClockSelectSet .text.EMU_UpdateOscConfig - 0x000030a4 0x18 THUMB Flash Debug/../../obj/efm32_emu.o - 0x000030a4 EMU_UpdateOscConfig + 0x00002c98 0x14 THUMB Flash Debug/../../obj/efm32_emu.o + 0x00002c98 EMU_UpdateOscConfig .text.GPIO_DriveModeSet - 0x000030bc 0x1c THUMB Flash Debug/../../obj/efm32_gpio.o - 0x000030bc GPIO_DriveModeSet + 0x00002cac 0x1c THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00002cac GPIO_DriveModeSet .text.GPIO_PinModeSet - 0x000030d8 0xd8 THUMB Flash Debug/../../obj/efm32_gpio.o - 0x000030d8 GPIO_PinModeSet + 0x00002cc8 0xc0 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00002cc8 GPIO_PinModeSet .text.LEUART_BaudrateSet - 0x000031b0 0x64 THUMB Flash Debug/../../obj/efm32_leuart.o - 0x000031b0 LEUART_BaudrateSet + 0x00002d88 0x50 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00002d88 LEUART_BaudrateSet .text.LEUART_Enable - 0x00003214 0x20 THUMB Flash Debug/../../obj/efm32_leuart.o - 0x00003214 LEUART_Enable - .text.LEUART_FreezeEnable - 0x00003234 0x1c THUMB Flash Debug/../../obj/efm32_leuart.o - 0x00003234 LEUART_FreezeEnable + 0x00002dd8 0x20 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00002dd8 LEUART_Enable .text.LEUART_Init - 0x00003250 0x60 THUMB Flash Debug/../../obj/efm32_leuart.o - 0x00003250 LEUART_Init + 0x00002df8 0x50 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00002df8 LEUART_Init .text.LEUART_Rx - 0x000032b0 0x10 THUMB Flash Debug/../../obj/efm32_leuart.o - 0x000032b0 LEUART_Rx + 0x00002e48 0x10 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00002e48 LEUART_Rx .text.SYSTEM_ChipRevisionGet - 0x000032c0 0x24 THUMB Flash Debug/../../obj/efm32_system.o - 0x000032c0 SYSTEM_ChipRevisionGet + 0x00002e58 0x20 THUMB Flash Debug/../../obj/efm32_system.o + 0x00002e58 SYSTEM_ChipRevisionGet .text.LCD_enableSegment - 0x000032e4 0x60 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00002e78 0x60 THUMB Flash Debug/../../obj/lcdcontroller.o .text.LCD_disableSegment - 0x00003344 0x70 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00002ed8 0x70 THUMB Flash Debug/../../obj/lcdcontroller.o .text.LCD_IRQHandler - 0x000033b4 0x20 THUMB Flash Debug/../../obj/lcdcontroller.o - 0x000033b4 LCD_IRQHandler + 0x00002f48 0x1c THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00002f48 LCD_IRQHandler .text.LCD_AllOff - 0x000033d4 0x1c THUMB Flash Debug/../../obj/lcdcontroller.o - 0x000033d4 LCD_AllOff + 0x00002f64 0x1c THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00002f64 LCD_AllOff .text.LCD_Symbol - 0x000033f0 0xa8 THUMB Flash Debug/../../obj/lcdcontroller.o - 0x000033f0 LCD_Symbol + 0x00002f80 0x7c THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00002f80 LCD_Symbol .text.LCD_Init - 0x00003498 0xa8 THUMB Flash Debug/../../obj/lcdcontroller.o - 0x00003498 LCD_Init - .text.libc.__getc - 0x00003540 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x00003540 __getc - .text.libc.__putc - 0x00003568 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x00003568 __putc - .text.libc.__print_padding - 0x000035a0 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x000035a0 __print_padding - .text.libc.__pre_padding - 0x000035c4 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x000035c4 __pre_padding - .text.libc.isupper - 0x000035e0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x000035e0 isupper - .text.libc.islower - 0x000035f0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x000035f0 islower - .text.libc.isdigit - 0x00003600 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x00003600 isdigit - .text.libc.__digit - 0x00003610 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x00003610 __digit - .text.libc.isspace - 0x0000364c 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x0000364c isspace - .text.libc.strlen - 0x00003664 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - 0x00003664 strlen - .text.libc.__vfprintf_int - 0x000036c4 0x5e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - 0x000036c4 __vfprintf_int - .text.libc.__ungetc - 0x00003ca8 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .text.libc.rd_int - 0x00003cc8 0x150 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .text.libc.__vfscanf_int - 0x00003e18 0x3c8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - 0x00003e18 __vfscanf_int - .text.libdebugio.__do_debug_operation_mempoll - 0x000041e0 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x000041e0 __do_debug_operation_mempoll - .text.libc.__debug_io_lock - 0x00004218 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x00004218 __debug_io_lock - .text.libc.__debug_io_unlock - 0x0000421c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x0000421c __debug_io_unlock - 0x00004220 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x00004220 __text_load_end__ = __text_end__ + 0x00002ffc 0x90 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x00002ffc LCD_Init + 0x0000308c __text_end__ = (__text_start__ + SIZEOF (.text)) + 0x0000308c __text_load_end__ = __text_end__ .vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0 linker stubs .v4_bx 0x00000000 0x0 .v4_bx 0x00000000 0x0 linker stubs - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) - 0x00004220 __dtors_load_start__ = ALIGN (__text_end__, 0x4) -.dtors 0x00004220 0x0 - 0x00004220 __dtors_start__ = . +.iplt 0x00000000 0x0 + .iplt 0x00000000 0x0 THUMB Flash Debug/../../obj/boot.o + 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) + 0x0000308c __dtors_load_start__ = ALIGN (__text_end__, 0x4) + +.dtors 0x0000308c 0x0 + 0x0000308c __dtors_start__ = . *(SORT(.dtors.*)) *(.dtors) *(.fini_array .fini_array.*) - 0x00004220 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x00004220 __dtors_load_end__ = __dtors_end__ + 0x0000308c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) + 0x0000308c __dtors_load_end__ = __dtors_end__ 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment) - 0x00004220 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) + 0x0000308c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) -.ctors 0x00004220 0x0 - 0x00004220 __ctors_start__ = . +.ctors 0x0000308c 0x0 + 0x0000308c __ctors_start__ = . *(SORT(.ctors.*)) *(.ctors) *(.init_array .init_array.*) - 0x00004220 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x00004220 __ctors_load_end__ = __ctors_end__ + 0x0000308c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) + 0x0000308c __ctors_load_end__ = __ctors_end__ 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment) - 0x00004220 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) + 0x0000308c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) -.rodata 0x00004220 0x40 - 0x00004220 __rodata_start__ = . +.rodata 0x0000308c 0x10 + 0x0000308c __rodata_start__ = . *(.rodata .rodata.* .gnu.linkonce.r.*) - .rodata 0x00004220 0x18 THUMB Flash Debug/../../obj/boot.o - .rodata.libc.__hex_lc - 0x00004238 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x00004238 __hex_lc - .rodata.libc.__hex_uc - 0x00004248 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x00004248 __hex_uc - .rodata.libc.str1.4 - 0x00004258 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - 0x00004260 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x00004260 __rodata_load_end__ = __rodata_end__ + .rodata 0x0000308c 0x10 THUMB Flash Debug/../../obj/boot.o + 0x0000309c __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) + 0x0000309c __rodata_load_end__ = __rodata_end__ + +.rel.dyn 0x00002000 0x0 + .rel.iplt 0x00002000 0x0 THUMB Flash Debug/../../obj/boot.o 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment) - 0x00004260 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) + 0x0000309c __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) -.ARM.exidx 0x00004260 0x0 - 0x00004260 __ARM.exidx_start__ = . - 0x00004260 __exidx_start = __ARM.exidx_start__ +.ARM.exidx 0x0000309c 0x0 + 0x0000309c __ARM.exidx_start__ = . + 0x0000309c __exidx_start = __ARM.exidx_start__ *(.ARM.exidx .ARM.exidx.*) - 0x00004260 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) - 0x00004260 __exidx_end = __ARM.exidx_end__ - 0x00004260 __ARM.exidx_load_end__ = __ARM.exidx_end__ + 0x0000309c __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) + 0x0000309c __exidx_end = __ARM.exidx_end__ + 0x0000309c __ARM.exidx_load_end__ = __ARM.exidx_end__ 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment) - 0x00004260 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) + 0x0000309c __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) -.fast 0x20000000 0x0 load address 0x00004260 +.fast 0x20000000 0x0 load address 0x0000309c 0x20000000 __fast_start__ = . *(.fast .fast.*) 0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x00004260 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) + 0x0000309c __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) 0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment) .fast_run 0x20000000 0x0 @@ -1539,9 +2966,9 @@ Linker script and memory map 0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) 0x20000000 __fast_run_load_end__ = __fast_run_end__ 0x00000001 . = ASSERT (((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <= __SRAM_segment_end__)), error: .fast_run is too large to fit in SRAM memory segment) - 0x00004260 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) + 0x0000309c __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) -.data 0x20000000 0x8 load address 0x00004260 +.data 0x20000000 0x8 load address 0x0000309c 0x20000000 __data_start__ = . *(.data .data.* .gnu.linkonce.d.*) .data.SystemLFXOClock @@ -1549,118 +2976,112 @@ Linker script and memory map .data.SystemHFXOClock 0x20000004 0x4 THUMB Flash Debug/../../obj/system_efm32.o 0x20000008 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x00004268 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + 0x000030a4 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + +.igot.plt 0x00000000 0x0 + .igot.plt 0x00000000 0x0 THUMB Flash Debug/../../obj/boot.o 0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment) -.data_run 0x20000000 0x8 load address 0x00004260 +.data_run 0x20000000 0x8 load address 0x0000309c 0x20000000 __data_run_start__ = . 0x20000008 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) - *fill* 0x20000000 0x8 00 + *fill* 0x20000000 0x8 0x20000008 __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) 0x20000008 __data_run_load_end__ = __data_run_end__ 0x00000001 . = ASSERT (((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <= __SRAM_segment_end__)), error: .data_run is too large to fit in SRAM memory segment) 0x20000008 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) -.bss 0x20000008 0x6c +.bss 0x20000008 0x5c 0x20000008 __bss_start__ = . *(.bss .bss.* .gnu.linkonce.b.*) - .bss.xcpCtoReqPacket.2173 - 0x20000008 0x44 THUMB Flash Debug/../../obj/boot.o - .bss.xcpCtoRxLength.2174 - 0x2000004c 0x1 THUMB Flash Debug/../../obj/boot.o - .bss.xcpCtoRxInProgress.2175 - 0x2000004d 0x1 THUMB Flash Debug/../../obj/boot.o - *fill* 0x2000004e 0x2 00 - .bss.timer_counter_last.2158 - 0x20000050 0x4 THUMB Flash Debug/../../obj/led.o - .bss.led_toggle_state.2157 - 0x20000054 0x1 THUMB Flash Debug/../../obj/led.o - *fill* 0x20000055 0x3 00 + .bss.xcpCtoReqPacket.5081 + 0x20000008 0x41 THUMB Flash Debug/../../obj/boot.o + .bss.xcpCtoRxLength.5082 + 0x20000049 0x1 THUMB Flash Debug/../../obj/boot.o + .bss.xcpCtoRxInProgress.5083 + 0x2000004a 0x1 THUMB Flash Debug/../../obj/boot.o + *fill* 0x2000004b 0x1 + .bss.timer_counter_last.5066 + 0x2000004c 0x4 THUMB Flash Debug/../../obj/led.o + .bss.led_toggle_state.5065 + 0x20000050 0x1 THUMB Flash Debug/../../obj/led.o + *fill* 0x20000051 0x3 .bss.millisecond_counter - 0x20000058 0x4 THUMB Flash Debug/../../obj/timer.o + 0x20000054 0x4 THUMB Flash Debug/../../obj/timer.o .bss.SystemCoreClock - 0x2000005c 0x4 THUMB Flash Debug/../../obj/system_efm32.o - 0x2000005c SystemCoreClock + 0x20000058 0x4 THUMB Flash Debug/../../obj/system_efm32.o + 0x20000058 SystemCoreClock .bss.cmuStatus - 0x20000060 0x2 THUMB Flash Debug/../../obj/efm32_emu.o - *fill* 0x20000062 0x2 00 + 0x2000005c 0x2 THUMB Flash Debug/../../obj/efm32_emu.o + *fill* 0x2000005e 0x2 .bss.frameCounter - 0x20000064 0x4 THUMB Flash Debug/../../obj/lcdcontroller.o - 0x20000064 frameCounter - .bss.libc.__format_extender - 0x20000068 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x20000068 __format_extender - .bss.libdebugio.dbgCommWord - 0x2000006c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x2000006c dbgCommWord - .bss.libdebugio.dbgCntrlWord_mempoll - 0x20000070 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x20000070 dbgCntrlWord_mempoll + 0x20000060 0x4 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x20000060 frameCounter *(COMMON) - 0x20000074 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x20000074 __bss_load_end__ = __bss_end__ + 0x20000064 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) + 0x20000064 __bss_load_end__ = __bss_end__ 0x00000001 . = ASSERT (((__bss_end__ >= __SRAM_segment_start__) && (__bss_end__ <= __SRAM_segment_end__)), error: .bss is too large to fit in SRAM memory segment) - 0x20000074 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) + 0x20000064 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) -.non_init 0x20000074 0x0 - 0x20000074 __non_init_start__ = . +.non_init 0x20000064 0x0 + 0x20000064 __non_init_start__ = . *(.non_init .non_init.*) - 0x20000074 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x20000074 __non_init_load_end__ = __non_init_end__ + 0x20000064 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) + 0x20000064 __non_init_load_end__ = __non_init_end__ 0x00000001 . = ASSERT (((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <= __SRAM_segment_end__)), error: .non_init is too large to fit in SRAM memory segment) - 0x20000074 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) + 0x20000064 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) -.heap 0x20000074 0x80 - 0x20000074 __heap_start__ = . +.heap 0x20000064 0x80 + 0x20000064 __heap_start__ = . *(.heap .heap.*) - 0x200000f4 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x20000074 0x80 00 - 0x200000f4 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x200000f4 __heap_load_end__ = __heap_end__ + 0x200000e4 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) + *fill* 0x20000064 0x80 + 0x200000e4 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) + 0x200000e4 __heap_load_end__ = __heap_end__ 0x00000001 . = ASSERT (((__heap_end__ >= __SRAM_segment_start__) && (__heap_end__ <= __SRAM_segment_end__)), error: .heap is too large to fit in SRAM memory segment) - 0x200000f4 __stack_load_start__ = ALIGN (__heap_end__, 0x4) + 0x200000e4 __stack_load_start__ = ALIGN (__heap_end__, 0x4) -.stack 0x200000f4 0x100 - 0x200000f4 __stack_start__ = . +.stack 0x200000e4 0x100 + 0x200000e4 __stack_start__ = . *(.stack .stack.*) - 0x200001f4 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x200000f4 0x100 00 - 0x200001f4 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x200001f4 __stack_load_end__ = __stack_end__ + 0x200001e4 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) + *fill* 0x200000e4 0x100 + 0x200001e4 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) + 0x200001e4 __stack_load_end__ = __stack_end__ 0x00000001 . = ASSERT (((__stack_end__ >= __SRAM_segment_start__) && (__stack_end__ <= __SRAM_segment_end__)), error: .stack is too large to fit in SRAM memory segment) - 0x200001f4 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) + 0x200001e4 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) -.stack_process 0x200001f4 0x0 - 0x200001f4 __stack_process_start__ = . +.stack_process 0x200001e4 0x0 + 0x200001e4 __stack_process_start__ = . *(.stack_process .stack_process.*) - 0x200001f4 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) - 0x200001f4 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) - 0x200001f4 __stack_process_load_end__ = __stack_process_end__ + 0x200001e4 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) + 0x200001e4 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) + 0x200001e4 __stack_process_load_end__ = __stack_process_end__ 0x00000001 . = ASSERT (((__stack_process_end__ >= __SRAM_segment_start__) && (__stack_process_end__ <= __SRAM_segment_end__)), error: .stack_process is too large to fit in SRAM memory segment) - 0x200001f4 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) + 0x200001e4 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) -.tbss 0x200001f4 0x0 - 0x200001f4 __tbss_start__ = . +.tbss 0x200001e4 0x0 + 0x200001e4 __tbss_start__ = . *(.tbss .tbss.*) - 0x200001f4 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) - 0x200001f4 __tbss_load_end__ = __tbss_end__ + 0x200001e4 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) + 0x200001e4 __tbss_load_end__ = __tbss_end__ 0x00000001 . = ASSERT (((__tbss_end__ >= __SRAM_segment_start__) && (__tbss_end__ <= __SRAM_segment_end__)), error: .tbss is too large to fit in SRAM memory segment) - 0x00004268 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + 0x000030a4 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) -.tdata 0x200001f4 0x0 load address 0x00004268 - 0x200001f4 __tdata_start__ = . +.tdata 0x200001e4 0x0 load address 0x000030a4 + 0x200001e4 __tdata_start__ = . *(.tdata .tdata.*) - 0x200001f4 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) - 0x00004268 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) - 0x00004268 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) + 0x200001e4 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) + 0x000030a4 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) + 0x000030a4 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) 0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment) -.tdata_run 0x200001f4 0x0 - 0x200001f4 __tdata_run_start__ = . - 0x200001f4 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) - 0x200001f4 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) - 0x200001f4 __tdata_run_load_end__ = __tdata_run_end__ - 0x200001f4 __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) +.tdata_run 0x200001e4 0x0 + 0x200001e4 __tdata_run_start__ = . + 0x200001e4 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) + 0x200001e4 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) + 0x200001e4 __tdata_run_load_end__ = __tdata_run_end__ + 0x200001e4 __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) 0x00000001 . = ASSERT (((__tdata_run_end__ >= __SRAM_segment_start__) && (__tdata_run_end__ <= __SRAM_segment_end__)), error: .tdata_run is too large to fit in SRAM memory segment) START GROUP LOAD THUMB Flash Debug/../../obj/boot.o @@ -1701,565 +3122,251 @@ LOAD THUMB Flash Debug/../../obj/efm32_usart.o LOAD THUMB Flash Debug/../../obj/efm32_vcmp.o LOAD THUMB Flash Debug/../../obj/efm32_wdog.o LOAD THUMB Flash Debug/../../obj/lcdcontroller.o -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcpp_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_targetio_impl_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_mempoll_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcpp_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o END GROUP OUTPUT(THUMB Flash Debug/../../bin/demoprog_olimex_efm32g880.elf elf32-littlearm) -.debug_frame 0x00000000 0x3b30 - .debug_frame 0x00000000 0x7c THUMB Flash Debug/../../obj/boot.o - .debug_frame 0x0000007c 0x48 THUMB Flash Debug/../../obj/led.o - .debug_frame 0x000000c4 0x30 THUMB Flash Debug/../../obj/main.o - .debug_frame 0x000000f4 0x6c THUMB Flash Debug/../../obj/timer.o - .debug_frame 0x00000160 0x20 THUMB Flash Debug/../../obj/vectors.o - .debug_frame 0x00000180 0xc4 THUMB Flash Debug/../../obj/system_efm32.o - .debug_frame 0x00000244 0xb4 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_frame 0x000002f8 0xa0 THUMB Flash Debug/../../obj/efm32_adc.o - .debug_frame 0x00000398 0x1ec THUMB Flash Debug/../../obj/efm32_aes.o - .debug_frame 0x00000584 0x204 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_frame 0x00000788 0x78 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_frame 0x00000800 0x30 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_frame 0x00000830 0x1a4 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_frame 0x000009d4 0xc8 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_frame 0x00000a9c 0x88 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_frame 0x00000b24 0x120 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_frame 0x00000c44 0xd0 THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_frame 0x00000d14 0xcc THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_frame 0x00000de0 0xc4 THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_frame 0x00000ea4 0xfc THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_frame 0x00000fa0 0x20 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_frame 0x00000fc0 0x68 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_frame 0x00001028 0xbc THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_frame 0x000010e4 0x2c THUMB Flash Debug/../../obj/efm32_prs.o - .debug_frame 0x00001110 0x40 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_frame 0x00001150 0x98 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_frame 0x000011e8 0x3c THUMB Flash Debug/../../obj/efm32_system.o - .debug_frame 0x00001224 0x7c THUMB Flash Debug/../../obj/efm32_timer.o - .debug_frame 0x000012a0 0x18c THUMB Flash Debug/../../obj/efm32_usart.o - .debug_frame 0x0000142c 0x4c THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_frame 0x00001478 0x5c THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_frame 0x000014d4 0x15c THUMB Flash Debug/../../obj/lcdcontroller.o - .debug_frame 0x00001630 0x128c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_frame 0x000028bc 0x120 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .debug_frame 0x000029dc 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .debug_frame 0x00002a1c 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .debug_frame 0x00002aa4 0x260 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .debug_frame 0x00002d04 0x78c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_frame 0x00003490 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .debug_frame 0x00003530 0x600 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) +.debug_frame 0x00000000 0x860 + .debug_frame 0x00000000 0x70 THUMB Flash Debug/../../obj/boot.o + .debug_frame 0x00000070 0x48 THUMB Flash Debug/../../obj/led.o + .debug_frame 0x000000b8 0x30 THUMB Flash Debug/../../obj/main.o + .debug_frame 0x000000e8 0x6c THUMB Flash Debug/../../obj/timer.o + .debug_frame 0x00000154 0x20 THUMB Flash Debug/../../obj/vectors.o + .debug_frame 0x00000174 0xc4 THUMB Flash Debug/../../obj/system_efm32.o + .debug_frame 0x00000238 0x1d8 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_frame 0x00000410 0x88 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_frame 0x00000498 0x144 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_frame 0x000005dc 0xec THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_frame 0x000006c8 0x30 THUMB Flash Debug/../../obj/efm32_system.o + .debug_frame 0x000006f8 0x168 THUMB Flash Debug/../../obj/lcdcontroller.o -.debug_info 0x00000000 0xfd30 - .debug_info 0x00000000 0x844 THUMB Flash Debug/../../obj/boot.o - .debug_info 0x00000844 0xee THUMB Flash Debug/../../obj/cstart.o - .debug_info 0x00000932 0x2bf THUMB Flash Debug/../../obj/led.o - .debug_info 0x00000bf1 0x5ca THUMB Flash Debug/../../obj/main.o - .debug_info 0x000011bb 0x703 THUMB Flash Debug/../../obj/timer.o - .debug_info 0x000018be 0x111 THUMB Flash Debug/../../obj/vectors.o - .debug_info 0x000019cf 0x5a THUMB Flash Debug/../../obj/core_cm3.o - .debug_info 0x00001a29 0x429 THUMB Flash Debug/../../obj/system_efm32.o - .debug_info 0x00001e52 0x5f6 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_info 0x00002448 0xa5b THUMB Flash Debug/../../obj/efm32_adc.o - .debug_info 0x00002ea3 0x156e THUMB Flash Debug/../../obj/efm32_aes.o - .debug_info 0x00004411 0xf7b THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_info 0x0000538c 0x809 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_info 0x00005b95 0x410 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_info 0x00005fa5 0x10f7 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_info 0x0000709c 0x942 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_info 0x000079de 0x680 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_info 0x0000805e 0x7cc THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_info 0x0000882a 0x84a THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_info 0x00009074 0xb0 THUMB Flash Debug/../../obj/efm32_int.o - .debug_info 0x00009124 0xad2 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_info 0x00009bf6 0x86 THUMB Flash Debug/../../obj/efm32_lesense.o - .debug_info 0x00009c7c 0x613 THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_info 0x0000a28f 0x7d4 THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_info 0x0000aa63 0x33f THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_info 0x0000ada2 0x2b3 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_info 0x0000b055 0x86 THUMB Flash Debug/../../obj/efm32_opamp.o - .debug_info 0x0000b0db 0x86a THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_info 0x0000b945 0x1bf THUMB Flash Debug/../../obj/efm32_prs.o - .debug_info 0x0000bb04 0x2f4 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_info 0x0000bdf8 0x3b9 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_info 0x0000c1b1 0x242 THUMB Flash Debug/../../obj/efm32_system.o - .debug_info 0x0000c3f3 0x700 THUMB Flash Debug/../../obj/efm32_timer.o - .debug_info 0x0000caf3 0xafd THUMB Flash Debug/../../obj/efm32_usart.o - .debug_info 0x0000d5f0 0x2fc THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_info 0x0000d8ec 0x39a THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_info 0x0000dc86 0xdc0 THUMB Flash Debug/../../obj/lcdcontroller.o - .debug_info 0x0000ea46 0xc63 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_info 0x0000f6a9 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .debug_info 0x0000f6df 0x65 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .debug_info 0x0000f744 0x51f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_info 0x0000fc63 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_info 0x00000000 0x5929 + .debug_info 0x00000000 0x96a THUMB Flash Debug/../../obj/boot.o + .debug_info 0x0000096a 0xee THUMB Flash Debug/../../obj/cstart.o + .debug_info 0x00000a58 0x2d8 THUMB Flash Debug/../../obj/led.o + .debug_info 0x00000d30 0x78d THUMB Flash Debug/../../obj/main.o + .debug_info 0x000014bd 0x715 THUMB Flash Debug/../../obj/timer.o + .debug_info 0x00001bd2 0xfc THUMB Flash Debug/../../obj/vectors.o + .debug_info 0x00001cce 0x3cd THUMB Flash Debug/../../obj/system_efm32.o + .debug_info 0x0000209b 0x12ef THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_info 0x0000338a 0x622 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_info 0x000039ac 0x760 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_info 0x0000410c 0x882 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_info 0x0000498e 0x20d THUMB Flash Debug/../../obj/efm32_system.o + .debug_info 0x00004b9b 0xd8e THUMB Flash Debug/../../obj/lcdcontroller.o -.debug_abbrev 0x00000000 0x3e79 - .debug_abbrev 0x00000000 0x1ad THUMB Flash Debug/../../obj/boot.o - .debug_abbrev 0x000001ad 0x14 THUMB Flash Debug/../../obj/cstart.o - .debug_abbrev 0x000001c1 0xf5 THUMB Flash Debug/../../obj/led.o - .debug_abbrev 0x000002b6 0x16a THUMB Flash Debug/../../obj/main.o - .debug_abbrev 0x00000420 0x1db THUMB Flash Debug/../../obj/timer.o - .debug_abbrev 0x000005fb 0xcb THUMB Flash Debug/../../obj/vectors.o - .debug_abbrev 0x000006c6 0x1d THUMB Flash Debug/../../obj/core_cm3.o - .debug_abbrev 0x000006e3 0x1a5 THUMB Flash Debug/../../obj/system_efm32.o - .debug_abbrev 0x00000888 0x1c2 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_abbrev 0x00000a4a 0x20a THUMB Flash Debug/../../obj/efm32_adc.o - .debug_abbrev 0x00000c54 0x291 THUMB Flash Debug/../../obj/efm32_aes.o - .debug_abbrev 0x00000ee5 0x1 THUMB Flash Debug/../../obj/efm32_assert.o - .debug_abbrev 0x00000ee6 0x359 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_abbrev 0x0000123f 0x21c THUMB Flash Debug/../../obj/efm32_dac.o - .debug_abbrev 0x0000145b 0x17f THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_abbrev 0x000015da 0x300 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_abbrev 0x000018da 0x219 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_abbrev 0x00001af3 0x1c1 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_abbrev 0x00001cb4 0x235 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_abbrev 0x00001ee9 0x28d THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_abbrev 0x00002176 0x64 THUMB Flash Debug/../../obj/efm32_int.o - .debug_abbrev 0x000021da 0x288 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_abbrev 0x00002462 0x42 THUMB Flash Debug/../../obj/efm32_lesense.o - .debug_abbrev 0x000024a4 0x25c THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_abbrev 0x00002700 0x21e THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_abbrev 0x0000291e 0xf3 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_abbrev 0x00002a11 0x13a THUMB Flash Debug/../../obj/efm32_msc.o - .debug_abbrev 0x00002b4b 0x42 THUMB Flash Debug/../../obj/efm32_opamp.o - .debug_abbrev 0x00002b8d 0x29b THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_abbrev 0x00002e28 0xe8 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_abbrev 0x00002f10 0x1c6 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_abbrev 0x000030d6 0x227 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_abbrev 0x000032fd 0x110 THUMB Flash Debug/../../obj/efm32_system.o - .debug_abbrev 0x0000340d 0x16b THUMB Flash Debug/../../obj/efm32_timer.o - .debug_abbrev 0x00003578 0x1d1 THUMB Flash Debug/../../obj/efm32_usart.o - .debug_abbrev 0x00003749 0x16b THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_abbrev 0x000038b4 0x1b4 THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_abbrev 0x00003a68 0x2ac THUMB Flash Debug/../../obj/lcdcontroller.o - .debug_abbrev 0x00003d14 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_abbrev 0x00003db4 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .debug_abbrev 0x00003dd9 0x43 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .debug_abbrev 0x00003e1c 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_abbrev 0x00003e54 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_abbrev 0x00000000 0x17cc + .debug_abbrev 0x00000000 0x221 THUMB Flash Debug/../../obj/boot.o + .debug_abbrev 0x00000221 0x14 THUMB Flash Debug/../../obj/cstart.o + .debug_abbrev 0x00000235 0x11a THUMB Flash Debug/../../obj/led.o + .debug_abbrev 0x0000034f 0x1c2 THUMB Flash Debug/../../obj/main.o + .debug_abbrev 0x00000511 0x231 THUMB Flash Debug/../../obj/timer.o + .debug_abbrev 0x00000742 0xdd THUMB Flash Debug/../../obj/vectors.o + .debug_abbrev 0x0000081f 0x1a5 THUMB Flash Debug/../../obj/system_efm32.o + .debug_abbrev 0x000009c4 0x35e THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_abbrev 0x00000d22 0x1fd THUMB Flash Debug/../../obj/efm32_emu.o + .debug_abbrev 0x00000f1f 0x244 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_abbrev 0x00001163 0x272 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_abbrev 0x000013d5 0x117 THUMB Flash Debug/../../obj/efm32_system.o + .debug_abbrev 0x000014ec 0x2e0 THUMB Flash Debug/../../obj/lcdcontroller.o -.debug_loc 0x00000000 0x80f9 - .debug_loc 0x00000000 0x8a THUMB Flash Debug/../../obj/boot.o - .debug_loc 0x0000008a 0x5e THUMB Flash Debug/../../obj/led.o - .debug_loc 0x000000e8 0x189 THUMB Flash Debug/../../obj/main.o - .debug_loc 0x00000271 0x20 THUMB Flash Debug/../../obj/timer.o - .debug_loc 0x00000291 0x103 THUMB Flash Debug/../../obj/system_efm32.o - .debug_loc 0x00000394 0x16a THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_loc 0x000004fe 0x2c8 THUMB Flash Debug/../../obj/efm32_adc.o - .debug_loc 0x000007c6 0x1862 THUMB Flash Debug/../../obj/efm32_aes.o - .debug_loc 0x00002028 0xdd2 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_loc 0x00002dfa 0x1f7 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_loc 0x00002ff1 0x96 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_loc 0x00003087 0x7d6 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_loc 0x0000385d 0x70a THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_loc 0x00003f67 0xd7 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_loc 0x0000403e 0x2d3 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_loc 0x00004311 0x4d5 THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_loc 0x000047e6 0x614 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_loc 0x00004dfa 0x2fa THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_loc 0x000050f4 0x287 THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_loc 0x0000537b 0x12b THUMB Flash Debug/../../obj/efm32_msc.o - .debug_loc 0x000054a6 0x394 THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_loc 0x0000583a 0x66 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_loc 0x000058a0 0xb4 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_loc 0x00005954 0xd6 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_loc 0x00005a2a 0xeb THUMB Flash Debug/../../obj/efm32_system.o - .debug_loc 0x00005b15 0x8b THUMB Flash Debug/../../obj/efm32_timer.o - .debug_loc 0x00005ba0 0x4b3 THUMB Flash Debug/../../obj/efm32_usart.o - .debug_loc 0x00006053 0x51 THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_loc 0x000060a4 0xbf THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_loc 0x00006163 0x6b0 THUMB Flash Debug/../../obj/lcdcontroller.o - .debug_loc 0x00006813 0x1059 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_loc 0x0000786c 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .debug_loc 0x00007899 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .debug_loc 0x00007905 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) +.debug_loc 0x00000000 0x28c6 + .debug_loc 0x00000000 0x99 THUMB Flash Debug/../../obj/boot.o + .debug_loc 0x00000099 0x34 THUMB Flash Debug/../../obj/led.o + .debug_loc 0x000000cd 0x170 THUMB Flash Debug/../../obj/main.o + .debug_loc 0x0000023d 0x5c THUMB Flash Debug/../../obj/timer.o + .debug_loc 0x00000299 0xb7 THUMB Flash Debug/../../obj/system_efm32.o + .debug_loc 0x00000350 0x1083 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_loc 0x000013d3 0xe2 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_loc 0x000014b5 0x57d THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_loc 0x00001a32 0x43d THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_loc 0x00001e6f 0x104 THUMB Flash Debug/../../obj/efm32_system.o + .debug_loc 0x00001f73 0x953 THUMB Flash Debug/../../obj/lcdcontroller.o -.debug_aranges 0x00000000 0x1210 - .debug_aranges - 0x00000000 0x38 THUMB Flash Debug/../../obj/boot.o - .debug_aranges - 0x00000038 0x20 THUMB Flash Debug/../../obj/cstart.o - .debug_aranges - 0x00000058 0x28 THUMB Flash Debug/../../obj/led.o - .debug_aranges - 0x00000080 0x20 THUMB Flash Debug/../../obj/main.o - .debug_aranges - 0x000000a0 0x40 THUMB Flash Debug/../../obj/timer.o - .debug_aranges - 0x000000e0 0x20 THUMB Flash Debug/../../obj/vectors.o - .debug_aranges - 0x00000100 0x60 THUMB Flash Debug/../../obj/system_efm32.o - .debug_aranges - 0x00000160 0x58 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_aranges - 0x000001b8 0x48 THUMB Flash Debug/../../obj/efm32_adc.o - .debug_aranges - 0x00000200 0x80 THUMB Flash Debug/../../obj/efm32_aes.o - .debug_aranges - 0x00000280 0xe0 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_aranges - 0x00000360 0x40 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_aranges - 0x000003a0 0x20 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_aranges - 0x000003c0 0x80 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_aranges - 0x00000440 0x60 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_aranges - 0x000004a0 0x48 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_aranges - 0x000004e8 0x90 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_aranges - 0x00000578 0x50 THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_aranges - 0x000005c8 0x70 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_aranges - 0x00000638 0x58 THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_aranges - 0x00000690 0x70 THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_aranges - 0x00000700 0x20 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_aranges - 0x00000720 0x38 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_aranges - 0x00000758 0x58 THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_aranges - 0x000007b0 0x20 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_aranges - 0x000007d0 0x30 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_aranges - 0x00000800 0x50 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_aranges - 0x00000850 0x28 THUMB Flash Debug/../../obj/efm32_system.o - .debug_aranges - 0x00000878 0x48 THUMB Flash Debug/../../obj/efm32_timer.o - .debug_aranges - 0x000008c0 0xa0 THUMB Flash Debug/../../obj/efm32_usart.o - .debug_aranges - 0x00000960 0x30 THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_aranges - 0x00000990 0x38 THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_aranges - 0x000009c8 0x78 THUMB Flash Debug/../../obj/lcdcontroller.o - .debug_aranges - 0x00000a40 0x508 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_aranges - 0x00000f48 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .debug_aranges - 0x00000f68 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .debug_aranges - 0x00000f98 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_aranges - 0x000011b0 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_pubnames + 0x00000000 0x277f + .debug_pubnames + 0x00000000 0x6eb THUMB Flash Debug/../../obj/boot.o + .debug_pubnames + 0x000006eb 0x11a THUMB Flash Debug/../../obj/led.o + .debug_pubnames + 0x00000805 0x568 THUMB Flash Debug/../../obj/main.o + .debug_pubnames + 0x00000d6d 0x5bc THUMB Flash Debug/../../obj/timer.o + .debug_pubnames + 0x00001329 0x2d THUMB Flash Debug/../../obj/vectors.o + .debug_pubnames + 0x00001356 0x116 THUMB Flash Debug/../../obj/system_efm32.o + .debug_pubnames + 0x0000146c 0x6b8 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_pubnames + 0x00001b24 0xce THUMB Flash Debug/../../obj/efm32_emu.o + .debug_pubnames + 0x00001bf2 0x304 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_pubnames + 0x00001ef6 0x37c THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_pubnames + 0x00002272 0x4c THUMB Flash Debug/../../obj/efm32_system.o + .debug_pubnames + 0x000022be 0x4c1 THUMB Flash Debug/../../obj/lcdcontroller.o -.debug_ranges 0x00000000 0x1018 - .debug_ranges 0x00000000 0x28 THUMB Flash Debug/../../obj/boot.o - .debug_ranges 0x00000028 0x18 THUMB Flash Debug/../../obj/led.o - .debug_ranges 0x00000040 0x10 THUMB Flash Debug/../../obj/main.o - .debug_ranges 0x00000050 0x30 THUMB Flash Debug/../../obj/timer.o - .debug_ranges 0x00000080 0x10 THUMB Flash Debug/../../obj/vectors.o - .debug_ranges 0x00000090 0x50 THUMB Flash Debug/../../obj/system_efm32.o - .debug_ranges 0x000000e0 0x48 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_ranges 0x00000128 0x38 THUMB Flash Debug/../../obj/efm32_adc.o - .debug_ranges 0x00000160 0x70 THUMB Flash Debug/../../obj/efm32_aes.o - .debug_ranges 0x000001d0 0xe8 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_ranges 0x000002b8 0x30 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_ranges 0x000002e8 0x10 THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_ranges 0x000002f8 0x70 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_ranges 0x00000368 0x50 THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_ranges 0x000003b8 0x38 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_ranges 0x000003f0 0x80 THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_ranges 0x00000470 0x40 THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_ranges 0x000004b0 0x60 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_ranges 0x00000510 0x48 THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_ranges 0x00000558 0x60 THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_ranges 0x000005b8 0x10 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_ranges 0x000005c8 0x28 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_ranges 0x000005f0 0x48 THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_ranges 0x00000638 0x10 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_ranges 0x00000648 0x80 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_ranges 0x000006c8 0x40 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_ranges 0x00000708 0x18 THUMB Flash Debug/../../obj/efm32_system.o - .debug_ranges 0x00000720 0x38 THUMB Flash Debug/../../obj/efm32_timer.o - .debug_ranges 0x00000758 0x90 THUMB Flash Debug/../../obj/efm32_usart.o - .debug_ranges 0x000007e8 0x20 THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_ranges 0x00000808 0x28 THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_ranges 0x00000830 0x68 THUMB Flash Debug/../../obj/lcdcontroller.o - .debug_ranges 0x00000898 0x4f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_ranges 0x00000d90 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .debug_ranges 0x00000da0 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .debug_ranges 0x00000dc0 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_ranges 0x00000fc8 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_pubtypes + 0x00000000 0xe75 + .debug_pubtypes + 0x00000000 0x175 THUMB Flash Debug/../../obj/boot.o + .debug_pubtypes + 0x00000175 0xeb THUMB Flash Debug/../../obj/led.o + .debug_pubtypes + 0x00000260 0x101 THUMB Flash Debug/../../obj/main.o + .debug_pubtypes + 0x00000361 0x12a THUMB Flash Debug/../../obj/timer.o + .debug_pubtypes + 0x0000048b 0xdb THUMB Flash Debug/../../obj/vectors.o + .debug_pubtypes + 0x00000566 0xd5 THUMB Flash Debug/../../obj/system_efm32.o + .debug_pubtypes + 0x0000063b 0x181 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_pubtypes + 0x000007bc 0x115 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_pubtypes + 0x000008d1 0x13a THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_pubtypes + 0x00000a0b 0x195 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_pubtypes + 0x00000ba0 0x11c THUMB Flash Debug/../../obj/efm32_system.o + .debug_pubtypes + 0x00000cbc 0x1b9 THUMB Flash Debug/../../obj/lcdcontroller.o -.debug_line 0x00000000 0x8955 - .debug_line 0x00000000 0x340 THUMB Flash Debug/../../obj/boot.o - .debug_line 0x00000340 0xf8 THUMB Flash Debug/../../obj/cstart.o - .debug_line 0x00000438 0x2ae THUMB Flash Debug/../../obj/led.o - .debug_line 0x000006e6 0x31f THUMB Flash Debug/../../obj/main.o - .debug_line 0x00000a05 0x2fa THUMB Flash Debug/../../obj/timer.o - .debug_line 0x00000cff 0x17d THUMB Flash Debug/../../obj/vectors.o - .debug_line 0x00000e7c 0x1d THUMB Flash Debug/../../obj/core_cm3.o - .debug_line 0x00000e99 0x283 THUMB Flash Debug/../../obj/system_efm32.o - .debug_line 0x0000111c 0x390 THUMB Flash Debug/../../obj/efm32_acmp.o - .debug_line 0x000014ac 0x3b2 THUMB Flash Debug/../../obj/efm32_adc.o - .debug_line 0x0000185e 0xb3c THUMB Flash Debug/../../obj/efm32_aes.o - .debug_line 0x0000239a 0x0 THUMB Flash Debug/../../obj/efm32_assert.o - .debug_line 0x0000239a 0x671 THUMB Flash Debug/../../obj/efm32_cmu.o - .debug_line 0x00002a0b 0x370 THUMB Flash Debug/../../obj/efm32_dac.o - .debug_line 0x00002d7b 0x2ef THUMB Flash Debug/../../obj/efm32_dbg.o - .debug_line 0x0000306a 0x497 THUMB Flash Debug/../../obj/efm32_dma.o - .debug_line 0x00003501 0x3fa THUMB Flash Debug/../../obj/efm32_ebi.o - .debug_line 0x000038fb 0x3a6 THUMB Flash Debug/../../obj/efm32_emu.o - .debug_line 0x00003ca1 0x3fa THUMB Flash Debug/../../obj/efm32_gpio.o - .debug_line 0x0000409b 0x460 THUMB Flash Debug/../../obj/efm32_i2c.o - .debug_line 0x000044fb 0x201 THUMB Flash Debug/../../obj/efm32_int.o - .debug_line 0x000046fc 0x418 THUMB Flash Debug/../../obj/efm32_lcd.o - .debug_line 0x00004b14 0x101 THUMB Flash Debug/../../obj/efm32_lesense.o - .debug_line 0x00004c15 0x3bf THUMB Flash Debug/../../obj/efm32_letimer.o - .debug_line 0x00004fd4 0x3f4 THUMB Flash Debug/../../obj/efm32_leuart.o - .debug_line 0x000053c8 0x228 THUMB Flash Debug/../../obj/efm32_mpu.o - .debug_line 0x000055f0 0x355 THUMB Flash Debug/../../obj/efm32_msc.o - .debug_line 0x00005945 0x101 THUMB Flash Debug/../../obj/efm32_opamp.o - .debug_line 0x00005a46 0x42f THUMB Flash Debug/../../obj/efm32_pcnt.o - .debug_line 0x00005e75 0x2b7 THUMB Flash Debug/../../obj/efm32_prs.o - .debug_line 0x0000612c 0x319 THUMB Flash Debug/../../obj/efm32_rmu.o - .debug_line 0x00006445 0x374 THUMB Flash Debug/../../obj/efm32_rtc.o - .debug_line 0x000067b9 0x2ee THUMB Flash Debug/../../obj/efm32_system.o - .debug_line 0x00006aa7 0x356 THUMB Flash Debug/../../obj/efm32_timer.o - .debug_line 0x00006dfd 0x47e THUMB Flash Debug/../../obj/efm32_usart.o - .debug_line 0x0000727b 0x317 THUMB Flash Debug/../../obj/efm32_vcmp.o - .debug_line 0x00007592 0x337 THUMB Flash Debug/../../obj/efm32_wdog.o - .debug_line 0x000078c9 0x42c THUMB Flash Debug/../../obj/lcdcontroller.o - .debug_line 0x00007cf5 0x5b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_line 0x000082a8 0x75 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .debug_line 0x0000831d 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .debug_line 0x00008391 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_line 0x000088e1 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_aranges 0x00000000 0x408 + .debug_aranges + 0x00000000 0x30 THUMB Flash Debug/../../obj/boot.o + .debug_aranges + 0x00000030 0x20 THUMB Flash Debug/../../obj/cstart.o + .debug_aranges + 0x00000050 0x28 THUMB Flash Debug/../../obj/led.o + .debug_aranges + 0x00000078 0x20 THUMB Flash Debug/../../obj/main.o + .debug_aranges + 0x00000098 0x40 THUMB Flash Debug/../../obj/timer.o + .debug_aranges + 0x000000d8 0x20 THUMB Flash Debug/../../obj/vectors.o + .debug_aranges + 0x000000f8 0x60 THUMB Flash Debug/../../obj/system_efm32.o + .debug_aranges + 0x00000158 0xc8 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_aranges + 0x00000220 0x48 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_aranges + 0x00000268 0x90 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_aranges + 0x000002f8 0x70 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_aranges + 0x00000368 0x28 THUMB Flash Debug/../../obj/efm32_system.o + .debug_aranges + 0x00000390 0x78 THUMB Flash Debug/../../obj/lcdcontroller.o -.debug_str 0x00000000 0x6983 - .debug_str 0x00000000 0x846 THUMB Flash Debug/../../obj/boot.o - 0x88d (size before relaxing) - .debug_str 0x00000846 0x1d2 THUMB Flash Debug/../../obj/led.o - 0x2d6 (size before relaxing) - .debug_str 0x00000a18 0x20c THUMB Flash Debug/../../obj/main.o - 0x6d1 (size before relaxing) - .debug_str 0x00000c24 0x337 THUMB Flash Debug/../../obj/timer.o - 0x6a8 (size before relaxing) - .debug_str 0x00000f5b 0x99 THUMB Flash Debug/../../obj/vectors.o - 0x16e (size before relaxing) - .debug_str 0x00000ff4 0x85 THUMB Flash Debug/../../obj/core_cm3.o - 0x145 (size before relaxing) - .debug_str 0x00001079 0x176 THUMB Flash Debug/../../obj/system_efm32.o - 0x366 (size before relaxing) - .debug_str 0x000011ef 0x46f THUMB Flash Debug/../../obj/efm32_acmp.o - 0x56b (size before relaxing) - .debug_str 0x0000165e 0x744 THUMB Flash Debug/../../obj/efm32_adc.o - 0xa5e (size before relaxing) - .debug_str 0x00001da2 0x1bb THUMB Flash Debug/../../obj/efm32_aes.o - 0x2e0 (size before relaxing) - .debug_str 0x00001f5d 0x405 THUMB Flash Debug/../../obj/efm32_cmu.o - 0x995 (size before relaxing) - .debug_str 0x00002362 0x30b THUMB Flash Debug/../../obj/efm32_dac.o - 0x702 (size before relaxing) - .debug_str 0x0000266d 0x130 THUMB Flash Debug/../../obj/efm32_dbg.o - 0x445 (size before relaxing) - .debug_str 0x0000279d 0x5bf THUMB Flash Debug/../../obj/efm32_dma.o - 0xb70 (size before relaxing) - .debug_str 0x00002d5c 0x358 THUMB Flash Debug/../../obj/efm32_ebi.o - 0x47d (size before relaxing) - .debug_str 0x000030b4 0x142 THUMB Flash Debug/../../obj/efm32_emu.o - 0x397 (size before relaxing) - .debug_str 0x000031f6 0x1be THUMB Flash Debug/../../obj/efm32_gpio.o - 0x57b (size before relaxing) - .debug_str 0x000033b4 0x35a THUMB Flash Debug/../../obj/efm32_i2c.o - 0x6c6 (size before relaxing) - .debug_str 0x0000370e 0x89 THUMB Flash Debug/../../obj/efm32_int.o - 0x167 (size before relaxing) - .debug_str 0x00003797 0x5d2 THUMB Flash Debug/../../obj/efm32_lcd.o - 0x774 (size before relaxing) - .debug_str 0x00003d69 0x81 THUMB Flash Debug/../../obj/efm32_lesense.o - 0x156 (size before relaxing) - .debug_str 0x00003dea 0x295 THUMB Flash Debug/../../obj/efm32_letimer.o - 0x3d1 (size before relaxing) - .debug_str 0x0000407f 0x151 THUMB Flash Debug/../../obj/efm32_leuart.o - 0x649 (size before relaxing) - .debug_str 0x000041d0 0x3d6 THUMB Flash Debug/../../obj/efm32_mpu.o - 0x4d1 (size before relaxing) - .debug_str 0x000045a6 0x14e THUMB Flash Debug/../../obj/efm32_msc.o - 0x28a (size before relaxing) - .debug_str 0x000046f4 0x7f THUMB Flash Debug/../../obj/efm32_opamp.o - 0x154 (size before relaxing) - .debug_str 0x00004773 0x19f THUMB Flash Debug/../../obj/efm32_pcnt.o - 0x2f8 (size before relaxing) - .debug_str 0x00004912 0x10d THUMB Flash Debug/../../obj/efm32_prs.o - 0x207 (size before relaxing) - .debug_str 0x00004a1f 0xf2 THUMB Flash Debug/../../obj/efm32_rmu.o - 0x21e (size before relaxing) - .debug_str 0x00004b11 0x101 THUMB Flash Debug/../../obj/efm32_rtc.o - 0x26a (size before relaxing) - .debug_str 0x00004c12 0x124 THUMB Flash Debug/../../obj/efm32_system.o - 0x232 (size before relaxing) - .debug_str 0x00004d36 0x555 THUMB Flash Debug/../../obj/efm32_timer.o - 0x6f7 (size before relaxing) - .debug_str 0x0000528b 0x5c5 THUMB Flash Debug/../../obj/efm32_usart.o +.debug_ranges 0x00000000 0x370 + .debug_ranges 0x00000000 0x38 THUMB Flash Debug/../../obj/boot.o + .debug_ranges 0x00000038 0x18 THUMB Flash Debug/../../obj/led.o + .debug_ranges 0x00000050 0x10 THUMB Flash Debug/../../obj/main.o + .debug_ranges 0x00000060 0x30 THUMB Flash Debug/../../obj/timer.o + .debug_ranges 0x00000090 0x10 THUMB Flash Debug/../../obj/vectors.o + .debug_ranges 0x000000a0 0x50 THUMB Flash Debug/../../obj/system_efm32.o + .debug_ranges 0x000000f0 0xe8 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_ranges 0x000001d8 0x38 THUMB Flash Debug/../../obj/efm32_emu.o + .debug_ranges 0x00000210 0x80 THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_ranges 0x00000290 0x60 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_ranges 0x000002f0 0x18 THUMB Flash Debug/../../obj/efm32_system.o + .debug_ranges 0x00000308 0x68 THUMB Flash Debug/../../obj/lcdcontroller.o + +.debug_line 0x00000000 0x2a16 + .debug_line 0x00000000 0x324 THUMB Flash Debug/../../obj/boot.o + .debug_line 0x00000324 0x128 THUMB Flash Debug/../../obj/cstart.o + .debug_line 0x0000044c 0x298 THUMB Flash Debug/../../obj/led.o + .debug_line 0x000006e4 0x306 THUMB Flash Debug/../../obj/main.o + .debug_line 0x000009ea 0x2e0 THUMB Flash Debug/../../obj/timer.o + .debug_line 0x00000cca 0x176 THUMB Flash Debug/../../obj/vectors.o + .debug_line 0x00000e40 0x2ed THUMB Flash Debug/../../obj/system_efm32.o + .debug_line 0x0000112d 0x650 THUMB Flash Debug/../../obj/efm32_cmu.o + .debug_line 0x0000177d 0x38e THUMB Flash Debug/../../obj/efm32_emu.o + .debug_line 0x00001b0b 0x3ce THUMB Flash Debug/../../obj/efm32_gpio.o + .debug_line 0x00001ed9 0x3e5 THUMB Flash Debug/../../obj/efm32_leuart.o + .debug_line 0x000022be 0x2d7 THUMB Flash Debug/../../obj/efm32_system.o + .debug_line 0x00002595 0x481 THUMB Flash Debug/../../obj/lcdcontroller.o + +.debug_str 0x00000000 0x1fa5 + .debug_str 0x00000000 0x936 THUMB Flash Debug/../../obj/boot.o 0x968 (size before relaxing) - .debug_str 0x00005850 0x221 THUMB Flash Debug/../../obj/efm32_vcmp.o - 0x33f (size before relaxing) - .debug_str 0x00005a71 0x234 THUMB Flash Debug/../../obj/efm32_wdog.o - 0x367 (size before relaxing) - .debug_str 0x00005ca5 0x1fa THUMB Flash Debug/../../obj/lcdcontroller.o - 0x7b8 (size before relaxing) - .debug_str 0x00005e9f 0x57f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x655 (size before relaxing) - .debug_str 0x0000641e 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - 0xad (size before relaxing) - .debug_str 0x00006482 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - 0xc5 (size before relaxing) - .debug_str 0x000064fe 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x3fc (size before relaxing) - .debug_str 0x000068b1 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x11b (size before relaxing) + .debug_str 0x00000936 0x1d2 THUMB Flash Debug/../../obj/led.o + 0x3c3 (size before relaxing) + .debug_str 0x00000b08 0x211 THUMB Flash Debug/../../obj/main.o + 0x7ac (size before relaxing) + .debug_str 0x00000d19 0x337 THUMB Flash Debug/../../obj/timer.o + 0x795 (size before relaxing) + .debug_str 0x00001050 0x99 THUMB Flash Debug/../../obj/vectors.o + 0x25b (size before relaxing) + .debug_str 0x000010e9 0x176 THUMB Flash Debug/../../obj/system_efm32.o + 0x441 (size before relaxing) + .debug_str 0x0000125f 0x4a4 THUMB Flash Debug/../../obj/efm32_cmu.o + 0xa63 (size before relaxing) + .debug_str 0x00001703 0x14b THUMB Flash Debug/../../obj/efm32_emu.o + 0x472 (size before relaxing) + .debug_str 0x0000184e 0x25f THUMB Flash Debug/../../obj/efm32_gpio.o + 0x649 (size before relaxing) + .debug_str 0x00001aad 0x151 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x724 (size before relaxing) + .debug_str 0x00001bfe 0x124 THUMB Flash Debug/../../obj/efm32_system.o + 0x30d (size before relaxing) + .debug_str 0x00001d22 0x283 THUMB Flash Debug/../../obj/lcdcontroller.o + 0x8ec (size before relaxing) -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e THUMB Flash Debug/../../obj/boot.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/led.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/main.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/timer.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/vectors.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/core_cm3.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/system_efm32.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_acmp.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_adc.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_aes.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_assert.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_cmu.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_dac.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_dbg.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_dma.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_ebi.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_emu.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_gpio.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_i2c.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_int.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_lcd.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_lesense.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_letimer.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_leuart.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_mpu.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_msc.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_opamp.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_pcnt.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_prs.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_rmu.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_rtc.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_system.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_timer.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_usart.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_vcmp.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/efm32_wdog.o - .comment 0x00000000 0x4f THUMB Flash Debug/../../obj/lcdcontroller.o - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.comment 0x00000000 0x4c + .comment 0x00000000 0x4c THUMB Flash Debug/../../obj/boot.o + 0x4d (size before relaxing) + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/led.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/main.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/timer.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/vectors.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/system_efm32.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_cmu.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_emu.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_gpio.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_leuart.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/efm32_system.o + .comment 0x0000004c 0x4d THUMB Flash Debug/../../obj/lcdcontroller.o .ARM.attributes - 0x00000000 0x10 + 0x00000000 0x31 .ARM.attributes - 0x00000000 0x10 THUMB Flash Debug/../../obj/boot.o + 0x00000000 0x33 THUMB Flash Debug/../../obj/boot.o .ARM.attributes - 0x00000010 0x10 THUMB Flash Debug/../../obj/cstart.o + 0x00000033 0x21 THUMB Flash Debug/../../obj/cstart.o .ARM.attributes - 0x00000020 0x10 THUMB Flash Debug/../../obj/led.o + 0x00000054 0x33 THUMB Flash Debug/../../obj/led.o .ARM.attributes - 0x00000030 0x10 THUMB Flash Debug/../../obj/main.o + 0x00000087 0x33 THUMB Flash Debug/../../obj/main.o .ARM.attributes - 0x00000040 0x10 THUMB Flash Debug/../../obj/timer.o + 0x000000ba 0x33 THUMB Flash Debug/../../obj/timer.o .ARM.attributes - 0x00000050 0x10 THUMB Flash Debug/../../obj/vectors.o + 0x000000ed 0x33 THUMB Flash Debug/../../obj/vectors.o .ARM.attributes - 0x00000060 0x10 THUMB Flash Debug/../../obj/core_cm3.o + 0x00000120 0x33 THUMB Flash Debug/../../obj/system_efm32.o .ARM.attributes - 0x00000070 0x10 THUMB Flash Debug/../../obj/system_efm32.o + 0x00000153 0x33 THUMB Flash Debug/../../obj/efm32_cmu.o .ARM.attributes - 0x00000080 0x10 THUMB Flash Debug/../../obj/efm32_acmp.o + 0x00000186 0x33 THUMB Flash Debug/../../obj/efm32_emu.o .ARM.attributes - 0x00000090 0x10 THUMB Flash Debug/../../obj/efm32_adc.o + 0x000001b9 0x33 THUMB Flash Debug/../../obj/efm32_gpio.o .ARM.attributes - 0x000000a0 0x10 THUMB Flash Debug/../../obj/efm32_aes.o + 0x000001ec 0x33 THUMB Flash Debug/../../obj/efm32_leuart.o .ARM.attributes - 0x000000b0 0x10 THUMB Flash Debug/../../obj/efm32_assert.o + 0x0000021f 0x33 THUMB Flash Debug/../../obj/efm32_system.o .ARM.attributes - 0x000000c0 0x10 THUMB Flash Debug/../../obj/efm32_cmu.o - .ARM.attributes - 0x000000d0 0x10 THUMB Flash Debug/../../obj/efm32_dac.o - .ARM.attributes - 0x000000e0 0x10 THUMB Flash Debug/../../obj/efm32_dbg.o - .ARM.attributes - 0x000000f0 0x10 THUMB Flash Debug/../../obj/efm32_dma.o - .ARM.attributes - 0x00000100 0x10 THUMB Flash Debug/../../obj/efm32_ebi.o - .ARM.attributes - 0x00000110 0x10 THUMB Flash Debug/../../obj/efm32_emu.o - .ARM.attributes - 0x00000120 0x10 THUMB Flash Debug/../../obj/efm32_gpio.o - .ARM.attributes - 0x00000130 0x10 THUMB Flash Debug/../../obj/efm32_i2c.o - .ARM.attributes - 0x00000140 0x10 THUMB Flash Debug/../../obj/efm32_int.o - .ARM.attributes - 0x00000150 0x10 THUMB Flash Debug/../../obj/efm32_lcd.o - .ARM.attributes - 0x00000160 0x10 THUMB Flash Debug/../../obj/efm32_lesense.o - .ARM.attributes - 0x00000170 0x10 THUMB Flash Debug/../../obj/efm32_letimer.o - .ARM.attributes - 0x00000180 0x10 THUMB Flash Debug/../../obj/efm32_leuart.o - .ARM.attributes - 0x00000190 0x10 THUMB Flash Debug/../../obj/efm32_mpu.o - .ARM.attributes - 0x000001a0 0x10 THUMB Flash Debug/../../obj/efm32_msc.o - .ARM.attributes - 0x000001b0 0x10 THUMB Flash Debug/../../obj/efm32_opamp.o - .ARM.attributes - 0x000001c0 0x10 THUMB Flash Debug/../../obj/efm32_pcnt.o - .ARM.attributes - 0x000001d0 0x10 THUMB Flash Debug/../../obj/efm32_prs.o - .ARM.attributes - 0x000001e0 0x10 THUMB Flash Debug/../../obj/efm32_rmu.o - .ARM.attributes - 0x000001f0 0x10 THUMB Flash Debug/../../obj/efm32_rtc.o - .ARM.attributes - 0x00000200 0x10 THUMB Flash Debug/../../obj/efm32_system.o - .ARM.attributes - 0x00000210 0x10 THUMB Flash Debug/../../obj/efm32_timer.o - .ARM.attributes - 0x00000220 0x10 THUMB Flash Debug/../../obj/efm32_usart.o - .ARM.attributes - 0x00000230 0x10 THUMB Flash Debug/../../obj/efm32_vcmp.o - .ARM.attributes - 0x00000240 0x10 THUMB Flash Debug/../../obj/efm32_wdog.o - .ARM.attributes - 0x00000250 0x10 THUMB Flash Debug/../../obj/lcdcontroller.o - .ARM.attributes - 0x00000260 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .ARM.attributes - 0x00000270 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .ARM.attributes - 0x00000280 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfprintf_int.o) - .ARM.attributes - 0x00000290 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(__vfscanf_int.o) - .ARM.attributes - 0x000002a0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .ARM.attributes - 0x000002b0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .ARM.attributes - 0x000002c0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .ARM.attributes - 0x000002d0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000252 0x33 THUMB Flash Debug/../../obj/lcdcontroller.o diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.srec b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.srec index 52dd50d0..a0a65894 100644 --- a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.srec +++ b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.srec @@ -1,554 +1,270 @@ S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF -S1132000F401002071210000B9270000B927000065 -S1132010B9270000B9270000B9270000B92700003C -S1132020B9270000B9270000B9270000B92700002C -S1132030B9270000B9270000B9270000A527000030 -S1132040B9270000B9270000B9270000B92700000C -S1132050B9270000B9270000B9270000B9270000FC -S1132060B9270000B9270000B9270000B9270000EC -S1132070B9270000B9270000B9270000B9270000DC -S1132080B9270000B9270000B9270000B9270000CC -S1132090B9270000B9270000B9270000B9270000BC -S11320A0B9270000B9270000B9270000B5330000A4 -S10F20B0B9270000B9270000EE11AA5562 -S11320BC2E498D462E492F480A1A04D081F30988DB -S11320CC022282F314882C482C492D4A00F039F84A -S11320DC2C482D492D4A00F034F82D482D492E4A10 -S11320EC00F02FF82D482E492E4A00F02AF82E48DD -S11320FC2E492F4A00F025F82E482F492F4A00F07C -S113210C20F82F482F49002200F026F82E482F499A -S113211C091A082903DB00220260043001602048FC -S113212C2049884205D00268043003B4904703BCAC -S113213CF7E700208646EC4600200021244A90470D -S113214CFEE7884207D0521A05D0037801300B7091 -S113215C0131013AF9D17047884202D00270013042 -S113216CFAE770471B481C490160A1E7F401002001 -S113217CF4010020F4010020604200000000002063 -S113218C08000020E8210000E821000020420000A3 -S113219C60420000000000200000002020420000EB -S11321AC2042000020420000204200002042000097 -S11321BC2042000020420000204200006042000047 -S11321CC080000207400002074000020F40000209B -S10F21DC8D24000008ED00E0002000004D -S11321E810B504464FF48843C4F20803DB6A13F0BD -S11321F8040F0CD04FF48840C4F2080043F2B12312 -S1132208C0F20003984720704FF0010010BD4FF052 -S1132218000010BD30B586B06C4644F22025C0F2EB -S113222800050FCD0FC495E8030084E803004FF4BC -S11322384240C0F202004FF0010142F6CD34C0F230 -S11322480004A0474FF002004FF006014FF00402CB -S11322584FF0010343F2D905C0F20005A8474FF037 -S113226802004FF007014FF001024FF00003A847A6 -S11322784FF40C50C0F204004FF00101A0474FF096 -S11322880300C0F212004FF0020142F69573C0F247 -S1132298000398474FF4AA55C0F2160528464FF094 -S11322A8010142F6C913C0F20003984728464FF0CB -S11322B80101A0474FF0000506A941F8185D4FF445 -S11322C88844C4F208042046694643F25123C0F204 -S11322D800039847204629464FF4165243F2B11397 -S11322E8C0F2000398474FF0030363654FF00403FB -S11322F8636320464FF0050143F21523C0F200033F -S1132308984706B030BD00BFBFF34F8F4FF46D42FE -S1132318CEF20002D16801F4E0614FF00403C0F288 -S1132328FA530B43D360BFF34F8FFEE700B540F277 -S11323384D03C2F200031B78D3B940F20800C2F27D -S1132348000042F2E913C0F200039847012848D17B -S113235840F24D03C2F200034FF001021A7040F23A -S11323684C03C2F200034FF000021A705DF804FB3C -S113237840F20803C2F2000340F24C02C2F2000227 -S1132388107800F10100181842F2E913C0F20003B2 -S11323989847012825D140F24C03C2F200031A7869 -S11323A802F10102D2B21A7040F20803C2F2000329 -S11323B81B78934215D140F24D03C2F200034FF04B -S11323C800021A7040F20803C2F200035B78FF2B84 -S11323D807D140F20803C2F200039B780BB9024B01 -S11323E898475DF804FB00BF1123000000B54FF4C3 -S11323F82040C4F2080043F29943C0F2000398470E -S11324085DF804FB10B542F29973C0F200039847D3 -S1132418044640F25003C2F200031B68C31AB3F522 -S1132428FA7F2ED340F25403C2F200031B7893B907 -S113243840F25403C2F200034FF001021A704FF441 -S11324482040C4F208004FF0000143F2F133C0F217 -S11324580003984710E040F25403C2F200034FF01F -S113246800021A704FF42040C4F20800114643F2E7 -S1132478F133C0F20003984740F25003C2F200035C -S11324881C6010BD00B581B042F6A103C0F2000380 -S1132498984748F2FC13C0F6E0731B681B0E14D16E -S11324A84AF20C03C4F20C031A6822F070021A6090 -S11324B846F22003C4F20C031A6822F060421A6040 -S11324C81A6862F060621A6001E0032B22D846F2AF -S11324D82003C4F20C031A6822F4FC521A6048F26E -S11324E84002C4F20C024FF00003136048F24402A5 -S11324F8C4F20C02136048F25802C4F20C021360CE -S113250848F26002C4F20C02136048F27802C4F282 -S11325180C021360684643F2C123C0F200039847D3 -S11325289DF80030012B16D19DF801303BB948F2D3 -S11325384003C4F20C031A6842F002021A609DF8C0 -S11325480130012B07D848F24403C4F20C031A687B -S113255842F001021A6048F2F013C0F6E0731A68F8 -S11325684BF6FF13C4F68A439A422FD848F2440321 -S1132578C4F20C031A6842F490421A6048F2B41286 -S1132588C0F6E0721168C1F3062110681568146872 -S113259804F07F0405F4FE42224300F07F0042EA7F -S11325A8004242EA016142F23402C4F200021160BC -S11325B848F2C812C0F6E072116844F22C02C4F260 -S11325C8000211601A6822F490421A604FF0000069 -S11325D84FF001010A4642F61D73C0F20003984702 -S11325E84FF40043C4F20C031A6C42F00F021A644D -S11325F85A6C6FEA12426FEA02425A644FF440700E -S1132608C0F204004FF0000142F6CD34C0F20004D9 -S1132618A0474FF49850C0F204004FF00001A047BF -S11326284FF44C50C0F204004FF00001A0474FF49F -S11326382240C0F202004FF00001A0474FF400709E -S1132648C0F202004FF00001A0474FF49050C0F2CE -S113265802004FF00001A0474FF40850C0F20200F6 -S11326684FF00001A0474FF44850C0F202004FF069 -S11326780001A0474FF4E440C0F202004FF000010B -S1132688A0474FF40240C0F202004FF00001A047F7 -S11326984FF43240C0F202004FF00001A0474FF45B -S11326A86240C0F202004FF00001A0474FF47240AC -S11326B8C0F202004FF00001A0474FF45240C0F2AC -S11326C802004FF00001A0474FF001004FF009014C -S11326D84FF00502034643F2D904C0F20004A047B0 -S11326E84FF001004FF0020143F2BD03C0F20003B2 -S11326F8984742F2F533C0F20003984742F23D731B -S1132708C0F20003984742F21D23C0F20003984721 -S113271842F20D45C0F2000542F23534C0F200041D -S1132728A847A047FCE700BF40F25803C2F20003E1 -S11327381860704700B54FF02000C0F2040042F65C -S11327481553C0F20003984744F6D353C1F2620309 -S1132758A3FB0020C0F3971000F1FF304EF21003E2 -S1132768CEF2000358604FF46D42CEF200024FF0EF -S1132778E00182F823104FF0000098604FF0070240 -S11327881A6042F23173C0F2000398475DF804FB03 -S113279840F25803C2F200031868704740F2580325 -S11327A8C2F200031A6802F101021A60704700BFFE -S11327B8FEE700BF4FF40043C4F20C03DB6A03F4E2 -S11327C87053B3F5805F48D0B3F5005F03D0B3F519 -S11327D8006F0CD105E040F20003C2F20003186850 -S11327E8704740F20403C2F20003186870474FF4BC -S11327F80043C4F20C03DB6803F4E063B3F5007F21 -S113280819D004D80BB3B3F5807F23D118E0B3F5FE -S1132818806F25D0B3F5A06F03D0B3F5407F19D1ED -S113282804E04FF47C50C0F2AB10704749F6807056 -S1132838C0F2D50070474DF6C000C0F2A70070473B -S11328484CF6C070C0F26A00704744F24020C0F2EF -S11328580F0070474FF0000070474FF40040704776 -S113286846F64070C0F24010704700BF00B542F20F -S1132878BD73C0F2000398474FF40043C4F20C033D -S11328885B6803F00F0320FA03F040F25C03C2F222 -S1132898000318605DF804FB704700BF4FF4004064 -S11328A8704700BF40F20003C2F200031868704783 -S11328B84FF00003C4F20C035B6803F00702032A19 -S11328C80CD8DFE802F00202070723F0070343F0FD -S11328D8010303E023F0070343F003034FF000026E -S11328E8C4F20C0253607047B0FA80F0C0B2C0F171 -S11328F81F0070474FF00003C4F20C035B684DF6E9 -S1132908FF32CFF60B72821842F2FF31C0F2F401A3 -S11329188A420BD803F00702A2F10202012A23F02B -S1132928070394BF43F0030343F001034FF4105229 -S1132938C0F2F402904209D803F00702A2F102029D -S1132948012A23F0070398BF43F002034FF0000263 -S1132958C4F20C025360704749F68070C0F2D50087 -S1132968704700BF00B54FF40043C4F20C039B6AE0 -S11329784FEA400023FA00F000F0030002280AD0CE -S113298803280FD0012816D142F6A503C0F200038C -S113299898475DF804FB42F6AD03C0F2000398477C -S11329A85DF804FB42F67503C0F2000398474FEA4A -S11329B850005DF804FB4FF000005DF804FB00BF15 -S11329C810B50C46C0F3031303F1FF33032B00F2D5 -S11329D8F780DFE803F0021231A8084642F6F10353 -S11329E8C0F2000398474FF40043C4F20C039A68FA -S11329F822F00F021043986010BD42F6B903C0F2EA -S1132A0800039847204642F6F103C0F200039847B2 -S1132A184FF40043C4F20C035A6822F00F02104327 -S1132A28586042F67503C0F20003984742F6FD0366 -S1132A38C0F20003984710BD41F23043C0F20A03C4 -S1132A4898422CD04FF03003C0F20C03984247D080 -S1132A584FF48663C0F20803984240F0B1804FF403 -S1132A680043C4F20C035B6D13F0010F07D14FF45C -S1132A780042C4F20C02136D13F0040FFBD120467C -S1132A8842F6F103C0F2000398474FF40043C4F23E -S1132A980C039A6E22F00F021043986610BD4FF48F -S1132AA80043C4F20C035B6D13F0010F07D14FF41C -S1132AB80042C4F20C02136D13F0040FFBD120463C -S1132AC842F6F103C0F2000398474FF40043C4F2FE -S1132AD80C039A6E22F0F00242EA0010986610BDC8 -S1132AE84FF40043C4F20C035B6D13F0010F07D1DC -S1132AF84FF40042C4F20C02136D13F0040FFBD11F -S1132B08204642F6F103C0F2000398474FF400430D -S1132B18C4F20C039A6EA0F1100022F4407242EA47 -S1132B2800229A6610BD4FF4A863C0F214039842B9 -S1132B3806D04FF4AA53C0F21603984240D11FE0BE -S1132B484FF40043C4F20C035B6D13F0010F07D17B -S1132B584FF40042C4F20C02136D13F0400FFBD182 -S1132B68204642F6F103C0F2000398474FF40043AD -S1132B78C4F20C031A6F22F003021043186710BD45 -S1132B884FF40043C4F20C035B6D13F0010F07D13B -S1132B984FF40042C4F20C02136D13F0400FFBD142 -S1132BA8204642F6F103C0F2000398474FF400436D -S1132BB8C4F20C031A6F22F0300242EA00101867BC -S1132BC810BD00BF30B4C9B2C0F3032303F1FF330F -S1132BD8052B43D8DFE803F008363B1E250348F2EB -S1132BE87802C4F20C0236E0C0F3043048F208025A -S1132BF8C4F20C0206E04FF40044C4F20C04236D42 -S1132C081D42FCD102F1047200EBC2024FEA8202B7 -S1132C18116023E04FF0010548F25802C4F20C0297 -S1132C2805E04FF0100548F26002C4F20C02C0F34C -S1132C3804304FF40043C4F20C035B6D13F0010F2E -S1132C48E0D1D8E748F24402C4F20C0203E048F2A7 -S1132C584002C4F20C02C0F30430D3E730BC70471E -S1132C6800F00F0000F1FF30032842D8DFE800F03D -S1132C78051B2E024FF0070070474FF40043C4F2BF -S1132C880C03D86A00F47050B0F5805F34D0B0F506 -S1132C98005F05D0B0F5006F0CBF04200520704715 -S1132CA84FF0020070474FF40043C4F20C03986AD3 -S1132CB800F00300022822D0032804D001280CBF06 -S1132CC80320012070474FF0060070474FF400437B -S1132CD8C4F20C03986A00F00C00022812D00328EE -S1132CE804D001280CBF0320012070474FF00600D0 -S1132CF870474FF0000070474FF0030070474FF0E3 -S1132D08020070474FF00200704700BF00B500F49E -S1132D187810B0F5402F7AD014D8B0F5802F42D06F -S1132D2805D848B3B0F5003F40F0EF802BE0B0F58C -S1132D38002F48D0B0F5202F57D0B0F5C02F40F061 -S1132D48E48037E0B0F5A01F00F0958007D8B0F50F -S1132D58602F6ED0B0F5901F40F0D78082E0B0F5B8 -S1132D68C01F00F0AC80B0F5D01F00F0C780B0F5EC -S1132D78B01F40F0CA8090E042F2BD73C0F2000375 -S1132D8898475DF804FB42F2BD73C0F2000398470C -S1132D984FF40043C4F20C039B6803F00F0320FABA -S1132DA803F05DF804FB42F67503C0F2000398478C -S1132DB85DF804FB4FF0000042F66D13C0F2000307 -S1132DC898475DF804FB4FF0000042F66D13C0F21B -S1132DD8000398474FF40043C4F20C039B6E03F0BE -S1132DE80F0320FA03F05DF804FB4FF0000042F6ED -S1132DF86D13C0F2000398474FF40043C4F20C0368 -S1132E089B6EC3F3031320FA03F05DF804FB4FF041 -S1132E18000042F66D13C0F2000398474FF40043D4 -S1132E28C4F20C039B6EC3F3012320FA03F05DF88C -S1132E3804FB4FF0000042F66D13C0F200039847FC -S1132E484FF40043C4F20C039A6EC2F3012220FA31 -S1132E5802F0DB6F03F0070303F10103B0FBF3F0A7 -S1132E685DF804FB4FF0010042F66D13C0F2000355 -S1132E7898475DF804FB4FF0010042F66D13C0F269 -S1132E88000398474FF40043C4F20C031B6F03F08C -S1132E98030320FA03F05DF804FB4FF0010042F647 -S1132EA86D13C0F2000398474FF40043C4F20C03B7 -S1132EB81B6FC3F3011320FA03F05DF804FB4FF012 -S1132EC80400C0F2180042F66943C0F200039847B0 -S1132ED8072808D008280DD142F2BD73C0F20003B8 -S1132EE898475DF804FB42F66113C0F20003984763 -S1132EF85DF804FB4FF000005DF804FB42F6611333 -S1132F08C0F2000398475DF804FB4FF000005DF839 -S1132F1804FB00BF10B5C9B2D2B2042835D8DFE823 -S1132F2800F0120D170308004FF001044FF00200DF -S1132F3812E04FF010044FF020000DE04FF0400471 -S1132F484FF0800008E04FF480744FF4007003E001 -S1132F584FF004044FF0080069B14FF40043C4F281 -S1132F680C031C6262B14FF40042C4F20C02D36A2F -S1132F781842FCD004E04FF40043C4F20C03186276 -S1132F8843F2A503C0F20003984710BD10B500F042 -S1132F980F00012804D000287FD003287DD83BE007 -S1132FA8A1F10201032978D8DFE801F00210070B28 -S1132FB84FF000004FF004040CE04FF00200044608 -S1132FC808E04FF003004FF0010403E04FF0010064 -S1132FD84FF003044FF001010A4642F61D73C0F294 -S1132FE80003984742F6B903C0F2000398474FF428 -S1132FF80043C4F20C035C6243F2A503C0F200036D -S1133008984742F67503C0F20003984742F6FD0359 -S1133018C0F20003984710BD022814BF02240024FC -S113302801F1FF31052938D8DFE801F0260310370C -S1133038371C4FF000004FF001010A4642F61D7399 -S1133048C0F2000398474FF0020217E04FF0010066 -S11330580146024642F61D73C0F2000398474FF03A -S113306801020BE040F60803C4F290334FF001026A -S11330781A604FF0030201E04FF000024FF40043DE -S1133088C4F20C03996A02FA04F24FF0030000FA3E -S113309804F421EA040414439C6210BD4FF4004371 -S11330A8C4F20C03DA6A40F26003C2F200031A8025 -S11330B8704700BF4FF4C043C4F2000300EBC000E4 -S11330C84FEA80001A5822F003021143195070473E -S11330D8F0B4DAB16BB14FF0010505FA01F500EB74 -S11330E8C0044FEA840404F1804404F5C044256113 -S11330F80CE04FF0010505FA01F500EBC0044FEAB6 -S1133108840404F1804404F5C0446561072915D892 -S113311800EBC0044FEA840404F1804404F5C0447D -S113312867684FEA81054FF00F0606FA05F627EAA5 -S1133138060602FA05F53543656016E000EBC0049F -S11331484FEA840404F1804404F5C044A7684FEAB4 -S11331588105A5F120054FF00F0606FA05F627EAC2 -S1133168060602FA05F53543A560DAB96BB14FF0E6 -S1133178010303FA01F100EBC0004FEA800000F1FB -S1133188804000F5C04001610CE04FF0010303FAF0 -S113319801F100EBC0004FEA800000F1804000F527 -S11331A8C0404161F0BC704730B504461546D1B9FA -S11331B84FF48043C4F2080398420AD04FF488437A -S11331C8C4F2080398421FD14FF4AA50C0F2160063 -S11331D803E04FF4A860C0F2140042F61553C0F29D -S11331E80003984701464FEA4111B1FBF5F5A5F1F3 -S11331F820054FEAC505236C13F0010F03D1636C56 -S113320813F0040FFBD1E56030BD00BF6FEA010382 -S113321803F0050341EA4301036C13F0010F03D1E2 -S1133228436C13F0020FFBD141607047C9B231B14E -S1133238436C002BFCD14FF00103036470474FF03B -S113324800030364704700BF70B504460D46036C61 -S113325813F0010F03D1636C13F0020FFBD14FF08D -S11332680A03636020464FF0010143F23526C0F299 -S11332780006B04722682969EB680B4369690B4368 -S113328822F01C02134323606968AA68204643F2AB -S1133298B113C0F2000398472B68636020464FF0CF -S11332A80001B04770BD00BF836813F0200FFBD046 -S11332B8C069C0B2704700BF4FF6D073CEF20F0397 -S11332C81A6902F03F0202709A6902F0F002DB699F -S11332D8C3F3031313434370704700BF1F2AC4BFCB -S11332E8203A04314FF0010303FA02F2072924D8E3 -S11332F8DFE801F004080C1014181C20036C1A43AE -S113330802647047436C1A4342647047836C1A43DF -S113331882647047C36C1A43C2647047036D1A43CE -S113332802657047436D1A4342657047836D1A43BB -S113333882657047C36D1A43C26570471F2AC4BFAC -S1133348203A04314FF0010303FA02F207292CD87A -S1133358DFE801F004090E13181D2227036C23EA81 -S1133368020202647047436C23EA02024264704713 -S1133378836C23EA020282647047C36C23EA020264 -S1133388C2647047036D23EA020202657047436D05 -S113339823EA020242657047836D23EA02028265CA -S11333A87047C36D23EA0202C26570474FF4204395 -S11333B8C4F208034FF0FF325A6240F26403C2F2C7 -S11333C800031A6802F101021A6070474FF0000303 -S11333D8036403654364436583648365C364C365A5 -S11333E8436E002BFCD1704730B50B293FD8DFE87A -S11333F801F03A060B0F14191E23282D31354FF00E -S113340803034FF0010432E04FF003031C462EE09F -S11334184FF003034FF0000429E04FF003034FF08B -S1133428020424E04FF027034FF000041FE04FF09C -S113343827034FF003041AE04FF001034FF003048D -S113344815E04FF001034FF0020410E04FF00103C0 -S11334581C460CE04FF001031C4608E04FF007033C -S11334684FF0030403E04FF00F034FF003043AB1A5 -S113347821461A4643F2E523C0F20003984730BDBB -S113348821461A4643F24533C0F20003984730BD3B -S113349810B504464FF40043C4F20C039A6A22F0B0 -S11334A803029A629A6A42F002029A629A6D42F0A0 -S11334B804029A659A6E22F440729A669A6E42F4ED -S11334C840729A664FF000038362636E002BFCD14E -S11334D84FF0FF3363624FF46143CEF200034FF0C1 -S11334E800621A604FF00103A36241F60B73636034 -S11334F84FF40043C4F20C034FF00002DA6720468D -S113350843F2D533C0F20003984740F2FF33A36077 -S11335184FF005032360636E002BFCD14FF48073D6 -S1133528C0F21C03E360636E002BFCD14FF001036F -S11335386362A36210BD00BF00B5034602783AB1C6 -S11335484268107840B102F101025A605DF804FB48 -S1133558436898475DF804FB4FF0FF305DF804FBBF -S113356830B50446C8B2A16849B12368626803F15A -S11335780105954208BF0020934238BFC854E36848 -S11335882BB121686268914201D221469847236889 -S113359803F10103236030BDF0B5154601290BD4AE -S11335A80E464FF00004C7B228463946FFF7D8FF45 -S11335B804F10104B442F7D1F0BD00BF00B510F026 -S11335C8100F07D100F4007000280CBF2020302011 -S11335D8FFF7E2FF5DF804FBA0F1410019288CBF56 -S11335E800200120704700BFA0F1610019288CBF9A -S11335F800200120704700BFA0F1300009288CBFCB -S113360800200120704700BF30B504460D46FFF77F -S1133618F3FF10B1A4F130000FE02046FFF7E4FFF8 -S113362810B1A4F1570008E02046FFF7D5FF10B108 -S1133638A4F1370001E04FF0FF30A842A8BF4FF0D3 -S1133648FF3030BDA0F10903042B04D9202814BF8E -S11336580020012070474FF00100704700F101017C -S113366810F0030F11D010F8012B002A23D010F00A -S1133678030F0AD010F8012B002A1CD010F0030FF6 -S113368803D010F8012B002A15D02DE970004FF053 -S113369801324FF0803350F8044BA4EB020525EABD -S11336A804051D4000D1F6E7A0F1040070BC10F831 -S11336B8012B002AFBD1A0EB010070472DE9F04F44 -S11336C887B007460C4603924FF00003036044F2A8 -S11336D8382BC0F2000B44F24823C0F200030293D3 -S11336E8CBE204F10104252903D123464FF0000657 -S11336F803E03846FFF734FFBFE2194613F8010B1D -S11337081C46A0F12002102A1CD8DFE802F0091B8D -S11337181B0C1B1B1B0F1B1B1B121B151B1B180035 -S113372846F04006E9E746F08006E6E746F4004638 -S1133738E3E746F02006E0E746F01006DDE746F446 -S11337480076DAE72A2807D0A0F13002D2B2092A93 -S113375813D94FF0000A20E0039B03F104000390FF -S1133768D3F800A0BAF1000FBCBFCAF1000A46F0B2 -S11337781006487801F102040FE04FF0000A0AEB42 -S11337888A0AA0F1300000EB4A0A13F8010B1C4620 -S1133798A0F13002D2B2092AF1D92AEAEA7A2E280B -S11337A82DD120782A2809D004F10104A0F130038E -S11337B8DBB2092B0CD94FF000081DE0039B03F181 -S11337C804020392D3F80080607804F1020410E044 -S11337D823464FF0000808EB8808A0F1300000EBFE -S11337E8480813F8010B1C46A0F13002D2B2092A8A -S11337F8F1D9B8F1000F04DB46F4807601E04FF00C -S1133808000868280CD12078682805D146F00806F5 -S1133818607804F1020403E004F1010446F00406AC -S113382878287AD8DFE810F037027900790079002F -S113383879007900790079007900790079007900B4 -S113384879007900790079007900790079007900A4 -S11338587900790079007900790079007900790094 -S11338687900790079007900790079007900790084 -S113387879008A0079007900790079007900790063 -S11338887900790079007900790079007900790064 -S11338987900790079007900790079007900790054 -S11338A87900790079007900790079007900790044 -S11338B87900790079007900790079007900790034 -S11338C87900790079007900790079007900790024 -S11338D87900790079007900F40079007900790099 -S11338E879007900790079007900790079009000ED -S11338F820017900790079007900200179007900A4 -S113390879007900AB000901E10079007900B7007A -S11339187900180179007900F60040F26803C2F2D0 -S113392800031D68002D00F0A881CDF8008003ABCA -S11339380193394632465346A8479EE138464FF02C -S11339482501FFF70DFE98E1039B03F1040203929E -S11339581D780AF1FF3A304651463A46FFF72EFEE3 -S113396838462946FFF7FCFD16F0100F00F0858154 -S11339784FF0200051463A46FFF70EFE7DE116F05F -S1133988080F039B03F1040203921B683A6814BFEF -S11339981A701A6071E1039B03F1040203921D6813 -S11339A81DB944F25825C0F2000526F400762846CD -S11339B8FFF754FE814616F4807F02D0C145A8BFA4 -S11339C8C146C9EB0A0A304651463A46FFF7F6FDA6 -S11339D8B9F1000FC8D0C84615F8011B3846FFF7DF -S11339E8BFFDB8F10108F7D1BEE7039B03F1040258 -S11339F803921B6806F08009B9F1000F14BF4FF059 -S1133A0823094FF0000946F480764FF008086AE06D -S1133A1846F4005616F0800F07D043F2780343F2B9 -S1133A285809782808BF994601E04FF0000916F4B0 -S1133A38807F20D026F400761DE006F08009B9F1D5 -S1133A48000F14BF4FF030094FF0000916F4807FBF -S1133A5811D026F400760EE016F4807F09D026F4FF -S1133A6800764FF0000906E046F480464FF000095E -S1133A7801E04FF0000916F4804F1ED0039B03F1B8 -S1133A88040203921B6816F0040F01D01BB203E072 -S1133A9816F0080F18BFDBB2002B04DAC3F10003D9 -S1133AA84FF02D091AE016F0200F15D106F0400248 -S1133AB8002A18BF4FF0200910E0039B03F1040209 -S1133AC803921B6816F0040F01D09BB206E016F0AF -S1133AD8080F03D0DBB201E04FF02B0916F4807F06 -S1133AE804D026F4007616F4807F01D14FF0010843 -S1133AF8A0F1580020286FD8DFE800F0196E6E6E28 -S1133B086E6E6E6E6E6E6E6E156E6E6E6E156E6E7B -S1133B186E6E6E11196E6E6E6E156E6E19000BBB9D -S1133B284FF000055DE053BB4FF0000559E0002B52 -S1133B3855D04FF0000506F40052DDF808E032B124 -S1133B4803F00F011EF8010004A9685405E003F00E -S1133B580F011BF8010004A9685405F101051B09AC -S1133B68EDD13EE04FF0000503F0070101F130010B -S1133B7804AAA95405F10105DB08F5D131E04FF099 -S1133B88000506F4004C4CF6CD4ECCF6CC4E6246FD -S1133B98A44614465CB105F00302032A07D107A81A -S1133BA842194FF02C0102F80C1C05F1010507AA73 -S1133BB85119AEFB03024FEAD20202EB8200A3EBD7 -S1133BC8400303F1300301F80C3C05F101051346E9 -S1133BD8002ADFD1644604E04FF0000501E04FF00D -S1133BE80005C5EB080828EAE878C8EB0A0AC5EB1B -S1133BF80A0AB9F1FF0F88BF0AF1FF3AB9F1000FB9 -S1133C0801D00AF1FF3A16F4007F06D13046514636 -S1133C183A46FFF7D3FC4FF0000AB9F1FF0F04D975 -S1133C28C9F307213846FFF79BFCB9F1000F04D00C -S1133C385FFA89F13846FFF793FC304651463A4615 -S1133C48FFF7BCFC4FF0300041463A46FFF7A4FCAE -S1133C58012D09D40DF11008454415F8011D384605 -S1133C68FFF77EFC4545F8D116F0100F05D04FF04C -S1133C78200051463A46FFF78FFC217800297FF44B -S1133C8830ADBB682BB13A6879688A423CBF0021E1 -S1133C989954386801E04FF0FF3007B0BDE8F08F61 -S1133CA810B504460B783BB1B0F1FF3F06D04B6822 -S1133CB803F1FF334B6001E08B689847204610BD41 -S1133CC82DE9F04F82468B4690469946099F4FF05E -S1133CD8FF3500E0354605F101065046FFF72CFC98 -S1133CE80446FFF7AFFC0028F4D1B4F1FF3F00F01D -S1133CF8848028F4C068002F3DDD18F0800F0FD0B1 -S1133D082B2C03D02D2C09D148F4806805F1020628 -S1133D185046FFF711FC044607F1FF37002F2ADD50 -S1133D28302C28D148F4007807F1FF3706F1010553 -S1133D385046FFF701FC0446002F16DD782801D011 -S1133D48582812D1B9F1000F02D0B9F1100F5CD183 -S1133D5828F4007807F1FF3706F102055046FFF70B -S1133D68EBFB04464FF010094FE0B9F1000F08BF10 -S1133D784FF0080949E0B9F1000F08BF4FF00A09EC -S1133D88002F10DC4FF0000515E048F4007807F127 -S1133D98FF3709FB050506F101065046FFF7CCFB82 -S1133DA8044617B907E04FF0000520464946FFF7D7 -S1133DB82BFC0028E9DA20465146FFF771FF18F476 -S1133DC8007F1DD018F0010F1CD1DBF8003003F17F -S1133DD80402CBF800201B6808F49062B2F5906FD7 -S1133DE808BF6D4218F0100F01D01D700AE018F0DA -S1133DF8080F14BF1D801D6004E04FF0FF3601E07A -S1133E086FF001063046BDE8F08F2E46B8E700BFD4 -S1133E182DE9F04F85B00190894604924FF0000BCC -S1133E28CDF808B04CF6CC4AC0F6CC4A4C4614F847 -S1133E38016B002E00F0CB81252E35D03046FFF7DC -S1133E4801FC08B918E02C4604F101052078FFF7B5 -S1133E58F9FB0028F7D101E00BF1010B0198FFF7FA -S1133E686BFB0546FFF7EEFB0028F5D128460199C0 -S1133E78FFF716FFA146D9E70198FFF75DFB054652 -S1133E88B04203D10BF1010BA146CFE70199FFF72B -S1133E9807FFB5F1FF3F40F09A81029A002A08BF54 -S1133EA84FF0FF32029292E199F801302A2B06BFB3 -S1133EB809F102044FF001084FF000084FF0000523 -S1133EC80CE0554500F3838105EB8505A6F1300622 -S1133ED816EB450500F17B8148F02008274604F1DC -S1133EE801043E78A1463046FFF786FB0028E8D156 -S1133EF808F02002002A08BF6FF000454C2E05D1B7 -S1133F087E7807F1020948F044080EE0682E0CD1C7 -S1133F187E78682E05D148F01008BE7807F10309A9 -S1133F2803E007F1020948F00808A6F12506532E14 -S1133F3800F24D81DFE816F054004B014B014B01B0 -S1133F484B014B014B014B014B014B014B014B0105 -S1133F584B014B014B014B014B014B014B014B01F5 -S1133F684B014B014B014B014B014B014B014B01E5 -S1133F784B014B014B014B014B014B014B014B01D5 -S1133F884B014B014B014B014B014B014B014B01C5 -S1133F984B014B014B014B014B014B014B012C01D4 -S1133FA84B014B014B014B014B014B014B014B01A5 -S1133FB84B014B016B009C004B014B014B014B0126 -S1133FC8A7004B014B014B014B01B200C900D400BF -S1133FD84B014B01DF004B0121014B014B012C012B -S1133FE80198FFF7A9FA0446252802D10BF1010B21 -S1133FF81CE70199FFF754FEB4F1FF3F40F0E78056 -S1134008029B002B08BF4FF0FF330293DFE008F058 -S11340182003002B08BF012518F0010405D1049BD7 -S113402803F1040204921E6801E04FF00006002D1B -S113403800F0CD80002D13DD0198FFF77DFAB0F173 -S1134048FF3F06D1029B002B08BF4FF0FF330293BA -S1134058BDE00CB906F8010B0BF1010B013DEBD1E6 -S1134068002C7FF4E3AE029B03F101030293DDE627 -S113407848F080020095019804A94FF00A03FFF75D -S11340881FFE04468EE048F080020095019804A9BA -S11340984FF00003FFF714FE044683E018F0010F05 -S11340A87FF4C4AE049B03F1040204921B6818F065 -S11340B8100F02D083F800B0B8E618F0080F14BF48 -S11340C8A3F800B0C3F800B0B0E648F08002009549 -S11340D8019804A94FF00803FFF7F2FD044661E0D4 -S11340E828F01E020095019804A94FF01003FFF769 -S11340F8E7FD044656E04FF0FF3404F1010401984B -S1134108FFF71AFA0646FFF79DFA0028F5D1B6F12B -S1134118FF3F2FD018F0010706D1049B03F10402D6 -S113412804921B68039302E04FF000020392002DEF -S113413811DC15E005F1FF351FB9039B03F8016B8A -S1134148039304F101040198FFF7F6F906463DB11B -S1134158B0F1FF3F04D03046FFF774FA0028E9D0E5 -S113416830460199FFF79CFDE7B94FF00002039B25 -S11341781A7017E04FF0FF3414E048F080020095FD -S1134188019804A94FF00A03FFF79AFD044609E0D1 -S113419848F080020095019804A94FF01003FFF736 -S11341A88FFD0446002C09DAB4F1FF3F0FD1029ABF -S11341B8002A08BF4FF0FF32029208E018F0010FFE -S11341C803D1029A02F101020292A3442EE6029854 -S11341D805B0BDE8F08F00BF30B504460D4600F0C9 -S11341E817F840F26C03C2F200031D6040F270033A -S11341F8C2F200031C601A461368002BFCD100F0BD -S113420809F840F26C03C2F20003186830BD00BF1D -S10B4218704700BF704700BFAE -S113422005000000000000008025000000000000E0 -S113423000000000000000003031323334353637DE -S11342403839616263646566303132333435363708 -S11342503839414243444546286E756C6C29000048 -S10B4260008000000048E801A1 -S90321716A +S1132000E4010020792100001126000011260000BF +S113201011260000112600001126000011260000E0 +S113202011260000112600001126000011260000D0 +S113203011260000112600001126000001260000D0 +S113204011260000112600001126000011260000B0 +S113205011260000112600001126000011260000A0 +S11320601126000011260000112600001126000090 +S11320701126000011260000112600001126000080 +S11320801126000011260000112600001126000070 +S11320901126000011260000112600001126000060 +S11320A0112600001126000011260000492F00000F +S10F20B01126000011260000EE11AA55B4 +S11320BC3049072291438D462F4930480A1A06D0DD +S11320CC0722914381F30988022282F314882C4855 +S11320DC2C492D4A00F039F82C482D492D4A00F092 +S11320EC34F82D482D492E4A00F02FF82D482E494E +S11320FC2E4A00F02AF82E482E492F4A00F025F8D3 +S113210C2E482F492F4A00F020F82F482F4900223F +S113211C00F026F82E482F49091A082903DB00225F +S113212C02600430016020482049884205D00268CE +S113213C043003B4904703BCF7E700208646EC4612 +S113214C00200021244A9047FEE7884207D0521A07 +S113215C05D0037801300B700131013AF9D1704785 +S113216C884202D002700130FAE770471B481C49C0 +S113217C01609DE7E4010020E4010020E40100205B +S113218C9C3000000000002008000020F02100001A +S113219CF02100008C3000009C3000000000002076 +S11321AC000000208C3000008C3000008C300000CB +S11321BC8C3000008C3000008C3000008C3000001F +S11321CC8C3000009C3000000800002064000020CB +S11321DC64000020E4000020A923000008ED00E0C6 +S10721EC00200000CB +S11321F070B584B01C4B0FCB8DE80F0001211B4838 +S11322001B4CA0470123042206210220194EB0478B +S11322100023012207210220B04701211648A047CC +S113222002211648164B9847164E01213046164B8C +S1132230984701213046A04700268DF80060134CD2 +S113224069462046124B98474FF4165231462046B1 +S1132250104B9847032363650423636305212046D9 +S11322600D4B984704B070BD8C30000000C20200D2 +S11322702D290000C92C00000023040003001200D3 +S1132280D12B000040151600B5270000004408407B +S1132290F92D0000892D0000D92D0000BFF34F8FC8 +S11322A00449CA6802F4E062034B1343CB60BFF3F2 +S11322B04F8FFEE700ED00E00400FA0538B51A4B35 +S11322C01B7883B9194BDB6A13F0040F2BD0174822 +S11322D0174B9847174B18700122134B1A700022A2 +S11322E0154B1A7038BD114BDB6A13F0040F1AD06A +S11322F0114C25780D480E4B98470E4A15446870CA +S113230023780133DBB2237012789A420BD1002276 +S1132310054B1A70074B5B78FF2B04D1054B9B7858 +S11323200BB9064B984738BD4A00002000440840CA +S1132330492E000008000020490000209D220000D2 +S113234008B50248024B984708BD00BF00A00840EA +S1132350FD2F000010B50F4B98470F4B1B68C31A95 +S1132360B3F5FA7F14D304460C4B1B783BB9012216 +S11323700A4B1A7000210A480A4B984706E00021CC +S1132380064B19700A460648064B9847024B1C60D8 +S113239010BD00BFF52500004C00002050000020B7 +S11323A000A00840812F000000B583B05B4B984724 +S11323B05B4B1B681B0E0ED15A4A136823F0700343 +S11323C01360594B1A6822F060421A601A6862F06E +S11323D060621A6001E0032B11D8534A136823F496 +S11323E0FC531360002302F50052203213600432C0 +S11323F0136014321360083213601832136001A89A +S11324004A4B98479DF80430012B10D19DF80530B4 +S113241023B9474A136843F0020313609DF805305B +S1132420012B04D8434A136843F001031360424B61 +S11324301A68424B9A4220D83E48036843F49043BA +S113244003603F490B681B0403F0FE430A680C68F1 +S1132450096804F4FE4401F07F012143120402F4EC +S1132460FE020A431343374A1360374B1A68374B4B +S11324701A60036823F4904303600122114600208C +S1132480334B9847334A136C43F00F031364536C74 +S11324906FEA13436FEA0343536400212E482F4C21 +S11324A0A04700212E48A04700212E48A047002124 +S11324B02D48A04700212D48A04700212C48A047C3 +S11324C000212C48A04700212B48A04700212B487D +S11324D0A04700212A48A04700212A48A0470021FC +S11324E02948A04700212948A04700212848A0479F +S11324F00123052209211846264CA0470221012068 +S1132500254B9847254B9847254B9847254B98478B +S1132510254D264CA847A047FCE700BFD526000060 +S1132520FC81E00F0CA00C4020600C40592E0000F0 +S113253040800C4044800C40F081E00FFFB98A4C8D +S1132540B481E00F34200040C881E00F2C400040EB +S11325507D2B000000800C40000304002D290000A6 +S1132560001304000033040000A202000002020071 +S11325700012020000220200003202000072020077 +S11325800082020000B2020000E2020000F2020037 +S113259000D20200C92C0000AD2C00004123000031 +S11325A0B1250000F121000055230000BD220000E8 +S11325B008B50A480A4B98470A4BA3FB0030800928 +S11325C00138094B5860E021084A82F823100022A0 +S11325D09A6007211960064B1A6008BD20000400A8 +S11325E0392A0000D34D621010E000E000ED00E055 +S11325F054000020014B1868704700BF54000020AD +S1132600024A136801331360704700BF540000206E +S1132610FEE700BF1D4BDB6A03F47053B3F5805F24 +S11326202FD0B3F5005F03D0B3F5006F06D102E0FD +S1132630174B18687047174B18687047134BDB68C3 +S113264003F4E063B3F5007F13D004D8ABB1B3F562 +S1132650807F10D013E0B3F5806F06D0B3F5A06F80 +S113266012D0B3F5407F0AD101E00B4870470B4804 +S113267070470B4870470B4870470B487047002061 +S113268070474FF4004070470848704700800C4082 +S11326900000002004000020406F4001809FD5000E +S11326A0C0D8A700C0CF6A0040420F00003FAB0172 +S11326B008B5054B9847054B5B6803F00F03D840FA +S11326C0034B186008BD00BF1526000000800C40B5 +S11326D058000020704700BF4FF40040704700BF0F +S11326E0014B1868704700BF000000200A4B5B686C +S11326F003F00702032A0CD8DFE802F002020707FE +S113270023F0070343F0010303E023F0070343F03E +S11327100303014A5360704700000C40104B5B6890 +S1132720104A024410498A420AD803F00702023AC6 +S1132730012A23F0070394BF43F0030343F001038A +S11327400A4A904208D803F00702023A012A23F009 +S1132750070398BF43F00203014A5360704700BF68 +S113276000000C40FFDB0BFFFF23F4000024F40007 +S113277008B50C4B9B6A400023FA00F000F00300FC +S1132780022806D0032807D0012809D1064B984710 +S113279008BD064B984708BD054B9847400808BD3F +S11327A0002008BD00800C40D9260000E12600006E +S11327B0B1260000C0F30313013B032B00F2A880F1 +S11327C0DFE803F0020E2271B1FA81F1C9B2514A75 +S11327D0936823F00F03C1F11F010B43936070470B +S11327E010B50C464C4B9847B4FA84F1C9B2494A27 +S11327F0536823F00F03C1F11F010B435360474B90 +S11328009847474B984710BD464B98421DD003F557 +S1132810F633984230D0A3F57F33984278D13D4BBC +S11328205B6D13F0010F04D13A4A136D13F0040FDA +S1132830FBD1B1FA81F3DBB236498A6E22F00F0282 +S1132840C3F11F0313438B667047324B5B6D13F068 +S1132850010F04D12F4A136D13F0040FFBD1B1FA09 +S113286081F2D2B22B498B6EC2F11F0223F0F00326 +S113287043EA02138B667047264B5B6D13F0010F1E +S113288004D1244A136D13F0040FFBD1B1FA81F281 +S1132890D2B220498B6EC2F10F0223F4407343EA93 +S11328A002238B667047204B984204D003F504330F +S11328B0984216D07047174B5B6D13F0010F04D18B +S11328C0144A136D13F0400FFBD1B1FA81F1C9B270 +S11328D0104A136F23F00303C1F11F010B43136765 +S11328E070470C4B5B6D13F0010F04D1094A136D53 +S11328F013F0400FFBD1B1FA81F1C9B2054A136F4D +S1132900C1F11F0123F0300343EA0111116770473D +S1132910704700BF00800C40ED260000B126000087 +S11329201D27000030140A004005140030B4C0F321 +S11329300323013B052B28D8DFE803F00821061602 +S113294003231024124A11E0124A1BE0C0F304309E +S1132950114A02E02B6D2342FCD102F1047200EB18 +S1132960C2008000016010E001240C4AC0F304306E +S11329700B4B5B6D13F0010FEFD1094DEAE7094AE8 +S113298000E0094AC0F30430E7E730BC704700BFF9 +S113299060800C4040800C4008800C4058800C4003 +S11329A000800C4044800C4078800C4000F00F0004 +S11329B00138032803D8DFE800F004162738002084 +S11329C070471C4BDB6A03F47053B3F5805F08D087 +S11329D0B3F5005F2BD0B3F5006F0CBF04200520C6 +S11329E0704703207047134B9B6A03F00303022BC9 +S11329F006D0032B06D0012B0CBF03200120704707 +S1132A0002207047062070470A4B9B6A03F00C03B0 +S1132A10022B06D0032B06D0012B0CBF0320012070 +S1132A207047022070470620704707207047022035 +S1132A30704700BF00800C4008B500F47810B0F572 +S1132A40402F4ED012D8B0F5802F31D004D820B307 +S1132A50B0F5003F24D07FE0B0F5002F2FD0B0F5C3 +S1132A60202F35D0B0F5C02F76D124E0B0F5A01FCB +S1132A7053D006D8B0F5602F3CD0B0F5901F48D0A5 +S1132A806AE0B0F5C01F5AD0B0F5D01F03D0B0F53E +S1132A90B01F61D14AE0324808BD324B984708BDA7 +S1132AA0304B9847304B9B6803F00F03D84008BD68 +S1132AB02E4B984708BD00202D4B984708BD002099 +S1132AC02B4B9847284B9B6E03F00F03D84008BD4F +S1132AD00020274B9847244B9B6EC3F30313D84025 +S1132AE008BD0020224B98471F4B9B6EC3F3012364 +S1132AF0D84008BD00201E4B98471B4A936EC3F371 +S1132B000123D840D36F03F007030133B0FBF3F084 +S1132B1008BD0120164B984708BD0120144B984767 +S1132B20114B1B6F03F00303D84008BD0120104B69 +S1132B3098470D4B1B6FC3F30113D84008BD0D48D4 +S1132B400D4B9847072802D0082802D006E0044815 +S1132B5008BD044B984708BD002008BD002008BDEF +S1132B60809FD5001526000000800C40B12600008F +S1132B707127000004001800AD29000008B50428DE +S1132B8021D8DFE800F00C09031106000423082013 +S1132B900CE01023202009E04023802006E04FF4BD +S1132BA080734FF4007001E00123022039B106491B +S1132BB00B6232B10A46D36A1842FCD001E0024BE0 +S1132BC01862024B984708BD00800C40992C000005 +S1132BD010B500F00F00012804D000284CD00328C1 +S1132BE021D910BD0239032946D8DFE801F00B02D0 +S1132BF005080120032407E00220044604E0032022 +S1132C00012401E000200424012211461B4B9847B3 +S1132C101B4B98471B4B5C621B4B98471B4B9847BD +S1132C201B4B984710BD02280CBF00240224013915 +S1132C30052921D8DFE801F016030A20201101221A +S1132C40114600200D4B984702230CE00122114647 +S1132C5010460A4B9847012305E001220D4B1A60E8 +S1132C60032300E000230748816A0322A24021EAEB +S1132C700202A3401343836210BD00BF7D2B0000FA +S1132C80ED26000000800C40992C0000B1260000C5 +S1132C901D27000008089043024BDA6A024B1A8091 +S1132CA0704700BF00800C405C00002000EBC000B7 +S1132CB0800000F1804000F5C040036823F0030366 +S1132CC019430160704700BFF0B51546AAB153B16E +S1132CD001248C4000EBC002920002F1804202F514 +S1132CE0C042146109E001248C4000EBC002920050 +S1132CF002F1804202F5C0425461072911D800EB69 +S1132D00C002920002F1804202F5C04257688C0072 +S1132D100F26A64027EA060605FA04F43443546055 +S1132D2016E0184CC600321804EB8202976801F1D1 +S1132D308042083A92004FF00F0E0EFA02FE27EA84 +S1132D400E0705FA02F23A43064404EB8604A26035 +S1132D50BDB95BB1012303FA01F100EBC0008000AF +S1132D6000F1804000F5C0400161F0BD012303FA89 +S1132D7001F100EBC000800000F1804000F5C0408C +S1132D804161F0BD0060004038B504461546084670 +S1132D9059B90D4B9C4205D003F580639C4212D176 +S1132DA00A4800E00A480B4B98474201B2FBF5F28F +S1132DB0203AD200236C13F0010F03D1636C13F09B +S1132DC0040FFBD1E26038BD0040084040151600F6 +S1132DD040051400392A0000CB435B0003F00A03CA +S1132DE01943036C13F0010F03D1436C13F0020F6A +S1132DF0FBD14160704700BF38B504460D46036CF3 +S1132E0013F0010F03D1636C13F0020FFBD10A23FB +S1132E106360636C002BFCD101232364226822F0DD +S1132E201C022B7B1A436B7B1A43AB7B134323603B +S1132E30AA6869682046034B98472B78636000238F +S1132E40236438BD892D0000836813F0200FFBD064 +S1132E50C069C0B2704700BF06490B6903F03F0365 +S1132E6003708B6903F0F002CB69C3F303131343BC +S1132E7043707047D0FF0FE01F2AC4BF203A0431CB +S1132E80012303FA02F2072924D8DFE801F0040839 +S1132E900C1014181C20036C1A4302647047436C12 +S1132EA01A4342647047836C1A4382647047C36C4C +S1132EB01A43C2647047036D1A4302657047436D39 +S1132EC01A4342657047836D1A4382657047C36D28 +S1132ED01A43C265704700BF1F2AC4BF203A043199 +S1132EE0012303FA02F207292CD8DFE801F00409D0 +S1132EF00E13181D2227036C23EA02020264704792 +S1132F00436C23EA020242647047836C23EA0202A0 +S1132F1082647047C36C23EA0202C2647047036D83 +S1132F2023EA020202657047436D23EA0202426506 +S1132F307047836D23EA020282657047C36D23EAFA +S1132F400202C265704700BF4FF0FF32034B5A6262 +S1132F50034A136801331360704700BF00A00840A0 +S1132F6060000020002303640365436443658364B5 +S1132F708365C364C365436E002BFCD1704700BFF7 +S1132F8010B50B292AD8DFE801F006090C0F121539 +S1132F90181B1E2124270F2303241FE003230124CD +S1132FA01CE003231C4619E00323002416E003233A +S1132FB0022413E02723002410E0272303240DE038 +S1132FC0012303240AE00123022407E001231C4611 +S1132FD004E001231C4601E00723032422B11A461E +S1132FE02146044B984710BD1A462146024B984788 +S1132FF010BD00BF792E0000D92E000010B5044684 +S11330001E4B9A6A22F003029A629A6A42F0020202 +S11330109A629A6D42F004029A659A6E22F44072A2 +S11330209A669A6E42F440729A6600238362636ED3 +S1133030002BFCD14FF0FF3363624FF00062104B62 +S11330401A600123A36241F60B73636000220B4BE9 +S1133050DA6720460B4B984740F2FF33A360052301 +S11330602360636E002BFCD1074BE360636E002B7F +S1133070FCD101236362A36210BD00BF00800C4039 +S10F308000E100E0652F000000011C00CE +S113308C0500000000000000802500000000000086 +S10B309C008000000048E80177 +S903217962 diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/ide/EFM32G880_crossworks.hzs b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/ide/EFM32G880_crossworks.hzs index 71a455d0..29a2fa97 100644 --- a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/ide/EFM32G880_crossworks.hzs +++ b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/ide/EFM32G880_crossworks.hzs @@ -1,19 +1,22 @@ - + + + + - + - + - + - + @@ -24,16 +27,16 @@ - + - + - + - + @@ -52,7 +55,7 @@ - + - + diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/ide/readme.txt b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/ide/readme.txt index a49767fb..a10a52ca 100644 --- a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/ide/readme.txt +++ b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/ide/readme.txt @@ -1,4 +1,4 @@ Integrated Development Environment ---------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains +Rowleys CrossWorks (version 3.7.6) was used as the editor during the development of this software program. This directory contains the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.elf b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.elf index f462d12b1bdea612c0abba3a931e72857b124523..d485c69840f2c4a62efeaf873c027398d5394349 100644 GIT binary patch literal 119012 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%0AgoFFLxM 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

T;&*UX8dM}FH^x!*?5nKAc^pq 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

pbsPPz1?*P8e(YL1n{|D-~(x(4RDE?DN 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 diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.map b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.map index d40ca116..4dd4ef3b 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.map +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.map @@ -1,9 +1,17 @@ -Archive member included because of file (symbol) +Archive member included to satisfy reference by file (symbol) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - (__do_debug_operation_mempoll) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) (__debug_io_lock) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o (__aeabi_i2d) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o (frexp) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) (fabs) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o (__aeabi_uldivmod) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o (__getc) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) (memcpy) Discarded input sections @@ -17,60 +25,33 @@ Discarded input sections .text 0x00000000 0x0 THUMB Debug/../../obj/main.o .data 0x00000000 0x0 THUMB Debug/../../obj/main.o .bss 0x00000000 0x0 THUMB Debug/../../obj/main.o - .text 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .data 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .text.__get_PSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_PSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_MSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_MSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_BASEPRI - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_BASEPRI - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_PRIMASK - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_PRIMASK - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_FAULTMASK - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_FAULTMASK - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_CONTROL - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_CONTROL - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__REV 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o - .text.__REV16 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o - .text.__REVSH 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o - .text.__RBIT 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXB - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXH - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXW - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__STREXB - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__STREXH - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__STREXW - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .data 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .bss 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .text.SystemInit - 0x00000000 0x130 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0x100 THUMB Debug/../../obj/system_stm32f10x.o .text.SystemCoreClockUpdate - 0x00000000 0xe0 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0x8c THUMB Debug/../../obj/system_stm32f10x.o .data.AHBPrescTable 0x00000000 0x10 THUMB Debug/../../obj/system_stm32f10x.o .data.SystemCoreClock 0x00000000 0x4 THUMB Debug/../../obj/system_stm32f10x.o + .debug_frame 0x00000000 0x40 THUMB Debug/../../obj/system_stm32f10x.o + .debug_info 0x00000000 0x492 THUMB Debug/../../obj/system_stm32f10x.o + .debug_abbrev 0x00000000 0x175 THUMB Debug/../../obj/system_stm32f10x.o + .debug_loc 0x00000000 0xe8 THUMB Debug/../../obj/system_stm32f10x.o + .debug_pubnames + 0x00000000 0x97 THUMB Debug/../../obj/system_stm32f10x.o + .debug_pubtypes + 0x00000000 0x10d THUMB Debug/../../obj/system_stm32f10x.o + .debug_aranges + 0x00000000 0x28 THUMB Debug/../../obj/system_stm32f10x.o + .debug_ranges 0x00000000 0x18 THUMB Debug/../../obj/system_stm32f10x.o + .debug_line 0x00000000 0x22d THUMB Debug/../../obj/system_stm32f10x.o + .debug_str 0x00000000 0x400 THUMB Debug/../../obj/system_stm32f10x.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/system_stm32f10x.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/system_stm32f10x.o .text 0x00000000 0x0 THUMB Debug/../../obj/usb_core.o .data 0x00000000 0x0 THUMB Debug/../../obj/usb_core.o .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_core.o @@ -82,96 +63,96 @@ Discarded input sections .text 0x00000000 0x0 THUMB Debug/../../obj/usb_int.o .data 0x00000000 0x0 THUMB Debug/../../obj/usb_int.o .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_int.o - .text.CTR_HP 0x00000000 0x9c THUMB Debug/../../obj/usb_int.o + .text.CTR_HP 0x00000000 0x88 THUMB Debug/../../obj/usb_int.o .text 0x00000000 0x0 THUMB Debug/../../obj/usb_mem.o .data 0x00000000 0x0 THUMB Debug/../../obj/usb_mem.o .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_mem.o .text 0x00000000 0x0 THUMB Debug/../../obj/usb_regs.o .data 0x00000000 0x0 THUMB Debug/../../obj/usb_regs.o .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_regs.o - .text.SetCNTR 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o - .text.GetCNTR 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o - .text.SetISTR 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o - .text.GetISTR 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o - .text.GetFNR 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o + .text.SetCNTR 0x00000000 0xc THUMB Debug/../../obj/usb_regs.o + .text.GetCNTR 0x00000000 0xc THUMB Debug/../../obj/usb_regs.o + .text.SetISTR 0x00000000 0xc THUMB Debug/../../obj/usb_regs.o + .text.GetISTR 0x00000000 0xc THUMB Debug/../../obj/usb_regs.o + .text.GetFNR 0x00000000 0xc THUMB Debug/../../obj/usb_regs.o .text.SetDADDR - 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0xc THUMB Debug/../../obj/usb_regs.o .text.GetDADDR - 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0xc THUMB Debug/../../obj/usb_regs.o .text.GetBTABLE - 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0xc THUMB Debug/../../obj/usb_regs.o .text.SetENDPOINT - 0x00000000 0x14 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o .text.GetENDPOINT - 0x00000000 0x14 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x10 THUMB Debug/../../obj/usb_regs.o .text.GetEPType - 0x00000000 0x18 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x14 THUMB Debug/../../obj/usb_regs.o .text.SetDouBleBuffEPStall - 0x00000000 0x3c THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x2c THUMB Debug/../../obj/usb_regs.o .text.GetEPTxStatus - 0x00000000 0x18 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x14 THUMB Debug/../../obj/usb_regs.o .text.GetEPRxStatus - 0x00000000 0x18 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x14 THUMB Debug/../../obj/usb_regs.o .text.SetEP_KIND - 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.ClearEP_KIND - 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.Set_Status_Out - 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.SetEPDoubleBuff - 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.ClearEPDoubleBuff - 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.GetTxStallStatus - 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o - .text.GetRxStallStatus - 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o - .text.ClearEP_CTR_RX 0x00000000 0x1c THUMB Debug/../../obj/usb_regs.o + .text.GetRxStallStatus + 0x00000000 0x1c THUMB Debug/../../obj/usb_regs.o + .text.ClearEP_CTR_RX + 0x00000000 0x18 THUMB Debug/../../obj/usb_regs.o .text.ClearEP_CTR_TX 0x00000000 0x1c THUMB Debug/../../obj/usb_regs.o .text.ToggleDTOG_RX - 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.ToggleDTOG_TX - 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.SetEPAddress - 0x00000000 0x2c THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o .text.GetEPAddress - 0x00000000 0x18 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x14 THUMB Debug/../../obj/usb_regs.o .text.SetEPCountRxReg - 0x00000000 0x38 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x2c THUMB Debug/../../obj/usb_regs.o .text.GetEPTxCount - 0x00000000 0x2c THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.SetEPDblBuffAddr - 0x00000000 0x4c THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x3c THUMB Debug/../../obj/usb_regs.o .text.SetEPDblBuf0Addr - 0x00000000 0x28 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.SetEPDblBuf1Addr - 0x00000000 0x2c THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o .text.GetEPDblBuf0Addr - 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x1c THUMB Debug/../../obj/usb_regs.o .text.GetEPDblBuf1Addr - 0x00000000 0x24 THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x1c THUMB Debug/../../obj/usb_regs.o .text.SetEPDblBuffCount - 0x00000000 0x10c THUMB Debug/../../obj/usb_regs.o + 0x00000000 0xbc THUMB Debug/../../obj/usb_regs.o .text.SetEPDblBuf0Count - 0x00000000 0x84 THUMB Debug/../../obj/usb_regs.o - .text.SetEPDblBuf1Count - 0x00000000 0x84 THUMB Debug/../../obj/usb_regs.o - .text.GetEPDblBuf0Count - 0x00000000 0x2c THUMB Debug/../../obj/usb_regs.o - .text.GetEPDblBuf1Count - 0x00000000 0x2c THUMB Debug/../../obj/usb_regs.o - .text.GetEPDblBufDir 0x00000000 0x60 THUMB Debug/../../obj/usb_regs.o + .text.SetEPDblBuf1Count + 0x00000000 0x60 THUMB Debug/../../obj/usb_regs.o + .text.GetEPDblBuf0Count + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o + .text.GetEPDblBuf1Count + 0x00000000 0x20 THUMB Debug/../../obj/usb_regs.o + .text.GetEPDblBufDir + 0x00000000 0x48 THUMB Debug/../../obj/usb_regs.o .text.FreeUserBuffer - 0x00000000 0x4c THUMB Debug/../../obj/usb_regs.o - .text.ToWord 0x00000000 0xc THUMB Debug/../../obj/usb_regs.o + 0x00000000 0x48 THUMB Debug/../../obj/usb_regs.o + .text.ToWord 0x00000000 0x8 THUMB Debug/../../obj/usb_regs.o .text 0x00000000 0x0 THUMB Debug/../../obj/usb_sil.o .data 0x00000000 0x0 THUMB Debug/../../obj/usb_sil.o .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_sil.o .text.USB_SIL_Write - 0x00000000 0x2c THUMB Debug/../../obj/usb_sil.o + 0x00000000 0x28 THUMB Debug/../../obj/usb_sil.o .text 0x00000000 0x0 THUMB Debug/../../obj/usb_desc.o .data 0x00000000 0x0 THUMB Debug/../../obj/usb_desc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_desc.o @@ -188,14 +169,14 @@ Discarded input sections .data 0x00000000 0x0 THUMB Debug/../../obj/usb_pwr.o .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_pwr.o .text.PowerOff - 0x00000000 0x30 THUMB Debug/../../obj/usb_pwr.o - .text.Suspend 0x00000000 0x28 THUMB Debug/../../obj/usb_pwr.o + 0x00000000 0x24 THUMB Debug/../../obj/usb_pwr.o + .text.Suspend 0x00000000 0x24 THUMB Debug/../../obj/usb_pwr.o .text.Resume_Init 0x00000000 0x20 THUMB Debug/../../obj/usb_pwr.o - .text.Resume 0x00000000 0x10c THUMB Debug/../../obj/usb_pwr.o - .bss.ResumeS 0x00000000 0x8 THUMB Debug/../../obj/usb_pwr.o + .text.Resume 0x00000000 0xac THUMB Debug/../../obj/usb_pwr.o + .bss.ResumeS 0x00000000 0x2 THUMB Debug/../../obj/usb_pwr.o .data.fSuspendEnabled - 0x00000000 0x4 THUMB Debug/../../obj/usb_pwr.o + 0x00000000 0x1 THUMB Debug/../../obj/usb_pwr.o .text 0x00000000 0x0 THUMB Debug/../../obj/cpu_comp.o .data 0x00000000 0x0 THUMB Debug/../../obj/cpu_comp.o .bss 0x00000000 0x0 THUMB Debug/../../obj/cpu_comp.o @@ -212,34 +193,58 @@ Discarded input sections .text 0x00000000 0x0 THUMB Debug/../../obj/can.o .data 0x00000000 0x0 THUMB Debug/../../obj/can.o .bss 0x00000000 0x0 THUMB Debug/../../obj/can.o + .debug_info 0x00000000 0x56 THUMB Debug/../../obj/can.o + .debug_abbrev 0x00000000 0x29 THUMB Debug/../../obj/can.o + .debug_pubnames + 0x00000000 0x12 THUMB Debug/../../obj/can.o + .debug_pubtypes + 0x00000000 0x91 THUMB Debug/../../obj/can.o + .debug_aranges + 0x00000000 0x18 THUMB Debug/../../obj/can.o + .debug_line 0x00000000 0x1d THUMB Debug/../../obj/can.o + .debug_str 0x00000000 0x251 THUMB Debug/../../obj/can.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/can.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/can.o .text 0x00000000 0x0 THUMB Debug/../../obj/cpu.o .data 0x00000000 0x0 THUMB Debug/../../obj/cpu.o .bss 0x00000000 0x0 THUMB Debug/../../obj/cpu.o - .text.CpuReset - 0x00000000 0xc THUMB Debug/../../obj/cpu.o .text 0x00000000 0x0 THUMB Debug/../../obj/flash.o .data 0x00000000 0x0 THUMB Debug/../../obj/flash.o .bss 0x00000000 0x0 THUMB Debug/../../obj/flash.o .text.FlashReinit - 0x00000000 0x1c THUMB Debug/../../obj/flash.o + 0x00000000 0x18 THUMB Debug/../../obj/flash.o .text 0x00000000 0x0 THUMB Debug/../../obj/nvm.o .data 0x00000000 0x0 THUMB Debug/../../obj/nvm.o .bss 0x00000000 0x0 THUMB Debug/../../obj/nvm.o .text.NvmReinit - 0x00000000 0xc THUMB Debug/../../obj/nvm.o + 0x00000000 0x8 THUMB Debug/../../obj/nvm.o .text 0x00000000 0x0 THUMB Debug/../../obj/timer.o .data 0x00000000 0x0 THUMB Debug/../../obj/timer.o .bss 0x00000000 0x0 THUMB Debug/../../obj/timer.o .text 0x00000000 0x0 THUMB Debug/../../obj/uart.o .data 0x00000000 0x0 THUMB Debug/../../obj/uart.o .bss 0x00000000 0x0 THUMB Debug/../../obj/uart.o + .debug_info 0x00000000 0x56 THUMB Debug/../../obj/uart.o + .debug_abbrev 0x00000000 0x29 THUMB Debug/../../obj/uart.o + .debug_pubnames + 0x00000000 0x12 THUMB Debug/../../obj/uart.o + .debug_pubtypes + 0x00000000 0x91 THUMB Debug/../../obj/uart.o + .debug_aranges + 0x00000000 0x18 THUMB Debug/../../obj/uart.o + .debug_line 0x00000000 0x1d THUMB Debug/../../obj/uart.o + .debug_str 0x00000000 0x252 THUMB Debug/../../obj/uart.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/uart.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/uart.o .text 0x00000000 0x0 THUMB Debug/../../obj/usb.o .data 0x00000000 0x0 THUMB Debug/../../obj/usb.o .bss 0x00000000 0x0 THUMB Debug/../../obj/usb.o .text.UsbEnterLowPowerMode - 0x00000000 0x18 THUMB Debug/../../obj/usb.o + 0x00000000 0x14 THUMB Debug/../../obj/usb.o .text.UsbLeaveLowPowerMode - 0x00000000 0x38 THUMB Debug/../../obj/usb.o + 0x00000000 0x24 THUMB Debug/../../obj/usb.o .text 0x00000000 0x0 THUMB Debug/../../obj/assert.o .data 0x00000000 0x0 THUMB Debug/../../obj/assert.o .bss 0x00000000 0x0 THUMB Debug/../../obj/assert.o @@ -258,163 +263,1844 @@ Discarded input sections .text 0x00000000 0x0 THUMB Debug/../../obj/xcp.o .data 0x00000000 0x0 THUMB Debug/../../obj/xcp.o .bss 0x00000000 0x0 THUMB Debug/../../obj/xcp.o - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio - 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.__do_nvdebug_operation - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_abort - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fopen - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgets - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputs - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fread - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fwrite - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fseek - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ftell - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_gets - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fflush - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fclose - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetc - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_putchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_puts - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rewind - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_clearerr - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_feof - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ferror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getch - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_time - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vprintf - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfprintf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ungetc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fsetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_freopen - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_perror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_remove - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rename - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpfile - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpnam - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getenv - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_system - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfscanf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vscanf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_exit - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_enabled - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_kbhit - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ioctl - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_runtime_error - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_break - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getargs - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_geti - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getu - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getl - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getul - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getd - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getll - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getull - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_filesize - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_accept - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_bind - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_listen - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_shutdown - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_socket - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htons - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htonl - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_loadsymbols - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_unloadsymbols - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.getenv_buffer - 0x00000000 0x400 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.__dbgEnabled - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.tmpnam_buffer - 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__errno - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss.libc.errno - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int + 0x00000000 0x5e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp + 0x00000000 0x49c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long + 0x00000000 0x600 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp + 0x00000000 0x4b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long + 0x00000000 0x730 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp + 0x00000000 0x580 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_compute_wide_metrics + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_print_wide_string + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_wchar + 0x00000000 0x698 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp_wchar + 0x00000000 0x4e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_wchar + 0x00000000 0x6a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp_wchar + 0x00000000 0x4e8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_wchar + 0x00000000 0x7d8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp_wchar + 0x00000000 0x604 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.str1.4 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.ipow10 + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x3f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x160 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x36e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__ungetc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long_long + 0x00000000 0x1c8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_real + 0x00000000 0x274 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int_cc + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_cc + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long_cc + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_cc + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long_cc + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x38c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x14b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x2dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int32_to_float32 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int32_to_float64 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint32_to_float32 + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint32_to_float64 + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int64_to_float32 + 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int64_to_float64 + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint64_to_float32 + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint64_to_float64 + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_int32 + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_int64 + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_uint32 + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_uint64 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_int32 + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_int64 + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_uint32 + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_uint64 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_float64 + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_float32 + 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_add + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_mul + 0x00000000 0xd4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_div + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_cmp + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfrcmple + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpeq + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmplt + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmple + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpgt + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpge + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_add + 0x00000000 0x294 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_mul + 0x00000000 0x16c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_div + 0x00000000 0x214 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmp + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdrcmple + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpeq + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmple + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpge + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmplt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpgt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_signbit + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_signbit + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isinf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isinf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isnan + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isnan + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isfinite + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isfinite + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isnormal + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isnormal + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_classify + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_classify + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float32_infinity + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float32_nan + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float64_infinity + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float64_nan + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .debug_frame 0x00000000 0x440 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_eval + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_evalf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_eval + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_evalf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincos + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincosf + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2 + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanf + 0x00000000 0x170 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2f + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ceil + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cos + 0x00000000 0x1b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosf + 0x00000000 0x258 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.expf + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.coshf + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fma + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmax + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaxf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmin + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fminf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.frexp + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ldexp + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosh + 0x00000000 0xf4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log + 0x00000000 0x240 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanh + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.logf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10f + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modf + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modff + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.pow + 0x00000000 0x118 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2 + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.powf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2f + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbn + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbnf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sin + 0x00000000 0x1b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinf + 0x00000000 0x224 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinh + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinhf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tan + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanf + 0x00000000 0x150 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanh + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanhf + 0x00000000 0x130 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrt + 0x00000000 0x110 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacos + 0x00000000 0x2c0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosh + 0x00000000 0x108 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinh + 0x00000000 0x114 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypot + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asin + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acos + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrtf + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacosf + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acoshf + 0x00000000 0xc8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypotf + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosf + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrtf + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrt + 0x00000000 0x1cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.floor + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmodf + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmod + 0x00000000 0x154 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_a + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_b + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.atanf_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_b + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_frame 0x00000000 0xb80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_info 0x00000000 0x847 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_abbrev 0x00000000 0xdb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_aranges + 0x00000000 0x228 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_ranges 0x00000000 0x750 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_line 0x00000000 0x345 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_str 0x00000000 0x364 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabsf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ceilf + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.floorf + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ldexpf + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.frexpf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .debug_frame 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_umod + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_asr + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_div + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_lsl + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_lsr + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_mod + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_udivmod + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__aeabi_ldivmod + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_cmp + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_ucmp + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.muldi3 + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int32_umod + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int32_div + 0x00000000 0x310 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .rodata.libc.__aeabi_idiv + 0x00000000 0xa C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .rodata.libc.__aeabi_uidiv + 0x00000000 0x46 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int32_mod + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__aeabi_uidivmod + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__aeabi_idivmod + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.ctl_count_leading_zeros_32 + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.ctl_count_leading_zeros_16 + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_shi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_si + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_sqi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_uhi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_uqi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .debug_frame 0x00000000 0x164 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__stdin_ungetc + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.twodigit + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc_fn + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_isctype + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_toupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_tolower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_iswctype + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towlower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_ch + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_str + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigits_leading_blank + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit_optional_zero_suppress + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_wctomb + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_wctomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_mbtowc + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__getc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pow10 + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__putc + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_print_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pre_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__xlltoa + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__xltoa + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__xtoa + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.abs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atexit + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc._execute_at_exit_fns + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.bsearch + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towupper + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_toupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towlower + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_is_exact_power_of_two + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_round_power_of_two + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_count_leading_zeroes + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_ilogb + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_alloc + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_heap_init + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_isctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_isctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalpha + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.islower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__digit + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isspace + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ispunct + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalnum + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isprint + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isgraph + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iscntrl + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isblank + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.toupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.islower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ispunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iscntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.toupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.div + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__aeabi_errno_addr + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_free + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoul + 0x00000000 0xdc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoull + 0x00000000 0x148 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fopen + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfprintf + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfscanf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fscanf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetpos + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ftell + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fileno + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.feof + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ferror + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fstat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gets + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.itoa + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.labs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ldiv + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_init + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_alloc + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_free + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_realloc + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.llabs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.lldiv + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.lltoa + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_global_locale_category + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_locale_category + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localeconv_l + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localeconv + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_compare_locale_name + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ltoa + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.malloc + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getBuf + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fflush + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fseek + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fsetpos + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.rewind + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.output_fn + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputs + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fwrite + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc_fn + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fread + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgets + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.calloc + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.free + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setBuf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fclose + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setbuf + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setvbuf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.realloc + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memccpy + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mempcpy + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memchr + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memcmp + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memmove + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.printf + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.puts + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.qsort + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.rand + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.scanf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.snprintf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.sprintf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.srand + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.sscanf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcasecmp + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcasestr + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_decode_error + 0x00000000 0x78 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strerror + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_register_error_decoder + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_encode_locale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strchr + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcoll + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strdup + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_encode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_decode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime_r + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncasecmp + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncasestr + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncat + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strlcat + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strnchr + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncmp + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncpy + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strlcpy + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strnlen + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strndup + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strnstr + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strpbrk + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strrchr + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strsep + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strstr + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtod + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtof + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtok + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtok_r + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtol + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atoi + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atof + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atol + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtoll + 0x00000000 0xd0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atoll + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtoul + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtoull + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strxfrm + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localtime_r + 0x00000000 0x14c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.difftime + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.checktm + 0x00000000 0x1dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mktime + 0x00000000 0x180 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctime + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctime_r + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gmtime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gmtime_r + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localtime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gettimeofday + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.settimeofday + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.time + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ulltoa + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ultoa + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.utoa + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vprintf + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vscanf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vsnprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vsprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vsscanf + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcschr + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscmp + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscpy + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcslen + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsdup + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsncat + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsnchr + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsncmp + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsncpy + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsnlen + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsnstr + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcspbrk + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrchr + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcssep + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsstr + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstok + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstok_r + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemcpy + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemccpy + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmempcpy + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemmove + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemcmp + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemchr + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemset + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tmpnam + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.duplocale + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.freelocale + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_find_locale + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_set_locale + 0x00000000 0x9c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setlocale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.newlocale + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__user_find_locale + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsinit + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen_l + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen_l + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_wide_char + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_formatted + 0x00000000 0x4cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime_l + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb_l + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc_l + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs_l + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs_l + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs_l + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs_l + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_init_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_mb_max + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_1 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_2 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_3 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_4 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_5 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_6 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_7 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_8 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_9 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_10 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_11 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_13 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_14 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_15 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_16 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1250 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1251 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1252 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1253 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1254 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1255 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1256 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1257 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1258 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans_l + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans_l + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalpha + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswprint + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswblank + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswcntrl + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswspace + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalnum + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswlower + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswupper + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswgraph + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswpunct + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswctype + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_isctype + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1258_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_singleton_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_11 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_13 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_14 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_15 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_16 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1253_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctrans_name_list + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_abbrev_month_names + 0x00000000 0x31 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1253 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_4 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_period + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_singleton + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_6 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_3_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcsrtombs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.power + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_9 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_strtok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EDOM + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_singleton_map + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_9_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_singleton_map + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_singleton_map + 0x00000000 0xe0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_range + 0x00000000 0x470 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_singleton_map + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__RAL_global_locale + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_10_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_4_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_fileno + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_get_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_uc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_singleton + 0x00000000 0xac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_range + 0x00000000 0x534 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_14_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1256_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_11_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_singleton_map + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_range + 0x00000000 0x2d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_singleton + 0x00000000 0x52 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unknown_string + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.str1.4 + 0x00000000 0xf1 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_empty_string + 0x00000000 0x1 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_plus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1250 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_8_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range2_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1251_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.streams + 0x00000000 0xc0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_singleton_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1255 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_singleton_map + 0x00000000 0x134 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_tmpnam_template + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1258 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_ascii_ctype_mask + 0x00000000 0xd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_singleton_map + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_1_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_singleton_map + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stdout + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod2 + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wctomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__ungot + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.stdin + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_3 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_7_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.atexitfn_count + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_singleton_map + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_day_names + 0x00000000 0x3a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_abbrev_day_names + 0x00000000 0x1d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbsrtowcs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_2_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_singleton_map + 0x00000000 0xec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_singleton_map + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_space + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.heap + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_am_pm_indicator + 0x00000000 0x7 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_range_map + 0x00000000 0x5a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_buf + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcrtomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_data + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_range_map + 0x00000000 0x72 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_mon_lengths + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_asctime_buf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_range_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_1 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_2 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.errno_val + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrlen_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_5 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_singleton_map + 0x00000000 0x124 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_7 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1254_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_year_lengths + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_singleton_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_ascii + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1250_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1252 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1254 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_13_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1256 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1257 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_singleton_map + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_month_names + 0x00000000 0x57 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_date_time_format + 0x00000000 0xf C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_range_map + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EILSEQ + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_minus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_lconv_data + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1255_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_lc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctype_class_name_list + 0x00000000 0x4a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1251 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_range + 0x00000000 0x46c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_1_range_map + 0x00000000 0x6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_singleton_map + 0x00000000 0x168 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_singleton + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_set_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_5_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_format_extender + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_singleton_map + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcstok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stderr + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_range_map + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_15_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_time_format + 0x00000000 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__RAL_rand_next + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_date_format + 0x00000000 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_error_decoder_head + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__atexitfns + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_singleton_map + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_6_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_singleton_map + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_utf8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1257_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_comma + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc._tm 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_16_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range2_map + 0x00000000 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1252_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_ERANGE + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_range_map + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_ascii_ctype_map + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_11_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_frame 0x00000000 0x3d6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_info 0x00000000 0x2374 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_abbrev 0x00000000 0x179 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_aranges + 0x00000000 0xfa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_ranges 0x00000000 0xf90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_line 0x00000000 0xb26 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_str 0x00000000 0x203c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.longjmp + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memcpy + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memcpy_fast + 0x00000000 0x3ac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memcpy_small + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memset + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.__aeabi_memset + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.setjmp + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strcpy + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strcmp + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strlen + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .debug_frame 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) Memory Configuration @@ -426,7 +2112,8 @@ FLASH 0x08000000 0x00006000 xr Linker script and memory map - 0x08002b3c __do_debug_operation = __do_debug_operation_mempoll + 0x00000000 __vfprintf = __vfprintf_float_long_long + 0x00000000 __vfscanf = __vfscanf_float_long_long_cc 0x20000000 __SRAM_segment_start__ = 0x20000000 0x20002000 __SRAM_segment_end__ = 0x20002000 0x08000000 __FLASH_segment_start__ = 0x8000000 @@ -459,457 +2146,443 @@ Linker script and memory map 0x00000001 . = ASSERT (((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <= __FLASH_segment_end__)), error: .vectors is too large to fit in FLASH memory segment) 0x08000150 __init_load_start__ = ALIGN (__vectors_end__, 0x4) -.init 0x08000150 0x104 +.init 0x08000150 0x108 0x08000150 __init_start__ = . *(.init .init.*) - .init 0x08000150 0x104 THUMB Debug/../../obj/cstart.o + .init 0x08000150 0x108 THUMB Debug/../../obj/cstart.o 0x08000150 reset_handler - 0x080001ce exit - 0x08000254 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x08000254 __init_load_end__ = __init_end__ + 0x080001d2 exit + 0x08000258 __init_end__ = (__init_start__ + SIZEOF (.init)) + 0x08000258 __init_load_end__ = __init_end__ 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment) - 0x08000254 __text_load_start__ = ALIGN (__init_end__, 0x4) + 0x08000258 __text_load_start__ = ALIGN (__init_end__, 0x4) -.text 0x08000254 0x2928 - 0x08000254 __text_start__ = . +.text 0x08000258 0x20c4 + 0x08000258 __text_start__ = . *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs + .glue_7 0x08000258 0x0 linker stubs + .glue_7t 0x08000258 0x0 linker stubs .text.UsbConnectHook - 0x08000254 0x5c THUMB Debug/../../obj/hooks.o - 0x08000254 UsbConnectHook + 0x08000258 0x44 THUMB Debug/../../obj/hooks.o + 0x08000258 UsbConnectHook .text.CpuUserProgramStartHook - 0x080002b0 0x10 THUMB Debug/../../obj/hooks.o - 0x080002b0 CpuUserProgramStartHook - .text.main 0x080002c0 0x168 THUMB Debug/../../obj/main.o - 0x080002c0 main + 0x0800029c 0x10 THUMB Debug/../../obj/hooks.o + 0x0800029c CpuUserProgramStartHook + .text.main 0x080002ac 0x138 THUMB Debug/../../obj/main.o + 0x080002ac main .text.Standard_GetConfiguration - 0x08000428 0x3c THUMB Debug/../../obj/usb_core.o - 0x08000428 Standard_GetConfiguration + 0x080003e4 0x28 THUMB Debug/../../obj/usb_core.o + 0x080003e4 Standard_GetConfiguration .text.Standard_GetInterface - 0x08000464 0x3c THUMB Debug/../../obj/usb_core.o - 0x08000464 Standard_GetInterface + 0x0800040c 0x28 THUMB Debug/../../obj/usb_core.o + 0x0800040c Standard_GetInterface .text.Standard_GetStatus - 0x080004a0 0x104 THUMB Debug/../../obj/usb_core.o - 0x080004a0 Standard_GetStatus + 0x08000434 0xb0 THUMB Debug/../../obj/usb_core.o + 0x08000434 Standard_GetStatus .text.DataStageIn - 0x080005a4 0xe8 THUMB Debug/../../obj/usb_core.o + 0x080004e4 0xb0 THUMB Debug/../../obj/usb_core.o .text.Standard_SetConfiguration - 0x0800068c 0x54 THUMB Debug/../../obj/usb_core.o - 0x0800068c Standard_SetConfiguration + 0x08000594 0x40 THUMB Debug/../../obj/usb_core.o + 0x08000594 Standard_SetConfiguration .text.Standard_SetInterface - 0x080006e0 0x64 THUMB Debug/../../obj/usb_core.o - 0x080006e0 Standard_SetInterface + 0x080005d4 0x54 THUMB Debug/../../obj/usb_core.o + 0x080005d4 Standard_SetInterface .text.Standard_ClearFeature - 0x08000744 0x134 THUMB Debug/../../obj/usb_core.o - 0x08000744 Standard_ClearFeature + 0x08000628 0x11c THUMB Debug/../../obj/usb_core.o + 0x08000628 Standard_ClearFeature .text.Standard_SetEndPointFeature - 0x08000878 0xc8 THUMB Debug/../../obj/usb_core.o - 0x08000878 Standard_SetEndPointFeature + 0x08000744 0xb8 THUMB Debug/../../obj/usb_core.o + 0x08000744 Standard_SetEndPointFeature .text.Standard_SetDeviceFeature - 0x08000940 0x2c THUMB Debug/../../obj/usb_core.o - 0x08000940 Standard_SetDeviceFeature + 0x080007fc 0x24 THUMB Debug/../../obj/usb_core.o + 0x080007fc Standard_SetDeviceFeature .text.Standard_GetDescriptorData - 0x0800096c 0x24 THUMB Debug/../../obj/usb_core.o - 0x0800096c Standard_GetDescriptorData + 0x08000820 0x1c THUMB Debug/../../obj/usb_core.o + 0x08000820 Standard_GetDescriptorData .text.Post0_Process - 0x08000990 0x50 THUMB Debug/../../obj/usb_core.o - 0x08000990 Post0_Process - .text.Out0_Process - 0x080009e0 0x130 THUMB Debug/../../obj/usb_core.o - 0x080009e0 Out0_Process + 0x0800083c 0x40 THUMB Debug/../../obj/usb_core.o + 0x0800083c Post0_Process .text.Setup0_Process - 0x08000b10 0x3dc THUMB Debug/../../obj/usb_core.o - 0x08000b10 Setup0_Process + 0x0800087c 0x338 THUMB Debug/../../obj/usb_core.o + 0x0800087c Setup0_Process + .text.Out0_Process + 0x08000bb4 0xf4 THUMB Debug/../../obj/usb_core.o + 0x08000bb4 Out0_Process .text.SetDeviceAddress - 0x08000eec 0x50 THUMB Debug/../../obj/usb_core.o - 0x08000eec SetDeviceAddress + 0x08000ca8 0x44 THUMB Debug/../../obj/usb_core.o + 0x08000ca8 SetDeviceAddress .text.In0_Process - 0x08000f3c 0x7c THUMB Debug/../../obj/usb_core.o - 0x08000f3c In0_Process + 0x08000cec 0x64 THUMB Debug/../../obj/usb_core.o + 0x08000cec In0_Process .text.NOP_Process - 0x08000fb8 0x4 THUMB Debug/../../obj/usb_core.o - 0x08000fb8 NOP_Process + 0x08000d50 0x4 THUMB Debug/../../obj/usb_core.o + 0x08000d50 NOP_Process .text.USB_Init - 0x08000fbc 0x48 THUMB Debug/../../obj/usb_init.o - 0x08000fbc USB_Init - .text.CTR_LP 0x08001004 0x2d8 THUMB Debug/../../obj/usb_int.o - 0x08001004 CTR_LP + 0x08000d54 0x38 THUMB Debug/../../obj/usb_init.o + 0x08000d54 USB_Init + .text.CTR_LP 0x08000d8c 0x278 THUMB Debug/../../obj/usb_int.o + 0x08000d8c CTR_LP .text.UserToPMABufferCopy - 0x080012dc 0x38 THUMB Debug/../../obj/usb_mem.o - 0x080012dc UserToPMABufferCopy + 0x08001004 0x34 THUMB Debug/../../obj/usb_mem.o + 0x08001004 UserToPMABufferCopy .text.PMAToUserBufferCopy - 0x08001314 0x30 THUMB Debug/../../obj/usb_mem.o - 0x08001314 PMAToUserBufferCopy + 0x08001038 0x20 THUMB Debug/../../obj/usb_mem.o + 0x08001038 PMAToUserBufferCopy .text.SetBTABLE - 0x08001344 0x14 THUMB Debug/../../obj/usb_regs.o - 0x08001344 SetBTABLE + 0x08001058 0x10 THUMB Debug/../../obj/usb_regs.o + 0x08001058 SetBTABLE .text.SetEPType - 0x08001358 0x20 THUMB Debug/../../obj/usb_regs.o - 0x08001358 SetEPType + 0x08001068 0x1c THUMB Debug/../../obj/usb_regs.o + 0x08001068 SetEPType .text.SetEPTxStatus - 0x08001378 0x3c THUMB Debug/../../obj/usb_regs.o - 0x08001378 SetEPTxStatus + 0x08001084 0x3c THUMB Debug/../../obj/usb_regs.o + 0x08001084 SetEPTxStatus .text.SetEPRxStatus - 0x080013b4 0x3c THUMB Debug/../../obj/usb_regs.o - 0x080013b4 SetEPRxStatus + 0x080010c0 0x3c THUMB Debug/../../obj/usb_regs.o + 0x080010c0 SetEPRxStatus .text.SetEPTxValid - 0x080013f0 0x28 THUMB Debug/../../obj/usb_regs.o - 0x080013f0 SetEPTxValid + 0x080010fc 0x28 THUMB Debug/../../obj/usb_regs.o + 0x080010fc SetEPTxValid .text.SetEPRxValid - 0x08001418 0x28 THUMB Debug/../../obj/usb_regs.o - 0x08001418 SetEPRxValid + 0x08001124 0x28 THUMB Debug/../../obj/usb_regs.o + 0x08001124 SetEPRxValid .text.Clear_Status_Out - 0x08001440 0x24 THUMB Debug/../../obj/usb_regs.o - 0x08001440 Clear_Status_Out + 0x0800114c 0x20 THUMB Debug/../../obj/usb_regs.o + 0x0800114c Clear_Status_Out .text.ClearDTOG_RX - 0x08001464 0x2c THUMB Debug/../../obj/usb_regs.o - 0x08001464 ClearDTOG_RX + 0x0800116c 0x28 THUMB Debug/../../obj/usb_regs.o + 0x0800116c ClearDTOG_RX .text.ClearDTOG_TX - 0x08001490 0x2c THUMB Debug/../../obj/usb_regs.o - 0x08001490 ClearDTOG_TX + 0x08001194 0x28 THUMB Debug/../../obj/usb_regs.o + 0x08001194 ClearDTOG_TX .text.SetEPTxAddr - 0x080014bc 0x28 THUMB Debug/../../obj/usb_regs.o - 0x080014bc SetEPTxAddr + 0x080011bc 0x20 THUMB Debug/../../obj/usb_regs.o + 0x080011bc SetEPTxAddr .text.SetEPRxAddr - 0x080014e4 0x2c THUMB Debug/../../obj/usb_regs.o - 0x080014e4 SetEPRxAddr + 0x080011dc 0x20 THUMB Debug/../../obj/usb_regs.o + 0x080011dc SetEPRxAddr .text.GetEPTxAddr - 0x08001510 0x24 THUMB Debug/../../obj/usb_regs.o - 0x08001510 GetEPTxAddr + 0x080011fc 0x1c THUMB Debug/../../obj/usb_regs.o + 0x080011fc GetEPTxAddr .text.GetEPRxAddr - 0x08001534 0x24 THUMB Debug/../../obj/usb_regs.o - 0x08001534 GetEPRxAddr + 0x08001218 0x1c THUMB Debug/../../obj/usb_regs.o + 0x08001218 GetEPRxAddr .text.SetEPTxCount - 0x08001558 0x28 THUMB Debug/../../obj/usb_regs.o - 0x08001558 SetEPTxCount + 0x08001234 0x1c THUMB Debug/../../obj/usb_regs.o + 0x08001234 SetEPTxCount .text.SetEPRxCount - 0x08001580 0x58 THUMB Debug/../../obj/usb_regs.o - 0x08001580 SetEPRxCount + 0x08001250 0x44 THUMB Debug/../../obj/usb_regs.o + 0x08001250 SetEPRxCount .text.GetEPRxCount - 0x080015d8 0x2c THUMB Debug/../../obj/usb_regs.o - 0x080015d8 GetEPRxCount + 0x08001294 0x20 THUMB Debug/../../obj/usb_regs.o + 0x08001294 GetEPRxCount .text.ByteSwap - 0x08001604 0x10 THUMB Debug/../../obj/usb_regs.o - 0x08001604 ByteSwap + 0x080012b4 0xc THUMB Debug/../../obj/usb_regs.o + 0x080012b4 ByteSwap .text.USB_SIL_Init - 0x08001614 0x28 THUMB Debug/../../obj/usb_sil.o - 0x08001614 USB_SIL_Init + 0x080012c0 0x20 THUMB Debug/../../obj/usb_sil.o + 0x080012c0 USB_SIL_Init .text.USB_SIL_Read - 0x0800163c 0x24 THUMB Debug/../../obj/usb_sil.o - 0x0800163c USB_SIL_Read + 0x080012e0 0x24 THUMB Debug/../../obj/usb_sil.o + 0x080012e0 USB_SIL_Read .text.EP1_IN_Callback - 0x08001660 0xc THUMB Debug/../../obj/usb_endp.o - 0x08001660 EP1_IN_Callback + 0x08001304 0x8 THUMB Debug/../../obj/usb_endp.o + 0x08001304 EP1_IN_Callback .text.EP1_OUT_Callback - 0x0800166c 0xc THUMB Debug/../../obj/usb_endp.o - 0x0800166c EP1_OUT_Callback + 0x0800130c 0x8 THUMB Debug/../../obj/usb_endp.o + 0x0800130c EP1_OUT_Callback .text.SOF_Callback - 0x08001678 0x18 THUMB Debug/../../obj/usb_endp.o - 0x08001678 SOF_Callback + 0x08001314 0x14 THUMB Debug/../../obj/usb_endp.o + 0x08001314 SOF_Callback .text.USB_Istr - 0x08001690 0xac THUMB Debug/../../obj/usb_istr.o - 0x08001690 USB_Istr + 0x08001328 0x80 THUMB Debug/../../obj/usb_istr.o + 0x08001328 USB_Istr .text.Bulk_SetConfiguration - 0x0800173c 0x1c THUMB Debug/../../obj/usb_prop.o - 0x0800173c Bulk_SetConfiguration + 0x080013a8 0x18 THUMB Debug/../../obj/usb_prop.o + 0x080013a8 Bulk_SetConfiguration .text.Bulk_SetDeviceAddress - 0x08001758 0x10 THUMB Debug/../../obj/usb_prop.o - 0x08001758 Bulk_SetDeviceAddress + 0x080013c0 0xc THUMB Debug/../../obj/usb_prop.o + 0x080013c0 Bulk_SetDeviceAddress .text.Bulk_Status_In - 0x08001768 0x4 THUMB Debug/../../obj/usb_prop.o - 0x08001768 Bulk_Status_In + 0x080013cc 0x4 THUMB Debug/../../obj/usb_prop.o + 0x080013cc Bulk_Status_In .text.Bulk_Status_Out - 0x0800176c 0x4 THUMB Debug/../../obj/usb_prop.o - 0x0800176c Bulk_Status_Out + 0x080013d0 0x4 THUMB Debug/../../obj/usb_prop.o + 0x080013d0 Bulk_Status_Out .text.Bulk_Data_Setup - 0x08001770 0x58 THUMB Debug/../../obj/usb_prop.o - 0x08001770 Bulk_Data_Setup + 0x080013d4 0x48 THUMB Debug/../../obj/usb_prop.o + 0x080013d4 Bulk_Data_Setup .text.Bulk_NoData_Setup - 0x080017c8 0x8 THUMB Debug/../../obj/usb_prop.o - 0x080017c8 Bulk_NoData_Setup + 0x0800141c 0x4 THUMB Debug/../../obj/usb_prop.o + 0x0800141c Bulk_NoData_Setup .text.Bulk_Get_Interface_Setting - 0x080017d0 0x18 THUMB Debug/../../obj/usb_prop.o - 0x080017d0 Bulk_Get_Interface_Setting - .text.Bulk_GetBulkDescriptor - 0x080017e8 0x14 THUMB Debug/../../obj/usb_prop.o - 0x080017e8 Bulk_GetBulkDescriptor - .text.Bulk_GetStringDescriptor - 0x080017fc 0x30 THUMB Debug/../../obj/usb_prop.o - 0x080017fc Bulk_GetStringDescriptor - .text.Bulk_GetConfigDescriptor - 0x0800182c 0x14 THUMB Debug/../../obj/usb_prop.o - 0x0800182c Bulk_GetConfigDescriptor - .text.Bulk_GetDeviceDescriptor - 0x08001840 0x14 THUMB Debug/../../obj/usb_prop.o - 0x08001840 Bulk_GetDeviceDescriptor - .text.Bulk_Reset - 0x08001854 0xd4 THUMB Debug/../../obj/usb_prop.o - 0x08001854 Bulk_Reset + 0x08001420 0x10 THUMB Debug/../../obj/usb_prop.o + 0x08001420 Bulk_Get_Interface_Setting .text.Bulk_Init - 0x08001928 0x2c THUMB Debug/../../obj/usb_prop.o - 0x08001928 Bulk_Init - .text.PowerOn 0x08001954 0x3c THUMB Debug/../../obj/usb_pwr.o - 0x08001954 PowerOn + 0x08001430 0x24 THUMB Debug/../../obj/usb_prop.o + 0x08001430 Bulk_Init + .text.Bulk_Reset + 0x08001454 0xac THUMB Debug/../../obj/usb_prop.o + 0x08001454 Bulk_Reset + .text.Bulk_GetDeviceDescriptor + 0x08001500 0x10 THUMB Debug/../../obj/usb_prop.o + 0x08001500 Bulk_GetDeviceDescriptor + .text.Bulk_GetConfigDescriptor + 0x08001510 0x10 THUMB Debug/../../obj/usb_prop.o + 0x08001510 Bulk_GetConfigDescriptor + .text.Bulk_GetStringDescriptor + 0x08001520 0x24 THUMB Debug/../../obj/usb_prop.o + 0x08001520 Bulk_GetStringDescriptor + .text.Bulk_GetBulkDescriptor + 0x08001544 0x10 THUMB Debug/../../obj/usb_prop.o + 0x08001544 Bulk_GetBulkDescriptor + .text.PowerOn 0x08001554 0x30 THUMB Debug/../../obj/usb_pwr.o + 0x08001554 PowerOn .text.CpuIrqDisable - 0x08001990 0x4 THUMB Debug/../../obj/cpu_comp.o - 0x08001990 CpuIrqDisable + 0x08001584 0x4 THUMB Debug/../../obj/cpu_comp.o + 0x08001584 CpuIrqDisable .text.CpuIrqEnable - 0x08001994 0x4 THUMB Debug/../../obj/cpu_comp.o - 0x08001994 CpuIrqEnable + 0x08001588 0x4 THUMB Debug/../../obj/cpu_comp.o + 0x08001588 CpuIrqEnable .text.UnusedISR - 0x08001998 0x18 THUMB Debug/../../obj/vectors.o - 0x08001998 UnusedISR - .text.CpuInit 0x080019b0 0xc THUMB Debug/../../obj/cpu.o - 0x080019b0 CpuInit + 0x0800158c 0x10 THUMB Debug/../../obj/vectors.o + 0x0800158c UnusedISR + .text.CpuInit 0x0800159c 0x8 THUMB Debug/../../obj/cpu.o + 0x0800159c CpuInit .text.CpuStartUserProgram - 0x080019bc 0x3c THUMB Debug/../../obj/cpu.o - 0x080019bc CpuStartUserProgram + 0x080015a4 0x38 THUMB Debug/../../obj/cpu.o + 0x080015a4 CpuStartUserProgram .text.CpuMemCopy - 0x080019f8 0x28 THUMB Debug/../../obj/cpu.o - 0x080019f8 CpuMemCopy - .text.FlashUnlock - 0x08001a20 0x24 THUMB Debug/../../obj/flash.o + 0x080015dc 0x24 THUMB Debug/../../obj/cpu.o + 0x080015dc CpuMemCopy .text.FlashLock - 0x08001a44 0x14 THUMB Debug/../../obj/flash.o + 0x08001600 0x10 THUMB Debug/../../obj/flash.o .text.FlashGetSector - 0x08001a58 0x48 THUMB Debug/../../obj/flash.o + 0x08001610 0x38 THUMB Debug/../../obj/flash.o .text.FlashWriteBlock - 0x08001aa0 0xc8 THUMB Debug/../../obj/flash.o - .text.FlashGetSectorBaseAddr - 0x08001b68 0x40 THUMB Debug/../../obj/flash.o - .text.FlashInitBlock - 0x08001ba8 0x38 THUMB Debug/../../obj/flash.o + 0x08001648 0xb4 THUMB Debug/../../obj/flash.o .text.FlashSwitchBlock - 0x08001be0 0x50 THUMB Debug/../../obj/flash.o + 0x080016fc 0x58 THUMB Debug/../../obj/flash.o .text.FlashAddToBlock - 0x08001c30 0x94 THUMB Debug/../../obj/flash.o + 0x08001754 0x84 THUMB Debug/../../obj/flash.o .text.FlashInit - 0x08001cc4 0x1c THUMB Debug/../../obj/flash.o - 0x08001cc4 FlashInit + 0x080017d8 0x18 THUMB Debug/../../obj/flash.o + 0x080017d8 FlashInit .text.FlashWrite - 0x08001ce0 0x58 THUMB Debug/../../obj/flash.o - 0x08001ce0 FlashWrite + 0x080017f0 0x50 THUMB Debug/../../obj/flash.o + 0x080017f0 FlashWrite .text.FlashErase - 0x08001d38 0x140 THUMB Debug/../../obj/flash.o - 0x08001d38 FlashErase + 0x08001840 0x148 THUMB Debug/../../obj/flash.o + 0x08001840 FlashErase .text.FlashWriteChecksum - 0x08001e78 0x5c THUMB Debug/../../obj/flash.o - 0x08001e78 FlashWriteChecksum + 0x08001988 0x50 THUMB Debug/../../obj/flash.o + 0x08001988 FlashWriteChecksum .text.FlashVerifyChecksum - 0x08001ed4 0x68 THUMB Debug/../../obj/flash.o - 0x08001ed4 FlashVerifyChecksum + 0x080019d8 0x50 THUMB Debug/../../obj/flash.o + 0x080019d8 FlashVerifyChecksum .text.FlashDone - 0x08001f3c 0x58 THUMB Debug/../../obj/flash.o - 0x08001f3c FlashDone + 0x08001a28 0x3c THUMB Debug/../../obj/flash.o + 0x08001a28 FlashDone .text.FlashGetUserProgBaseAddress - 0x08001f94 0xc THUMB Debug/../../obj/flash.o - 0x08001f94 FlashGetUserProgBaseAddress - .text.NvmInit 0x08001fa0 0xc THUMB Debug/../../obj/nvm.o - 0x08001fa0 NvmInit + 0x08001a64 0x8 THUMB Debug/../../obj/flash.o + 0x08001a64 FlashGetUserProgBaseAddress + .text.NvmInit 0x08001a6c 0x8 THUMB Debug/../../obj/nvm.o + 0x08001a6c NvmInit .text.NvmWrite - 0x08001fac 0xc THUMB Debug/../../obj/nvm.o - 0x08001fac NvmWrite + 0x08001a74 0x8 THUMB Debug/../../obj/nvm.o + 0x08001a74 NvmWrite .text.NvmErase - 0x08001fb8 0xc THUMB Debug/../../obj/nvm.o - 0x08001fb8 NvmErase + 0x08001a7c 0x8 THUMB Debug/../../obj/nvm.o + 0x08001a7c NvmErase .text.NvmVerifyChecksum - 0x08001fc4 0xc THUMB Debug/../../obj/nvm.o - 0x08001fc4 NvmVerifyChecksum + 0x08001a84 0x8 THUMB Debug/../../obj/nvm.o + 0x08001a84 NvmVerifyChecksum .text.NvmGetUserProgBaseAddress - 0x08001fd0 0xc THUMB Debug/../../obj/nvm.o - 0x08001fd0 NvmGetUserProgBaseAddress - .text.NvmDone 0x08001fdc 0x18 THUMB Debug/../../obj/nvm.o - 0x08001fdc NvmDone - .text.TimerReset - 0x08001ff4 0x10 THUMB Debug/../../obj/timer.o - 0x08001ff4 TimerReset + 0x08001a8c 0x8 THUMB Debug/../../obj/nvm.o + 0x08001a8c NvmGetUserProgBaseAddress + .text.NvmDone 0x08001a94 0x14 THUMB Debug/../../obj/nvm.o + 0x08001a94 NvmDone .text.TimerInit - 0x08002004 0x34 THUMB Debug/../../obj/timer.o - 0x08002004 TimerInit + 0x08001aa8 0x24 THUMB Debug/../../obj/timer.o + 0x08001aa8 TimerInit + .text.TimerReset + 0x08001acc 0xc THUMB Debug/../../obj/timer.o + 0x08001acc TimerReset .text.TimerUpdate - 0x08002038 0x24 THUMB Debug/../../obj/timer.o - 0x08002038 TimerUpdate + 0x08001ad8 0x1c THUMB Debug/../../obj/timer.o + 0x08001ad8 TimerUpdate .text.TimerGet - 0x0800205c 0x14 THUMB Debug/../../obj/timer.o - 0x0800205c TimerGet + 0x08001af4 0x10 THUMB Debug/../../obj/timer.o + 0x08001af4 TimerGet .text.IntToUnicode - 0x08002070 0x3c THUMB Debug/../../obj/usb.o - .text.UsbFifoMgrCreate - 0x080020ac 0x40 THUMB Debug/../../obj/usb.o + 0x08001b04 0x30 THUMB Debug/../../obj/usb.o .text.UsbFifoMgrWrite - 0x080020ec 0x84 THUMB Debug/../../obj/usb.o - .text.UsbTransmitByte - 0x08002170 0x18 THUMB Debug/../../obj/usb.o + 0x08001b34 0x6c THUMB Debug/../../obj/usb.o .text.UsbFifoMgrRead - 0x08002188 0x80 THUMB Debug/../../obj/usb.o - .text.UsbReceiveByte - 0x08002208 0x18 THUMB Debug/../../obj/usb.o - .text.UsbInit 0x08002220 0x74 THUMB Debug/../../obj/usb.o - 0x08002220 UsbInit - .text.UsbFree 0x08002294 0x10 THUMB Debug/../../obj/usb.o - 0x08002294 UsbFree + 0x08001ba0 0x64 THUMB Debug/../../obj/usb.o + .text.UsbInit 0x08001c04 0x60 THUMB Debug/../../obj/usb.o + 0x08001c04 UsbInit + .text.UsbFree 0x08001c64 0xc THUMB Debug/../../obj/usb.o + 0x08001c64 UsbFree .text.UsbTransmitPacket - 0x080022a4 0x70 THUMB Debug/../../obj/usb.o - 0x080022a4 UsbTransmitPacket + 0x08001c70 0x68 THUMB Debug/../../obj/usb.o + 0x08001c70 UsbTransmitPacket .text.UsbReceivePacket - 0x08002314 0xc8 THUMB Debug/../../obj/usb.o - 0x08002314 UsbReceivePacket + 0x08001cd8 0x8c THUMB Debug/../../obj/usb.o + 0x08001cd8 UsbReceivePacket .text.UsbTransmitPipeBulkIN - 0x080023dc 0xbc THUMB Debug/../../obj/usb.o - 0x080023dc UsbTransmitPipeBulkIN + 0x08001d64 0x98 THUMB Debug/../../obj/usb.o + 0x08001d64 UsbTransmitPipeBulkIN .text.UsbReceivePipeBulkOUT - 0x08002498 0x60 THUMB Debug/../../obj/usb.o - 0x08002498 UsbReceivePipeBulkOUT + 0x08001dfc 0x54 THUMB Debug/../../obj/usb.o + 0x08001dfc UsbReceivePipeBulkOUT .text.UsbGetSerialNum - 0x080024f8 0x44 THUMB Debug/../../obj/usb.o - 0x080024f8 UsbGetSerialNum + 0x08001e50 0x38 THUMB Debug/../../obj/usb.o + 0x08001e50 UsbGetSerialNum .text.AssertFailure - 0x0800253c 0x8 THUMB Debug/../../obj/assert.o - 0x0800253c AssertFailure + 0x08001e88 0x8 THUMB Debug/../../obj/assert.o + 0x08001e88 AssertFailure .text.BackDoorCheck - 0x08002544 0x44 THUMB Debug/../../obj/backdoor.o - 0x08002544 BackDoorCheck + 0x08001e90 0x38 THUMB Debug/../../obj/backdoor.o + 0x08001e90 BackDoorCheck .text.BackDoorInit - 0x08002588 0x28 THUMB Debug/../../obj/backdoor.o - 0x08002588 BackDoorInit + 0x08001ec8 0x20 THUMB Debug/../../obj/backdoor.o + 0x08001ec8 BackDoorInit .text.BootInit - 0x080025b0 0x20 THUMB Debug/../../obj/boot.o - 0x080025b0 BootInit + 0x08001ee8 0x1c THUMB Debug/../../obj/boot.o + 0x08001ee8 BootInit .text.BootTask - 0x080025d0 0x18 THUMB Debug/../../obj/boot.o - 0x080025d0 BootTask - .text.ComInit 0x080025e8 0x1c THUMB Debug/../../obj/com.o - 0x080025e8 ComInit - .text.ComTask 0x08002604 0x30 THUMB Debug/../../obj/com.o - 0x08002604 ComTask - .text.ComFree 0x08002634 0xc THUMB Debug/../../obj/com.o - 0x08002634 ComFree + 0x08001f04 0x14 THUMB Debug/../../obj/boot.o + 0x08001f04 BootTask + .text.ComInit 0x08001f18 0x18 THUMB Debug/../../obj/com.o + 0x08001f18 ComInit + .text.ComTask 0x08001f30 0x24 THUMB Debug/../../obj/com.o + 0x08001f30 ComTask + .text.ComFree 0x08001f54 0x8 THUMB Debug/../../obj/com.o + 0x08001f54 ComFree .text.ComTransmitPacket - 0x08002640 0x20 THUMB Debug/../../obj/com.o - 0x08002640 ComTransmitPacket + 0x08001f5c 0x1c THUMB Debug/../../obj/com.o + 0x08001f5c ComTransmitPacket .text.ComGetActiveInterfaceMaxRxLen - 0x08002660 0x2c THUMB Debug/../../obj/com.o - 0x08002660 ComGetActiveInterfaceMaxRxLen + 0x08001f78 0x18 THUMB Debug/../../obj/com.o + 0x08001f78 ComGetActiveInterfaceMaxRxLen .text.ComGetActiveInterfaceMaxTxLen - 0x0800268c 0x2c THUMB Debug/../../obj/com.o - 0x0800268c ComGetActiveInterfaceMaxTxLen + 0x08001f90 0x18 THUMB Debug/../../obj/com.o + 0x08001f90 ComGetActiveInterfaceMaxTxLen .text.ComIsConnected - 0x080026b8 0xc THUMB Debug/../../obj/com.o - 0x080026b8 ComIsConnected - .text.CopInit 0x080026c4 0x4 THUMB Debug/../../obj/cop.o - 0x080026c4 CopInit + 0x08001fa8 0x8 THUMB Debug/../../obj/com.o + 0x08001fa8 ComIsConnected + .text.CopInit 0x08001fb0 0x4 THUMB Debug/../../obj/cop.o + 0x08001fb0 CopInit .text.CopService - 0x080026c8 0x4 THUMB Debug/../../obj/cop.o - 0x080026c8 CopService - .text.XcpProtectResources - 0x080026cc 0x10 THUMB Debug/../../obj/xcp.o + 0x08001fb4 0x4 THUMB Debug/../../obj/cop.o + 0x08001fb4 CopService .text.XcpSetCtoError - 0x080026dc 0x1c THUMB Debug/../../obj/xcp.o - .text.XcpInit 0x080026f8 0x20 THUMB Debug/../../obj/xcp.o - 0x080026f8 XcpInit + 0x08001fb8 0x14 THUMB Debug/../../obj/xcp.o + .text.XcpInit 0x08001fcc 0x1c THUMB Debug/../../obj/xcp.o + 0x08001fcc XcpInit .text.XcpIsConnected - 0x08002718 0x14 THUMB Debug/../../obj/xcp.o - 0x08002718 XcpIsConnected + 0x08001fe8 0x10 THUMB Debug/../../obj/xcp.o + 0x08001fe8 XcpIsConnected .text.XcpPacketTransmitted - 0x0800272c 0x14 THUMB Debug/../../obj/xcp.o - 0x0800272c XcpPacketTransmitted + 0x08001ff8 0x10 THUMB Debug/../../obj/xcp.o + 0x08001ff8 XcpPacketTransmitted .text.XcpPacketReceived - 0x08002740 0x3fc THUMB Debug/../../obj/xcp.o - 0x08002740 XcpPacketReceived - .text.libdebugio.__do_debug_operation_mempoll - 0x08002b3c 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x08002b3c __do_debug_operation_mempoll - .text.libc.__debug_io_lock - 0x08002b74 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08002b74 __debug_io_lock - .text.libc.__debug_io_unlock - 0x08002b78 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08002b78 __debug_io_unlock - 0x08002b7c __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x08002b7c __text_load_end__ = __text_end__ + 0x08002008 0x314 THUMB Debug/../../obj/xcp.o + 0x08002008 XcpPacketReceived + 0x0800231c __text_end__ = (__text_start__ + SIZEOF (.text)) + 0x0800231c __text_load_end__ = __text_end__ .vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0 linker stubs .v4_bx 0x00000000 0x0 .v4_bx 0x00000000 0x0 linker stubs - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) - 0x08002b7c __dtors_load_start__ = ALIGN (__text_end__, 0x4) -.dtors 0x08002b7c 0x0 - 0x08002b7c __dtors_start__ = . +.iplt 0x00000000 0x0 + .iplt 0x00000000 0x0 THUMB Debug/../../obj/hooks.o + 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) + 0x0800231c __dtors_load_start__ = ALIGN (__text_end__, 0x4) + +.dtors 0x0800231c 0x0 + 0x0800231c __dtors_start__ = . *(SORT(.dtors.*)) *(.dtors) *(.fini_array .fini_array.*) - 0x08002b7c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x08002b7c __dtors_load_end__ = __dtors_end__ + 0x0800231c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) + 0x0800231c __dtors_load_end__ = __dtors_end__ 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment) - 0x08002b7c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) + 0x0800231c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) -.ctors 0x08002b7c 0x0 - 0x08002b7c __ctors_start__ = . +.ctors 0x0800231c 0x0 + 0x0800231c __ctors_start__ = . *(SORT(.ctors.*)) *(.ctors) *(.init_array .init_array.*) - 0x08002b7c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x08002b7c __ctors_load_end__ = __ctors_end__ + 0x0800231c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) + 0x0800231c __ctors_load_end__ = __ctors_end__ 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment) - 0x08002b7c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) + 0x0800231c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) -.rodata 0x08002b7c 0x2c4 - 0x08002b7c __rodata_start__ = . +.rodata 0x0800231c 0x2c4 + 0x0800231c __rodata_start__ = . *(.rodata .rodata.* .gnu.linkonce.r.*) .rodata.str1.4 - 0x08002b7c 0x63 THUMB Debug/../../obj/main.o - 0x64 (size before relaxing) - *fill* 0x08002bdf 0x1 00 + 0x0800231c 0x63 THUMB Debug/../../obj/main.o + *fill* 0x0800237f 0x1 .rodata.Bulk_DeviceDescriptor - 0x08002be0 0x14 THUMB Debug/../../obj/usb_desc.o - 0x08002be0 Bulk_DeviceDescriptor + 0x08002380 0x12 THUMB Debug/../../obj/usb_desc.o + 0x08002380 Bulk_DeviceDescriptor + *fill* 0x08002392 0x2 .rodata.Bulk_StringLangID - 0x08002bf4 0x4 THUMB Debug/../../obj/usb_desc.o - 0x08002bf4 Bulk_StringLangID + 0x08002394 0x4 THUMB Debug/../../obj/usb_desc.o + 0x08002394 Bulk_StringLangID .rodata.Bulk_StringProduct - 0x08002bf8 0x28 THUMB Debug/../../obj/usb_desc.o - 0x08002bf8 Bulk_StringProduct + 0x08002398 0x26 THUMB Debug/../../obj/usb_desc.o + 0x08002398 Bulk_StringProduct + *fill* 0x080023be 0x2 .rodata.Bulk_ConfigDescriptor - 0x08002c20 0x20 THUMB Debug/../../obj/usb_desc.o - 0x08002c20 Bulk_ConfigDescriptor + 0x080023c0 0x20 THUMB Debug/../../obj/usb_desc.o + 0x080023c0 Bulk_ConfigDescriptor .rodata.Bulk_StringVendor - 0x08002c40 0x1c THUMB Debug/../../obj/usb_desc.o - 0x08002c40 Bulk_StringVendor + 0x080023e0 0x1a THUMB Debug/../../obj/usb_desc.o + 0x080023e0 Bulk_StringVendor + *fill* 0x080023fa 0x2 .rodata.Bulk_StringInterface - 0x08002c5c 0x2c THUMB Debug/../../obj/usb_desc.o - 0x08002c5c Bulk_StringInterface + 0x080023fc 0x2c THUMB Debug/../../obj/usb_desc.o + 0x080023fc Bulk_StringInterface .rodata.str1.4 - 0x08002c88 0x90 THUMB Debug/../../obj/vectors.o + 0x08002428 0x90 THUMB Debug/../../obj/vectors.o .rodata.flashLayout - 0x08002d18 0x9c THUMB Debug/../../obj/flash.o + 0x080024b8 0x9c THUMB Debug/../../obj/flash.o .rodata.str1.4 - 0x08002db4 0x84 THUMB Debug/../../obj/usb.o + 0x08002554 0x84 THUMB Debug/../../obj/usb.o + 0x81 (size before relaxing) .rodata.xcpStationId - 0x08002e38 0x8 THUMB Debug/../../obj/xcp.o - 0x08002e40 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x08002e40 __rodata_load_end__ = __rodata_end__ + 0x080025d8 0x8 THUMB Debug/../../obj/xcp.o + 0x080025e0 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) + 0x080025e0 __rodata_load_end__ = __rodata_end__ + +.rel.dyn 0x08000000 0x0 + .rel.iplt 0x08000000 0x0 THUMB Debug/../../obj/hooks.o 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment) - 0x08002e40 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) + 0x080025e0 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) -.ARM.exidx 0x08002e40 0x0 - 0x08002e40 __ARM.exidx_start__ = . - 0x08002e40 __exidx_start = __ARM.exidx_start__ +.ARM.exidx 0x080025e0 0x0 + 0x080025e0 __ARM.exidx_start__ = . + 0x080025e0 __exidx_start = __ARM.exidx_start__ *(.ARM.exidx .ARM.exidx.*) - 0x08002e40 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) - 0x08002e40 __exidx_end = __ARM.exidx_end__ - 0x08002e40 __ARM.exidx_load_end__ = __ARM.exidx_end__ + 0x080025e0 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) + 0x080025e0 __exidx_end = __ARM.exidx_end__ + 0x080025e0 __ARM.exidx_load_end__ = __ARM.exidx_end__ 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment) - 0x08002e40 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) + 0x080025e0 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) -.fast 0x20000000 0x0 load address 0x08002e40 +.fast 0x20000000 0x0 load address 0x080025e0 0x20000000 __fast_start__ = . *(.fast .fast.*) 0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x08002e40 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) + 0x080025e0 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) 0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment) .fast_run 0x20000000 0x0 @@ -918,9 +2591,9 @@ Linker script and memory map 0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) 0x20000000 __fast_run_load_end__ = __fast_run_end__ 0x00000001 . = ASSERT (((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <= __SRAM_segment_end__)), error: .fast_run is too large to fit in SRAM memory segment) - 0x08002e40 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) + 0x080025e0 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) -.data 0x20000000 0xf0 load address 0x08002e40 +.data 0x20000000 0xeb load address 0x080025e0 0x20000000 __data_start__ = . *(.data .data.* .gnu.linkonce.d.*) .data.Bulk_StringSerial @@ -951,178 +2624,176 @@ Linker script and memory map 0x200000c0 0x28 THUMB Debug/../../obj/usb_prop.o 0x200000c0 String_Descriptor .data.Device_Table - 0x200000e8 0x4 THUMB Debug/../../obj/usb_prop.o + 0x200000e8 0x2 THUMB Debug/../../obj/usb_prop.o 0x200000e8 Device_Table .data.comActiveInterface - 0x200000ec 0x4 THUMB Debug/../../obj/com.o - 0x200000f0 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x08002f30 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + 0x200000ea 0x1 THUMB Debug/../../obj/com.o + 0x200000eb __data_end__ = (__data_start__ + SIZEOF (.data)) + 0x080026cb __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + +.igot.plt 0x00000000 0x0 + .igot.plt 0x00000000 0x0 THUMB Debug/../../obj/hooks.o 0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment) -.data_run 0x20000000 0xf0 load address 0x08002e40 +.data_run 0x20000000 0xeb load address 0x080025e0 0x20000000 __data_run_start__ = . - 0x200000f0 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) - *fill* 0x20000000 0xf0 00 - 0x200000f0 __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) - 0x200000f0 __data_run_load_end__ = __data_run_end__ + 0x200000eb . = MAX ((__data_run_start__ + SIZEOF (.data)), .) + *fill* 0x20000000 0xeb + 0x200000eb __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) + 0x200000eb __data_run_load_end__ = __data_run_end__ 0x00000001 . = ASSERT (((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <= __SRAM_segment_end__)), error: .data_run is too large to fit in SRAM memory segment) - 0x200000f0 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) + 0x200000ec __bss_load_start__ = ALIGN (__data_run_end__, 0x4) -.bss 0x200000f0 0x67c - 0x200000f0 __bss_start__ = . +.bss 0x200000ec 0x660 + 0x200000ec __bss_start__ = . *(.bss .bss.* .gnu.linkonce.b.*) - .bss.initialized.1734 - 0x200000f0 0x1 THUMB Debug/../../obj/hooks.o - *fill* 0x200000f1 0x3 00 + .bss.initialized.4784 + 0x200000ec 0x1 THUMB Debug/../../obj/hooks.o .bss.Data_Mul_MaxPacketSize - 0x200000f4 0x4 THUMB Debug/../../obj/usb_core.o - 0x200000f4 Data_Mul_MaxPacketSize + 0x200000ed 0x1 THUMB Debug/../../obj/usb_core.o + 0x200000ed Data_Mul_MaxPacketSize + *fill* 0x200000ee 0x2 .bss.StatusInfo - 0x200000f8 0x4 THUMB Debug/../../obj/usb_core.o - 0x200000f8 StatusInfo + 0x200000f0 0x2 THUMB Debug/../../obj/usb_core.o + 0x200000f0 StatusInfo + *fill* 0x200000f2 0x2 .bss.Device_Info - 0x200000fc 0x24 THUMB Debug/../../obj/usb_init.o - 0x200000fc Device_Info - .bss.EPindex 0x20000120 0x1 THUMB Debug/../../obj/usb_init.o - 0x20000120 EPindex - *fill* 0x20000121 0x3 00 + 0x200000f4 0x1c THUMB Debug/../../obj/usb_init.o + 0x200000f4 Device_Info + .bss.EPindex 0x20000110 0x1 THUMB Debug/../../obj/usb_init.o + 0x20000110 EPindex + *fill* 0x20000111 0x3 .bss.pInformation - 0x20000124 0x4 THUMB Debug/../../obj/usb_init.o - 0x20000124 pInformation + 0x20000114 0x4 THUMB Debug/../../obj/usb_init.o + 0x20000114 pInformation .bss.pUser_Standard_Requests - 0x20000128 0x4 THUMB Debug/../../obj/usb_init.o - 0x20000128 pUser_Standard_Requests + 0x20000118 0x4 THUMB Debug/../../obj/usb_init.o + 0x20000118 pUser_Standard_Requests .bss.wInterrupt_Mask - 0x2000012c 0x2 THUMB Debug/../../obj/usb_init.o - 0x2000012c wInterrupt_Mask - *fill* 0x2000012e 0x2 00 + 0x2000011c 0x2 THUMB Debug/../../obj/usb_init.o + 0x2000011c wInterrupt_Mask + *fill* 0x2000011e 0x2 .bss.pProperty - 0x20000130 0x4 THUMB Debug/../../obj/usb_init.o - 0x20000130 pProperty + 0x20000120 0x4 THUMB Debug/../../obj/usb_init.o + 0x20000120 pProperty .bss.SaveRState - 0x20000134 0x2 THUMB Debug/../../obj/usb_int.o - 0x20000134 SaveRState + 0x20000124 0x2 THUMB Debug/../../obj/usb_int.o + 0x20000124 SaveRState .bss.SaveTState - 0x20000136 0x2 THUMB Debug/../../obj/usb_int.o - 0x20000136 SaveTState + 0x20000126 0x2 THUMB Debug/../../obj/usb_int.o + 0x20000126 SaveTState .bss.bIntPackSOF - 0x20000138 0x1 THUMB Debug/../../obj/usb_istr.o - 0x20000138 bIntPackSOF - *fill* 0x20000139 0x1 00 - .bss.wIstr 0x2000013a 0x2 THUMB Debug/../../obj/usb_istr.o - 0x2000013a wIstr + 0x20000128 0x1 THUMB Debug/../../obj/usb_istr.o + 0x20000128 bIntPackSOF + *fill* 0x20000129 0x1 + .bss.wIstr 0x2000012a 0x2 THUMB Debug/../../obj/usb_istr.o + 0x2000012a wIstr .bss.bDeviceState - 0x2000013c 0x4 THUMB Debug/../../obj/usb_pwr.o - 0x2000013c bDeviceState + 0x2000012c 0x4 THUMB Debug/../../obj/usb_pwr.o + 0x2000012c bDeviceState .bss.bootBlockInfo - 0x20000140 0x204 THUMB Debug/../../obj/flash.o + 0x20000130 0x204 THUMB Debug/../../obj/flash.o .bss.blockInfo - 0x20000344 0x204 THUMB Debug/../../obj/flash.o + 0x20000334 0x204 THUMB Debug/../../obj/flash.o .bss.millisecond_counter - 0x20000548 0x4 THUMB Debug/../../obj/timer.o - .bss.USB_Rx_Buffer.2246 - 0x2000054c 0x40 THUMB Debug/../../obj/usb.o - .bss.xcpCtoRxInProgress.2216 - 0x2000058c 0x1 THUMB Debug/../../obj/usb.o - *fill* 0x2000058d 0x3 00 - .bss.USB_Tx_Buffer.2235 - 0x20000590 0x40 THUMB Debug/../../obj/usb.o - .bss.xcpCtoRxLength.2215 - 0x200005d0 0x1 THUMB Debug/../../obj/usb.o - *fill* 0x200005d1 0x3 00 + 0x20000538 0x4 THUMB Debug/../../obj/timer.o + .bss.xcpCtoReqPacket.5264 + 0x2000053c 0x40 THUMB Debug/../../obj/usb.o + .bss.USB_Tx_Buffer.5285 + 0x2000057c 0x40 THUMB Debug/../../obj/usb.o + .bss.xcpCtoRxLength.5265 + 0x200005bc 0x1 THUMB Debug/../../obj/usb.o + .bss.xcpCtoRxInProgress.5266 + 0x200005bd 0x1 THUMB Debug/../../obj/usb.o + *fill* 0x200005be 0x2 .bss.fifoCtrlFree - 0x200005d4 0x4 THUMB Debug/../../obj/usb.o - .bss.fifoCtrl 0x200005d8 0x30 THUMB Debug/../../obj/usb.o + 0x200005c0 0x4 THUMB Debug/../../obj/usb.o + .bss.fifoCtrl 0x200005c4 0x30 THUMB Debug/../../obj/usb.o .bss.fifoPipeBulkOUT - 0x20000608 0x44 THUMB Debug/../../obj/usb.o - .bss.xcpCtoReqPacket.2214 - 0x2000064c 0x40 THUMB Debug/../../obj/usb.o + 0x200005f4 0x41 THUMB Debug/../../obj/usb.o + *fill* 0x20000635 0x3 + .bss.USB_Rx_Buffer.5296 + 0x20000638 0x40 THUMB Debug/../../obj/usb.o .bss.fifoPipeBulkIN - 0x2000068c 0x44 THUMB Debug/../../obj/usb.o + 0x20000678 0x41 THUMB Debug/../../obj/usb.o .bss.backdoorOpen - 0x200006d0 0x1 THUMB Debug/../../obj/backdoor.o - *fill* 0x200006d1 0x3 00 + 0x200006b9 0x1 THUMB Debug/../../obj/backdoor.o + *fill* 0x200006ba 0x2 .bss.backdoorOpenTime - 0x200006d4 0x4 THUMB Debug/../../obj/backdoor.o - .bss.xcpCtoReqPacket.894 - 0x200006d8 0x40 THUMB Debug/../../obj/com.o - .bss.xcpInfo 0x20000718 0x4c THUMB Debug/../../obj/xcp.o - .bss.libdebugio.dbgCommWord - 0x20000764 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x20000764 dbgCommWord - .bss.libdebugio.dbgCntrlWord_mempoll - 0x20000768 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x20000768 dbgCntrlWord_mempoll + 0x200006bc 0x4 THUMB Debug/../../obj/backdoor.o + .bss.xcpCtoReqPacket.3796 + 0x200006c0 0x3f THUMB Debug/../../obj/com.o + *fill* 0x200006ff 0x1 + .bss.xcpInfo 0x20000700 0x4c THUMB Debug/../../obj/xcp.o *(COMMON) - 0x2000076c __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x2000076c __bss_load_end__ = __bss_end__ + 0x2000074c __bss_end__ = (__bss_start__ + SIZEOF (.bss)) + 0x2000074c __bss_load_end__ = __bss_end__ 0x00000001 . = ASSERT (((__bss_end__ >= __SRAM_segment_start__) && (__bss_end__ <= __SRAM_segment_end__)), error: .bss is too large to fit in SRAM memory segment) - 0x2000076c __non_init_load_start__ = ALIGN (__bss_end__, 0x4) + 0x2000074c __non_init_load_start__ = ALIGN (__bss_end__, 0x4) -.non_init 0x2000076c 0x0 - 0x2000076c __non_init_start__ = . +.non_init 0x2000074c 0x0 + 0x2000074c __non_init_start__ = . *(.non_init .non_init.*) - 0x2000076c __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x2000076c __non_init_load_end__ = __non_init_end__ + 0x2000074c __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) + 0x2000074c __non_init_load_end__ = __non_init_end__ 0x00000001 . = ASSERT (((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <= __SRAM_segment_end__)), error: .non_init is too large to fit in SRAM memory segment) - 0x2000076c __heap_load_start__ = ALIGN (__non_init_end__, 0x4) + 0x2000074c __heap_load_start__ = ALIGN (__non_init_end__, 0x4) -.heap 0x2000076c 0x80 - 0x2000076c __heap_start__ = . +.heap 0x2000074c 0x80 + 0x2000074c __heap_start__ = . *(.heap .heap.*) - 0x200007ec . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x2000076c 0x80 00 - 0x200007ec __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x200007ec __heap_load_end__ = __heap_end__ + 0x200007cc . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) + *fill* 0x2000074c 0x80 + 0x200007cc __heap_end__ = (__heap_start__ + SIZEOF (.heap)) + 0x200007cc __heap_load_end__ = __heap_end__ 0x00000001 . = ASSERT (((__heap_end__ >= __SRAM_segment_start__) && (__heap_end__ <= __SRAM_segment_end__)), error: .heap is too large to fit in SRAM memory segment) - 0x200007ec __stack_load_start__ = ALIGN (__heap_end__, 0x4) + 0x200007cc __stack_load_start__ = ALIGN (__heap_end__, 0x4) -.stack 0x200007ec 0x200 - 0x200007ec __stack_start__ = . +.stack 0x200007cc 0x200 + 0x200007cc __stack_start__ = . *(.stack .stack.*) - 0x200009ec . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x200007ec 0x200 00 - 0x200009ec __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x200009ec __stack_load_end__ = __stack_end__ + 0x200009cc . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) + *fill* 0x200007cc 0x200 + 0x200009cc __stack_end__ = (__stack_start__ + SIZEOF (.stack)) + 0x200009cc __stack_load_end__ = __stack_end__ 0x00000001 . = ASSERT (((__stack_end__ >= __SRAM_segment_start__) && (__stack_end__ <= __SRAM_segment_end__)), error: .stack is too large to fit in SRAM memory segment) - 0x200009ec __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) + 0x200009cc __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) -.stack_process 0x200009ec 0x0 - 0x200009ec __stack_process_start__ = . +.stack_process 0x200009cc 0x0 + 0x200009cc __stack_process_start__ = . *(.stack_process .stack_process.*) - 0x200009ec . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) - 0x200009ec __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) - 0x200009ec __stack_process_load_end__ = __stack_process_end__ + 0x200009cc . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) + 0x200009cc __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) + 0x200009cc __stack_process_load_end__ = __stack_process_end__ 0x00000001 . = ASSERT (((__stack_process_end__ >= __SRAM_segment_start__) && (__stack_process_end__ <= __SRAM_segment_end__)), error: .stack_process is too large to fit in SRAM memory segment) - 0x200009ec __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) + 0x200009cc __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) -.tbss 0x200009ec 0x0 - 0x200009ec __tbss_start__ = . +.tbss 0x200009cc 0x0 + 0x200009cc __tbss_start__ = . *(.tbss .tbss.*) - 0x200009ec __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) - 0x200009ec __tbss_load_end__ = __tbss_end__ + 0x200009cc __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) + 0x200009cc __tbss_load_end__ = __tbss_end__ 0x00000001 . = ASSERT (((__tbss_end__ >= __SRAM_segment_start__) && (__tbss_end__ <= __SRAM_segment_end__)), error: .tbss is too large to fit in SRAM memory segment) - 0x08002f30 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + 0x080026cc __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) -.tdata 0x200009ec 0x0 load address 0x08002f30 - 0x200009ec __tdata_start__ = . +.tdata 0x200009cc 0x0 load address 0x080026cc + 0x200009cc __tdata_start__ = . *(.tdata .tdata.*) - 0x200009ec __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) - 0x08002f30 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) - 0x08002f30 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) + 0x200009cc __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) + 0x080026cc __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) + 0x080026cc __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) 0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment) -.tdata_run 0x200009ec 0x0 - 0x200009ec __tdata_run_start__ = . - 0x200009ec . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) - 0x200009ec __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) - 0x200009ec __tdata_run_load_end__ = __tdata_run_end__ - 0x200009ec __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) +.tdata_run 0x200009cc 0x0 + 0x200009cc __tdata_run_start__ = . + 0x200009cc . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) + 0x200009cc __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) + 0x200009cc __tdata_run_load_end__ = __tdata_run_end__ + 0x200009cc __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) 0x00000001 . = ASSERT (((__tdata_run_end__ >= __SRAM_segment_start__) && (__tdata_run_end__ <= __SRAM_segment_end__)), error: .tdata_run is too large to fit in SRAM memory segment) START GROUP LOAD THUMB Debug/../../obj/hooks.o LOAD THUMB Debug/../../obj/main.o -LOAD THUMB Debug/../../obj/core_cm3.o LOAD THUMB Debug/../../obj/system_stm32f10x.o LOAD THUMB Debug/../../obj/usb_core.o LOAD THUMB Debug/../../obj/usb_init.o @@ -1151,438 +2822,476 @@ LOAD THUMB Debug/../../obj/boot.o LOAD THUMB Debug/../../obj/com.o LOAD THUMB Debug/../../obj/cop.o LOAD THUMB Debug/../../obj/xcp.o -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcpp_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_targetio_impl_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_mempoll_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcpp_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o END GROUP OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/../bin/openblt_olimex_stm32h103.elf elf32-littlearm) -.debug_frame 0x00000000 0x1b88 +.debug_frame 0x00000000 0x1144 .debug_frame 0x00000000 0x50 THUMB Debug/../../obj/hooks.o .debug_frame 0x00000050 0x30 THUMB Debug/../../obj/main.o - .debug_frame 0x00000080 0x170 THUMB Debug/../../obj/core_cm3.o - .debug_frame 0x000001f0 0x38 THUMB Debug/../../obj/system_stm32f10x.o - .debug_frame 0x00000228 0x1d4 THUMB Debug/../../obj/usb_core.o - .debug_frame 0x000003fc 0x2c THUMB Debug/../../obj/usb_init.o - .debug_frame 0x00000428 0x54 THUMB Debug/../../obj/usb_int.o - .debug_frame 0x0000047c 0x48 THUMB Debug/../../obj/usb_mem.o - .debug_frame 0x000004c4 0x3f4 THUMB Debug/../../obj/usb_regs.o - .debug_frame 0x000008b8 0x60 THUMB Debug/../../obj/usb_sil.o - .debug_frame 0x00000918 0x64 THUMB Debug/../../obj/usb_endp.o - .debug_frame 0x0000097c 0x2c THUMB Debug/../../obj/usb_istr.o - .debug_frame 0x000009a8 0x134 THUMB Debug/../../obj/usb_prop.o - .debug_frame 0x00000adc 0xa0 THUMB Debug/../../obj/usb_pwr.o - .debug_frame 0x00000b7c 0x30 THUMB Debug/../../obj/cpu_comp.o - .debug_frame 0x00000bac 0x2c THUMB Debug/../../obj/vectors.o - .debug_frame 0x00000bd8 0x84 THUMB Debug/../../obj/cpu.o - .debug_frame 0x00000c5c 0x1b8 THUMB Debug/../../obj/flash.o - .debug_frame 0x00000e14 0xd4 THUMB Debug/../../obj/nvm.o - .debug_frame 0x00000ee8 0x68 THUMB Debug/../../obj/timer.o - .debug_frame 0x00000f50 0x1e4 THUMB Debug/../../obj/usb.o - .debug_frame 0x00001134 0x2c THUMB Debug/../../obj/assert.o - .debug_frame 0x00001160 0x48 THUMB Debug/../../obj/backdoor.o - .debug_frame 0x000011a8 0x48 THUMB Debug/../../obj/boot.o - .debug_frame 0x000011f0 0xbc THUMB Debug/../../obj/com.o - .debug_frame 0x000012ac 0x30 THUMB Debug/../../obj/cop.o - .debug_frame 0x000012dc 0x80 THUMB Debug/../../obj/xcp.o - .debug_frame 0x0000135c 0x78c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_frame 0x00001ae8 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_frame 0x00000080 0x1fc THUMB Debug/../../obj/usb_core.o + .debug_frame 0x0000027c 0x2c THUMB Debug/../../obj/usb_init.o + .debug_frame 0x000002a8 0x60 THUMB Debug/../../obj/usb_int.o + .debug_frame 0x00000308 0x44 THUMB Debug/../../obj/usb_mem.o + .debug_frame 0x0000034c 0x3f8 THUMB Debug/../../obj/usb_regs.o + .debug_frame 0x00000744 0x60 THUMB Debug/../../obj/usb_sil.o + .debug_frame 0x000007a4 0x64 THUMB Debug/../../obj/usb_endp.o + .debug_frame 0x00000808 0x2c THUMB Debug/../../obj/usb_istr.o + .debug_frame 0x00000834 0x134 THUMB Debug/../../obj/usb_prop.o + .debug_frame 0x00000968 0xa0 THUMB Debug/../../obj/usb_pwr.o + .debug_frame 0x00000a08 0x30 THUMB Debug/../../obj/cpu_comp.o + .debug_frame 0x00000a38 0x2c THUMB Debug/../../obj/vectors.o + .debug_frame 0x00000a64 0x74 THUMB Debug/../../obj/cpu.o + .debug_frame 0x00000ad8 0x180 THUMB Debug/../../obj/flash.o + .debug_frame 0x00000c58 0xd4 THUMB Debug/../../obj/nvm.o + .debug_frame 0x00000d2c 0x5c THUMB Debug/../../obj/timer.o + .debug_frame 0x00000d88 0x1a4 THUMB Debug/../../obj/usb.o + .debug_frame 0x00000f2c 0x2c THUMB Debug/../../obj/assert.o + .debug_frame 0x00000f58 0x48 THUMB Debug/../../obj/backdoor.o + .debug_frame 0x00000fa0 0x48 THUMB Debug/../../obj/boot.o + .debug_frame 0x00000fe8 0xbc THUMB Debug/../../obj/com.o + .debug_frame 0x000010a4 0x30 THUMB Debug/../../obj/cop.o + .debug_frame 0x000010d4 0x70 THUMB Debug/../../obj/xcp.o -.debug_info 0x00000000 0x6cb6 - .debug_info 0x00000000 0x25f THUMB Debug/../../obj/hooks.o - .debug_info 0x0000025f 0x31f THUMB Debug/../../obj/main.o - .debug_info 0x0000057e 0x53d THUMB Debug/../../obj/core_cm3.o - .debug_info 0x00000abb 0x4c6 THUMB Debug/../../obj/system_stm32f10x.o - .debug_info 0x00000f81 0xd09 THUMB Debug/../../obj/usb_core.o - .debug_info 0x00001c8a 0x4db THUMB Debug/../../obj/usb_init.o - .debug_info 0x00002165 0x232 THUMB Debug/../../obj/usb_int.o - .debug_info 0x00002397 0x1bb THUMB Debug/../../obj/usb_mem.o - .debug_info 0x00002552 0xd35 THUMB Debug/../../obj/usb_regs.o - .debug_info 0x00003287 0x179 THUMB Debug/../../obj/usb_sil.o - .debug_info 0x00003400 0x19d THUMB Debug/../../obj/usb_desc.o - .debug_info 0x0000359d 0x124 THUMB Debug/../../obj/usb_endp.o - .debug_info 0x000036c1 0x2ad THUMB Debug/../../obj/usb_istr.o - .debug_info 0x0000396e 0x97e THUMB Debug/../../obj/usb_prop.o - .debug_info 0x000042ec 0x2e5 THUMB Debug/../../obj/usb_pwr.o - .debug_info 0x000045d1 0x8a THUMB Debug/../../obj/cpu_comp.o - .debug_info 0x0000465b 0x110 THUMB Debug/../../obj/cstart.o - .debug_info 0x0000476b 0xf5 THUMB Debug/../../obj/vectors.o - .debug_info 0x00004860 0x5e THUMB Debug/../../obj/can.o - .debug_info 0x000048be 0x153 THUMB Debug/../../obj/cpu.o - .debug_info 0x00004a11 0x6a5 THUMB Debug/../../obj/flash.o - .debug_info 0x000050b6 0x190 THUMB Debug/../../obj/nvm.o - .debug_info 0x00005246 0x117 THUMB Debug/../../obj/timer.o - .debug_info 0x0000535d 0x5e THUMB Debug/../../obj/uart.o - .debug_info 0x000053bb 0x892 THUMB Debug/../../obj/usb.o - .debug_info 0x00005c4d 0xb6 THUMB Debug/../../obj/assert.o - .debug_info 0x00005d03 0xc4 THUMB Debug/../../obj/backdoor.o - .debug_info 0x00005dc7 0x8c THUMB Debug/../../obj/boot.o - .debug_info 0x00005e53 0x1d7 THUMB Debug/../../obj/com.o - .debug_info 0x0000602a 0x8a THUMB Debug/../../obj/cop.o - .debug_info 0x000060b4 0x616 THUMB Debug/../../obj/xcp.o - .debug_info 0x000066ca 0x51f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_info 0x00006be9 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_info 0x00000000 0x6839 + .debug_info 0x00000000 0x228 THUMB Debug/../../obj/hooks.o + .debug_info 0x00000228 0x32f THUMB Debug/../../obj/main.o + .debug_info 0x00000557 0xe36 THUMB Debug/../../obj/usb_core.o + .debug_info 0x0000138d 0x429 THUMB Debug/../../obj/usb_init.o + .debug_info 0x000017b6 0x206 THUMB Debug/../../obj/usb_int.o + .debug_info 0x000019bc 0x1aa THUMB Debug/../../obj/usb_mem.o + .debug_info 0x00001b66 0xccc THUMB Debug/../../obj/usb_regs.o + .debug_info 0x00002832 0x21e THUMB Debug/../../obj/usb_sil.o + .debug_info 0x00002a50 0x18e THUMB Debug/../../obj/usb_desc.o + .debug_info 0x00002bde 0x144 THUMB Debug/../../obj/usb_endp.o + .debug_info 0x00002d22 0x278 THUMB Debug/../../obj/usb_istr.o + .debug_info 0x00002f9a 0xaa7 THUMB Debug/../../obj/usb_prop.o + .debug_info 0x00003a41 0x31e THUMB Debug/../../obj/usb_pwr.o + .debug_info 0x00003d5f 0x80 THUMB Debug/../../obj/cpu_comp.o + .debug_info 0x00003ddf 0x110 THUMB Debug/../../obj/cstart.o + .debug_info 0x00003eef 0x111 THUMB Debug/../../obj/vectors.o + .debug_info 0x00004000 0x1e3 THUMB Debug/../../obj/cpu.o + .debug_info 0x000041e3 0x8cd THUMB Debug/../../obj/flash.o + .debug_info 0x00004ab0 0x24e THUMB Debug/../../obj/nvm.o + .debug_info 0x00004cfe 0x127 THUMB Debug/../../obj/timer.o + .debug_info 0x00004e25 0xbaa THUMB Debug/../../obj/usb.o + .debug_info 0x000059cf 0xc2 THUMB Debug/../../obj/assert.o + .debug_info 0x00005a91 0x110 THUMB Debug/../../obj/backdoor.o + .debug_info 0x00005ba1 0x152 THUMB Debug/../../obj/boot.o + .debug_info 0x00005cf3 0x29e THUMB Debug/../../obj/com.o + .debug_info 0x00005f91 0x80 THUMB Debug/../../obj/cop.o + .debug_info 0x00006011 0x828 THUMB Debug/../../obj/xcp.o -.debug_abbrev 0x00000000 0x1e4e - .debug_abbrev 0x00000000 0xea THUMB Debug/../../obj/hooks.o - .debug_abbrev 0x000000ea 0x109 THUMB Debug/../../obj/main.o - .debug_abbrev 0x000001f3 0xa9 THUMB Debug/../../obj/core_cm3.o - .debug_abbrev 0x0000029c 0x1a8 THUMB Debug/../../obj/system_stm32f10x.o - .debug_abbrev 0x00000444 0x33b THUMB Debug/../../obj/usb_core.o - .debug_abbrev 0x0000077f 0x11f THUMB Debug/../../obj/usb_init.o - .debug_abbrev 0x0000089e 0xcf THUMB Debug/../../obj/usb_int.o - .debug_abbrev 0x0000096d 0x9e THUMB Debug/../../obj/usb_mem.o - .debug_abbrev 0x00000a0b 0x1b7 THUMB Debug/../../obj/usb_regs.o - .debug_abbrev 0x00000bc2 0xb9 THUMB Debug/../../obj/usb_sil.o - .debug_abbrev 0x00000c7b 0x79 THUMB Debug/../../obj/usb_desc.o - .debug_abbrev 0x00000cf4 0x8f THUMB Debug/../../obj/usb_endp.o - .debug_abbrev 0x00000d83 0xf9 THUMB Debug/../../obj/usb_istr.o - .debug_abbrev 0x00000e7c 0x207 THUMB Debug/../../obj/usb_prop.o - .debug_abbrev 0x00001083 0x128 THUMB Debug/../../obj/usb_pwr.o - .debug_abbrev 0x000011ab 0x41 THUMB Debug/../../obj/cpu_comp.o - .debug_abbrev 0x000011ec 0x14 THUMB Debug/../../obj/cstart.o - .debug_abbrev 0x00001200 0xc0 THUMB Debug/../../obj/vectors.o - .debug_abbrev 0x000012c0 0x2a THUMB Debug/../../obj/can.o - .debug_abbrev 0x000012ea 0xb1 THUMB Debug/../../obj/cpu.o - .debug_abbrev 0x0000139b 0x1fa THUMB Debug/../../obj/flash.o - .debug_abbrev 0x00001595 0xa5 THUMB Debug/../../obj/nvm.o - .debug_abbrev 0x0000163a 0xbb THUMB Debug/../../obj/timer.o - .debug_abbrev 0x000016f5 0x2a THUMB Debug/../../obj/uart.o - .debug_abbrev 0x0000171f 0x2d8 THUMB Debug/../../obj/usb.o - .debug_abbrev 0x000019f7 0x68 THUMB Debug/../../obj/assert.o - .debug_abbrev 0x00001a5f 0x5d THUMB Debug/../../obj/backdoor.o - .debug_abbrev 0x00001abc 0x41 THUMB Debug/../../obj/boot.o - .debug_abbrev 0x00001afd 0xf3 THUMB Debug/../../obj/com.o - .debug_abbrev 0x00001bf0 0x41 THUMB Debug/../../obj/cop.o - .debug_abbrev 0x00001c31 0x1c0 THUMB Debug/../../obj/xcp.o - .debug_abbrev 0x00001df1 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_abbrev 0x00001e29 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_abbrev 0x00000000 0x1fbc + .debug_abbrev 0x00000000 0xf4 THUMB Debug/../../obj/hooks.o + .debug_abbrev 0x000000f4 0x147 THUMB Debug/../../obj/main.o + .debug_abbrev 0x0000023b 0x39d THUMB Debug/../../obj/usb_core.o + .debug_abbrev 0x000005d8 0x125 THUMB Debug/../../obj/usb_init.o + .debug_abbrev 0x000006fd 0xf5 THUMB Debug/../../obj/usb_int.o + .debug_abbrev 0x000007f2 0xa2 THUMB Debug/../../obj/usb_mem.o + .debug_abbrev 0x00000894 0x1f4 THUMB Debug/../../obj/usb_regs.o + .debug_abbrev 0x00000a88 0x106 THUMB Debug/../../obj/usb_sil.o + .debug_abbrev 0x00000b8e 0x78 THUMB Debug/../../obj/usb_desc.o + .debug_abbrev 0x00000c06 0xb3 THUMB Debug/../../obj/usb_endp.o + .debug_abbrev 0x00000cb9 0x11d THUMB Debug/../../obj/usb_istr.o + .debug_abbrev 0x00000dd6 0x239 THUMB Debug/../../obj/usb_prop.o + .debug_abbrev 0x0000100f 0x14f THUMB Debug/../../obj/usb_pwr.o + .debug_abbrev 0x0000115e 0x45 THUMB Debug/../../obj/cpu_comp.o + .debug_abbrev 0x000011a3 0x14 THUMB Debug/../../obj/cstart.o + .debug_abbrev 0x000011b7 0xee THUMB Debug/../../obj/vectors.o + .debug_abbrev 0x000012a5 0xc8 THUMB Debug/../../obj/cpu.o + .debug_abbrev 0x0000136d 0x24b THUMB Debug/../../obj/flash.o + .debug_abbrev 0x000015b8 0xca THUMB Debug/../../obj/nvm.o + .debug_abbrev 0x00001682 0x104 THUMB Debug/../../obj/timer.o + .debug_abbrev 0x00001786 0x344 THUMB Debug/../../obj/usb.o + .debug_abbrev 0x00001aca 0x8b THUMB Debug/../../obj/assert.o + .debug_abbrev 0x00001b55 0x7f THUMB Debug/../../obj/backdoor.o + .debug_abbrev 0x00001bd4 0x63 THUMB Debug/../../obj/boot.o + .debug_abbrev 0x00001c37 0x12c THUMB Debug/../../obj/com.o + .debug_abbrev 0x00001d63 0x45 THUMB Debug/../../obj/cop.o + .debug_abbrev 0x00001da8 0x214 THUMB Debug/../../obj/xcp.o -.debug_aranges 0x00000000 0xb78 +.debug_pubnames + 0x00000000 0x1b5c + .debug_pubnames + 0x00000000 0x7b THUMB Debug/../../obj/hooks.o + .debug_pubnames + 0x0000007b 0x36 THUMB Debug/../../obj/main.o + .debug_pubnames + 0x000000b1 0x4c1 THUMB Debug/../../obj/usb_core.o + .debug_pubnames + 0x00000572 0x98 THUMB Debug/../../obj/usb_init.o + .debug_pubnames + 0x0000060a 0x46 THUMB Debug/../../obj/usb_int.o + .debug_pubnames + 0x00000650 0x42 THUMB Debug/../../obj/usb_mem.o + .debug_pubnames + 0x00000692 0x448 THUMB Debug/../../obj/usb_regs.o + .debug_pubnames + 0x00000ada 0x46 THUMB Debug/../../obj/usb_sil.o + .debug_pubnames + 0x00000b20 0xb8 THUMB Debug/../../obj/usb_desc.o + .debug_pubnames + 0x00000bd8 0xa0 THUMB Debug/../../obj/usb_endp.o + .debug_pubnames + 0x00000c78 0x56 THUMB Debug/../../obj/usb_istr.o + .debug_pubnames + 0x00000cce 0x3bf THUMB Debug/../../obj/usb_prop.o + .debug_pubnames + 0x0000108d 0x1b3 THUMB Debug/../../obj/usb_pwr.o + .debug_pubnames + 0x00001240 0x35 THUMB Debug/../../obj/cpu_comp.o + .debug_pubnames + 0x00001275 0x2d THUMB Debug/../../obj/vectors.o + .debug_pubnames + 0x000012a2 0x45 THUMB Debug/../../obj/cpu.o + .debug_pubnames + 0x000012e7 0x1a4 THUMB Debug/../../obj/flash.o + .debug_pubnames + 0x0000148b 0x86 THUMB Debug/../../obj/nvm.o + .debug_pubnames + 0x00001511 0x64 THUMB Debug/../../obj/timer.o + .debug_pubnames + 0x00001575 0x202 THUMB Debug/../../obj/usb.o + .debug_pubnames + 0x00001777 0x24 THUMB Debug/../../obj/assert.o + .debug_pubnames + 0x0000179b 0x5b THUMB Debug/../../obj/backdoor.o + .debug_pubnames + 0x000017f6 0x2c THUMB Debug/../../obj/boot.o + .debug_pubnames + 0x00001822 0x108 THUMB Debug/../../obj/com.o + .debug_pubnames + 0x0000192a 0x2d THUMB Debug/../../obj/cop.o + .debug_pubnames + 0x00001957 0x205 THUMB Debug/../../obj/xcp.o + +.debug_pubtypes + 0x00000000 0x1adc + .debug_pubtypes + 0x00000000 0x121 THUMB Debug/../../obj/hooks.o + .debug_pubtypes + 0x00000121 0x132 THUMB Debug/../../obj/main.o + .debug_pubtypes + 0x00000253 0x25d THUMB Debug/../../obj/usb_core.o + .debug_pubtypes + 0x000004b0 0x1a2 THUMB Debug/../../obj/usb_init.o + .debug_pubtypes + 0x00000652 0xde THUMB Debug/../../obj/usb_int.o + .debug_pubtypes + 0x00000730 0xde THUMB Debug/../../obj/usb_mem.o + .debug_pubtypes + 0x0000080e 0xff THUMB Debug/../../obj/usb_regs.o + .debug_pubtypes + 0x0000090d 0xde THUMB Debug/../../obj/usb_sil.o + .debug_pubtypes + 0x000009eb 0xc4 THUMB Debug/../../obj/usb_desc.o + .debug_pubtypes + 0x00000aaf 0xd7 THUMB Debug/../../obj/usb_endp.o + .debug_pubtypes + 0x00000b86 0x109 THUMB Debug/../../obj/usb_istr.o + .debug_pubtypes + 0x00000c8f 0x228 THUMB Debug/../../obj/usb_prop.o + .debug_pubtypes + 0x00000eb7 0x152 THUMB Debug/../../obj/usb_pwr.o + .debug_pubtypes + 0x00001009 0x91 THUMB Debug/../../obj/cpu_comp.o + .debug_pubtypes + 0x0000109a 0xba THUMB Debug/../../obj/vectors.o + .debug_pubtypes + 0x00001154 0xca THUMB Debug/../../obj/cpu.o + .debug_pubtypes + 0x0000121e 0x118 THUMB Debug/../../obj/flash.o + .debug_pubtypes + 0x00001336 0xc8 THUMB Debug/../../obj/nvm.o + .debug_pubtypes + 0x000013fe 0xb1 THUMB Debug/../../obj/timer.o + .debug_pubtypes + 0x000014af 0x1d6 THUMB Debug/../../obj/usb.o + .debug_pubtypes + 0x00001685 0xad THUMB Debug/../../obj/assert.o + .debug_pubtypes + 0x00001732 0xad THUMB Debug/../../obj/backdoor.o + .debug_pubtypes + 0x000017df 0x91 THUMB Debug/../../obj/boot.o + .debug_pubtypes + 0x00001870 0xdc THUMB Debug/../../obj/com.o + .debug_pubtypes + 0x0000194c 0x91 THUMB Debug/../../obj/cop.o + .debug_pubtypes + 0x000019dd 0xff THUMB Debug/../../obj/xcp.o + +.debug_aranges 0x00000000 0x7e8 .debug_aranges 0x00000000 0x38 THUMB Debug/../../obj/hooks.o .debug_aranges 0x00000038 0x20 THUMB Debug/../../obj/main.o .debug_aranges - 0x00000058 0xc8 THUMB Debug/../../obj/core_cm3.o + 0x00000058 0x98 THUMB Debug/../../obj/usb_core.o .debug_aranges - 0x00000120 0x28 THUMB Debug/../../obj/system_stm32f10x.o + 0x000000f0 0x20 THUMB Debug/../../obj/usb_init.o .debug_aranges - 0x00000148 0x98 THUMB Debug/../../obj/usb_core.o + 0x00000110 0x28 THUMB Debug/../../obj/usb_int.o .debug_aranges - 0x000001e0 0x20 THUMB Debug/../../obj/usb_init.o + 0x00000138 0x28 THUMB Debug/../../obj/usb_mem.o .debug_aranges - 0x00000200 0x28 THUMB Debug/../../obj/usb_int.o + 0x00000160 0x1f0 THUMB Debug/../../obj/usb_regs.o .debug_aranges - 0x00000228 0x28 THUMB Debug/../../obj/usb_mem.o + 0x00000350 0x30 THUMB Debug/../../obj/usb_sil.o .debug_aranges - 0x00000250 0x1f0 THUMB Debug/../../obj/usb_regs.o + 0x00000380 0x18 THUMB Debug/../../obj/usb_desc.o .debug_aranges - 0x00000440 0x30 THUMB Debug/../../obj/usb_sil.o + 0x00000398 0x30 THUMB Debug/../../obj/usb_endp.o .debug_aranges - 0x00000470 0x30 THUMB Debug/../../obj/usb_endp.o + 0x000003c8 0x20 THUMB Debug/../../obj/usb_istr.o .debug_aranges - 0x000004a0 0x20 THUMB Debug/../../obj/usb_istr.o + 0x000003e8 0x80 THUMB Debug/../../obj/usb_prop.o .debug_aranges - 0x000004c0 0x80 THUMB Debug/../../obj/usb_prop.o + 0x00000468 0x40 THUMB Debug/../../obj/usb_pwr.o .debug_aranges - 0x00000540 0x40 THUMB Debug/../../obj/usb_pwr.o + 0x000004a8 0x28 THUMB Debug/../../obj/cpu_comp.o .debug_aranges - 0x00000580 0x28 THUMB Debug/../../obj/cpu_comp.o + 0x000004d0 0x20 THUMB Debug/../../obj/cstart.o .debug_aranges - 0x000005a8 0x20 THUMB Debug/../../obj/cstart.o + 0x000004f0 0x20 THUMB Debug/../../obj/vectors.o .debug_aranges - 0x000005c8 0x20 THUMB Debug/../../obj/vectors.o + 0x00000510 0x30 THUMB Debug/../../obj/cpu.o .debug_aranges - 0x000005e8 0x38 THUMB Debug/../../obj/cpu.o + 0x00000540 0x80 THUMB Debug/../../obj/flash.o .debug_aranges - 0x00000620 0x98 THUMB Debug/../../obj/flash.o + 0x000005c0 0x50 THUMB Debug/../../obj/nvm.o .debug_aranges - 0x000006b8 0x50 THUMB Debug/../../obj/nvm.o + 0x00000610 0x38 THUMB Debug/../../obj/timer.o .debug_aranges - 0x00000708 0x38 THUMB Debug/../../obj/timer.o + 0x00000648 0x78 THUMB Debug/../../obj/usb.o .debug_aranges - 0x00000740 0x90 THUMB Debug/../../obj/usb.o + 0x000006c0 0x20 THUMB Debug/../../obj/assert.o .debug_aranges - 0x000007d0 0x20 THUMB Debug/../../obj/assert.o + 0x000006e0 0x28 THUMB Debug/../../obj/backdoor.o .debug_aranges - 0x000007f0 0x28 THUMB Debug/../../obj/backdoor.o + 0x00000708 0x28 THUMB Debug/../../obj/boot.o .debug_aranges - 0x00000818 0x28 THUMB Debug/../../obj/boot.o + 0x00000730 0x50 THUMB Debug/../../obj/com.o .debug_aranges - 0x00000840 0x50 THUMB Debug/../../obj/com.o + 0x00000780 0x28 THUMB Debug/../../obj/cop.o .debug_aranges - 0x00000890 0x28 THUMB Debug/../../obj/cop.o - .debug_aranges - 0x000008b8 0x48 THUMB Debug/../../obj/xcp.o - .debug_aranges - 0x00000900 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_aranges - 0x00000b18 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x000007a8 0x40 THUMB Debug/../../obj/xcp.o -.debug_ranges 0x00000000 0xa70 +.debug_ranges 0x00000000 0x6f8 .debug_ranges 0x00000000 0x28 THUMB Debug/../../obj/hooks.o .debug_ranges 0x00000028 0x10 THUMB Debug/../../obj/main.o - .debug_ranges 0x00000038 0xb8 THUMB Debug/../../obj/core_cm3.o - .debug_ranges 0x000000f0 0x18 THUMB Debug/../../obj/system_stm32f10x.o - .debug_ranges 0x00000108 0xd0 THUMB Debug/../../obj/usb_core.o - .debug_ranges 0x000001d8 0x10 THUMB Debug/../../obj/usb_init.o - .debug_ranges 0x000001e8 0x18 THUMB Debug/../../obj/usb_int.o - .debug_ranges 0x00000200 0x18 THUMB Debug/../../obj/usb_mem.o - .debug_ranges 0x00000218 0x250 THUMB Debug/../../obj/usb_regs.o - .debug_ranges 0x00000468 0x20 THUMB Debug/../../obj/usb_sil.o - .debug_ranges 0x00000488 0x20 THUMB Debug/../../obj/usb_endp.o - .debug_ranges 0x000004a8 0x10 THUMB Debug/../../obj/usb_istr.o - .debug_ranges 0x000004b8 0x70 THUMB Debug/../../obj/usb_prop.o - .debug_ranges 0x00000528 0x30 THUMB Debug/../../obj/usb_pwr.o - .debug_ranges 0x00000558 0x18 THUMB Debug/../../obj/cpu_comp.o - .debug_ranges 0x00000570 0x10 THUMB Debug/../../obj/vectors.o - .debug_ranges 0x00000580 0x28 THUMB Debug/../../obj/cpu.o - .debug_ranges 0x000005a8 0xb8 THUMB Debug/../../obj/flash.o - .debug_ranges 0x00000660 0x40 THUMB Debug/../../obj/nvm.o - .debug_ranges 0x000006a0 0x28 THUMB Debug/../../obj/timer.o - .debug_ranges 0x000006c8 0x80 THUMB Debug/../../obj/usb.o - .debug_ranges 0x00000748 0x10 THUMB Debug/../../obj/assert.o - .debug_ranges 0x00000758 0x18 THUMB Debug/../../obj/backdoor.o - .debug_ranges 0x00000770 0x18 THUMB Debug/../../obj/boot.o - .debug_ranges 0x00000788 0x40 THUMB Debug/../../obj/com.o - .debug_ranges 0x000007c8 0x18 THUMB Debug/../../obj/cop.o - .debug_ranges 0x000007e0 0x38 THUMB Debug/../../obj/xcp.o - .debug_ranges 0x00000818 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_ranges 0x00000a20 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_ranges 0x00000038 0xc0 THUMB Debug/../../obj/usb_core.o + .debug_ranges 0x000000f8 0x10 THUMB Debug/../../obj/usb_init.o + .debug_ranges 0x00000108 0x18 THUMB Debug/../../obj/usb_int.o + .debug_ranges 0x00000120 0x18 THUMB Debug/../../obj/usb_mem.o + .debug_ranges 0x00000138 0x250 THUMB Debug/../../obj/usb_regs.o + .debug_ranges 0x00000388 0x20 THUMB Debug/../../obj/usb_sil.o + .debug_ranges 0x000003a8 0x20 THUMB Debug/../../obj/usb_endp.o + .debug_ranges 0x000003c8 0x10 THUMB Debug/../../obj/usb_istr.o + .debug_ranges 0x000003d8 0x70 THUMB Debug/../../obj/usb_prop.o + .debug_ranges 0x00000448 0x30 THUMB Debug/../../obj/usb_pwr.o + .debug_ranges 0x00000478 0x18 THUMB Debug/../../obj/cpu_comp.o + .debug_ranges 0x00000490 0x10 THUMB Debug/../../obj/vectors.o + .debug_ranges 0x000004a0 0x20 THUMB Debug/../../obj/cpu.o + .debug_ranges 0x000004c0 0x88 THUMB Debug/../../obj/flash.o + .debug_ranges 0x00000548 0x40 THUMB Debug/../../obj/nvm.o + .debug_ranges 0x00000588 0x28 THUMB Debug/../../obj/timer.o + .debug_ranges 0x000005b0 0x80 THUMB Debug/../../obj/usb.o + .debug_ranges 0x00000630 0x10 THUMB Debug/../../obj/assert.o + .debug_ranges 0x00000640 0x18 THUMB Debug/../../obj/backdoor.o + .debug_ranges 0x00000658 0x18 THUMB Debug/../../obj/boot.o + .debug_ranges 0x00000670 0x40 THUMB Debug/../../obj/com.o + .debug_ranges 0x000006b0 0x18 THUMB Debug/../../obj/cop.o + .debug_ranges 0x000006c8 0x30 THUMB Debug/../../obj/xcp.o -.debug_line 0x00000000 0x3b40 - .debug_line 0x00000000 0x202 THUMB Debug/../../obj/hooks.o - .debug_line 0x00000202 0x1f5 THUMB Debug/../../obj/main.o - .debug_line 0x000003f7 0x291 THUMB Debug/../../obj/core_cm3.o - .debug_line 0x00000688 0x1c6 THUMB Debug/../../obj/system_stm32f10x.o - .debug_line 0x0000084e 0x457 THUMB Debug/../../obj/usb_core.o - .debug_line 0x00000ca5 0x172 THUMB Debug/../../obj/usb_init.o - .debug_line 0x00000e17 0x25c THUMB Debug/../../obj/usb_int.o - .debug_line 0x00001073 0x170 THUMB Debug/../../obj/usb_mem.o - .debug_line 0x000011e3 0x640 THUMB Debug/../../obj/usb_regs.o - .debug_line 0x00001823 0x18d THUMB Debug/../../obj/usb_sil.o - .debug_line 0x000019b0 0x110 THUMB Debug/../../obj/usb_desc.o - .debug_line 0x00001ac0 0x152 THUMB Debug/../../obj/usb_endp.o - .debug_line 0x00001c12 0x16f THUMB Debug/../../obj/usb_istr.o - .debug_line 0x00001d81 0x27a THUMB Debug/../../obj/usb_prop.o - .debug_line 0x00001ffb 0x1e3 THUMB Debug/../../obj/usb_pwr.o - .debug_line 0x000021de 0xd3 THUMB Debug/../../obj/cpu_comp.o - .debug_line 0x000022b1 0x112 THUMB Debug/../../obj/cstart.o - .debug_line 0x000023c3 0xf0 THUMB Debug/../../obj/vectors.o - .debug_line 0x000024b3 0x1d THUMB Debug/../../obj/can.o - .debug_line 0x000024d0 0x12c THUMB Debug/../../obj/cpu.o - .debug_line 0x000025fc 0x2f8 THUMB Debug/../../obj/flash.o - .debug_line 0x000028f4 0x159 THUMB Debug/../../obj/nvm.o - .debug_line 0x00002a4d 0x11f THUMB Debug/../../obj/timer.o - .debug_line 0x00002b6c 0x1d THUMB Debug/../../obj/uart.o - .debug_line 0x00002b89 0x382 THUMB Debug/../../obj/usb.o - .debug_line 0x00002f0b 0xd8 THUMB Debug/../../obj/assert.o - .debug_line 0x00002fe3 0xf5 THUMB Debug/../../obj/backdoor.o - .debug_line 0x000030d8 0xbe THUMB Debug/../../obj/boot.o - .debug_line 0x00003196 0x15c THUMB Debug/../../obj/com.o - .debug_line 0x000032f2 0xb2 THUMB Debug/../../obj/cop.o - .debug_line 0x000033a4 0x1d8 THUMB Debug/../../obj/xcp.o - .debug_line 0x0000357c 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_line 0x00003acc 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_line 0x00000000 0x34c6 + .debug_line 0x00000000 0x209 THUMB Debug/../../obj/hooks.o + .debug_line 0x00000209 0x229 THUMB Debug/../../obj/main.o + .debug_line 0x00000432 0x47c THUMB Debug/../../obj/usb_core.o + .debug_line 0x000008ae 0x163 THUMB Debug/../../obj/usb_init.o + .debug_line 0x00000a11 0x254 THUMB Debug/../../obj/usb_int.o + .debug_line 0x00000c65 0x161 THUMB Debug/../../obj/usb_mem.o + .debug_line 0x00000dc6 0x61d THUMB Debug/../../obj/usb_regs.o + .debug_line 0x000013e3 0x1a8 THUMB Debug/../../obj/usb_sil.o + .debug_line 0x0000158b 0x110 THUMB Debug/../../obj/usb_desc.o + .debug_line 0x0000169b 0x1a5 THUMB Debug/../../obj/usb_endp.o + .debug_line 0x00001840 0x1d1 THUMB Debug/../../obj/usb_istr.o + .debug_line 0x00001a11 0x2f0 THUMB Debug/../../obj/usb_prop.o + .debug_line 0x00001d01 0x235 THUMB Debug/../../obj/usb_pwr.o + .debug_line 0x00001f36 0xd1 THUMB Debug/../../obj/cpu_comp.o + .debug_line 0x00002007 0x137 THUMB Debug/../../obj/cstart.o + .debug_line 0x0000213e 0x110 THUMB Debug/../../obj/vectors.o + .debug_line 0x0000224e 0x156 THUMB Debug/../../obj/cpu.o + .debug_line 0x000023a4 0x2e0 THUMB Debug/../../obj/flash.o + .debug_line 0x00002684 0x197 THUMB Debug/../../obj/nvm.o + .debug_line 0x0000281b 0x120 THUMB Debug/../../obj/timer.o + .debug_line 0x0000293b 0x3d3 THUMB Debug/../../obj/usb.o + .debug_line 0x00002d0e 0x108 THUMB Debug/../../obj/assert.o + .debug_line 0x00002e16 0x138 THUMB Debug/../../obj/backdoor.o + .debug_line 0x00002f4e 0x120 THUMB Debug/../../obj/boot.o + .debug_line 0x0000306e 0x19a THUMB Debug/../../obj/com.o + .debug_line 0x00003208 0xb0 THUMB Debug/../../obj/cop.o + .debug_line 0x000032b8 0x20e THUMB Debug/../../obj/xcp.o -.debug_str 0x00000000 0x2fc5 - .debug_str 0x00000000 0x23b THUMB Debug/../../obj/hooks.o +.debug_str 0x00000000 0x2820 + .debug_str 0x00000000 0x317 THUMB Debug/../../obj/hooks.o + 0x357 (size before relaxing) + .debug_str 0x00000317 0xda THUMB Debug/../../obj/main.o + 0x369 (size before relaxing) + .debug_str 0x000003f1 0x89d THUMB Debug/../../obj/usb_core.o + 0xbe1 (size before relaxing) + .debug_str 0x00000c8e 0xb4 THUMB Debug/../../obj/usb_init.o + 0x635 (size before relaxing) + .debug_str 0x00000d42 0xac THUMB Debug/../../obj/usb_int.o + 0x311 (size before relaxing) + .debug_str 0x00000dee 0xac THUMB Debug/../../obj/usb_mem.o + 0x2ea (size before relaxing) + .debug_str 0x00000e9a 0x3e4 THUMB Debug/../../obj/usb_regs.o + 0x672 (size before relaxing) + .debug_str 0x0000127e 0xd2 THUMB Debug/../../obj/usb_sil.o + 0x352 (size before relaxing) + .debug_str 0x00001350 0xf1 THUMB Debug/../../obj/usb_desc.o + 0x2f5 (size before relaxing) + .debug_str 0x00001441 0x118 THUMB Debug/../../obj/usb_endp.o + 0x31d (size before relaxing) + .debug_str 0x00001559 0x7c THUMB Debug/../../obj/usb_istr.o + 0x3f8 (size before relaxing) + .debug_str 0x000015d5 0x1cc THUMB Debug/../../obj/usb_prop.o + 0xab8 (size before relaxing) + .debug_str 0x000017a1 0x15e THUMB Debug/../../obj/usb_pwr.o + 0x476 (size before relaxing) + .debug_str 0x000018ff 0xac THUMB Debug/../../obj/cpu_comp.o 0x27c (size before relaxing) - .debug_str 0x0000023b 0xba THUMB Debug/../../obj/main.o - 0x26e (size before relaxing) - .debug_str 0x000002f5 0x1b8 THUMB Debug/../../obj/core_cm3.o - 0x2a4 (size before relaxing) - .debug_str 0x000004ad 0x153 THUMB Debug/../../obj/system_stm32f10x.o - 0x31a (size before relaxing) - .debug_str 0x00000600 0x809 THUMB Debug/../../obj/usb_core.o - 0xa80 (size before relaxing) - .debug_str 0x00000e09 0xb4 THUMB Debug/../../obj/usb_init.o - 0x55f (size before relaxing) - .debug_str 0x00000ebd 0xac THUMB Debug/../../obj/usb_int.o - 0x213 (size before relaxing) - .debug_str 0x00000f69 0xd4 THUMB Debug/../../obj/usb_mem.o - 0x214 (size before relaxing) - .debug_str 0x0000103d 0x447 THUMB Debug/../../obj/usb_regs.o - 0x59c (size before relaxing) - .debug_str 0x00001484 0xd2 THUMB Debug/../../obj/usb_sil.o - 0x222 (size before relaxing) - .debug_str 0x00001556 0xf1 THUMB Debug/../../obj/usb_desc.o - 0x21f (size before relaxing) - .debug_str 0x00001647 0xec THUMB Debug/../../obj/usb_endp.o - 0x21b (size before relaxing) - .debug_str 0x00001733 0x7c THUMB Debug/../../obj/usb_istr.o - 0x30e (size before relaxing) - .debug_str 0x000017af 0x1b4 THUMB Debug/../../obj/usb_prop.o - 0x911 (size before relaxing) - .debug_str 0x00001963 0x13c THUMB Debug/../../obj/usb_pwr.o - 0x362 (size before relaxing) - .debug_str 0x00001a9f 0xac THUMB Debug/../../obj/cpu_comp.o - 0x1a9 (size before relaxing) - .debug_str 0x00001b4b 0xbf THUMB Debug/../../obj/vectors.o - 0x1c7 (size before relaxing) - .debug_str 0x00001c0a 0x81 THUMB Debug/../../obj/can.o - 0x17e (size before relaxing) - .debug_str 0x00001c8b 0xeb THUMB Debug/../../obj/cpu.o - 0x1f3 (size before relaxing) - .debug_str 0x00001d76 0x2ab THUMB Debug/../../obj/flash.o - 0x417 (size before relaxing) - .debug_str 0x00002021 0xd9 THUMB Debug/../../obj/nvm.o - 0x207 (size before relaxing) - .debug_str 0x000020fa 0xd8 THUMB Debug/../../obj/timer.o - 0x1e0 (size before relaxing) - .debug_str 0x000021d2 0x82 THUMB Debug/../../obj/uart.o - 0x17f (size before relaxing) - .debug_str 0x00002254 0x300 THUMB Debug/../../obj/usb.o - 0x629 (size before relaxing) - .debug_str 0x00002554 0x91 THUMB Debug/../../obj/assert.o - 0x19e (size before relaxing) - .debug_str 0x000025e5 0xb0 THUMB Debug/../../obj/backdoor.o - 0x1c1 (size before relaxing) - .debug_str 0x00002695 0x85 THUMB Debug/../../obj/boot.o - 0x182 (size before relaxing) - .debug_str 0x0000271a 0x144 THUMB Debug/../../obj/com.o - 0x27b (size before relaxing) - .debug_str 0x0000285e 0x85 THUMB Debug/../../obj/cop.o - 0x182 (size before relaxing) - .debug_str 0x000028e3 0x25d THUMB Debug/../../obj/xcp.o - 0x3a4 (size before relaxing) - .debug_str 0x00002b40 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x3fc (size before relaxing) - .debug_str 0x00002ef3 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x11b (size before relaxing) + .debug_str 0x000019ab 0xbf THUMB Debug/../../obj/vectors.o + 0x2b1 (size before relaxing) + .debug_str 0x00001a6a 0x12c THUMB Debug/../../obj/cpu.o + 0x33a (size before relaxing) + .debug_str 0x00001b96 0x2b2 THUMB Debug/../../obj/flash.o + 0x509 (size before relaxing) + .debug_str 0x00001e48 0xad THUMB Debug/../../obj/nvm.o + 0x353 (size before relaxing) + .debug_str 0x00001ef5 0xcd THUMB Debug/../../obj/timer.o + 0x2b3 (size before relaxing) + .debug_str 0x00001fc2 0x29a THUMB Debug/../../obj/usb.o + 0x7c3 (size before relaxing) + .debug_str 0x0000225c 0x88 THUMB Debug/../../obj/assert.o + 0x27c (size before relaxing) + .debug_str 0x000022e4 0xbf THUMB Debug/../../obj/backdoor.o + 0x2c0 (size before relaxing) + .debug_str 0x000023a3 0x8b THUMB Debug/../../obj/boot.o + 0x2b9 (size before relaxing) + .debug_str 0x0000242e 0x15b THUMB Debug/../../obj/com.o + 0x3c8 (size before relaxing) + .debug_str 0x00002589 0x72 THUMB Debug/../../obj/cop.o + 0x255 (size before relaxing) + .debug_str 0x000025fb 0x225 THUMB Debug/../../obj/xcp.o + 0x50f (size before relaxing) -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e THUMB Debug/../../obj/hooks.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f THUMB Debug/../../obj/main.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/core_cm3.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/system_stm32f10x.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_core.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_init.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_int.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_mem.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_regs.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_sil.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_desc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_endp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_istr.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_prop.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_pwr.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/cpu_comp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/vectors.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/can.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/cpu.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/flash.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/nvm.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/timer.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uart.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/assert.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/backdoor.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/boot.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/com.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/cop.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/xcp.o - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.comment 0x00000000 0x4c + .comment 0x00000000 0x4c THUMB Debug/../../obj/hooks.o + 0x4d (size before relaxing) + .comment 0x0000004c 0x4d THUMB Debug/../../obj/main.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_core.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_init.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_int.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_mem.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_regs.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_sil.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_desc.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_endp.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_istr.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_prop.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb_pwr.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/cpu_comp.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/vectors.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/cpu.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/flash.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/nvm.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/timer.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/usb.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/assert.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/backdoor.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/boot.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/com.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/cop.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/xcp.o .ARM.attributes - 0x00000000 0x10 + 0x00000000 0x31 .ARM.attributes - 0x00000000 0x10 THUMB Debug/../../obj/hooks.o + 0x00000000 0x33 THUMB Debug/../../obj/hooks.o .ARM.attributes - 0x00000010 0x10 THUMB Debug/../../obj/main.o + 0x00000033 0x33 THUMB Debug/../../obj/main.o .ARM.attributes - 0x00000020 0x10 THUMB Debug/../../obj/core_cm3.o + 0x00000066 0x33 THUMB Debug/../../obj/usb_core.o .ARM.attributes - 0x00000030 0x10 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000099 0x33 THUMB Debug/../../obj/usb_init.o .ARM.attributes - 0x00000040 0x10 THUMB Debug/../../obj/usb_core.o + 0x000000cc 0x33 THUMB Debug/../../obj/usb_int.o .ARM.attributes - 0x00000050 0x10 THUMB Debug/../../obj/usb_init.o + 0x000000ff 0x33 THUMB Debug/../../obj/usb_mem.o .ARM.attributes - 0x00000060 0x10 THUMB Debug/../../obj/usb_int.o + 0x00000132 0x33 THUMB Debug/../../obj/usb_regs.o .ARM.attributes - 0x00000070 0x10 THUMB Debug/../../obj/usb_mem.o + 0x00000165 0x33 THUMB Debug/../../obj/usb_sil.o .ARM.attributes - 0x00000080 0x10 THUMB Debug/../../obj/usb_regs.o + 0x00000198 0x33 THUMB Debug/../../obj/usb_desc.o .ARM.attributes - 0x00000090 0x10 THUMB Debug/../../obj/usb_sil.o + 0x000001cb 0x33 THUMB Debug/../../obj/usb_endp.o .ARM.attributes - 0x000000a0 0x10 THUMB Debug/../../obj/usb_desc.o + 0x000001fe 0x33 THUMB Debug/../../obj/usb_istr.o .ARM.attributes - 0x000000b0 0x10 THUMB Debug/../../obj/usb_endp.o + 0x00000231 0x33 THUMB Debug/../../obj/usb_prop.o .ARM.attributes - 0x000000c0 0x10 THUMB Debug/../../obj/usb_istr.o + 0x00000264 0x33 THUMB Debug/../../obj/usb_pwr.o .ARM.attributes - 0x000000d0 0x10 THUMB Debug/../../obj/usb_prop.o + 0x00000297 0x33 THUMB Debug/../../obj/cpu_comp.o .ARM.attributes - 0x000000e0 0x10 THUMB Debug/../../obj/usb_pwr.o + 0x000002ca 0x21 THUMB Debug/../../obj/cstart.o .ARM.attributes - 0x000000f0 0x10 THUMB Debug/../../obj/cpu_comp.o + 0x000002eb 0x33 THUMB Debug/../../obj/vectors.o .ARM.attributes - 0x00000100 0x10 THUMB Debug/../../obj/cstart.o + 0x0000031e 0x33 THUMB Debug/../../obj/cpu.o .ARM.attributes - 0x00000110 0x10 THUMB Debug/../../obj/vectors.o + 0x00000351 0x33 THUMB Debug/../../obj/flash.o .ARM.attributes - 0x00000120 0x10 THUMB Debug/../../obj/can.o + 0x00000384 0x33 THUMB Debug/../../obj/nvm.o .ARM.attributes - 0x00000130 0x10 THUMB Debug/../../obj/cpu.o + 0x000003b7 0x33 THUMB Debug/../../obj/timer.o .ARM.attributes - 0x00000140 0x10 THUMB Debug/../../obj/flash.o + 0x000003ea 0x33 THUMB Debug/../../obj/usb.o .ARM.attributes - 0x00000150 0x10 THUMB Debug/../../obj/nvm.o + 0x0000041d 0x33 THUMB Debug/../../obj/assert.o .ARM.attributes - 0x00000160 0x10 THUMB Debug/../../obj/timer.o + 0x00000450 0x33 THUMB Debug/../../obj/backdoor.o .ARM.attributes - 0x00000170 0x10 THUMB Debug/../../obj/uart.o + 0x00000483 0x33 THUMB Debug/../../obj/boot.o .ARM.attributes - 0x00000180 0x10 THUMB Debug/../../obj/usb.o + 0x000004b6 0x33 THUMB Debug/../../obj/com.o .ARM.attributes - 0x00000190 0x10 THUMB Debug/../../obj/assert.o + 0x000004e9 0x33 THUMB Debug/../../obj/cop.o .ARM.attributes - 0x000001a0 0x10 THUMB Debug/../../obj/backdoor.o - .ARM.attributes - 0x000001b0 0x10 THUMB Debug/../../obj/boot.o - .ARM.attributes - 0x000001c0 0x10 THUMB Debug/../../obj/com.o - .ARM.attributes - 0x000001d0 0x10 THUMB Debug/../../obj/cop.o - .ARM.attributes - 0x000001e0 0x10 THUMB Debug/../../obj/xcp.o - .ARM.attributes - 0x000001f0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .ARM.attributes - 0x00000200 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x0000051c 0x33 THUMB Debug/../../obj/xcp.o -.debug_loc 0x00000000 0x383f - .debug_loc 0x00000000 0x82 THUMB Debug/../../obj/main.o - .debug_loc 0x00000082 0x2ae THUMB Debug/../../obj/core_cm3.o - .debug_loc 0x00000330 0x165 THUMB Debug/../../obj/system_stm32f10x.o - .debug_loc 0x00000495 0x9e0 THUMB Debug/../../obj/usb_core.o - .debug_loc 0x00000e75 0x20 THUMB Debug/../../obj/usb_init.o - .debug_loc 0x00000e95 0x125 THUMB Debug/../../obj/usb_int.o - .debug_loc 0x00000fba 0x29a THUMB Debug/../../obj/usb_mem.o - .debug_loc 0x00001254 0x672 THUMB Debug/../../obj/usb_regs.o - .debug_loc 0x000018c6 0xf6 THUMB Debug/../../obj/usb_sil.o - .debug_loc 0x000019bc 0x60 THUMB Debug/../../obj/usb_endp.o - .debug_loc 0x00001a1c 0x20 THUMB Debug/../../obj/usb_istr.o - .debug_loc 0x00001a3c 0x1e9 THUMB Debug/../../obj/usb_prop.o - .debug_loc 0x00001c25 0x12e THUMB Debug/../../obj/usb_pwr.o - .debug_loc 0x00001d53 0x20 THUMB Debug/../../obj/vectors.o - .debug_loc 0x00001d73 0x139 THUMB Debug/../../obj/cpu.o - .debug_loc 0x00001eac 0x6f6 THUMB Debug/../../obj/flash.o - .debug_loc 0x000025a2 0x13f THUMB Debug/../../obj/nvm.o - .debug_loc 0x000026e1 0x40 THUMB Debug/../../obj/timer.o - .debug_loc 0x00002721 0x557 THUMB Debug/../../obj/usb.o - .debug_loc 0x00002c78 0x46 THUMB Debug/../../obj/assert.o - .debug_loc 0x00002cbe 0x40 THUMB Debug/../../obj/backdoor.o - .debug_loc 0x00002cfe 0x40 THUMB Debug/../../obj/boot.o - .debug_loc 0x00002d3e 0xc6 THUMB Debug/../../obj/com.o - .debug_loc 0x00002e04 0x247 THUMB Debug/../../obj/xcp.o - .debug_loc 0x0000304b 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) +.debug_loc 0x00000000 0x2e82 + .debug_loc 0x00000000 0xa8b THUMB Debug/../../obj/usb_core.o + .debug_loc 0x00000a8b 0xa3 THUMB Debug/../../obj/usb_int.o + .debug_loc 0x00000b2e 0x2dd THUMB Debug/../../obj/usb_mem.o + .debug_loc 0x00000e0b 0xbda THUMB Debug/../../obj/usb_regs.o + .debug_loc 0x000019e5 0xcf THUMB Debug/../../obj/usb_sil.o + .debug_loc 0x00001ab4 0x1bf THUMB Debug/../../obj/usb_prop.o + .debug_loc 0x00001c73 0xaa THUMB Debug/../../obj/usb_pwr.o + .debug_loc 0x00001d1d 0x123 THUMB Debug/../../obj/cpu.o + .debug_loc 0x00001e40 0x740 THUMB Debug/../../obj/flash.o + .debug_loc 0x00002580 0xa5 THUMB Debug/../../obj/nvm.o + .debug_loc 0x00002625 0x427 THUMB Debug/../../obj/usb.o + .debug_loc 0x00002a4c 0x42 THUMB Debug/../../obj/assert.o + .debug_loc 0x00002a8e 0x42 THUMB Debug/../../obj/com.o + .debug_loc 0x00002ad0 0x3b2 THUMB Debug/../../obj/xcp.o diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.srec b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.srec index c496e3c8..2c29c843 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.srec +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.srec @@ -1,759 +1,625 @@ S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF -S31508000000EC090020510100089919000899190008FF -S3150800001099190008991900089919000899190008EA -S3150800002099190008991900089919000899190008DA -S3150800003099190008991900089919000899190008CA -S3150800004099190008991900089919000899190008BA -S3150800005099190008991900089919000899190008AA -S31508000060991900089919000899190008991900089A -S31508000070991900089919000899190008991900088A -S31508000080991900089919000899190008991900087A -S31508000090991900089919000899190008991900086A -S315080000A0991900089919000899190008991900085A -S315080000B0991900089919000899190008991900084A -S315080000C0991900089919000899190008991900083A -S315080000D0991900089919000899190008991900082A -S315080000E0991900089919000899190008991900081A -S315080000F0991900089919000899190008991900080A -S3150800010099190008991900089919000899190008F9 -S3150800011099190008991900089919000899190008E9 -S3150800012099190008991900089919000899190008D9 -S3150800013099190008991900089919000899190008C9 -S3150800014099190008991900089919000899190008B9 -S3150800015028498D4628482949294A00F039F8294866 -S3150800016029492A4A00F034F829482A492A4A00F037 -S315080001702FF82A482A492B4A00F02AF82A482B49F8 -S315080001802B4A00F025F82B482B492C4A00F020F87A -S315080001902B482C49002200F026F82B482B49091A2F -S315080001A0082903DB00220260043001601C481D494F -S315080001B0884205D00268043003B4904703BCF7E7C9 -S315080001C000208646EC4600200021214A9047FEE79B -S315080001D0884207D0521A05D0037801300B700131D6 -S315080001E0013AF9D17047884202D002700130FAE725 -S315080001F070470000EC090020402E0008000000208F -S31508000200F000002054020008540200087C2B000865 -S31508000210402E000800000020000000207C2B00086B -S315080002207C2B00087C2B00087C2B00087C2B000804 -S315080002307C2B00087C2B00087C2B0008402E00082D -S31508000240F00000206C0700206C070020EC07002057 -S30908000250C1020008D1 -S31508000254C0B240F2F003C2F200031B78D3B94FF4DC -S315080002648053C4F202039A6942F010029A614FF469 -S315080002748053C4F201035A6822F470425A605A68D9 -S3150800028442F4E0425A6040F2F003C2F200034FF02F -S3150800029401021A7001284FF48053C4F201034FF483 -S315080002A400620CBF5A611A61704700BF4FF40063BD -S315080002B4C4F20103986800F00100704700B582B0E3 -S315080002C44FF00003009301934FF48053C4F20203E2 -S315080002D41A6842F001021A6059684FF00002CFF614 -S315080002E4FF020A405A601A6822F0847222F48032A5 -S315080002F41A601A6822F480221A605A6822F4FE02E6 -S315080003045A604FF41F029A601A6842F480321A60DF -S315080003144FF48053C4F2020340F2DC52196801F424 -S3150800032400310191009901F101010091019911B976 -S3150800033400999142F2D14FF48053C4F202031B6828 -S3150800034413F4003F04D136484FF0670102F0F4F87D -S315080003544FF40053C4F202031A6842F010021A60FA -S315080003641A6822F003021A601A6842F002021A6036 -S315080003744FF48053C4F202035A685A605A6842F426 -S3150800038400525A605A6842F480625A605A6822F4E3 -S315080003947C125A605A6842F4E8125A601A6842F0A3 -S315080003A480721A604FF48053C4F202031A6812F07A -S315080003B4007FFBD04FF48053C4F202035A6822F03C -S315080003C403025A605A6842F002025A604FF4805394 -S315080003D4C4F202035A6802F00C02082AFAD14FF44E -S315080003E48053C4F202039A6942F004029A614FF4F4 -S315080003F40062C4F20102116821F00F01116011684C -S3150800040441F0040111605A6822F480025A60DA69DC -S3150800041442F40002DA6102F0C9F802F0D7F8FCE700 -S315080004247C2B000800B580B248B940F22413C2F206 -S3150800043400031B684FF001021A835DF804FB40F2BF -S315080004442813C2F200031B681B68984740F224135A -S31508000454C2F20003186800F112005DF804FB00BF3D -S3150800046400B580B248B940F22413C2F200031B68EF -S315080004744FF001021A835DF804FB40F22813C2F216 -S3150800048400031B689B68984740F22413C2F20003D2 -S31508000494186800F114005DF804FB00BF00B580B2CB -S315080004A448B940F22413C2F200031B684FF0020253 -S315080004B41A835DF804FB40F2F803C2F200034FF016 -S315080004C400021A8040F22413C2F200031A68137851 -S315080004D413F07F031BD1537C13F0200F40F2F8026C -S315080004E4C2F20002117814BF41F0020121F00201A0 -S315080004F4117013F0400F40F2F803C2F200031A78A1 -S3150800050414BF42F0010222F001021A7031E0012BF5 -S315080005143CD0022B40D1537A03F00F0213F0800F1C -S3150800052413D04FEA820202F1804202F5B8421368F8 -S3150800053403F03003102B1CD140F2F803C2F2000377 -S315080005441A7842F001021A7013E04FEA820202F1A5 -S31508000554804202F5B842136803F44053B3F5805F4A -S3150800056407D140F2F803C2F200031A7842F00102F6 -S315080005741A7040F22813C2F200031B681B699847D5 -S3150800058440F2F800C2F200005DF804FB40F2F800FD -S31508000594C2F200005DF804FB4FF000005DF804FBAE -S315080005A4F0B540F22413C2F200031C68238B227CA4 -S315080005B48BBB042A64D140F2F403C2F200031B681D -S315080005C4012B1ED145F65043C4F200031A6892B2B1 -S315080005D443F20203C2F20003D3184FEA43034FF06F -S315080005E400021A6040F23613C2F200034FF03001DB -S315080005F4198040F2F403C2F200031A604FF00406AD -S3150800060437E040F23613C2F200034FF010021A80A4 -S315080006144FF007062DE0A58BAB428CBF02260426B5 -S315080006249D4228BF1D46236A2846984707464FF029 -S31508000634000000F06BFF014638462A4600F04CFEDF -S315080006444FF00000294600F085FF238B5B1B2383AC -S31508000654638BED18658340F23613C2F200034FF03C -S3150800066430021A8040F23413C2F200034FF44052A7 -S315080006741A8040F22413C2F200031B681E74F0BDEC -S31508000684A58B4FF00406CBE700B540F22413C2F25B -S3150800069400031A68517940F2E803C2F200035B7852 -S315080006A48B420FD313798BB913899BB9917440F292 -S315080006B42813C2F200031B685B6898474FF00000D2 -S315080006C45DF804FB4FF002005DF804FB4FF00200EE -S315080006D45DF804FB4FF002005DF804FB10B540F228 -S315080006E42414C2F20004226840F23013C2F2000352 -S315080006F41B68507A51799B69984723689A7C9AB102 -S31508000704A8B91A7AB2B91B79BBB940F22813C2F24E -S3150800071400031B68DB68984723685A7ADA745A799F -S315080007241A754FF0000010BD4FF0020010BD4FF0CF -S31508000734020010BD4FF0020010BD4FF0020010BDBC -S3150800074410B540F22413C2F200031A68137813F0A2 -S315080007547F0306D1537C23F0200353744FF0000023 -S3150800076410BD022B70D19388002B70D1137A002BFD -S3150800077470D1507A20F0800110F0800F4FEA81037F -S3150800078403F1804303F5B84319BF1C6804F0300429 -S315080007941B6803F4405440F2E803C2F200031B78D2 -S315080007A499425AD2002C5BD0937C002B5BD010F074 -S315080007B4800F14D04FEA810303F1804303F5B8434D -S315080007C41B6803F03003102B37D1CCB2204600F057 -S315080007D45DFE20464FF0300100F0CCFD2DE04FEAD7 -S315080007E4810404F1804404F5B844236803F44053AF -S315080007F4B3F5805F21D191B91C4B93F82C104FF0B7 -S31508000804000000F0BBFE22684BF68F73134083F496 -S31508000814405343F4004343F0800323600DE0C8B219 -S3150800082400F01EFE22684BF68F73134083F4405380 -S3150800083443F4004343F0800323600D4B1B685B6954 -S3150800084498474FF0000010BD4FF0020010BD4FF05E -S31508000854020010BD4FF0020010BD4FF0020010BD9B -S315080008644FF0020010BD4FF0020010BD5C000020DE -S315080008742801002010B540F22413C2F200031868B8 -S31508000884427A22F0800112F0800F4FEA810303F1C5 -S31508000894804303F5B84319BF1C6804F030041B6889 -S315080008A403F4405440F2E803C2F200031B78994269 -S315080008B437D28388002B37D1002C38D0837C002B81 -S315080008C438D012F0800F11D04FEA810202F180422B -S315080008D402F5B842116848F6BF730B4083F010035B -S315080008E443F4004343F08003136010E04FEA8102A7 -S315080008F402F1804202F5B84211684BF68F730B4039 -S3150800090483F4805343F4004343F08003136040F2B6 -S315080009142813C2F200031B689B6998474FF000002E -S3150800092410BD4FF0020010BD4FF0020010BD4FF08D -S31508000934020010BD4FF0020010BD00BF00B540F222 -S315080009442413C2F200031B685A7C42F020025A742C -S3150800095440F22813C2F200031B68DB6998474FF07C -S3150800096400005DF804FB00BF80B240F22413C2F213 -S3150800097400031B685A8B28B98888821A1A834FF091 -S315080009840000704708688018704700BF00B540F239 -S315080009945C03C2F2000393F82C104FF0000000F039 -S315080009A4EDFD40F22413C2F200031B68187C0828E4 -S315080009B40DD140F23413C2F200034FF480521A8068 -S315080009C440F23613C2F200034FF010021A800928C7 -S315080009D414BF002001205DF804FB00BF70B540F287 -S315080009E42413C2F200031C68237C022B7DD0042B3B -S315080009F47ED0032B01D0052B6BD1228B236AB3B18E -S31508000A04AAB1A58B954228BF154628469847064697 -S31508000A14238B5B1B2383638BEB1863834FF00000E4 -S31508000A2400F086FD014630462A4600F071FC238B09 -S31508000A3493B140F23413C2F200034FF440521A80C1 -S31508000A444FF00000014600F085FD40F23613C2F26D -S31508000A5400034FF030021A80238BA28B9A4208D8DF -S31508000A6440F22413C2F200031B684FF003021A74FF -S31508000A7428E043B140F22413C2F200031B684FF086 -S31508000A8405021A741EE040F22413C2F200031B681E -S31508000A944FF006021A7445F65043C4F200031A6866 -S31508000AA492B243F20203C2F20003D3184FEA430395 -S31508000AB44FF000021A6040F23613C2F200034FF0F8 -S31508000AC430021A8040F22413C2F200031B681A7C0F -S31508000AD413E0072B0FD140F23013C2F200031B6850 -S31508000AE4DB6898474FF0080207E04FF0080204E075 -S31508000AF44FF0080201E04FF0080240F22413C2F254 -S31508000B0400031B681A74FFF741FF70BD70B581B006 -S31508000B1445F65043C4F200031A6892B243F204033A -S31508000B24C2F20003D3184FEA43031D6840F22413A4 -S31508000B34C2F200031B681A7C092A1CD0ADB205F15F -S31508000B44005505F540554FEA45052A781A7040F2CE -S31508000B542414C2F2000423686A785A702668A8889E -S31508000B6400F04EFDB0802668288900F049FD3081E2 -S31508000B74AA8923689A8140F22413C2F200031B68E7 -S31508000B844FF001021A749989002940F082805C7832 -S31508000B941A7812F07F022CD1092C02D1FFF774FDC2 -S31508000BA439E0052C0DD193F90520002A59DB1A7969 -S31508000BB4002A59D11A89002A59D19B7C002B36D090 -S31508000BC458E0032C07D15A79012A25D11B891BBB66 -S31508000BD4FFF7B4FE1FE0012C1ED15A79012A1BD156 -S31508000BE41A89CAB95B7C13F0200F15D0FFF7A8FD44 -S31508000BF411E0012A04D10B2C0ED1FFF76FFD0AE090 -S31508000C04022A09D1012C02D1FFF79AFD03E0032C2D -S31508000C1402D1FFF72FFE50B140F23013C2F200039F -S31508000C241B685B6920469847032826D040BB45F6CF -S31508000C345043C4F200031A6892B243F20203C2F2A2 -S31508000C440003D3184FEA43034FF000021A6040F238 -S31508000C543613C2F200034FF030021A804FF0060230 -S31508000C6410E04FF008020DE04FF008020AE04FF0DA -S31508000C74080207E04FF0080204E04FF0090201E019 -S31508000C844FF0080240F22413C2F200031B681A74D8 -S31508000C940EE15A78062A20D11A7812F07F0F40F00E -S31508000CA494801B79012B06D140F23013C2F200035B -S31508000CB41B68DB697CE0022B06D140F23013C2F2D2 -S31508000CC400031B681B6A73E0032B7ED140F23013C2 -S31508000CD4C2F200031B685B6A6AE0002A46D1988858 -S31508000CE4002843D1022941D1187A00283ED11A781E -S31508000CF412F07F0204D11989002900F0DD8014E07E -S31508000D04012A12D140F23012C2F200021268587A4D -S31508000D1493694FF000019847002856D16E4B1B681B -S31508000D249B7C002B40F0CD804FE0022A4DD15A7AA5 -S31508000D3402F00F0112F0800F4FEA810303F180439A -S31508000D4403F5B843186814BF00F0300000F44050A7 -S31508000D5440F2E803C2F200031B78994235D212F036 -S31508000D64700F32D1002840F0AE802EE0082A05D153 -S31508000D741B7813F07F0F00F0A88026E00A2A24D1F6 -S31508000D841A7802F07F02012A1FD19A7CEAB19A885E -S31508000D94DAB91A7ACAB9012917D1504A1268587A9F -S31508000DA493694FF000019847002800F093800CE0FF -S31508000DB45BB140F22412C2F2000212684FF000043A -S31508000DC4548313622046984718E040F23013C2F25F -S31508000DD400031A6840F22413C2F200031B68587809 -S31508000DE4136998470446032808D140F22413C2F22B -S31508000DF400031B684FF009021A7459E040F22413E1 -S31508000E04C2F200031B681A8B4FF6FF718A4203D19C -S31508000E144FF009021A744BE0022C00D01AB94FF0AD -S31508000E2408021A7444E093F90010002936DA9989FD -S31508000E3400910098824202D9009A1A831EE08A42D7 -S31508000E441CD240F23013C2F200031B6893F82C300C -S31508000E549A4207D240F2F403C2F200034FF00002AA -S31508000E641A600BE092FBF3F103FB112333B940F24A -S31508000E74F403C2F200034FF001021A6040F224138D -S31508000E84C2F200031A6840F23013C2F200031B6868 -S31508000E9493F82C309383FFF783FB09E04FF00302A2 -S31508000EA41A7440F23413C2F200034FF440521A8003 -S31508000EB4FFF76CFD01B070BD40F2A143C0F6000314 -S31508000EC477E7074B75E7064B73E740F22943C0F605 -S31508000ED400036EE7034B6CE7240100203001002071 -S31508000EE4A10400086504000870B4C0B240F2E8031F -S31508000EF4C2F200031D78B5B14FF0000340F60F7631 -S31508000F04DAB24FEA820101F1804101F5B8410C6871 -S31508000F1442F4004242F08002344022430A6003F15C -S31508000F2401039D42ECD840F0800045F64C43C4F2D8 -S31508000F340003186070BC704700B540F22413C2F26F -S31508000F4400031A68137C022B01D0042B08D1FFF77F -S31508000F5427FB40F22413C2F200031B681A7C1EE026 -S31508000F64062B1AD15378052B0DD1137813F07F0F5E -S31508000F7409D15079FFF7B8FF40F22813C2F20003EB -S31508000F841B681B6A984740F23013C2F200031B68B9 -S31508000F949B6898474FF0080201E04FF0080240F2B8 -S31508000FA42413C2F200031B681A74FFF7EFFC5DF8FA -S31508000FB404FB00BF704700BF00B540F22412C2F21A -S31508000FC4000240F2FC03C2F2000313604FF002026F -S31508000FD41A7440F23012C2F2000240F25C03C2F202 -S31508000FE40003136040F22812C2F2000240F28C0198 -S31508000FF4C2F2000111601B6898475DF804FB00BF44 -S3150800100430B581B04FF00003ADF8023040F23A141F -S31508001014C2F2000440F22015C2F200054EE123880C -S3150800102403F00F032B70002B40F00F814FF4B842E6 -S31508001034C4F20002116889B240F23413C2F2000302 -S315080010441980188800F0300040F23611C2F2000107 -S315080010540880198801F44051198011684BF6BF734A -S315080010640B4083F4005383F0200343F4004343F016 -S3150800107480031360238813F0100F46D14FF4B84445 -S31508001084C4F20004226848F60F7313402360FFF77E -S3150800109453FF22684BF6BF73134040F23412C2F270 -S315080010A40002128802F4805292B20AB183F4805381 -S315080010B440F23412C2F20002128802F4005292B2CA -S315080010C40AB183F4005340F23612C2F200021288BF -S315080010D402F0100292B20AB183F0100340F23612FB -S315080010E4C2F20002128802F0200292B20AB183F018 -S315080010F4200348F28002CFF6FF721A4392B24FF4E5 -S31508001104B843C4F200031A60E3E04FF4B843C4F2E8 -S3150800111400031B689BB2ADF80230BDF8023013F425 -S31508001124006F46D04FF4B844C4F20004226840F66F -S315080011348F7313402360FFF7E9FC22684BF6BF73ED -S31508001144134040F23412C2F20002128802F48052AA -S3150800115492B20AB183F4805340F23412C2F2000206 -S31508001164128802F4005292B20AB183F4005340F290 -S315080011743612C2F20002128802F0100292B20AB1C2 -S3150800118483F0100340F23612C2F20002128802F00B -S31508001194200292B20AB183F0200348F28002CFF605 -S315080011A4FF721A4392B24FF4B843C4F200031A60AA -S315080011B48FE0BDF802301BB2002B7FDA4FF4B84437 -S315080011C4C4F20004226840F68F7313402360FFF7C5 -S315080011D405FC22684BF6BF73134040F23412C2F280 -S315080011E40002128802F4805292B20AB183F4805340 -S315080011F440F23412C2F20002128802F4005292B289 -S315080012040AB183F4005340F23612C2F2000212887D -S3150800121402F0100292B20AB183F0100340F23612B9 -S31508001224C2F20002128802F0200292B20AB183F0D6 -S31508001234200348F28002CFF6FF721A4392B24FF4A3 -S31508001244B843C4F200031A6043E04FEA830303F188 -S31508001254804303F5B8431A6892B2ADF80220BDF884 -S31508001264022012B2002A0EDA196840F68F720A4072 -S315080012741A6040F23803C2F200032A7802F1FF32F8 -S3150800128453F822309847BDF8023013F0800F15D072 -S315080012942A784FEA820202F1804202F5B8421168BE -S315080012A448F60F730B40136040F21C03C2F20003A6 -S315080012B42A7802F1FF3253F82230984745F6444318 -S315080012C4C4F200031B689BB2238013F4004F7FF417 -S315080012D4A6AE01B030BD00BF30B489B292B202F1F5 -S315080012E40102521011D001F1005101F540554FEA9F -S315080012F445054FF00003447810F8021B41EA04211F -S31508001304595303F10403013AF5D130BC704700BFC1 -S3150800131410B489B292B202F1010252100ED001F150 -S31508001324005101F540514FEA41014FF0000351F8CD -S31508001334044BC45203F10203013AF8D110BC7047B6 -S315080013444FF6F873034045F65042C4F200021360A0 -S31508001354704700BFC0B289B24FEA800000F18040EE -S3150800136400F5B840026848F68F1313400B43036030 -S31508001374704700BFC0B289B24FEA800000F18040CE -S3150800138400F5B840026848F6BF73134001F010022E -S3150800139492B20AB183F0100301F0200189B209B1AF -S315080013A483F0200343F4004343F08003036070474B -S315080013B4C0B289B24FEA800000F1804000F5B84017 -S315080013C402684BF68F73134001F4805292B20AB145 -S315080013D483F4805301F4005189B209B183F40053AC -S315080013E443F4004343F0800303607047C2B24FEAF4 -S315080013F4820202F1804202F5B842116848F6BF73C8 -S315080014040B4083F0300343F4004343F08003136036 -S31508001414704700BFC2B24FEA820202F1804202F567 -S31508001424B84211684BF68F730B4083F4405343F468 -S31508001434004343F080031360704700BFC2B24FEA0B -S31508001444820202F1804202F5B842116840F60F633F -S315080014540B4043F4004343F080031360704700BF16 -S31508001464C3B24FEA830303F1804303F5B8431A680A -S3150800147412F4804F08D0196840F60F720A4042F4F5 -S31508001484404242F080021A60704700BFC3B24FEA76 -S31508001494830303F1804303F5B8431A6812F0400F37 -S315080014A408D0196840F60F720A4042F4004242F026 -S315080014B4C0021A60704700BFC0B245F65043C4F272 -S315080014C400031A6892B202EBC00202F1005202F556 -S315080014D440524FEA42024FF6FE730B4013607047C0 -S315080014E4C0B245F65043C4F200031B689BB203EB33 -S315080014F4C00043F20403C2F20003C3184FEA4303CD -S315080015044FF6FE720A401A60704700BFC0B245F62D -S315080015145043C4F200031B689BB203EBC00303F1F8 -S31508001524005303F540534FEA43031888704700BF36 -S31508001534C0B245F65043C4F200031B689BB203EBE2 -S31508001544C00043F20403C2F20003C3184FEA43037C -S3150800155418887047C0B289B245F65043C4F20003EE -S315080015641B689BB203EBC00043F20203C2F20003FA -S31508001574C3184FEA43031960704700BFC0B289B263 -S3150800158445F65043C4F200031B689BB203EBC00044 -S3150800159443F20603C2F20003C3184FEA43033E2983 -S315080015A40DD94FEA511211F01F0F04BF02F1FF3291 -S315080015B492B24FEA822242F400421A6070474FEA16 -S315080015C4510211F0010F18BF01324FEA82221A6044 -S315080015D4704700BFC0B245F65043C4F200031B6807 -S315080015E49BB203EBC00043F20603C2F20003C3181E -S315080015F44FEA430318684FEA80504FEA9050704701 -S3150800160480B2C3B24FEA102040EA0320704700BFF5 -S3150800161445F64443C4F200034FF00000186040F254 -S315080016242C13C2F200034FF406421A8045F64043CF -S31508001634C4F200031A60704770B50E4600F07F05C1 -S315080016442846FFF7C7FF04462846FFF771FF0146F9 -S3150800165430462246FFF75CFE204670BD00B500F012 -S31508001664BBFE5DF804FB00BF00B500F013FF5DF890 -S3150800167404FB00BF00B540F23C13C2F200031B682A -S31508001684052B01D100F0A8FE5DF804FB00B545F66C -S315080016944443C4F200031A6892B240F23A13C2F2FF -S315080016A400031A801A8840F22C13C2F200031B881E -S315080016B4134013F4007F11D045F64443C4F20003E3 -S315080016C44FF6FF521A6040F23813C2F200031A7832 -S315080016D402F10102D2B21A70FFF7CCFF40F23A13B4 -S315080016E4C2F200031A8840F22C13C2F200031B88C4 -S315080016F4134013F4004F01D0FFF782FC40F23A136B -S31508001704C2F200031A8840F22C13C2F200031B88A3 -S31508001714134013F4806F0CD045F64443C4F2000317 -S315080017244FF6FF321A6040F25C03C2F200035B68AC -S3150800173498475DF804FB00BF40F2FC03C2F20003BD -S315080017449B7C33B140F23C13C2F200034FF005020E -S315080017541A60704740F23C13C2F200034FF00402C9 -S315080017641A607047704700BF704700BF10B5C0B213 -S31508001774062811D140F22413C2F200031B681A7812 -S3150800178402F07F02012A0AD15A7A5AB91A79212A09 -S315080017940BD04FF0020010BD4FF0020010BD4FF001 -S315080017A4020010BD4FF0020010BD41F2E972C0F606 -S315080017B400021A624FF000045C83204600F012F817 -S315080017C4204610BD4FF00200704700BFC0B2C9B230 -S315080017D421B9002814BF0220002070474FF00200E8 -S315080017E4704700BF00B580B240F2B001C2F20001F2 -S315080017F4FFF7BAF85DF804FB00B580B240F224138B -S31508001804C2F200031B685B79052B09D840F2C001B4 -S31508001814C2F2000101EBC301FFF7A6F85DF804FB69 -S315080018244FF000005DF804FB00B580B240F25401A5 -S31508001834C2F20001FFF798F85DF804FB00B580B220 -S3150800184440F2B801C2F20001FFF78EF85DF804FB16 -S3150800185410B540F22413C2F200031B684FF00004CB -S315080018649C7442F62042C0F60002D2795A74DC749B -S315080018742046FFF765FD20464FF40071FFF76AFD21 -S3150800188420464FF01001FFF775FD20464FF0400142 -S31508001894FFF726FE20464FF08001FFF70DFE20468F -S315080018A4FFF7CCFD40F25C03C2F2000393F82C1058 -S315080018B42046FFF763FE2046FFF7ACFD4FF0010014 -S315080018C42146FFF747FD4FF001004FF48071FFF7FB -S315080018D4F3FD4FF001004FF0C001FFF701FE4FF092 -S315080018E401004FF04001FFF735FE4FF001004FF0BD -S315080018F44001FFF743FE4FF001004FF44051FFF754 -S3150800190457FD4FF001004FF02001FFF733FD204645 -S31508001914FFF7EAFA40F23C13C2F200034FF0010261 -S315080019241A6010BD10B500F0E5FD40F22413C2F2AA -S3150800193400031B684FF000049C7400F009F8FFF7D5 -S3150800194467FE40F23C13C2F200031C6010BD00BFE0 -S3150800195400B54FF00100FEF77BFC45F64043C4F2A0 -S3150800196400034FF001021A6040F22C12C2F2000280 -S315080019744FF00000186045F64441C4F200010860BF -S315080019844FF4E051118019605DF804FB72B6704794 -S3150800199462B6704700B542F68840C0F600004FF0BC -S315080019A4380100F0C9FD5DF804FB00BF00B5FFF778 -S315080019B4EDFF5DF804FB00BF10B500F001FBB8B1FC -S315080019C4FEF774FCA0B100F033FE00F011FB00F042 -S315080019D4FDFA20F0604020F07F004EF60853CEF260 -S315080019E40003186000F0F2FA4468FFF7D1FFA04735 -S315080019F410BD00BF70B50E4692B272B1044600F12E -S31508001A04010002F1FF3292B2851816F8013B04F878 -S31508001A14013B00F057FEAC42F7D170BD4FF40053BA -S31508001A24C4F2020340F22312C4F267525A6048F61B -S31508001A34AB12CCF6EF525A604FF03402DA607047B4 -S31508001A444FF40053C4F202031A6942F080021A6181 -S31508001A54704700BF70B5064642F61855C0F600052D -S31508001A644FF0000400F02EFE2B68B3420DD86968C7 -S31508001A745B189E4209D242F61853C0F6000304EBDB -S31508001A84440203EB8203187A70BD04F1010405F1DC -S31508001A940C050D2CE6D14FF0FF0070BD2DE9F04181 -S31508001AA407460068FFF7D6FFFF2855D0FFF7B6FFAD -S31508001AB44FF40053C4F20203DB6813F0010F04D099 -S31508001AC4FFF7BEFF4FF0000448E04FF40053C4F29A -S31508001AD402031A6942F001021A614FF000054FF435 -S31508001AE40054C4F202043B6805EB030805F104023A -S31508001AF4BE58B2B2EA52E36813F0010F05D000F0FB -S31508001B04E1FDE36813F0010FF9D14FEA1643A8F88B -S31508001B140230E36813F0010F05D000F0D3FDE36843 -S31508001B2413F0010FF9D1D8F80030B34207D105F103 -S31508001B340405B5F5007FD6D14FF0010401E04FF056 -S31508001B4400044FF40053C4F202031A6922F0010296 -S31508001B541A61FFF775FF01E04FF000042046BDE85F -S31508001B64F08100BF70B5C6B242F61855C0F6000536 -S31508001B744FF0000400F0A6FD2B7AB34208D142F6D2 -S31508001B841853C0F6000304EB440253F8220070BD50 -S31508001B9404F1010405F10C050D2CEBD14FF0FF30CF -S31508001BA470BD00BF00B54FEAC1534FEAD35363B9BA -S31508001BB403688B420DD040F8041B4FF40072FFF7FC -S31508001BC419FF4FF001005DF804FB4FF000005DF8C3 -S31508001BD404FB4FF001005DF804FB00BF30B5044672 -S31508001BE40D4640F24013C2F20003984209D04FF45E -S31508001BF4C043C0F60003994208D0FFF74FFF48B91F -S31508001C0410E040F24434C2F2000403E040F2401407 -S31508001C14C2F2000420462946FFF7C4FF002808BF7D -S31508001C24002401E04FF00004204630BD2DE9F043BE -S31508001C3405460C4617461E464FEA51294FEA4929D6 -S31508001C440368B3F1FF3F03D14946FFF7ABFF50B32F -S31508001C542B684B4505D028464946FFF7BFFF05467E -S31508001C6428B32B68E41A04F104042C1940F2FF186B -S31508001C7409F5007900F026FD05F10403E31A434546 -S31508001C8407D928464946FFF7A9FF054698B100F142 -S31508001C94040417F8013B04F8013B013EEAD14FF06E -S31508001CA40100BDE8F0834FF00000BDE8F0834FF073 -S31508001CB40000BDE8F0834FF00000BDE8F08300BFE4 -S31508001CC440F24433C2F200034FF0FF321A6040F286 -S31508001CD44013C2F200031A60704700BF70B5044689 -S31508001CE40D461646FFF7B6FEFF281DD004F1FF3051 -S31508001CF44019FFF7AFFEFF2819D04FEA54224FF4D4 -S31508001D04C043C0F60003B3EB422F07BF40F24010AE -S31508001D14C2F2000040F24430C2F2000021463246C4 -S31508001D242B46FFF783FF70BD4FF0000070BD4FF0E0 -S31508001D34000070BD2DE9F04104460E46FFF78AFE01 -S31508001D44054604F1FF34A019FFF784FE0446064647 -S31508001D54FF2D00F08780FF2800F08880854275D81B -S31508001D64022D77D90F2879D8FFF758FE4FF4005378 -S31508001D74C4F20203DB6813F0010F05D0FFF760FE17 -S31508001D844FF00000BDE8F0814FF40053C4F202039B -S31508001D941A6942F002021A612846FFF7E3FE07466B -S31508001DA42046FFF7DFFE804642F61855C0F60005C2 -S31508001DB44FF0000400F086FC2B7AB34209D142F6B0 -S31508001DC41853C0F6000304EB440203EB82035B6872 -S31508001DD407E004F1010405F10C050D2CEAD14FF0D6 -S31508001DE40003C7EB08084344C3F38F2303B303F183 -S31508001DF4FF339EB206F101064FEA86264FF0000528 -S31508001E044FF40054C4F20204EB196361236943F0E6 -S31508001E1440032361E36813F0010F05D000F052FC78 -S31508001E24E36813F0010FF9D105F58065B542EBD1E6 -S31508001E344FF40053C4F202031A6922F002021A612B -S31508001E44FFF7FEFD4FF00100BDE8F0814FF00000FA -S31508001E54BDE8F0814FF00000BDE8F0814FF00000C6 -S31508001E64BDE8F0814FF00000BDE8F0814FF00000B6 -S31508001E74BDE8F08100B581B040F24013C2F2000318 -S31508001E841B68B3F1FF3F1FD040F24013C2F20003B0 -S31508001E9499685A688918DA6889181A6989185A6902 -S31508001EA489189A698918DA698B18C3F1000301AA93 -S31508001EB442F8043D46F25010C0F600004FF0040103 -S31508001EC46A46FFF70BFF01E04FF0010001B000BDC1 -S31508001ED446F20402C0F600024FF4C043C0F60003FB -S31508001EE410681B68C01846F20803C0F600031B688E -S31508001EF4C01846F20C03C0F600031B68C01846F265 -S31508001F041003C0F600031B68C01846F21403C0F693 -S31508001F1400031B68C01846F21803C0F600031B68C2 -S31508001F24C01846F25013C0F600031B68C018D0F157 -S31508001F34010038BF0020704700B540F24013C2F2D2 -S31508001F4400031B68B3F1FF3F06D040F24010C2F20B -S31508001F540000FFF7A3FD90B140F24433C2F2000338 -S31508001F641B68B3F1FF3F0ED040F24430C2F20000C2 -S31508001F74FFF794FD003018BF01205DF804FB4FF00D -S31508001F8400005DF804FB4FF001005DF804FB00BF98 -S31508001F944FF4C040C0F60000704700BF00B5FFF715 -S31508001FA48FFE5DF804FB00BF00B5FFF797FE5DF8EA -S31508001FB404FB00BF00B5FFF7BDFE5DF804FB00BFD8 -S31508001FC400B5FFF785FF5DF804FB00BF00B5FFF712 -S31508001FD4DFFF5DF804FB00BF00B5FFF74BFF18B140 -S31508001FE4FFF7AAFF5DF804FB4FF000005DF804FB59 -S31508001FF44EF21003CEF200034FF000021A60704747 -S3150800200400B5FFF7F5FF4EF21003CEF2000341F6D2 -S315080020143F12C0F201025A604FF000029A604FF074 -S315080020240501196040F24853C2F200031A605DF8CC -S3150800203404FB00BF4EF21003CEF200031B6813F430 -S31508002044803F07D040F24853C2F200031A6802F1EF -S3150800205401021A60704700BF00B5FFF7EBFF40F2B4 -S315080020644853C2F2000318685DF804FB10B4D2B2F0 -S31508002074BAB10B4601F1020102F1FF32D2B201EB09 -S3150800208442014FF000044FEA1072092A94BF303215 -S3150800209437321A704FEA00105C7003F102038B4260 -S315080020A4F1D110BC704700BF10B4C9B240F2D45382 -S315080020B4C2F200031B6893B140F2D452C2F2000282 -S315080020C45C69146019749860D8604FF000025A74F9 -S315080020D4186001F1FF3140185860987C01E04FF010 -S315080020E4FF0010BC704700BF30B5C4B2CDB2012C96 -S315080020F407D942F6B450C0F600004FF4FC7100F05C -S315080021041BFA40F2D853C2F2000304EB440203EB71 -S31508002114C2035A7C1B7C9A4222D040F2D853C2F29C -S31508002124000304EB440203EBC203DA681570597C16 -S3150800213401F101015974DA6802F10102DA605B6897 -S315080021449A4210D940F2D853C2F2000304EB44046D -S315080021544FEAC4041A191B59D3604FF0010030BD65 -S315080021644FF0000030BD4FF0010030BD00B5C1B2DC -S3150800217440F28C63C2F200031878FFF7B5FF5DF8E6 -S3150800218404FB00BF30B50D46C4B2012C07D942F68C -S31508002194B450C0F6000040F21A2100F0CDF940F21E -S315080021A4D853C2F2000304EB440203EBC2035B7C7C -S315080021B40BB340F2D853C2F2000303EBC2039A6886 -S315080021C412782A70597C01F1FF3159749A6802F120 -S315080021D401029A605B689A4210D940F2D853C2F257 -S315080021E4000304EB44044FEAC4041A191B59936008 -S315080021F44FF0010030BD4FF0000030BD4FF0010034 -S3150800220430BD00BF00B5014640F20863C2F20003C0 -S315080022141878FFF7B7FF5DF804FB00BF30B540F246 -S31508002224D853C2F200034FF000029A7403F118015E -S3150800223459614FF0010183F82A10DA6240F2D45248 -S31508002244C2F20002136040F28C64C2F20004601801 -S315080022544FF04001FFF728FF207040F20865C2F2EC -S31508002264000505F101004FF04001FFF71DFF287036 -S315080022742378FF2B01D0FF2807D142F6B450C0F6C5 -S3150800228400004FF07A0100F057F9FEF795FE30BDCD -S3150800229400B54FF00000FDF7DBFF5DF804FB00BF57 -S315080022A42DE9F0410546CCB23F2C07D942F6B45085 -S315080022B4C0F600004FF0990100F03EF92046FFF7FA -S315080022C455FF012807D042F6B450C0F600004FF077 -S315080022D49D0100F031F92646BCB14FF0000442F6E0 -S315080022E4B457C0F600074FF0A60800F0EBF9285DCE -S315080022F4FFF73CFF012803D03846414600F01CF995 -S3150800230404F10104A3B2B342EFD3BDE8F08100BFE0 -S3150800231410B50446FFF7BAF940F28C53C2F200032B -S315080023241B78EBB940F24C60C2F20000FFF76AFF73 -S31508002334012843D140F24C63C2F200031B78002BF8 -S315080023443FD040F28C53C2F200034FF001021A70D8 -S3150800235440F2D053C2F200034FF00000187010BDCB -S3150800236440F24C63C2F2000340F2D052C2F20002B9 -S31508002374107800F101001818FFF744FF012823D14B -S3150800238440F2D053C2F200031A7802F10102D2B223 -S315080023941A7040F24C63C2F200031B78934216D1BA -S315080023A420460C49FFF726FB40F28C53C2F2000381 -S315080023B44FF000021A704FF0010010BD4FF00000F4 -S315080023C410BD4FF0000010BD4FF0000010BD4FF0D7 -S315080023D4000010BD4D0600202DE9F04181B040F201 -S315080023E48C63C2F200031C78012C07D942F6B45058 -S315080023F4C0F6000040F23A2100F09EF840F2D853A5 -S31508002404C2F2000304EB440403EBC4035B7C002B15 -S315080024143DD0402B34BF98464FF04008B8F1000F22 -S3150800242423D040F29053C2F2000303F1FF3408F1BB -S31508002434FF35EDB25D1940F28C66C2F2000642F62B -S31508002444B457C0F6000730780DF10301FFF79AFE7A -S31508002454012804D0384640F2491100F06DF89DF879 -S31508002464033004F8013FAC42EDD140F29050C2F279 -S3150800247400004FF480714246FEF72EFF4FF001002C -S315080024844146FFF767F84FF00100FEF7AFFF01B0CA -S31508002494BDE8F081F0B540F24C51C2F200014FF0AC -S315080024A40100FFF7C9F882B2FAB140F24C53C2F2FE -S315080024B4000303F1FF3402F1FF3295B25D1940F2CD -S315080024C40866C2F2000642F6B457C0F6000730782A -S315080024D414F8011FFFF708FE012804D038464FF404 -S315080024E4B77100F029F8AC42F1D14FF00100FEF7BC -S315080024F491FFF0BD30B54FF2E873C1F6FF731B6860 -S315080025044FF2EC72C1F6FF7214684FF2F072C1F61C -S31508002514FF721068C0180CD0064D29464FF0080201 -S31508002524FFF7A4FD05F1100120464FF00402FFF75A -S315080025349DFD30BD0200002000B500F0C3F8FCE79D -S3150800254400B500F0B7F801281AD040F2D063C2F2F9 -S3150800255400031B78012B13D1FFF77EFD40F2D463E9 -S31508002564C2F200031B6803F5FA63984208D340F2E3 -S31508002574D063C2F200034FF000021A70FFF71CFA88 -S315080025845DF804FB00B540F2D063C2F200034FF0D5 -S3150800259401021A70FFF760FD40F2D463C2F2000329 -S315080025A41860FFF7CDFF5DF804FB00BF00B5FFF721 -S315080025B4FDF900F085F8FFF723FDFFF7EFFC00F0BF -S315080025C411F8FFF7DFFF5DF804FB00BF00B500F064 -S315080025D479F8FFF72FFD00F013F8FFF7B1FF5DF860 -S315080025E404FB00BF00B500F085F8FFF717FE40F2BC -S315080025F4EC03C2F200034FF002021A605DF804FB12 -S3150800260400B540F2D860C2F20000FFF781FE012847 -S315080026140CD140F2EC03C2F200034FF002021A6036 -S3150800262440F2D860C2F2000000F088F85DF804FBB6 -S3150800263400B5FFF72DFE5DF804FB00BF00B589B2AF -S3150800264440F2EC03C2F200031B68022B02D1C9B2A2 -S31508002654FFF726FE00F068F85DF804FB40F2EC0389 -S31508002664C2F200031A68032A0AD813464FF0010275 -S3150800267402FA03F313F00B0F02D04FF00000704771 -S315080026844FF03F00704700BF40F2EC03C2F200036C -S315080026941A68032A0AD813464FF0010202FA03F30A -S315080026A413F00B0F02D04FF0000070474FF03F00B5 -S315080026B4704700BF00B500F02DF85DF804FB00BFB5 -S315080026C4704700BF704700BF40F21873C2F2000398 -S315080026D44FF000025A70704740F21873C2F20003B2 -S315080026E44FF0FE02DA7018714FF00202A3F8442084 -S315080026F4704700BF40F21873C2F200034FF000029D -S315080027041A709A6483F84220A3F844209A705A707F -S31508002714704700BF40F21873C2F2000318780030FD -S3150800272418BF0120704700BF40F21873C2F20003B5 -S315080027344FF0000283F84220704700BF30B50446C4 -S315080027440278FF2A25D1FFF7BFFF40F21874C2F2B8 -S3150800275400044FF0010525704FF0FF03E3704FF0B6 -S31508002764100323714FF000036371FFF777FFA0711D -S31508002774FFF78AFFE071FFF787FF4FEA1020207200 -S315080027846572A5724FF00803A4F84430FFF706FCF7 -S31508002794AEE140F21873C2F200031B78012B40F035 -S315080027A4C981A2F1C902352A00F29E81DFE812F036 -S315080027B4F8009C019C0197019C019C0189011F0159 -S315080027C46F0159019C019C019C019C019C019C017F -S315080027D49C019C019C019C019C019C019C019C01FF -S315080027E49C019C019C019C019C019C019C019C01EF -S315080027F49C019C019C019C019C019C019C019C01DF -S315080028049C019C018B00590036007D009C019C01AB -S315080028149C01B2009C01CE00D300E7004578FFF77F -S315080028241DFF00F1FF30854204DD4FF02200FFF75B -S3150800283453FF5DE140F21875C2F2000505F1040084 -S31508002844A96C6278FFF7D6F84FF0FF03EB7062784D -S31508002854AB6CD318AB64637803F10103A5F8443071 -S3150800286446E14578FFF7FAFE00F1FF30854204DDBC -S315080028744FF02200FFF730FF3AE1616840F218751D -S31508002884C2F20005A96405F104006278FFF7B2F8FC -S315080028944FF0FF03EB706278AB6CD318AB646378C4 -S315080028A403F10103A5F8443022E140F21873C2F299 -S315080028B400034FF0FF02DA7042689A644FF001028F -S315080028C4A3F8442014E140F21873C2F200034FF04F -S315080028D4FF02DA70996C436843B14FF0000211F8AD -S315080028E4010B1218D2B2013BF9D101E04FF00002F4 -S315080028F440F21873C2F20003C3F807204FF001022E -S315080029041A714FF000025A719A714FF00802A3F82F -S315080029144420EDE040F21873C2F200034FF0FF02C0 -S31508002924DA7042F63862C0F600029A644FF0000282 -S315080029341A715A719A714FF00701D9711A725A723B -S315080029449A724FF00802A3F84420D1E04FF0000031 -S31508002954FFF7C2FECCE040F21873C2F200034FF050 -S31508002964FF02DA704FF000021A71597859719A7198 -S31508002974DA711A724FF00602A3F84420B8E040F25E -S315080029841874C2F200044FF000032370FFF79CFE8C -S315080029944FF0FF03E3704FF00103A4F84430A7E0B7 -S315080029A440F21873C2F200039D6CFFF757FE00F15C -S315080029B4FF3104F101022846FFF7F6FA20B94FF071 -S315080029C43100FFF789FE93E040F21874C2F200045E -S315080029D44FF0FF03E370A56CFFF740FE05F1FF33E4 -S315080029E41B18A3644FF00103A4F8443080E045782B -S315080029F4FFF734FEA0F10200854204DD4FF0220001 -S31508002A04FFF76AFE74E040F21873C2F200034FF04F -S31508002A14FF02DA704FF00102A3F84420617841B945 -S31508002A24FFF7DAFA002863D14FF03100FFF754FEB6 -S31508002A345EE040F21873C2F20003986C04F10202D5 -S31508002A44FFF7B2FA20B94FF03100FFF745FE4FE021 -S31508002A5440F21873C2F2000361789A6C8A189A6471 -S31508002A6446E040F21874C2F200044FF0FF03E37024 -S31508002A744FF0000525716571FFF7F0FDA071E5714A -S31508002A84257265724FF00703A4F8443030E040F22B -S31508002A941873C2F20003986C6168FFF78BFA20B9C1 -S31508002AA44FF03100FFF718FE22E040F21873C2F225 -S31508002AB400034FF0FF02DA704FF00102A3F8442036 -S31508002AC416E0FEF779FF40F21873C2F200034FF0DE -S31508002AD4FF02DA704FF00102A3F8442008E04FF031 -S31508002AE43100FFF7F9FD03E04FF02000FFF7F4FD8E -S31508002AF440F21873C2F2000393F84230012B03D153 -S31508002B044FF01000FFF7E8FD40F21873C2F2000315 -S31508002B14B3F844100BB2002B0CDD40F21870C2F265 -S31508002B2400004FF0010380F8423000F1030089B237 -S31508002B34FFF784FD30BD00BF30B504460D4600F0EE -S31508002B4417F840F26473C2F200031D6040F268731A -S31508002B54C2F200031C601A461368002BFCD100F06D -S31508002B6409F840F26473C2F20003186830BD00BF66 -S30D08002B74704700BF704700BF5F -S31508002B7C433A2F576F726B2F736F66747761726552 -S31508002B8C2F4F70656E424C542F5461726765742FC3 -S31508002B9C44656D6F2F41524D434D335F53544D333E -S31508002BAC3246315F4F6C696D65785F53544D3332DD -S31508002BBC483130335F43726F7373776F726B732F51 -S31508002BCC426F6F742F6964652F2E2E2F6D61696E97 -S31508002BDC2E6300001201100100000040501DAC606D -S31508002BEC000101020301000004030904260357002F -S31508002BFC69006E0055005300420020004200750023 -S31508002C0C6C006B00200044006500760069006300C8 -S31508002C1C6500000009022000010100C03209040009 -S31508002C2C0002FF00000407058102400000070501A9 -S31508002C3C024000001A034F00700065006E00420047 -S31508002C4C4C0054002000550073006500720000000B -S31508002C5C2C03570069006E005500530042002000F3 -S31508002C6C420075006C006B00200049006E00740071 -S31508002C7C650072006600610063006500433A2F57D1 -S31508002C8C6F726B2F736F6674776172652F4F7065F1 -S31508002C9C6E424C542F5461726765742F44656D6F80 -S31508002CAC2F41524D434D335F53544D333246315FAA -S31508002CBC4F6C696D65785F53544D333248313033F8 -S31508002CCC5F43726F7373776F726B732F426F6F7488 -S31508002CDC2F6964652F2E2E2F2E2E2F2E2E2F2E2E4D -S31508002CEC2F536F757263652F41524D434D335F53A6 -S31508002CFC544D333246312F43726F7373776F726B41 -S31508002D0C732F766563746F72732E63000060000808 -S31508002D1C00200000030000000080000800200000CE -S31508002D2C0400000000A000080020000005000000B8 -S31508002D3C00C00008002000000600000000E00008A3 -S31508002D4C0020000007000000000001080020000019 -S31508002D5C08000000002001080020000009000000FF -S31508002D6C00400108002000000A000000006001086D -S31508002D7C002000000B000000008001080020000065 -S31508002D8C0C00000000A00108002000000D00000047 -S31508002D9C00C00108002000000E00000000E0010839 -S31508002DAC002000000F000000433A2F576F726B2F5C -S31508002DBC736F6674776172652F4F70656E424C54EB -S31508002DCC2F5461726765742F44656D6F2F41524D90 -S31508002DDC434D335F53544D333246315F4F6C696DF7 -S31508002DEC65785F53544D3332483130335F43726FD5 -S31508002DFC7373776F726B732F426F6F742F69646579 -S31508002E0C2F2E2E2F2E2E2F2E2E2F2E2E2F536F7516 -S31508002E1C7263652F41524D434D335F53544D3332D4 -S31508002E2C46312F7573622E63000000004F70656E75 -S30908002E3C424C5400A2 -S31508002E401C035300450052003100320033003400A1 -S31508002E5035003600370038003900300061160008A2 -S31508002E60B90F0008B90F0008B90F0008B90F000814 -S31508002E70B90F0008B90F00086D160008B90F000849 -S31508002E80B90F0008B90F0008B90F0008B90F0008F4 -S31508002E90B90F0008202C0008200000002919000896 -S31508002EA055180008691700086D17000871170008FB -S31508002EB0C9170008D1170008411800082D1800087E -S31508002EC0FD1700080000000040000000B90F0008C8 -S31508002ED03D170008B90F0008B90F0008B90F000818 -S31508002EE0B90F0008B90F0008B90F000859170008EC -S31508002EF0322C000809000000E02B00081200000030 -S31508002F00F42B000804000000402C00081A000000FA -S31508002F10F82B000826000000000000201C00000016 -S31508002F205C2C00082C0000000301000004000000CF +S31508000000CC090020510100088D1500088D1500083F +S315080000108D1500088D1500088D1500088D1500082A +S315080000208D1500088D1500088D1500088D1500081A +S315080000308D1500088D1500088D1500088D1500080A +S315080000408D1500088D1500088D1500088D150008FA +S315080000508D1500088D1500088D1500088D150008EA +S315080000608D1500088D1500088D1500088D150008DA +S315080000708D1500088D1500088D1500088D150008CA +S315080000808D1500088D1500088D1500088D150008BA +S315080000908D1500088D1500088D1500088D150008AA +S315080000A08D1500088D1500088D1500088D1500089A +S315080000B08D1500088D1500088D1500088D1500088A +S315080000C08D1500088D1500088D1500088D1500087A +S315080000D08D1500088D1500088D1500088D1500086A +S315080000E08D1500088D1500088D1500088D1500085A +S315080000F08D1500088D1500088D1500088D1500084A +S315080001008D1500088D1500088D1500088D15000839 +S315080001108D1500088D1500088D1500088D15000829 +S315080001208D1500088D1500088D1500088D15000819 +S315080001308D1500088D1500088D1500088D15000809 +S315080001408D1500088D1500088D1500088D150008F9 +S315080001502949072291438D4628482949294A00F00A +S3150800016039F8294829492A4A00F034F829482A49F9 +S315080001702A4A00F02FF82A482A492B4A00F02AF87A +S315080001802A482B492B4A00F025F82B482B492C4A9C +S3150800019000F020F82B482C49002200F026F82B48BE +S315080001A02B49091A082903DB002202600430016082 +S315080001B01C481D49884205D00268043003B490479C +S315080001C003BCF7E700208646EC4600200021214ABA +S315080001D09047FEE7884207D0521A05D003780130C7 +S315080001E00B700131013AF9D17047884202D002708A +S315080001F00130FAE770470000CC090020E025000826 +S3150800020000000020EB0000205802000858020008F1 +S315080002101C230008E025000800000020000000203C +S315080002201C2300081C2300081C2300081C230008A4 +S315080002301C2300081C2300081C2300081C23000894 +S31508000240E0250008EC0000204C0700204C070020A1 +S30D08000250CC070020AD020008EE +S315080002580D4B1B7883B90D4A936943F010039361D4 +S315080002680B4B5A6822F470425A605A6842F4E042C4 +S315080002785A600122044B1A7001284FF40062044B95 +S315080002880CBF5A611A617047EC0000200010024042 +S3150800029800100140024B986800F00100704700BF43 +S315080002A80008014000B583B000230093019303F1C9 +S315080002B8804303F504331A6842F001021A60596844 +S315080002C8414A0A405A601A6822F0847222F4803237 +S315080002D81A601A6822F480221A605A6822F4FE0202 +S315080002E85A604FF41F029A601A6842F480321A60FC +S315080002F8194640F2DC520B6803F400330193009B5D +S3150800030801330093019B13B9009B9342F3D12F4BFA +S315080003181B6813F4003F03D167212D4801F0B0FD8F +S315080003282C4B1A6842F010021A601A6822F0030267 +S315080003381A601A6842F002021A60A3F580535A68CE +S315080003485A605A6842F400525A605A6842F48062FF +S315080003585A605A6822F47C125A605A6842F4E812BB +S315080003685A601A6842F080721A601A6812F0007F9A +S31508000378FBD0164B5A6822F003025A605A6842F0B4 +S3150800038802025A601A46536803F00C03082BFAD17E +S315080003980E4B9A6942F004029A610F4A116821F0D5 +S315080003A80F011160116841F0040111605A6822F4BE +S315080003B880025A60DA6942F40002DA6101F090FDB7 +S315080003C801F09CFDFCE700BF0000FFF800100240A2 +S315080003D81C230008002002400008014008B520B97F +S315080003E8064B1B6801221A8208BD054B1B681B6849 +S315080003F89847024B18680A3008BD00BF1401002048 +S315080004081801002008B520B9064B1B6801221A8274 +S3150800041808BD054B1B689B689847024B18680C3043 +S3150800042808BD00BF140100201801002008B520B92E +S31508000438274B1B6802221A8208BD0022254B1A8000 +S31508000448234B1A68137813F07F0311D1537A13F0E4 +S31508000458200F02D002211F4A117013F0400F1D4ABF +S31508000468137814BF43F0010323F00103137025E042 +S31508000478012B29D0022B29D1527902F00F0312F049 +S31508000488800F0DD09B0003F1804303F5B8431B6822 +S3150800049803F03003102B11D101220E4B1A700DE010 +S315080004A89B0003F1804303F5B8431B6803F44053E4 +S315080004B8B3F5805F02D10122064B1A70064B1B68FA +S315080004C81B699847034808BD024808BD002008BDAF +S315080004D814010020F000002018010020F8B5254B6B +S315080004E81C68258AD5B9237A042B40D1224B1B7858 +S315080004F8012B0ED1214B1A6892B2214B13445B008B +S3150800050800221A6030211F4B19801B4B1A700426CB +S3150800051829E010221B4B1A80072624E0A38A9D424D +S3150800052894BF042602269D4228BF1D46A36928466D +S3150800053898470746002000F05DFE2A4601463846D9 +S3150800054800F05CFD2946002000F070FE238A5B1B3C +S315080005582382638A1D44658230220A4B1A804FF427 +S315080005684052094B1A80034B1B681E72F8BDA38AB2 +S315080005780426D8E714010020ED000020505C00404E +S3150800058802300020260100202401002008B50C4B63 +S315080005981B68DA780B49497891420AD3997851B990 +S315080005A8998851B99A72084B1B685B689847002066 +S315080005B808BD022008BD022008BD022008BD00BFEC +S315080005C814010020E80000201801002010B5114C7D +S315080005D82368114A12689269D97858799047236826 +S315080005E89A7A7AB180B91A7982B99B7883B90B4B0A +S315080005F81B68DB68984723685A79DA72DA781A73B7 +S31508000608002010BD022010BD022010BD022010BD1A +S31508000618022010BD14010020200100201801002026 +S31508000628424B1A68137813F07F0305D1537A23F0DF +S315080006382003537200207047022B6AD15388002B77 +S3150800064869D11379002B68D110B5517921F080004A +S3150800065811F0800F4FEA800303F1804303F5B8438E +S315080006681B6814BF03F0300303F44053304C247856 +S31508000678A04254D2002B54D0937A002B53D011F0B1 +S31508000688800F12D0830003F1804303F5B8431B6833 +S3150800069803F03003102B36D1C4B2204600F076FD9D +S315080006A83021204600F0EAFC2DE0840004F180445D +S315080006B804F5B844236803F44053B3F5805F22D1A0 +S315080006C890B91C4B93F82C1000F0BEFD236823F450 +S315080006D8804323F070039BB283F4405343F40043EA +S315080006E843F0800323600EE000F03CFD236823F402 +S315080006F8804323F070039BB283F4405343F40043CA +S3150800070843F0800323600C4B1B685B6998470020FD +S3150800071810BD022070470220704702207047022049 +S3150800072810BD022010BD022010BD00BF1401002014 +S31508000738E80000205C0000201801002010B52A4BAC +S315080007481868417921F0800211F0800F4FEA820378 +S3150800075803F1804303F5B8431B6814BF03F030035D +S3150800076803F44053214C2478A24235D24488002CFD +S3150800077834D1002B34D0837A002B33D011F0800F74 +S3150800078812D0930003F1804303F5B8431A6822F49C +S31508000798E04222F0400292B282F0100242F400428D +S315080007A842F080021A6011E0930003F1804303F5D2 +S315080007B8B8431A6822F4804222F0700292B282F490 +S315080007C8805242F4004242F080021A60084B1B68C5 +S315080007D89B699847002010BD022010BD022010BD55 +S315080007E8022010BD022010BD14010020E8000020D8 +S315080007F81801002008B5064B1A68537A43F02003F7 +S315080008085372044B1B68DB699847002008BD00BF74 +S315080008181401002018010020054B1A68538A20B9CC +S315080008288888C31A138200207047086818447047D6 +S315080008381401002008B50B4B93F82C10002000F083 +S3150800084803FD094B1B68187A082806D14FF480520D +S31508000858064B1A801022064B1A80092814BF002056 +S31508000868012008BD5C000020140100202401002096 +S315080008782601002070B582B0974B1B68974A116805 +S315080008880A7A092A1CD09AB2954B13445B001C882D +S31508000898640004F1804404F5C04423780B708F4D36 +S315080008A82B6862785A702E68A08800F0FFFC708062 +S315080008B82E68208900F0FAFCB080A2892B68DA80B5 +S315080008C8864B1B6801221A72DA88002A67D15C7877 +S315080008D81A7812F07F022BD1092C02D1FFF756FE9F +S315080008E838E0052C0CD193F90320002A48DB9A78BE +S315080008F8002A47D19A88002A46D19B7A9BB345E0B5 +S31508000908032C07D1DA78012A25D19B881BBBFFF768 +S3150800091871FF1FE0012C1ED1DA78012A1BD19A88AB +S31508000928CAB95B7A13F0200F15D0FFF779FE11E0E4 +S31508000938012A04D10B2C0ED1FFF748FE0AE0022A39 +S3150800094809D1012C02D1FFF76BFE03E0032C02D173 +S31508000958FFF7F4FE38B1634B1B685B692046984776 +S31508000968032815D0B0B95C4B1A6892B25E4B13448B +S315080009785B0000221A6030225C4B1A8006220AE0C5 +S31508000988082208E0082206E0082204E0082202E015 +S31508000998092200E00822514B1B681A72F4E05A78BB +S315080009A8062A17D11A7812F07F0F40F086809B78AE +S315080009B8012B03D14B4B1B68DA6970E0022B03D174 +S315080009C8484B1B681A6A6AE0032B76D1454B1B68A5 +S315080009D85A6A64E0002A40D15A88002A6DD15A68B2 +S315080009E822F47F42B2F5003F67D11A7812F07F02E7 +S315080009F804D19B88002B00F0BD805EE0012A0ED149 +S31508000A08384A12689269002158799047002854D1C3 +S31508000A18324B1B689B7A002B40F0AE804DE0022AC9 +S31508000A284BD15A7902F00F0112F0800F4FEA810371 +S31508000A3803F1804303F5B8431B6814BF03F030037A +S31508000A4803F440532A480078814236D212F0700FD0 +S31508000A5833D1002B40F092802FE0082A05D11B7865 +S31508000A6813F07F0F00F08C8027E00A2A25D11A7820 +S31508000A7802F07F02012A20D19A7AF2B15A88E2B99D +S31508000A885A6822F47F42B2F5803F16D1154A126891 +S31508000A989269002158799047002873D00DE062B111 +S31508000AA80E4C2368002058829A61904723681A8A50 +S31508000AB84FF6FF718A4229D123E0084B1A68094B79 +S31508000AC81B681B6950789847032813D1034B1B6882 +S31508000AD809221A7258E000BF505C00401401002031 +S31508000AE804300020200100200230002026010020C2 +S31508000AF8E8000020264B1B681A8A4FF6FF718A42BF +S31508000B0802D109221A723FE0022800D012B9082237 +S31508000B181A7239E093F90010002924DAD988019164 +S31508000B280198824202D9019A1A8214E0914212D98E +S31508000B381849096891F82C1088B2904203D90021FF +S31508000B48154A117007E092FBF1F001FB102212B961 +S31508000B580121114A11700F4A126892F82C209A82BC +S31508000B68FFF7BCFC10E003221A724FF440520B4BF5 +S31508000B781A8009E00A4A93E7094A91E7084A8FE77B +S31508000B88084A8DE7084A8BE7FFF754FE02B070BD9E +S31508000B981401002020010020ED0000202401002077 +S31508000BA835040008E50300080D04000870B5364B3F +S31508000BB81C68237A022B56D0042B56D0032B01D057 +S31508000BC8052B48D1258AA269AAB1A5B1A38A9D424F +S31508000BD828BF1D46284690470646238A5B1B23825C +S31508000BE8638A2B446382002000F012FB2A460146DA +S31508000BF8304600F01DFA238A002B3AD04FF44052AB +S31508000C08224B1A800021084600F010FB3022204BA0 +S31508000C181A80238AA28A9A4204D81B4B1B68032285 +S31508000C281A7214E023B1184B1B6805221A720EE0D3 +S31508000C38154B1B6806221A72164B1A6892B2164B7F +S31508000C4813445B0000221A603022114B1A800E4B9F +S31508000C581B681A7A11E0072B09D1104B1B68DB6849 +S31508000C689847082209E0082207E0082205E0082232 +S31508000C7803E0A38A002BD0D0DAE7034B1B681A7265 +S31508000C88FFF7D8FD70BD00BF14010020240100201D +S31508000C9826010020505C0040023000202001002078 +S31508000CA8F0B40E4B1D7895B1002448F2800740F63B +S31508000CB80F76E1B28B0003F1804303F5B8431A684F +S31508000CC8394332400A431A600134A542F1D140F04B +S31508000CD88000034B1860F0BC704700BFE80000208E +S31508000CE84C5C004008B5154B1A68137A022B01D0DC +S31508000CF8042B05D1FFF7F2FB104B1B681A7A16E08E +S31508000D08062B13D15378052B0AD1137813F07F0FC6 +S31508000D1806D1D078FFF7C4FF094B1B681B6A9847AA +S31508000D28084B1B689B689847082200E00822034B73 +S31508000D381B681A72FFF77EFD08BD00BF1401002064 +S31508000D481801002020010020704700BF08B5074B8E +S31508000D58074A136002221A72064B074A13600749A4 +S31508000D68074A11601B68984708BD00BFF4000020B1 +S31508000D78140100205C000020200100208C000020BF +S31508000D881801002070B582B00023ADF80630934EDE +S31508000D98934C944D19E1238803F00F032B70002B0D +S31508000DA840F0DF80904A116889B2904B19801988FB +S31508000DB801F030018E480180198801F440511980E4 +S31508000DC8136823F4804323F040031B041B0C83F4A5 +S31508000DD8005383F0200343F4004343F08003136071 +S31508000DE8238803F010039BB2002B39D114461368E5 +S31508000DF823F4E14323F070031B041B0C1360FFF76D +S31508000E0871FF236823F4804323F040031B041B0C5B +S31508000E18764A128802F4805292B20AB183F4805351 +S31508000E28724A128802F4005292B20AB183F4005345 +S31508000E386F4A128802F0100292B20AB183F01003C0 +S31508000E486B4A128802F0200292B20AB183F0200394 +S31508000E589BB243F4004343F08003634A1360BBE044 +S31508000E68614B1B689BB2ADF80630BDF8063003F433 +S31508000E7800639BB2002B37D05B4C236823F07003C2 +S31508000E881B051B0D2360FFF7F5FC236823F4804335 +S31508000E9823F040031B041B0C544A128802F48052A0 +S31508000EA892B20AB183F48053504A128802F4005267 +S31508000EB892B20AB183F400534D4A128802F010021E +S31508000EC892B20AB183F01003494A128802F0200246 +S31508000ED892B20AB183F020039BB243F4004343F06D +S31508000EE88003414A136077E0BDF8063013F4004FD3 +S31508000EF86BD03D4C236823F070031B051B0D23603C +S31508000F08FFF754FE236823F4804323F040031B04A9 +S31508000F181B0C364A128802F4805292B20AB183F43C +S31508000F288053324A128802F4005292B20AB183F404 +S31508000F3800532F4A128802F0100292B20AB183F0BF +S31508000F4810032B4A128802F0200292B20AB183F0E3 +S31508000F5820039BB243F4004343F08003224A1360FC +S31508000F683AE09B0003F1804303F5B8431A6892B246 +S31508000F78ADF80620BDF8062012F4004F0BD01A6803 +S31508000F8822F070021205120D1A602B78013B194AD5 +S31508000F9852F823309847BDF8063003F080039BB211 +S31508000FA89BB12B789B0003F1804303F5B8431A6875 +S31508000FB822F4E14222F070021204120C1A602B780D +S31508000FC8013B0D4A52F82330984733689AB2228073 +S31508000FD813F4004F7FF4DFAE02B070BD445C0040E6 +S31508000FE82A01002010010020005C0040240100208E +S31508000FF826010020380000201C000020013252106B +S3150800100814D030B401F1005101F5405149000230BD +S31508001018002310F8015C10F8024C44EA052421F86C +S315080010282340013302309342F3D130BC704700BFE6 +S31508001038013201F1005101F540514900521005D01D +S3150800104851F8043B20F8023B013AF9D1704700BF32 +S315080010584FF6F8730340014A13607047505C004026 +S31508001068800000F1804000F5B840036823F4EC439B +S3150800107823F07003194389B201607047800000F1B4 +S31508001088804000F5B840036823F4E04323F04003A2 +S315080010989BB201F0100292B20AB183F0100301F074 +S315080010A8200189B209B183F0200343F4004343F0D1 +S315080010B880030360704700BF800000F1804000F598 +S315080010C8B840036823F4804323F070039BB201F405 +S315080010D8805292B20AB183F4805301F4005189B25E +S315080010E809B183F4005343F4004343F080030360D3 +S315080010F8704700BF800000F1804000F5B8400368DB +S3150800110823F4E04323F040039BB283F0300343F40F +S31508001118004343F080030360704700BF800000F176 +S31508001128804000F5B840036823F4804323F0700331 +S315080011389BB283F4405343F4004343F080030360AF +S31508001148704700BF800000F1804000F5B84003688A +S3150800115823F4F8731B051B0D43F4004343F080037F +S3150800116803607047800000F1804000F5B8400368C6 +S3150800117813F4804F09D0036823F0F0031B051B0DF1 +S3150800118843F4404343F0800303607047800000F14E +S31508001198804000F5B840036813F0400F09D003688B +S315080011A823F0F0031B051B0D43F4004343F0C0036B +S315080011B803607047064B1B689BB203EBC00000F13F +S315080011C8005000F540504000490849000160704742 +S315080011D8505C0040054B1B689BB203EBC000044BF0 +S315080011E803445B004908490019607047505C004091 +S315080011F804300020054B1B689BB203EBC00000F1C6 +S31508001208005000F54050400000887047505C004088 +S31508001218044B1B689BB203EBC000034B03445B00FB +S3150800122818887047505C004004300020044B1B683F +S315080012389BB203EBC000034B03445B00196070477D +S31508001248505C0040023000200E4B1B689BB203EB33 +S31508001258C0000D4B03445B003E290BD94A0911F01F +S315080012681F0F04BF02F1FF3292B2920242F4004203 +S315080012781A6070474A0811F0010F18BF0132920226 +S315080012881A607047505C004006300020054B1B6802 +S315080012989BB203EBC000044B03445B001868C0F319 +S315080012A809007047505C004006300020C3B2000AA7 +S315080012B840EA0320704700BF0020044B18604FF42B +S315080012C80643034A1380034A13607047445C004088 +S315080012D81C010020405C004070B50E4600F07F05F2 +S315080012E82846FFF7D3FF04462846FFF791FF22460C +S315080012F801463046FFF79CFE204670BD08B500F04B +S315080013082DFD08BD08B500F075FD08BD08B5034BE9 +S315080013181B68052B01D100F021FD08BD2C01002012 +S3150800132808B51A4B1B689BB2194A13801288194BC1 +S315080013381B88134003F400739BB253B14FF6FF5250 +S31508001348124B1A60144A13780133DBB21370FFF78D +S31508001358DDFF0F4B1A880F4B1B88134003F4004315 +S315080013689BB20BB1FFF70EFD094B1A88094B1B8870 +S31508001378134003F480639BB233B14FF6FF32034B35 +S315080013881A60064B5B68984708BD00BF445C004076 +S315080013982A0100201C010020280100205C000020EA +S315080013A8034B9B7A13B10522024B1A60704700BF9C +S315080013B8F40000202C0100200422014B1A60704713 +S315080013C82C010020704700BF704700BF06280DD1C2 +S315080013D80E4B1B681A7802F07F02012A08D15A793F +S315080013E842B99A78212A07D0022070470220704706 +S315080013F8022070470220704710B5054A9A610024F2 +S315080014085C82204600F09AF8204610BD1401002098 +S31508001418451500080220704721B9002814BF022084 +S31508001428002070470220704710B500F00DFD054BE7 +S315080014381B6800249C7200F089F8FFF73DFF024BF1 +S315080014481C6010BD140100202C01002010B5264B85 +S315080014581B6800249C72254AD2795A72DC72204687 +S31508001468FFF7F6FD4FF400712046FFF7F9FD102146 +S315080014782046FFF703FE40212046FFF7ABFE8021F2 +S315080014882046FFF797FE2046FFF75CFE184B93F8B1 +S315080014982C102046FFF7D8FE2046FFF73FFE2146C8 +S315080014A80120FFF7DDFD4FF480710120FFF782FE6A +S315080014B8C0210120FFF78EFE40210120FFF7B6FE66 +S315080014C840210120FFF7C0FE4FF440510120FFF7E5 +S315080014D8F3FD20210120FFF7D1FD2046FFF7E0FBA9 +S315080014E80122044B1A6010BD14010020C02300080D +S315080014F85C0000202C01002008B50249FFF78CF98A +S3150800150808BD00BFB800002008B50249FFF784F9EE +S3150800151808BD00BF5400002008B5064B1B68DB78D9 +S31508001528052B05D8044901EBC301FFF775F908BD72 +S31508001538002008BD14010020C000002008B5024993 +S31508001548FFF76AF908BD00BFB000002008B50120FA +S31508001558FEF77EFE064B01221A6000201860054A2F +S3150800156810604FF4E05204490A801A6008BD00BFAB +S31508001578405C0040445C00401C01002072B670477D +S3150800158862B6704708B53821014800F079FC08BDED +S315080015982824000808B5FFF7F1FF08BD10B500F0C4 +S315080015A86DFAA0B1FEF776FE88B100F0CFFC00F020 +S315080015B889FA00F067FA20F0604020F07F00044BB3 +S315080015C8186000F05FFA4468FFF7DAFFA04710BD15 +S315080015D808ED00E072B170B50D46561EB6B2441E47 +S315080015E8064415F8013B04F8013F00F0DFFCB44255 +S315080015F8F7D170BD704700BF024A136943F08003EC +S31508001608136170470020024070B506460B4D00244A +S3150800161800F0CCFC2B68B3420AD86A6813449E4289 +S3150800162806D204EB4401054B03EB8101087A70BD29 +S3150800163801340C350D2CEBD1FF2070BDB8240008F9 +S315080016482DE9F04107460068FFF7DEFFFF2849D075 +S31508001658264B274A5A6002F188325A603422DA60E1 +S31508001668DB6813F0010304D0FFF7C6FF0020BDE8C6 +S31508001678F0811E490A6942F001020A610C463A6875 +S3150800168803EB02081E1DBD59A9B29952E36813F067 +S31508001698010F05D000F08AFCE36813F0010FF9D1B1 +S315080016A82B0CA8F80230E36813F0010F05D000F0F8 +S315080016B87DFCE36813F0010FF9D1D8F800309D4294 +S315080016C805D13346B6F5007FD9D1012400E00024B8 +S315080016D8064A136923F001031361FFF78DFF2046B5 +S315080016E8BDE8F0810020BDE8F08100BF0020024077 +S315080016F82301674538B50D46114B984207D004466D +S31508001708104B994208D0FFF79BFF08B911E00E4C19 +S31508001718C5F308037BB900E0094C2368AB420CD033 +S31508001728204640F8045B4FF400722946FFF752FF3B +S3150800173803E0002038BD002038BD204638BD00BF6C +S315080017483001002000600008340300202DE9F0412C +S3150800175806460C4617461D4621F4FF7828F0010868 +S315080017680368B3F1FF3F06D140F8048B4FF40072C3 +S315080017784146FFF72FFF3368984505D0414630465E +S31508001788FFF7B8FF0646E0B13368E41A3444043470 +S3150800179808F5007800F00AFC331DE31AB3F5007F54 +S315080017A806D341463046FFF7A5FF064660B1041D35 +S315080017B817F8013B04F8013B013DEBD10120BDE8D0 +S315080017C8F0810020BDE8F0810020BDE8F08100BF67 +S315080017D84FF0FF33024A1360024A1360704700BF8E +S315080017E8340300203001002070B504460D4616461D +S315080017F8FFF70AFFFF2814D0681E2044FFF704FFE6 +S31508001808FF2810D024F4FF7323F00103074A9342F4 +S315080018182B46324621460CBF05480648FFF796FF71 +S3150800182870BD002070BD002070BD00BF00600008B4 +S3150800183830010020340300202DE9F04106460C4605 +S31508001848FFF7E2FE0546601E3044FFF7DDFE8542D7 +S3150800185800F286800446EB1EDBB2FB2B00F283807F +S315080018680F2800F28380434B434A5A6002F18832B4 +S315080018785A603422DA60DB6813F0010F04D0FFF7E8 +S31508001888BBFE0020BDE8F0813A4A136943F002031B +S3150800189813613A4FB846002600F088FB98F80830D6 +S315080018A8AB4205D106EB4602344B53F8225006E004 +S315080018B8013608F10C080D2EEED14FF0FF35B84663 +S315080018C8002600F073FB98F80830A34205D106EB0A +S315080018D846022A4B53F8228006E0013608F10C081E +S315080018E80D2EEED14FF0FF38002600F05FFB3B7A4D +S315080018F8A34206D106EB4602204B03EB8202536845 +S3150800190804E001360C370D2EEFD10023C5EB080885 +S315080019184344C3F38F23CBB15E1EB6B205F5806385 +S3150800192803EB8626134C6561236943F0400323615C +S31508001938E36813F0010F05D000F038FBE36813F0ED +S31508001948010FF9D105F58065B542ECD1094A136945 +S3150800195823F002031361FFF74FFE0120BDE8F0816B +S315080019680020BDE8F0810020BDE8F0810020BDE830 +S31508001978F08100BF0020024023016745B82400080B +S31508001988114B1B68B3F1FF3F18D000B583B00E4B57 +S3150800199859689A681144DA6811441A6911445A69E7 +S315080019A811449A691144DA698B185B4202AA42F80B +S315080019B8043D04210548FFF717FF01E00120704799 +S315080019C803B05DF804FB00BF300100205061000831 +S315080019D80D4B1A6804331B6813440C4A12681344DF +S315080019E80B4A126813440B4A11680B4404321268EE +S315080019F81A44094B1B681344084A1268D3420CBF99 +S31508001A0801200020704700BF006000080860000831 +S31508001A180C6000081060000818600008506100088B +S31508001A2808B50C4B1B68B3F1FF3F04D00948FFF70C +S31508001A3807FE034660B1084B1B68B3F1FF3F06D0A3 +S31508001A480548FFF7FDFD031C18BF012300E0012325 +S31508001A58184608BD300100203403002000487047A6 +S31508001A680060000808B5FFF7B3FE08BD08B5FFF71C +S31508001A78BBFE08BD08B5FFF7DFFE08BD08B5FFF7CA +S31508001A88A7FF08BD08B5FFF7E9FF08BD08B5FFF7C2 +S31508001A9877FF034610B1FFF7C3FF0346184608BD8C +S31508001AA8054B00221A60054959609A600521196094 +S31508001AB8034B1A60704700BF10E000E03F190100A9 +S31508001AC8380500200022014B1A60704710E000E034 +S31508001AD8044B1B6813F4803F03D0034A1368013389 +S31508001AE81360704710E000E03805002008B5FFF7D6 +S31508001AF8EFFF014B186808BD38050020A2B110B4DD +S31508001B084C1C531EDBB201EB430103310022030FC1 +S31508001B18092B94BF3033373304F8013C000104F825 +S31508001B28022B8C42F3D110BC704700BF38B5044667 +S31508001B380D46012804D94FF4FC71154800F0A0F9A0 +S31508001B4804EB4403134A02EBC3035A7C1B7C9A42F0 +S31508001B581AD004EB44030F4A02EBC303DA6815707C +S31508001B685A7C01325A74DA680132DA605B689A423A +S31508001B780CD9084A61000B1902EBC3030C4452F846 +S31508001B883420DA60012038BD002038BD012038BD70 +S31508001B9854250008C405002038B504460D46012812 +S31508001BA804D940F21A21134800F06AF904EB4403F1 +S31508001BB8114A02EBC303587CD8B104EB440302EB81 +S31508001BC8C3039A6812782A705A7C013A5A749A6832 +S31508001BD801329A605B689A420AD9074A61000B196A +S31508001BE802EBC3030C4452F834209A60012038BD2E +S31508001BF8012038BD54250008C405002038B5134B04 +S31508001C0800229A7403F118015961012483F82A40BD +S31508001C18DA6240251D740E4908199860D8605A7406 +S31508001C281860481958600A700A490A6083F82850E3 +S31508001C38094908191862586283F8292098614A19C7 +S31508001C48DA610C70FFF782F838BD00BFC4050020BA +S31508001C5878060020C0050020F405002008B50020F5 +S31508001C68FEF7F6FA08BD00BF2DE9F04105460C4611 +S31508001C783F2903D99921144800F002F92146134B44 +S31508001C881878FFF753FF012803D09D210E4800F066 +S31508001C98F7F8A3B2B3B16C1E013B9BB21D440B4EB9 +S31508001CA8DFF82480A62700F081F914F8011F307898 +S31508001CB8FFF73CFF012803D03946404600F0E0F814 +S31508001CC8AC42F0D1BDE8F08154250008780600201A +S31508001CD838B50546FFF724FB1B4B1C7884B91B4906 +S31508001CE81B4B1878FFF758FF01282AD1174B1B7882 +S31508001CF813B30122144B1A700022164B1A7020E0EF +S31508001D08144B1978144B1944114B1878FFF744FFEC +S31508001D18012813D10F4B1A780132D2B21A700B4B1D +S31508001D281B7893420CD10C492846FFF753FC00222E +S31508001D38054B1A70012404E01C4602E0002400E062 +S31508001D480024204638BD00BFBD0500203C050020FC +S31508001D58F4050020BC0500203D0500202DE9F041CA +S31508001D6882B0204B1C78012C04D940F23A211E482F +S31508001D7800F086F804EB44041C4B03EBC404647CAB +S31508001D886CB3402C28BF4024A046CCB1184D6C1E15 +S31508001D9808F1FF33DBB21D44124E134F0DF107014C +S31508001DA83078FFF7F9FE012804D040F24911384681 +S31508001DB800F066F89DF8073004F8013FAC42EDD10B +S31508001DC81FFA88F422464FF480710948FFF716F976 +S31508001DD821460120FFF72AFA0120FFF78BF902B0FE +S31508001DE8BDE8F0817806002054250008C4050020BF +S31508001DF87C0500202DE9F04110490120FFF76CFA0F +S31508001E0880B2B0B10D4D6C1E431E9BB21D440C4EDC +S31508001E18DFF830804FF4B77714F8011F3078FFF7EA +S31508001E2885FE012803D03946404600F029F8AC4219 +S31508001E38F2D10120FFF772F9BDE8F08138060020D3 +S31508001E48F40500205425000838B50A4B1B680A4AC9 +S31508001E5814680432106818180AD0084D082229464A +S31508001E68FFF74CFE042205F110012046FFF746FE4F +S31508001E7838BD00BFE8F7FF1FECF7FF1F0200002078 +S31508001E8808B500F093F8FCE708B500F089F80128CA +S31508001E9810D0094B1B78012B0CD1FFF727FE074BEF +S31508001EA81B6803F5FA63984204D30022024B1A709A +S31508001EB8FFF774FB08BD00BFB9060020BC06002062 +S31508001EC808B50122044B1A70FFF710FE034B186079 +S31508001ED8FFF7DAFF08BD00BFB9060020BC060020D8 +S31508001EE808B5FFF757FB00F05FF8FFF7D9FDFFF7CE +S31508001EF8B9FD00F00DF8FFF7E3FF08BD08B500F0D7 +S31508001F0855F8FFF7E5FD00F00FF8FFF7BDFF08BD28 +S31508001F1808B500F057F8FFF771FE0222014B1A7050 +S31508001F2808BD00BFEA00002008B50648FFF7D0FE3E +S31508001F38012805D10222044B1A70024800F060F8FD +S31508001F4808BD00BFC0060020EA00002008B5FFF754 +S31508001F5885FE08BD08B5054B1B78022B02D1C9B208 +S31508001F68FFF782FE00F044F808BD00BFEA0000202B +S31508001F78044B1B78012B03D9032B01D03F2070474C +S31508001F8800207047EA000020044B1B78012B03D970 +S31508001F98032B01D03F20704700207047EA00002035 +S31508001FA808B500F01DF808BD704700BF704700BFA8 +S31508001FB8034BFE22DA7018710222A3F844207047F0 +S31508001FC800070020054B00221A709A6483F84220FD +S31508001FD8A3F844209A705A70704700BF000700207B +S31508001FE8024B1878003018BF0120704700070020F8 +S31508001FF80022024B83F84220704700BF00070020E2 +S3150800200838B50378FF2B1BD1AD4C00236370012527 +S315080020182570FF22E270102222716371FFF7A8FF6C +S31508002028A071FFF7B1FFE071FFF7AEFF000A207253 +S315080020386572A5720823A4F84430FFF713FD46E134 +S3150800204804469F4A1278012A40F06181C93B352B1C +S3150800205800F23A81DFE813F0C000380138012F0191 +S31508002068380138012601DB00150105013801380158 +S315080020783801380138013801380138013801380182 +S315080020883801380138013801380138013801380172 +S315080020983801380138013801380138013801380162 +S315080020A838013801380138013801380176005100FD +S315080020B836006D0038013801380192003801A4004D +S315080020C8A800B6004578FFF753FF0138854203DDB7 +S315080020D82220FFF76DFFFAE0794D6278A96C281D72 +S315080020E8FFF778FAFF23EB706378AA6C1344AB649E +S315080020F863780133A5F84430E9E04578FFF738FFF7 +S315080021080138854203DD2220FFF752FFDFE06168C8 +S315080021186B4DA9646278281DFFF75CFAFF23EB70FC +S315080021286378AA6C1344AB6463780133A5F8443022 +S31508002138CDE0634BFF22DA7042689A640122A3F85D +S315080021484420DEE05E4BFF22DA709A6C406840B1A4 +S315080021581044002312F8011B0B44DBB29042F9D154 +S3150800216800E00023564AC2F80730012313710023FA +S31508002178537193710823A2F84430C2E0504BFF22EA +S31508002188DA70504A9A6400221A715A719A710721AC +S31508002198D9711A725A729A720822A3F84420B0E0C2 +S315080021A80020FFF705FF92E0454BFF22DA70002270 +S315080021B81A71597859719A71DA711A720622A3F83E +S315080021C844209EE03E4B00221A705A70FF22DA70AD +S315080021D80122A3F8442094E0394B9D6CFFF7C8FE0A +S315080021E8621C411E2846FFF741FC18B93120FFF743 +S315080021F8DFFE6CE0324CFF23E370FFF7B9FE0138C7 +S31508002208A36C0344A3640123A4F8443079E0457811 +S31508002218FFF7AEFE0238854203DD2220FFF7C8FE27 +S3150800222855E0274BFF22DA700122A3F8442061788B +S3150800223839B9FFF72BFC002849D13120FFF7B8FE3A +S3150800224845E0A21C1E4B986CFFF710FC18B9312004 +S31508002258FFF7AEFE3BE01A4A6378916C0B44936429 +S3150800226835E0174CFF23E370002525716571FFF7E4 +S315080022787FFEA071E571257265720723A4F84430BC +S315080022883FE041680E4B986CFFF7F4FB18B931200C +S31508002298FFF78EFE1BE00A4BFF22DA700122A3F82D +S315080022A844202EE0FFF77AF9054BFF22DA7001225F +S315080022B8A3F8442025E03120FFF77AFE07E000BF9F +S315080022C800070020D82500082020FFF771FE104BCC +S315080022D893F84230012B02D11020FFF769FE0C4B08 +S315080022E8B3F94410002912DD0948012380F8423061 +S315080022F889B20330FFF72EFE38BD054BB3F94410F3 +S31508002308F2E7034B93F84230012BF6D1E4E738BDE0 +S30908002318000700208C +S3150800231C433A2F576F726B2F736F667477617265BA +S3150800232C2F4F70656E424C542F5461726765742F2B +S3150800233C44656D6F2F41524D434D335F53544D33A6 +S3150800234C3246315F4F6C696D65785F53544D333245 +S3150800235C483130335F43726F7373776F726B732FB9 +S3150800236C426F6F742F6964652F2E2E2F6D61696EFF +S3150800237C2E6300001201100100000040501DAC60D5 +S3150800238C0001010203010000040309042603570097 +S3150800239C69006E005500530042002000420075008B +S315080023AC6C006B0020004400650076006900630031 +S315080023BC6500000009022000010100C03209040072 +S315080023CC0002FF0000040705810240000007050112 +S315080023DC024000001A034F00700065006E004200B0 +S315080023EC4C00540020005500730065007200000074 +S315080023FC2C03570069006E0055005300420020005C +S3150800240C420075006C006B00200049006E007400D9 +S3150800241C650072006600610063006500433A2F5739 +S3150800242C6F726B2F736F6674776172652F4F706559 +S3150800243C6E424C542F5461726765742F44656D6FE8 +S3150800244C2F41524D434D335F53544D333246315F12 +S3150800245C4F6C696D65785F53544D33324831303360 +S3150800246C5F43726F7373776F726B732F426F6F74F0 +S3150800247C2F6964652F2E2E2F2E2E2F2E2E2F2E2EB5 +S3150800248C2F536F757263652F41524D434D335F530E +S3150800249C544D333246312F43726F7373776F726BA9 +S315080024AC732F766563746F72732E63000060000871 +S315080024BC0020000003000000008000080020000037 +S315080024CC0400000000A00008002000000500000021 +S315080024DC00C00008002000000600000000E000080C +S315080024EC0020000007000000000001080020000082 +S315080024FC0800000000200108002000000900000068 +S3150800250C00400108002000000A00000000600108D5 +S3150800251C002000000B0000000080010800200000CD +S3150800252C0C00000000A00108002000000D000000AF +S3150800253C00C00108002000000E00000000E00108A1 +S3150800254C002000000F000000433A2F576F726B2FC4 +S3150800255C736F6674776172652F4F70656E424C5453 +S3150800256C2F5461726765742F44656D6F2F41524DF8 +S3150800257C434D335F53544D333246315F4F6C696D5F +S3150800258C65785F53544D3332483130335F43726F3D +S3150800259C7373776F726B732F426F6F742F696465E1 +S315080025AC2F2E2E2F2E2E2F2E2E2F2E2E2F536F757F +S315080025BC7263652F41524D434D335F53544D33323D +S315080025CC46312F7573622E63000000004F70656EDE +S309080025DC424C54000B +S315080025E01C0353004500520031003200330034000A +S315080025F0350036003700380039003000051300086A +S31508002600510D0008510D0008510D0008510D000824 +S31508002610510D0008510D00080D130008510D000852 +S31508002620510D0008510D0008510D0008510D000804 +S31508002630510D0008C02300082000000031140008CE +S3150800264055140008CD130008D1130008D513000847 +S315080026501D140008211400080115000811150008AA +S31508002660211500080000000040000000510D000878 +S31508002670A9130008510D0008510D0008510D000856 +S31508002680510D0008510D0008510D0008C11300082E +S31508002690D223000809000000802300081200000069 +S315080026A09423000804000000E02300081A00000034 +S315080026B09823000826000000000000201C000000E7 +S310080026C0FC2300082C000000030104A6 S70508000151A0 diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/readme.txt b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/readme.txt index a49767fb..a10a52ca 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/readme.txt +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/readme.txt @@ -1,4 +1,4 @@ Integrated Development Environment ---------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains +Rowleys CrossWorks (version 3.7.6) was used as the editor during the development of this software program. This directory contains the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/stm32f103_crossworks.hzp b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/stm32f103_crossworks.hzp index aeae92b4..fac4815b 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/stm32f103_crossworks.hzp +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/stm32f103_crossworks.hzp @@ -1,106 +1,172 @@ - - + + - + - - - + + + - - + - - - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + - + - + - - diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/stm32f103_crossworks.hzs b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/stm32f103_crossworks.hzs index 7d9ff9a7..6a04c123 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/stm32f103_crossworks.hzs +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/ide/stm32f103_crossworks.hzs @@ -1,23 +1,28 @@ - + - + + + + + + - - + + - - + + - - + + - - + + @@ -25,22 +30,28 @@ + + + + + + - - + + - - + + - - + + - - + + @@ -48,8 +59,8 @@ - - + + @@ -62,7 +73,9 @@ - + + + - + diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c deleted file mode 100644 index 56fddc52..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c +++ /dev/null @@ -1,784 +0,0 @@ -/**************************************************************************//** - * @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/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h index 2b6b51a7..efac390f 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h @@ -1,16 +1,16 @@ /**************************************************************************//** * @file core_cm3.h * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V1.30 - * @date 30. October 2009 + * @version V3.00 + * @date 03. February 2012 * * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. + * Copyright (C) 2009-2012 ARM Limited. All rights reserved. * * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. + * 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 @@ -20,1618 +20,1354 @@ * 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 - @{ - */ +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif #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 __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC -#ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 /*!< standard definition for NVIC Priority Bits */ -#endif +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. - - - -/** - * IO definitions - * - * define access restrictions to peripheral registers + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. */ -#ifdef __cplusplus - #define __I volatile /*!< defines 'read only' permissions */ -#else - #define __I volatile const /*!< defines 'read only' permissions */ + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M3 + @{ + */ + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + #endif -#define __O volatile /*!< defines 'write only' permissions */ -#define __IO volatile /*!< defines 'read / write' permissions */ + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + /* add preprocessor checks */ +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200 + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M3 */ /******************************************************************************* * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register ******************************************************************************/ -/** @addtogroup CMSIS_CM3_core_register CMSIS CM3 Core Register - @{ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. */ - -/** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC - memory mapped structure for Nested Vectored Interrupt Controller (NVIC) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. @{ */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ typedef struct { - __IO uint32_t ISER[8]; /*!< Offset: 0x000 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 */ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ -/** @addtogroup CMSIS_CM3_SCB CMSIS CM3 SCB - memory mapped structure for System Control Block (SCB) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers @{ */ + +/** \brief Structure type to access the System Control Block (SCB). + */ typedef struct { - __I uint32_t CPUID; /*!< Offset: 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; + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; /* SCB CPUID Register Definitions */ #define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFul << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ +#define SCB_CPUID_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_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ #define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFul << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ +#define SCB_CPUID_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 */ +#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_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_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_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_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_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_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_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_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_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 */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ -/* SCB Interrupt Control State Register Definitions */ +/* SCB Vector Table Offset Register Definitions */ +#if (__CM3_REV < 0x0201) /* core r2p1 */ #define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ -#define SCB_VTOR_TBLBASE_Msk (0x1FFul << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ #define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFul << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif /* SCB Application Interrupt and Reset Control Register Definitions */ #define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFul << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ +#define SCB_AIRCR_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_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_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_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_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_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 */ +#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_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_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 */ +#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_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_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_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_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_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 */ +#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_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_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_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_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_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_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_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_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_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_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_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_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_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 */ +#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_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_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 */ +#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_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_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 */ +#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_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_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_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_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 */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ -/** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick - memory mapped structure for SysTick +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB @{ */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ typedef struct { - __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 */ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ } SysTick_Type; /* SysTick Control / Status Register Definitions */ #define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1ul << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ +#define SysTick_CTRL_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_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_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 */ +#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 */ +#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 */ +#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_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_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 */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ -/** @addtogroup CMSIS_CM3_ITM CMSIS CM3 ITM - memory mapped structure for Instrumentation Trace Macrocell (ITM) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) @{ */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ typedef struct { - __O union + __O 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; + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ +} 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 */ +#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_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_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_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_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1ul << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA 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_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1ul << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA 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_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1ul << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ +#define ITM_TCR_TXENA_Pos 3 /*!< ITM TCR: TXENA Position */ +#define ITM_TCR_TXENA_Msk (1UL << ITM_TCR_TXENA_Pos) /*!< ITM TCR: TXENA 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_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA 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 */ +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA 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 */ +#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 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 */ +/*@}*/ /* end of group CMSIS_ITM */ -/** @addtogroup CMSIS_CM3_InterruptType CMSIS CM3 Interrupt Type - memory mapped structure for Interrupt Type +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) @{ */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ typedef struct { - 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; + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; -/* 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 */ +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ -/* 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 DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT 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 DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG 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 */ +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) -/** @addtogroup CMSIS_CM3_MPU CMSIS CM3 MPU - memory mapped structure for Memory Protection Unit (MPU) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) @{ */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ typedef struct { - __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; + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; /* MPU Type Register */ #define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFul << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ +#define MPU_TYPE_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_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 */ +#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_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_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 */ +#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 */ +#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_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_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 */ +#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_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ #define MPU_RASR_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_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_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 */ +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ -/*@}*/ /* end of group CMSIS_CM3_MPU */ +/*@} end of group CMSIS_MPU */ #endif -/** @addtogroup CMSIS_CM3_CoreDebug CMSIS CM3 Core Debug - memory mapped structure for Core Debug Register +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers @{ */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ typedef struct { - __IO uint32_t DHCSR; /*!< Offset: 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 */ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ } CoreDebug_Type; /* Debug Halting Control and Status Register */ #define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFul << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ +#define CoreDebug_DHCSR_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_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_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_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_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_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_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_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_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_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_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 */ +#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_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 */ +#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_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_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_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_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_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_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_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_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_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_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_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_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 */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ /* Memory mapping of Cortex-M3 Hardware */ -#define SCS_BASE (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 SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ -#define 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 */ +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) - #define MPU_BASE (SCS_BASE + 0x0D90) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type*) MPU_BASE) /*!< Memory Protection Unit */ +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< 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 Function Interface contains: - Core NVIC Functions - Core SysTick Functions - - Core Reset Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference */ -/*@{*/ + + /* ########################## 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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ */ -static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + reg_value = SCB->AIRCR; /* read old register configuration */ reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - (0x5FA << SCB_AIRCR_VECTKEY_Pos) | + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ SCB->AIRCR = reg_value; } -/** - * @brief Get 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. + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). */ -static __INLINE uint32_t NVIC_GetPriorityGrouping(void) +__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. + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +__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. + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +__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 + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. */ -static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. */ -static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +__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. + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. */ -static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +__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 */ + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ else { NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ } -/** - * @brief 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. + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. */ -static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +__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 */ + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ else { return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ } -/** - * @brief Encode 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 +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). */ -static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +__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; @@ -1639,7 +1375,7 @@ static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t P 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))) @@ -1647,22 +1383,19 @@ static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t P } -/** - * @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 +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). */ -static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +__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; @@ -1670,132 +1403,134 @@ static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGr PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); } +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + /* ################################## SysTick function ############################################ */ - -#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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ */ -static __INLINE uint32_t SysTick_Config(uint32_t ticks) -{ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ if (ticks > 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 */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ SysTick->VAL = 0; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | + SysTick->CTRL = 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 */ +/*@} end of CMSIS_Core_SysTickFunctions */ /* ##################################### 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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ */ -static __INLINE uint32_t ITM_SendChar (uint32_t ch) + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) { - if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */ - (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ - (ITM->TER & (1ul << 0) ) ) /* ITM Port #0 enabled */ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ { while (ITM->PORT[0].u32 == 0); ITM->PORT[0].u8 = (uint8_t) ch; - } + } return (ch); } -/** - * @brief 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. +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. */ -static __INLINE int ITM_ReceiveChar (void) { - int ch = -1; /* no character available */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { ch = ITM_RxBuffer; ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ } - - return (ch); + + 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. +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. */ -static __INLINE int ITM_CheckChar (void) { +__STATIC_INLINE int32_t ITM_CheckChar (void) { if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { return (0); /* no character available */ @@ -1804,15 +1539,12 @@ static __INLINE int ITM_CheckChar (void) { } } -/*@}*/ /* end of group CMSIS_CM3_core_DebugInterface */ +/*@} end of CMSIS_core_DebugFunctions */ +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ #ifdef __cplusplus } #endif - -/*@}*/ /* end of group CMSIS_CM3_core_definitions */ - -#endif /* __CM3_CORE_H__ */ - -/*lint -restore */ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cmFunc.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmFunc.h similarity index 100% rename from Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cmFunc.h rename to Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmFunc.h diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cmInstr.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmInstr.h similarity index 100% rename from Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cmInstr.h rename to Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmInstr.h diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CMSIS debug support.htm b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CMSIS debug support.htm deleted file mode 100644 index efda685b..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CMSIS debug support.htm +++ /dev/null @@ -1,243 +0,0 @@ - - - -CMSIS Debug Support - - - - - - - - -

CMSIS Debug Support

- -
- -

Cortex-M3 ITM Debug Access

-

- The Cortex-M3 incorporates the Instrumented Trace Macrocell (ITM) that provides together with - the Serial Viewer Output trace capabilities for the microcontroller system. The ITM has - 32 communication channels which are able to transmit 32 / 16 / 8 bit values; two ITM - communication channels are used by CMSIS to output the following information: -

-
    -
  • ITM Channel 0: used for printf-style output via the debug interface.
  • -
  • ITM Channel 31: is reserved for RTOS kernel awareness debugging.
  • -
- -

Debug IN / OUT functions

-

CMSIS provides following debug functions:

-
    -
  • ITM_SendChar (uses ITM channel 0)
  • -
  • ITM_ReceiveChar (uses global variable)
  • -
  • ITM_CheckChar (uses global variable)
  • -
- -

ITM_SendChar

-

- ITM_SendChar is used to transmit a character over ITM channel 0 from - the microcontroller system to the debug system.
- Only a 8 bit value is transmitted. -

-
-static __INLINE uint32_t ITM_SendChar (uint32_t ch)
-{
-  /* check if debugger connected and ITM channel enabled for tracing */
-  if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA)  &&
-      (ITM->TCR & ITM_TCR_ITMENA)                  &&
-      (ITM->TER & (1UL << 0))  ) 
-  {
-    while (ITM->PORT[0].u32 == 0);
-    ITM->PORT[0].u8 = (uint8_t)ch;
-  }  
-  return (ch);
-}
- -

ITM_ReceiveChar

-

- ITM communication channel is only capable for OUT direction. For IN direction - a globel variable is used. A simple mechansim detects if a character is received. - The project to test need to be build with debug information. -

- -

- The globale variable ITM_RxBuffer is used to transmit a 8 bit value from debug system - to microcontroller system. ITM_RxBuffer is 32 bit wide to enshure a proper handshake. -

-
-extern volatile int ITM_RxBuffer;                    /* variable to receive characters                             */
-
-

- A dedicated bit pattern is used to determin if ITM_RxBuffer is empty - or contains a valid value. -

-
-#define             ITM_RXBUFFER_EMPTY    0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */
-
-

- ITM_ReceiveChar is used to receive a 8 bit value from the debug system. The function is nonblocking. - It returns the received character or '-1' if no character was available. -

-
-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); 
-}
-
- -

ITM_CheckChar

-

- ITM_CheckChar is used to check if a character is received. -

-
-static __INLINE int ITM_CheckChar (void) {
-
-  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
-    return (0);                                 /* no character available */
-  } else {
-    return (1);                                 /*    character available */
-  }
-}
- - -

ITM Debug Support in uVision

-

- uVision uses in a debug session the Debug (printf) Viewer window to - display the debug data. -

-

Direction microcontroller system -> uVision:

-
    -
  • - Characters received via ITM communication channel 0 are written in a printf style - to Debug (printf) Viewer window. -
  • -
- -

Direction uVision -> microcontroller system:

-
    -
  • Check if ITM_RxBuffer variable is available (only performed once).
  • -
  • Read character from Debug (printf) Viewer window.
  • -
  • If ITM_RxBuffer empty write character to ITM_RxBuffer.
  • -
- -

Note

-
    -
  • Current solution does not use a buffer machanism for trasmitting the characters.

    -
  • -
- -

RTX Kernel awareness in uVision

-

- uVision / RTX are using a simple and efficient solution for RTX Kernel awareness. - No format overhead is necessary.
- uVsion debugger decodes the RTX events via the 32 / 16 / 8 bit ITM write access - to ITM communication channel 31. -

- -

Following RTX events are traced:

-
    -
  • Task Create / Delete event -
      -
    1. 32 bit access. Task start address is transmitted
    2. -
    3. 16 bit access. Task ID and Create/Delete flag are transmitted
      - High byte holds Create/Delete flag, Low byte holds TASK ID. -
    4. -
    -
  • -
  • Task switch event -
      -
    1. 8 bit access. Task ID of current task is transmitted
    2. -
    -
  • -
- -

Note

-
    -
  • Other RTOS information could be retrieved via memory read access in a polling mode manner.

    -
  • -
- - -

 

- -
- -

Copyright © KEIL - An ARM Company.
-All rights reserved.
-Visit our web site at
www.keil.com. -

- - - - \ No newline at end of file diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CMSIS_changes.htm b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CMSIS_changes.htm deleted file mode 100644 index 162ffcc9..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/CMSIS_changes.htm +++ /dev/null @@ -1,320 +0,0 @@ - - - -CMSIS Changes - - - - - - - - -

Changes to CMSIS version V1.20

- -
- -

1. Removed CMSIS Middelware packages

-

- CMSIS Middleware is on hold from ARM side until a agreement between all CMSIS partners is found. -

- -

2. SystemFrequency renamed to SystemCoreClock

-

- The variable name SystemCoreClock is more precise than SystemFrequency - because the variable holds the clock value at which the core is running. -

- -

3. Changed startup concept

-

- The old startup concept (calling SystemInit_ExtMemCtl from startup file and calling SystemInit - from main) has the weakness that it does not work for controllers which need a already - configuerd clock system to configure the external memory controller. -

- -

Changed startup concept

-
    -
  • - SystemInit() is called from startup file before premain. -
  • -
  • - SystemInit() configures the clock system and also configures - an existing external memory controller. -
  • -
  • - SystemInit() must not use global variables. -
  • -
  • - SystemCoreClock is initialized with a correct predefined value. -
  • -
  • - Additional function void SystemCoreClockUpdate (void) is provided.
    - SystemCoreClockUpdate() updates the variable SystemCoreClock - and must be called whenever the core clock is changed.
    - SystemCoreClockUpdate() evaluates the clock register settings and calculates - the current core clock. -
  • -
- - -

4. Advanced Debug Functions

-

- ITM communication channel is only capable for OUT direction. To allow also communication for - IN direction a simple concept is provided. -

-
    -
  • - Global variable volatile int ITM_RxBuffer used for IN data. -
  • -
  • - Function int ITM_CheckChar (void) checks if a new character is available. -
  • -
  • - Function int ITM_ReceiveChar (void) retrieves the new character. -
  • -
- -

- For detailed explanation see file CMSIS debug support.htm. -

- - -

5. Core Register Bit Definitions

-

- Files core_cm3.h and core_cm0.h contain now bit definitions for Core Registers. The name for the - defines correspond with the Cortex-M Technical Reference Manual. -

-

- e.g. SysTick structure with bit definitions -

-
-/** @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 */
- -

7. DoxyGen Tags

-

- DoxyGen tags in files core_cm3.[c,h] and core_cm0.[c,h] are reworked to create proper documentation - using DoxyGen. -

- -

8. Folder Structure

-

- The folder structure is changed to differentiate the single support packages. -

- -
    -
  • CM0
  • -
  • CM3 -
      -
    • CoreSupport
    • -
    • DeviceSupport
    • -
        -
      • Vendor -
          -
        • Device -
            -
          • Startup -
              -
            • Toolchain
            • -
            • Toolchain
            • -
            • ...
            • -
            -
          • -
          -
        • -
        • Device
        • -
        • ...
        • -
        -
      • -
      • Vendor
      • -
      • ...
      • -
      - -
    • Example -
        -
      • Toolchain -
          -
        • Device
        • -
        • Device
        • -
        • ...
        • -
        -
      • -
      • Toolchain
      • -
      • ...
      • -
      -
    • -
    -
  • - -
  • Documentation
  • -
- -

9. Open Points

-

- Following points need to be clarified and solved: -

-
    -
  • -

    - Equivalent C and Assembler startup files. -

    -

    - Is there a need for having C startup files although assembler startup files are - very efficient and do not need to be changed? -

    -

  • -
  • -

    - Placing of HEAP in external RAM. -

    -

    - It must be possible to place HEAP in external RAM if the device supports an - external memory controller. -

    -
  • -
  • -

    - Placing of STACK /HEAP. -

    -

    - STACK should always be placed at the end of internal RAM. -

    -

    - If HEAP is placed in internal RAM than it should be placed after RW ZI section. -

    -
  • -
  • -

    - Removing core_cm3.c and core_cm0.c. -

    -

    - On a long term the functions in core_cm3.c and core_cm0.c must be replaced with - appropriate compiler intrinsics. -

    -
  • -
- - -

10. Limitations

-

- The following limitations are not covered with the current CMSIS version: -

-
    -
  • - No C startup files for ARM toolchain are provided. -
  • -
  • - No C startup files for GNU toolchain are provided. -
  • -
  • - No C startup files for IAR toolchain are provided. -
  • -
  • - No Tasking projects are provided yet. -
  • -
diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/License.doc b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/License.doc deleted file mode 100644 index b6b8acecc137bca709444106cba045d3d01daedd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39936 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 diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.elf b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.elf index 149581e35f11b7d509a7425ca54c0e1cf6a83a4d..f14091a24e496565c7a1c4a291dacffe28dd199f 100644 GIT binary patch literal 37608 zcmeHw3wT{smH$5XoFq3l?CO63~d6C?d zLQy+B6cm;IRdBG5;*7$~Hwb@(8J)ra<7*rp2Sy!1X0)TIfB&Mk4x>Po%qr`Wqz7@eIm@?6*)rihd<%qNB*x65MWY2aR-pu0GN+-l=73w-~1QPu+g8VOmK}_}yXCyr)$!GB;^@UMuSV*8q}CyIzD!lUd_GcZfIAPVH8QpGhqi0K8?xOIy_VZ#{sL!dk`p#@UD}GyJ*3+R8r`mqx&dv5?zx<(yzP;te z7PRrw!P^T zcmEHS4_q+}|It1&x?6<#BhHUE@X4-}k*|Mu;A#zsaQG+U2z~Rwqc=Sy9<-JgN5#?0 zUfufAfu6$$?B$2AEna^7+6`w^wAiiU=-4abiSUJww;Xs}JRyp$dc`A-Hovm3ucUqP z$PFW3TlA^_eD!VRUn^=~yicqSKU2_dEn74RX_w`Jf8nb+N5btwV{(8Iui9<)ZR{ZLPpBKYGjb@|Oa+8bVq;k&U!{G~W)de&w0jUlz`aquXBwuWG^KP`wbdFN)GA z#eK)Gz5A7%YOy-+TLtms*V{*nY-htIBmeyH0_&e2&TCq@T01&4NeV z(`UEmEL((jEpJgCR(ymqpjGSaFQ1!*Kfn**0gu;LSVHN$uTT4qTRJ*P^uQzH!4Rxd z-l8-zI0rbZ)^4NqjIJi{HTu>gx5Ebe`YwhJ7;~3z!0#}A$LVWK_iY$?ejhDzykDh? zZLvD*=?x_aOy+icwf;nv^!`H!|$Gt-H!jou~S%FNq2Z{G3A;}~nQpU#bk z+wVzXG>N^dKl?~lJWE2)$4cwp<>M3Z`-V!4g#F3>-6>(MKr$;fF_lj4Thm!9vLiX2 zxuFG4nRS}A&@Q(YS<9@=vDhWiRhzeLJ2$$%a$RLjbZvFb1=SZ+UmRUEl^jj>Pbbff zUfIyyS(O~yog5rY4z5|hX7^P8_`pbXD!Df`othYruC2ZB!kYD0iBjC≪M)4Ozzv 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 UNyv1Jj3hNL4Rk3L$1_R(0k}_}C;$Ke diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.map b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.map index 143cff35..b8023814 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.map +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.map @@ -1,9 +1,17 @@ -Archive member included because of file (symbol) +Archive member included to satisfy reference by file (symbol) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - (__do_debug_operation_mempoll) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) (__debug_io_lock) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o (__aeabi_i2d) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o (frexp) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) (fabs) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o (__aeabi_uldivmod) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o (__getc) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) (memcpy) Discarded input sections @@ -30,94 +38,124 @@ Discarded input sections .data 0x00000000 0x0 THUMB Debug/../../obj/misc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/misc.o .text.NVIC_PriorityGroupConfig - 0x00000000 0x28 THUMB Debug/../../obj/misc.o + 0x00000000 0x24 THUMB Debug/../../obj/misc.o .text.NVIC_Init - 0x00000000 0xe8 THUMB Debug/../../obj/misc.o + 0x00000000 0xc4 THUMB Debug/../../obj/misc.o .text.NVIC_SetVectorTable 0x00000000 0x2c THUMB Debug/../../obj/misc.o .text.NVIC_SystemLPConfig - 0x00000000 0x54 THUMB Debug/../../obj/misc.o + 0x00000000 0x40 THUMB Debug/../../obj/misc.o .text.SysTick_CLKSourceConfig - 0x00000000 0x4c THUMB Debug/../../obj/misc.o + 0x00000000 0x38 THUMB Debug/../../obj/misc.o + .debug_frame 0x00000000 0x150 THUMB Debug/../../obj/misc.o + .debug_info 0x00000000 0x527 THUMB Debug/../../obj/misc.o + .debug_abbrev 0x00000000 0x14a THUMB Debug/../../obj/misc.o + .debug_pubnames + 0x00000000 0xa0 THUMB Debug/../../obj/misc.o + .debug_pubtypes + 0x00000000 0x126 THUMB Debug/../../obj/misc.o + .debug_aranges + 0x00000000 0x40 THUMB Debug/../../obj/misc.o + .debug_ranges 0x00000000 0x30 THUMB Debug/../../obj/misc.o + .debug_line 0x00000000 0x333 THUMB Debug/../../obj/misc.o + .debug_str 0x00000000 0x483 THUMB Debug/../../obj/misc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/misc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/misc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_adc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_adc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_DeInit - 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x74 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_Init - 0x00000000 0xb0 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0xa4 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_adc.o - .text.ADC_Cmd 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + .text.ADC_Cmd 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_DMACmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ITConfig - 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ResetCalibration 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetResetCalibrationStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_StartCalibration 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetCalibrationStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_SoftwareStartConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetSoftwareStartConvStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_DiscModeChannelCountConfig - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_DiscModeCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_RegularChannelConfig - 0x00000000 0x1bc THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x194 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ExternalTrigConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetConversionValue - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_adc.o - .text.ADC_GetDualModeConversionValue 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_adc.o + .text.ADC_GetDualModeConversionValue + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_AutoInjectedConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_InjectedDiscModeCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ExternalTrigInjectedConvConfig - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ExternalTrigInjectedConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o - .text.ADC_SoftwareStartInjectedConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o - .text.ADC_GetSoftwareStartInjectedConvCmdStatus 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + .text.ADC_SoftwareStartInjectedConvCmd + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + .text.ADC_GetSoftwareStartInjectedConvCmdStatus + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_InjectedChannelConfig - 0x00000000 0x144 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x120 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_InjectedSequencerLengthConfig - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_SetInjectedOffset 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetInjectedConversionValue - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_AnalogWatchdogCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_AnalogWatchdogThresholdsConfig 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_AnalogWatchdogSingleChannelConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_TempSensorVrefintCmd - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetFlagStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ClearFlag 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetITStatus - 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ClearITPendingBit - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_adc.o + .debug_frame 0x00000000 0x8f8 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_info 0x00000000 0xb42 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_abbrev 0x00000000 0x19d THUMB Debug/../../obj/stm32f10x_adc.o + .debug_pubnames + 0x00000000 0x42a THUMB Debug/../../obj/stm32f10x_adc.o + .debug_pubtypes + 0x00000000 0x132 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_aranges + 0x00000000 0x138 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_ranges 0x00000000 0x128 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_line 0x00000000 0x62a THUMB Debug/../../obj/stm32f10x_adc.o + .debug_str 0x00000000 0x7b5 THUMB Debug/../../obj/stm32f10x_adc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_adc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_adc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_bkp.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_bkp.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_DeInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_TamperPinLevelConfig 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_TamperPinCmd @@ -125,82 +163,112 @@ Discarded input sections .text.BKP_ITConfig 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_RTCOutputConfig - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_SetRTCCalibrationValue - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_WriteBackupRegister 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_ReadBackupRegister - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_GetFlagStatus 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_ClearFlag - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_GetITStatus 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_ClearITPendingBit - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_frame 0x00000000 0x2b4 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_info 0x00000000 0x76b THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_abbrev 0x00000000 0x168 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_pubnames + 0x00000000 0x13f THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_pubtypes + 0x00000000 0x11e THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_aranges + 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_ranges 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_line 0x00000000 0x323 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_str 0x00000000 0x66f THUMB Debug/../../obj/stm32f10x_bkp.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_bkp.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_bkp.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_can.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_can.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_DeInit - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_Init - 0x00000000 0x1c0 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x1a0 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_FilterInit - 0x00000000 0x20c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x174 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_StructInit - 0x00000000 0x6c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_SlaveStartBank - 0x00000000 0x8c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_DBGFreeze - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_TTComModeCmd - 0x00000000 0x94 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_Transmit - 0x00000000 0x1dc THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x194 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_TransmitStatus - 0x00000000 0x10c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0xd4 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_CancelTransmit 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_Receive - 0x00000000 0x1a8 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x174 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_FIFORelease 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_MessagePending - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_OperatingModeRequest - 0x00000000 0x114 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0xfc THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_Sleep - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_WakeUp - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetLastErrorCode - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetReceiveErrorCounter - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetLSBTransmitErrorCounter - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_ITConfig 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetFlagStatus - 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0xcc THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_ClearFlag - 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetITStatus - 0x00000000 0x1b8 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x194 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_ClearITPendingBit - 0x00000000 0xfc THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0xdc THUMB Debug/../../obj/stm32f10x_can.o .text.CheckITStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_can.o + .debug_frame 0x00000000 0x640 THUMB Debug/../../obj/stm32f10x_can.o + .debug_info 0x00000000 0xb6a THUMB Debug/../../obj/stm32f10x_can.o + .debug_abbrev 0x00000000 0x1f8 THUMB Debug/../../obj/stm32f10x_can.o + .debug_pubnames + 0x00000000 0x243 THUMB Debug/../../obj/stm32f10x_can.o + .debug_pubtypes + 0x00000000 0x1bb THUMB Debug/../../obj/stm32f10x_can.o + .debug_aranges + 0x00000000 0xe0 THUMB Debug/../../obj/stm32f10x_can.o + .debug_ranges 0x00000000 0xd0 THUMB Debug/../../obj/stm32f10x_can.o + .debug_line 0x00000000 0x65a THUMB Debug/../../obj/stm32f10x_can.o + .debug_str 0x00000000 0x7e8 THUMB Debug/../../obj/stm32f10x_can.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_can.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_can.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_cec.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_cec.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_DeInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_Init - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_cec.o - .text.CEC_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_cec.o + .text.CEC_Cmd 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_ITConfig 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_OwnAddressConfig @@ -216,265 +284,385 @@ Discarded input sections .text.CEC_EndOfMessageCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_GetFlagStatus - 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_ClearFlag - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_GetITStatus - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_ClearITPendingBit - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_cec.o + .debug_frame 0x00000000 0x354 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_info 0x00000000 0x3ea THUMB Debug/../../obj/stm32f10x_cec.o + .debug_abbrev 0x00000000 0x1b3 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_pubnames + 0x00000000 0x154 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_pubtypes + 0x00000000 0x132 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_aranges + 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_ranges 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_line 0x00000000 0x3fb THUMB Debug/../../obj/stm32f10x_cec.o + .debug_str 0x00000000 0x430 THUMB Debug/../../obj/stm32f10x_cec.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_cec.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_cec.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_crc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_crc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_ResetDR 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_CalcCRC - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_crc.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_CalcBlockCRC - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_crc.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_GetCRC - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_crc.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_SetIDRegister 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_GetIDRegister 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_frame 0x00000000 0x160 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_info 0x00000000 0x1ce THUMB Debug/../../obj/stm32f10x_crc.o + .debug_abbrev 0x00000000 0x117 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_pubnames + 0x00000000 0x82 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_pubtypes + 0x00000000 0xee THUMB Debug/../../obj/stm32f10x_crc.o + .debug_aranges + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_ranges 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_line 0x00000000 0x2bc THUMB Debug/../../obj/stm32f10x_crc.o + .debug_str 0x00000000 0x2f5 THUMB Debug/../../obj/stm32f10x_crc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_crc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_crc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dac.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dac.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dac.o .text.DAC_DeInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_dac.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_dac.o .text.DAC_Init - 0x00000000 0x74 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_StructInit - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_Cmd 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_DMACmd - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_SoftwareTriggerCmd - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_DualSoftwareTriggerCmd - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_WaveGenerationCmd - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_SetChannel1Data - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_SetChannel2Data - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_SetDualChannelData 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_StructInit + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_Cmd 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_DMACmd + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_SoftwareTriggerCmd + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_DualSoftwareTriggerCmd + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_WaveGenerationCmd + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_SetChannel1Data + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_SetChannel2Data + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_SetDualChannelData + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_dac.o .text.DAC_GetDataOutputValue - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_dac.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_frame 0x00000000 0x2f4 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_info 0x00000000 0x47a THUMB Debug/../../obj/stm32f10x_dac.o + .debug_abbrev 0x00000000 0x178 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_pubnames + 0x00000000 0x12d THUMB Debug/../../obj/stm32f10x_dac.o + .debug_pubtypes + 0x00000000 0x116 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_aranges + 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_ranges 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_line 0x00000000 0x3d7 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_str 0x00000000 0x469 THUMB Debug/../../obj/stm32f10x_dac.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_dac.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_dac.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .text.DBGMCU_GetREVID - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_dbgmcu.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .text.DBGMCU_GetDEVID - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .text.DBGMCU_Config - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_frame 0x00000000 0xb0 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_info 0x00000000 0x13e THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_abbrev 0x00000000 0xe3 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_pubnames + 0x00000000 0x63 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_pubtypes + 0x00000000 0xec THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_aranges + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_ranges 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_line 0x00000000 0x278 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_str 0x00000000 0x2c1 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dma.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dma.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_DeInit - 0x00000000 0x220 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x178 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_Init - 0x00000000 0x80 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_StructInit - 0x00000000 0x6c THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_Cmd 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_ITConfig 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_SetCurrDataCounter 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_GetCurrDataCounter - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_GetFlagStatus - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_ClearFlag - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_GetITStatus - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_ClearITPendingBit - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_frame 0x00000000 0x2d0 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_info 0x00000000 0x44c THUMB Debug/../../obj/stm32f10x_dma.o + .debug_abbrev 0x00000000 0x15a THUMB Debug/../../obj/stm32f10x_dma.o + .debug_pubnames + 0x00000000 0x113 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_pubtypes + 0x00000000 0x13e THUMB Debug/../../obj/stm32f10x_dma.o + .debug_aranges + 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_ranges 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_line 0x00000000 0x428 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_str 0x00000000 0x47b THUMB Debug/../../obj/stm32f10x_dma.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_dma.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_dma.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_exti.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_exti.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_DeInit - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_exti.o - .text.EXTI_Init - 0x00000000 0x138 THUMB Debug/../../obj/stm32f10x_exti.o - .text.EXTI_StructInit 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_exti.o - .text.EXTI_GenerateSWInterrupt + .text.EXTI_Init + 0x00000000 0xe4 THUMB Debug/../../obj/stm32f10x_exti.o + .text.EXTI_StructInit 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_exti.o + .text.EXTI_GenerateSWInterrupt + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_GetFlagStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_exti.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_ClearFlag - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_exti.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_GetITStatus - 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_exti.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_ClearITPendingBit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_exti.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_exti.o + .debug_frame 0x00000000 0x200 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_info 0x00000000 0x32d THUMB Debug/../../obj/stm32f10x_exti.o + .debug_abbrev 0x00000000 0x158 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_pubnames + 0x00000000 0x161 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_pubtypes + 0x00000000 0x148 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_aranges + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_ranges 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_line 0x00000000 0x396 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_str 0x00000000 0x418 THUMB Debug/../../obj/stm32f10x_exti.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_exti.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_exti.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_flash.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_flash.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_SetLatency - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_HalfCycleAccessCmd - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_PrefetchBufferCmd - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_Unlock - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_UnlockBank1 - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_Lock - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_LockBank1 - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ErasePage - 0x00000000 0x90 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_EraseAllPages - 0x00000000 0x80 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_EraseAllBank1Pages - 0x00000000 0x80 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_EraseOptionBytes - 0x00000000 0x134 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ProgramWord - 0x00000000 0xbc THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ProgramHalfWord - 0x00000000 0x74 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ProgramOptionByteData - 0x00000000 0xa0 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_EnableWriteProtection - 0x00000000 0x15c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ReadOutProtection - 0x00000000 0x138 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_UserOptionByteConfig - 0x00000000 0xbc THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_GetUserOptionByte 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_GetWriteProtectionOptionByte + .text.FLASH_LockBank1 + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ErasePage + 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_EraseAllPages + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_EraseAllBank1Pages + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_EraseOptionBytes + 0x00000000 0xd4 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ProgramWord + 0x00000000 0x94 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ProgramHalfWord + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ProgramOptionByteData + 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_EnableWriteProtection + 0x00000000 0x118 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ReadOutProtection + 0x00000000 0xd4 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_UserOptionByteConfig + 0x00000000 0x94 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_GetUserOptionByte 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_GetWriteProtectionOptionByte + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_GetReadOutProtectionStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_GetPrefetchBufferStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_ITConfig - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_GetFlagStatus - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_ClearFlag - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_GetStatus - 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_GetBank1Status - 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_WaitForLastOperation - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_WaitForLastBank1Operation - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_frame 0x00000000 0x650 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_info 0x00000000 0x783 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_abbrev 0x00000000 0x192 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_pubnames + 0x00000000 0x376 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_pubtypes + 0x00000000 0x133 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_aranges + 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_ranges 0x00000000 0xe8 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_line 0x00000000 0x5bc THUMB Debug/../../obj/stm32f10x_flash.o + .debug_str 0x00000000 0x6a2 THUMB Debug/../../obj/stm32f10x_flash.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_flash.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_flash.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_fsmc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_fsmc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NORSRAMDeInit - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NANDDeInit - 0x00000000 0x8c THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_PCCARDDeInit - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NORSRAMInit - 0x00000000 0x150 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x134 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NANDInit - 0x00000000 0x100 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0xcc THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_PCCARDInit - 0x00000000 0xd4 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0xac THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NORSRAMStructInit - 0x00000000 0x108 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0xd4 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NANDStructInit - 0x00000000 0x9c THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_PCCARDStructInit - 0x00000000 0xa4 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x84 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NORSRAMCmd 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NANDCmd - 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x6c THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_PCCARDCmd - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_fsmc.o - .text.FSMC_NANDECCCmd - 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_fsmc.o - .text.FSMC_GetECC 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_fsmc.o + .text.FSMC_NANDECCCmd + 0x00000000 0x6c THUMB Debug/../../obj/stm32f10x_fsmc.o + .text.FSMC_GetECC + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_ITConfig - 0x00000000 0xe0 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0xa0 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_GetFlagStatus - 0x00000000 0x74 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_ClearFlag - 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_GetITStatus - 0x00000000 0x94 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x80 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_ClearITPendingBit - 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_frame 0x00000000 0x4c0 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_info 0x00000000 0x8cd THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_abbrev 0x00000000 0x175 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_pubnames + 0x00000000 0x1cc THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_pubtypes + 0x00000000 0x20e THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_aranges + 0x00000000 0xb0 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_ranges 0x00000000 0xa0 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_line 0x00000000 0x57d THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_str 0x00000000 0x83e THUMB Debug/../../obj/stm32f10x_fsmc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_fsmc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_fsmc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_gpio.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_gpio.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_DeInit - 0x00000000 0x128 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0xe4 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_AFIODeInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_StructInit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadInputDataBit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadInputData - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadOutputDataBit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadOutputData - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_WriteBit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_Write 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_PinLockConfig 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_EventOutputConfig - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_EventOutputCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_PinRemapConfig - 0x00000000 0x11c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0xe0 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_EXTILineConfig - 0x00000000 0xb0 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x84 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ETH_MediaInterfaceConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_i2c.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_i2c.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_DeInit - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_Init - 0x00000000 0x1ac THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x184 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_i2c.o - .text.I2C_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + .text.I2C_Cmd 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_DMACmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_DMALastTransferCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GenerateSTART - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GenerateSTOP - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_AcknowledgeConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_OwnAddress2Config 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_DualAddressCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GeneralCallCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_ITConfig 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_SendData @@ -484,7 +672,7 @@ Discarded input sections .text.I2C_Send7bitAddress 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_ReadRegister - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_SoftwareResetCmd 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_NACKPositionConfig @@ -492,31 +680,46 @@ Discarded input sections .text.I2C_SMBusAlertConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_TransmitPEC - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_PECPositionConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_CalculatePEC - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GetPEC - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_ARPCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_StretchClockCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_FastModeDutyCycleConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_CheckEvent - 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GetLastEvent - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GetFlagStatus - 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_i2c.o - .text.I2C_ClearFlag - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_i2c.o - .text.I2C_GetITStatus 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_i2c.o + .text.I2C_ClearFlag + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_i2c.o + .text.I2C_GetITStatus + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_ClearITPendingBit - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_frame 0x00000000 0x840 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_info 0x00000000 0xad2 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_abbrev 0x00000000 0x169 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_pubnames + 0x00000000 0x30a THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_pubtypes + 0x00000000 0x158 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_aranges + 0x00000000 0x120 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_ranges 0x00000000 0x110 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_line 0x00000000 0x5d5 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_str 0x00000000 0x720 THUMB Debug/../../obj/stm32f10x_i2c.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_i2c.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_i2c.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_iwdg.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_iwdg.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_iwdg.o @@ -531,30 +734,58 @@ Discarded input sections .text.IWDG_Enable 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_iwdg.o .text.IWDG_GetFlagStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_iwdg.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_frame 0x00000000 0x170 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_info 0x00000000 0x1d4 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_abbrev 0x00000000 0x106 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_pubnames + 0x00000000 0xa3 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_pubtypes + 0x00000000 0xfe THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_aranges + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_ranges 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_line 0x00000000 0x2ad THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_str 0x00000000 0x316 THUMB Debug/../../obj/stm32f10x_iwdg.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_iwdg.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_iwdg.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_pwr.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_pwr.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_pwr.o - .text.__WFI 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_pwr.o - .text.__WFE 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_DeInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_pwr.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_BackupAccessCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_PVDCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_PVDLevelConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_pwr.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_WakeUpPinCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_EnterSTOPMode - 0x00000000 0x84 THUMB Debug/../../obj/stm32f10x_pwr.o + 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_EnterSTANDBYMode - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_pwr.o - .text.PWR_GetFlagStatus 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_pwr.o + .text.PWR_GetFlagStatus + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_ClearFlag - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_pwr.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_frame 0x00000000 0x224 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_info 0x00000000 0x465 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_abbrev 0x00000000 0x184 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_pubnames + 0x00000000 0x108 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_pubtypes + 0x00000000 0x11e THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_aranges + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_ranges 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_line 0x00000000 0x319 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_str 0x00000000 0x3dc THUMB Debug/../../obj/stm32f10x_pwr.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_pwr.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_pwr.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rcc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rcc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rcc.o @@ -563,53 +794,53 @@ Discarded input sections .data.ADCPrescTable 0x00000000 0x4 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_DeInit - 0x00000000 0x9c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_HSEConfig - 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_WaitForHSEStartUp - 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_AdjustHSICalibrationValue - 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_HSICmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PLLConfig - 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PLLCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_SYSCLKConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_GetSYSCLKSource - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_HCLKConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PCLK1Config - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PCLK2Config - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ITConfig - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_USBCLKConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ADCCLKConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_LSEConfig - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_LSICmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_RTCCLKConfig - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_RTCCLKCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_GetClocksFreq - 0x00000000 0x1d4 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x160 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_AHBPeriphClockCmd - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_APB1PeriphClockCmd - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_APB2PeriphResetCmd - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_APB1PeriphResetCmd - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_BackupResetCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ClockSecuritySystemCmd @@ -617,89 +848,104 @@ Discarded input sections .text.RCC_MCOConfig 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_GetFlagStatus - 0x00000000 0x90 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ClearFlag - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_GetITStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ClearITPendingBit 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rtc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rtc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_ITConfig - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_EnterConfigMode - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_ExitConfigMode - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_GetCounter - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_SetCounter - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_SetPrescaler - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_SetAlarm - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_GetDivider - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_WaitForLastTask 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_WaitForSynchro - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_GetFlagStatus - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_ClearFlag - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_GetITStatus - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_ClearITPendingBit - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_frame 0x00000000 0x338 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_info 0x00000000 0x402 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_abbrev 0x00000000 0x192 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_pubnames + 0x00000000 0x15f THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_pubtypes + 0x00000000 0x11e THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_aranges + 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_ranges 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_line 0x00000000 0x368 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_str 0x00000000 0x45c THUMB Debug/../../obj/stm32f10x_rtc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_rtc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_rtc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_sdio.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_sdio.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_DeInit - 0x00000000 0x8c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_Init - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ClockCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SetPowerState - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetPowerState - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ITConfig - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_DMACmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SendCommand - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_CmdStructInit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetCommandResponse 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetResponse - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_DataConfig - 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_DataStructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetDataCounter - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ReadData 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_WriteData 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetFIFOCount - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_StartSDIOReadWait 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_StopSDIOReadWait 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SetSDIOReadWaitMode - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SetSDIOOperation 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SendSDIOSuspendCmd @@ -711,90 +957,120 @@ Discarded input sections .text.SDIO_SendCEATACmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetFlagStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ClearFlag - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetITStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ClearITPendingBit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_frame 0x00000000 0x730 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_info 0x00000000 0x7c4 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_abbrev 0x00000000 0x1b4 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_pubnames + 0x00000000 0x2d5 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_pubtypes + 0x00000000 0x158 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_aranges + 0x00000000 0x108 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_ranges 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_line 0x00000000 0x536 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_str 0x00000000 0x6f5 THUMB Debug/../../obj/stm32f10x_sdio.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_sdio.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_sdio.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_spi.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_spi.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_DeInit - 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x74 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_Init 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_spi.o .text.I2S_Init - 0x00000000 0x198 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x168 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_StructInit - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_spi.o .text.I2S_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_spi.o - .text.SPI_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_spi.o - .text.I2S_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_spi.o + .text.SPI_Cmd 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o + .text.I2S_Cmd 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_ITConfig - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_DMACmd 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_SendData 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_ReceiveData - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_NSSInternalSoftwareConfig 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_SSOutputCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_DataSizeConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_TransmitCRC 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_CalculateCRC - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_GetCRC - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_GetCRCPolynomial - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_BiDirectionalLineConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_GetFlagStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o - .text.SPI_I2S_ClearFlag - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_spi.o - .text.SPI_I2S_GetITStatus - 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_spi.o - .text.SPI_I2S_ClearITPendingBit 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_spi.o + .text.SPI_I2S_ClearFlag + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_spi.o + .text.SPI_I2S_GetITStatus + 0x00000000 0x74 THUMB Debug/../../obj/stm32f10x_spi.o + .text.SPI_I2S_ClearITPendingBit + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_frame 0x00000000 0x5c0 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_info 0x00000000 0x8c1 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_abbrev 0x00000000 0x183 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_pubnames + 0x00000000 0x21f THUMB Debug/../../obj/stm32f10x_spi.o + .debug_pubtypes + 0x00000000 0x15c THUMB Debug/../../obj/stm32f10x_spi.o + .debug_aranges + 0x00000000 0xd0 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_ranges 0x00000000 0xc0 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_line 0x00000000 0x51d THUMB Debug/../../obj/stm32f10x_spi.o + .debug_str 0x00000000 0x6b7 THUMB Debug/../../obj/stm32f10x_spi.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_spi.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_spi.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_tim.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_tim.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_DeInit - 0x00000000 0x2b0 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x22c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_TimeBaseInit - 0x00000000 0x11c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1Init - 0x00000000 0x128 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x118 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC2Init - 0x00000000 0x128 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x110 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC3Init - 0x00000000 0x120 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x10c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC4Init - 0x00000000 0xe0 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xd0 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ICInit - 0x00000000 0xb8 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xa8 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_PWMIConfig - 0x00000000 0xcc THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xb8 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_BDTRConfig 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_TimeBaseStructInit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OCStructInit - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ICStructInit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_BDTRStructInit - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_Cmd 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_CtrlPWMOutputs 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ITConfig @@ -810,13 +1086,13 @@ Discarded input sections .text.TIM_ITRxExternalClockConfig 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_TIxExternalClockConfig - 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ETRClockMode1Config - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ETRClockMode2Config - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ETRConfig - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_PrescalerConfig 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_CounterModeConfig @@ -824,73 +1100,73 @@ Discarded input sections .text.TIM_SelectInputTrigger 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_EncoderInterfaceConfig - 0x00000000 0x94 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ForcedOC1Config 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ForcedOC2Config - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ForcedOC3Config 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ForcedOC4Config - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ARRPreloadConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectCOM - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectCCDMA - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_CCPreloadControl - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1PreloadConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC2PreloadConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC3PreloadConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC4PreloadConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1FastConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC2FastConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC3FastConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC4FastConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearOC1Ref 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearOC2Ref - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearOC3Ref 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearOC4Ref - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1PolarityConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1NPolarityConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC2PolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_OC2NPolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_OC3PolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_OC3NPolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_OC4PolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_CCxCmd - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_CCxNCmd - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_SelectOCxM - 0x00000000 0xbc THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_UpdateDisableConfig 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_OC2NPolarityConfig + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_OC3PolarityConfig + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_OC3NPolarityConfig + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_OC4PolarityConfig + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_CCxCmd + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_CCxNCmd + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_SelectOCxM + 0x00000000 0xac THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_UpdateDisableConfig + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_UpdateRequestConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectHallSensor - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectOnePulseMode 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectOutputTrigger @@ -922,50 +1198,65 @@ Discarded input sections .text.TIM_SetClockDivision 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCapture1 - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCapture2 - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCapture3 - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCapture4 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCounter - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetPrescaler - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetFlagStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearFlag - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetITStatus - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearITPendingBit - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_tim.o .text.TI1_Config - 0x00000000 0xe4 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xe0 THUMB Debug/../../obj/stm32f10x_tim.o .text.TI2_Config - 0x00000000 0x104 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TI3_Config 0x00000000 0xf4 THUMB Debug/../../obj/stm32f10x_tim.o + .text.TI3_Config + 0x00000000 0xec THUMB Debug/../../obj/stm32f10x_tim.o .text.TI4_Config - 0x00000000 0x10c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_frame 0x00000000 0x1698 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_info 0x00000000 0x1c26 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_abbrev 0x00000000 0x1b5 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_pubnames + 0x00000000 0x815 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_pubtypes + 0x00000000 0x17e THUMB Debug/../../obj/stm32f10x_tim.o + .debug_aranges + 0x00000000 0x2f0 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_ranges 0x00000000 0x2e0 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_line 0x00000000 0xc40 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_str 0x00000000 0xe97 THUMB Debug/../../obj/stm32f10x_tim.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_tim.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_tim.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_usart.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_usart.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_DeInit - 0x00000000 0xd8 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0xb8 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_Init - 0x00000000 0x1ac THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x174 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClockInit 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClockStructInit - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_Cmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ITConfig - 0x00000000 0xa0 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x90 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_DMACmd 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SetAddress @@ -973,15 +1264,15 @@ Discarded input sections .text.USART_WakeUpConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ReceiverWakeUpCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_LINBreakDetectLengthConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_LINCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SendData - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_ReceiveData 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_ReceiveData + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SendBreak 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SetGuardTime @@ -989,89 +1280,76 @@ Discarded input sections .text.USART_SetPrescaler 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SmartCardCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SmartCardNACKCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_HalfDuplexCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_OverSampling8Cmd 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_OneBitMethodCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_IrDAConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_IrDACmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_GetFlagStatus 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_GetFlagStatus + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClearFlag - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_GetITStatus - 0x00000000 0xc4 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0xb4 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClearITPendingBit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_frame 0x00000000 0x740 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_info 0x00000000 0x9b6 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_abbrev 0x00000000 0x167 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_pubnames + 0x00000000 0x2bd THUMB Debug/../../obj/stm32f10x_usart.o + .debug_pubtypes + 0x00000000 0x16f THUMB Debug/../../obj/stm32f10x_usart.o + .debug_aranges + 0x00000000 0x100 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_ranges 0x00000000 0xf0 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_line 0x00000000 0x5a2 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_str 0x00000000 0x74a THUMB Debug/../../obj/stm32f10x_usart.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_usart.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_usart.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_wwdg.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_wwdg.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_DeInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_wwdg.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_SetPrescaler - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_wwdg.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_SetWindowValue - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_wwdg.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_EnableIT 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_SetCounter 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_Enable - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_wwdg.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_GetFlagStatus 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_ClearFlag 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_wwdg.o - .text 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .data 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .text.__get_PSP - 0x00000000 0x10 THUMB Debug/../../obj/core_cm3.o - .text.__set_PSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_MSP - 0x00000000 0x10 THUMB Debug/../../obj/core_cm3.o - .text.__set_MSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_BASEPRI - 0x00000000 0x20 THUMB Debug/../../obj/core_cm3.o - .text.__set_BASEPRI - 0x00000000 0x18 THUMB Debug/../../obj/core_cm3.o - .text.__get_PRIMASK - 0x00000000 0x20 THUMB Debug/../../obj/core_cm3.o - .text.__set_PRIMASK - 0x00000000 0x18 THUMB Debug/../../obj/core_cm3.o - .text.__get_FAULTMASK - 0x00000000 0x20 THUMB Debug/../../obj/core_cm3.o - .text.__set_FAULTMASK - 0x00000000 0x18 THUMB Debug/../../obj/core_cm3.o - .text.__get_CONTROL - 0x00000000 0x20 THUMB Debug/../../obj/core_cm3.o - .text.__set_CONTROL - 0x00000000 0x18 THUMB Debug/../../obj/core_cm3.o - .text.__REV 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__REV16 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__REVSH 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__RBIT 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXB - 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXH - 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXW - 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__STREXB - 0x00000000 0x2c THUMB Debug/../../obj/core_cm3.o - .text.__STREXH - 0x00000000 0x2c THUMB Debug/../../obj/core_cm3.o - .text.__STREXW - 0x00000000 0x28 THUMB Debug/../../obj/core_cm3.o + .debug_frame 0x00000000 0x1c4 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_info 0x00000000 0x207 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_abbrev 0x00000000 0x11c THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_pubnames + 0x00000000 0xd9 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_pubtypes + 0x00000000 0xf1 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_aranges + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_ranges 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_line 0x00000000 0x2d4 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_str 0x00000000 0x322 THUMB Debug/../../obj/stm32f10x_wwdg.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_wwdg.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_wwdg.o .text 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .data 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .bss 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o @@ -1080,170 +1358,1866 @@ Discarded input sections .data.AHBPrescTable 0x00000000 0x10 THUMB Debug/../../obj/system_stm32f10x.o .text.SystemInit - 0x00000000 0xa8 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0x68 THUMB Debug/../../obj/system_stm32f10x.o .text.SystemCoreClockUpdate - 0x00000000 0x148 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0xd8 THUMB Debug/../../obj/system_stm32f10x.o .text.SetSysClock 0x00000000 0xc THUMB Debug/../../obj/system_stm32f10x.o .text.SetSysClockTo72 - 0x00000000 0x1ac THUMB Debug/../../obj/system_stm32f10x.o - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio - 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.__do_nvdebug_operation - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_abort - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fopen - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgets - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputs - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fread - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fwrite - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fseek - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ftell - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_gets - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fflush - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fclose - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetc - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_putchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_puts - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rewind - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_clearerr - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_feof - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ferror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getch - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_time - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vprintf - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfprintf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ungetc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fsetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_freopen - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_perror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_remove - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rename - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpfile - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpnam - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getenv - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_system - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfscanf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vscanf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_exit - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_enabled - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_kbhit - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ioctl - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_runtime_error - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_break - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getargs - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_geti - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getu - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getl - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getul - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getd - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getll - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getull - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_filesize - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_accept - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_bind - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_listen - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_shutdown - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_socket - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htons - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htonl - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_loadsymbols - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_unloadsymbols - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.getenv_buffer - 0x00000000 0x400 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.__dbgEnabled - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.tmpnam_buffer - 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__errno - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss.libc.errno - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x00000000 0x100 THUMB Debug/../../obj/system_stm32f10x.o + .debug_frame 0x00000000 0xd8 THUMB Debug/../../obj/system_stm32f10x.o + .debug_info 0x00000000 0x462 THUMB Debug/../../obj/system_stm32f10x.o + .debug_abbrev 0x00000000 0x151 THUMB Debug/../../obj/system_stm32f10x.o + .debug_pubnames + 0x00000000 0x97 THUMB Debug/../../obj/system_stm32f10x.o + .debug_pubtypes + 0x00000000 0x10d THUMB Debug/../../obj/system_stm32f10x.o + .debug_aranges + 0x00000000 0x38 THUMB Debug/../../obj/system_stm32f10x.o + .debug_ranges 0x00000000 0x28 THUMB Debug/../../obj/system_stm32f10x.o + .debug_line 0x00000000 0x2f3 THUMB Debug/../../obj/system_stm32f10x.o + .debug_str 0x00000000 0x3b0 THUMB Debug/../../obj/system_stm32f10x.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/system_stm32f10x.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/system_stm32f10x.o + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int + 0x00000000 0x5e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp + 0x00000000 0x49c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long + 0x00000000 0x600 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp + 0x00000000 0x4b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long + 0x00000000 0x730 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp + 0x00000000 0x580 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_compute_wide_metrics + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_print_wide_string + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_wchar + 0x00000000 0x698 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp_wchar + 0x00000000 0x4e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_wchar + 0x00000000 0x6a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp_wchar + 0x00000000 0x4e8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_wchar + 0x00000000 0x7d8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp_wchar + 0x00000000 0x604 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.str1.4 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.ipow10 + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x3f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x160 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x36e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__ungetc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long_long + 0x00000000 0x1c8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_real + 0x00000000 0x274 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int_cc + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_cc + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long_cc + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_cc + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long_cc + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x38c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x14b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x2dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int32_to_float32 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int32_to_float64 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint32_to_float32 + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint32_to_float64 + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int64_to_float32 + 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int64_to_float64 + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint64_to_float32 + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint64_to_float64 + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_int32 + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_int64 + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_uint32 + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_uint64 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_int32 + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_int64 + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_uint32 + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_uint64 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_float64 + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_float32 + 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_add + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_mul + 0x00000000 0xd4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_div + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_cmp + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfrcmple + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpeq + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmplt + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmple + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpgt + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpge + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_add + 0x00000000 0x294 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_mul + 0x00000000 0x16c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_div + 0x00000000 0x214 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmp + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdrcmple + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpeq + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmple + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpge + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmplt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpgt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_signbit + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_signbit + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isinf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isinf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isnan + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isnan + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isfinite + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isfinite + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isnormal + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isnormal + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_classify + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_classify + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float32_infinity + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float32_nan + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float64_infinity + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float64_nan + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .debug_frame 0x00000000 0x440 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_eval + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_evalf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_eval + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_evalf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincos + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincosf + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2 + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanf + 0x00000000 0x170 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2f + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ceil + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cos + 0x00000000 0x1b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosf + 0x00000000 0x258 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.expf + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.coshf + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fma + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmax + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaxf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmin + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fminf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.frexp + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ldexp + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosh + 0x00000000 0xf4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log + 0x00000000 0x240 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanh + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.logf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10f + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modf + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modff + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.pow + 0x00000000 0x118 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2 + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.powf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2f + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbn + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbnf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sin + 0x00000000 0x1b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinf + 0x00000000 0x224 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinh + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinhf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tan + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanf + 0x00000000 0x150 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanh + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanhf + 0x00000000 0x130 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrt + 0x00000000 0x110 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacos + 0x00000000 0x2c0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosh + 0x00000000 0x108 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinh + 0x00000000 0x114 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypot + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asin + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acos + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrtf + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacosf + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acoshf + 0x00000000 0xc8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypotf + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosf + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrtf + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrt + 0x00000000 0x1cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.floor + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmodf + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmod + 0x00000000 0x154 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_a + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_b + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.atanf_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_b + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_frame 0x00000000 0xb80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_info 0x00000000 0x847 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_abbrev 0x00000000 0xdb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_aranges + 0x00000000 0x228 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_ranges 0x00000000 0x750 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_line 0x00000000 0x345 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_str 0x00000000 0x364 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabsf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ceilf + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.floorf + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ldexpf + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.frexpf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .debug_frame 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_umod + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_asr + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_div + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_lsl + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_lsr + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_mod + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_udivmod + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__aeabi_ldivmod + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_cmp + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_ucmp + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.muldi3 + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int32_umod + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int32_div + 0x00000000 0x310 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .rodata.libc.__aeabi_idiv + 0x00000000 0xa C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .rodata.libc.__aeabi_uidiv + 0x00000000 0x46 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int32_mod + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__aeabi_uidivmod + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__aeabi_idivmod + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.ctl_count_leading_zeros_32 + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.ctl_count_leading_zeros_16 + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_shi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_si + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_sqi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_uhi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_uqi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .debug_frame 0x00000000 0x164 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__stdin_ungetc + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.twodigit + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc_fn + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_isctype + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_toupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_tolower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_iswctype + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towlower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_ch + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_str + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigits_leading_blank + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit_optional_zero_suppress + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_wctomb + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_wctomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_mbtowc + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__getc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pow10 + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__putc + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_print_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pre_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__xlltoa + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__xltoa + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__xtoa + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.abs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atexit + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc._execute_at_exit_fns + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.bsearch + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towupper + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_toupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towlower + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_is_exact_power_of_two + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_round_power_of_two + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_count_leading_zeroes + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_ilogb + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_alloc + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_heap_init + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_isctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_isctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalpha + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.islower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__digit + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isspace + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ispunct + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalnum + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isprint + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isgraph + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iscntrl + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isblank + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.toupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.islower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ispunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iscntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.toupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.div + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__aeabi_errno_addr + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_free + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoul + 0x00000000 0xdc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoull + 0x00000000 0x148 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fopen + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfprintf + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfscanf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fscanf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetpos + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ftell + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fileno + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.feof + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ferror + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fstat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gets + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.itoa + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.labs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ldiv + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_init + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_alloc + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_free + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_realloc + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.llabs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.lldiv + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.lltoa + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_global_locale_category + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_locale_category + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localeconv_l + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localeconv + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_compare_locale_name + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ltoa + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.malloc + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getBuf + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fflush + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fseek + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fsetpos + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.rewind + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.output_fn + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputs + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fwrite + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc_fn + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fread + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgets + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.calloc + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.free + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setBuf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fclose + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setbuf + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setvbuf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.realloc + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memccpy + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mempcpy + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memchr + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memcmp + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memmove + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.printf + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.puts + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.qsort + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.rand + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.scanf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.snprintf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.sprintf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.srand + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.sscanf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcasecmp + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcasestr + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_decode_error + 0x00000000 0x78 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strerror + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_register_error_decoder + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_encode_locale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strchr + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcoll + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strdup + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_encode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_decode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime_r + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncasecmp + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncasestr + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncat + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strlcat + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strnchr + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncmp + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncpy + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strlcpy + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strnlen + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strndup + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strnstr + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strpbrk + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strrchr + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strsep + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strstr + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtod + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtof + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtok + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtok_r + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtol + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atoi + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atof + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atol + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtoll + 0x00000000 0xd0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atoll + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtoul + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtoull + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strxfrm + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localtime_r + 0x00000000 0x14c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.difftime + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.checktm + 0x00000000 0x1dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mktime + 0x00000000 0x180 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctime + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctime_r + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gmtime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gmtime_r + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localtime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gettimeofday + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.settimeofday + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.time + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ulltoa + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ultoa + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.utoa + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vprintf + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vscanf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vsnprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vsprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vsscanf + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcschr + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscmp + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscpy + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcslen + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsdup + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsncat + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsnchr + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsncmp + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsncpy + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsnlen + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsnstr + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcspbrk + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrchr + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcssep + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsstr + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstok + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstok_r + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemcpy + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemccpy + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmempcpy + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemmove + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemcmp + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemchr + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemset + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tmpnam + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.duplocale + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.freelocale + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_find_locale + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_set_locale + 0x00000000 0x9c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setlocale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.newlocale + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__user_find_locale + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsinit + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen_l + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen_l + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_wide_char + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_formatted + 0x00000000 0x4cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime_l + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb_l + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc_l + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs_l + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs_l + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs_l + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs_l + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_init_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_mb_max + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_1 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_2 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_3 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_4 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_5 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_6 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_7 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_8 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_9 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_10 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_11 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_13 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_14 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_15 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_16 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1250 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1251 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1252 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1253 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1254 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1255 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1256 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1257 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1258 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans_l + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans_l + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalpha + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswprint + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswblank + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswcntrl + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswspace + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalnum + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswlower + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswupper + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswgraph + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswpunct + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswctype + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_isctype + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1258_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_singleton_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_11 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_13 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_14 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_15 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_16 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1253_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctrans_name_list + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_abbrev_month_names + 0x00000000 0x31 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1253 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_4 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_period + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_singleton + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_6 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_3_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcsrtombs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.power + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_9 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_strtok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EDOM + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_singleton_map + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_9_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_singleton_map + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_singleton_map + 0x00000000 0xe0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_range + 0x00000000 0x470 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_singleton_map + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__RAL_global_locale + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_10_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_4_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_fileno + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_get_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_uc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_singleton + 0x00000000 0xac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_range + 0x00000000 0x534 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_14_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1256_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_11_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_singleton_map + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_range + 0x00000000 0x2d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_singleton + 0x00000000 0x52 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unknown_string + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.str1.4 + 0x00000000 0xf1 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_empty_string + 0x00000000 0x1 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_plus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1250 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_8_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range2_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1251_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.streams + 0x00000000 0xc0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_singleton_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1255 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_singleton_map + 0x00000000 0x134 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_tmpnam_template + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1258 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_ascii_ctype_mask + 0x00000000 0xd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_singleton_map + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_1_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_singleton_map + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stdout + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod2 + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wctomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__ungot + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.stdin + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_3 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_7_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.atexitfn_count + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_singleton_map + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_day_names + 0x00000000 0x3a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_abbrev_day_names + 0x00000000 0x1d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbsrtowcs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_2_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_singleton_map + 0x00000000 0xec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_singleton_map + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_space + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.heap + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_am_pm_indicator + 0x00000000 0x7 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_range_map + 0x00000000 0x5a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_buf + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcrtomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_data + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_range_map + 0x00000000 0x72 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_mon_lengths + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_asctime_buf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_range_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_1 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_2 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.errno_val + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrlen_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_5 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_singleton_map + 0x00000000 0x124 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_7 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1254_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_year_lengths + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_singleton_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_ascii + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1250_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1252 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1254 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_13_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1256 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1257 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_singleton_map + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_month_names + 0x00000000 0x57 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_date_time_format + 0x00000000 0xf C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_range_map + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EILSEQ + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_minus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_lconv_data + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1255_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_lc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctype_class_name_list + 0x00000000 0x4a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1251 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_range + 0x00000000 0x46c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_1_range_map + 0x00000000 0x6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_singleton_map + 0x00000000 0x168 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_singleton + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_set_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_5_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_format_extender + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_singleton_map + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcstok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stderr + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_range_map + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_15_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_time_format + 0x00000000 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__RAL_rand_next + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_date_format + 0x00000000 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_error_decoder_head + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__atexitfns + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_singleton_map + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_6_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_singleton_map + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_utf8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1257_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_comma + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc._tm 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_16_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range2_map + 0x00000000 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1252_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_ERANGE + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_range_map + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_ascii_ctype_map + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_11_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_frame 0x00000000 0x3d6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_info 0x00000000 0x2374 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_abbrev 0x00000000 0x179 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_aranges + 0x00000000 0xfa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_ranges 0x00000000 0xf90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_line 0x00000000 0xb26 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_str 0x00000000 0x203c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.longjmp + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memcpy + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memcpy_fast + 0x00000000 0x3ac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memcpy_small + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memset + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.__aeabi_memset + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.setjmp + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strcpy + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strcmp + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strlen + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .debug_frame 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) Memory Configuration @@ -1257,7 +3231,8 @@ CM3_System_Control_Space 0xe000e000 0x00001000 xw Linker script and memory map - 0x080068f8 __do_debug_operation = __do_debug_operation_mempoll + 0x00000000 __vfprintf = __vfprintf_float_long_long + 0x00000000 __vfscanf = __vfscanf_float_long_long_cc 0x08006000 __FLASH_segment_start__ = 0x8006000 0x08020000 __FLASH_segment_end__ = 0x8020000 0x20000000 __RAM_segment_start__ = 0x20000000 @@ -1294,125 +3269,122 @@ Linker script and memory map 0x00000001 . = ASSERT (((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .vectors is too large to fit in FLASH memory segment) 0x08006154 __init_load_start__ = ALIGN (__vectors_end__, 0x4) -.init 0x08006154 0x114 +.init 0x08006154 0x118 0x08006154 __init_start__ = . *(.init .init.*) - .init 0x08006154 0x114 THUMB Debug/../../obj/cstart.o + .init 0x08006154 0x118 THUMB Debug/../../obj/cstart.o 0x08006154 _start - 0x080061d2 exit - 0x080061f6 reset_handler - 0x08006268 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x08006268 __init_load_end__ = __init_end__ + 0x080061d6 exit + 0x080061fa reset_handler + 0x0800626c __init_end__ = (__init_start__ + SIZEOF (.init)) + 0x0800626c __init_load_end__ = __init_end__ 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .init is too large to fit in FLASH memory segment) - 0x08006268 __text_load_start__ = ALIGN (__init_end__, 0x4) + 0x0800626c __text_load_start__ = ALIGN (__init_end__, 0x4) -.text 0x08006268 0x6d0 - 0x08006268 __text_start__ = . +.text 0x0800626c 0x4ec + 0x0800626c __text_start__ = . *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs - .text.LedInit 0x08006268 0x3c THUMB Debug/../../obj/led.o - 0x08006268 LedInit + .glue_7 0x0800626c 0x0 linker stubs + .glue_7t 0x0800626c 0x0 linker stubs + .text.LedInit 0x0800626c 0x34 THUMB Debug/../../obj/led.o + 0x0800626c LedInit .text.LedToggle - 0x080062a4 0x88 THUMB Debug/../../obj/led.o - 0x080062a4 LedToggle - .text.main 0x0800632c 0x10 THUMB Debug/../../obj/main.o - 0x0800632c main - .text.Init 0x0800633c 0x248 THUMB Debug/../../obj/main.o + 0x080062a0 0x60 THUMB Debug/../../obj/led.o + 0x080062a0 LedToggle + .text.main 0x08006300 0x10 THUMB Debug/../../obj/main.o + 0x08006300 main + .text.Init 0x08006310 0x158 THUMB Debug/../../obj/main.o .text.NVIC_SetPriority - 0x08006584 0x58 THUMB Debug/../../obj/timer.o + 0x08006468 0x54 THUMB Debug/../../obj/timer.o .text.SysTick_Config - 0x080065dc 0x64 THUMB Debug/../../obj/timer.o + 0x080064bc 0x44 THUMB Debug/../../obj/timer.o .text.TimerInit - 0x08006640 0x1c THUMB Debug/../../obj/timer.o - 0x08006640 TimerInit + 0x08006500 0x18 THUMB Debug/../../obj/timer.o + 0x08006500 TimerInit .text.TimerSet - 0x0800665c 0x20 THUMB Debug/../../obj/timer.o - 0x0800665c TimerSet + 0x08006518 0x1c THUMB Debug/../../obj/timer.o + 0x08006518 TimerSet .text.TimerGet - 0x0800667c 0x18 THUMB Debug/../../obj/timer.o - 0x0800667c TimerGet + 0x08006534 0x14 THUMB Debug/../../obj/timer.o + 0x08006534 TimerGet .text.TimerISRHandler - 0x08006694 0x24 THUMB Debug/../../obj/timer.o - 0x08006694 TimerISRHandler + 0x08006548 0x1c THUMB Debug/../../obj/timer.o + 0x08006548 TimerISRHandler .text.UnusedISR - 0x080066b8 0x8 THUMB Debug/../../obj/vectors.o - 0x080066b8 UnusedISR + 0x08006564 0x8 THUMB Debug/../../obj/vectors.o + 0x08006564 UnusedISR .text.GPIO_Init - 0x080066c0 0x1b0 THUMB Debug/../../obj/stm32f10x_gpio.o - 0x080066c0 GPIO_Init + 0x0800656c 0x178 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x0800656c GPIO_Init .text.GPIO_SetBits - 0x08006870 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o - 0x08006870 GPIO_SetBits + 0x080066e4 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x080066e4 GPIO_SetBits .text.GPIO_ResetBits - 0x0800688c 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o - 0x0800688c GPIO_ResetBits + 0x08006700 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x08006700 GPIO_ResetBits .text.RCC_APB2PeriphClockCmd - 0x080068a8 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x080068a8 RCC_APB2PeriphClockCmd - .text.libdebugio.__do_debug_operation_mempoll - 0x080068f8 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x080068f8 __do_debug_operation_mempoll - .text.libc.__debug_io_lock - 0x08006930 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08006930 __debug_io_lock - .text.libc.__debug_io_unlock - 0x08006934 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08006934 __debug_io_unlock - 0x08006938 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x08006938 __text_load_end__ = __text_end__ + 0x0800671c 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x0800671c RCC_APB2PeriphClockCmd + 0x08006758 __text_end__ = (__text_start__ + SIZEOF (.text)) + 0x08006758 __text_load_end__ = __text_end__ .vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0 linker stubs .v4_bx 0x00000000 0x0 .v4_bx 0x00000000 0x0 linker stubs - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .text is too large to fit in FLASH memory segment) - 0x08006938 __dtors_load_start__ = ALIGN (__text_end__, 0x4) -.dtors 0x08006938 0x0 - 0x08006938 __dtors_start__ = . +.iplt 0x00000000 0x0 + .iplt 0x00000000 0x0 THUMB Debug/../../obj/cstart.o + +.rel.dyn 0x08006000 0x0 + .rel.iplt 0x08006000 0x0 THUMB Debug/../../obj/cstart.o + 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .text is too large to fit in FLASH memory segment) + 0x08006758 __dtors_load_start__ = ALIGN (__text_end__, 0x4) + +.dtors 0x08006758 0x0 + 0x08006758 __dtors_start__ = . *(SORT(.dtors.*)) *(.dtors) *(.fini_array .fini_array.*) - 0x08006938 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x08006938 __dtors_load_end__ = __dtors_end__ + 0x08006758 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) + 0x08006758 __dtors_load_end__ = __dtors_end__ 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .dtors is too large to fit in FLASH memory segment) - 0x08006938 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) + 0x08006758 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) -.ctors 0x08006938 0x0 - 0x08006938 __ctors_start__ = . +.ctors 0x08006758 0x0 + 0x08006758 __ctors_start__ = . *(SORT(.ctors.*)) *(.ctors) *(.init_array .init_array.*) - 0x08006938 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x08006938 __ctors_load_end__ = __ctors_end__ + 0x08006758 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) + 0x08006758 __ctors_load_end__ = __ctors_end__ 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .ctors is too large to fit in FLASH memory segment) - 0x08006938 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) + 0x08006758 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) -.rodata 0x08006938 0x0 - 0x08006938 __rodata_start__ = . +.rodata 0x08006758 0x0 + 0x08006758 __rodata_start__ = . *(.rodata .rodata.* .gnu.linkonce.r.*) - 0x08006938 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x08006938 __rodata_load_end__ = __rodata_end__ + 0x08006758 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) + 0x08006758 __rodata_load_end__ = __rodata_end__ 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .rodata is too large to fit in FLASH memory segment) - 0x08006938 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) + 0x08006758 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) -.ARM.exidx 0x08006938 0x0 - 0x08006938 __ARM.exidx_start__ = . - 0x08006938 __exidx_start = __ARM.exidx_start__ +.ARM.exidx 0x08006758 0x0 + 0x08006758 __ARM.exidx_start__ = . + 0x08006758 __exidx_start = __ARM.exidx_start__ *(.ARM.exidx .ARM.exidx.*) - 0x08006938 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) - 0x08006938 __exidx_end = __ARM.exidx_end__ - 0x08006938 __ARM.exidx_load_end__ = __ARM.exidx_end__ + 0x08006758 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) + 0x08006758 __exidx_end = __ARM.exidx_end__ + 0x08006758 __ARM.exidx_load_end__ = __ARM.exidx_end__ 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .ARM.exidx is too large to fit in FLASH memory segment) - 0x08006938 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) + 0x08006758 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) -.fast 0x20000000 0x0 load address 0x08006938 +.fast 0x20000000 0x0 load address 0x08006758 0x20000000 __fast_start__ = . *(.fast .fast.*) 0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x08006938 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) + 0x08006758 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) 0x00000001 . = ASSERT ((((__fast_load_start__ + SIZEOF (.fast)) >= __FLASH_segment_start__) && ((__fast_load_start__ + SIZEOF (.fast)) <= (__FLASH_segment_start__ + 0x20000))), error: .fast is too large to fit in FLASH memory segment) .fast_run 0x20000000 0x0 @@ -1421,13 +3393,16 @@ Linker script and memory map 0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) 0x20000000 __fast_run_load_end__ = __fast_run_end__ 0x00000001 . = ASSERT (((__fast_run_end__ >= __RAM_segment_start__) && (__fast_run_end__ <= (__RAM_segment_start__ + 0x5000))), error: .fast_run is too large to fit in RAM memory segment) - 0x08006938 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) + 0x08006758 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) -.data 0x20000000 0x0 load address 0x08006938 +.data 0x20000000 0x0 load address 0x08006758 0x20000000 __data_start__ = . *(.data .data.* .gnu.linkonce.d.*) 0x20000000 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x08006938 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + 0x08006758 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + +.igot.plt 0x00000000 0x0 + .igot.plt 0x00000000 0x0 THUMB Debug/../../obj/cstart.o 0x00000001 . = ASSERT ((((__data_load_start__ + SIZEOF (.data)) >= __FLASH_segment_start__) && ((__data_load_start__ + SIZEOF (.data)) <= (__FLASH_segment_start__ + 0x20000))), error: .data is too large to fit in FLASH memory segment) .data_run 0x20000000 0x0 @@ -1438,87 +3413,81 @@ Linker script and memory map 0x00000001 . = ASSERT (((__data_run_end__ >= __RAM_segment_start__) && (__data_run_end__ <= (__RAM_segment_start__ + 0x5000))), error: .data_run is too large to fit in RAM memory segment) 0x20000000 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) -.bss 0x20000000 0x14 +.bss 0x20000000 0xc 0x20000000 __bss_start__ = . *(.bss .bss.* .gnu.linkonce.b.*) - .bss.timer_counter_last.3144 + .bss.timer_counter_last.6196 0x20000000 0x4 THUMB Debug/../../obj/led.o - .bss.led_toggle_state.3143 + .bss.led_toggle_state.6195 0x20000004 0x1 THUMB Debug/../../obj/led.o - *fill* 0x20000005 0x3 00 + *fill* 0x20000005 0x3 .bss.millisecond_counter 0x20000008 0x4 THUMB Debug/../../obj/timer.o - .bss.libdebugio.dbgCommWord - 0x2000000c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x2000000c dbgCommWord - .bss.libdebugio.dbgCntrlWord_mempoll - 0x20000010 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x20000010 dbgCntrlWord_mempoll *(COMMON) - 0x20000014 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x20000014 __bss_load_end__ = __bss_end__ + 0x2000000c __bss_end__ = (__bss_start__ + SIZEOF (.bss)) + 0x2000000c __bss_load_end__ = __bss_end__ 0x00000001 . = ASSERT (((__bss_end__ >= __RAM_segment_start__) && (__bss_end__ <= (__RAM_segment_start__ + 0x5000))), error: .bss is too large to fit in RAM memory segment) - 0x20000014 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) + 0x2000000c __non_init_load_start__ = ALIGN (__bss_end__, 0x4) -.non_init 0x20000014 0x0 - 0x20000014 __non_init_start__ = . +.non_init 0x2000000c 0x0 + 0x2000000c __non_init_start__ = . *(.non_init .non_init.*) - 0x20000014 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x20000014 __non_init_load_end__ = __non_init_end__ + 0x2000000c __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) + 0x2000000c __non_init_load_end__ = __non_init_end__ 0x00000001 . = ASSERT (((__non_init_end__ >= __RAM_segment_start__) && (__non_init_end__ <= (__RAM_segment_start__ + 0x5000))), error: .non_init is too large to fit in RAM memory segment) - 0x20000014 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) + 0x2000000c __heap_load_start__ = ALIGN (__non_init_end__, 0x4) -.heap 0x20000014 0x80 - 0x20000014 __heap_start__ = . +.heap 0x2000000c 0x80 + 0x2000000c __heap_start__ = . *(.heap .heap.*) - 0x20000094 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x20000014 0x80 00 - 0x20000094 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x20000094 __heap_load_end__ = __heap_end__ + 0x2000008c . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) + *fill* 0x2000000c 0x80 + 0x2000008c __heap_end__ = (__heap_start__ + SIZEOF (.heap)) + 0x2000008c __heap_load_end__ = __heap_end__ 0x00000001 . = ASSERT (((__heap_end__ >= __RAM_segment_start__) && (__heap_end__ <= (__RAM_segment_start__ + 0x5000))), error: .heap is too large to fit in RAM memory segment) - 0x20000094 __stack_load_start__ = ALIGN (__heap_end__, 0x4) + 0x2000008c __stack_load_start__ = ALIGN (__heap_end__, 0x4) -.stack 0x20000094 0x100 - 0x20000094 __stack_start__ = . +.stack 0x2000008c 0x100 + 0x2000008c __stack_start__ = . *(.stack .stack.*) - 0x20000194 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x20000094 0x100 00 - 0x20000194 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x20000194 __stack_load_end__ = __stack_end__ + 0x2000018c . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) + *fill* 0x2000008c 0x100 + 0x2000018c __stack_end__ = (__stack_start__ + SIZEOF (.stack)) + 0x2000018c __stack_load_end__ = __stack_end__ 0x00000001 . = ASSERT (((__stack_end__ >= __RAM_segment_start__) && (__stack_end__ <= (__RAM_segment_start__ + 0x5000))), error: .stack is too large to fit in RAM memory segment) - 0x20000194 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) + 0x2000018c __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) -.stack_process 0x20000194 0x0 - 0x20000194 __stack_process_start__ = . +.stack_process 0x2000018c 0x0 + 0x2000018c __stack_process_start__ = . *(.stack_process .stack_process.*) - 0x20000194 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) - 0x20000194 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) - 0x20000194 __stack_process_load_end__ = __stack_process_end__ + 0x2000018c . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) + 0x2000018c __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) + 0x2000018c __stack_process_load_end__ = __stack_process_end__ 0x00000001 . = ASSERT (((__stack_process_end__ >= __RAM_segment_start__) && (__stack_process_end__ <= (__RAM_segment_start__ + 0x5000))), error: .stack_process is too large to fit in RAM memory segment) - 0x20000194 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) + 0x2000018c __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) -.tbss 0x20000194 0x0 - 0x20000194 __tbss_start__ = . +.tbss 0x2000018c 0x0 + 0x2000018c __tbss_start__ = . *(.tbss .tbss.*) - 0x20000194 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) - 0x20000194 __tbss_load_end__ = __tbss_end__ + 0x2000018c __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) + 0x2000018c __tbss_load_end__ = __tbss_end__ 0x00000001 . = ASSERT (((__tbss_end__ >= __RAM_segment_start__) && (__tbss_end__ <= (__RAM_segment_start__ + 0x5000))), error: .tbss is too large to fit in RAM memory segment) - 0x08006938 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + 0x08006758 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) -.tdata 0x20000194 0x0 load address 0x08006938 - 0x20000194 __tdata_start__ = . +.tdata 0x2000018c 0x0 load address 0x08006758 + 0x2000018c __tdata_start__ = . *(.tdata .tdata.*) - 0x20000194 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) - 0x08006938 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) - 0x08006938 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) + 0x2000018c __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) + 0x08006758 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) + 0x08006758 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) 0x00000001 . = ASSERT ((((__tdata_load_start__ + SIZEOF (.tdata)) >= __FLASH_segment_start__) && ((__tdata_load_start__ + SIZEOF (.tdata)) <= (__FLASH_segment_start__ + 0x20000))), error: .tdata is too large to fit in FLASH memory segment) -.tdata_run 0x20000194 0x0 - 0x20000194 __tdata_run_start__ = . - 0x20000194 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) - 0x20000194 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) - 0x20000194 __tdata_run_load_end__ = __tdata_run_end__ - 0x20000194 __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) +.tdata_run 0x2000018c 0x0 + 0x2000018c __tdata_run_start__ = . + 0x2000018c . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) + 0x2000018c __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) + 0x2000018c __tdata_run_load_end__ = __tdata_run_end__ + 0x2000018c __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) 0x00000001 . = ASSERT (((__tdata_run_end__ >= __RAM_segment_start__) && (__tdata_run_end__ <= (__RAM_segment_start__ + 0x5000))), error: .tdata_run is too large to fit in RAM memory segment) START GROUP LOAD THUMB Debug/../../obj/cstart.o @@ -1549,222 +3518,72 @@ LOAD THUMB Debug/../../obj/stm32f10x_spi.o LOAD THUMB Debug/../../obj/stm32f10x_tim.o LOAD THUMB Debug/../../obj/stm32f10x_usart.o LOAD THUMB Debug/../../obj/stm32f10x_wwdg.o -LOAD THUMB Debug/../../obj/core_cm3.o LOAD THUMB Debug/../../obj/system_stm32f10x.o -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcpp_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_targetio_impl_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_mempoll_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcpp_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o END GROUP OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/../bin/demoprog_olimex_stm32h103.elf elf32-littlearm) .ARM.attributes - 0x00000000 0x10 + 0x00000000 0x2f .ARM.attributes - 0x00000000 0x10 THUMB Debug/../../obj/cstart.o + 0x00000000 0x21 THUMB Debug/../../obj/cstart.o .ARM.attributes - 0x00000010 0x10 THUMB Debug/../../obj/led.o + 0x00000021 0x33 THUMB Debug/../../obj/led.o .ARM.attributes - 0x00000020 0x10 THUMB Debug/../../obj/main.o + 0x00000054 0x33 THUMB Debug/../../obj/main.o .ARM.attributes - 0x00000030 0x10 THUMB Debug/../../obj/timer.o + 0x00000087 0x33 THUMB Debug/../../obj/timer.o .ARM.attributes - 0x00000040 0x10 THUMB Debug/../../obj/vectors.o + 0x000000ba 0x33 THUMB Debug/../../obj/vectors.o .ARM.attributes - 0x00000050 0x10 THUMB Debug/../../obj/misc.o + 0x000000ed 0x33 THUMB Debug/../../obj/stm32f10x_gpio.o .ARM.attributes - 0x00000060 0x10 THUMB Debug/../../obj/stm32f10x_adc.o - .ARM.attributes - 0x00000070 0x10 THUMB Debug/../../obj/stm32f10x_bkp.o - .ARM.attributes - 0x00000080 0x10 THUMB Debug/../../obj/stm32f10x_can.o - .ARM.attributes - 0x00000090 0x10 THUMB Debug/../../obj/stm32f10x_cec.o - .ARM.attributes - 0x000000a0 0x10 THUMB Debug/../../obj/stm32f10x_crc.o - .ARM.attributes - 0x000000b0 0x10 THUMB Debug/../../obj/stm32f10x_dac.o - .ARM.attributes - 0x000000c0 0x10 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .ARM.attributes - 0x000000d0 0x10 THUMB Debug/../../obj/stm32f10x_dma.o - .ARM.attributes - 0x000000e0 0x10 THUMB Debug/../../obj/stm32f10x_exti.o - .ARM.attributes - 0x000000f0 0x10 THUMB Debug/../../obj/stm32f10x_flash.o - .ARM.attributes - 0x00000100 0x10 THUMB Debug/../../obj/stm32f10x_fsmc.o - .ARM.attributes - 0x00000110 0x10 THUMB Debug/../../obj/stm32f10x_gpio.o - .ARM.attributes - 0x00000120 0x10 THUMB Debug/../../obj/stm32f10x_i2c.o - .ARM.attributes - 0x00000130 0x10 THUMB Debug/../../obj/stm32f10x_iwdg.o - .ARM.attributes - 0x00000140 0x10 THUMB Debug/../../obj/stm32f10x_pwr.o - .ARM.attributes - 0x00000150 0x10 THUMB Debug/../../obj/stm32f10x_rcc.o - .ARM.attributes - 0x00000160 0x10 THUMB Debug/../../obj/stm32f10x_rtc.o - .ARM.attributes - 0x00000170 0x10 THUMB Debug/../../obj/stm32f10x_sdio.o - .ARM.attributes - 0x00000180 0x10 THUMB Debug/../../obj/stm32f10x_spi.o - .ARM.attributes - 0x00000190 0x10 THUMB Debug/../../obj/stm32f10x_tim.o - .ARM.attributes - 0x000001a0 0x10 THUMB Debug/../../obj/stm32f10x_usart.o - .ARM.attributes - 0x000001b0 0x10 THUMB Debug/../../obj/stm32f10x_wwdg.o - .ARM.attributes - 0x000001c0 0x10 THUMB Debug/../../obj/core_cm3.o - .ARM.attributes - 0x000001d0 0x10 THUMB Debug/../../obj/system_stm32f10x.o - .ARM.attributes - 0x000001e0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .ARM.attributes - 0x000001f0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x00000120 0x33 THUMB Debug/../../obj/stm32f10x_rcc.o -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e THUMB Debug/../../obj/led.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f THUMB Debug/../../obj/main.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/timer.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/vectors.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/misc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_adc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_bkp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_can.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_cec.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_crc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_dac.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_dma.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_exti.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_flash.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_fsmc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_gpio.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_i2c.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_iwdg.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_pwr.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_rcc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_rtc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_sdio.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_spi.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_tim.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_usart.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_wwdg.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/core_cm3.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/system_stm32f10x.o - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.comment 0x00000000 0x4c + .comment 0x00000000 0x4c THUMB Debug/../../obj/led.o + 0x4d (size before relaxing) + .comment 0x0000004c 0x4d THUMB Debug/../../obj/main.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/timer.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/vectors.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_gpio.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_rcc.o -.debug_line 0x00000000 0x8035 - .debug_line 0x00000000 0xed THUMB Debug/../../obj/cstart.o - .debug_line 0x000000ed 0x2e3 THUMB Debug/../../obj/led.o - .debug_line 0x000003d0 0x278 THUMB Debug/../../obj/main.o - .debug_line 0x00000648 0x295 THUMB Debug/../../obj/timer.o - .debug_line 0x000008dd 0x12b THUMB Debug/../../obj/vectors.o - .debug_line 0x00000a08 0x343 THUMB Debug/../../obj/misc.o - .debug_line 0x00000d4b 0x622 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_line 0x0000136d 0x331 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_line 0x0000169e 0x658 THUMB Debug/../../obj/stm32f10x_can.o - .debug_line 0x00001cf6 0x412 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_line 0x00002108 0x2ca THUMB Debug/../../obj/stm32f10x_crc.o - .debug_line 0x000023d2 0x3ee THUMB Debug/../../obj/stm32f10x_dac.o - .debug_line 0x000027c0 0x285 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_line 0x00002a45 0x402 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_line 0x00002e47 0x3a3 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_line 0x000031ea 0x5d8 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_line 0x000037c2 0x554 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_line 0x00003d16 0x4ae THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_line 0x000041c4 0x5d6 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_line 0x0000479a 0x2bb THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_line 0x00004a55 0x335 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_line 0x00004d8a 0x5bc THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_line 0x00005346 0x378 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_line 0x000056be 0x54a THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_line 0x00005c08 0x521 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_line 0x00006129 0xb94 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_line 0x00006cbd 0x59a THUMB Debug/../../obj/stm32f10x_usart.o - .debug_line 0x00007257 0x2e2 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_line 0x00007539 0x2ba THUMB Debug/../../obj/core_cm3.o - .debug_line 0x000077f3 0x27e THUMB Debug/../../obj/system_stm32f10x.o - .debug_line 0x00007a71 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_line 0x00007fc1 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_line 0x00000000 0x14d8 + .debug_line 0x00000000 0x117 THUMB Debug/../../obj/cstart.o + .debug_line 0x00000117 0x2ce THUMB Debug/../../obj/led.o + .debug_line 0x000003e5 0x271 THUMB Debug/../../obj/main.o + .debug_line 0x00000656 0x287 THUMB Debug/../../obj/timer.o + .debug_line 0x000008dd 0x180 THUMB Debug/../../obj/vectors.o + .debug_line 0x00000a5d 0x4c0 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_line 0x00000f1d 0x5bb THUMB Debug/../../obj/stm32f10x_rcc.o -.debug_info 0x00000000 0xcb26 +.debug_info 0x00000000 0x1b55 .debug_info 0x00000000 0xe6 THUMB Debug/../../obj/cstart.o - .debug_info 0x000000e6 0x251 THUMB Debug/../../obj/led.o - .debug_info 0x00000337 0x25d THUMB Debug/../../obj/main.o - .debug_info 0x00000594 0x5e9 THUMB Debug/../../obj/timer.o - .debug_info 0x00000b7d 0x10e THUMB Debug/../../obj/vectors.o - .debug_info 0x00000c8b 0x53f THUMB Debug/../../obj/misc.o - .debug_info 0x000011ca 0xc07 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_info 0x00001dd1 0x872 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_info 0x00002643 0xc50 THUMB Debug/../../obj/stm32f10x_can.o - .debug_info 0x00003293 0x435 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_info 0x000036c8 0x1f9 THUMB Debug/../../obj/stm32f10x_crc.o - .debug_info 0x000038c1 0x4d1 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_info 0x00003d92 0x153 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_info 0x00003ee5 0x49b THUMB Debug/../../obj/stm32f10x_dma.o - .debug_info 0x00004380 0x35a THUMB Debug/../../obj/stm32f10x_exti.o - .debug_info 0x000046da 0x812 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_info 0x00004eec 0x992 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_info 0x0000587e 0x71c THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_info 0x00005f9a 0xb8d THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_info 0x00006b27 0x1f9 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_info 0x00006d20 0x454 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_info 0x00007174 0x8fa THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_info 0x00007a6e 0x463 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_info 0x00007ed1 0x888 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_info 0x00008759 0x96a THUMB Debug/../../obj/stm32f10x_spi.o - .debug_info 0x000090c3 0x1e11 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_info 0x0000aed4 0xa65 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_info 0x0000b939 0x22e THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_info 0x0000bb67 0x53a THUMB Debug/../../obj/core_cm3.o - .debug_info 0x0000c0a1 0x499 THUMB Debug/../../obj/system_stm32f10x.o - .debug_info 0x0000c53a 0x51f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_info 0x0000ca59 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_info 0x000000e6 0x23e THUMB Debug/../../obj/led.o + .debug_info 0x00000324 0x232 THUMB Debug/../../obj/main.o + .debug_info 0x00000556 0x5de THUMB Debug/../../obj/timer.o + .debug_info 0x00000b34 0xfc THUMB Debug/../../obj/vectors.o + .debug_info 0x00000c30 0x6bc THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_info 0x000012ec 0x869 THUMB Debug/../../obj/stm32f10x_rcc.o -.debug_abbrev 0x00000000 0x260c +.debug_abbrev 0x00000000 0x815 .debug_abbrev 0x00000000 0x14 THUMB Debug/../../obj/cstart.o - .debug_abbrev 0x00000014 0xec THUMB Debug/../../obj/led.o - .debug_abbrev 0x00000100 0xe1 THUMB Debug/../../obj/main.o - .debug_abbrev 0x000001e1 0x195 THUMB Debug/../../obj/timer.o - .debug_abbrev 0x00000376 0xd6 THUMB Debug/../../obj/vectors.o - .debug_abbrev 0x0000044c 0x135 THUMB Debug/../../obj/misc.o - .debug_abbrev 0x00000581 0x174 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_abbrev 0x000006f5 0x156 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_abbrev 0x0000084b 0x1ac THUMB Debug/../../obj/stm32f10x_can.o - .debug_abbrev 0x000009f7 0x189 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_abbrev 0x00000b80 0x10a THUMB Debug/../../obj/stm32f10x_crc.o - .debug_abbrev 0x00000c8a 0x169 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_abbrev 0x00000df3 0xda THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_abbrev 0x00000ecd 0x14e THUMB Debug/../../obj/stm32f10x_dma.o - .debug_abbrev 0x0000101b 0x14a THUMB Debug/../../obj/stm32f10x_exti.o - .debug_abbrev 0x00001165 0x162 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_abbrev 0x000012c7 0x166 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_abbrev 0x0000142d 0x1a4 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_abbrev 0x000015d1 0x15d THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_abbrev 0x0000172e 0xfa THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_abbrev 0x00001828 0x184 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_abbrev 0x000019ac 0x191 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_abbrev 0x00001b3d 0x166 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_abbrev 0x00001ca3 0x1a2 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_abbrev 0x00001e45 0x15d THUMB Debug/../../obj/stm32f10x_spi.o - .debug_abbrev 0x00001fa2 0x172 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_abbrev 0x00002114 0x15b THUMB Debug/../../obj/stm32f10x_usart.o - .debug_abbrev 0x0000226f 0xf8 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_abbrev 0x00002367 0xca THUMB Debug/../../obj/core_cm3.o - .debug_abbrev 0x00002431 0x17e THUMB Debug/../../obj/system_stm32f10x.o - .debug_abbrev 0x000025af 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_abbrev 0x000025e7 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_abbrev 0x00000014 0xf4 THUMB Debug/../../obj/led.o + .debug_abbrev 0x00000108 0xea THUMB Debug/../../obj/main.o + .debug_abbrev 0x000001f2 0x1bb THUMB Debug/../../obj/timer.o + .debug_abbrev 0x000003ad 0xda THUMB Debug/../../obj/vectors.o + .debug_abbrev 0x00000487 0x1cf THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_abbrev 0x00000656 0x1bf THUMB Debug/../../obj/stm32f10x_rcc.o -.debug_aranges 0x00000000 0x1548 +.debug_aranges 0x00000000 0x298 .debug_aranges 0x00000000 0x20 THUMB Debug/../../obj/cstart.o .debug_aranges @@ -1776,218 +3595,66 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Cros .debug_aranges 0x000000b8 0x20 THUMB Debug/../../obj/vectors.o .debug_aranges - 0x000000d8 0x40 THUMB Debug/../../obj/misc.o + 0x000000d8 0xa8 THUMB Debug/../../obj/stm32f10x_gpio.o .debug_aranges - 0x00000118 0x138 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_aranges - 0x00000250 0x78 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_aranges - 0x000002c8 0xe0 THUMB Debug/../../obj/stm32f10x_can.o - .debug_aranges - 0x000003a8 0x88 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_aranges - 0x00000430 0x48 THUMB Debug/../../obj/stm32f10x_crc.o - .debug_aranges - 0x00000478 0x78 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_aranges - 0x000004f0 0x30 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_aranges - 0x00000520 0x70 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_aranges - 0x00000590 0x58 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_aranges - 0x000005e8 0xf8 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_aranges - 0x000006e0 0xb0 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_aranges - 0x00000790 0xa8 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_aranges - 0x00000838 0x120 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_aranges - 0x00000958 0x48 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_aranges - 0x000009a0 0x70 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_aranges - 0x00000a10 0x118 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_aranges - 0x00000b28 0x88 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_aranges - 0x00000bb0 0x108 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_aranges - 0x00000cb8 0xd0 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_aranges - 0x00000d88 0x2f0 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_aranges - 0x00001078 0x100 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_aranges - 0x00001178 0x58 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_aranges - 0x000011d0 0xc8 THUMB Debug/../../obj/core_cm3.o - .debug_aranges - 0x00001298 0x38 THUMB Debug/../../obj/system_stm32f10x.o - .debug_aranges - 0x000012d0 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_aranges - 0x000014e8 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x00000180 0x118 THUMB Debug/../../obj/stm32f10x_rcc.o -.debug_frame 0x00000000 0x58c4 - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/led.o - .debug_frame 0x00000068 0x60 THUMB Debug/../../obj/main.o - .debug_frame 0x000000c8 0xf0 THUMB Debug/../../obj/timer.o - .debug_frame 0x000001b8 0x30 THUMB Debug/../../obj/vectors.o - .debug_frame 0x000001e8 0xd8 THUMB Debug/../../obj/misc.o - .debug_frame 0x000002c0 0x5ac THUMB Debug/../../obj/stm32f10x_adc.o - .debug_frame 0x0000086c 0x1cc THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_frame 0x00000a38 0x400 THUMB Debug/../../obj/stm32f10x_can.o - .debug_frame 0x00000e38 0x22c THUMB Debug/../../obj/stm32f10x_cec.o - .debug_frame 0x00001064 0xe8 THUMB Debug/../../obj/stm32f10x_crc.o - .debug_frame 0x0000114c 0x1ec THUMB Debug/../../obj/stm32f10x_dac.o - .debug_frame 0x00001338 0x78 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_frame 0x000013b0 0x1c8 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_frame 0x00001578 0x148 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_frame 0x000016c0 0x470 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_frame 0x00001b30 0x300 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_frame 0x00001e30 0x2e4 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_frame 0x00002114 0x540 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_frame 0x00002654 0xf0 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_frame 0x00002744 0x1b4 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_frame 0x000028f8 0x4fc THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_frame 0x00002df4 0x22c THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_frame 0x00003020 0x490 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_frame 0x000034b0 0x3b0 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_frame 0x00003860 0xe64 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_frame 0x000046c4 0x4a0 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_frame 0x00004b64 0x134 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_frame 0x00004c98 0x358 THUMB Debug/../../obj/core_cm3.o - .debug_frame 0x00004ff0 0xa8 THUMB Debug/../../obj/system_stm32f10x.o - .debug_frame 0x00005098 0x78c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_frame 0x00005824 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_frame 0x00000000 0xeac + .debug_frame 0x00000000 0x80 THUMB Debug/../../obj/led.o + .debug_frame 0x00000080 0x6c THUMB Debug/../../obj/main.o + .debug_frame 0x000000ec 0x14c THUMB Debug/../../obj/timer.o + .debug_frame 0x00000238 0x30 THUMB Debug/../../obj/vectors.o + .debug_frame 0x00000268 0x46c THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_frame 0x000006d4 0x7d8 THUMB Debug/../../obj/stm32f10x_rcc.o -.debug_loc 0x00000000 0x7454 - .debug_loc 0x00000000 0x70 THUMB Debug/../../obj/led.o - .debug_loc 0x00000070 0x64 THUMB Debug/../../obj/main.o - .debug_loc 0x000000d4 0x12c THUMB Debug/../../obj/timer.o - .debug_loc 0x00000200 0x2c THUMB Debug/../../obj/vectors.o - .debug_loc 0x0000022c 0x118 THUMB Debug/../../obj/misc.o - .debug_loc 0x00000344 0x7d4 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_loc 0x00000b18 0x264 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_loc 0x00000d7c 0x578 THUMB Debug/../../obj/stm32f10x_can.o - .debug_loc 0x000012f4 0x2ec THUMB Debug/../../obj/stm32f10x_cec.o - .debug_loc 0x000015e0 0x12c THUMB Debug/../../obj/stm32f10x_crc.o - .debug_loc 0x0000170c 0x294 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_loc 0x000019a0 0x90 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_loc 0x00001a30 0x268 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_loc 0x00001c98 0x1b4 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_loc 0x00001e4c 0x5d8 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_loc 0x00002424 0x41c THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_loc 0x00002840 0x3e4 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_loc 0x00002c24 0x738 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_loc 0x0000335c 0x138 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_loc 0x00003494 0x238 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_loc 0x000036cc 0x6dc THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_loc 0x00003da8 0x2e0 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_loc 0x00004088 0x648 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_loc 0x000046d0 0x508 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_loc 0x00004bd8 0x13e8 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_loc 0x00005fc0 0x658 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_loc 0x00006618 0x190 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_loc 0x000067a8 0x3f0 THUMB Debug/../../obj/core_cm3.o - .debug_loc 0x00006b98 0xc8 THUMB Debug/../../obj/system_stm32f10x.o - .debug_loc 0x00006c60 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) +.debug_pubnames + 0x00000000 0xb7d + .debug_pubnames + 0x00000000 0x123 THUMB Debug/../../obj/led.o + .debug_pubnames + 0x00000123 0x36 THUMB Debug/../../obj/main.o + .debug_pubnames + 0x00000159 0x41f THUMB Debug/../../obj/timer.o + .debug_pubnames + 0x00000578 0x2d THUMB Debug/../../obj/vectors.o + .debug_pubnames + 0x000005a5 0x2ae THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_pubnames + 0x00000853 0x32a THUMB Debug/../../obj/stm32f10x_rcc.o -.debug_ranges 0x00000000 0x1338 +.debug_pubtypes + 0x00000000 0x6f4 + .debug_pubtypes + 0x00000000 0x139 THUMB Debug/../../obj/led.o + .debug_pubtypes + 0x00000139 0x109 THUMB Debug/../../obj/main.o + .debug_pubtypes + 0x00000242 0x12a THUMB Debug/../../obj/timer.o + .debug_pubtypes + 0x0000036c 0xdb THUMB Debug/../../obj/vectors.o + .debug_pubtypes + 0x00000447 0x169 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_pubtypes + 0x000005b0 0x144 THUMB Debug/../../obj/stm32f10x_rcc.o + +.debug_ranges 0x00000000 0x218 .debug_ranges 0x00000000 0x18 THUMB Debug/../../obj/led.o .debug_ranges 0x00000018 0x18 THUMB Debug/../../obj/main.o .debug_ranges 0x00000030 0x38 THUMB Debug/../../obj/timer.o .debug_ranges 0x00000068 0x10 THUMB Debug/../../obj/vectors.o - .debug_ranges 0x00000078 0x30 THUMB Debug/../../obj/misc.o - .debug_ranges 0x000000a8 0x128 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_ranges 0x000001d0 0x68 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_ranges 0x00000238 0xd0 THUMB Debug/../../obj/stm32f10x_can.o - .debug_ranges 0x00000308 0x78 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_ranges 0x00000380 0x38 THUMB Debug/../../obj/stm32f10x_crc.o - .debug_ranges 0x000003b8 0x68 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_ranges 0x00000420 0x20 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_ranges 0x00000440 0x60 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_ranges 0x000004a0 0x48 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_ranges 0x000004e8 0xe8 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_ranges 0x000005d0 0xa0 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_ranges 0x00000670 0x98 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_ranges 0x00000708 0x110 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_ranges 0x00000818 0x38 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_ranges 0x00000850 0x60 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_ranges 0x000008b0 0x108 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_ranges 0x000009b8 0x78 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_ranges 0x00000a30 0xf8 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_ranges 0x00000b28 0xc0 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_ranges 0x00000be8 0x2e0 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_ranges 0x00000ec8 0xf0 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_ranges 0x00000fb8 0x48 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_ranges 0x00001000 0xb8 THUMB Debug/../../obj/core_cm3.o - .debug_ranges 0x000010b8 0x28 THUMB Debug/../../obj/system_stm32f10x.o - .debug_ranges 0x000010e0 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_ranges 0x000012e8 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_ranges 0x00000078 0x98 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_ranges 0x00000110 0x108 THUMB Debug/../../obj/stm32f10x_rcc.o -.debug_str 0x00000000 0x6012 - .debug_str 0x00000000 0x298 THUMB Debug/../../obj/led.o - 0x2bf (size before relaxing) - .debug_str 0x00000298 0xf6 THUMB Debug/../../obj/main.o - 0x1e1 (size before relaxing) - .debug_str 0x0000038e 0x46e THUMB Debug/../../obj/timer.o - 0x55f (size before relaxing) - .debug_str 0x000007fc 0x95 THUMB Debug/../../obj/vectors.o - 0x162 (size before relaxing) - .debug_str 0x00000891 0x1e9 THUMB Debug/../../obj/misc.o - 0x3ab (size before relaxing) - .debug_str 0x00000a7a 0x59b THUMB Debug/../../obj/stm32f10x_adc.o - 0x6e3 (size before relaxing) - .debug_str 0x00001015 0x425 THUMB Debug/../../obj/stm32f10x_bkp.o - 0x59d (size before relaxing) - .debug_str 0x0000143a 0x577 THUMB Debug/../../obj/stm32f10x_can.o - 0x716 (size before relaxing) - .debug_str 0x000019b1 0x20d THUMB Debug/../../obj/stm32f10x_cec.o - 0x35e (size before relaxing) - .debug_str 0x00001bbe 0x123 THUMB Debug/../../obj/stm32f10x_crc.o - 0x223 (size before relaxing) - .debug_str 0x00001ce1 0x273 THUMB Debug/../../obj/stm32f10x_dac.o - 0x397 (size before relaxing) - .debug_str 0x00001f54 0xf1 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - 0x1ef (size before relaxing) - .debug_str 0x00002045 0x277 THUMB Debug/../../obj/stm32f10x_dma.o - 0x3a9 (size before relaxing) - .debug_str 0x000022bc 0x220 THUMB Debug/../../obj/stm32f10x_exti.o - 0x346 (size before relaxing) - .debug_str 0x000024dc 0x45c THUMB Debug/../../obj/stm32f10x_flash.o - 0x5d0 (size before relaxing) - .debug_str 0x00002938 0x62e THUMB Debug/../../obj/stm32f10x_fsmc.o - 0x76c (size before relaxing) - .debug_str 0x00002f66 0x2ba THUMB Debug/../../obj/stm32f10x_gpio.o - 0x501 (size before relaxing) - .debug_str 0x00003220 0x499 THUMB Debug/../../obj/stm32f10x_i2c.o - 0x64e (size before relaxing) - .debug_str 0x000036b9 0x13b THUMB Debug/../../obj/stm32f10x_iwdg.o - 0x244 (size before relaxing) - .debug_str 0x000037f4 0x17b THUMB Debug/../../obj/stm32f10x_pwr.o - 0x2fa (size before relaxing) - .debug_str 0x0000396f 0x3d8 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x602 (size before relaxing) - .debug_str 0x00003d47 0x1f3 THUMB Debug/../../obj/stm32f10x_rtc.o - 0x38a (size before relaxing) - .debug_str 0x00003f3a 0x4d4 THUMB Debug/../../obj/stm32f10x_sdio.o - 0x623 (size before relaxing) - .debug_str 0x0000440e 0x3c4 THUMB Debug/../../obj/stm32f10x_spi.o - 0x5e5 (size before relaxing) - .debug_str 0x000047d2 0xb55 THUMB Debug/../../obj/stm32f10x_tim.o - 0xdc5 (size before relaxing) - .debug_str 0x00005327 0x483 THUMB Debug/../../obj/stm32f10x_usart.o - 0x678 (size before relaxing) - .debug_str 0x000057aa 0x137 THUMB Debug/../../obj/stm32f10x_wwdg.o - 0x250 (size before relaxing) - .debug_str 0x000058e1 0x1ba THUMB Debug/../../obj/core_cm3.o - 0x2b1 (size before relaxing) - .debug_str 0x00005a9b 0xf2 THUMB Debug/../../obj/system_stm32f10x.o - 0x2ce (size before relaxing) - .debug_str 0x00005b8d 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x3fc (size before relaxing) - .debug_str 0x00005f40 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x11b (size before relaxing) +.debug_str 0x00000000 0x10bb + .debug_str 0x00000000 0x370 THUMB Debug/../../obj/led.o + 0x3a3 (size before relaxing) + .debug_str 0x00000370 0xfb THUMB Debug/../../obj/main.o + 0x2c5 (size before relaxing) + .debug_str 0x0000046b 0x482 THUMB Debug/../../obj/timer.o + 0x649 (size before relaxing) + .debug_str 0x000008ed 0x95 THUMB Debug/../../obj/vectors.o + 0x246 (size before relaxing) + .debug_str 0x00000982 0x2e4 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x5d3 (size before relaxing) + .debug_str 0x00000c66 0x455 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x6d4 (size before relaxing) diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.srec b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.srec index 0ba6b81f..3b4732a3 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.srec +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.srec @@ -1,151 +1,121 @@ S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF -S3150800600094010020F7610008B9660008B96600081F -S31508006010B9660008B9660008B9660008B9660008D6 -S31508006020B9660008B9660008B9660008B9660008C6 -S31508006030B9660008B9660008B966000895660008DA -S31508006040B9660008B9660008B9660008B9660008A6 -S31508006050B9660008B9660008B9660008B966000896 -S31508006060B9660008B9660008B9660008B966000886 -S31508006070B9660008B9660008B9660008B966000876 -S31508006080B9660008B9660008B9660008B966000866 -S31508006090B9660008B9660008B9660008B966000856 -S315080060A0B9660008B9660008B9660008B966000846 -S315080060B0B9660008B9660008B9660008B966000836 -S315080060C0B9660008B9660008B9660008B966000826 -S315080060D0B9660008B9660008B9660008B966000816 -S315080060E0B9660008B9660008B9660008B966000806 -S315080060F0B9660008B9660008B9660008B9660008F6 -S31508006100B9660008B9660008B9660008B9660008E5 -S31508006110B9660008B9660008B9660008B9660008D5 -S31508006120B9660008B9660008B9660008B9660008C5 -S31508006130B9660008B9660008B9660008B9660008B5 -S31508006140B9660008B9660008B9660008B9660008A5 +S315080060008C010020FB6100086565000865650008CD +S31508006010656500086565000865650008656500082A +S31508006020656500086565000865650008656500081A +S315080060306565000865650008656500084965000826 +S3150800604065650008656500086565000865650008FA +S3150800605065650008656500086565000865650008EA +S3150800606065650008656500086565000865650008DA +S3150800607065650008656500086565000865650008CA +S3150800608065650008656500086565000865650008BA +S3150800609065650008656500086565000865650008AA +S315080060A0656500086565000865650008656500089A +S315080060B0656500086565000865650008656500088A +S315080060C0656500086565000865650008656500087A +S315080060D0656500086565000865650008656500086A +S315080060E0656500086565000865650008656500085A +S315080060F0656500086565000865650008656500084A +S315080061006565000865650008656500086565000839 +S315080061106565000865650008656500086565000829 +S315080061206565000865650008656500086565000819 +S315080061306565000865650008656500086565000809 +S3150800614065650008656500086565000865650008F9 S30908006150EE11AA553F -S315080061542A498D462A482B492B4A00F039F82B48F8 -S315080061642B492C4A00F034F82B482C492C4A00F0C9 -S315080061742FF82C482C492D4A00F02AF82C482D498A -S315080061842D4A00F025F82D482D492E4A00F020F80E -S315080061942D482E49002200F026F82D482D49091AC3 -S315080061A4082903DB00220260043001601E481F49E7 -S315080061B4884205D00268043003B4904703BCF7E765 -S315080061C400208646EC4600200021234A9047FEE735 -S315080061D4884207D0521A05D0037801300B70013172 -S315080061E4013AF9D17047884202D002700130FAE7C1 -S315080061F470471A481A490160AAE70000940100206A -S3150800620438690008000000200000002068620008C1 -S315080062146862000838690008386900080000002028 -S315080062240000002038690008386900083869000841 -S3150800623438690008386900083869000838690008A8 -S315080062443869000838690008000000201400002096 -S3150800625414000020940000202D63000808ED00E0D7 -S3090800626400600008C0 -S3150800626880B583B000AF4FF010004FF0010100F081 -S3150800627817FB4FF480533B804FF003037B604FF0C6 -S315080062881003BB603B464FF48050C4F20100194620 -S3150800629800F012FA07F10C07BD4680BD80B581B03B -S315080062A800AF00F0E7F903463B6040F20003C2F28C -S315080062B800031B683A68D21A40F2F3139A422CD99B -S315080062C840F20403C2F200031B78002B0FD140F2F8 -S315080062D80403C2F200034FF001021A704FF480500B -S315080062E8C4F201004FF4805100F0CCFA0EE040F2F7 -S315080062F80403C2F200034FF000021A704FF48050EC -S31508006308C4F201004FF4805100F0AEFA40F20003DF -S31508006318C2F200033A681A6000E000BF07F10407F2 -S31508006328BD4680BD80B500AF00F004F8FFF7B6FF9C -S31508006338FCE700BF80B583B000AF4FF000037B6071 -S315080063484FF000033B604FF48053C4F202034FF446 -S315080063588052C4F20202126842F001021A604FF42F -S315080063688052C4F202024FF48053C4F202035968F9 -S315080063784FF00003CFF6FF030B4053604FF48053EA -S31508006388C4F202034FF48052C4F20202126822F0E1 -S31508006398847222F480321A604FF48053C4F20203DE -S315080063A84FF48052C4F20202126822F480221A605C -S315080063B84FF48053C4F202034FF48052C4F2020227 -S315080063C8526822F4FE025A604FF48053C4F202035C -S315080063D84FF41F029A604FF48053C4F202034FF435 -S315080063E88052C4F20202126842F480321A604FF4EC -S315080063F88053C4F202031B6803F400333B607B68CE -S3150800640803F101037B603B68002B04D17A6840F2EC -S31508006418DC539A42EBD14FF48053C4F202031B684B -S3150800642803F40033002B00D1FEE74FF40053C4F2FF -S3150800643802034FF40052C4F20202126842F0100234 -S315080064481A604FF40053C4F202034FF40052C4F220 -S315080064580202126822F003021A604FF40053C4F2CB -S3150800646802034FF40052C4F20202126842F0020212 -S315080064781A604FF48053C4F202034FF48052C4F2F0 -S31508006488020252685A604FF48053C4F202034FF46A -S315080064988052C4F20202526842F400525A604FF41B -S315080064A88053C4F202034FF48052C4F202025268BF -S315080064B842F480625A604FF48053C4F202034FF4E0 -S315080064C88052C4F20202526822F47C125A604FF0D3 -S315080064D80903BB60BB68A3F102034FEA8343BB60A9 -S315080064E84FF48053C4F202034FF48052C4F20202F6 -S315080064F85168BA680A4342F480325A604FF48053A6 -S31508006508C4F202034FF48052C4F20202126842F03F -S3150800651880721A6000BF4FF48053C4F202031B68E6 -S3150800652803F00073002BF6D04FF48053C4F202032D -S315080065384FF48052C4F20202526822F003025A60EB -S315080065484FF48053C4F202034FF48052C4F2020295 -S31508006558526842F002025A6000BF4FF48053C4F2F0 -S3150800656802035B6803F00C03082BF6D1FFF778FEE5 -S3150800657800F062F807F10C07BD4680BD80B482B00A -S3150800658800AF786039607B68002B10DA4FF46D43EA -S31508006598CEF200037A6802F00F02A2F104013A6803 -S315080065A8D2B24FEA0212D2B25B181A760CE04FF44E -S315080065B86143CEF2000379683A68D2B24FEA02120A -S315080065C8D2B25B1883F8002307F10807BD4680BCDA -S315080065D8704700BF80B581B000AF38603A686FF081 -S315080065E87F439A4202D94FF001031FE04EF2100387 -S315080065F8CEF200033A6822F07F4202F1FF325A606F -S315080066084FF0FF304FF00F01FFF7B8FF4EF21003B7 -S31508006618CEF200034FF000029A604EF21003CEF253 -S3150800662800034FF007021A604FF00003184607F1F7 -S315080066380407BD4680BD00BF80B500AF4FF4CA50F9 -S31508006648C0F20100FFF7C6FF4FF0000000F002F89D -S3150800665880BD00BF80B481B000AF386040F208033F -S31508006668C2F200033A681A6007F10407BD4680BCFF -S31508006678704700BF80B400AF40F20803C2F20003B7 -S315080066881B681846BD4680BC704700BF80B400AF7B -S3150800669840F20803C2F200031B6803F1010240F244 -S315080066A80803C2F200031A60BD4680BC704700BFE3 -S315080066B880B400AFFEE700BF80B488B000AF78604A -S315080066C839604FF00003FB614FF000033B614FF060 -S315080066D80003BB614FF00003FB604FF000037B61CA -S315080066E84FF00003BB603B689B6803F00F03FB6130 -S315080066F83B689B6803F01003002B04D03B685B6873 -S31508006708FA691343FB613B681B88DBB2002B4ED042 -S315080067187B681B687B614FF00003BB6141E0BB697E -S315080067284FF0010202FA03F3FB603B681B881A461E -S31508006738FB6813403B613A69FB689A422DD1BB69ED -S315080067484FEA8303FB60FB684FF00F0202FA03F374 -S31508006758BB60BB686FEA03037A6913407B61FB6811 -S31508006768FA6902FA03F37A6913437B613B689B6803 -S31508006778282B07D1BB694FF0010202FA03F27B689E -S315080067885A610AE03B689B68482B06D1BB694FF0FB -S31508006798010202FA03F27B681A61BB6903F1010375 -S315080067A8BB61BB69072BBAD97B687A691A603B68EB -S315080067B81B88FF2B53D97B685B687B614FF0000306 -S315080067C8BB6146E0BB6903F108034FF0010202FA10 -S315080067D803F3FB603B681B881A46FB6813403B615A -S315080067E83A69FB689A4230D1BB694FEA8303FB6072 -S315080067F8FB684FF00F0202FA03F3BB60BB686FEA47 -S3150800680803037A6913407B61FB68FA6902FA03F3A2 -S315080068187A6913437B613B689B68282B08D1BB6957 -S3150800682803F108034FF0010202FA03F27B685A6182 -S315080068383B689B68482B08D1BB6903F108034FF0EE -S31508006848010202FA03F27B681A61BB6903F10103C4 -S31508006858BB61BB69072BB5D97B687A695A6007F1AA -S315080068682007BD4680BC704780B482B000AF786008 -S315080068780B463B803A887B681A6107F10807BD46CC -S3150800688880BC704780B482B000AF78600B463B8006 -S315080068983A887B685A6107F10807BD4680BC704785 -S315080068A880B482B000AF786039603B68002B0CD0A2 -S315080068B84FF48053C4F202034FF48052C4F2020222 -S315080068C891697A680A439A610DE04FF48053C4F2D5 -S315080068D802034FF48052C4F2020291697A686FEA99 -S315080068E802020A409A6107F10807BD4680BC70474C -S315080068F830B504460D4600F017F840F20C03C2F20C -S3150800690800031D6040F21003C2F200031C601A4619 -S315080069181368002BFCD100F009F840F20C03C2F208 -S315080069280003186830BD00BF704700BF704700BF36 -S705080061F79A +S315080061542B49072291438D462A482B492B4A00F09E +S3150800616439F82B482B492C4A00F034F82B482C498B +S315080061742C4A00F02FF82C482C492D4A00F02AF80E +S315080061842C482D492D4A00F025F82D482D492E4A2C +S3150800619400F020F82D482E49002200F026F82D4854 +S315080061A42D49091A082903DB00220260043001601C +S315080061B41E481F49884205D00268043003B4904734 +S315080061C403BCF7E700208646EC4600200021234A54 +S315080061D49047FEE7884207D0521A05D00378013063 +S315080061E40B700131013AF9D17047884202D0027026 +S315080061F40130FAE770471A481A490160A8E700000F +S315080062048C010020586700080000002000000020C8 +S315080062146C6200086C620008586700085867000832 +S31508006224000000200000002058670008586700088E +S315080062345867000858670008586700085867000830 +S3150800624458670008586700085867000800000020C7 +S315080062540C0000200C0000208C00002001630008BC +S30D0800626408ED00E000600008E7 +S3150800626C80B582B000AF0121102000F051FA4FF42E +S3150800627C8053BB800323BB711023FB713B1D19464E +S3150800628C034800F06DF900BF0837BD4680BD00BF56 +S3150800629C0010014080B582B000AF00F045F9786077 +S315080062AC114B1B687A68D31AB3F5FA7F18D30F4BC0 +S315080062BC1B78002B08D10D4B01221A704FF4805114 +S315080062CC0B4800F017FA07E0084B00221A704FF437 +S315080062DC8051074800F000FA034A7B68136000E017 +S315080062EC00BF0837BD4680BD000000200400002012 +S315080062FC0010014080B500AF00F004F8FFF7CAFFA4 +S3150800630CFCE700BF80B584B000AF0023BB60002358 +S3150800631C7B604F4A4E4B1B6843F0010313604C4994 +S3150800632C4B4B5A684B4B13404B60494A484B1B68BE +S3150800633C23F0847323F480331360454A444B1B685B +S3150800634C23F480231360424A414B5B6823F4FE0313 +S3150800635C53603F4B4FF41F029A603D4A3C4B1B68F7 +S3150800636C43F4803313603A4B1B6803F400337B60A9 +S3150800637CBB680133BB607B68002B04D1BB6840F259 +S3150800638CDC529342EFD1324B1B6803F40033002BDB +S3150800639C00D1FEE7304A304B1B6843F010031360FC +S315080063AC2D4A2D4B1B6823F0030313602A4A2A4BEC +S315080063BC1B6843F002031360254A254B5B68536040 +S315080063CC234A234B5B6843F400535360204A204B03 +S315080063DC5B6843F4806353601D4A1D4B5B6823F46A +S315080063EC7C1353600923FB60FB68023B9B04FB6030 +S315080063FC1749174B5A68FB68134343F480334B60B1 +S3150800640C134A134B1B6843F08073136000BF104B81 +S3150800641C1B6803F00073002BF9D00D4A0C4B5B6814 +S3150800642C23F0030353600A4A094B5B6843F00203E3 +S3150800643C536000BF064B5B6803F00C03082BF9D1BD +S3150800644CFFF70EFF00F056F800BF1037BD4680BDAB +S3150800645C001002400000FFF80020024080B483B010 +S3150800646C00AF03463960FB7197F90730002B0BDA3E +S3150800647C0D49FB7903F00F03043B3A68D2B21201BB +S3150800648CD2B20B441A7609E0084997F907303A68EC +S3150800649CD2B21201D2B20B4483F8002300BF0C37D8 +S315080064ACBD4680BC704700BF00ED00E000E100E08F +S315080064BC80B582B000AF78607B68B3F1807F01D37A +S315080064CC012311E00A4A7B6823F07F43013B5360A2 +S315080064DC0F214FF0FF30FFF7C1FF054B00229A60E2 +S315080064EC034B07221A60002318460837BD4680BDA1 +S315080064FC10E000E080B500AF0348FFF7D9FF002095 +S3150800650C00F004F800BF80BD4019010080B483B0C8 +S3150800651C00AF7860034A7B68136000BF0C37BD4632 +S3150800652C80BC70470800002080B400AF024B1B6883 +S3150800653C1846BD4680BC70470800002080B400AFE2 +S3150800654C044B1B680133034A136000BFBD4680BC6D +S3150800655C704700BF0800002080B400AFFEE700BFFC +S3150800656C80B489B000AF786039600023FB610023E2 +S3150800657C3B610023BB610023FB6000237B61002386 +S3150800658CBB603B68DB7803F00F03FB613B68DB7889 +S3150800659C03F01003002B05D03B689B781A46FB6961 +S315080065AC1343FB613B681B88DBB2002B44D07B682A +S315080065BC1B687B610023BB6138E00122BB6902FAC8 +S315080065CC03F3FB603B681B881A46FB6813403B6168 +S315080065DC3A69FB689A4226D1BB699B00FB600F227D +S315080065ECFB6802FA03F3BB60BB68DB437A691340AA +S315080065FC7B61FA69FB6802FA03F37A6913437B61D8 +S3150800660C3B68DB78282B05D10122BB699A407B684D +S3150800661C5A6108E03B68DB78482B04D10122BB6938 +S3150800662C9A407B681A61BB690133BB61BB69072B4E +S3150800663CC3D97B687A691A603B681B88FF2B46D9D5 +S3150800664C7B685B687B610023BB613AE0BB690833F6 +S3150800665C012202FA03F3FB603B681B881A46FB68A7 +S3150800666C13403B613A69FB689A4227D1BB699B0088 +S3150800667CFB600F22FB6802FA03F3BB60BB68DB43C3 +S3150800668C7A6913407B61FA69FB6802FA03F37A6943 +S3150800669C13437B613B68DB78282B05D1BB69083330 +S315080066AC01229A407B685A613B68DB78482B05D1F6 +S315080066BCBB69083301229A407B681A61BB690133AE +S315080066CCBB61BB69072BC1D97B687A695A6000BF65 +S315080066DC2437BD4680BC704780B483B000AF786061 +S315080066EC0B467B807A887B681A6100BF0C37BD46DF +S315080066FC80BC704780B483B000AF78600B467B8053 +S3150800670C7A887B685A6100BF0C37BD4680BC7047D7 +S3150800671C80B483B000AF78600B46FB70FB78002B17 +S3150800672C06D00949084B9A697B6813438B6106E0C6 +S3150800673C0549054B9A697B68DB4313408B6100BF9F +S3110800674C0C37BD4680BC704700100240A8 +S705080061FB96 diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/readme.txt b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/readme.txt index a49767fb..a10a52ca 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/readme.txt +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/readme.txt @@ -1,4 +1,4 @@ Integrated Development Environment ---------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains +Rowleys CrossWorks (version 3.7.6) was used as the editor during the development of this software program. This directory contains the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/stm32f103_crossworks.hzp b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/stm32f103_crossworks.hzp index d7c67461..e5fcbea7 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/stm32f103_crossworks.hzp +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/stm32f103_crossworks.hzp @@ -1,98 +1,144 @@ - - + + - + - - - - - - - - + + + + + + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - + - - - + + + @@ -100,9 +146,30 @@ - - diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/stm32f103_crossworks.hzs b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/stm32f103_crossworks.hzs index db603746..311235c1 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/stm32f103_crossworks.hzs +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/ide/stm32f103_crossworks.hzs @@ -1,19 +1,22 @@ - + + + + - + - + - + - + @@ -23,16 +26,16 @@ - + - + - + - + @@ -51,7 +54,7 @@ - + - + diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c deleted file mode 100644 index 56fddc52..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c +++ /dev/null @@ -1,784 +0,0 @@ -/**************************************************************************//** - * @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/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h index 2b6b51a7..efac390f 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h @@ -1,16 +1,16 @@ /**************************************************************************//** * @file core_cm3.h * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V1.30 - * @date 30. October 2009 + * @version V3.00 + * @date 03. February 2012 * * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. + * Copyright (C) 2009-2012 ARM Limited. All rights reserved. * * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. + * 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 @@ -20,1618 +20,1354 @@ * 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 - @{ - */ +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif #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 __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC -#ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 /*!< standard definition for NVIC Priority Bits */ -#endif +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. - - - -/** - * IO definitions - * - * define access restrictions to peripheral registers + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. */ -#ifdef __cplusplus - #define __I volatile /*!< defines 'read only' permissions */ -#else - #define __I volatile const /*!< defines 'read only' permissions */ + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M3 + @{ + */ + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + #endif -#define __O volatile /*!< defines 'write only' permissions */ -#define __IO volatile /*!< defines 'read / write' permissions */ + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + /* add preprocessor checks */ +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200 + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M3 */ /******************************************************************************* * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register ******************************************************************************/ -/** @addtogroup CMSIS_CM3_core_register CMSIS CM3 Core Register - @{ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. */ - -/** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC - memory mapped structure for Nested Vectored Interrupt Controller (NVIC) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. @{ */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ typedef struct { - __IO uint32_t ISER[8]; /*!< Offset: 0x000 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 */ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ -/** @addtogroup CMSIS_CM3_SCB CMSIS CM3 SCB - memory mapped structure for System Control Block (SCB) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers @{ */ + +/** \brief Structure type to access the System Control Block (SCB). + */ typedef struct { - __I uint32_t CPUID; /*!< Offset: 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; + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; /* SCB CPUID Register Definitions */ #define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFul << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ +#define SCB_CPUID_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_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ #define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFul << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ +#define SCB_CPUID_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 */ +#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_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_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_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_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_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_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_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_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_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 */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ -/* SCB Interrupt Control State Register Definitions */ +/* SCB Vector Table Offset Register Definitions */ +#if (__CM3_REV < 0x0201) /* core r2p1 */ #define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ -#define SCB_VTOR_TBLBASE_Msk (0x1FFul << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ #define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFul << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif /* SCB Application Interrupt and Reset Control Register Definitions */ #define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFul << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ +#define SCB_AIRCR_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_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_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_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_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_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 */ +#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_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_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 */ +#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_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_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_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_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_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 */ +#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_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_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_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_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_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_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_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_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_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_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_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_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_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 */ +#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_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_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 */ +#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_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_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 */ +#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_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_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_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_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 */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ -/** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick - memory mapped structure for SysTick +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB @{ */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ typedef struct { - __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 */ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ } SysTick_Type; /* SysTick Control / Status Register Definitions */ #define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1ul << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ +#define SysTick_CTRL_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_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_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 */ +#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 */ +#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 */ +#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_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_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 */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ -/** @addtogroup CMSIS_CM3_ITM CMSIS CM3 ITM - memory mapped structure for Instrumentation Trace Macrocell (ITM) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) @{ */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ typedef struct { - __O union + __O 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; + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ +} 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 */ +#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_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_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_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_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1ul << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA 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_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1ul << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA 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_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1ul << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ +#define ITM_TCR_TXENA_Pos 3 /*!< ITM TCR: TXENA Position */ +#define ITM_TCR_TXENA_Msk (1UL << ITM_TCR_TXENA_Pos) /*!< ITM TCR: TXENA 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_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA 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 */ +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA 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 */ +#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 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 */ +/*@}*/ /* end of group CMSIS_ITM */ -/** @addtogroup CMSIS_CM3_InterruptType CMSIS CM3 Interrupt Type - memory mapped structure for Interrupt Type +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) @{ */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ typedef struct { - 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; + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; -/* 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 */ +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ -/* 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 DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT 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 DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG 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 */ +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) -/** @addtogroup CMSIS_CM3_MPU CMSIS CM3 MPU - memory mapped structure for Memory Protection Unit (MPU) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) @{ */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ typedef struct { - __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; + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; /* MPU Type Register */ #define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFul << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ +#define MPU_TYPE_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_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 */ +#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_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_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 */ +#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 */ +#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_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_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 */ +#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_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ #define MPU_RASR_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_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_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 */ +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ -/*@}*/ /* end of group CMSIS_CM3_MPU */ +/*@} end of group CMSIS_MPU */ #endif -/** @addtogroup CMSIS_CM3_CoreDebug CMSIS CM3 Core Debug - memory mapped structure for Core Debug Register +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers @{ */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ typedef struct { - __IO uint32_t DHCSR; /*!< Offset: 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 */ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ } CoreDebug_Type; /* Debug Halting Control and Status Register */ #define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFul << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ +#define CoreDebug_DHCSR_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_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_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_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_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_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_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_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_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_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_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 */ +#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_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 */ +#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_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_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_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_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_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_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_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_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_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_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_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_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 */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ /* Memory mapping of Cortex-M3 Hardware */ -#define SCS_BASE (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 SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ -#define 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 */ +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) - #define MPU_BASE (SCS_BASE + 0x0D90) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type*) MPU_BASE) /*!< Memory Protection Unit */ +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< 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 Function Interface contains: - Core NVIC Functions - Core SysTick Functions - - Core Reset Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference */ -/*@{*/ + + /* ########################## 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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ */ -static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + reg_value = SCB->AIRCR; /* read old register configuration */ reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - (0x5FA << SCB_AIRCR_VECTKEY_Pos) | + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ SCB->AIRCR = reg_value; } -/** - * @brief Get 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. + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). */ -static __INLINE uint32_t NVIC_GetPriorityGrouping(void) +__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. + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +__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. + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +__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 + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. */ -static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. */ -static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +__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. + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. */ -static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +__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 */ + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ else { NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ } -/** - * @brief 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. + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. */ -static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +__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 */ + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ else { return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ } -/** - * @brief Encode 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 +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). */ -static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +__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; @@ -1639,7 +1375,7 @@ static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t P 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))) @@ -1647,22 +1383,19 @@ static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t P } -/** - * @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 +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). */ -static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +__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; @@ -1670,132 +1403,134 @@ static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGr PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); } +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + /* ################################## SysTick function ############################################ */ - -#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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ */ -static __INLINE uint32_t SysTick_Config(uint32_t ticks) -{ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ if (ticks > 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 */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ SysTick->VAL = 0; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | + SysTick->CTRL = 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 */ +/*@} end of CMSIS_Core_SysTickFunctions */ /* ##################################### 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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ */ -static __INLINE uint32_t ITM_SendChar (uint32_t ch) + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) { - if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */ - (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ - (ITM->TER & (1ul << 0) ) ) /* ITM Port #0 enabled */ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ { while (ITM->PORT[0].u32 == 0); ITM->PORT[0].u8 = (uint8_t) ch; - } + } return (ch); } -/** - * @brief 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. +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. */ -static __INLINE int ITM_ReceiveChar (void) { - int ch = -1; /* no character available */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { ch = ITM_RxBuffer; ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ } - - return (ch); + + 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. +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. */ -static __INLINE int ITM_CheckChar (void) { +__STATIC_INLINE int32_t ITM_CheckChar (void) { if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { return (0); /* no character available */ @@ -1804,15 +1539,12 @@ static __INLINE int ITM_CheckChar (void) { } } -/*@}*/ /* end of group CMSIS_CM3_core_DebugInterface */ +/*@} end of CMSIS_core_DebugFunctions */ +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ #ifdef __cplusplus } #endif - -/*@}*/ /* end of group CMSIS_CM3_core_definitions */ - -#endif /* __CM3_CORE_H__ */ - -/*lint -restore */ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cmFunc.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmFunc.h similarity index 100% rename from Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cmFunc.h rename to Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmFunc.h diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cmInstr.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmInstr.h similarity index 100% rename from Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cmInstr.h rename to Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmInstr.h diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS debug support.htm b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS debug support.htm deleted file mode 100644 index efda685b..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS debug support.htm +++ /dev/null @@ -1,243 +0,0 @@ - - - -CMSIS Debug Support - - - - - - - - -

CMSIS Debug Support

- -
- -

Cortex-M3 ITM Debug Access

-

- The Cortex-M3 incorporates the Instrumented Trace Macrocell (ITM) that provides together with - the Serial Viewer Output trace capabilities for the microcontroller system. The ITM has - 32 communication channels which are able to transmit 32 / 16 / 8 bit values; two ITM - communication channels are used by CMSIS to output the following information: -

-
    -
  • ITM Channel 0: used for printf-style output via the debug interface.
  • -
  • ITM Channel 31: is reserved for RTOS kernel awareness debugging.
  • -
- -

Debug IN / OUT functions

-

CMSIS provides following debug functions:

-
    -
  • ITM_SendChar (uses ITM channel 0)
  • -
  • ITM_ReceiveChar (uses global variable)
  • -
  • ITM_CheckChar (uses global variable)
  • -
- -

ITM_SendChar

-

- ITM_SendChar is used to transmit a character over ITM channel 0 from - the microcontroller system to the debug system.
- Only a 8 bit value is transmitted. -

-
-static __INLINE uint32_t ITM_SendChar (uint32_t ch)
-{
-  /* check if debugger connected and ITM channel enabled for tracing */
-  if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA)  &&
-      (ITM->TCR & ITM_TCR_ITMENA)                  &&
-      (ITM->TER & (1UL << 0))  ) 
-  {
-    while (ITM->PORT[0].u32 == 0);
-    ITM->PORT[0].u8 = (uint8_t)ch;
-  }  
-  return (ch);
-}
- -

ITM_ReceiveChar

-

- ITM communication channel is only capable for OUT direction. For IN direction - a globel variable is used. A simple mechansim detects if a character is received. - The project to test need to be build with debug information. -

- -

- The globale variable ITM_RxBuffer is used to transmit a 8 bit value from debug system - to microcontroller system. ITM_RxBuffer is 32 bit wide to enshure a proper handshake. -

-
-extern volatile int ITM_RxBuffer;                    /* variable to receive characters                             */
-
-

- A dedicated bit pattern is used to determin if ITM_RxBuffer is empty - or contains a valid value. -

-
-#define             ITM_RXBUFFER_EMPTY    0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */
-
-

- ITM_ReceiveChar is used to receive a 8 bit value from the debug system. The function is nonblocking. - It returns the received character or '-1' if no character was available. -

-
-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); 
-}
-
- -

ITM_CheckChar

-

- ITM_CheckChar is used to check if a character is received. -

-
-static __INLINE int ITM_CheckChar (void) {
-
-  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
-    return (0);                                 /* no character available */
-  } else {
-    return (1);                                 /*    character available */
-  }
-}
- - -

ITM Debug Support in uVision

-

- uVision uses in a debug session the Debug (printf) Viewer window to - display the debug data. -

-

Direction microcontroller system -> uVision:

-
    -
  • - Characters received via ITM communication channel 0 are written in a printf style - to Debug (printf) Viewer window. -
  • -
- -

Direction uVision -> microcontroller system:

-
    -
  • Check if ITM_RxBuffer variable is available (only performed once).
  • -
  • Read character from Debug (printf) Viewer window.
  • -
  • If ITM_RxBuffer empty write character to ITM_RxBuffer.
  • -
- -

Note

-
    -
  • Current solution does not use a buffer machanism for trasmitting the characters.

    -
  • -
- -

RTX Kernel awareness in uVision

-

- uVision / RTX are using a simple and efficient solution for RTX Kernel awareness. - No format overhead is necessary.
- uVsion debugger decodes the RTX events via the 32 / 16 / 8 bit ITM write access - to ITM communication channel 31. -

- -

Following RTX events are traced:

-
    -
  • Task Create / Delete event -
      -
    1. 32 bit access. Task start address is transmitted
    2. -
    3. 16 bit access. Task ID and Create/Delete flag are transmitted
      - High byte holds Create/Delete flag, Low byte holds TASK ID. -
    4. -
    -
  • -
  • Task switch event -
      -
    1. 8 bit access. Task ID of current task is transmitted
    2. -
    -
  • -
- -

Note

-
    -
  • Other RTOS information could be retrieved via memory read access in a polling mode manner.

    -
  • -
- - -

 

- -
- -

Copyright © KEIL - An ARM Company.
-All rights reserved.
-Visit our web site at www.keil.com. -

- - - - \ No newline at end of file diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS_changes.htm b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS_changes.htm deleted file mode 100644 index 162ffcc9..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS_changes.htm +++ /dev/null @@ -1,320 +0,0 @@ - - - -CMSIS Changes - - - - - - - - -

Changes to CMSIS version V1.20

- -
- -

1. Removed CMSIS Middelware packages

-

- CMSIS Middleware is on hold from ARM side until a agreement between all CMSIS partners is found. -

- -

2. SystemFrequency renamed to SystemCoreClock

-

- The variable name SystemCoreClock is more precise than SystemFrequency - because the variable holds the clock value at which the core is running. -

- -

3. Changed startup concept

-

- The old startup concept (calling SystemInit_ExtMemCtl from startup file and calling SystemInit - from main) has the weakness that it does not work for controllers which need a already - configuerd clock system to configure the external memory controller. -

- -

Changed startup concept

-
    -
  • - SystemInit() is called from startup file before premain. -
  • -
  • - SystemInit() configures the clock system and also configures - an existing external memory controller. -
  • -
  • - SystemInit() must not use global variables. -
  • -
  • - SystemCoreClock is initialized with a correct predefined value. -
  • -
  • - Additional function void SystemCoreClockUpdate (void) is provided.
    - SystemCoreClockUpdate() updates the variable SystemCoreClock - and must be called whenever the core clock is changed.
    - SystemCoreClockUpdate() evaluates the clock register settings and calculates - the current core clock. -
  • -
- - -

4. Advanced Debug Functions

-

- ITM communication channel is only capable for OUT direction. To allow also communication for - IN direction a simple concept is provided. -

-
    -
  • - Global variable volatile int ITM_RxBuffer used for IN data. -
  • -
  • - Function int ITM_CheckChar (void) checks if a new character is available. -
  • -
  • - Function int ITM_ReceiveChar (void) retrieves the new character. -
  • -
- -

- For detailed explanation see file CMSIS debug support.htm. -

- - -

5. Core Register Bit Definitions

-

- Files core_cm3.h and core_cm0.h contain now bit definitions for Core Registers. The name for the - defines correspond with the Cortex-M Technical Reference Manual. -

-

- e.g. SysTick structure with bit definitions -

-
-/** @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 */
- -

7. DoxyGen Tags

-

- DoxyGen tags in files core_cm3.[c,h] and core_cm0.[c,h] are reworked to create proper documentation - using DoxyGen. -

- -

8. Folder Structure

-

- The folder structure is changed to differentiate the single support packages. -

- -
    -
  • CM0
  • -
  • CM3 -
      -
    • CoreSupport
    • -
    • DeviceSupport
    • -
        -
      • Vendor -
          -
        • Device -
            -
          • Startup -
              -
            • Toolchain
            • -
            • Toolchain
            • -
            • ...
            • -
            -
          • -
          -
        • -
        • Device
        • -
        • ...
        • -
        -
      • -
      • Vendor
      • -
      • ...
      • -
      - -
    • Example -
        -
      • Toolchain -
          -
        • Device
        • -
        • Device
        • -
        • ...
        • -
        -
      • -
      • Toolchain
      • -
      • ...
      • -
      -
    • -
    -
  • - -
  • Documentation
  • -
- -

9. Open Points

-

- Following points need to be clarified and solved: -

-
    -
  • -

    - Equivalent C and Assembler startup files. -

    -

    - Is there a need for having C startup files although assembler startup files are - very efficient and do not need to be changed? -

    -

  • -
  • -

    - Placing of HEAP in external RAM. -

    -

    - It must be possible to place HEAP in external RAM if the device supports an - external memory controller. -

    -
  • -
  • -

    - Placing of STACK /HEAP. -

    -

    - STACK should always be placed at the end of internal RAM. -

    -

    - If HEAP is placed in internal RAM than it should be placed after RW ZI section. -

    -
  • -
  • -

    - Removing core_cm3.c and core_cm0.c. -

    -

    - On a long term the functions in core_cm3.c and core_cm0.c must be replaced with - appropriate compiler intrinsics. -

    -
  • -
- - -

10. Limitations

-

- The following limitations are not covered with the current CMSIS version: -

-
    -
  • - No C startup files for ARM toolchain are provided. -
  • -
  • - No C startup files for GNU toolchain are provided. -
  • -
  • - No C startup files for IAR toolchain are provided. -
  • -
  • - No Tasking projects are provided yet. -
  • -
diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/License.doc b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/License.doc deleted file mode 100644 index b6b8acecc137bca709444106cba045d3d01daedd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39936 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 diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.elf b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.elf index 4d28bbb70d0eb38ee35f5eaab480b68c2a885ad0..cf5136651b2f4326f3c69e0287e96cfb2e33f602 100644 GIT binary patch literal 239216 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 literal 186375 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 z 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 Vi-XH|;!3(gnxCU~rX7$={{M;h?~?!k diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.map b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.map index 0f9cb30f..602d8dad 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.map +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.map @@ -1,17 +1,17 @@ -Archive member included because of file (symbol) +Archive member included to satisfy reference by file (symbol) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) THUMB Debug/../../obj/file.o (isdigit) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) (memcpy) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) (__umoddi3) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - (__do_debug_operation_mempoll) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) (__errno) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) (__floatsisf) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) (memcpy) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) (__aeabi_uldivmod) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) (__aeabi_i2f) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o (frexp) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) (fabs) Discarded input sections @@ -21,60 +21,33 @@ Discarded input sections .text 0x00000000 0x0 THUMB Debug/../../obj/main.o .data 0x00000000 0x0 THUMB Debug/../../obj/main.o .bss 0x00000000 0x0 THUMB Debug/../../obj/main.o - .text 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .data 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .text.__get_PSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_PSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_MSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_MSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_BASEPRI - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_BASEPRI - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_PRIMASK - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_PRIMASK - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_FAULTMASK - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_FAULTMASK - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_CONTROL - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__set_CONTROL - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__REV 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o - .text.__REV16 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o - .text.__REVSH 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o - .text.__RBIT 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXB - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXH - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXW - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__STREXB - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__STREXH - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__STREXW - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .data 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .bss 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .text.SystemInit - 0x00000000 0x130 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0x100 THUMB Debug/../../obj/system_stm32f10x.o .text.SystemCoreClockUpdate - 0x00000000 0xe0 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0x8c THUMB Debug/../../obj/system_stm32f10x.o .data.AHBPrescTable 0x00000000 0x10 THUMB Debug/../../obj/system_stm32f10x.o .data.SystemCoreClock 0x00000000 0x4 THUMB Debug/../../obj/system_stm32f10x.o + .debug_frame 0x00000000 0x40 THUMB Debug/../../obj/system_stm32f10x.o + .debug_info 0x00000000 0x492 THUMB Debug/../../obj/system_stm32f10x.o + .debug_abbrev 0x00000000 0x175 THUMB Debug/../../obj/system_stm32f10x.o + .debug_loc 0x00000000 0xe8 THUMB Debug/../../obj/system_stm32f10x.o + .debug_pubnames + 0x00000000 0x97 THUMB Debug/../../obj/system_stm32f10x.o + .debug_pubtypes + 0x00000000 0x10d THUMB Debug/../../obj/system_stm32f10x.o + .debug_aranges + 0x00000000 0x28 THUMB Debug/../../obj/system_stm32f10x.o + .debug_ranges 0x00000000 0x18 THUMB Debug/../../obj/system_stm32f10x.o + .debug_line 0x00000000 0x22d THUMB Debug/../../obj/system_stm32f10x.o + .debug_str 0x00000000 0x400 THUMB Debug/../../obj/system_stm32f10x.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/system_stm32f10x.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/system_stm32f10x.o .text 0x00000000 0x0 THUMB Debug/../../obj/mmc.o .data 0x00000000 0x0 THUMB Debug/../../obj/mmc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/mmc.o @@ -82,48 +55,48 @@ Discarded input sections .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_gpio.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_DeInit - 0x00000000 0x11c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0xcc THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_AFIODeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o - .text.GPIO_StructInit 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_gpio.o - .text.GPIO_ReadInputDataBit + .text.GPIO_StructInit 0x00000000 0x10 THUMB Debug/../../obj/stm32f10x_gpio.o + .text.GPIO_ReadInputDataBit + 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadInputData 0x00000000 0x8 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadOutputDataBit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadOutputData 0x00000000 0x8 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_WriteBit 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_Write - 0x00000000 0x8 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x4 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_PinLockConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x10 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_EventOutputConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_EventOutputCmd 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_PinRemapConfig - 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x6c THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_EXTILineConfig - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ETH_MediaInterfaceConfig 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_gpio.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rcc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rcc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_DeInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_HSEConfig - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_AdjustHSICalibrationValue - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_HSICmd 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PLLConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PLLCmd 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_SYSCLKConfig @@ -135,15 +108,15 @@ Discarded input sections .text.RCC_PCLK1Config 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PCLK2Config - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ITConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_USBCLKConfig 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ADCCLKConfig 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_LSEConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_LSICmd 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_RTCCLKConfig @@ -151,29 +124,29 @@ Discarded input sections .text.RCC_RTCCLKCmd 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_GetClocksFreq - 0x00000000 0xe8 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0xb4 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_AHBPeriphClockCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_APB2PeriphResetCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_APB1PeriphResetCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_BackupResetCmd 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ClockSecuritySystemCmd 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_MCOConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_GetFlagStatus - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_WaitForHSEStartUp - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ClearFlag - 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_rcc.o - .text.RCC_GetITStatus - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_rcc.o - .text.RCC_ClearITPendingBit 0x00000000 0x10 THUMB Debug/../../obj/stm32f10x_rcc.o + .text.RCC_GetITStatus + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_rcc.o + .text.RCC_ClearITPendingBit + 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_rcc.o .data.ADCPrescTable 0x00000000 0x4 THUMB Debug/../../obj/stm32f10x_rcc.o .data.APBAHBPrescTable @@ -182,69 +155,69 @@ Discarded input sections .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_spi.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_DeInit - 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_spi.o .text.I2S_Init - 0x00000000 0xdc THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0xa8 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_StructInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o - .text.I2S_StructInit 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_spi.o - .text.I2S_Cmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_spi.o + .text.I2S_StructInit + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_spi.o + .text.I2S_Cmd 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_ITConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_DMACmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_NSSInternalSoftwareConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_SSOutputCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_spi.o - .text.SPI_DataSizeConfig 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o + .text.SPI_DataSizeConfig + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_TransmitCRC 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_GetCRC - 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_GetCRCPolynomial 0x00000000 0x8 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_BiDirectionalLineConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x8 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_GetITStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_ClearITPendingBit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_spi.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_usart.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_usart.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_DeInit - 0x00000000 0xcc THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0xa4 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_Init - 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0xb8 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_StructInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClockInit - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClockStructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_Cmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_ITConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_DMACmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_SetAddress - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_WakeUpConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_ReceiverWakeUpCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_LINBreakDetectLengthConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_LINCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_ReceiveData 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_Cmd + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_ITConfig + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_DMACmd + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_SetAddress + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_WakeUpConfig + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_ReceiverWakeUpCmd + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_LINBreakDetectLengthConfig + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_LINCmd + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_ReceiveData + 0x00000000 0x8 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SendBreak 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SetGuardTime @@ -252,39 +225,41 @@ Discarded input sections .text.USART_SetPrescaler 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SmartCardCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_SmartCardNACKCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_HalfDuplexCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_OverSampling8Cmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_OneBitMethodCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_IrDAConfig 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_IrDACmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_GetITStatus - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_usart.o - .text.USART_ClearITPendingBit + .text.USART_SmartCardNACKCmd + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_HalfDuplexCmd + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_OverSampling8Cmd + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_OneBitMethodCmd + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_IrDAConfig 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_IrDACmd + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_ClearFlag + 0x00000000 0x8 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_GetITStatus + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_usart.o + .text.USART_ClearITPendingBit + 0x00000000 0x10 THUMB Debug/../../obj/stm32f10x_usart.o .text 0x00000000 0x0 THUMB Debug/../../obj/can.o .data 0x00000000 0x0 THUMB Debug/../../obj/can.o .bss 0x00000000 0x0 THUMB Debug/../../obj/can.o .text 0x00000000 0x0 THUMB Debug/../../obj/cpu.o .data 0x00000000 0x0 THUMB Debug/../../obj/cpu.o .bss 0x00000000 0x0 THUMB Debug/../../obj/cpu.o - .text.CpuReset - 0x00000000 0xc THUMB Debug/../../obj/cpu.o .text 0x00000000 0x0 THUMB Debug/../../obj/flash.o .data 0x00000000 0x0 THUMB Debug/../../obj/flash.o .bss 0x00000000 0x0 THUMB Debug/../../obj/flash.o + .text.FlashReinit + 0x00000000 0x18 THUMB Debug/../../obj/flash.o .text 0x00000000 0x0 THUMB Debug/../../obj/nvm.o .data 0x00000000 0x0 THUMB Debug/../../obj/nvm.o .bss 0x00000000 0x0 THUMB Debug/../../obj/nvm.o + .text.NvmReinit + 0x00000000 0x8 THUMB Debug/../../obj/nvm.o .text 0x00000000 0x0 THUMB Debug/../../obj/timer.o .data 0x00000000 0x0 THUMB Debug/../../obj/timer.o .bss 0x00000000 0x0 THUMB Debug/../../obj/timer.o @@ -294,6 +269,19 @@ Discarded input sections .text 0x00000000 0x0 THUMB Debug/../../obj/usb.o .data 0x00000000 0x0 THUMB Debug/../../obj/usb.o .bss 0x00000000 0x0 THUMB Debug/../../obj/usb.o + .debug_info 0x00000000 0x6b THUMB Debug/../../obj/usb.o + .debug_abbrev 0x00000000 0x29 THUMB Debug/../../obj/usb.o + .debug_pubnames + 0x00000000 0x12 THUMB Debug/../../obj/usb.o + .debug_pubtypes + 0x00000000 0xc6 THUMB Debug/../../obj/usb.o + .debug_aranges + 0x00000000 0x18 THUMB Debug/../../obj/usb.o + .debug_line 0x00000000 0x1d THUMB Debug/../../obj/usb.o + .debug_str 0x00000000 0x27a THUMB Debug/../../obj/usb.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/usb.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/usb.o .text 0x00000000 0x0 THUMB Debug/../../obj/cpu_comp.o .data 0x00000000 0x0 THUMB Debug/../../obj/cpu_comp.o .bss 0x00000000 0x0 THUMB Debug/../../obj/cpu_comp.o @@ -332,758 +320,1790 @@ Discarded input sections .data 0x00000000 0x0 THUMB Debug/../../obj/ff.o .bss 0x00000000 0x0 THUMB Debug/../../obj/ff.o .text.f_opendir - 0x00000000 0x80 THUMB Debug/../../obj/ff.o + 0x00000000 0x8c THUMB Debug/../../obj/ff.o + .text.f_closedir + 0x00000000 0x1c THUMB Debug/../../obj/ff.o .text.f_readdir - 0x00000000 0x74 THUMB Debug/../../obj/ff.o + 0x00000000 0x54 THUMB Debug/../../obj/ff.o .text.f_getfree - 0x00000000 0x104 THUMB Debug/../../obj/ff.o + 0x00000000 0xe0 THUMB Debug/../../obj/ff.o .text.f_truncate - 0x00000000 0x98 THUMB Debug/../../obj/ff.o - .text.f_mkdir 0x00000000 0x1bc THUMB Debug/../../obj/ff.o - .text.f_chmod 0x00000000 0x60 THUMB Debug/../../obj/ff.o - .text.f_utime 0x00000000 0x64 THUMB Debug/../../obj/ff.o + 0x00000000 0xd8 THUMB Debug/../../obj/ff.o + .text.f_mkdir 0x00000000 0x19c THUMB Debug/../../obj/ff.o .text.f_rename - 0x00000000 0x11c THUMB Debug/../../obj/ff.o + 0x00000000 0x118 THUMB Debug/../../obj/ff.o + .text.f_putc 0x00000000 0x48 THUMB Debug/../../obj/ff.o .text.f_printf - 0x00000000 0x324 THUMB Debug/../../obj/ff.o + 0x00000000 0x31c THUMB Debug/../../obj/ff.o .text 0x00000000 0x0 THUMB Debug/../../obj/unicode.o .data 0x00000000 0x0 THUMB Debug/../../obj/unicode.o .bss 0x00000000 0x0 THUMB Debug/../../obj/unicode.o - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.twodigit - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.month_name - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.checked_day_name - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_ch - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_str - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_nstr - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_digit - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_twodigit - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_twodigits_leading_blank - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_twodigit2 - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.put_formatted - 0x00000000 0x3ec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.__getc - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.__RAL_pow10 - 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__stdin_ungetc - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.twodigit + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc_fn + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_ch + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_str + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigits_leading_blank + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit_optional_zero_suppress + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_wctomb + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_mbtowc + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__getc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pow10 + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__putc - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.__print_padding - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.__pre_padding - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_print_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pre_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__xlltoa - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__xltoa - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__xtoa - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.abs - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.asctime_r - 0x00000000 0xfc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.asctime - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.atexit - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc._execute_at_exit_fns - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.bsearch - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towupper + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_toupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towlower + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctl_is_exact_power_of_two - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctl_round_power_of_two - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctl_count_leading_zeroes - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctl_ilogb - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.buddy_alloc - 0x00000000 0x108 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.buddy_free - 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.buddy_heap_init - 0x00000000 0xc0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_isctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isalpha - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isupper - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.islower - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.__digit - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isxdigit - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isspace - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.__strtoull - 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.__strtoul - 0x00000000 0xec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ispunct - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isalnum - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isprint - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isgraph - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.iscntrl - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.tolower - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.isblank - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.islower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ispunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iscntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.toupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.div - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__aeabi_errno_addr + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_free + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoul + 0x00000000 0xdc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoull + 0x00000000 0x148 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fopen + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfprintf + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfscanf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fscanf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetpos + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ftell + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fileno + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.feof + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ferror + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fstat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gets + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.itoa - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.labs - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ldiv - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.linked_heap_init - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.linked_heap_alloc - 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.linked_heap_free - 0x00000000 0xd4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.linked_heap_realloc - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.llabs - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.lldiv - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.lltoa - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_global_locale_category + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_locale_category + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localeconv_l + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.localeconv - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.setlocale - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_compare_locale_name + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ltoa - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.malloc - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getBuf + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fflush + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fseek + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fsetpos + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.rewind + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.output_fn + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputs + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fwrite + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc_fn + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fread + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgets + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.calloc - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.free - 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setBuf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fclose + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setbuf + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setvbuf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.realloc - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.memccpy - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.mempcpy - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.memchr - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.memcmp - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.memmove - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.printf + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.puts + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.qsort - 0x00000000 0x260 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.rand - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.scanf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.snprintf - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.sprintf - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.srand - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.sscanf - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strcasecmp - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strcasestr - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_decode_error + 0x00000000 0x78 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strerror + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_register_error_decoder + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strcat - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_encode_locale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strchr - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcoll + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strcspn - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strdup - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.strftime - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_encode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_decode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime_r + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncasecmp - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncasestr - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncat - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strlcat - 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strnchr - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncmp - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strncpy - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strlcpy - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strnlen - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strndup - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strnstr - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strpbrk - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strrchr - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strsep - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strspn - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strstr - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtod - 0x00000000 0x1bc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtof - 0x00000000 0x19c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtok - 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtok_r - 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtol - 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc.atol - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.atoi - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.atof - 0x00000000 0x14c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atol + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtoll - 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xd0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.atoll - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtoul - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.strtoull - 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strxfrm + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.localtime_r - 0x00000000 0x190 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x14c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.difftime - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.checktm - 0x00000000 0x244 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.mktime - 0x00000000 0x1c0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x180 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctime - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ctime_r - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.gmtime - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.gmtime_r - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.localtime - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.gettimeofday - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.settimeofday - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.time + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ulltoa - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.ultoa - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.utoa - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vprintf + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vscanf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.vsnprintf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.vsprintf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.vsscanf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcscat - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcschr - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcscmp - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcscpy - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcscspn - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcslen - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsdup - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsncat - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsnchr - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsncmp - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsncpy - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsnlen - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsnstr - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcspbrk - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsrchr - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcssep - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsspn - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcsstr - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcstok - 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wcstok_r - 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemcpy - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemccpy - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmempcpy - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemmove - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemcmp - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemchr - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .text.libc.wmemset - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .data.libc.heap - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.__hex_lc - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.__crt_get_time_of_day - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.year_lengths - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.mon_name - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.last.2692 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.__atexitfns - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.__format_extender - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.invalid - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.str1.4 - 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .data.libc.__RAL_rand_next - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tmpnam + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.duplocale + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.freelocale + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_find_locale + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_set_locale + 0x00000000 0x9c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setlocale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.newlocale + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__user_find_locale + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsinit + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen_l + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen_l + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_wide_char + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_formatted + 0x00000000 0x4cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime_l + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb_l + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc_l + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs_l + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs_l + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs_l + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs_l + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_init_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_mb_max + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_1 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_2 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_3 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_4 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_5 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_6 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_7 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_8 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_9 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_10 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_11 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_13 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_14 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_15 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_16 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1250 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1251 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1252 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1253 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1254 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1255 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1256 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1257 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1258 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans_l + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans_l + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalpha + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswprint + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswblank + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswcntrl + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswspace + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalnum + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswlower + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswupper + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswgraph + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswpunct + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswctype + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_isctype + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1258_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_singleton_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_11 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_13 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_14 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_15 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_16 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1253_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctrans_name_list + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1253 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_4 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_singleton + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_6 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_3_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcsrtombs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .rodata.libc.power - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.__RAL_mon_lengths - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.last.3164 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.day_name - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.month_names - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.asctime_buf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.__ctype - 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.__crt_set_time_of_day - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc.atexitfn_count - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_9 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_strtok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EDOM + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_singleton_map + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_9_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_singleton_map + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_singleton_map + 0x00000000 0xe0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_range + 0x00000000 0x470 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_singleton_map + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_10_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_4_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_fileno + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_get_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_uc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_singleton + 0x00000000 0xac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_range + 0x00000000 0x534 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_14_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1256_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_11_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_singleton_map + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_range + 0x00000000 0x2d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_singleton + 0x00000000 0x52 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unknown_string + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_plus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1250 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_8_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range2_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1251_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.streams + 0x00000000 0xc0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_singleton_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1255 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_singleton_map + 0x00000000 0x134 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_tmpnam_template + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1258 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_singleton_map + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_1_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_singleton_map + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stdout + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod2 + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wctomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .data.libc.__ungot - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .data.libc._lconv - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.__hex_uc - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .bss.libc._tm 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .rodata.libc.day_names - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.stdin + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_3 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_7_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.atexitfn_count + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_singleton_map + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbsrtowcs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_2_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_singleton_map + 0x00000000 0xec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_singleton_map + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_space + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.heap + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_range_map + 0x00000000 0x5a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_buf + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcrtomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_range_map + 0x00000000 0x72 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_mon_lengths + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_asctime_buf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_range_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_1 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_2 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.errno_val + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrlen_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_5 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_singleton_map + 0x00000000 0x124 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_7 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1254_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_year_lengths + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_singleton_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1250_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1252 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1254 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_13_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1256 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1257 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_singleton_map + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_range_map + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EILSEQ + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_minus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_lconv_data + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1255_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_lc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctype_class_name_list + 0x00000000 0x4a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1251 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_range + 0x00000000 0x46c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_1_range_map + 0x00000000 0x6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_singleton_map + 0x00000000 0x168 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_singleton + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_set_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_5_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_format_extender + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_singleton_map + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcstok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stderr + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_range_map + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_15_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__RAL_rand_next + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_error_decoder_head + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__atexitfns + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_singleton_map + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_6_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_singleton_map + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_utf8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1257_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_comma + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc._tm 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_16_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range2_map + 0x00000000 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1252_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_ERANGE + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_range_map + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_11_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.longjmp - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.memcpy - 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.memcpy_fast - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x3ac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.memcpy_small - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .text.libc.memset - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.__aeabi_memset - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.setjmp - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.strcpy - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.strcmp - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) .text.libc.strlen - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r4 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r1 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r2 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r3 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r0 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r5 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_sp - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r7 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r8 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r9 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_sl - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_r6 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_lr - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_ip - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text.libc._call_via_fp - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_umod - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_asr - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_div - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_lsl - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_lsr - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_mod - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_udivmod - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__aeabi_ldivmod - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_cmp - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int64_ucmp - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.muldi3 - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int32_umod - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int32_div - 0x00000000 0x310 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x310 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .rodata.libc.__aeabi_idiv - 0x00000000 0xa C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0xa C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .rodata.libc.__aeabi_uidiv - 0x00000000 0x46 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x46 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__int32_mod - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__aeabi_uidivmod - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__aeabi_idivmod - 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.ctl_count_leading_zeros_32 - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.ctl_count_leading_zeros_16 - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_shi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_si - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_sqi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_uhi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) .text.libc.__gnu_thumb1_case_uqi - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio - 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.__do_nvdebug_operation - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_abort - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fopen - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgets - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputs - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fread - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fwrite - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fseek - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ftell - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_gets - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fflush - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fclose - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetc - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_putchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_puts - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rewind - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_clearerr - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_feof - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ferror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getch - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_time - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vprintf - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfprintf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ungetc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fsetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_freopen - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_perror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_remove - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rename - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpfile - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpnam - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getenv - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_system - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfscanf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vscanf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_exit - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_enabled - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_kbhit - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ioctl - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_runtime_error - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_break - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getargs - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_geti - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getu - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getl - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getul - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getd - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getll - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getull - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_filesize - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_accept - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_bind - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_listen - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_shutdown - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_socket - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htons - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htonl - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_loadsymbols - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_unloadsymbols - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.getenv_buffer - 0x00000000 0x400 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.__dbgEnabled - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.tmpnam_buffer - 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__errno - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss.libc.errno - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .debug_frame 0x00000000 0x164 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int + 0x00000000 0x5e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp + 0x00000000 0x49c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long + 0x00000000 0x600 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp + 0x00000000 0x4b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long + 0x00000000 0x730 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp + 0x00000000 0x580 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_compute_wide_metrics + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_print_wide_string + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_wchar + 0x00000000 0x698 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp_wchar + 0x00000000 0x4e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_wchar + 0x00000000 0x6a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp_wchar + 0x00000000 0x4e8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_wchar + 0x00000000 0x7d8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp_wchar + 0x00000000 0x604 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.str1.4 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.ipow10 + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x3f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x160 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x36e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__ungetc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long_long + 0x00000000 0x1c8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_real + 0x00000000 0x274 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int_cc + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_cc + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long_cc + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_cc + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long_cc + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x38c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x14b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x2dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__int32_to_float32 - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__int32_to_float64 - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__uint32_to_float32 - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__uint32_to_float64 - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__int64_to_float32 - 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__int64_to_float64 - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__uint64_to_float32 - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__uint64_to_float64 - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_int32 - 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_int64 - 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_uint32 - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_uint64 - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_int32 - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_int64 - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_uint32 - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_uint64 - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_to_float64 - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_to_float32 - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_add - 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_mul - 0x00000000 0xd4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0xd4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_div - 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_cmp - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfrcmple + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__aeabi_fcmpeq - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__aeabi_fcmplt - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__aeabi_fcmple - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_fcmpge - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__aeabi_fcmpgt - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpge + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_add - 0x00000000 0x294 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x294 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_mul - 0x00000000 0x16c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x16c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_div - 0x00000000 0x214 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x214 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_cmp - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmpeq - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmplt - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmple - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmpge - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) - .text.libc.__aeabi_dcmpgt - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdrcmple + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpeq + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmple + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpge + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmplt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpgt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_signbit - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_signbit - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_isinf - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_isinf - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_isnan - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_isnan - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_isfinite - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_isfinite - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_isnormal - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_isnormal - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float32_classify - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .text.libc.__float64_classify - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .rodata.libc.__float32_infinity - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .rodata.libc.__float32_nan - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .rodata.libc.__float64_infinity - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) .rodata.libc.__float64_nan - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .debug_frame 0x00000000 0x440 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_eval + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_evalf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_eval + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_evalf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincos + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincosf + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2 + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanf + 0x00000000 0x170 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2f + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ceil + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cos + 0x00000000 0x1b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosf + 0x00000000 0x258 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.expf + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.coshf + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fma + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmax + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaxf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmin + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fminf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.frexp + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ldexp + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosh + 0x00000000 0xf4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log + 0x00000000 0x240 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanh + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.logf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10f + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modf + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modff + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.pow + 0x00000000 0x118 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2 + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.powf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2f + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbn + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbnf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sin + 0x00000000 0x1b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinf + 0x00000000 0x224 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinh + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinhf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tan + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanf + 0x00000000 0x150 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanh + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanhf + 0x00000000 0x130 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrt + 0x00000000 0x110 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacos + 0x00000000 0x2c0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosh + 0x00000000 0x108 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinh + 0x00000000 0x114 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypot + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asin + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acos + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrtf + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacosf + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acoshf + 0x00000000 0xc8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypotf + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosf + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrtf + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrt + 0x00000000 0x1cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.floor + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmodf + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmod + 0x00000000 0x154 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_a + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_b + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.atanf_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_b + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_frame 0x00000000 0xb80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_info 0x00000000 0x847 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_abbrev 0x00000000 0xdb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_aranges + 0x00000000 0x228 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_ranges 0x00000000 0x750 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_line 0x00000000 0x345 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_str 0x00000000 0x364 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabsf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ceilf + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.floorf + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ldexpf + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.frexpf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .debug_frame 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) Memory Configuration @@ -1095,7 +2115,8 @@ FLASH 0x08000000 0x00006000 xr Linker script and memory map - 0x08004d50 __do_debug_operation = __do_debug_operation_mempoll + 0x00000000 __vfprintf = __vfprintf_float_long_long + 0x00000000 __vfscanf = __vfscanf_float_long_long_cc 0x20000000 __SRAM_segment_start__ = 0x20000000 0x20002000 __SRAM_segment_end__ = 0x20002000 0x08000000 __FLASH_segment_start__ = 0x8000000 @@ -1128,486 +2149,543 @@ Linker script and memory map 0x00000001 . = ASSERT (((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <= __FLASH_segment_end__)), error: .vectors is too large to fit in FLASH memory segment) 0x08000150 __init_load_start__ = ALIGN (__vectors_end__, 0x4) -.init 0x08000150 0x104 +.init 0x08000150 0x108 0x08000150 __init_start__ = . *(.init .init.*) - .init 0x08000150 0x104 THUMB Debug/../../obj/cstart.o + .init 0x08000150 0x108 THUMB Debug/../../obj/cstart.o 0x08000150 reset_handler - 0x080001ce exit - 0x08000254 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x08000254 __init_load_end__ = __init_end__ + 0x080001d2 exit + 0x08000258 __init_end__ = (__init_start__ + SIZEOF (.init)) + 0x08000258 __init_load_end__ = __init_end__ 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment) - 0x08000254 __text_load_start__ = ALIGN (__init_end__, 0x4) + 0x08000258 __text_load_start__ = ALIGN (__init_end__, 0x4) -.text 0x08000254 0x4b3c - 0x08000254 __text_start__ = . +.text 0x08000258 0x4318 + 0x08000258 __text_start__ = . *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs + .glue_7 0x08000258 0x0 linker stubs + .glue_7t 0x08000258 0x0 linker stubs .text.FileIsFirmwareUpdateRequestedHook - 0x08000254 0x4c THUMB Debug/../../obj/hooks.o - 0x08000254 FileIsFirmwareUpdateRequestedHook + 0x08000258 0x3c THUMB Debug/../../obj/hooks.o + 0x08000258 FileIsFirmwareUpdateRequestedHook .text.FileGetFirmwareFilenameHook - 0x080002a0 0xc THUMB Debug/../../obj/hooks.o - 0x080002a0 FileGetFirmwareFilenameHook + 0x08000294 0x8 THUMB Debug/../../obj/hooks.o + 0x08000294 FileGetFirmwareFilenameHook .text.FileFirmwareUpdateStartedHook - 0x080002ac 0x38 THUMB Debug/../../obj/hooks.o - 0x080002ac FileFirmwareUpdateStartedHook + 0x0800029c 0x28 THUMB Debug/../../obj/hooks.o + 0x0800029c FileFirmwareUpdateStartedHook .text.FileFirmwareUpdateCompletedHook - 0x080002e4 0x58 THUMB Debug/../../obj/hooks.o - 0x080002e4 FileFirmwareUpdateCompletedHook + 0x080002c4 0x48 THUMB Debug/../../obj/hooks.o + 0x080002c4 FileFirmwareUpdateCompletedHook .text.FileFirmwareUpdateErrorHook - 0x0800033c 0x24 THUMB Debug/../../obj/hooks.o - 0x0800033c FileFirmwareUpdateErrorHook + 0x0800030c 0x18 THUMB Debug/../../obj/hooks.o + 0x0800030c FileFirmwareUpdateErrorHook .text.FileFirmwareUpdateLogHook - 0x08000360 0x64 THUMB Debug/../../obj/hooks.o - 0x08000360 FileFirmwareUpdateLogHook - .text.main 0x080003c4 0x1c0 THUMB Debug/../../obj/main.o - 0x080003c4 main + 0x08000324 0x50 THUMB Debug/../../obj/hooks.o + 0x08000324 FileFirmwareUpdateLogHook + .text.main 0x08000374 0x188 THUMB Debug/../../obj/main.o + 0x08000374 main .text.xchg_spi - 0x08000584 0x38 THUMB Debug/../../obj/mmc.o + 0x080004fc 0x28 THUMB Debug/../../obj/mmc.o .text.wait_ready - 0x080005bc 0x2c THUMB Debug/../../obj/mmc.o - .text.rcvr_spi_m - 0x080005e8 0x10 THUMB Debug/../../obj/mmc.o - .text.rcvr_datablock - 0x080005f8 0x64 THUMB Debug/../../obj/mmc.o - .text.xmit_datablock - 0x0800065c 0x60 THUMB Debug/../../obj/mmc.o + 0x08000524 0x2c THUMB Debug/../../obj/mmc.o .text.deselect - 0x080006bc 0x20 THUMB Debug/../../obj/mmc.o - .text.select 0x080006dc 0x34 THUMB Debug/../../obj/mmc.o + 0x08000550 0x18 THUMB Debug/../../obj/mmc.o + .text.select 0x08000568 0x2c THUMB Debug/../../obj/mmc.o .text.send_cmd - 0x08000710 0xac THUMB Debug/../../obj/mmc.o + 0x08000594 0x90 THUMB Debug/../../obj/mmc.o + .text.xmit_datablock + 0x08000624 0x5c THUMB Debug/../../obj/mmc.o + .text.rcvr_datablock + 0x08000680 0x5c THUMB Debug/../../obj/mmc.o .text.disk_initialize - 0x080007bc 0x364 THUMB Debug/../../obj/mmc.o - 0x080007bc disk_initialize + 0x080006dc 0x2e0 THUMB Debug/../../obj/mmc.o + 0x080006dc disk_initialize .text.disk_status - 0x08000b20 0x18 THUMB Debug/../../obj/mmc.o - 0x08000b20 disk_status + 0x080009bc 0x14 THUMB Debug/../../obj/mmc.o + 0x080009bc disk_status .text.disk_read - 0x08000b38 0xa8 THUMB Debug/../../obj/mmc.o - 0x08000b38 disk_read + 0x080009d0 0x8c THUMB Debug/../../obj/mmc.o + 0x080009d0 disk_read .text.disk_write - 0x08000be0 0xd4 THUMB Debug/../../obj/mmc.o - 0x08000be0 disk_write + 0x08000a5c 0xac THUMB Debug/../../obj/mmc.o + 0x08000a5c disk_write .text.disk_ioctl - 0x08000cb4 0x310 THUMB Debug/../../obj/mmc.o - 0x08000cb4 disk_ioctl - .text.get_fattime - 0x08000fc4 0xc THUMB Debug/../../obj/mmc.o - 0x08000fc4 get_fattime + 0x08000b08 0x268 THUMB Debug/../../obj/mmc.o + 0x08000b08 disk_ioctl .text.GPIO_Init - 0x08000fd0 0xc0 THUMB Debug/../../obj/stm32f10x_gpio.o - 0x08000fd0 GPIO_Init + 0x08000d70 0xa0 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x08000d70 GPIO_Init .text.GPIO_SetBits - 0x08001090 0x8 THUMB Debug/../../obj/stm32f10x_gpio.o - 0x08001090 GPIO_SetBits + 0x08000e10 0x4 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x08000e10 GPIO_SetBits .text.GPIO_ResetBits - 0x08001098 0x8 THUMB Debug/../../obj/stm32f10x_gpio.o - 0x08001098 GPIO_ResetBits + 0x08000e14 0x4 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x08000e14 GPIO_ResetBits .text.RCC_APB2PeriphClockCmd - 0x080010a0 0x24 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x080010a0 RCC_APB2PeriphClockCmd + 0x08000e18 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x08000e18 RCC_APB2PeriphClockCmd .text.RCC_APB1PeriphClockCmd - 0x080010c4 0x24 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x080010c4 RCC_APB1PeriphClockCmd + 0x08000e34 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x08000e34 RCC_APB1PeriphClockCmd .text.SPI_Init - 0x080010e8 0x44 THUMB Debug/../../obj/stm32f10x_spi.o - 0x080010e8 SPI_Init - .text.SPI_Cmd 0x0800112c 0x20 THUMB Debug/../../obj/stm32f10x_spi.o - 0x0800112c SPI_Cmd + 0x08000e50 0x40 THUMB Debug/../../obj/stm32f10x_spi.o + 0x08000e50 SPI_Init + .text.SPI_Cmd 0x08000e90 0x1c THUMB Debug/../../obj/stm32f10x_spi.o + 0x08000e90 SPI_Cmd .text.SPI_I2S_SendData - 0x0800114c 0x8 THUMB Debug/../../obj/stm32f10x_spi.o - 0x0800114c SPI_I2S_SendData + 0x08000eac 0x4 THUMB Debug/../../obj/stm32f10x_spi.o + 0x08000eac SPI_I2S_SendData .text.SPI_I2S_ReceiveData - 0x08001154 0x8 THUMB Debug/../../obj/stm32f10x_spi.o - 0x08001154 SPI_I2S_ReceiveData + 0x08000eb0 0x8 THUMB Debug/../../obj/stm32f10x_spi.o + 0x08000eb0 SPI_I2S_ReceiveData .text.SPI_CalculateCRC - 0x0800115c 0x20 THUMB Debug/../../obj/stm32f10x_spi.o - 0x0800115c SPI_CalculateCRC + 0x08000eb8 0x1c THUMB Debug/../../obj/stm32f10x_spi.o + 0x08000eb8 SPI_CalculateCRC .text.SPI_I2S_GetFlagStatus - 0x0800117c 0x10 THUMB Debug/../../obj/stm32f10x_spi.o - 0x0800117c SPI_I2S_GetFlagStatus + 0x08000ed4 0xc THUMB Debug/../../obj/stm32f10x_spi.o + 0x08000ed4 SPI_I2S_GetFlagStatus .text.USART_SendData - 0x0800118c 0xc THUMB Debug/../../obj/stm32f10x_usart.o - 0x0800118c USART_SendData + 0x08000ee0 0x8 THUMB Debug/../../obj/stm32f10x_usart.o + 0x08000ee0 USART_SendData .text.USART_GetFlagStatus - 0x08001198 0x10 THUMB Debug/../../obj/stm32f10x_usart.o - 0x08001198 USART_GetFlagStatus - .text.CanInit 0x080011a8 0x180 THUMB Debug/../../obj/can.o - 0x080011a8 CanInit + 0x08000ee8 0xc THUMB Debug/../../obj/stm32f10x_usart.o + 0x08000ee8 USART_GetFlagStatus + .text.CanInit 0x08000ef4 0x130 THUMB Debug/../../obj/can.o + 0x08000ef4 CanInit .text.CanTransmitPacket - 0x08001328 0xac THUMB Debug/../../obj/can.o - 0x08001328 CanTransmitPacket + 0x08001024 0x98 THUMB Debug/../../obj/can.o + 0x08001024 CanTransmitPacket .text.CanReceivePacket - 0x080013d4 0x98 THUMB Debug/../../obj/can.o - 0x080013d4 CanReceivePacket - .text.CpuInit 0x0800146c 0xc THUMB Debug/../../obj/cpu.o - 0x0800146c CpuInit + 0x080010bc 0x74 THUMB Debug/../../obj/can.o + 0x080010bc CanReceivePacket + .text.CpuInit 0x08001130 0x8 THUMB Debug/../../obj/cpu.o + 0x08001130 CpuInit .text.CpuStartUserProgram - 0x08001478 0x34 THUMB Debug/../../obj/cpu.o - 0x08001478 CpuStartUserProgram + 0x08001138 0x34 THUMB Debug/../../obj/cpu.o + 0x08001138 CpuStartUserProgram .text.CpuMemCopy - 0x080014ac 0x28 THUMB Debug/../../obj/cpu.o - 0x080014ac CpuMemCopy - .text.FlashUnlock - 0x080014d4 0x24 THUMB Debug/../../obj/flash.o + 0x0800116c 0x24 THUMB Debug/../../obj/cpu.o + 0x0800116c CpuMemCopy .text.FlashLock - 0x080014f8 0x14 THUMB Debug/../../obj/flash.o + 0x08001190 0x10 THUMB Debug/../../obj/flash.o .text.FlashGetSector - 0x0800150c 0x48 THUMB Debug/../../obj/flash.o + 0x080011a0 0x38 THUMB Debug/../../obj/flash.o .text.FlashWriteBlock - 0x08001554 0xc8 THUMB Debug/../../obj/flash.o - .text.FlashGetSectorBaseAddr - 0x0800161c 0x40 THUMB Debug/../../obj/flash.o - .text.FlashInitBlock - 0x0800165c 0x38 THUMB Debug/../../obj/flash.o + 0x080011d8 0xb4 THUMB Debug/../../obj/flash.o .text.FlashSwitchBlock - 0x08001694 0x50 THUMB Debug/../../obj/flash.o + 0x0800128c 0x58 THUMB Debug/../../obj/flash.o .text.FlashAddToBlock - 0x080016e4 0x94 THUMB Debug/../../obj/flash.o + 0x080012e4 0x84 THUMB Debug/../../obj/flash.o .text.FlashInit - 0x08001778 0x1c THUMB Debug/../../obj/flash.o - 0x08001778 FlashInit + 0x08001368 0x18 THUMB Debug/../../obj/flash.o + 0x08001368 FlashInit .text.FlashWrite - 0x08001794 0x58 THUMB Debug/../../obj/flash.o - 0x08001794 FlashWrite + 0x08001380 0x50 THUMB Debug/../../obj/flash.o + 0x08001380 FlashWrite .text.FlashErase - 0x080017ec 0x140 THUMB Debug/../../obj/flash.o - 0x080017ec FlashErase + 0x080013d0 0x148 THUMB Debug/../../obj/flash.o + 0x080013d0 FlashErase .text.FlashWriteChecksum - 0x0800192c 0x5c THUMB Debug/../../obj/flash.o - 0x0800192c FlashWriteChecksum + 0x08001518 0x50 THUMB Debug/../../obj/flash.o + 0x08001518 FlashWriteChecksum .text.FlashVerifyChecksum - 0x08001988 0x68 THUMB Debug/../../obj/flash.o - 0x08001988 FlashVerifyChecksum + 0x08001568 0x50 THUMB Debug/../../obj/flash.o + 0x08001568 FlashVerifyChecksum .text.FlashDone - 0x080019f0 0x58 THUMB Debug/../../obj/flash.o - 0x080019f0 FlashDone + 0x080015b8 0x3c THUMB Debug/../../obj/flash.o + 0x080015b8 FlashDone .text.FlashGetUserProgBaseAddress - 0x08001a48 0xc THUMB Debug/../../obj/flash.o - 0x08001a48 FlashGetUserProgBaseAddress - .text.NvmInit 0x08001a54 0xc THUMB Debug/../../obj/nvm.o - 0x08001a54 NvmInit + 0x080015f4 0x8 THUMB Debug/../../obj/flash.o + 0x080015f4 FlashGetUserProgBaseAddress + .text.NvmInit 0x080015fc 0x8 THUMB Debug/../../obj/nvm.o + 0x080015fc NvmInit .text.NvmWrite - 0x08001a60 0xc THUMB Debug/../../obj/nvm.o - 0x08001a60 NvmWrite + 0x08001604 0x8 THUMB Debug/../../obj/nvm.o + 0x08001604 NvmWrite .text.NvmErase - 0x08001a6c 0xc THUMB Debug/../../obj/nvm.o - 0x08001a6c NvmErase + 0x0800160c 0x8 THUMB Debug/../../obj/nvm.o + 0x0800160c NvmErase .text.NvmVerifyChecksum - 0x08001a78 0xc THUMB Debug/../../obj/nvm.o - 0x08001a78 NvmVerifyChecksum + 0x08001614 0x8 THUMB Debug/../../obj/nvm.o + 0x08001614 NvmVerifyChecksum .text.NvmGetUserProgBaseAddress - 0x08001a84 0xc THUMB Debug/../../obj/nvm.o - 0x08001a84 NvmGetUserProgBaseAddress - .text.NvmDone 0x08001a90 0x18 THUMB Debug/../../obj/nvm.o - 0x08001a90 NvmDone - .text.TimerReset - 0x08001aa8 0x10 THUMB Debug/../../obj/timer.o - 0x08001aa8 TimerReset + 0x0800161c 0x8 THUMB Debug/../../obj/nvm.o + 0x0800161c NvmGetUserProgBaseAddress + .text.NvmDone 0x08001624 0x14 THUMB Debug/../../obj/nvm.o + 0x08001624 NvmDone .text.TimerInit - 0x08001ab8 0x34 THUMB Debug/../../obj/timer.o - 0x08001ab8 TimerInit + 0x08001638 0x24 THUMB Debug/../../obj/timer.o + 0x08001638 TimerInit + .text.TimerReset + 0x0800165c 0xc THUMB Debug/../../obj/timer.o + 0x0800165c TimerReset .text.TimerUpdate - 0x08001aec 0x24 THUMB Debug/../../obj/timer.o - 0x08001aec TimerUpdate + 0x08001668 0x1c THUMB Debug/../../obj/timer.o + 0x08001668 TimerUpdate .text.TimerGet - 0x08001b10 0x14 THUMB Debug/../../obj/timer.o - 0x08001b10 TimerGet - .text.UartReceiveByte - 0x08001b24 0x28 THUMB Debug/../../obj/uart.o + 0x08001684 0x10 THUMB Debug/../../obj/timer.o + 0x08001684 TimerGet .text.UartTransmitByte - 0x08001b4c 0x4c THUMB Debug/../../obj/uart.o + 0x08001694 0x40 THUMB Debug/../../obj/uart.o .text.UartInit - 0x08001b98 0x2c THUMB Debug/../../obj/uart.o - 0x08001b98 UartInit + 0x080016d4 0x28 THUMB Debug/../../obj/uart.o + 0x080016d4 UartInit .text.UartTransmitPacket - 0x08001bc4 0x70 THUMB Debug/../../obj/uart.o - 0x08001bc4 UartTransmitPacket + 0x080016fc 0x58 THUMB Debug/../../obj/uart.o + 0x080016fc UartTransmitPacket .text.UartReceivePacket - 0x08001c34 0xf8 THUMB Debug/../../obj/uart.o - 0x08001c34 UartReceivePacket + 0x08001754 0xb0 THUMB Debug/../../obj/uart.o + 0x08001754 UartReceivePacket .text.CpuIrqDisable - 0x08001d2c 0x4 THUMB Debug/../../obj/cpu_comp.o - 0x08001d2c CpuIrqDisable + 0x08001804 0x4 THUMB Debug/../../obj/cpu_comp.o + 0x08001804 CpuIrqDisable .text.CpuIrqEnable - 0x08001d30 0x4 THUMB Debug/../../obj/cpu_comp.o - 0x08001d30 CpuIrqEnable + 0x08001808 0x4 THUMB Debug/../../obj/cpu_comp.o + 0x08001808 CpuIrqEnable .text.UnusedISR - 0x08001d34 0x18 THUMB Debug/../../obj/vectors.o - 0x08001d34 UnusedISR + 0x0800180c 0x10 THUMB Debug/../../obj/vectors.o + 0x0800180c UnusedISR .text.AssertFailure - 0x08001d4c 0x8 THUMB Debug/../../obj/assert.o - 0x08001d4c AssertFailure + 0x0800181c 0x8 THUMB Debug/../../obj/assert.o + 0x0800181c AssertFailure .text.BackDoorCheck - 0x08001d54 0x50 THUMB Debug/../../obj/backdoor.o - 0x08001d54 BackDoorCheck + 0x08001824 0x44 THUMB Debug/../../obj/backdoor.o + 0x08001824 BackDoorCheck .text.BackDoorInit - 0x08001da4 0x28 THUMB Debug/../../obj/backdoor.o - 0x08001da4 BackDoorInit + 0x08001868 0x20 THUMB Debug/../../obj/backdoor.o + 0x08001868 BackDoorInit .text.BootInit - 0x08001dcc 0x24 THUMB Debug/../../obj/boot.o - 0x08001dcc BootInit + 0x08001888 0x20 THUMB Debug/../../obj/boot.o + 0x08001888 BootInit .text.BootTask - 0x08001df0 0x1c THUMB Debug/../../obj/boot.o - 0x08001df0 BootTask - .text.ComInit 0x08001e0c 0x24 THUMB Debug/../../obj/com.o - 0x08001e0c ComInit - .text.ComTask 0x08001e30 0x5c THUMB Debug/../../obj/com.o - 0x08001e30 ComTask - .text.ComFree 0x08001e8c 0x4 THUMB Debug/../../obj/com.o - 0x08001e8c ComFree + 0x080018a8 0x18 THUMB Debug/../../obj/boot.o + 0x080018a8 BootTask + .text.ComInit 0x080018c0 0x20 THUMB Debug/../../obj/com.o + 0x080018c0 ComInit + .text.ComTask 0x080018e0 0x38 THUMB Debug/../../obj/com.o + 0x080018e0 ComTask + .text.ComFree 0x08001918 0x4 THUMB Debug/../../obj/com.o + 0x08001918 ComFree .text.ComTransmitPacket - 0x08001e90 0x34 THUMB Debug/../../obj/com.o - 0x08001e90 ComTransmitPacket + 0x0800191c 0x2c THUMB Debug/../../obj/com.o + 0x0800191c ComTransmitPacket .text.ComGetActiveInterfaceMaxRxLen - 0x08001ec4 0x28 THUMB Debug/../../obj/com.o - 0x08001ec4 ComGetActiveInterfaceMaxRxLen + 0x08001948 0x24 THUMB Debug/../../obj/com.o + 0x08001948 ComGetActiveInterfaceMaxRxLen .text.ComGetActiveInterfaceMaxTxLen - 0x08001eec 0x28 THUMB Debug/../../obj/com.o - 0x08001eec ComGetActiveInterfaceMaxTxLen + 0x0800196c 0x24 THUMB Debug/../../obj/com.o + 0x0800196c ComGetActiveInterfaceMaxTxLen .text.ComIsConnected - 0x08001f14 0xc THUMB Debug/../../obj/com.o - 0x08001f14 ComIsConnected - .text.CopInit 0x08001f20 0x4 THUMB Debug/../../obj/cop.o - 0x08001f20 CopInit + 0x08001990 0x8 THUMB Debug/../../obj/com.o + 0x08001990 ComIsConnected + .text.CopInit 0x08001998 0x4 THUMB Debug/../../obj/cop.o + 0x08001998 CopInit .text.CopService - 0x08001f24 0x4 THUMB Debug/../../obj/cop.o - 0x08001f24 CopService - .text.XcpProtectResources - 0x08001f28 0x10 THUMB Debug/../../obj/xcp.o + 0x0800199c 0x4 THUMB Debug/../../obj/cop.o + 0x0800199c CopService .text.XcpSetCtoError - 0x08001f38 0x1c THUMB Debug/../../obj/xcp.o - .text.XcpInit 0x08001f54 0x20 THUMB Debug/../../obj/xcp.o - 0x08001f54 XcpInit + 0x080019a0 0x14 THUMB Debug/../../obj/xcp.o + .text.XcpInit 0x080019b4 0x1c THUMB Debug/../../obj/xcp.o + 0x080019b4 XcpInit .text.XcpIsConnected - 0x08001f74 0x14 THUMB Debug/../../obj/xcp.o - 0x08001f74 XcpIsConnected + 0x080019d0 0x10 THUMB Debug/../../obj/xcp.o + 0x080019d0 XcpIsConnected .text.XcpPacketTransmitted - 0x08001f88 0x14 THUMB Debug/../../obj/xcp.o - 0x08001f88 XcpPacketTransmitted + 0x080019e0 0x10 THUMB Debug/../../obj/xcp.o + 0x080019e0 XcpPacketTransmitted .text.XcpPacketReceived - 0x08001f9c 0x408 THUMB Debug/../../obj/xcp.o - 0x08001f9c XcpPacketReceived + 0x080019f0 0x320 THUMB Debug/../../obj/xcp.o + 0x080019f0 XcpPacketReceived .text.FileLibLongToIntString - 0x080023a4 0x54 THUMB Debug/../../obj/file.o + 0x08001d10 0x3c THUMB Debug/../../obj/file.o .text.FileLibHexStringToByte - 0x080023f8 0x50 THUMB Debug/../../obj/file.o - .text.FileLibByteNibbleToChar - 0x08002448 0x24 THUMB Debug/../../obj/file.o + 0x08001d4c 0x48 THUMB Debug/../../obj/file.o .text.FileLibByteToHexString - 0x0800246c 0x24 THUMB Debug/../../obj/file.o + 0x08001d94 0x38 THUMB Debug/../../obj/file.o .text.FileInit - 0x08002490 0x34 THUMB Debug/../../obj/file.o - 0x08002490 FileInit + 0x08001dcc 0x2c THUMB Debug/../../obj/file.o + 0x08001dcc FileInit .text.FileIsIdle - 0x080024c4 0x14 THUMB Debug/../../obj/file.o - 0x080024c4 FileIsIdle + 0x08001df8 0x10 THUMB Debug/../../obj/file.o + 0x08001df8 FileIsIdle .text.FileHandleFirmwareUpdateRequest - 0x080024d8 0x44 THUMB Debug/../../obj/file.o - 0x080024d8 FileHandleFirmwareUpdateRequest + 0x08001e08 0x30 THUMB Debug/../../obj/file.o + 0x08001e08 FileHandleFirmwareUpdateRequest .text.FileSrecGetLineType - 0x0800251c 0x44 THUMB Debug/../../obj/file.o - 0x0800251c FileSrecGetLineType + 0x08001e38 0x3c THUMB Debug/../../obj/file.o + 0x08001e38 FileSrecGetLineType .text.FileSrecVerifyChecksum - 0x08002560 0x44 THUMB Debug/../../obj/file.o - 0x08002560 FileSrecVerifyChecksum + 0x08001e74 0x38 THUMB Debug/../../obj/file.o + 0x08001e74 FileSrecVerifyChecksum .text.FileSrecParseLine - 0x080025a4 0x190 THUMB Debug/../../obj/file.o - 0x080025a4 FileSrecParseLine + 0x08001eac 0x1a4 THUMB Debug/../../obj/file.o + 0x08001eac FileSrecParseLine .text.FileTask - 0x08002734 0x4ac THUMB Debug/../../obj/file.o - 0x08002734 FileTask - .text.mem_cpy 0x08002be0 0x10 THUMB Debug/../../obj/ff.o - .text.mem_set 0x08002bf0 0xc THUMB Debug/../../obj/ff.o - .text.chk_chr 0x08002bfc 0x18 THUMB Debug/../../obj/ff.o - .text.ld_clust - 0x08002c14 0x20 THUMB Debug/../../obj/ff.o - .text.st_clust - 0x08002c34 0x18 THUMB Debug/../../obj/ff.o - .text.sum_sfn 0x08002c4c 0x24 THUMB Debug/../../obj/ff.o - .text.validate - 0x08002c70 0x4c THUMB Debug/../../obj/ff.o - .text.check_fs - 0x08002cbc 0xa4 THUMB Debug/../../obj/ff.o - .text.chk_mounted - 0x08002d60 0x3f4 THUMB Debug/../../obj/ff.o - .text.get_fileinfo - 0x08003154 0x148 THUMB Debug/../../obj/ff.o - .text.sync_window - 0x0800329c 0x88 THUMB Debug/../../obj/ff.o - .text.move_window - 0x08003324 0x3c THUMB Debug/../../obj/ff.o - .text.sync_fs 0x08003360 0xd4 THUMB Debug/../../obj/ff.o + 0x08002050 0x410 THUMB Debug/../../obj/file.o + 0x08002050 FileTask + .text.ld_dword + 0x08002460 0x18 THUMB Debug/../../obj/ff.o + .text.mem_cpy 0x08002478 0x14 THUMB Debug/../../obj/ff.o .text.clust2sect - 0x08003434 0x20 THUMB Debug/../../obj/ff.o - 0x08003434 clust2sect - .text.get_fat 0x08003454 0xfc THUMB Debug/../../obj/ff.o - 0x08003454 get_fat - .text.dir_sdi 0x08003550 0xac THUMB Debug/../../obj/ff.o - .text.put_fat 0x080035fc 0x118 THUMB Debug/../../obj/ff.o - 0x080035fc put_fat + 0x0800248c 0x18 THUMB Debug/../../obj/ff.o + .text.sum_sfn 0x080024a4 0x20 THUMB Debug/../../obj/ff.o + .text.get_ldnumber + 0x080024c4 0x58 THUMB Debug/../../obj/ff.o + .text.validate + 0x0800251c 0x34 THUMB Debug/../../obj/ff.o + .text.sync_window + 0x08002550 0x68 THUMB Debug/../../obj/ff.o + .text.move_window + 0x080025b8 0x38 THUMB Debug/../../obj/ff.o + .text.sync_fs 0x080025f0 0xb8 THUMB Debug/../../obj/ff.o + .text.put_fat 0x080026a8 0x14c THUMB Debug/../../obj/ff.o + .text.st_clust + 0x080027f4 0x18 THUMB Debug/../../obj/ff.o + .text.get_fileinfo + 0x0800280c 0xf8 THUMB Debug/../../obj/ff.o + .text.get_fat 0x08002904 0xd4 THUMB Debug/../../obj/ff.o + .text.dir_sdi 0x080029d8 0xbc THUMB Debug/../../obj/ff.o .text.create_chain - 0x08003714 0xc8 THUMB Debug/../../obj/ff.o - .text.dir_next - 0x080037dc 0x150 THUMB Debug/../../obj/ff.o - .text.dir_find - 0x0800392c 0x184 THUMB Debug/../../obj/ff.o - .text.follow_path - 0x08003ab0 0x320 THUMB Debug/../../obj/ff.o - .text.dir_remove - 0x08003dd0 0x54 THUMB Debug/../../obj/ff.o - .text.dir_read - 0x08003e24 0x144 THUMB Debug/../../obj/ff.o + 0x08002a94 0xd8 THUMB Debug/../../obj/ff.o .text.remove_chain - 0x08003f68 0x88 THUMB Debug/../../obj/ff.o - .text.gen_numname - 0x08003ff0 0xb0 THUMB Debug/../../obj/ff.o - 0x08003ff0 gen_numname + 0x08002b6c 0x94 THUMB Debug/../../obj/ff.o + .text.dir_next + 0x08002c00 0x128 THUMB Debug/../../obj/ff.o + .text.dir_remove + 0x08002d28 0x58 THUMB Debug/../../obj/ff.o + .text.dir_find + 0x08002d80 0x1bc THUMB Debug/../../obj/ff.o .text.dir_register - 0x080040a0 0x238 THUMB Debug/../../obj/ff.o - .text.f_mount 0x080042d8 0x34 THUMB Debug/../../obj/ff.o - 0x080042d8 f_mount - .text.f_open 0x0800430c 0x188 THUMB Debug/../../obj/ff.o - 0x0800430c f_open - .text.f_read 0x08004494 0x1c0 THUMB Debug/../../obj/ff.o - 0x08004494 f_read - .text.f_write 0x08004654 0x200 THUMB Debug/../../obj/ff.o - 0x08004654 f_write - .text.f_sync 0x08004854 0xa8 THUMB Debug/../../obj/ff.o - 0x08004854 f_sync - .text.f_close 0x080048fc 0x14 THUMB Debug/../../obj/ff.o - 0x080048fc f_close - .text.f_lseek 0x08004910 0x1b8 THUMB Debug/../../obj/ff.o - 0x08004910 f_lseek - .text.f_stat 0x08004ac8 0x50 THUMB Debug/../../obj/ff.o - 0x08004ac8 f_stat + 0x08002f3c 0x2dc THUMB Debug/../../obj/ff.o + .text.check_fs + 0x08003218 0x68 THUMB Debug/../../obj/ff.o + .text.find_volume + 0x08003280 0x338 THUMB Debug/../../obj/ff.o + .text.dir_read + 0x080035b8 0x140 THUMB Debug/../../obj/ff.o + .text.ld_clust + 0x080036f8 0x20 THUMB Debug/../../obj/ff.o + .text.follow_path + 0x08003718 0x308 THUMB Debug/../../obj/ff.o + .text.f_mount 0x08003a20 0x64 THUMB Debug/../../obj/ff.o + 0x08003a20 f_mount + .text.f_open 0x08003a84 0x1a0 THUMB Debug/../../obj/ff.o + 0x08003a84 f_open + .text.f_read 0x08003c24 0x170 THUMB Debug/../../obj/ff.o + 0x08003c24 f_read + .text.f_write 0x08003d94 0x1a4 THUMB Debug/../../obj/ff.o + 0x08003d94 f_write + .text.putc_bfd + 0x08003f38 0x48 THUMB Debug/../../obj/ff.o + .text.f_sync 0x08003f80 0x9c THUMB Debug/../../obj/ff.o + 0x08003f80 f_sync + .text.f_close 0x0800401c 0x24 THUMB Debug/../../obj/ff.o + 0x0800401c f_close + .text.f_lseek 0x08004040 0x170 THUMB Debug/../../obj/ff.o + 0x08004040 f_lseek + .text.f_stat 0x080041b0 0x4c THUMB Debug/../../obj/ff.o + 0x080041b0 f_stat .text.f_unlink - 0x08004b18 0xbc THUMB Debug/../../obj/ff.o - 0x08004b18 f_unlink - .text.f_gets 0x08004bd4 0x5c THUMB Debug/../../obj/ff.o - 0x08004bd4 f_gets - .text.f_putc 0x08004c30 0x38 THUMB Debug/../../obj/ff.o - 0x08004c30 f_putc - .text.f_puts 0x08004c68 0x38 THUMB Debug/../../obj/ff.o - 0x08004c68 f_puts + 0x080041fc 0xb8 THUMB Debug/../../obj/ff.o + 0x080041fc f_unlink + .text.f_gets 0x080042b4 0x54 THUMB Debug/../../obj/ff.o + 0x080042b4 f_gets + .text.f_puts 0x08004308 0x58 THUMB Debug/../../obj/ff.o + 0x08004308 f_puts .text.ff_convert - 0x08004ca0 0x58 THUMB Debug/../../obj/unicode.o - 0x08004ca0 ff_convert + 0x08004360 0x44 THUMB Debug/../../obj/unicode.o + 0x08004360 ff_convert .text.ff_wtoupper - 0x08004cf8 0x38 THUMB Debug/../../obj/unicode.o - 0x08004cf8 ff_wtoupper + 0x080043a4 0x9c THUMB Debug/../../obj/unicode.o + 0x080043a4 ff_wtoupper + .text.libc.__RAL_ascii_isctype + 0x08004440 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_toupper + 0x0800445c 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_tolower + 0x08004468 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_iswctype + 0x08004474 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towupper + 0x08004490 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towlower + 0x0800449c 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_wctomb + 0x080044a8 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x080044a8 __RAL_ascii_wctomb + .text.libc.__RAL_ascii_mbtowc + 0x080044b8 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x080044b8 __RAL_ascii_mbtowc + .text.libc.__RAL_isctype + 0x080044dc 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x080044dc __RAL_isctype .text.libc.isdigit - 0x08004d30 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x08004d30 isdigit + 0x080044f0 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x080044f0 isdigit .text.libc.toupper - 0x08004d40 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x08004d40 toupper - .text.libdebugio.__do_debug_operation_mempoll - 0x08004d50 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x08004d50 __do_debug_operation_mempoll - .text.libc.__debug_io_lock - 0x08004d88 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08004d88 __debug_io_lock - .text.libc.__debug_io_unlock - 0x08004d8c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08004d8c __debug_io_unlock - 0x08004d90 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x08004d90 __text_load_end__ = __text_end__ + 0x080044fc 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x080044fc toupper + .text.libc.memset + 0x08004510 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + 0x08004510 memset + 0x08004570 __text_end__ = (__text_start__ + SIZEOF (.text)) + 0x08004570 __text_load_end__ = __text_end__ .vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0 linker stubs .v4_bx 0x00000000 0x0 .v4_bx 0x00000000 0x0 linker stubs - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) - 0x08004d90 __dtors_load_start__ = ALIGN (__text_end__, 0x4) -.dtors 0x08004d90 0x0 - 0x08004d90 __dtors_start__ = . +.iplt 0x00000000 0x0 + .iplt 0x00000000 0x0 THUMB Debug/../../obj/hooks.o + 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) + 0x08004570 __dtors_load_start__ = ALIGN (__text_end__, 0x4) + +.dtors 0x08004570 0x0 + 0x08004570 __dtors_start__ = . *(SORT(.dtors.*)) *(.dtors) *(.fini_array .fini_array.*) - 0x08004d90 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x08004d90 __dtors_load_end__ = __dtors_end__ + 0x08004570 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) + 0x08004570 __dtors_load_end__ = __dtors_end__ 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment) - 0x08004d90 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) + 0x08004570 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) -.ctors 0x08004d90 0x0 - 0x08004d90 __ctors_start__ = . +.ctors 0x08004570 0x0 + 0x08004570 __ctors_start__ = . *(SORT(.ctors.*)) *(.ctors) *(.init_array .init_array.*) - 0x08004d90 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x08004d90 __ctors_load_end__ = __ctors_end__ + 0x08004570 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) + 0x08004570 __ctors_load_end__ = __ctors_end__ 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment) - 0x08004d90 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) + 0x08004570 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) -.rodata 0x08004d90 0xa98 - 0x08004d90 __rodata_start__ = . +.rodata 0x08004570 0xc80 + 0x08004570 __rodata_start__ = . *(.rodata .rodata.* .gnu.linkonce.r.*) .rodata.firmwareFilename - 0x08004d90 0x20 THUMB Debug/../../obj/hooks.o + 0x08004570 0x20 THUMB Debug/../../obj/hooks.o .rodata.str1.4 - 0x08004db0 0xd THUMB Debug/../../obj/hooks.o - 0x10 (size before relaxing) - *fill* 0x08004dbd 0x3 00 + 0x08004590 0xd THUMB Debug/../../obj/hooks.o + *fill* 0x0800459d 0x3 .rodata.str1.4 - 0x08004dc0 0x63 THUMB Debug/../../obj/main.o - 0x64 (size before relaxing) - *fill* 0x08004e23 0x1 00 + 0x080045a0 0x63 THUMB Debug/../../obj/main.o + *fill* 0x08004603 0x1 .rodata.str1.4 - 0x08004e24 0x81 THUMB Debug/../../obj/can.o - 0x84 (size before relaxing) - *fill* 0x08004ea5 0x3 00 + 0x08004604 0x81 THUMB Debug/../../obj/can.o + *fill* 0x08004685 0x3 .rodata.canTiming - 0x08004ea8 0x48 THUMB Debug/../../obj/can.o + 0x08004688 0x24 THUMB Debug/../../obj/can.o .rodata.flashLayout - 0x08004ef0 0x9c THUMB Debug/../../obj/flash.o + 0x080046ac 0x9c THUMB Debug/../../obj/flash.o .rodata.str1.4 - 0x08004f8c 0x82 THUMB Debug/../../obj/uart.o - 0x84 (size before relaxing) - *fill* 0x0800500e 0x2 00 + 0x08004748 0x82 THUMB Debug/../../obj/uart.o + *fill* 0x080047ca 0x2 .rodata.str1.4 - 0x08005010 0x90 THUMB Debug/../../obj/vectors.o + 0x080047cc 0x90 THUMB Debug/../../obj/vectors.o .rodata.xcpStationId - 0x080050a0 0x8 THUMB Debug/../../obj/xcp.o + 0x0800485c 0x8 THUMB Debug/../../obj/xcp.o .rodata.str1.4 - 0x080050a8 0x219 THUMB Debug/../../obj/file.o - 0x220 (size before relaxing) - *fill* 0x080052c1 0x3 00 + 0x08004864 0x21d THUMB Debug/../../obj/file.o + 0x221 (size before relaxing) + *fill* 0x08004a81 0x3 .rodata.str1.4 - 0x080052c4 0x14 THUMB Debug/../../obj/ff.o - .rodata.ExCvt 0x080052d8 0x80 THUMB Debug/../../obj/ff.o + 0x08004a84 0x13 THUMB Debug/../../obj/ff.o + *fill* 0x08004a97 0x1 + .rodata.ExCvt 0x08004a98 0x80 THUMB Debug/../../obj/ff.o .rodata.LfnOfs - 0x08005358 0x10 THUMB Debug/../../obj/ff.o - .rodata.tbl_upper.984 - 0x08005368 0x1e0 THUMB Debug/../../obj/unicode.o - .rodata.tbl_lower.983 - 0x08005548 0x1e0 THUMB Debug/../../obj/unicode.o - .rodata.Tbl 0x08005728 0x100 THUMB Debug/../../obj/unicode.o - 0x08005828 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x08005828 __rodata_load_end__ = __rodata_end__ + 0x08004b18 0xd THUMB Debug/../../obj/ff.o + *fill* 0x08004b25 0x3 + .rodata.Tbl 0x08004b28 0x100 THUMB Debug/../../obj/unicode.o + .rodata.cvt2.3900 + 0x08004c28 0xbc THUMB Debug/../../obj/unicode.o + .rodata.cvt1.3899 + 0x08004ce4 0x1f2 THUMB Debug/../../obj/unicode.o + *fill* 0x08004ed6 0x2 + .rodata.libc.__RAL_c_locale_abbrev_month_names + 0x08004ed8 0x31 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08004ed8 __RAL_c_locale_abbrev_month_names + *fill* 0x08004f09 0x3 + .rodata.libc.__RAL_data_utf8_period + 0x08004f0c 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08004f0c __RAL_data_utf8_period + *fill* 0x08004f0e 0x2 + .rodata.libc.str1.4 + 0x08004f10 0xe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0xf1 (size before relaxing) + .rodata.libc.__RAL_data_empty_string + 0x08004ff4 0x1 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08004ff4 __RAL_data_empty_string + *fill* 0x08004ff5 0x3 + .rodata.libc.__RAL_c_locale + 0x08004ff8 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08004ff8 __RAL_c_locale + .rodata.libc.__RAL_ascii_ctype_mask + 0x08005004 0xd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + *fill* 0x08005011 0x3 + .rodata.libc.__RAL_c_locale_day_names + 0x08005014 0x3a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08005014 __RAL_c_locale_day_names + *fill* 0x0800504e 0x2 + .rodata.libc.__RAL_c_locale_abbrev_day_names + 0x08005050 0x1d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08005050 __RAL_c_locale_abbrev_day_names + *fill* 0x0800506d 0x3 + .rodata.libc.__RAL_c_locale_am_pm_indicator + 0x08005070 0x7 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08005070 __RAL_c_locale_am_pm_indicator + *fill* 0x08005077 0x1 + .rodata.libc.__RAL_c_locale_data + 0x08005078 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08005078 __RAL_c_locale_data + .rodata.libc.__RAL_codeset_ascii + 0x080050d0 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x080050d0 __RAL_codeset_ascii + .rodata.libc.__RAL_c_locale_month_names + 0x080050f0 0x57 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x080050f0 __RAL_c_locale_month_names + *fill* 0x08005147 0x1 + .rodata.libc.__RAL_c_locale_date_time_format + 0x08005148 0xf C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08005148 __RAL_c_locale_date_time_format + *fill* 0x08005157 0x1 + .rodata.libc.__RAL_c_locale_time_format + 0x08005158 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08005158 __RAL_c_locale_time_format + *fill* 0x08005161 0x3 + .rodata.libc.__RAL_c_locale_date_format + 0x08005164 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08005164 __RAL_c_locale_date_format + *fill* 0x0800516d 0x3 + .rodata.libc.__RAL_ascii_ctype_map + 0x08005170 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x08005170 __RAL_ascii_ctype_map + 0x080051f0 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) + 0x080051f0 __rodata_load_end__ = __rodata_end__ + +.rel.dyn 0x08000000 0x0 + .rel.iplt 0x08000000 0x0 THUMB Debug/../../obj/hooks.o 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment) - 0x08005828 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) + 0x080051f0 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) -.ARM.exidx 0x08005828 0x0 - 0x08005828 __ARM.exidx_start__ = . - 0x08005828 __exidx_start = __ARM.exidx_start__ +.ARM.exidx 0x080051f0 0x0 + 0x080051f0 __ARM.exidx_start__ = . + 0x080051f0 __exidx_start = __ARM.exidx_start__ *(.ARM.exidx .ARM.exidx.*) - 0x08005828 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) - 0x08005828 __exidx_end = __ARM.exidx_end__ - 0x08005828 __ARM.exidx_load_end__ = __ARM.exidx_end__ + 0x080051f0 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) + 0x080051f0 __exidx_end = __ARM.exidx_end__ + 0x080051f0 __ARM.exidx_load_end__ = __ARM.exidx_end__ 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment) - 0x08005828 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) + 0x080051f0 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) -.fast 0x20000000 0x0 load address 0x08005828 +.fast 0x20000000 0x0 load address 0x080051f0 0x20000000 __fast_start__ = . *(.fast .fast.*) 0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x08005828 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) + 0x080051f0 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) 0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment) .fast_run 0x20000000 0x0 @@ -1616,145 +2694,146 @@ Linker script and memory map 0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) 0x20000000 __fast_run_load_end__ = __fast_run_end__ 0x00000001 . = ASSERT (((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <= __SRAM_segment_end__)), error: .fast_run is too large to fit in SRAM memory segment) - 0x08005828 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) + 0x080051f0 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) -.data 0x20000000 0x8 load address 0x08005828 +.data 0x20000000 0x18 load address 0x080051f0 0x20000000 __data_start__ = . *(.data .data.* .gnu.linkonce.d.*) .data.Stat 0x20000000 0x1 THUMB Debug/../../obj/mmc.o - *fill* 0x20000001 0x3 00 .data.comActiveInterface - 0x20000004 0x4 THUMB Debug/../../obj/com.o - 0x20000008 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x08005830 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + 0x20000001 0x1 THUMB Debug/../../obj/com.o + *fill* 0x20000002 0x2 + .data.libc.__RAL_global_locale + 0x20000004 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x20000004 __RAL_global_locale + 0x20000018 __data_end__ = (__data_start__ + SIZEOF (.data)) + 0x08005208 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + +.igot.plt 0x00000000 0x0 + .igot.plt 0x00000000 0x0 THUMB Debug/../../obj/hooks.o 0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment) -.data_run 0x20000000 0x8 load address 0x08005828 +.data_run 0x20000000 0x18 load address 0x080051f0 0x20000000 __data_run_start__ = . - 0x20000008 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) - *fill* 0x20000000 0x8 00 - 0x20000008 __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) - 0x20000008 __data_run_load_end__ = __data_run_end__ + 0x20000018 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) + *fill* 0x20000000 0x18 + 0x20000018 __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) + 0x20000018 __data_run_load_end__ = __data_run_end__ 0x00000001 . = ASSERT (((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <= __SRAM_segment_end__)), error: .data_run is too large to fit in SRAM memory segment) - 0x20000008 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) + 0x20000018 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) -.bss 0x20000008 0xf4c - 0x20000008 __bss_start__ = . +.bss 0x20000018 0xf48 + 0x20000018 __bss_start__ = . *(.bss .bss.* .gnu.linkonce.b.*) - .bss.logfile 0x20000008 0x228 THUMB Debug/../../obj/hooks.o - .bss.CardType 0x20000230 0x4 THUMB Debug/../../obj/mmc.o + .bss.logfile 0x20000018 0x22c THUMB Debug/../../obj/hooks.o + .bss.CardType 0x20000244 0x4 THUMB Debug/../../obj/mmc.o .bss.bootBlockInfo - 0x20000234 0x204 THUMB Debug/../../obj/flash.o + 0x20000248 0x204 THUMB Debug/../../obj/flash.o .bss.blockInfo - 0x20000438 0x204 THUMB Debug/../../obj/flash.o + 0x2000044c 0x204 THUMB Debug/../../obj/flash.o .bss.millisecond_counter - 0x2000063c 0x4 THUMB Debug/../../obj/timer.o - .bss.xcpCtoRxStartTime.1129 - 0x20000640 0x4 THUMB Debug/../../obj/uart.o - .bss.xcpCtoReqPacket.1126 - 0x20000644 0x44 THUMB Debug/../../obj/uart.o - .bss.xcpCtoRxLength.1127 - 0x20000688 0x1 THUMB Debug/../../obj/uart.o - .bss.xcpCtoRxInProgress.1128 - 0x20000689 0x1 THUMB Debug/../../obj/uart.o + 0x20000650 0x4 THUMB Debug/../../obj/timer.o + .bss.xcpCtoReqPacket.4042 + 0x20000654 0x41 THUMB Debug/../../obj/uart.o + .bss.xcpCtoRxLength.4043 + 0x20000695 0x1 THUMB Debug/../../obj/uart.o + .bss.xcpCtoRxInProgress.4044 + 0x20000696 0x1 THUMB Debug/../../obj/uart.o + *fill* 0x20000697 0x1 + .bss.xcpCtoRxStartTime.4045 + 0x20000698 0x4 THUMB Debug/../../obj/uart.o .bss.backdoorOpen - 0x2000068a 0x1 THUMB Debug/../../obj/backdoor.o - *fill* 0x2000068b 0x1 00 + 0x2000069c 0x1 THUMB Debug/../../obj/backdoor.o + *fill* 0x2000069d 0x3 .bss.backdoorOpenTime - 0x2000068c 0x4 THUMB Debug/../../obj/backdoor.o - .bss.xcpCtoReqPacket.1110 - 0x20000690 0x40 THUMB Debug/../../obj/com.o - .bss.xcpInfo 0x200006d0 0x4c THUMB Debug/../../obj/xcp.o + 0x200006a0 0x4 THUMB Debug/../../obj/backdoor.o + .bss.xcpCtoReqPacket.4026 + 0x200006a4 0x40 THUMB Debug/../../obj/com.o + .bss.xcpInfo 0x200006e4 0x4c THUMB Debug/../../obj/xcp.o .bss.loggingStr - 0x2000071c 0x40 THUMB Debug/../../obj/file.o + 0x20000730 0x40 THUMB Debug/../../obj/file.o .bss.firmwareUpdateState - 0x2000075c 0x4 THUMB Debug/../../obj/file.o + 0x20000770 0x1 THUMB Debug/../../obj/file.o + *fill* 0x20000771 0x3 .bss.eraseInfo - 0x20000760 0x8 THUMB Debug/../../obj/file.o + 0x20000774 0x8 THUMB Debug/../../obj/file.o .bss.fatFsObjects - 0x20000768 0x458 THUMB Debug/../../obj/file.o + 0x2000077c 0x458 THUMB Debug/../../obj/file.o .bss.lineParseObject - 0x20000bc0 0x184 THUMB Debug/../../obj/file.o - .bss.LfnBuf 0x20000d44 0x200 THUMB Debug/../../obj/ff.o - .bss.Fsid 0x20000f44 0x2 THUMB Debug/../../obj/ff.o - *fill* 0x20000f46 0x2 00 - .bss.FatFs 0x20000f48 0x4 THUMB Debug/../../obj/ff.o - .bss.libdebugio.dbgCommWord - 0x20000f4c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x20000f4c dbgCommWord - .bss.libdebugio.dbgCntrlWord_mempoll - 0x20000f50 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x20000f50 dbgCntrlWord_mempoll + 0x20000bd4 0x184 THUMB Debug/../../obj/file.o + .bss.LfnBuf 0x20000d58 0x200 THUMB Debug/../../obj/ff.o + .bss.Fsid 0x20000f58 0x2 THUMB Debug/../../obj/ff.o + *fill* 0x20000f5a 0x2 + .bss.FatFs 0x20000f5c 0x4 THUMB Debug/../../obj/ff.o *(COMMON) - 0x20000f54 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x20000f54 __bss_load_end__ = __bss_end__ + 0x20000f60 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) + 0x20000f60 __bss_load_end__ = __bss_end__ 0x00000001 . = ASSERT (((__bss_end__ >= __SRAM_segment_start__) && (__bss_end__ <= __SRAM_segment_end__)), error: .bss is too large to fit in SRAM memory segment) - 0x20000f54 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) + 0x20000f60 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) -.non_init 0x20000f54 0x0 - 0x20000f54 __non_init_start__ = . +.non_init 0x20000f60 0x0 + 0x20000f60 __non_init_start__ = . *(.non_init .non_init.*) - 0x20000f54 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x20000f54 __non_init_load_end__ = __non_init_end__ + 0x20000f60 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) + 0x20000f60 __non_init_load_end__ = __non_init_end__ 0x00000001 . = ASSERT (((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <= __SRAM_segment_end__)), error: .non_init is too large to fit in SRAM memory segment) - 0x20000f54 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) + 0x20000f60 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) -.heap 0x20000f54 0x80 - 0x20000f54 __heap_start__ = . +.heap 0x20000f60 0x80 + 0x20000f60 __heap_start__ = . *(.heap .heap.*) - 0x20000fd4 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x20000f54 0x80 00 - 0x20000fd4 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x20000fd4 __heap_load_end__ = __heap_end__ + 0x20000fe0 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) + *fill* 0x20000f60 0x80 + 0x20000fe0 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) + 0x20000fe0 __heap_load_end__ = __heap_end__ 0x00000001 . = ASSERT (((__heap_end__ >= __SRAM_segment_start__) && (__heap_end__ <= __SRAM_segment_end__)), error: .heap is too large to fit in SRAM memory segment) - 0x20000fd4 __stack_load_start__ = ALIGN (__heap_end__, 0x4) + 0x20000fe0 __stack_load_start__ = ALIGN (__heap_end__, 0x4) -.stack 0x20000fd4 0x200 - 0x20000fd4 __stack_start__ = . +.stack 0x20000fe0 0x200 + 0x20000fe0 __stack_start__ = . *(.stack .stack.*) - 0x200011d4 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x20000fd4 0x200 00 - 0x200011d4 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x200011d4 __stack_load_end__ = __stack_end__ + 0x200011e0 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) + *fill* 0x20000fe0 0x200 + 0x200011e0 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) + 0x200011e0 __stack_load_end__ = __stack_end__ 0x00000001 . = ASSERT (((__stack_end__ >= __SRAM_segment_start__) && (__stack_end__ <= __SRAM_segment_end__)), error: .stack is too large to fit in SRAM memory segment) - 0x200011d4 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) + 0x200011e0 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) -.stack_process 0x200011d4 0x0 - 0x200011d4 __stack_process_start__ = . +.stack_process 0x200011e0 0x0 + 0x200011e0 __stack_process_start__ = . *(.stack_process .stack_process.*) - 0x200011d4 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) - 0x200011d4 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) - 0x200011d4 __stack_process_load_end__ = __stack_process_end__ + 0x200011e0 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) + 0x200011e0 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) + 0x200011e0 __stack_process_load_end__ = __stack_process_end__ 0x00000001 . = ASSERT (((__stack_process_end__ >= __SRAM_segment_start__) && (__stack_process_end__ <= __SRAM_segment_end__)), error: .stack_process is too large to fit in SRAM memory segment) - 0x200011d4 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) + 0x200011e0 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) -.tbss 0x200011d4 0x0 - 0x200011d4 __tbss_start__ = . +.tbss 0x200011e0 0x0 + 0x200011e0 __tbss_start__ = . *(.tbss .tbss.*) - 0x200011d4 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) - 0x200011d4 __tbss_load_end__ = __tbss_end__ + 0x200011e0 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) + 0x200011e0 __tbss_load_end__ = __tbss_end__ 0x00000001 . = ASSERT (((__tbss_end__ >= __SRAM_segment_start__) && (__tbss_end__ <= __SRAM_segment_end__)), error: .tbss is too large to fit in SRAM memory segment) - 0x08005830 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + 0x08005208 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) -.tdata 0x200011d4 0x0 load address 0x08005830 - 0x200011d4 __tdata_start__ = . +.tdata 0x200011e0 0x0 load address 0x08005208 + 0x200011e0 __tdata_start__ = . *(.tdata .tdata.*) - 0x200011d4 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) - 0x08005830 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) - 0x08005830 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) + 0x200011e0 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) + 0x08005208 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) + 0x08005208 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) 0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment) -.tdata_run 0x200011d4 0x0 - 0x200011d4 __tdata_run_start__ = . - 0x200011d4 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) - 0x200011d4 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) - 0x200011d4 __tdata_run_load_end__ = __tdata_run_end__ - 0x200011d4 __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) +.tdata_run 0x200011e0 0x0 + 0x200011e0 __tdata_run_start__ = . + 0x200011e0 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) + 0x200011e0 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) + 0x200011e0 __tdata_run_load_end__ = __tdata_run_end__ + 0x200011e0 __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) 0x00000001 . = ASSERT (((__tdata_run_end__ >= __SRAM_segment_start__) && (__tdata_run_end__ <= __SRAM_segment_end__)), error: .tdata_run is too large to fit in SRAM memory segment) START GROUP LOAD THUMB Debug/../../obj/hooks.o LOAD THUMB Debug/../../obj/main.o -LOAD THUMB Debug/../../obj/core_cm3.o LOAD THUMB Debug/../../obj/system_stm32f10x.o LOAD THUMB Debug/../../obj/mmc.o LOAD THUMB Debug/../../obj/stm32f10x_gpio.o @@ -1780,432 +2859,464 @@ LOAD THUMB Debug/../../obj/xcp.o LOAD THUMB Debug/../../obj/file.o LOAD THUMB Debug/../../obj/ff.o LOAD THUMB Debug/../../obj/unicode.o -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcpp_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_targetio_impl_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_mempoll_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcpp_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o END GROUP OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/../bin/openblt_olimex_stm32p103.elf elf32-littlearm) -.debug_frame 0x00000000 0x3ec4 - .debug_frame 0x00000000 0xb8 THUMB Debug/../../obj/hooks.o - .debug_frame 0x000000b8 0x30 THUMB Debug/../../obj/main.o - .debug_frame 0x000000e8 0x170 THUMB Debug/../../obj/core_cm3.o - .debug_frame 0x00000258 0x38 THUMB Debug/../../obj/system_stm32f10x.o - .debug_frame 0x00000290 0x1bc THUMB Debug/../../obj/mmc.o - .debug_frame 0x0000044c 0x180 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_frame 0x000005cc 0x230 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_frame 0x000007fc 0x1bc THUMB Debug/../../obj/stm32f10x_spi.o - .debug_frame 0x000009b8 0x224 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_frame 0x00000bdc 0x68 THUMB Debug/../../obj/can.o - .debug_frame 0x00000c44 0x84 THUMB Debug/../../obj/cpu.o - .debug_frame 0x00000cc8 0x1a8 THUMB Debug/../../obj/flash.o - .debug_frame 0x00000e70 0xb8 THUMB Debug/../../obj/nvm.o - .debug_frame 0x00000f28 0x68 THUMB Debug/../../obj/timer.o - .debug_frame 0x00000f90 0x90 THUMB Debug/../../obj/uart.o - .debug_frame 0x00001020 0x30 THUMB Debug/../../obj/cpu_comp.o - .debug_frame 0x00001050 0x2c THUMB Debug/../../obj/vectors.o - .debug_frame 0x0000107c 0x2c THUMB Debug/../../obj/assert.o - .debug_frame 0x000010a8 0x48 THUMB Debug/../../obj/backdoor.o - .debug_frame 0x000010f0 0x48 THUMB Debug/../../obj/boot.o - .debug_frame 0x00001138 0xb4 THUMB Debug/../../obj/com.o - .debug_frame 0x000011ec 0x30 THUMB Debug/../../obj/cop.o - .debug_frame 0x0000121c 0x80 THUMB Debug/../../obj/xcp.o - .debug_frame 0x0000129c 0x150 THUMB Debug/../../obj/file.o - .debug_frame 0x000013ec 0x670 THUMB Debug/../../obj/ff.o - .debug_frame 0x00001a5c 0x30 THUMB Debug/../../obj/unicode.o - .debug_frame 0x00001a8c 0x128c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_frame 0x00002d18 0x120 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .debug_frame 0x00002e38 0x260 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .debug_frame 0x00003098 0x78c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_frame 0x00003824 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .debug_frame 0x000038c4 0x600 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) +.debug_frame 0x00000000 0x5920 + .debug_frame 0x00000000 0xc0 THUMB Debug/../../obj/hooks.o + .debug_frame 0x000000c0 0x30 THUMB Debug/../../obj/main.o + .debug_frame 0x000000f0 0x214 THUMB Debug/../../obj/mmc.o + .debug_frame 0x00000304 0x184 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_frame 0x00000488 0x240 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_frame 0x000006c8 0x1d4 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_frame 0x0000089c 0x244 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_frame 0x00000ae0 0x64 THUMB Debug/../../obj/can.o + .debug_frame 0x00000b44 0x74 THUMB Debug/../../obj/cpu.o + .debug_frame 0x00000bb8 0x180 THUMB Debug/../../obj/flash.o + .debug_frame 0x00000d38 0xd4 THUMB Debug/../../obj/nvm.o + .debug_frame 0x00000e0c 0x5c THUMB Debug/../../obj/timer.o + .debug_frame 0x00000e68 0x88 THUMB Debug/../../obj/uart.o + .debug_frame 0x00000ef0 0x30 THUMB Debug/../../obj/cpu_comp.o + .debug_frame 0x00000f20 0x2c THUMB Debug/../../obj/vectors.o + .debug_frame 0x00000f4c 0x2c THUMB Debug/../../obj/assert.o + .debug_frame 0x00000f78 0x48 THUMB Debug/../../obj/backdoor.o + .debug_frame 0x00000fc0 0x48 THUMB Debug/../../obj/boot.o + .debug_frame 0x00001008 0xb4 THUMB Debug/../../obj/com.o + .debug_frame 0x000010bc 0x30 THUMB Debug/../../obj/cop.o + .debug_frame 0x000010ec 0x70 THUMB Debug/../../obj/xcp.o + .debug_frame 0x0000115c 0x13c THUMB Debug/../../obj/file.o + .debug_frame 0x00001298 0x828 THUMB Debug/../../obj/ff.o + .debug_frame 0x00001ac0 0x44 THUMB Debug/../../obj/unicode.o + .debug_frame 0x00001b04 0x3d6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_frame 0x00005870 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) -.debug_info 0x00000000 0x9caa - .debug_info 0x00000000 0x65e THUMB Debug/../../obj/hooks.o - .debug_info 0x0000065e 0x395 THUMB Debug/../../obj/main.o - .debug_info 0x000009f3 0x53d THUMB Debug/../../obj/core_cm3.o - .debug_info 0x00000f30 0x4c6 THUMB Debug/../../obj/system_stm32f10x.o - .debug_info 0x000013f6 0x95e THUMB Debug/../../obj/mmc.o - .debug_info 0x00001d54 0x716 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_info 0x0000246a 0x8ef THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_info 0x00002d59 0x959 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_info 0x000036b2 0xa51 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_info 0x00004103 0x4e8 THUMB Debug/../../obj/can.o - .debug_info 0x000045eb 0x15a THUMB Debug/../../obj/cpu.o - .debug_info 0x00004745 0x697 THUMB Debug/../../obj/flash.o - .debug_info 0x00004ddc 0x182 THUMB Debug/../../obj/nvm.o - .debug_info 0x00004f5e 0x11e THUMB Debug/../../obj/timer.o - .debug_info 0x0000507c 0x2b4 THUMB Debug/../../obj/uart.o - .debug_info 0x00005330 0x65 THUMB Debug/../../obj/usb.o - .debug_info 0x00005395 0x91 THUMB Debug/../../obj/cpu_comp.o - .debug_info 0x00005426 0x110 THUMB Debug/../../obj/cstart.o - .debug_info 0x00005536 0xfc THUMB Debug/../../obj/vectors.o - .debug_info 0x00005632 0xbd THUMB Debug/../../obj/assert.o - .debug_info 0x000056ef 0xcb THUMB Debug/../../obj/backdoor.o - .debug_info 0x000057ba 0x93 THUMB Debug/../../obj/boot.o - .debug_info 0x0000584d 0x1e1 THUMB Debug/../../obj/com.o - .debug_info 0x00005a2e 0x91 THUMB Debug/../../obj/cop.o - .debug_info 0x00005abf 0x61d THUMB Debug/../../obj/xcp.o - .debug_info 0x000060dc 0x7b6 THUMB Debug/../../obj/file.o - .debug_info 0x00006892 0x2069 THUMB Debug/../../obj/ff.o - .debug_info 0x000088fb 0x160 THUMB Debug/../../obj/unicode.o - .debug_info 0x00008a5b 0xc63 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_info 0x000096be 0x51f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_info 0x00009bdd 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_info 0x00000000 0xde0a + .debug_info 0x00000000 0x79d THUMB Debug/../../obj/hooks.o + .debug_info 0x0000079d 0x3a2 THUMB Debug/../../obj/main.o + .debug_info 0x00000b3f 0x1251 THUMB Debug/../../obj/mmc.o + .debug_info 0x00001d90 0x859 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_info 0x000025e9 0x8a1 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_info 0x00002e8a 0x993 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_info 0x0000381d 0xaee THUMB Debug/../../obj/stm32f10x_usart.o + .debug_info 0x0000430b 0x519 THUMB Debug/../../obj/can.o + .debug_info 0x00004824 0x1e4 THUMB Debug/../../obj/cpu.o + .debug_info 0x00004a08 0x8db THUMB Debug/../../obj/flash.o + .debug_info 0x000052e3 0x263 THUMB Debug/../../obj/nvm.o + .debug_info 0x00005546 0x13c THUMB Debug/../../obj/timer.o + .debug_info 0x00005682 0x397 THUMB Debug/../../obj/uart.o + .debug_info 0x00005a19 0x95 THUMB Debug/../../obj/cpu_comp.o + .debug_info 0x00005aae 0x110 THUMB Debug/../../obj/cstart.o + .debug_info 0x00005bbe 0x11f THUMB Debug/../../obj/vectors.o + .debug_info 0x00005cdd 0xd7 THUMB Debug/../../obj/assert.o + .debug_info 0x00005db4 0x14d THUMB Debug/../../obj/backdoor.o + .debug_info 0x00005f01 0x18f THUMB Debug/../../obj/boot.o + .debug_info 0x00006090 0x308 THUMB Debug/../../obj/com.o + .debug_info 0x00006398 0x95 THUMB Debug/../../obj/cop.o + .debug_info 0x0000642d 0x85d THUMB Debug/../../obj/xcp.o + .debug_info 0x00006c8a 0x1284 THUMB Debug/../../obj/file.o + .debug_info 0x00007f0e 0x39db THUMB Debug/../../obj/ff.o + .debug_info 0x0000b8e9 0x1ad THUMB Debug/../../obj/unicode.o + .debug_info 0x0000ba96 0x2374 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) -.debug_abbrev 0x00000000 0x213c - .debug_abbrev 0x00000000 0x1ae THUMB Debug/../../obj/hooks.o - .debug_abbrev 0x000001ae 0x11b THUMB Debug/../../obj/main.o - .debug_abbrev 0x000002c9 0xa9 THUMB Debug/../../obj/core_cm3.o - .debug_abbrev 0x00000372 0x1a8 THUMB Debug/../../obj/system_stm32f10x.o - .debug_abbrev 0x0000051a 0x2de THUMB Debug/../../obj/mmc.o - .debug_abbrev 0x000007f8 0x1db THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_abbrev 0x000009d3 0x1d2 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_abbrev 0x00000ba5 0x1b2 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_abbrev 0x00000d57 0x1ba THUMB Debug/../../obj/stm32f10x_usart.o - .debug_abbrev 0x00000f11 0x1a8 THUMB Debug/../../obj/can.o - .debug_abbrev 0x000010b9 0xb1 THUMB Debug/../../obj/cpu.o - .debug_abbrev 0x0000116a 0x1fa THUMB Debug/../../obj/flash.o - .debug_abbrev 0x00001364 0xa5 THUMB Debug/../../obj/nvm.o - .debug_abbrev 0x00001409 0xbb THUMB Debug/../../obj/timer.o - .debug_abbrev 0x000014c4 0x133 THUMB Debug/../../obj/uart.o - .debug_abbrev 0x000015f7 0x2a THUMB Debug/../../obj/usb.o - .debug_abbrev 0x00001621 0x41 THUMB Debug/../../obj/cpu_comp.o - .debug_abbrev 0x00001662 0x14 THUMB Debug/../../obj/cstart.o - .debug_abbrev 0x00001676 0xc0 THUMB Debug/../../obj/vectors.o - .debug_abbrev 0x00001736 0x68 THUMB Debug/../../obj/assert.o - .debug_abbrev 0x0000179e 0x5d THUMB Debug/../../obj/backdoor.o - .debug_abbrev 0x000017fb 0x41 THUMB Debug/../../obj/boot.o - .debug_abbrev 0x0000183c 0x117 THUMB Debug/../../obj/com.o - .debug_abbrev 0x00001953 0x41 THUMB Debug/../../obj/cop.o - .debug_abbrev 0x00001994 0x1c0 THUMB Debug/../../obj/xcp.o - .debug_abbrev 0x00001b54 0x17f THUMB Debug/../../obj/file.o - .debug_abbrev 0x00001cd3 0x2c7 THUMB Debug/../../obj/ff.o - .debug_abbrev 0x00001f9a 0xa5 THUMB Debug/../../obj/unicode.o - .debug_abbrev 0x0000203f 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_abbrev 0x000020df 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_abbrev 0x00002117 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_abbrev 0x00000000 0x2450 + .debug_abbrev 0x00000000 0x223 THUMB Debug/../../obj/hooks.o + .debug_abbrev 0x00000223 0x159 THUMB Debug/../../obj/main.o + .debug_abbrev 0x0000037c 0x2db THUMB Debug/../../obj/mmc.o + .debug_abbrev 0x00000657 0x1f2 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_abbrev 0x00000849 0x1e7 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_abbrev 0x00000a30 0x1cd THUMB Debug/../../obj/stm32f10x_spi.o + .debug_abbrev 0x00000bfd 0x1cb THUMB Debug/../../obj/stm32f10x_usart.o + .debug_abbrev 0x00000dc8 0x209 THUMB Debug/../../obj/can.o + .debug_abbrev 0x00000fd1 0xc8 THUMB Debug/../../obj/cpu.o + .debug_abbrev 0x00001099 0x24b THUMB Debug/../../obj/flash.o + .debug_abbrev 0x000012e4 0xca THUMB Debug/../../obj/nvm.o + .debug_abbrev 0x000013ae 0x104 THUMB Debug/../../obj/timer.o + .debug_abbrev 0x000014b2 0x1b6 THUMB Debug/../../obj/uart.o + .debug_abbrev 0x00001668 0x45 THUMB Debug/../../obj/cpu_comp.o + .debug_abbrev 0x000016ad 0x14 THUMB Debug/../../obj/cstart.o + .debug_abbrev 0x000016c1 0xee THUMB Debug/../../obj/vectors.o + .debug_abbrev 0x000017af 0x8b THUMB Debug/../../obj/assert.o + .debug_abbrev 0x0000183a 0x7f THUMB Debug/../../obj/backdoor.o + .debug_abbrev 0x000018b9 0x63 THUMB Debug/../../obj/boot.o + .debug_abbrev 0x0000191c 0x153 THUMB Debug/../../obj/com.o + .debug_abbrev 0x00001a6f 0x45 THUMB Debug/../../obj/cop.o + .debug_abbrev 0x00001ab4 0x214 THUMB Debug/../../obj/xcp.o + .debug_abbrev 0x00001cc8 0x25b THUMB Debug/../../obj/file.o + .debug_abbrev 0x00001f23 0x302 THUMB Debug/../../obj/ff.o + .debug_abbrev 0x00002225 0xb2 THUMB Debug/../../obj/unicode.o + .debug_abbrev 0x000022d7 0x179 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) -.debug_loc 0x00000000 0x9604 - .debug_loc 0x00000000 0xdd THUMB Debug/../../obj/hooks.o - .debug_loc 0x000000dd 0x82 THUMB Debug/../../obj/main.o - .debug_loc 0x0000015f 0x2ae THUMB Debug/../../obj/core_cm3.o - .debug_loc 0x0000040d 0x165 THUMB Debug/../../obj/system_stm32f10x.o - .debug_loc 0x00000572 0xa81 THUMB Debug/../../obj/mmc.o - .debug_loc 0x00000ff3 0x444 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_loc 0x00001437 0x5f0 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_loc 0x00001a27 0x4bb THUMB Debug/../../obj/stm32f10x_spi.o - .debug_loc 0x00001ee2 0x66b THUMB Debug/../../obj/stm32f10x_usart.o - .debug_loc 0x0000254d 0x14b THUMB Debug/../../obj/can.o - .debug_loc 0x00002698 0x139 THUMB Debug/../../obj/cpu.o - .debug_loc 0x000027d1 0x6f6 THUMB Debug/../../obj/flash.o - .debug_loc 0x00002ec7 0x11f THUMB Debug/../../obj/nvm.o - .debug_loc 0x00002fe6 0x40 THUMB Debug/../../obj/timer.o - .debug_loc 0x00003026 0x13e THUMB Debug/../../obj/uart.o - .debug_loc 0x00003164 0x20 THUMB Debug/../../obj/vectors.o - .debug_loc 0x00003184 0x46 THUMB Debug/../../obj/assert.o - .debug_loc 0x000031ca 0x40 THUMB Debug/../../obj/backdoor.o - .debug_loc 0x0000320a 0x40 THUMB Debug/../../obj/boot.o - .debug_loc 0x0000324a 0xfa THUMB Debug/../../obj/com.o - .debug_loc 0x00003344 0x247 THUMB Debug/../../obj/xcp.o - .debug_loc 0x0000358b 0x751 THUMB Debug/../../obj/file.o - .debug_loc 0x00003cdc 0x3ffe THUMB Debug/../../obj/ff.o - .debug_loc 0x00007cda 0xdd THUMB Debug/../../obj/unicode.o - .debug_loc 0x00007db7 0x1059 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_loc 0x00008e10 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) +.debug_loc 0x00000000 0xa4ec + .debug_loc 0x00000000 0x5f THUMB Debug/../../obj/hooks.o + .debug_loc 0x0000005f 0x10f1 THUMB Debug/../../obj/mmc.o + .debug_loc 0x00001150 0x508 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_loc 0x00001658 0x708 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_loc 0x00001d60 0x90c THUMB Debug/../../obj/stm32f10x_spi.o + .debug_loc 0x0000266c 0x7e0 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_loc 0x00002e4c 0x1af THUMB Debug/../../obj/can.o + .debug_loc 0x00002ffb 0x123 THUMB Debug/../../obj/cpu.o + .debug_loc 0x0000311e 0x740 THUMB Debug/../../obj/flash.o + .debug_loc 0x0000385e 0xa5 THUMB Debug/../../obj/nvm.o + .debug_loc 0x00003903 0x17a THUMB Debug/../../obj/uart.o + .debug_loc 0x00003a7d 0x42 THUMB Debug/../../obj/assert.o + .debug_loc 0x00003abf 0x8b THUMB Debug/../../obj/com.o + .debug_loc 0x00003b4a 0x3b2 THUMB Debug/../../obj/xcp.o + .debug_loc 0x00003efc 0x8b2 THUMB Debug/../../obj/file.o + .debug_loc 0x000047ae 0x5ac5 THUMB Debug/../../obj/ff.o + .debug_loc 0x0000a273 0x279 THUMB Debug/../../obj/unicode.o -.debug_aranges 0x00000000 0x1268 +.debug_pubnames + 0x00000000 0x20cf + .debug_pubnames + 0x00000000 0x27c THUMB Debug/../../obj/hooks.o + .debug_pubnames + 0x0000027c 0x36 THUMB Debug/../../obj/main.o + .debug_pubnames + 0x000002b2 0x286 THUMB Debug/../../obj/mmc.o + .debug_pubnames + 0x00000538 0x2ae THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_pubnames + 0x000007e6 0x32a THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_pubnames + 0x00000b10 0x21f THUMB Debug/../../obj/stm32f10x_spi.o + .debug_pubnames + 0x00000d2f 0x2bd THUMB Debug/../../obj/stm32f10x_usart.o + .debug_pubnames + 0x00000fec 0x6d THUMB Debug/../../obj/can.o + .debug_pubnames + 0x00001059 0x45 THUMB Debug/../../obj/cpu.o + .debug_pubnames + 0x0000109e 0x1a4 THUMB Debug/../../obj/flash.o + .debug_pubnames + 0x00001242 0x86 THUMB Debug/../../obj/nvm.o + .debug_pubnames + 0x000012c8 0x64 THUMB Debug/../../obj/timer.o + .debug_pubnames + 0x0000132c 0x75 THUMB Debug/../../obj/uart.o + .debug_pubnames + 0x000013a1 0x35 THUMB Debug/../../obj/cpu_comp.o + .debug_pubnames + 0x000013d6 0x2d THUMB Debug/../../obj/vectors.o + .debug_pubnames + 0x00001403 0x24 THUMB Debug/../../obj/assert.o + .debug_pubnames + 0x00001427 0x5b THUMB Debug/../../obj/backdoor.o + .debug_pubnames + 0x00001482 0x2c THUMB Debug/../../obj/boot.o + .debug_pubnames + 0x000014ae 0x108 THUMB Debug/../../obj/com.o + .debug_pubnames + 0x000015b6 0x2d THUMB Debug/../../obj/cop.o + .debug_pubnames + 0x000015e3 0x205 THUMB Debug/../../obj/xcp.o + .debug_pubnames + 0x000017e8 0x3b3 THUMB Debug/../../obj/file.o + .debug_pubnames + 0x00001b9b 0x4fb THUMB Debug/../../obj/ff.o + .debug_pubnames + 0x00002096 0x39 THUMB Debug/../../obj/unicode.o + +.debug_pubtypes + 0x00000000 0x1bf6 + .debug_pubtypes + 0x00000000 0x1a1 THUMB Debug/../../obj/hooks.o + .debug_pubtypes + 0x000001a1 0x150 THUMB Debug/../../obj/main.o + .debug_pubtypes + 0x000002f1 0x1b0 THUMB Debug/../../obj/mmc.o + .debug_pubtypes + 0x000004a1 0x169 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_pubtypes + 0x0000060a 0x144 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_pubtypes + 0x0000074e 0x15c THUMB Debug/../../obj/stm32f10x_spi.o + .debug_pubtypes + 0x000008aa 0x16f THUMB Debug/../../obj/stm32f10x_usart.o + .debug_pubtypes + 0x00000a19 0x16a THUMB Debug/../../obj/can.o + .debug_pubtypes + 0x00000b83 0xff THUMB Debug/../../obj/cpu.o + .debug_pubtypes + 0x00000c82 0x140 THUMB Debug/../../obj/flash.o + .debug_pubtypes + 0x00000dc2 0xfd THUMB Debug/../../obj/nvm.o + .debug_pubtypes + 0x00000ebf 0xe6 THUMB Debug/../../obj/timer.o + .debug_pubtypes + 0x00000fa5 0x10d THUMB Debug/../../obj/uart.o + .debug_pubtypes + 0x000010b2 0xc6 THUMB Debug/../../obj/cpu_comp.o + .debug_pubtypes + 0x00001178 0xe2 THUMB Debug/../../obj/vectors.o + .debug_pubtypes + 0x0000125a 0xe2 THUMB Debug/../../obj/assert.o + .debug_pubtypes + 0x0000133c 0xe2 THUMB Debug/../../obj/backdoor.o + .debug_pubtypes + 0x0000141e 0xc6 THUMB Debug/../../obj/boot.o + .debug_pubtypes + 0x000014e4 0x104 THUMB Debug/../../obj/com.o + .debug_pubtypes + 0x000015e8 0xc6 THUMB Debug/../../obj/cop.o + .debug_pubtypes + 0x000016ae 0x127 THUMB Debug/../../obj/xcp.o + .debug_pubtypes + 0x000017d5 0x1e1 THUMB Debug/../../obj/file.o + .debug_pubtypes + 0x000019b6 0x177 THUMB Debug/../../obj/ff.o + .debug_pubtypes + 0x00001b2d 0xc9 THUMB Debug/../../obj/unicode.o + +.debug_aranges 0x00000000 0x1958 .debug_aranges 0x00000000 0x48 THUMB Debug/../../obj/hooks.o .debug_aranges 0x00000048 0x20 THUMB Debug/../../obj/main.o .debug_aranges - 0x00000068 0xc8 THUMB Debug/../../obj/core_cm3.o + 0x00000068 0x78 THUMB Debug/../../obj/mmc.o .debug_aranges - 0x00000130 0x28 THUMB Debug/../../obj/system_stm32f10x.o + 0x000000e0 0xa8 THUMB Debug/../../obj/stm32f10x_gpio.o .debug_aranges - 0x00000158 0x88 THUMB Debug/../../obj/mmc.o + 0x00000188 0x118 THUMB Debug/../../obj/stm32f10x_rcc.o .debug_aranges - 0x000001e0 0xa8 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x000002a0 0xd0 THUMB Debug/../../obj/stm32f10x_spi.o .debug_aranges - 0x00000288 0x118 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000370 0x100 THUMB Debug/../../obj/stm32f10x_usart.o .debug_aranges - 0x000003a0 0xd0 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000470 0x30 THUMB Debug/../../obj/can.o .debug_aranges - 0x00000470 0x100 THUMB Debug/../../obj/stm32f10x_usart.o + 0x000004a0 0x30 THUMB Debug/../../obj/cpu.o .debug_aranges - 0x00000570 0x30 THUMB Debug/../../obj/can.o + 0x000004d0 0x80 THUMB Debug/../../obj/flash.o .debug_aranges - 0x000005a0 0x38 THUMB Debug/../../obj/cpu.o + 0x00000550 0x50 THUMB Debug/../../obj/nvm.o .debug_aranges - 0x000005d8 0x90 THUMB Debug/../../obj/flash.o + 0x000005a0 0x38 THUMB Debug/../../obj/timer.o .debug_aranges - 0x00000668 0x48 THUMB Debug/../../obj/nvm.o + 0x000005d8 0x38 THUMB Debug/../../obj/uart.o .debug_aranges - 0x000006b0 0x38 THUMB Debug/../../obj/timer.o + 0x00000610 0x28 THUMB Debug/../../obj/cpu_comp.o .debug_aranges - 0x000006e8 0x40 THUMB Debug/../../obj/uart.o + 0x00000638 0x20 THUMB Debug/../../obj/cstart.o .debug_aranges - 0x00000728 0x28 THUMB Debug/../../obj/cpu_comp.o + 0x00000658 0x20 THUMB Debug/../../obj/vectors.o .debug_aranges - 0x00000750 0x20 THUMB Debug/../../obj/cstart.o + 0x00000678 0x20 THUMB Debug/../../obj/assert.o .debug_aranges - 0x00000770 0x20 THUMB Debug/../../obj/vectors.o + 0x00000698 0x28 THUMB Debug/../../obj/backdoor.o .debug_aranges - 0x00000790 0x20 THUMB Debug/../../obj/assert.o + 0x000006c0 0x28 THUMB Debug/../../obj/boot.o .debug_aranges - 0x000007b0 0x28 THUMB Debug/../../obj/backdoor.o + 0x000006e8 0x50 THUMB Debug/../../obj/com.o .debug_aranges - 0x000007d8 0x28 THUMB Debug/../../obj/boot.o + 0x00000738 0x28 THUMB Debug/../../obj/cop.o .debug_aranges - 0x00000800 0x50 THUMB Debug/../../obj/com.o + 0x00000760 0x40 THUMB Debug/../../obj/xcp.o .debug_aranges - 0x00000850 0x28 THUMB Debug/../../obj/cop.o + 0x000007a0 0x68 THUMB Debug/../../obj/file.o .debug_aranges - 0x00000878 0x48 THUMB Debug/../../obj/xcp.o + 0x00000808 0x188 THUMB Debug/../../obj/ff.o .debug_aranges - 0x000008c0 0x70 THUMB Debug/../../obj/file.o + 0x00000990 0x28 THUMB Debug/../../obj/unicode.o .debug_aranges - 0x00000930 0x190 THUMB Debug/../../obj/ff.o - .debug_aranges - 0x00000ac0 0x28 THUMB Debug/../../obj/unicode.o - .debug_aranges - 0x00000ae8 0x508 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_aranges - 0x00000ff0 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_aranges - 0x00001208 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x000009b8 0xfa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) -.debug_ranges 0x00000000 0x1248 +.debug_ranges 0x00000000 0x18d0 .debug_ranges 0x00000000 0x38 THUMB Debug/../../obj/hooks.o .debug_ranges 0x00000038 0x10 THUMB Debug/../../obj/main.o - .debug_ranges 0x00000048 0xb8 THUMB Debug/../../obj/core_cm3.o - .debug_ranges 0x00000100 0x18 THUMB Debug/../../obj/system_stm32f10x.o - .debug_ranges 0x00000118 0xd8 THUMB Debug/../../obj/mmc.o - .debug_ranges 0x000001f0 0x98 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_ranges 0x00000288 0x108 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_ranges 0x00000390 0xc0 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_ranges 0x00000450 0xf0 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_ranges 0x00000540 0x20 THUMB Debug/../../obj/can.o - .debug_ranges 0x00000560 0x28 THUMB Debug/../../obj/cpu.o - .debug_ranges 0x00000588 0xb0 THUMB Debug/../../obj/flash.o - .debug_ranges 0x00000638 0x38 THUMB Debug/../../obj/nvm.o - .debug_ranges 0x00000670 0x28 THUMB Debug/../../obj/timer.o - .debug_ranges 0x00000698 0x30 THUMB Debug/../../obj/uart.o - .debug_ranges 0x000006c8 0x18 THUMB Debug/../../obj/cpu_comp.o - .debug_ranges 0x000006e0 0x10 THUMB Debug/../../obj/vectors.o - .debug_ranges 0x000006f0 0x10 THUMB Debug/../../obj/assert.o - .debug_ranges 0x00000700 0x18 THUMB Debug/../../obj/backdoor.o - .debug_ranges 0x00000718 0x18 THUMB Debug/../../obj/boot.o - .debug_ranges 0x00000730 0x40 THUMB Debug/../../obj/com.o - .debug_ranges 0x00000770 0x18 THUMB Debug/../../obj/cop.o - .debug_ranges 0x00000788 0x38 THUMB Debug/../../obj/xcp.o - .debug_ranges 0x000007c0 0x60 THUMB Debug/../../obj/file.o - .debug_ranges 0x00000820 0x2c0 THUMB Debug/../../obj/ff.o - .debug_ranges 0x00000ae0 0x18 THUMB Debug/../../obj/unicode.o - .debug_ranges 0x00000af8 0x4f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_ranges 0x00000ff0 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_ranges 0x000011f8 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_ranges 0x00000048 0x68 THUMB Debug/../../obj/mmc.o + .debug_ranges 0x000000b0 0x98 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_ranges 0x00000148 0x108 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_ranges 0x00000250 0xc0 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_ranges 0x00000310 0xf0 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_ranges 0x00000400 0x20 THUMB Debug/../../obj/can.o + .debug_ranges 0x00000420 0x20 THUMB Debug/../../obj/cpu.o + .debug_ranges 0x00000440 0x88 THUMB Debug/../../obj/flash.o + .debug_ranges 0x000004c8 0x40 THUMB Debug/../../obj/nvm.o + .debug_ranges 0x00000508 0x28 THUMB Debug/../../obj/timer.o + .debug_ranges 0x00000530 0x40 THUMB Debug/../../obj/uart.o + .debug_ranges 0x00000570 0x18 THUMB Debug/../../obj/cpu_comp.o + .debug_ranges 0x00000588 0x10 THUMB Debug/../../obj/vectors.o + .debug_ranges 0x00000598 0x10 THUMB Debug/../../obj/assert.o + .debug_ranges 0x000005a8 0x18 THUMB Debug/../../obj/backdoor.o + .debug_ranges 0x000005c0 0x18 THUMB Debug/../../obj/boot.o + .debug_ranges 0x000005d8 0x40 THUMB Debug/../../obj/com.o + .debug_ranges 0x00000618 0x18 THUMB Debug/../../obj/cop.o + .debug_ranges 0x00000630 0x30 THUMB Debug/../../obj/xcp.o + .debug_ranges 0x00000660 0x58 THUMB Debug/../../obj/file.o + .debug_ranges 0x000006b8 0x270 THUMB Debug/../../obj/ff.o + .debug_ranges 0x00000928 0x18 THUMB Debug/../../obj/unicode.o + .debug_ranges 0x00000940 0xf90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) -.debug_line 0x00000000 0x5083 - .debug_line 0x00000000 0x29a THUMB Debug/../../obj/hooks.o - .debug_line 0x0000029a 0x1fe THUMB Debug/../../obj/main.o - .debug_line 0x00000498 0x291 THUMB Debug/../../obj/core_cm3.o - .debug_line 0x00000729 0x1c6 THUMB Debug/../../obj/system_stm32f10x.o - .debug_line 0x000008ef 0x53f THUMB Debug/../../obj/mmc.o - .debug_line 0x00000e2e 0x3aa THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_line 0x000011d8 0x49c THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_line 0x00001674 0x40b THUMB Debug/../../obj/stm32f10x_spi.o - .debug_line 0x00001a7f 0x486 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_line 0x00001f05 0x16e THUMB Debug/../../obj/can.o - .debug_line 0x00002073 0x12d THUMB Debug/../../obj/cpu.o - .debug_line 0x000021a0 0x2e5 THUMB Debug/../../obj/flash.o - .debug_line 0x00002485 0x145 THUMB Debug/../../obj/nvm.o - .debug_line 0x000025ca 0x11f THUMB Debug/../../obj/timer.o - .debug_line 0x000026e9 0x173 THUMB Debug/../../obj/uart.o - .debug_line 0x0000285c 0x1d THUMB Debug/../../obj/usb.o - .debug_line 0x00002879 0xd3 THUMB Debug/../../obj/cpu_comp.o - .debug_line 0x0000294c 0x112 THUMB Debug/../../obj/cstart.o - .debug_line 0x00002a5e 0xf0 THUMB Debug/../../obj/vectors.o - .debug_line 0x00002b4e 0xd8 THUMB Debug/../../obj/assert.o - .debug_line 0x00002c26 0xf5 THUMB Debug/../../obj/backdoor.o - .debug_line 0x00002d1b 0xc0 THUMB Debug/../../obj/boot.o - .debug_line 0x00002ddb 0x162 THUMB Debug/../../obj/com.o - .debug_line 0x00002f3d 0xb2 THUMB Debug/../../obj/cop.o - .debug_line 0x00002fef 0x1db THUMB Debug/../../obj/xcp.o - .debug_line 0x000031ca 0x343 THUMB Debug/../../obj/file.o - .debug_line 0x0000350d 0xe5c THUMB Debug/../../obj/ff.o - .debug_line 0x00004369 0x1a3 THUMB Debug/../../obj/unicode.o - .debug_line 0x0000450c 0x5b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .debug_line 0x00004abf 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_line 0x0000500f 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_line 0x00000000 0x50bb + .debug_line 0x00000000 0x2e6 THUMB Debug/../../obj/hooks.o + .debug_line 0x000002e6 0x232 THUMB Debug/../../obj/main.o + .debug_line 0x00000518 0x556 THUMB Debug/../../obj/mmc.o + .debug_line 0x00000a6e 0x3b0 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_line 0x00000e1e 0x498 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_line 0x000012b6 0x3fc THUMB Debug/../../obj/stm32f10x_spi.o + .debug_line 0x000016b2 0x478 THUMB Debug/../../obj/stm32f10x_usart.o + .debug_line 0x00001b2a 0x17e THUMB Debug/../../obj/can.o + .debug_line 0x00001ca8 0x157 THUMB Debug/../../obj/cpu.o + .debug_line 0x00001dff 0x2e0 THUMB Debug/../../obj/flash.o + .debug_line 0x000020df 0x197 THUMB Debug/../../obj/nvm.o + .debug_line 0x00002276 0x120 THUMB Debug/../../obj/timer.o + .debug_line 0x00002396 0x1b6 THUMB Debug/../../obj/uart.o + .debug_line 0x0000254c 0xd1 THUMB Debug/../../obj/cpu_comp.o + .debug_line 0x0000261d 0x137 THUMB Debug/../../obj/cstart.o + .debug_line 0x00002754 0x110 THUMB Debug/../../obj/vectors.o + .debug_line 0x00002864 0x108 THUMB Debug/../../obj/assert.o + .debug_line 0x0000296c 0x142 THUMB Debug/../../obj/backdoor.o + .debug_line 0x00002aae 0x12c THUMB Debug/../../obj/boot.o + .debug_line 0x00002bda 0x1a1 THUMB Debug/../../obj/com.o + .debug_line 0x00002d7b 0xb0 THUMB Debug/../../obj/cop.o + .debug_line 0x00002e2b 0x21c THUMB Debug/../../obj/xcp.o + .debug_line 0x00003047 0x3fb THUMB Debug/../../obj/file.o + .debug_line 0x00003442 0x103c THUMB Debug/../../obj/ff.o + .debug_line 0x0000447e 0x117 THUMB Debug/../../obj/unicode.o + .debug_line 0x00004595 0xb26 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) -.debug_str 0x00000000 0x3c18 - .debug_str 0x00000000 0x501 THUMB Debug/../../obj/hooks.o - 0x567 (size before relaxing) - .debug_str 0x00000501 0x12c THUMB Debug/../../obj/main.o - 0x29c (size before relaxing) - .debug_str 0x0000062d 0x1ae THUMB Debug/../../obj/core_cm3.o - 0x2a4 (size before relaxing) - .debug_str 0x000007db 0x145 THUMB Debug/../../obj/system_stm32f10x.o - 0x31a (size before relaxing) - .debug_str 0x00000920 0x3ad THUMB Debug/../../obj/mmc.o - 0x588 (size before relaxing) - .debug_str 0x00000ccd 0x2b3 THUMB Debug/../../obj/stm32f10x_gpio.o - 0x54d (size before relaxing) - .debug_str 0x00000f80 0x430 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x64e (size before relaxing) - .debug_str 0x000013b0 0x31a THUMB Debug/../../obj/stm32f10x_spi.o - 0x631 (size before relaxing) - .debug_str 0x000016ca 0x463 THUMB Debug/../../obj/stm32f10x_usart.o - 0x6c4 (size before relaxing) - .debug_str 0x00001b2d 0x1a9 THUMB Debug/../../obj/can.o - 0x31a (size before relaxing) - .debug_str 0x00001cd6 0xd6 THUMB Debug/../../obj/cpu.o - 0x1fc (size before relaxing) - .debug_str 0x00001dac 0x291 THUMB Debug/../../obj/flash.o - 0x414 (size before relaxing) - .debug_str 0x0000203d 0xcf THUMB Debug/../../obj/nvm.o - 0x206 (size before relaxing) - .debug_str 0x0000210c 0xd8 THUMB Debug/../../obj/timer.o - 0x1e9 (size before relaxing) - .debug_str 0x000021e4 0x12a THUMB Debug/../../obj/uart.o - 0x2b0 (size before relaxing) - .debug_str 0x0000230e 0x81 THUMB Debug/../../obj/usb.o - 0x187 (size before relaxing) - .debug_str 0x0000238f 0xac THUMB Debug/../../obj/cpu_comp.o - 0x1b2 (size before relaxing) - .debug_str 0x0000243b 0xbf THUMB Debug/../../obj/vectors.o - 0x1d0 (size before relaxing) - .debug_str 0x000024fa 0x83 THUMB Debug/../../obj/assert.o - 0x1a7 (size before relaxing) - .debug_str 0x0000257d 0xb0 THUMB Debug/../../obj/backdoor.o - 0x1ca (size before relaxing) - .debug_str 0x0000262d 0x85 THUMB Debug/../../obj/boot.o - 0x18b (size before relaxing) - .debug_str 0x000026b2 0x144 THUMB Debug/../../obj/com.o - 0x284 (size before relaxing) - .debug_str 0x000027f6 0x85 THUMB Debug/../../obj/cop.o - 0x18b (size before relaxing) - .debug_str 0x0000287b 0x25d THUMB Debug/../../obj/xcp.o - 0x3ad (size before relaxing) - .debug_str 0x00002ad8 0x343 THUMB Debug/../../obj/file.o - 0x6ab (size before relaxing) - .debug_str 0x00002e1b 0x343 THUMB Debug/../../obj/ff.o - 0x6a7 (size before relaxing) - .debug_str 0x0000315e 0xbe THUMB Debug/../../obj/unicode.o - 0x16a (size before relaxing) - .debug_str 0x0000321c 0x577 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - 0x655 (size before relaxing) - .debug_str 0x00003793 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x3fc (size before relaxing) - .debug_str 0x00003b46 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x11b (size before relaxing) +.debug_str 0x00000000 0x4e7e + .debug_str 0x00000000 0x633 THUMB Debug/../../obj/hooks.o + 0x6a6 (size before relaxing) + .debug_str 0x00000633 0x14c THUMB Debug/../../obj/main.o + 0x3a0 (size before relaxing) + .debug_str 0x0000077f 0x451 THUMB Debug/../../obj/mmc.o + 0x714 (size before relaxing) + .debug_str 0x00000bd0 0x2a4 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x63a (size before relaxing) + .debug_str 0x00000e74 0x3fd THUMB Debug/../../obj/stm32f10x_rcc.o + 0x724 (size before relaxing) + .debug_str 0x00001271 0x2bd THUMB Debug/../../obj/stm32f10x_spi.o + 0x747 (size before relaxing) + .debug_str 0x0000152e 0x440 THUMB Debug/../../obj/stm32f10x_usart.o + 0x7da (size before relaxing) + .debug_str 0x0000196e 0x1b4 THUMB Debug/../../obj/can.o + 0x426 (size before relaxing) + .debug_str 0x00001b22 0x127 THUMB Debug/../../obj/cpu.o + 0x34b (size before relaxing) + .debug_str 0x00001c49 0x29d THUMB Debug/../../obj/flash.o + 0x529 (size before relaxing) + .debug_str 0x00001ee6 0xad THUMB Debug/../../obj/nvm.o + 0x37c (size before relaxing) + .debug_str 0x00001f93 0xc4 THUMB Debug/../../obj/timer.o + 0x2dc (size before relaxing) + .debug_str 0x00002057 0x12a THUMB Debug/../../obj/uart.o + 0x3d0 (size before relaxing) + .debug_str 0x00002181 0x91 THUMB Debug/../../obj/cpu_comp.o + 0x2a5 (size before relaxing) + .debug_str 0x00002212 0xbf THUMB Debug/../../obj/vectors.o + 0x2d1 (size before relaxing) + .debug_str 0x000022d1 0x75 THUMB Debug/../../obj/assert.o + 0x2a5 (size before relaxing) + .debug_str 0x00002346 0xea THUMB Debug/../../obj/backdoor.o + 0x314 (size before relaxing) + .debug_str 0x00002430 0x9d THUMB Debug/../../obj/boot.o + 0x2f4 (size before relaxing) + .debug_str 0x000024cd 0x15b THUMB Debug/../../obj/com.o + 0x40e (size before relaxing) + .debug_str 0x00002628 0x72 THUMB Debug/../../obj/cop.o + 0x27e (size before relaxing) + .debug_str 0x0000269a 0x21f THUMB Debug/../../obj/xcp.o + 0x53a (size before relaxing) + .debug_str 0x000028b9 0x325 THUMB Debug/../../obj/file.o + 0x8e6 (size before relaxing) + .debug_str 0x00002bde 0x364 THUMB Debug/../../obj/ff.o + 0x86d (size before relaxing) + .debug_str 0x00002f42 0x9d THUMB Debug/../../obj/unicode.o + 0x253 (size before relaxing) + .debug_str 0x00002fdf 0x1e9f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + 0x203c (size before relaxing) -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e THUMB Debug/../../obj/hooks.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f THUMB Debug/../../obj/main.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/core_cm3.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/system_stm32f10x.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/mmc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_gpio.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_rcc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_spi.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_usart.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/can.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/cpu.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/flash.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/nvm.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/timer.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uart.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/cpu_comp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/vectors.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/assert.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/backdoor.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/boot.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/com.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/cop.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/xcp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/file.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/ff.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/unicode.o - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.comment 0x00000000 0x4c + .comment 0x00000000 0x4c THUMB Debug/../../obj/hooks.o + 0x4d (size before relaxing) + .comment 0x0000004c 0x4d THUMB Debug/../../obj/main.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/mmc.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_gpio.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_rcc.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_spi.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_usart.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/can.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/cpu.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/flash.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/nvm.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/timer.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/uart.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/cpu_comp.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/vectors.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/assert.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/backdoor.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/boot.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/com.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/cop.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/xcp.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/file.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/ff.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/unicode.o + .comment 0x0000004c 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .ARM.attributes - 0x00000000 0x10 + 0x00000000 0x31 .ARM.attributes - 0x00000000 0x10 THUMB Debug/../../obj/hooks.o + 0x00000000 0x33 THUMB Debug/../../obj/hooks.o .ARM.attributes - 0x00000010 0x10 THUMB Debug/../../obj/main.o + 0x00000033 0x33 THUMB Debug/../../obj/main.o .ARM.attributes - 0x00000020 0x10 THUMB Debug/../../obj/core_cm3.o + 0x00000066 0x33 THUMB Debug/../../obj/mmc.o .ARM.attributes - 0x00000030 0x10 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000099 0x33 THUMB Debug/../../obj/stm32f10x_gpio.o .ARM.attributes - 0x00000040 0x10 THUMB Debug/../../obj/mmc.o + 0x000000cc 0x33 THUMB Debug/../../obj/stm32f10x_rcc.o .ARM.attributes - 0x00000050 0x10 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x000000ff 0x33 THUMB Debug/../../obj/stm32f10x_spi.o .ARM.attributes - 0x00000060 0x10 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000132 0x33 THUMB Debug/../../obj/stm32f10x_usart.o .ARM.attributes - 0x00000070 0x10 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000165 0x33 THUMB Debug/../../obj/can.o .ARM.attributes - 0x00000080 0x10 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000198 0x33 THUMB Debug/../../obj/cpu.o .ARM.attributes - 0x00000090 0x10 THUMB Debug/../../obj/can.o + 0x000001cb 0x33 THUMB Debug/../../obj/flash.o .ARM.attributes - 0x000000a0 0x10 THUMB Debug/../../obj/cpu.o + 0x000001fe 0x33 THUMB Debug/../../obj/nvm.o .ARM.attributes - 0x000000b0 0x10 THUMB Debug/../../obj/flash.o + 0x00000231 0x33 THUMB Debug/../../obj/timer.o .ARM.attributes - 0x000000c0 0x10 THUMB Debug/../../obj/nvm.o + 0x00000264 0x33 THUMB Debug/../../obj/uart.o .ARM.attributes - 0x000000d0 0x10 THUMB Debug/../../obj/timer.o + 0x00000297 0x33 THUMB Debug/../../obj/cpu_comp.o .ARM.attributes - 0x000000e0 0x10 THUMB Debug/../../obj/uart.o + 0x000002ca 0x21 THUMB Debug/../../obj/cstart.o .ARM.attributes - 0x000000f0 0x10 THUMB Debug/../../obj/usb.o + 0x000002eb 0x33 THUMB Debug/../../obj/vectors.o .ARM.attributes - 0x00000100 0x10 THUMB Debug/../../obj/cpu_comp.o + 0x0000031e 0x33 THUMB Debug/../../obj/assert.o .ARM.attributes - 0x00000110 0x10 THUMB Debug/../../obj/cstart.o + 0x00000351 0x33 THUMB Debug/../../obj/backdoor.o .ARM.attributes - 0x00000120 0x10 THUMB Debug/../../obj/vectors.o + 0x00000384 0x33 THUMB Debug/../../obj/boot.o .ARM.attributes - 0x00000130 0x10 THUMB Debug/../../obj/assert.o + 0x000003b7 0x33 THUMB Debug/../../obj/com.o .ARM.attributes - 0x00000140 0x10 THUMB Debug/../../obj/backdoor.o + 0x000003ea 0x33 THUMB Debug/../../obj/cop.o .ARM.attributes - 0x00000150 0x10 THUMB Debug/../../obj/boot.o + 0x0000041d 0x33 THUMB Debug/../../obj/xcp.o .ARM.attributes - 0x00000160 0x10 THUMB Debug/../../obj/com.o + 0x00000450 0x33 THUMB Debug/../../obj/file.o .ARM.attributes - 0x00000170 0x10 THUMB Debug/../../obj/cop.o + 0x00000483 0x33 THUMB Debug/../../obj/ff.o .ARM.attributes - 0x00000180 0x10 THUMB Debug/../../obj/xcp.o + 0x000004b6 0x33 THUMB Debug/../../obj/unicode.o .ARM.attributes - 0x00000190 0x10 THUMB Debug/../../obj/file.o + 0x000004e9 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) .ARM.attributes - 0x000001a0 0x10 THUMB Debug/../../obj/ff.o - .ARM.attributes - 0x000001b0 0x10 THUMB Debug/../../obj/unicode.o - .ARM.attributes - 0x000001c0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2.o) - .ARM.attributes - 0x000001d0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc2_asm.o) - .ARM.attributes - 0x000001e0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a(libc_asm.o) - .ARM.attributes - 0x000001f0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .ARM.attributes - 0x00000200 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .ARM.attributes - 0x00000210 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a(libm_asm.o) + 0x00000516 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.srec b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.srec index 72580ee6..21f77b2c 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.srec +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.srec @@ -1,1415 +1,1316 @@ S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF -S31508000000D411002051010008351D0008351D0008CF -S31508000010351D0008351D0008351D0008351D00086A -S31508000020351D0008351D0008351D0008351D00085A -S31508000030351D0008351D0008351D0008351D00084A -S31508000040351D0008351D0008351D0008351D00083A -S31508000050351D0008351D0008351D0008351D00082A -S31508000060351D0008351D0008351D0008351D00081A -S31508000070351D0008351D0008351D0008351D00080A -S31508000080351D0008351D0008351D0008351D0008FA -S31508000090351D0008351D0008351D0008351D0008EA -S315080000A0351D0008351D0008351D0008351D0008DA -S315080000B0351D0008351D0008351D0008351D0008CA -S315080000C0351D0008351D0008351D0008351D0008BA -S315080000D0351D0008351D0008351D0008351D0008AA -S315080000E0351D0008351D0008351D0008351D00089A -S315080000F0351D0008351D0008351D0008351D00088A -S31508000100351D0008351D0008351D0008351D000879 -S31508000110351D0008351D0008351D0008351D000869 -S31508000120351D0008351D0008351D0008351D000859 -S31508000130351D0008351D0008351D0008351D000849 -S31508000140351D0008351D0008351D0008351D000839 -S3150800015028498D4628482949294A00F039F8294866 -S3150800016029492A4A00F034F829482A492A4A00F037 -S315080001702FF82A482A492B4A00F02AF82A482B49F8 -S315080001802B4A00F025F82B482B492C4A00F020F87A -S315080001902B482C49002200F026F82B482B49091A2F -S315080001A0082903DB00220260043001601C481D494F -S315080001B0884205D00268043003B4904703BCF7E7C9 -S315080001C000208646EC4600200021214A9047FEE79B -S315080001D0884207D0521A05D0037801300B700131D6 -S315080001E0013AF9D17047884202D002700130FAE725 -S315080001F070470000D411002028580008000000208D -S31508000200080000205402000854020008904D000817 -S31508000210285800080000002000000020904D000823 -S31508000220904D0008904D0008904D0008904D00082C -S31508000230904D0008904D0008904D00082858000879 -S3150800024008000020540F0020540F0020D40F00206F -S30908000250C5030008CC -S3150800025400B588B04FF0000300930193029303930B -S31508000264049305930693079344F69050C0F600004A -S31508000274694604F027FC48B9009B53B19DF8083039 -S3150800028413F0100F14BF0020012004E04FF0000003 -S3150800029401E04FF0000008B000BD00BF44F69050DE -S315080002A4C0F60000704700BF00B540F20800C2F26D -S315080002B400004FF0000380F8243244F6B051C0F62B -S315080002C400014FF00A0204F01FF838B940F2080397 -S315080002D4C2F200034FF0010283F824225DF804FBFE -S315080002E470B540F20803C2F2000393F82432012BD6 -S315080002F405D140F20800C2F2000004F0FDFA01F04C -S3150800030405FC00F164064FF48844C4F200044FF077 -S31508000314400503E001F0FAFB864205D32046294648 -S3150800032400F038FF0028F5D044F69050C0F60000D7 -S3150800033404F0F0FB70BD00BF00B540F20803C2F23A -S31508000344000393F82432012B05D140F20800C2F2C7 -S31508000354000004F0D1FA5DF804FB00BF70B5064648 -S3150800036440F20803C2F2000393F82432012B11D198 -S3150800037440F20801C2F2000104F074FC002809DA0C -S3150800038440F20800C2F200004FF0000380F824325D -S3150800039404F0B2FA317891B14FF48844C4F20004F7 -S315080003A44FF08005204600F0EFFE2046294600F06F -S315080003B4F1FE0028F9D016F8011F0029F2D170BD04 -S315080003C400B582B04FF00003009301934FF48053B5 -S315080003D4C4F202031A6842F001021A6059684FF01F -S315080003E40002CFF6FF020A405A601A6822F08472A5 -S315080003F422F480321A601A6822F480221A605A6833 -S3150800040422F4FE025A604FF41F029A601A6842F4F4 -S3150800041480321A604FF48053C4F2020340F2DC526D -S31508000424196801F400310191009901F10101009163 -S31508000434019911B900999142F2D14FF48053C4F24B -S3150800044402031B6813F4003F04D14C484FF06E01B5 -S3150800045401F07AFC4FF40053C4F202031A6842F01E -S3150800046410021A601A6822F003021A601A6842F027 -S3150800047402021A604FF48053C4F202035A685A609F -S315080004845A6842F400525A605A6842F480625A60C2 -S315080004945A6822F47C125A605A6842F4E8125A607E -S315080004A41A6842F080721A604FF48053C4F2020349 -S315080004B41A6812F0007FFBD04FF48053C4F202038B -S315080004C45A6822F003025A605A6842F002025A60D5 -S315080004D44FF48053C4F202035A6802F00C02082A45 -S315080004E4FAD14FF48053C4F202039A6942F009021E -S315080004F49A614FF44062C4F20102516821F00F0177 -S315080005045160516841F008015160516821F0F001C9 -S315080005145160516841F0B00151604FF00002C4F2D5 -S315080005240102516821F4C0415160516841F4804187 -S315080005345160DA6942F00072DA61DA6942F400322B -S31508000544DA619A6942F005029A614FF40063C4F2CB -S3150800055401031A6822F470621A601A6842F4306257 -S315080005641A601A6822F470421A601A6842F48042C1 -S315080005741A6001F029FC01F039FCFCE7C04D0008BB -S3150800058430B5C1B24FF46050C4F2000000F0DCFD8F -S315080005944FF46054C4F200044FF00105204629467E -S315080005A400F0EAFD0028F9D04FF46050C4F20000C8 -S315080005B400F0CEFDC0B230BD70B501F0A7FA00F563 -S315080005C4FA764FF0FF052846FFF7DAFF0446FF28B8 -S315080005D403D001F09BFA8642F5D8FF2C14BF0020FD -S315080005E4012070BD10B504464FF0FF00FFF7C8FFA1 -S315080005F4207010BDF0B504460F4601F087FA00F1E5 -S3150800060464064FF0FF052846FFF7BAFFFF2806D110 -S3150800061401F07CFA8642F6D84FF00000F0BDFE28B9 -S3150800062416D125462046FFF7DDFF04F1020405F13D -S315080006340100FFF7D7FF023FF3D14FF0FF00FFF7A2 -S315080006449FFF4FF0FF00FFF79BFF4FF00100F0BD3F -S315080006544FF00000F0BD00BF30B50446CDB2FFF739 -S31508000664ABFF18B32846FFF78BFFFD2D21D004F501 -S3150800067400752078FFF784FF607804F10204FFF719 -S315080006847FFFA542F5D14FF0FF00FFF779FF4FF042 -S31508000694FF00FFF775FF4FF0FF00FFF771FF00F04B -S315080006A41F00052814BF0020012030BD4FF00000AC -S315080006B430BD4FF0010030BD00B54FF44060C4F2C0 -S315080006C401004FF4805100F0E1FC4FF0FF00FFF702 -S315080006D457FF5DF804FB00BF00B54FF44060C4F251 -S315080006E401004FF4805100F0D5FC4FF0FF00FFF7EE -S315080006F447FFFFF761FF28B9FFF7DEFF4FF0000059 -S315080007045DF804FB4FF001005DF804FB30B50D46B7 -S31508000714C4B214F0800F0AD04FF037004FF000012E -S31508000724FFF7F4FF0346012B3AD804F07F04FFF7DA -S31508000734C3FFFFF7D1FF002830D044F04000FFF78D -S315080007441FFF4FEA1560FFF71BFFC5F30740FFF7C6 -S3150800075417FFC5F30720FFF713FFE8B2FFF710FFEB -S3150800076424B3082C1DD04FF00100FFF709FF0C2C09 -S3150800077403D14FF0FF00FFF703FF4FF00A044FF0D1 -S31508000784FF052846FFF7FCFE034613F0800F07D043 -S3150800079404F1FF34E4B2002CF3D130BD4FF0FF006E -S315080007A430BD4FF08700FFF7EBFEE6E74FF0950004 -S315080007B4FFF7E6FEE1E700BF2DE9F0438EB0C0B2CD -S315080007C4002840F09B8140F20003C2F200031B7824 -S315080007D413F0020F05D040F20003C2F200031878A2 -S315080007E48EE14FF008004FF0010100F057FC4FF47A -S315080007F480404FF0010100F063FC4FF48057ADF8D8 -S3150800080414704FF01009CDF81C904FF00308CDF87A -S3150800081418804FF44064C4F20104204605A900F088 -S31508000824D5FB2046394600F031FC4FF42043ADF899 -S315080008341430CDF818804FF018030793204605A9FD -S3150800084400F0C4FB4FF48046ADF814604FF048033B -S315080008540793204605A900F0B9FB4FF00005ADF84B -S3150800086400504FF48273ADF80230ADF80450ADF879 -S315080008740650ADF808504FF40073ADF80A304FF03F -S315080008843803ADF80C30ADF80E504FF00703ADF849 -S3150800089410304FF4605066F31F40694600F022FC9E -S315080008A44FF4605066F31F40294600F055FC4FF498 -S315080008B4605066F31F404FF0010100F035FC2046F6 -S315080008C4394600F0E3FB4FF40045ADF82850CDF85F -S315080008D42C80CDF8309020460AA900F077FB2046F4 -S315080008E4294600F0D3FB4FF00A074FF46054C4F2CC -S315080008F400044FF002054FF001062046294600F091 -S315080009043BFC0028F9D020464FF0FF0100F01CFC00 -S315080009142046314600F030FC0028F9D0013FECD1DE -S315080009244FF40043ADF828304FF003030B934FF010 -S3150800093418030C934FF44064C4F2010420460AA930 -S3150800094400F044FB20464FF4805100F0A3FB4FF01F -S3150800095400000146FFF7DAFE012840F0D48001F0D2 -S31508000964D5F800F57A744FF008004FF4D571FFF7FF -S31508000974CDFE01284CD10DF133070DF137063D465E -S315080009844FF0FF084046FFF7FBFD05F8010FB54297 -S31508000994F8D19DF83630012B40F0B5809DF83730F4 -S315080009A4AA2B40F0B0804FF0A9054FF0804801F01B -S315080009B4ADF8844205D928464146FFF7A7FE002824 -S315080009C4F5D101F0A3F8844240F29D804FF03A0035 -S315080009D44FF00001FFF79AFE002840F094804FF08C -S315080009E4FF042046FFF7CCFD07F8010FB742F8D1FC -S315080009F49DF8343003F04003002B14BF0C22042264 -S31508000A0440F23023C2F200031A60FFF755FE2CE0C9 -S31508000A144FF0A9004FF00001FFF778FE012899BFAF -S31508000A240227A92501273D464FF0000601F06EF876 -S31508000A34844205D928463146FFF768FE0028F5D1D1 -S31508000A4401F064F884425ED94FF010004FF4007147 -S31508000A54FFF75CFE002856D140F23023C2F20003A9 -S31508000A641F60FFF729FE002F3AD040F20003C2F2B6 -S31508000A7400031A7802F0FE021A704FF46055C4F2A5 -S31508000A84000528464FF0000100F04EFB4FF0000425 -S31508000A94ADF814404FF48273ADF81630ADF818402B -S31508000AA4ADF81A40ADF81C404FF40073ADF81E308B -S31508000AB44FF00803ADF82030ADF822404FF0070395 -S31508000AC4ADF82430284605A900F00CFB2846214633 -S31508000AD400F042FB28464FF0010100F025FB07E031 -S31508000AE440F20003C2F200031A7842F001021A70B7 -S31508000AF440F20003C2F20003187801E04FF0010047 -S31508000B040EB0BDE8F08340F23023C2F200034FF082 -S31508000B1400021A60FFF7D0FDE2E700BFC0B228B9A9 -S31508000B2440F20003C2F20003187870474FF0010040 -S31508000B34704700BF70B50D46C0B2DCB2002843D179 -S31508000B44002C44D040F20003C2F200031B7813F0D1 -S31508000B54010F3FD140F23023C2F200031B6813F0A1 -S31508000B64080F08BF5202012C0ED14FF0110011468E -S31508000B74FFF7CCFD10BB28464FF40071FFF73AFD8A -S31508000B84002818BF002419E04FF012001146FFF799 -S31508000B94BDFD98B94FF4007628463146FFF72AFD7D -S31508000BA430B105F5007504F1FF34E4B2002CF3D135 -S31508000BB44FF00C004FF00001FFF7A8FDFFF77CFD8E -S31508000BC4201C18BF012070BD4FF0040070BD4FF003 -S31508000BD4040070BD4FF0030070BD00BF70B50E462B -S31508000BE41546C0B2DCB2002856D1002C57D040F2C4 -S31508000BF40003C2F200031B7813F0010F52D140F22E -S31508000C040003C2F200031B7813F0040F4DD140F21F -S31508000C143023C2F200031B6813F0080F08BF5502FD -S31508000C24012C0ED14FF018002946FFF76FFD68BB5B -S31508000C3430464FF0FE01FFF70FFD002818BF0024C9 -S31508000C4424E013F0060F04D04FF097002146FFF76F -S31508000C545DFD4FF019002946FFF758FDB0B94FF06E -S31508000C64FC0530462946FFF7F7FC30B106F5007651 -S31508000C7404F1FF34E4B2002CF3D14FF000004FF036 -S31508000C84FD01FFF7E9FC002808BF0124FFF714FD5E -S31508000C94201C18BF012070BD4FF0040070BD4FF032 -S31508000CA4040070BD4FF0030070BD4FF0020070BD24 -S31508000CB470B584B01446C0B2C9B2002840F0768133 -S31508000CC440F20003C2F200031B7813F0010F40F050 -S31508000CD470810E2900F24481DFE811F00F00160036 -S31508000CE442016800420142014201420142014201B5 -S31508000CF4E100EA00FC000E012501FFF7EDFCD0F146 -S31508000D04010438BF00244EE14FF009004FF00001FA -S31508000D14FFF7FCFC002840F0268168464FF01001D6 -S31508000D24FFF768FC002800F021819DF800304FEA9F -S31508000D349313012B14D19DF8072002F03F024FEAC2 -S31508000D44024202F101029DF809309DF8081003EBEE -S31508000D540123D3184FEA832323604FF0000422E1CA -S31508000D649DF808209DF807304FEA830303EB921396 -S31508000D749DF8062002F0030203EB822202F1010227 -S31508000D849DF8053003F00F039DF80A1003EBD11301 -S31508000D949DF8091001F0030103EB4103A3F10703CE -S31508000DA402FA03F323604FF00004FCE040F2302318 -S31508000DB4C2F200031B6813F0040F2CD04FF08D0009 -S31508000DC44FF00001FFF7A2FC002840F0D2804FF054 -S31508000DD4FF00FFF7D5FB68464FF01001FFF70AFC42 -S31508000DE4002800F0C9804FF030054FF0FF06304662 -S31508000DF4FFF7C6FB05F1FF35EDB2002DF7D19DF8D7 -S31508000E040A304FEA13134FF0100202FA03F3236071 -S31508000E144FF00004C7E04FF009004FF00001FFF758 -S31508000E2475FC002840F0AB8068464FF01001FFF7C8 -S31508000E34E1FB002800F0A680604B1B6813F0020F44 -S31508000E4417D09DF80A2002F03F029DF80B304FEAAE -S31508000E54D31303EB420202F101029DF80D304FEA67 -S31508000E64931303F1FF3302FA03F323604FF00004EC -S31508000E7499E09DF80B309DF80A20C2F3840202F12A -S31508000E84010203F003014FEA531303EBC10303F111 -S31508000E94010303FB02F323604FF0000483E040F2EE -S31508000EA43023C2F200031B6813704FF000047AE083 -S31508000EB44FF009004FF00001FFF728FC002864D121 -S31508000EC420464FF01001FFF795FBD0F1010438BF17 -S31508000ED4002468E04FF00A004FF00001FFF716FC03 -S31508000EE4002855D120464FF01001FFF783FBD0F1B7 -S31508000EF4010438BF002456E04FF03A004FF00001D1 -S31508000F04FFF704FC002846D14FF000054FF0FF0612 -S31508000F143046FFF735FB605505F10105042DF7D179 -S31508000F244FF000043FE040F23023C2F200031B688E -S31508000F3413F0040F32D04FF08D004FF00001FFF785 -S31508000F44E5FB70BB4FF0FF00FFF71AFB20464FF096 -S31508000F544001FFF74FFBD0F1010438BF002422E01B -S31508000F644FF004041FE04FF001041CE04FF00104A5 -S31508000F7419E04FF0010416E04FF0010413E04FF0B6 -S31508000F84010410E04FF001040DE04FF001040AE0FB -S31508000F944FF0010407E04FF0010404E04FF00104A8 -S31508000FA401E04FF00104FFF787FB04E04FF0040467 -S31508000FB401E04FF00304204604B070BD300200205F -S31508000FC44FF00000C4F2AA20704700BF2DE9F003D1 -S31508000FD48B6803F00F0513F0100F1CBF4B681D43F5 -S31508000FE40B782BB3D0F800C04FF000034FF001067E -S31508000FF44FF00F0806FA03F20C881440944211D1F4 -S315080010044FEA830708FA07F92CEA090C05FA07F7E1 -S315080010144CEA070C8F68282F01D1446102E0482F57 -S3150800102408BF026103F10103082BE3D1C0F800C02D -S315080010340B88FF2B27D9D0F804C04FF000034FF0D4 -S3150800104401064FF00F0803F1080206FA02F20C88AB -S315080010541440944211D14FEA830708FA07F92CEA97 -S31508001064090C05FA07F74CEA070C8F68282F08BFFE -S3150800107444618C68482C08BF026103F10103082BFC -S31508001084E1D1C0F804C0BDE8F003704789B2016134 -S31508001094704700BF89B24161704700BF39B14FF448 -S315080010A48053C4F202039A691043986170474FF457 -S315080010B48053C4F202039A6922EA000098617047D1 -S315080010C439B14FF48053C4F20203DA691043D86184 -S315080010D470474FF48053C4F20203DA6922EA000027 -S315080010E4D861704710B4028802F441524C880B88C0 -S315080010F423438C882343CC8823430C8923434C8974 -S3150800110423438C892343CC89234313439BB203800B -S31508001114838B23F400634FEA03434FEA1343838321 -S315080011240B8A038210BC704729B103889BB243F02B -S31508001134400303807047038823F040034FEA0343C0 -S315080011444FEA13430380704789B28181704700BF11 -S31508001154808980B2704700BF29B103889BB243F4E3 -S31508001164005303807047038823F400534FEA03436C -S315080011744FEA13430380704703899BB219420CBF95 -S3150800118400200120704700BF4FEAC1514FEAD151F0 -S315080011948180704703889BB219420CBF0020012046 -S315080011A4704700BF2DE9F0474FF0000344F6A865E1 -S315080011B4C0F600054FF4FA7048F6A04140F2FF3A2B -S315080011C413F805C0EA1892F801800CEB080202FB32 -S315080011D4000291FBF2F902FB1919B9F1000F06D1C5 -S315080011E491FBF2F404F1FF3292B2524504D903F1A9 -S315080011F40403482BE4D18CE0474666464FF4C843BB -S31508001204C4F200034FF000025A611A6842F400421D -S315080012141A601B6813F4004F09D04FF4C845C4F28A -S31508001224000500F07DFE2B6813F4004FF9D14FF446 -S31508001234C843C4F200031A6822F002021A601A6844 -S3150800124442F001021A605B6813F0010F09D14FF4EA -S31508001254C845C4F2000500F063FE6B6813F0010F7D -S31508001264F9D006F1FF3607F1FF374FEA075747EA81 -S31508001274064604F1FF3434434FF4C843C4F200036A -S31508001284DC611A6822F001021A605B6813F0010F28 -S3150800129409D04FF4C844C4F2000400F041FE636860 -S315080012A413F0010FF9D14FF4C843C4F20003D3F87D -S315080012B4002242F00102C3F80022D3F81C2222F0CD -S315080012C40102C3F81C22D3F80C2242F00102C3F827 -S315080012D40C224FF00002C3F84022C3F84422D3F884 -S315080012E4042222F00102C3F80422D3F8142222F0BD -S315080012F40102C3F81422D3F81C2242F00102C3F8EF -S315080013041C22D3F8002222F00102C3F80022BDE809 -S31508001314F08744F62460C0F600004FF0E20100F0BE -S3150800132413FD6BE730B50446CDB24FF4C843C4F297 -S3150800133400039B6813F0806F07D144F62460C0F657 -S31508001344000040F2211100F0FFFC4FF4C843C4F238 -S315080013540003D3F8802102F00102C3F88021D3F8F0 -S31508001364802142F07C4242F40012C3F88021C3F87B -S315080013748451E178A2784FEA024242EA016221786E -S315080013840A43617842EA0122C3F88821E179A279FD -S315080013944FEA024242EA016221790A43617942EA42 -S315080013A40122C3F88C21D3F8802142F00102C3F844 -S315080013B480219B6813F0806F09D14FF4C844C4F2A6 -S315080013C4000400F0ADFDA36813F0806FF9D030BDBA -S315080013D44FF4C843C4F20003DB6813F0030F40D08C -S315080013E44FF4C843C4F20003D3F8B02140F267634C -S315080013F4B3EB525F2AD14FF4C843C4F20003D3F8BF -S31508001404B8210270D3F8B8214FEA12224270D3F8F1 -S31508001414B8214FEA12428270D3F8B8214FEA126211 -S31508001424C270D3F8BC210271D3F8BC214FEA122248 -S315080014344271D3F8BC214FEA12428271D3F8BC3107 -S315080014444FEA1363C3714FF0010001E04FF0000047 -S315080014544FF4C843C4F20003DA6842F02002DA60A3 -S3150800146470474FF00000704700B500F05DFC5DF86A -S3150800147404FB00BF10B500F0FDFAA0B100F004FDAE -S3150800148400F010FB00F0FCFA20F0604020F07F002A -S315080014944EF60853CEF20003186000F0F1FA4468D9 -S315080014A400F044FCA04710BD70B50E4692B272B166 -S315080014B4044600F1010002F1FF3292B2851816F8CB -S315080014C4013B04F8013B00F02BFDAC42F7D170BD9B -S315080014D44FF40053C4F2020340F22312C4F26752D3 -S315080014E45A6048F6AB12CCF6EF525A604FF0340203 -S315080014F4DA6070474FF40053C4F202031A6942F0E3 -S3150800150480021A61704700BF70B5064644F6F06556 -S31508001514C0F600054FF0000400F002FD2B68B34244 -S315080015240DD869685B189E4209D244F6F063C0F682 -S31508001534000304EB440203EB8203187A70BD04F13A -S31508001544010405F10C050D2CE6D14FF0FF0070BD22 -S315080015542DE9F04107460068FFF7D6FFFF2855D066 -S31508001564FFF7B6FF4FF40053C4F20203DB6813F027 -S31508001574010F04D0FFF7BEFF4FF0000448E04FF414 -S315080015840053C4F202031A6942F001021A614FF0C9 -S3150800159400054FF40054C4F202043B6805EB030843 -S315080015A405F10402BE58B2B2EA52E36813F0010F19 -S315080015B405D000F0B5FCE36813F0010FF9D14FEA42 -S315080015C41643A8F80230E36813F0010F05D000F0BB -S315080015D4A7FCE36813F0010FF9D1D8F80030B34239 -S315080015E407D105F10405B5F5007FD6D14FF00104FE -S315080015F401E04FF000044FF40053C4F202031A69E1 -S3150800160422F001021A61FFF775FF01E04FF00004AA -S315080016142046BDE8F08100BF70B5C6B244F6F06551 -S31508001624C0F600054FF0000400F07AFC2B7AB342AA -S3150800163408D144F6F063C0F6000304EB440253F8F9 -S31508001644220070BD04F1010405F10C050D2CEBD143 -S315080016544FF0FF3070BD00BF00B54FEAC1534FEAE3 -S31508001664D35363B903688B420DD040F8041B4FF477 -S315080016740072FFF719FF4FF001005DF804FB4FF005 -S3150800168400005DF804FB4FF001005DF804FB00BFA1 -S3150800169430B504460D4640F23423C2F2000398429C -S315080016A409D04FF4C043C0F60003994208D0FFF7A7 -S315080016B44FFF48B910E040F23844C2F2000403E090 -S315080016C440F23424C2F2000420462946FFF7C4FF38 -S315080016D4002808BF002401E04FF00004204630BD6E -S315080016E42DE9F04305460C4617461E464FEA51298E -S315080016F44FEA49290368B3F1FF3F03D14946FFF787 -S31508001704ABFF50B32B684B4505D028464946FFF72F -S31508001714BFFF054628B32B68E41A04F104042C1900 -S3150800172440F2FF1809F5007900F0FAFB05F1040305 -S31508001734E31A434507D928464946FFF7A9FF05464C -S3150800174498B100F1040417F8013B04F8013B013E83 -S31508001754EAD14FF00100BDE8F0834FF00000BDE880 -S31508001764F0834FF00000BDE8F0834FF00000BDE8B9 -S31508001774F08300BF40F23843C2F200034FF0FF3251 -S315080017841A6040F23423C2F200031A60704700BF9D -S3150800179470B504460D461646FFF7B6FEFF281DD05B -S315080017A404F1FF304019FFF7AFFEFF2819D04FEABE -S315080017B454224FF4C043C0F60003B3EB422F07BFCD -S315080017C440F23420C2F2000040F23840C2F200006F -S315080017D4214632462B46FFF783FF70BD4FF00000C3 -S315080017E470BD4FF0000070BD2DE9F04104460E4669 -S315080017F4FFF78AFE054604F1FF34A019FFF784FEB5 -S3150800180404460646FF2D00F08780FF2800F08880EE -S31508001814854275D8022D77D90F2879D8FFF758FE4F -S315080018244FF40053C4F20203DB6813F0010F05D02A -S31508001834FFF760FE4FF00000BDE8F0814FF4005357 -S31508001844C4F202031A6942F002021A612846FFF733 -S31508001854E3FE07462046FFF7DFFE804644F6F065BA -S31508001864C0F600054FF0000400F05AFB2B7AB34289 -S3150800187409D144F6F063C0F6000304EB440203EB13 -S3150800188482035B6807E004F1010405F10C050D2CDD -S31508001894EAD14FF00003C7EB08084344C3F38F2388 -S315080018A403B303F1FF339EB206F101064FEA862617 -S315080018B44FF000054FF40054C4F20204EB196361B7 -S315080018C4236943F040032361E36813F0010F05D04D -S315080018D400F026FBE36813F0010FF9D105F58065DE -S315080018E4B542EBD14FF40053C4F202031A6922F04D -S315080018F402021A61FFF7FEFD4FF00100BDE8F08110 -S315080019044FF00000BDE8F0814FF00000BDE8F0811B -S315080019144FF00000BDE8F0814FF00000BDE8F0810B -S315080019244FF00000BDE8F08100B581B040F23423E1 -S31508001934C2F200031B68B3F1FF3F1FD040F2342301 -S31508001944C2F2000399685A688918DA6889181A6904 -S3150800195489185A6989189A698918DA698B18C3F132 -S31508001964000301AA42F8043D46F25010C0F60000EE -S315080019744FF004016A46FFF70BFF01E04FF0010040 -S3150800198401B000BD46F20402C0F600024FF4C0439B -S31508001994C0F6000310681B68C01846F20803C0F6B0 -S315080019A400031B68C01846F20C03C0F600031B6844 -S315080019B4C01846F21003C0F600031B68C01846F2A6 -S315080019C41403C0F600031B68C01846F21803C0F6D1 -S315080019D400031B68C01846F25013C0F600031B68C0 -S315080019E4C018D0F1010038BF0020704700B540F296 -S315080019F43423C2F200031B68B3F1FF3F06D040F25A -S31508001A043420C2F20000FFF7A3FD90B140F2384338 -S31508001A14C2F200031B68B3F1FF3F0ED040F2384010 -S31508001A24C2F20000FFF794FD003018BF01205DF8EC -S31508001A3404FB4FF000005DF804FB4FF001005DF86D -S31508001A4404FB00BF4FF4C040C0F60000704700BF57 -S31508001A5400B5FFF78FFE5DF804FB00BF00B5FFF77E -S31508001A6497FE5DF804FB00BF00B5FFF7BDFE5DF801 -S31508001A7404FB00BF00B5FFF785FF5DF804FB00BF54 -S31508001A8400B5FFF7DFFF5DF804FB00BF00B5FFF7FD -S31508001A944BFF18B1FFF7AAFF5DF804FB4FF00000EF -S31508001AA45DF804FB4EF21003CEF200034FF0000279 -S31508001AB41A60704700B5FFF7F5FF4EF21003CEF231 -S31508001AC4000341F63F12C0F201025A604FF00002C9 -S31508001AD49A604FF00501196040F23C63C2F20003B4 -S31508001AE41A605DF804FB00BF4EF21003CEF2000341 -S31508001AF41B6813F4803F07D040F23C63C2F200032C -S31508001B041A6802F101021A60704700BF00B5FFF7B0 -S31508001B14EBFF40F23C63C2F2000318685DF804FB6D -S31508001B244FF48843C4F200031B8813F0200F08D02F -S31508001B344FF48843C4F200039B8803704FF00100F6 -S31508001B4470474FF00000704710B5C0B24FF4884391 -S31508001B54C4F200031B8813F0800F15D04FF4884392 -S31508001B64C4F2000398801B8813F0800F0FD14FF43A -S31508001B748844C4F2000400F0D3F9238813F0800FD4 -S31508001B84F9D04FF0010010BD4FF0000010BD4FF022 -S31508001B94010010BD4FF48843C4F200034FF000025D -S31508001BA41A819A811A829A821A8340F271221A81B8 -S31508001BB49A8992B242F4005242F00C029A81704712 -S31508001BC42DE9F0410546CCB2402C07D944F68C7071 -S31508001BD4C0F600004FF08D0100F0B6F82046FFF776 -S31508001BE4B3FF012807D044F68C70C0F600004FF006 -S31508001BF4910100F0A9F82646BCB14FF0000444F65A -S31508001C048C77C0F600074FF09A0800F089F9285D2A -S31508001C14FFF79AFF012803D03846414600F094F8A6 -S31508001C2404F10104A3B2B342EFD3BDE8F08100BFC7 -S31508001C3430B5054640F28963C2F200031B7823BB1C -S31508001C4440F24460C2F20000FFF76AFF01285CD143 -S31508001C5440F24463C2F200031B78002B58D0FFF706 -S31508001C6455FF40F24063C2F20003186040F28863ED -S31508001C74C2F200034FF00000187040F28963C2F202 -S31508001C8400034FF001021A7030BD40F28863C2F2B5 -S31508001C9400031C7840F24463C2F2000304F1010015 -S31508001CA41818FFF73DFF01281CD104F10104E2B21C -S31508001CB440F28863C2F200031A7040F24463C2F227 -S31508001CC400031B78934226D128461649FFF7ECFBF6 -S31508001CD440F28963C2F200034FF000021A704FF013 -S31508001CE4010030BDFFF712FF40F24063C2F2000361 -S31508001CF41B6803F16403984210D940F28963C2F25F -S31508001D0400034FF00000187030BD4FF0000030BDDE -S31508001D144FF0000030BD4FF0000030BD4FF000001A -S31508001D2430BD00BF4506002072B6704762B67047DC -S31508001D3400B545F21000C0F600004FF0380100F077 -S31508001D4403F85DF804FB00BF00B500F0E9F8FCE70A -S31508001D5400B500F0DDF8012820D000F0B1FBE8B1A9 -S31508001D6440F28A63C2F200031B78012B16D1FFF7EF -S31508001D74CDFE40F28C63C2F200031B6803F5FA73C6 -S31508001D8498420BD340F28A63C2F200034FF0000272 -S31508001D941A7000F09FFB08B9FFF76CFB5DF804FBAB -S31508001DA400B540F28A63C2F200034FF001021A70CA -S31508001DB4FFF7ACFE40F28C63C2F200031860FFF72B -S31508001DC4C7FF5DF804FB00BF00B5FFF74DFB00F045 -S31508001DD4A5F8FFF76FFEFFF73BFE00F057FB00F090 -S31508001DE413F8FFF7DDFF5DF804FB00BF00B500F04C -S31508001DF497F8FFF779FE00F09BFC00F017F8FFF759 -S31508001E04A7FF5DF804FB00BF10B500F0A1F8FFF7C3 -S31508001E14C9F940F20404C2F200044FF00103236036 -S31508001E24FFF7B8FE4FF00003236010BD00B540F27B -S31508001E349060C2F20000FFF7CBFA01280CD140F2F9 -S31508001E440403C2F200034FF001021A6040F29060E4 -S31508001E54C2F2000000F0A0F840F29060C2F200005E -S31508001E64FFF7E6FE01280CD140F20403C2F2000390 -S31508001E744FF000021A6040F29060C2F2000000F0CF -S31508001E848BF85DF804FB00BF704700BF30B5044605 -S31508001E948DB240F20403C2F200031B68012B02D17F -S31508001EA4E9B2FFF73FFA40F20403C2F200031B68E3 -S31508001EB41BB9E9B22046FFF783FE00F063F830BD8C -S31508001EC440F20403C2F200031868022806D0032865 -S31508001ED407D001280CBF0820402070474FF00000A7 -S31508001EE470474FF00000704740F20403C2F2000343 -S31508001EF41868022806D0032807D001280CBF082032 -S31508001F04402070474FF0000070474FF000007047BC -S31508001F1400B500F02DF85DF804FB00BF704700BF5C -S31508001F24704700BF40F2D063C2F200034FF00002CC -S31508001F345A70704740F2D063C2F200034FF0FE02B3 -S31508001F44DA7018714FF00202A3F84420704700BFF4 -S31508001F5440F2D063C2F200034FF000021A709A648A -S31508001F6483F84320A3F844209A705A70704700BF38 -S31508001F7440F2D063C2F200031878003018BF01207B -S31508001F84704700BF40F2D063C2F200034FF000026C -S31508001F9483F84320704700BF30B504460278FF2A09 -S31508001FA42BD100F08DFA20B94FF01000FFF7C2FFCD -S31508001FB4D2E1FFF7B7FF40F2D064C2F200044FF053 -S31508001FC4010525704FF0FF03E3704FF010032371EA -S31508001FD44FF000036371FFF773FFA071FFF784FFE7 -S31508001FE4E071FFF781FF4FEA102020726572A5722F -S31508001FF44FF00803A4F84430AEE140F2D063C2F2CD -S3150800200400031B78012B40F0C981A2F1C902352AC5 -S3150800201400F29E81DFE812F0F8009C019C0197010A -S315080020249C019C0189011F016F0159019C019C01B6 -S315080020349C019C019C019C019C019C019C019C01A6 -S315080020449C019C019C019C019C019C019C019C0196 -S315080020549C019C019C019C019C019C019C019C0186 -S315080020649C019C019C019C019C019C018B005900CC -S3150800207436007D009C019C019C01B2009C01CE00A7 -S31508002084D300E7004578FFF71BFF00F1FF308542D0 -S3150800209404DD4FF02200FFF74DFF5DE140F2D06505 -S315080020A4C2F2000505F10400A96C6278FFF7FCF991 -S315080020B44FF0FF03EB706278AB6CD318AB646378AC -S315080020C403F10103A5F8443046E14578FFF7F8FE25 -S315080020D400F1FF30854204DD4FF02200FFF72AFFA6 -S315080020E43AE1616840F2D065C2F20005A96405F1D7 -S315080020F404006278FFF7D8F94FF0FF03EB706278B3 -S31508002104AB6CD318AB64637803F10103A5F84430C8 -S3150800211422E140F2D063C2F200034FF0FF02DA7004 -S3150800212442689A644FF00102A3F8442014E140F28D -S31508002134D063C2F200034FF0FF02DA70996C436869 -S3150800214443B14FF0000211F8010B1218D2B2013B49 -S31508002154F9D101E04FF0000240F2D063C2F2000365 -S31508002164C3F807204FF001021A714FF000025A71A2 -S315080021749A714FF00802A3F84420EDE040F2D063C8 -S31508002184C2F200034FF0FF02DA7045F2A002C0F66D -S3150800219400029A644FF000021A715A719A714FF04C -S315080021A40701D9711A725A729A724FF00802A3F883 -S315080021B44420D1E04FF00000FFF7BCFECCE040F22B -S315080021C4D063C2F200034FF0FF02DA704FF0000248 -S315080021D41A71597859719A71DA711A724FF006029E -S315080021E4A3F84420B8E040F2D064C2F200044FF0E9 -S315080021F400032370FFF796FE4FF0FF03E3704FF0DA -S315080022040103A4F84430A7E040F2D063C2F2000305 -S315080022149D6CFFF755FE00F1FF3104F101022846D3 -S31508002224FFF71CFC20B94FF03100FFF783FE93E05B -S3150800223440F2D064C2F200044FF0FF03E370A56CC9 -S31508002244FFF73EFE05F1FF331B18A3644FF00103A5 -S31508002254A4F8443080E04578FFF732FEA0F1020086 -S31508002264854204DD4FF02200FFF764FE74E040F275 -S31508002274D063C2F200034FF0FF02DA704FF0010296 -S31508002284A3F84420617841B9FFF700FC002863D11C -S315080022944FF03100FFF74EFE5EE040F2D063C2F223 -S315080022A40003986C04F10202FFF7D8FB20B94FF03B -S315080022B43100FFF73FFE4FE040F2D063C2F200035D -S315080022C461789A6C8A189A6446E040F2D064C2F23D -S315080022D400044FF0FF03E3704FF0000525716571A4 -S315080022E4FFF7EEFDA071E571257265724FF00703DD -S315080022F4A4F8443030E040F2D063C2F20003986C8C -S315080023046168FFF7B1FB20B94FF03100FFF712FE01 -S3150800231422E040F2D063C2F200034FF0FF02DA7003 -S315080023244FF00102A3F8442016E0FFF7A3F840F2A1 -S31508002334D063C2F200034FF0FF02DA704FF00102D5 -S31508002344A3F8442008E04FF03100FFF7F3FD03E05B -S315080023544FF02000FFF7EEFD40F2D063C2F200030F -S3150800236493F84330012B03D14FF01000FFF7E2FD39 -S3150800237440F2D063C2F20003B3F844100BB2002B48 -S315080023840CDD40F2D060C2F200004FF0010380F881 -S31508002394433000F1030089B2FFF778FD30BD00BF72 -S315080023A430B403464CF6CD44CCF6CC4400E0114692 -S315080023B401F10102A4FB0353DB08F8D14FF0000333 -S315080023C44B7011464CF6CD45CCF6CC4502F1FF329E -S315080023D4A5FB00434FEAD30303EB8304A0EB4400B5 -S315080023E400F1300001F8010D1846002BEED1104615 -S315080023F430BC704770B506464FF000042546305D7C -S3150800240402F09CFCC0B2A0F13003DBB2162B12D842 -S31508002414A0F13A02D2B2062A10D9092B84BFA0F138 -S315080024243703DBB203EB051505F0FF0504F10104D8 -S31508002434022CE4D104E04FF0000501E04FF000055A -S31508002444284670BD00B5C3B203F00F00092B03D9A3 -S3150800245400F137005DF804FB00F1300002F06EFC71 -S31508002464C0B25DF804FB00BF30B50C46C5B24FEAEE -S315080024741510FFF7E7FF207005F00F00FFF7E2FFDE -S3150800248460704FF00003A370204630BD00B540F2DB -S315080024945C73C2F200034FF00000186040F26871E2 -S315080024A4C2F2000101F016FF38B145F2A800C0F6E1 -S315080024B400004FF07701FFF747FC5DF804FB00BF07 -S315080024C440F25C73C2F200031868D0F1010038BF09 -S315080024D40020704700B5FFF71BFD012810D040F215 -S315080024E45C73C2F200031B6873B9FDF7B1FE0128D9 -S315080024F40ED140F25C73C2F2000318605DF804FB67 -S315080025044FF000005DF804FB4FF000005DF804FB93 -S315080025144FF000005DF804FB10B50446007802F09D -S315080025240DFC53280DD1607802F000FC60B1607888 -S3150800253431280CD032280DD0332814BF03200220AA -S3150800254410BD4FF0030010BD4FF0030010BD4FF04F -S31508002554000010BD4FF0010010BD00BF70B5044661 -S3150800256400F10200FFF746FF0646054604F1040497 -S315080025742046FFF73FFF8619F6B205F1FF35ADB2DF -S3150800258404F10204012DF3D82046FFF733FF6FEA5E -S315080025940606F6B2864214BF0020012070BD00BFAD -S315080025A42DE9F04104460E46174601B138B945F2FD -S315080025B4A800C0F6000040F23121FFF7C5FB20460B -S315080025C4FFF7AAFF0546032800F0A7802046FFF771 -S315080025D4C5FF002800F0A480012D32D01DB1022DBC -S315080025E440F0A18060E004F10200FFF703FF804693 -S315080025F404F10400FFF7FEFE4FEA0025356004F1F6 -S315080026040600FFF7F7FE2D183560A8F10306B6B2E3 -S31508002614002F00F08A800FFA86F8B8F1000F40F30D -S31508002624848004F108044FF000052046FFF7E2FE13 -S31508002634785504F1020405F10105ADB24545F4DB0C -S3150800264473E004F10200FFF7D5FE804604F10400A6 -S31508002654FFF7D0FE4FEA0045356004F10600FFF7A0 -S31508002664C9FE05EB0025356004F10800FFF7C2FE34 -S315080026742D183560A8F10406B6B2002F55D00FFA06 -S3150800268486F8B8F1000F50DD04F10A044FF000058E -S315080026942046FFF7AFFE785504F1020405F101055B -S315080026A4ADB24545F4DB40E004F10200FFF7A2FEB3 -S315080026B4804604F10400FFF79DFE4FEA0065356085 -S315080026C404F10600FFF796FE05EB0045356004F1B4 -S315080026D40800FFF78FFE05EB0025356004F10A00B4 -S315080026E4FFF788FE2D183560A8F10506B6B2E7B1DE -S315080026F40FFA86F8B8F1000F17DD04F10C044FF051 -S3150800270400052046FFF776FE785504F1020405F124 -S315080027140105ADB24545F4DB07E04FF0000604E0D9 -S315080027244FF6FF7601E04FF0000630B2BDE8F081BF -S3150800273470B540F25C73C2F200031B68002B00F00C -S315080027444982012B43D1FDF7AFFD45F21C10C0F6B3 -S315080027540000FDF703FE45F24010C0F60000FDF741 -S31508002764FDFDFDF79BFD0146C5484FF0010201F04A -S31508002774CBFD50B145F26810C0F60000FDF7EEFD3A -S315080027844FF00100FDF7D8FD70BD45F27010C0F694 -S315080027940000FDF7E3FD45F27810C0F60000FDF7EA -S315080027A4DDFD45F29C10C0F60000FDF7D7FD40F2AA -S315080027B46073C2F200034FF000021A605A6040F2D6 -S315080027C45C73C2F200034FF002021A6070BD022B5A -S315080027D440F0048140F6C030C2F2000040F268744A -S315080027E4C2F2000404F50D724FF4807102F0F0F998 -S315080027F494F93A32002B15DA45F26810C0F600004F -S31508002804FDF7ACFD4FF00200FDF796FD04F50D70DB -S3150800281402F072F840F25C73C2F200034FF0000251 -S315080028241A6070BD00284ED040F6C030C2F20000CF -S3150800283400F5C0714FF00002FFF7B2FEB0F1FF3F9A -S3150800284414D145F26810C0F60000FDF787FD4FF075 -S315080028540300FDF771FD8A4802F04EF840F25C73F6 -S31508002864C2F200034FF000021A6070BD00282ADD88 -S3150800287440F26073C2F200035B6863B940F26073A6 -S31508002884C2F2000340F6C032C2F20002D2F8802136 -S315080028941A60586017E040F6C032C2F20002D2F855 -S315080028A4801140F26072C2F200021268914204D2A8 -S315080028B440F26072C2F20002116040F26072C2F223 -S315080028C40002C318536040F26873C2F20003D3F8D7 -S315080028D43C22D3F840329A4240F07C8168484FF053 -S315080028E4000102F013F8A0B145F26810C0F6000022 -S315080028F4FDF734FD4FF00400FDF71EFD604801F0B6 -S31508002904FBFF40F25C73C2F200034FF000021A6048 -S3150800291470BD45F27010C0F60000FDF71FFD45F2C4 -S31508002924CC10C0F60000FDF719FD40F26074C2F23F -S315080029340004606840F21C75C2F200052946FFF7D8 -S315080029442FFD2846FDF70AFD45F2D810C0F600000B -S31508002954FDF704FDE0782946FFF786FDA07805F122 -S315080029640201FFF781FD607805F10401FFF77CFD9C -S31508002974207805F10601FFF777FD2846FDF7EEFCFA -S3150800298445F27C20C0F60000FDF7E8FC2068616883 -S31508002994FFF76AF8A0B945F26810C0F60000FDF71B -S315080029A4DDFC4FF00500FDF7C7FC354801F0A4FF30 -S315080029B440F25C73C2F200034FF000021A6070BD65 -S315080029C445F27010C0F60000FDF7C8FC40F25C73CF -S315080029D4C2F200034FF003021A6070BD032B40F0E5 -S315080029E4F98040F6C030C2F2000040F26874C2F2C0 -S315080029F4000404F50D724FF4807102F0E9F894F9B5 -S31508002A043A32002B15DA45F2F410C0F60000FDF749 -S31508002A14A5FC4FF00200FDF78FFC04F50D7001F0DC -S31508002A246BFF40F25C73C2F200034FF000021A60B7 -S31508002A3470BD002800F0868040F6C030C2F200005F -S31508002A4400F5C07100F58072FFF7AAFD0646B0F1DD -S31508002A54FF3F17D145F21820C0F60000FDF77EFCAB -S31508002A644FF00300FDF768FC054801F045FF40F206 -S31508002A745C73C2F200034FF000021A6070BD00BF17 -S31508002A849C09002000285DDD45F23C20C0F60000C4 -S31508002A94FDF764FC40F21C74C2F200043046214679 -S31508002AA4FFF77EFC2046FDF759FC45F24C20C0F69C -S31508002AB40000FDF753FC40F6C035C2F2000595F850 -S31508002AC483012146FFF7D0FC95F8820104F102013F -S31508002AD4FFF7CAFC95F8810104F10401FFF7C4FC69 -S31508002AE495F8800104F10601FFF7BEFC2046FDF7C0 -S31508002AF435FC45F27C20C0F60000FDF72FFCD5F81E -S31508002B04800105F580723146FEF7A8FFA0B945F2A3 -S31508002B146810C0F60000FDF721FC4FF00600FDF72B -S31508002B240BFC2D4801F0E8FE40F25C73C2F2000388 -S31508002B344FF000021A6070BD45F27010C0F600002E -S31508002B44FDF70CFC40F26873C2F20003D3F83C228A -S31508002B54D3F840329A423DD145F26420C0F60000CB -S31508002B64FDF7FCFBFEF792FFA0B945F26810C0F624 -S31508002B740000FDF7F3FB4FF00700FDF7DDFB1648F1 -S31508002B8401F0BAFE40F25C73C2F200034FF0000291 -S31508002B941A6070BD45F27010C0F60000FDF7DEFB42 -S31508002BA445F28020C0F60000FDF7D8FB0A4801F07C -S31508002BB4A3FE45F29820C0F60000FDF7CFFB40F2CD -S31508002BC45C73C2F200034FF000021A60FDF788FB3B -S31508002BD4FEF750FC70BD00BF9C0900202AB111F80D -S31508002BE4013B00F8013B013AF9D170471AB100F8E4 -S31508002BF4011B013AFBD17047037833B18B4204D0E9 -S31508002C0410F8013F0BB18B42FAD11846704700BF42 -S31508002C140346C87E8A7E42EA00201B78032B05D128 -S31508002C244A7D0B7D43EA022340EA0340704700BF0E -S31508002C348176C1F30723C3764FEA114101754FEA3A -S31508002C4411214175704700BF00F10B014FF00003D5 -S31508002C544FEA530242EAC31310F8012B9B1803F0F8 -S31508002C64FF038842F4D11846704700BF00B590B1F7 -S31508002C740368A3B11A78B2B1D9888288914216D169 -S31508002C845878FDF74BFF00F00100002814BF032015 -S31508002C9400205DF804FB4FF009005DF804FB4FF0D3 -S31508002CA409005DF804FB4FF009005DF804FB4FF0DA -S31508002CB409005DF804FB00BF10B504460A464078CF -S31508002CC404F134014FF00103FDF734FF00283CD129 -S31508002CD494F8332294F8323243EA022212B24AF6BC -S31508002CE45523CFF6FF739A4232D194F86D2094F89F -S31508002CF46C304FEA034343EA026294F86A3013439A -S31508002D0494F86B2043EA022222F07F4244F24613E7 -S31508002D14C0F254039A421ED094F8890094F8883075 -S31508002D244FEA034343EA006094F88630034394F871 -S31508002D34870043EA002020F07F4044F24613C0F29D -S31508002D445403C01A18BF012010BD4FF0030010BD6C -S31508002D544FF0020010BD4FF0000010BD2DE9F04100 -S31508002D64D5B203681A78A2F13002092A00F2DF8183 -S31508002D745C783A2C40F0DB8103F1020303604FF0E0 -S31508002D8400030B60002A40F0868140F64873C2F2BD -S31508002D9400031C68002C00F082810C60237883B140 -S31508002DA46078FDF7BBFE10F0010F0AD1002D00F084 -S31508002DB47A8100F00400002814BF0A200020BDE828 -S31508002DC4F0814FF0000020706070FDF7F5FC10F0FC -S31508002DD4010F40F06C811DB110F0040F40F06B81B7 -S31508002DE420464FF00001FFF767FF0346012819D173 -S31508002DF494F8F631002B00F0628194F8FD2194F8DA -S31508002E04FC314FEA034343EA026294F8FA31134366 -S31508002E1494F8FB5143EA052520462946FFF74CFF5B -S31508002E24034601E04FF00005032B00F04C81002B0C -S31508002E3440F04D8194F8402094F83F3043EA022349 -S31508002E441BB2B3F5007F40F0468194F84B0094F822 -S31508002E544A3053EA00200ED194F85B2094F85A308D -S31508002E644FEA034343EA026294F85830134394F84A -S31508002E74590043EA0020E06194F84410E17001F136 -S31508002E84FF33DBB2012B00F22A8194F84130A37098 -S31508002E94002B00F0288103F1FF321A4240F0278103 -S31508002EA494F8466094F8452042EA0622228112F0F4 -S31508002EB40F0F40F0208194F8487094F8476056EA5A -S31508002EC407260ED194F8577094F856604FEA0646CA -S31508002ED446EA076794F854603E4394F8557046EA00 -S31508002EE4072694F843C094F8427057EA0C2700F072 -S31508002EF4068101FB00FC07EB121161448E42C0F007 -S31508002F040281761AB6FBF3F3002B00F0008140F633 -S31508002F14F576B3428CBF022601264FF6F57843456B -S31508002F2400F2098103F10203A3612562EF196762BE -S31508002F346918E162032E15D1002A40F0EC8094F852 -S31508002F44631094F862204FEA024242EA016194F857 -S31508002F5460200A4394F8611042EA0122A2624FEA09 -S31508002F64830311E0002A00F0DA806744A762022E80 -S31508002F7402D14FEA430307E04FF0030202FB03F2D0 -S31508002F8403F0010303EB520303F5FE7303F1030392 -S31508002F94B0EB532FC0F0C7804FF0FF3323614FF0D7 -S31508002FA40003E360032E68D1637194F8652094F8EE -S31508002FB4643043EA0222AA186261607804F1340193 -S31508002FC44FF00103FDF7B6FD002856D194F83322D5 -S31508002FD494F8323243EA022212B24AF65523CFF65D -S31508002FE4FF739A4249D194F8372094F836304FEA59 -S31508002FF4034343EA026294F83430134394F83520C1 -S3150800300443EA022245F25223C4F261139A4234D1A6 -S3150800301494F81B2294F81A324FEA034343EA0262ED -S3150800302494F81832134394F8192243EA022247F211 -S315080030347223C6F241139A421FD194F8232294F8B4 -S3150800304422324FEA034343EA026294F820321343D6 -S3150800305494F8212243EA0223E36094F81F2294F8A1 -S315080030641E324FEA034343EA026294F81C321343BE -S3150800307494F81D2243EA022323612670334A1388EF -S3150800308403F101039BB21380E3804FF00000206331 -S315080030942071BDE8F0814FF00B00BDE8F0814FF0D8 -S315080030A40C00BDE8F0814FF00000BDE8F0814FF058 -S315080030B40300BDE8F0814FF00A00BDE8F0814FF047 -S315080030C40D00BDE8F0814FF00100BDE8F0814FF036 -S315080030D40D00BDE8F0814FF00D00BDE8F0814FF01A -S315080030E40D00BDE8F0814FF00D00BDE8F0814FF00A -S315080030F40D00BDE8F0814FF00D00BDE8F0814FF0FA -S315080031040D00BDE8F0814FF00D00BDE8F0814FF0E9 -S315080031140D00BDE8F0814FF00D00BDE8F0814FF0D9 -S315080031240D00BDE8F0814FF00D00BDE8F0814FF0C9 -S3150800313400030B6029E603F10203A3612562EF1974 -S3150800314467626918E1624FF00306F5E6440F00204A -S315080031542DE9F0410D4601F109060369002B61D0FA -S31508003164446994F80C802378202B1ED027463146D0 -S315080031744FF0000208F0080C03E017F8013F202B73 -S3150800318413D0052B08BFE523BCF1000F06D0A3F125 -S315080031944106F6B2192E9CBF2033DBB201F8013B77 -S315080031A40E4602F10102082AE7D1237A202B21D000 -S315080031B433464FF02E0203F8012B227A202A18D020 -S315080031C404F1080106F1040C08F0100703E011F8ED -S315080031D4012F202A0ED037B1A2F14106F6B2192ED4 -S315080031E49CBF2032D2B203F8012B1E466345EED1AA -S315080031F400E01E46E37A2B72E27FA37F4FEA03437D -S3150800320443EA0263227F1343627F43EA02232B6065 -S31508003214627E237E43EA0223AB80E27DA37D43EAF2 -S315080032240223EB804FF000033370AE69002E31D0D1 -S31508003234EB69002B2ED00369DBB1028C4FF6FF73C2 -S315080032449A4219D0C7693888C8B14FF00004A04615 -S31508003254414601F023FDA8B1EB6903F1FF33A3420C -S3150800326413D9305504F1010437F814000028EFD1B6 -S315080032740DE04FF000040AE04FF0000407E04FF0B9 -S31508003284000404E04FF0000401E04FF000044FF09E -S3150800329400033355BDE8F0812DE9F041044603796E -S315080032A4002B29D0056B00F13407407839462A46A5 -S315080032B44FF00103FDF792FC10BB4FF00003237196 -S315080032C4636A9D4220D3E2699B189D4220D2E67820 -S315080032D4012E21D94FF00108E369ED1860783946C3 -S315080032E42A464346FDF77AFC06F1FF36012EF3D14A -S315080032F44FF00000BDE8F0814FF00000BDE8F08112 -S315080033044FF00100BDE8F0814FF00000BDE8F08100 -S315080033144FF00000BDE8F0814FF00000BDE8F081F1 -S3150800332430B504460D46036B8B420DD0FFF7B4FF48 -S3150800333468B9607804F134012A464FF00103FDF7B1 -S31508003344F9FB38B9256330BD4FF0000030BD4FF0A6 -S31508003354010030BD4FF0010030BD00BFF0B5044692 -S31508003364FFF79AFF054600285FD12378032B53D12C -S315080033746379002B50D04FF00006266304F1340716 -S31508003384384631464FF40072FFF730FC4FF05503C8 -S3150800339484F832324FF0AA0384F833324FF05203DA -S315080033A484F8343084F835304FF0610384F83630C5 -S315080033B44FF0410284F837204FF0720184F818124E -S315080033C484F8191284F81A2284F81B32236984F8BB -S315080033D41C32C3F3072284F81D224FEA134284F8E9 -S315080033E41E224FEA136384F81F32E36884F82032F6 -S315080033F4C3F3072284F821224FEA134284F82222CF -S315080034044FEA136384F823326078626939464FF0C9 -S315080034140103FDF7E3FB667160784FF000010A4685 -S31508003424FDF746FC002818BF01252846F0BD00BF55 -S31508003434A1F102018369A3F10203994204D28278B5 -S31508003444C36A02FB013070474FF00000704700BFA3 -S31508003454F0B505460C46012962D98369994262D2B8 -S315080034640378022B2DD0032B3DD0012B5ED101EB23 -S315080034745106416A01EB5621FFF752FF002858D13D -S315080034844FEAC6534FEAD353EB1893F8347006F150 -S315080034940106696A01EB56212846FFF741FF002811 -S315080034A44AD14FEAC6564FEAD656AD1995F83400AE -S315080034B447EA002014F0010F12BF00090005000DA9 -S315080034C4F0BD416A01EB1421FFF72AFF002836D123 -S315080034D44FEA046405EBD45595F8350095F834306D -S315080034E443EA0020F0BD416A01EBD411FFF718FF47 -S315080034F4002827D14FEA446405EBD45595F83700DC -S3150800350495F836304FEA034343EA006095F83430B9 -S31508003514034395F8350043EA002020F07040F0BDD7 -S315080035244FF00100F0BD4FF00100F0BD4FF0FF3041 -S31508003534F0BD4FF0FF30F0BD4FF0FF30F0BD4FF057 -S31508003544FF30F0BD4FF0FF30F0BD00BF70B5044644 -S315080035548DB2C580816801293CD003689A69914275 -S315080035643BD279B91A78032A01D1996A51B94FF02D -S315080035740002E2601A89AA4232D99B6A03EB151340 -S3150800358423611CE09E784FEA0616B54210D32068DC -S31508003594FFF75EFF0146B0F1FF3F24D0012825D985 -S315080035A423689B69984224D2AD1BADB2AE42EED9CC -S315080035B4E1602068FFF73CFF00EB151020612368E3 -S315080035C403F1340305F00F0503EB451565614FF068 -S315080035D4000070BD4FF0020070BD4FF0020070BDD0 -S315080035E44FF0020070BD4FF0010070BD4FF00200AD -S315080035F470BD4FF0020070BDF0B505460C46164680 -S3150800360401297FD9836999427FD20378022B42D054 -S31508003614032B51D0012B6FD101EB5107416A01EB02 -S315080036245721FFF77DFE002868D14FEAC7534FEAB2 -S31508003634D35314F0010409D0EA1892F8342002F09E -S315080036440F02F1B242EA0112D2B200E0F2B2EB186A -S3150800365483F8342007F101074FF001032B71696AD7 -S3150800366401EB57212846FFF75BFE002846D14FEAAF -S31508003674C7574FEAD75714B1C6F3071607E0EB192D -S3150800368493F8343023F00F03C6F303261E43EF19C9 -S3150800369487F8346032E0416A01EB1421FFF740FEF3 -S315080036A460BB4FEA046405EBD45484F83460C6F36B -S315080036B4072684F8356021E0416A01EBD411FFF747 -S315080036C42FFED8B94FEA446405EBD45494F837303E -S315080036D44FEA036303F070431E4384F83460C6F369 -S315080036E4072384F835304FEA164384F836304FEA10 -S315080036F4166684F8376001E04FF002004FF00103C4 -S315080037042B71F0BD4FF00200F0BD4FF00200F0BD82 -S315080037142DE9F0410546884631B9C6686EB1836914 -S315080037249E4228BF01260AE0FFF792FE012844D9E3 -S31508003734AB6998424ED3464601E04FF0010634463B -S315080037444FF0020704F10104AB699C4202D3012E2F -S3150800375437D93C4628462146FFF77AFE38B1B0F1F8 -S31508003764FF3F37D0012835D0B442EBD12DE02646A9 -S31508003774284621466FF07042FFF73EFFB0B9B8F10C -S31508003784000F05D0284641462246FFF735FF68B99B -S31508003794EE602B69B3F1FF3F1BD003F1FF332B61B6 -S315080037A44FF001036B712046BDE8F081012814BF70 -S315080037B401204FF0FF30BDE8F0814FF00100BDE86D -S315080037C4F0814FF00000BDE8F0814FF00000BDE83D -S315080037D4F0812046BDE8F0812DE9F04104460D4606 -S315080037E4C68806F10106B6B2002E71D00369002B0D -S315080037F472D016F00F0F5ED103F101030361C1689D -S3150800380421B903681B89B3426AD954E000688378EE -S3150800381403F1FF3313EA16134DD1FFF719FE0746D2 -S31508003824012861D9B0F1FF3F62D0206883699F42BD -S315080038343BD3002D60D0E168FFF76AFF07460028EE -S315080038445ED0012860D0B0F1FF3F61D02068FFF751 -S3150800385423FD002860D1206800F134004FF00001F0 -S315080038644FF40072FFF7C2F9256828463946FFF770 -S31508003874DFFD28634FF000054FF001080EE083F8DA -S3150800388404802068FFF708FD002849D123681A6BCD -S3150800389402F101021A6305F10105EDB223689A786B -S315080038A4AA42ECD81A6B551B1D63E7602068394693 -S315080038B4FFF7BEFD2061E680236803F1340306F0B2 -S315080038C40F0603EB461666614FF00000BDE8F0816B -S315080038D44FF00400BDE8F0814FF00400BDE8F08124 -S315080038E44FF00400BDE8F0814FF00200BDE8F08116 -S315080038F44FF00100BDE8F0814FF00400BDE8F08107 -S315080039044FF00700BDE8F0814FF00200BDE8F081F2 -S315080039144FF00100BDE8F0814FF00100BDE8F081E9 -S315080039244FF00100BDE8F0812DE9F04F83B004465D -S315080039344FF00001FFF70AFE0546002840F0AD8067 -S315080039444FF0FF08474645F25839C0F6000909F111 -S315080039540C0A20682169FFF7E3FC0546002840F0B5 -S315080039649C8066693378002B00F09580F27AE52B03 -S3150800397479D002F03F0212F0080F02D00F2A75D14F -S3150800398401E00F2A53D1E569002D7AD013F0400FD0 -S3150800399406D096F80D80E288228403F0BF0701E07A -S315080039A49F4266D196F80DB0C34565D1337823F0A6 -S315080039B4400303F1FF3303EB430203EB8202019254 -S315080039C409F1FF384FF00102009218F8013FF21886 -S315080039D45278F35C43EA0220009B93B101F08AF91A -S315080039E402900090019AFE2A1DD835F8120001F0BB -S315080039F481F9029B834216D1019A02F101020192CE -S31508003A0403E04FF6FF7398420DD1D045DDD13378E4 -S31508003A1413F0400F45D0009A002A42D0019A35F88F -S31508003A241230002B3DD0D8464FF0FF0729E027B9BE -S31508003A343046FFF709F940452FD04FF6FF73238424 -S31508003A44A369DA7A12F0010F19D103F10B0001E028 -S31508003A54834222D016F8011B13F8012B9142F7D0A2 -S31508003A644FF0FF070DE04FF0FF070AE04FF0FF079E -S31508003A7407E04FF0FF0704E04FF0FF0701E04FF0BF -S31508003A84FF0720464FF00001FFF7A6FE054600286B -S31508003A943FF45FAF01E04FF00405284603B0BDE8E4 -S31508003AA4F08F07F1FF37FFB2D846EAE72DE9F04F62 -S31508003AB484B0824688460B782F2B01D05C2B01D123 -S31508003AC408F101084FF00003CAF8083098F80030E6 -S31508003AD41F2B09D850464FF00001FFF737FD4FF06A -S31508003AE40003CAF814305AE145F2C423C0F60003A9 -S31508003AF4009345F2D023C0F6000303934346984641 -S31508003B0413F8012B2F2AFAD05C2AF8D0DAF81CB05D -S31508003B1498F800001F2833D92F2800F043815C2821 -S31508003B2400F04581ABF1020647464FF00104A14671 -S31508003B3425460AE02F2B00F03F815C2B00F03E81DE -S31508003B44B2F5807F00F01A811546494601F0A6F8B9 -S31508003B540446002800F015817F2806D800982146D7 -S31508003B64FFF74AF8002840F00F8126F8024F17F8A5 -S31508003B74013F184605F101021F2BDBD82C4603E04A -S31508003B844FF000044FF0010290444FF00407002C54 -S31508003B9400F0FD800BEB440232F8023D202B01D0E5 -S31508003BA42E2B04D1013CF7D14FF00600F7E0264648 -S31508003BB4002C00F0EF804FF000052BF81450DAF8CB -S31508003BC418004FF020014FF00B02FFF70FF85A4682 -S31508003BD401E005F1010532F8023B202BF9D02E2B22 -S31508003BE4F7D00DB147F0030706F1FF360BEB460392 -S31508003BF43BF816202E2A01D0013C08D14FF00800C4 -S31508003C0401904FF00009CDF80890264604E033F8F1 -S31508003C14022D2E2AF0D1F1E73BF81540002C62D08C -S31508003C2405F10105202C03D02E2C04D1AE4202D076 -S31508003C3447F00307F0E7019A914501D2AE4217D13E -S31508003C44019B0B2B03D147F0030702994EE0AE42C2 -S31508003C5402D047F0030748D302984FEA8003DBB241 -S31508003C64029335464FF00B0201924FF00809D3E749 -S31508003C747F2C11D920464FF0000101F00FF80028D7 -S31508003C8400F0A18045F2D823C0F600031B1813F8E8 -S31508003C94804C47F0020724B103982146FEF7ACFF8F -S31508003CA420B147F003074FF05F0415E0A4F1410380 -S31508003CB49BB2192B04D8029B43F0020302930BE030 -S31508003CC4A4F161039BB2192B06D8029840F00100AF -S31508003CD40290A4F12004A4B2DAF8183003F80940D3 -S31508003CE409F1010998E7029900E00299DAF818300F -S31508003CF41A78E52A04BF05221A70019A082A03D1FC -S31508003D044FEA8101C9B20291029901F00C030C2B06 -S31508003D1403D001F00302032A01D147F0020717F082 -S31508003D24020F09D101F00301012908BF47F0100762 -S31508003D34042B08BF47F00807DAF81830DF72504634 -S31508003D44FFF7F2FDDAF81830DB7A38B1042826D101 -S31508003D5403F00403002B08BF052020E013F0040F2A -S31508003D641DD1DAF81410CB7A13F0100F15D0DAF83F -S31508003D740000FEF74DFFCAF80800BFE64FF006003C -S31508003D840DE04FF006000AE04FF0060007E04FF09A -S31508003D94060004E04FF0060001E04FF0050004B009 -S31508003DA4BDE8F08F4FF000044FF0010207E04FF032 -S31508003DB400044FF0010202E02C4600E02C46904431 -S31508003DC44FF00007E3E647F002076AE72DE9F041FA -S31508003DD40446C588018C4FF6FF73994208BF2946E5 -S31508003DE4FFF7B4FBD0B94FF0E5064FF001074FF0E3 -S31508003DF4000820682169FFF793FA60B963691E70A1 -S31508003E0423681F71E388AB4208D220464146FFF770 -S31508003E14E3FC0028EDD0042808BF0220BDE8F081A1 -S31508003E242DE9F04F04460F464FF0FF0846464FF07B -S31508003E34040545F25839C0F6000909F10C0A7EE072 -S31508003E442068FFF76DFA054600287DD16069037876 -S31508003E54002B00F08480C27AE52B5BD02E2B5CD035 -S31508003E6402F03F02082A14BF00210121B94257D1A2 -S31508003E740F2A46D113F0400F06D090F80D80E28839 -S31508003E84228403F0BF0601E09E424CD1457B45459A -S31508003E944CD1D4F81CC0037803F03F0303F1FF3375 -S31508003EA403EB430103EB810109F1FF334FF0010EE4 -S31508003EB44FF6FF7813F8012F00EB020B9BF801B0BD -S31508003EC4825C42EA0B22BEF1000F07D0FE2914D801 -S31508003ED42CF8112001F10101964601E042450CD166 -S31508003EE45345E7D1037813F0400F33D0FE2904D89D -S31508003EF44FF000032CF811302CE0A8464FF0FF06CB -S31508003F0416E01EB9FEF7A0FE404520D04FF6FF7313 -S31508003F1423841CE04FF0FF060AE04FF0FF0607E093 -S31508003F244FF0FF0604E04FF0FF0601E04FF0FF06EE -S31508003F3420464FF00001FFF74FFC054620B92169DA -S31508003F4400297FF47DAF15B14FF00003236128469D -S31508003F54BDE8F08F06F1FF36F6B2A846E8E74FF05B -S31508003F640405F1E72DE9F04104460E46012928D94E -S31508003F748369994229D201E02E4603E04FF00007EF -S31508003F844FF0010820463146FFF762FA054600B3AA -S31508003F94012822D0B0F1FF3F23D0204631463A46C5 -S31508003FA4FFF72AFBF8B92369B3F1FF3F04D003F1FD -S31508003FB40103236184F80580A369AB42DCD8BDE814 -S31508003FC4F0814FF00200BDE8F0814FF00200BDE831 -S31508003FD4F0814FF00000BDE8F0814FF00200BDE823 -S31508003FE4F0814FF00100BDE8F08100BF70B582B0E2 -S31508003FF4054616469CB24FF00B02FEF7EFFD052C5C -S315080040040CD9A6F102064FEA540343EAC43436F837 -S31508004014023FE418A4B27388002BF4D14FF00702C8 -S3150800402404F00F0101F13003392B88BF01F137037E -S315080040340DF8023002F1FF322409F1D1144602A91F -S315080040448B184FF07E0103F8081C72B12B78202BCD -S315080040540ED029464FF0000303F10103A34209D009 -S3150800406411F8010F2028F7D104E04FF0000301E00E -S315080040744FF000034FF02000072A06D802ACA11817 -S3150800408411F8081C02F1010200E00146E95403F1A3 -S315080040940103072BF0D902B070BD00BF2DE9F04F1C -S315080040A483B00646D0F81890D0F81C80684649466E -S315080040B44FF00C02FEF792FD9DF80B3013F0010F3A -S315080040C428D04FF0000389F80B30F3614FF001074D -S315080040D43D464846694642463B46FFF787FF304613 -S315080040E4FFF722FC044648B905F10105ADB207F10C -S315080040F40107642DEDD14FF00704D2E0642D00F0DA -S31508004104CE80042840F0CD809DF80B3089F80B301A -S31508004114C6F81C809DF80B3013F0020F19D0B8F8B6 -S3150800412400304BB14FF0000303F101039BB238F89A -S315080041341320002AF8D101E04FF0000303F1190314 -S315080041444EF64F42C4F6C46282FB0312C2F38F09C9 -S3150800415401E04FF00109C84630464FF00001FFF769 -S31508004164F5F90446002840F09C804FF00005AA465D -S315080041744FF0010730683169FFF7D2F80446002882 -S3150800418440F08F8073691B78E52B00D023B905F1BD -S315080041940105A84501D188E0554630463946FFF75A -S315080041A41BFB04460028E5D07BE0F188C91B89B2CD -S315080041B43046FFF7CBF90446002872D1B069FEF7FA -S315080041C443FD804645F25835C0F600053068316926 -S315080041D4FFF7A6F80446002863D1D6F81CC071690F -S315080041E45FFA87FA81F80D804FF00F03CB724FF010 -S315080041F400020A738A76CA760AF1FF3303EB430090 -S3150800420403EB800013464FF6FF7E4FF0FF09734514 -S3150800421450D03CF8103000F10100545D0B550C19D0 -S315080042244FEA132B84F801B0002B08BF734602F13A -S3150800423401020D2AEBD14FF6FF72934202D03CF8E5 -S3150800424410300BB94AF0400A81F800A033684FF0E1 -S3150800425401021A7130464FF00001FFF7BDFA044611 -S31508004264F8B907F1FF37BFB2002FAFD129E070695B -S315080042744FF000014FF02002FEF7B8FC7069B169EF -S315080042844FF00B02FEF7AAFC7369B269D27A02F000 -S3150800429418021A7333684FF001021A7101E04FF0DD -S315080042A40704204603B0BDE8F08F09F1FF37BFB213 -S315080042B43FB17AE7545D01F804900C1984F801902B -S315080042C4B5E730683169FFF72BF804460028E8D1CA -S315080042D4CDE700BFC0B2A0B940F64873C2F20003E6 -S315080042E41B6813B14FF000021A7011B14FF00003A6 -S315080042F40B7040F64873C2F2000319604FF00000D1 -S3150800430470474FF00B0070472DE9F0438DB0044613 -S315080043140091D2B2002800F0A4804FF00003036095 -S3150800432402F01F06B04606F0FE02684604A9FEF728 -S3150800433415FD0546002840F0968001AB0A9340F621 -S315080043444453C2F200030B9304A80099FFF7AEFB8B -S31508004354099F10B9002F08BF062018F01C0F4DD06E -S3150800436450B104287BD104A8FFF798FE099F0028BA -S3150800437475D146F0080606E0FB7A13F0110F76D1DC -S3150800438418F0040F76D116F0080F7CD0FCF718FE47 -S31508004394B873C0F30723FB734FEA10433B744FEA21 -S315080043A4106078744FF0000887F80B8087F81C8033 -S315080043B487F81D8087F81E8087F81F800498394679 -S315080043C4FEF726FC814638464146FEF731FC04983A -S315080043D44FF001030371B9F1000F54D0D0F83080BF -S315080043E44946FFF7BFFD002839D1049809F1FF3380 -S315080043F4C3604146FEF794FF68B130E000282ED129 -S31508004404FB7A13F0100F38D118F0020F3BD013F0D3 -S31508004414010F35D137E046F02006DDF81080D8F8CC -S315080044243030E3612762A67140463946FEF7F0FB51 -S315080044342061FA7FBB7F4FEA034343EA02633A7F6C -S3150800444413437A7F43EA0223E3604FF00003A36031 -S31508004454A361C4F80080B8F80630A38003E00546D3 -S3150800446401E04FF0090528460DB0BDE8F0834FF08A -S315080044740700F4E74FF00800F1E74FF00400EEE711 -S315080044844FF00700EBE716F0080FC6D0C3E700BFE6 -S315080044942DE9F04F82B00446894615461E464FF06C -S315080044A400033360FEF7E2FB0746002840F0CB80A2 -S315080044B4A37913F0800F40F0C18013F0010F00F0C8 -S315080044C4C080E268A368C3EB0208454538BFA8461E -S315080044D4B8F1000F00F0B78004F1240300930190AB -S315080044E4A2684FEAC2534FEAD353002B40F08880A0 -S315080044F42068857805F1FF3505EA5225EDB2CDB970 -S315080045040AB9206902E06169FEF7A2FF012806D804 -S31508004514A37963F07F03A3714FF0020793E0B0F128 -S31508004524FF3F06D1A37963F07F03A3714FF0010718 -S3150800453489E06061276861693846FEF779FF30B912 -S31508004544A37963F07F03A3714FF002077BE000EBC6 -S31508004554050A5FEA582B28D0BB780BEB05029A426A -S3150800456488BFC5EB030B78785FFA8BF34946524646 -S31508004574FCF7E0FA30B1A37963F07F03A3714FF037 -S31508004584010760E0A37913F0400F0BD0A369CAEBC7 -S31508004594030AD34506D909EB4A2000994FF4007259 -S315080045A4FEF71CFB4FEA4B253BE0A269524525D092 -S315080045B4A37913F0400F11D0787800994FF00103CE -S315080045C4FCF70CFB30B1A37963F07F03A3714FF0BA -S315080045D4010738E0A37923F04003A37123685878C8 -S315080045E4009952464FF00103FCF7A4FA30B1A379B7 -S315080045F463F07F03A3714FF0010724E0C4F818A001 -S31508004604A1684FEAC1514FEAD151C1F50075A845D1 -S3150800461438BF454601F12401611848462A46FEF783 -S31508004624DDFAA944A3685B19A36033685B19336090 -S31508004634B8EB05087FF454AF019F04E04FF0020776 -S3150800464401E04FF00707384602B0BDE8F08F00BF17 -S315080046542DE9F04F82B00446894617461E464FF0A8 -S3150800466400033360FEF702FB8046002840F0EB8027 -S31508004674A37913F0800F40F0E18013F0020F00F0E5 -S31508004684E080E368DF4280F0CF80002F00F0CC8022 -S3150800469404F1240300930190A2684FEAC2534FEA37 -S315080046A4D353002B40F09C802068857805F1FF35AC -S315080046B405EA5225EDB225BB42B923696BB94FF019 -S315080046C40001FFF725F80346206103E06169FFF757 -S315080046D41FF80346002B00F0A580012B06D1A37909 -S315080046E463F07F03A3714FF00208ACE0B3F1FF3F18 -S315080046F406D1A37963F07F03A3714FF00108A2E002 -S315080047046361A37913F0400F13D023685878A2691C -S3150800471400994FF00103FCF761FA30B1A37963F00D -S315080047247F03A3714FF001088DE0A37923F04003BA -S31508004734A371D4F8008061694046FEF779FE30B962 -S31508004744A37963F07F03A3714FF002087BE000EBC3 -S31508004754050A5FEA572B2AD098F802300BEB0502B4 -S315080047649A4288BFC5EB030B98F801005FFA8BF3EE -S3150800477449465246FCF732FA30B1A37963F07F030F -S31508004784A3714FF001085EE0A369CAEB030AD34597 -S315080047940AD909EB4A2100984FF40072FEF71EFA6B -S315080047A4A37923F04003A3714FEA4B252DE0A369AF -S315080047B4534513D0A268E3689A420FD298F80100C9 -S315080047C4009952464FF00103FCF7B4F930B1A379C6 -S315080047D463F07F03A3714FF0010834E0C4F818A00E -S315080047E4A0684FEAC0504FEAD050C0F50075AF42F2 -S315080047F438BF3D4600F12400201849462A46FEF7EC -S31508004804EDF9A37943F04003A371A944A3685B199E -S31508004814A36033685B1933607F1B7FF43DAFDDF813 -S31508004824048001E0DDF80480A368E268934288BF47 -S31508004834E360A37943F02003A37104E04FF0020870 -S3150800484401E04FF00708404602B0BDE8F08F00BF0C -S3150800485430B50446FEF70AFA00284CD1A37913F0BA -S31508004864200F48D013F0400F0ED0214651F8243BB0 -S315080048745878A2694FF00103FCF7B0F9002838D13B -S31508004884A37923F04003A3712068E169FEF748FD84 -S31508004894002830D1256AEB7A43F02003EB72E368EB -S315080048A42B77A3894FEA13236B77E389AB77E37BEB -S315080048B4EB7721692846FEF7BBF9FCF781FBA87557 -S315080048C4C0F30723EB754FEA10432B764FEA1060C3 -S315080048D468764FF00003AB74EB74A37923F02003D6 -S315080048E4A37123684FF001021A712068FEF736FD9A -S315080048F430BD4FF0010030BD10B50446FFF7A8FFE0 -S3150800490410B94FF00003236010BD00BFF0B504468C -S315080049140D46FEF7ABF90646002840F0D080A37989 -S3150800492413F0800F40F0C980E268AA4204D203F06B -S315080049340203002B08BF1546A2684FF00003A360C4 -S31508004944002D00F0BC80206887784FEA472782B19B -S3150800495402F1FF3205F1FF31B1FBF7F1B2FBF7F3D0 -S31508004964994206D3C7F100031A40A260AD1A6169D9 -S3150800497419E02169B1B9FEF7CBFE0146012806D133 -S31508004984A37963F07F03A3714FF0020697E0B0F1B1 -S31508004994FF3F06D1A37963F07F03A3714FF00106A5 -S315080049A48DE020616161002945D0BD422DD9A379E6 -S315080049B413F0020F05D02068FEF7AAFE014620B9B7 -S315080049C422E02068FEF744FD0146B1F1FF3F06D117 -S315080049D4A37963F07F03A3714FF001066FE0012901 -S315080049E403D923689B69994206D3A37963F07F03A5 -S315080049F4A3714FF0020662E06161A368DB19A36044 -S31508004A04ED1BAF42D3D300E03D46A3685B19A36010 -S31508004A144FEAC5534FEAD35383B12068FEF708FD1E -S31508004A2430B9A37963F07F03A3714FF0020646E019 -S31508004A3400EB552504E04FF0000501E04FF00005B2 -S31508004A44A3684FEAC3534FEAD35363B3A269AA428E -S31508004A5429D0A37913F0400F13D0214651F8243BEB -S31508004A6458784FF00103FCF7B9F830B1A37963F02D -S31508004A747F03A3714FF0010621E0A37923F04003D5 -S31508004A84A371214651F8243B58782A464FF001036E -S31508004A94FCF750F830B1A37963F07F03A3714FF0A4 -S31508004AA401060CE0A561A368E268934207D9E360AE -S31508004AB4A37943F02003A37101E04FF002063046C0 -S31508004AC4F0BD00BF30B58DB00DAB43F8340D0D46BF -S31508004AD4684604A94FF00002FEF740F90446A8B94F -S31508004AE401AB0A9340F64453C2F200030B9304A89D -S31508004AF40099FEF7DBFF044640B9099B23B104A8D5 -S31508004B042946FEF725FB01E04FF0060420460DB0C2 -S31508004B1430BD00BF30B596B016AB43F8580D68469D -S31508004B240DA94FF00102FEF719F900283CD101AB93 -S31508004B34139340F64453C2F2000314930DA8009944 -S31508004B44FEF7B4FF00282FD1129931B1CC7A14F0AC -S31508004B54010F2BD04FF0070026E04FF0060023E0A4 -S31508004B64012D2BD904A80DA94FF02402FEF736F817 -S31508004B74069504A84FF00201FEF7E8FCA0B904A8BC -S31508004B844FF00001FFF74CF910B1042819D00BE0D7 -S31508004B944FF0070008E025B10D982946FFF7E2F91A -S31508004BA410B90D98FEF7DAFB16B030BD0D98FEF76E -S31508004BB42FF8054614F0100FD2D102E04FF0020088 -S31508004BC4F2E70DA8FFF702F90028E4D0ECE700BFE6 -S31508004BD42DE9F04382B08146904604464FF000051D -S31508004BE401F1FF3715E0404601A94FF001026B4673 -S31508004BF4FFF74EFC009B012B0ED19DF804300D2BBC -S31508004C0408D0337004F10104264605F101050A2B80 -S31508004C1402D02646AF42E6DC4FF0000333709D42CD -S31508004C2408BF9946484602B0BDE8F08330B582B05D -S31508004C340D46C4B20A2C03D14FF00D00FFF7F6FF58 -S31508004C4402A901F8084D284669464FF0010201AB4E -S31508004C54FFF7FEFC0198012814BF4FF0FF3001202E -S31508004C6402B030BD70B505460E46007870B14FF0F7 -S31508004C7400043146FFF7DAFFB0F1FF3F09D004F12B -S31508004C84010415F8010F0028F3D104E04FF00004DD -S31508004C9401E04FF0FF34204670BD00BF80B27F2884 -S31508004CA426D911B9C7280BD11AE0FF281ED845F210 -S31508004CB42873C0F60003A0F1800033F8100070478B -S31508004CC445F22872C0F600024FF0010332F8021FBB -S31508004CD4814207D003F101039BB2802BF6D101E090 -S31508004CE44FF0000303F18000C0B270474FF0000094 -S31508004CF4704700BF80B261280ED045F24851C0F60D -S31508004D0400014FF0000202F1010231F8023F5BB1E3 -S31508004D148342F8D113B970474FF0000245F268335D -S31508004D24C0F6000333F81200704700BFA0F1300044 -S31508004D3409288CBF00200120704700BFA0F1610339 -S31508004D44DBB2192B98BF2038704700BF30B504462C -S31508004D540D4600F017F840F64C73C2F200031D60C6 -S31508004D6440F65073C2F200031C601A461368002BFF -S31508004D74FCD100F009F840F64C73C2F20003186837 -S31108004D8430BD00BF704700BF704700BF7D -S31508004D902F64656D6F70726F675F6F6C696D65788C -S31508004DA05F73746D3332703130332E7372656300FE -S31508004DB02F626F6F746C6F672E7478740000000032 -S31508004DC0433A2F576F726B2F736F667477617265EC -S31508004DD02F4F70656E424C542F5461726765742F5D -S31508004DE044656D6F2F41524D434D335F53544D33D8 -S31508004DF03246315F4F6C696D65785F53544D333277 -S31508004E00503130335F43726F7373776F726B732FE2 -S31508004E10426F6F742F6964652F2E2E2F6D61696E30 -S31508004E202E630000433A2F576F726B2F736F6674A9 -S31508004E30776172652F4F70656E424C542F546172BC -S31508004E406765742F44656D6F2F41524D434D335F2F -S31508004E5053544D333246315F4F6C696D65785F53F5 -S31508004E60544D3332503130335F43726F7373776FFB -S31508004E70726B732F426F6F742F6964652F2E2E2FF6 -S31508004E802E2E2F2E2E2F2E2E2F536F757263652FD3 -S31508004E9041524D434D335F53544D333246312F63A0 -S31508004EA0616E2E6300000000050200000602000085 -S31508004EB006030000070300000803000009030000BA -S31508004EC0090400000A0400000B0400000C0400009A -S31508004ED00C0500000D0500000E0500000F0500007A -S31508004EE00F0600001006000010070000100800005A -S31508004EF00060000800200000030000000080000891 -S31508004F00002000000400000000A0000800200000A7 -S31508004F100500000000C00008002000000600000090 -S31508004F2000E000080020000007000000000001085B -S31508004F3000200000080000000020010800200000F2 -S31508004F400900000000400108002000000A000000D7 -S31508004F5000600108002000000B0000000080010826 -S31508004F60002000000C00000000A00108002000003E -S31508004F700D00000000C00108002000000E0000001F -S31508004F8000E00108002000000F000000433A2F57F8 -S31508004F906F726B2F736F6674776172652F4F7065CA -S31508004FA06E424C542F5461726765742F44656D6F59 -S31508004FB02F41524D434D335F53544D333246315F83 -S31508004FC04F6C696D65785F53544D333250313033C9 -S31508004FD05F43726F7373776F726B732F426F6F7461 -S31508004FE02F6964652F2E2E2F2E2E2F2E2E2F2E2E26 -S31508004FF02F536F757263652F41524D434D335F537F -S31508005000544D333246312F756172742E6300000099 -S31508005010433A2F576F726B2F736F66747761726599 -S315080050202F4F70656E424C542F5461726765742F0A -S3150800503044656D6F2F41524D434D335F53544D3385 -S315080050403246315F4F6C696D65785F53544D333224 -S31508005050503130335F43726F7373776F726B732F90 -S31508005060426F6F742F6964652F2E2E2F2E2E2F2ECA -S315080050702E2F2E2E2F536F757263652F41524D4377 -S315080050804D335F53544D333246312F43726F73732A -S31508005090776F726B732F766563746F72732E630006 -S315080050A04F70656E424C5400433A2F576F726B2F00 -S315080050B0736F6674776172652F4F70656E424C54D4 -S315080050C02F5461726765742F44656D6F2F41524D79 -S315080050D0434D335F53544D333246315F4F6C696DE0 -S315080050E065785F53544D3332503130335F43726FB6 -S315080050F07373776F726B732F426F6F742F69646562 -S315080051002F2E2E2F2E2E2F2E2E2F2E2E2F536F75FF -S315080051107263652F66696C652E6300004669726D59 -S315080051207761726520757064617465207265717542 -S315080051306573742064657465637465640A0D00009C -S315080051404F70656E696E67206669726D7761726504 -S315080051502066696C6520666F722072656164696E87 -S31508005160672E2E2E000000004552524F520A0D009F -S315080051704F4B0A0D000000005374617274696E6724 -S31508005180207468652070726F6772616D6D696E67ED -S315080051902073657175656E63650A0D0050617273DB -S315080051A0696E67206669726D776172652066696CDB -S315080051B06520746F206F627461696E206572617311 -S315080051C0652073697A652E2E2E000000457261737C -S315080051D0696E672000000000206279746573206696 -S315080051E0726F6D206D656D6F7279206174203078ED -S315080051F00000000052656164696E67206C696E651F -S315080052002066726F6D2066696C652E2E2E45525289 -S315080052104F520A0D00000000496E76616C696420E1 -S31508005220636865636B73756D20666F756E642E2E85 -S315080052302E4552524F520A0D0000000050726F67F9 -S3150800524072616D6D696E67200000000020627974D6 -S31508005250657320746F206D656D6F72792061742097 -S315080052603078000057726974696E672070726F67CC -S3150800527072616D20636865636B73756D2E2E2E00E3 -S31508005280436C6F73696E67206669726D77617265C4 -S315080052902066696C650A0D004669726D77617265EC -S315080052A020757064617465207375636365737366CE -S315080052B0756C6C7920636F6D706C657465640A0D26 -S315080052C000000000222A3A3C3E3F7C7F0000000096 -S315080052D02B2C3B3D5B5D0000809A90418E418F8070 -S315080052E04545454949498E8F9092924F994F555554 -S315080052F059999A9B9C9D9E9F41494F55A5A5A6A73E -S31508005300A8A9AAABAC21AEAFB0B1B2B3B4B5B6B723 -S31508005310B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C787 -S31508005320C8C9CACBCCCDCECFD0D1D2D3D4D5D6D777 -S31508005330D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E767 -S31508005340E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F757 -S31508005350F8F9FAFBFCFDFEFF01030507090E10121A -S315080053601416181C1E0000004100420043004400A9 -S31508005370450046004700480049004A004B004C00DB -S315080053804D004E004F00500051005200530054008B -S31508005390550056005700580059005A002100E0FFF2 -S315080053A0E1FFE5FFE2FFE3FFC000C100C200C30062 -S315080053B0C400C500C600C700C800C900CA00CB00A3 -S315080053C0CC00CD00CE00CF00D000D100D200D30053 -S315080053D0D400D500D600D800D900DA00DB00DC00FE -S315080053E0DD00DE0078010001020104010601080162 -S315080053F00A010C010E01100112011401160118010F -S315080054001A011C011E01200122012401260128017E -S315080054102A012C012E0130013201340136013901ED -S315080054203B013D013F0141014301450147014A0155 -S315080054304C014E01500152015401560158015A01BE -S315080054405C015E01600162016401660168016A012E -S315080054506C016E01700172017401760179017B019C -S315080054607D01910191039203930394039503960397 -S315080054709703980399039A039B039C039D039E0332 -S315080054809F03A003A103A303A403A503A603A703DD -S31508005490A803A903AA03100411041204130414048C -S315080054A0150416041704180419041A041B041C040A -S315080054B01D041E041F0420042104220423042404BA -S315080054C0250426042704280429042A042B042C046A -S315080054D02D042E042F040104020403040404050405 -S315080054E006040704080409040A040B040C040E0441 -S315080054F00F046021612162216321642165216621EF -S315080055006721682169216A216B216C216D216E2131 -S315080055106F2121FF22FF23FF24FF25FF26FF27FFF8 -S3150800552028FF29FF2AFF2BFF2CFF2DFF2EFF2FFF19 -S3150800553030FF31FF32FF33FF34FF35FF36FF37FFC9 -S3150800554038FF39FF3AFF000061006200630064001B -S31508005550650066006700680069006A006B006C00F9 -S315080055606D006E006F0070007100720073007400A9 -S31508005570750076007700780079007A00A100A2000D -S31508005580A300A500AC00AF00E000E100E200E300E4 -S31508005590E400E500E600E700E800E900EA00EB00C1 -S315080055A0EC00ED00EE00EF00F000F100F200F30071 -S315080055B0F400F500F600F800F900FA00FB00FC001C -S315080055C0FD00FE00FF0001010301050107010901B5 -S315080055D00B010D010F011101130115011701190125 -S315080055E01B011D011F012101230125012701290195 -S315080055F02B012D012F0131013301350137013A0104 -S315080056003C013E01400142014401460148014B016B -S315080056104D014F01510153015501570159015B01D4 -S315080056205D015F01610163016501670169016B0144 -S315080056306D016F0171017301750177017A017C01B2 -S315080056407E019201B103B203B303B403B503B603F3 -S31508005650B703B803B903BA03BB03BC03BD03BE0350 -S31508005660BF03C003C103C303C403C503C603C703FB -S31508005670C803C903CA0330043104320433043404AA -S31508005680350436043704380439043A043B043C0428 -S315080056903D043E043F0440044104420443044404D8 -S315080056A0450446044704480449044A044B044C0488 -S315080056B04D044E044F045104520453045404550433 -S315080056C056045704580459045A045B045C045E04DF -S315080056D05F0470217121722173217421752176214D -S315080056E07721782179217A217B217C217D217E21D0 -S315080056F07F2141FF42FF43FF44FF45FF46FF47FF27 -S3150800570048FF49FF4AFF4BFF4CFF4DFF4EFF4FFF37 -S3150800571050FF51FF52FF53FF54FF55FF56FF57FFE7 -S3150800572058FF59FF5AFF0000C700FC00E900E200D5 -S31508005730E400E000E500E700EA00EB00E800EF001F -S31508005740EE00EC00C400C500C900E600C600F4007F -S31508005750F600F200FB00F900FF00D600DC00A2000C -S31508005760A300A500A7209201E100ED00F300FA00CE -S31508005770F100D100AA00BA00BF001023AC00BD009A -S31508005780BC00A100AB00BB009125922593250225FC -S315080057902425612562255625552563255125572536 -S315080057A05D255C255B251025142534252C251C250F -S315080057B000253C255E255F255A255425692566253D -S315080057C0602550256C256725682564256525592596 -S315080057D05825522553256B256A2518250C25882515 -S315080057E084258C2590258025B103DF009303C0030B -S315080057F0A303C303B500C403A6039803A903B4030C -S315080058001E22C603B50329226122B100652264223D -S3150800581020232123F7004822B0001922B7001A22B4 -S30D080058207F20B200A025A000BC -S30D08005828010000000400000065 +S31508000000E0110020510100080D1800080D1800081D +S315080000100D1800080D1800080D1800080D1800081E +S315080000200D1800080D1800080D1800080D1800080E +S315080000300D1800080D1800080D1800080D180008FE +S315080000400D1800080D1800080D1800080D180008EE +S315080000500D1800080D1800080D1800080D180008DE +S315080000600D1800080D1800080D1800080D180008CE +S315080000700D1800080D1800080D1800080D180008BE +S315080000800D1800080D1800080D1800080D180008AE +S315080000900D1800080D1800080D1800080D1800089E +S315080000A00D1800080D1800080D1800080D1800088E +S315080000B00D1800080D1800080D1800080D1800087E +S315080000C00D1800080D1800080D1800080D1800086E +S315080000D00D1800080D1800080D1800080D1800085E +S315080000E00D1800080D1800080D1800080D1800084E +S315080000F00D1800080D1800080D1800080D1800083E +S315080001000D1800080D1800080D1800080D1800082D +S315080001100D1800080D1800080D1800080D1800081D +S315080001200D1800080D1800080D1800080D1800080D +S315080001300D1800080D1800080D1800080D180008FD +S315080001400D1800080D1800080D1800080D180008ED +S315080001502949072291438D4628482949294A00F00A +S3150800016039F8294829492A4A00F034F829482A49F9 +S315080001702A4A00F02FF82A482A492B4A00F02AF87A +S315080001802A482B492B4A00F025F82B482B492C4A9C +S3150800019000F020F82B482C49002200F026F82B48BE +S315080001A02B49091A082903DB002202600430016082 +S315080001B01C481D49884205D00268043003B490479C +S315080001C003BCF7E700208646EC4600200021214ABA +S315080001D09047FEE7884207D0521A05D003780130C7 +S315080001E00B700131013AF9D17047884202D002708A +S315080001F00130FAE770470000E0110020F0510008CE +S3150800020000000020180000205802000858020008C4 +S3150800021070450008F051000800000020000000208A +S3150800022070450008704500087045000870450008CC +S3150800023070450008704500087045000870450008BC +S31508000240F051000818000020600F0020600F002001 +S30D08000250E00F00207503000809 +S3150800025800B5C7B04FF48C720021684604F054F90B +S315080002686946094803F0A0FF40B9009B43B19DF8C9 +S31508000278080080F01000C0F3001002E0002000E03B +S31508000288002047B05DF804FB704500080048704731 +S315080002987045000808B50748002380F828320A225E +S315080002A8054903F0EBFB18B90122024B83F828220B +S315080002B808BD00BF180000209045000870B50E4B11 +S315080002C893F82832012B02D10B4803F0A3FE01F05C +S315080002D8D5F900F16406094D402403E001F0CEF98A +S315080002E8864205D32146284600F0FAFD0028F5D0AF +S315080002F8034803F07FFF70BD180000200044004043 +S315080003087045000808B5044B93F82832012B02D12A +S31508000318014803F07FFE08BD1800002070B50646A0 +S31508000328104B93F82832012B0AD10E4903F0E8FF3F +S31508000338002805DA0B48002380F8283203F06AFEFD +S31508000348317871B1084C8025204600F0C5FD29464C +S31508000358204600F0C5FD0028F9D016F8011F002927 +S31508000368F2D170BD180000200044004000B583B0E3 +S3150800037800230093019303F1804303F504331A68B5 +S3150800038842F001021A605968554A0A405A601A68C2 +S3150800039822F0847222F480321A601A6822F48022C3 +S315080003A81A605A6822F4FE025A604FF41F029A60CD +S315080003B81A6842F480321A60194640F2DC520B6811 +S315080003C803F400330193009B01330093019B13B98F +S315080003D8009B9342F3D1434B1B6813F4003F03D1A8 +S315080003E86E21414801F016FA404B1A6842F010028D +S315080003F81A601A6822F003021A601A6842F00202A2 +S315080004081A60A3F580535A685A605A6842F400522B +S315080004185A605A6842F480625A605A6822F47C1212 +S315080004285A605A6842F4E8125A601A6842F08072AA +S315080004381A601A6812F0007FFBD02A4B5A6822F015 +S3150800044803025A605A6842F002025A601A4653680A +S3150800045803F00C03082BFAD1224B9A6942F00902D9 +S315080004689A61234A516821F00F015160516841F099 +S3150800047808015160516821F0F0015160516841F056 +S31508000488B0015160A2F54062516821F4C04151603B +S31508000498516841F480415160DA6942F00072DA61C4 +S315080004A8DA6942F40032DA619A6942F005029A6119 +S315080004B8A3F584331A6822F470621A601A6842F43B +S315080004C830621A601A6822F470421A601A6842F48E +S315080004D880421A6001F0D4F901F0E2F9FCE700BF9E +S315080004E80000FFF800100240A0450008002002405E +S315080004F8000C014038B50146074800F0D3FC064D04 +S3150800050801242146284600F0E1FC0028F9D00248D3 +S3150800051800F0CAFCC0B238BD0038004070B501F01A +S31508000528ADF800F5FA76FF252846FFF7E3FF0446F7 +S31508000538FF2803D001F0A2F88642F5D8FF2C14BF8D +S315080005480020012070BD00BF08B54FF4805103484C +S3150800055800F05AFCFF20FFF7CDFF08BD000C01404C +S3150800056810B54FF48051084800F050FCFF20FFF7FB +S31508000578C1FFFFF7D3FF18B90446FFF7E5FF00E008 +S315080005880124204610BD00BF000C014038B50446BA +S315080005980D4610F0800F07D000213720FFF7F6FF29 +S315080005A801283AD804F07F04FFF7CEFFFFF7D8FFF3 +S315080005B848B344F04000FFF79DFF280EFFF79AFF5F +S315080005C8C5F30740FFF796FFC5F30720FFF792FF25 +S315080005D8E8B2FFF78FFFE4B1082C16D00120FFF721 +S315080005E889FF0C2C02D1FF20FFF784FF0A24FF2578 +S315080005F82846FFF77FFF10F0800F0ED0631E13F012 +S31508000608FF04F5D138BDFF2038BD8720FFF772FFF4 +S31508000618ECE79520FFF76EFFE8E738BD38B50546DD +S315080006280C46FFF77BFF034618B32046FFF762FF21 +S31508000638FD2C1DD0AC1C05F2022514F8020CFFF798 +S3150800064859FF14F8010CFFF755FF0234AC42F4D1F0 +S31508000658FF20FFF74FFFFF20FFF74CFFFF20FFF7AC +S3150800066849FF00F01F00052814BF0023012300E0F6 +S315080006780123184638BD00BFF8B504460D4600F0F4 +S31508000688FDFF00F16407FF263046FFF733FFFF2812 +S3150800069805D100F0F3FF8742F6D80020F8BDFE28FA +S315080006A816D10234FF263046FFF724FF04F8020C59 +S315080006B83046FFF71FFF04F8010C0234023DF2D159 +S315080006C8FF20FFF717FFFF20FFF714FF0120F8BDEB +S315080006D80020F8BD002840F05981B24B1B7813F06A +S315080006E8020F03D0AF4B1878C0B270472DE9F04314 +S315080006F889B00121082000F08BFB01214FF48040C6 +S3150800070800F094FB4FF48057ADF800704FF01009CD +S315080007188DF8039003268DF80260A34C6946204697 +S3150800072800F022FB3946204600F06EFB4FF42043C2 +S31508000738ADF800308DF8026018238DF80330694645 +S31508000748204600F011FB4FF48043ADF800304823EB +S315080007588DF803306946204600F006FB0025ADF8FB +S3150800076808504FF48273ADF80A30ADF80C50ADF85E +S315080007780E50ADF810504FF40073ADF81230382308 +S31508000788ADF81430ADF816500723ADF81830DFF871 +S31508000798208202A9404600F057FB2946404600F049 +S315080007A887FB0121404600F06FFB3946204600F0DA +S315080007B82BFB4FF40045ADF804508DF806608DF80C +S315080007C8079001A9204600F0CFFA2946204600F0EE +S315080007D81BFB0A27022644463146204600F076FBCC +S315080007E80028F9D0FF21204600F05CFB01252946A0 +S315080007F8204600F06BFB0028F9D0013FECD14FF4F6 +S315080008080043ADF8043003238DF8063018238DF815 +S315080008180730654C01A9204600F0A6FA4FF4805126 +S31508000828204600F0F3FA00210846FFF7AFFE012834 +S3150800083840F0AE8000F022FF00F57A744FF4D571C7 +S315080008480820FFF7A3FE012842D107AE08AF3546B0 +S315080008584FF0FF084046FFF74DFE05F8010BBD426D +S31508000868F8D19DF81E30012B40F092809DF81F3074 +S31508000878AA2B40F08D804FF08048A92500F0FEFE8F +S31508000888844205D941462846FFF780FE0028F5D157 +S3150800089800F0F4FE84427BD900213A20FFF776FE61 +S315080008A8002875D1FF242046FFF724FE06F8010B19 +S315080008B8BE42F8D19DF81C3003F04003DBB2002B8A +S315080008C814BF0C220422394B1A60FFF73DFE24E0B8 +S315080008D80021A920FFF75AFE012887BF01273D46B0 +S315080008E80227A925002600F0C9FE844205D9314603 +S315080008F82846FFF74BFE0028F5D100F0BFFE8442D4 +S3150800090846D94FF400711020FFF740FE00283FD162 +S31508000918264B1F60FFF718FE7FB3224A137803F0A9 +S31508000928FE031370224D0021284600F0ADFA002474 +S31508000938ADF808404FF48273ADF80A30ADF80C40AC +S31508000948ADF80E40ADF810404FF40073ADF812300C +S315080009580823ADF81430ADF816400723ADF818305B +S3150800096802A9284600F070FA2146284600F0A0FA9F +S315080009780121284600F088FA04E00A4A137843F069 +S3150800098801031370074B1878C0B207E001207047B7 +S315080009980022064B1A60FFF7D7FDEEE709B0BDE857 +S315080009A8F08300BF00000020000C0140440200202C +S315080009B80038004018B9034B1878C0B270470120B0 +S315080009C8704700BF00000020002838D170B50D46D2 +S315080009D81C46B3B31D4B1B7813F0010F33D11C4BC0 +S315080009E81B6813F0080F08BF5202012C0DD11146D7 +S315080009F81120FFF7CBFDE0B94FF400712846FFF741 +S31508000A083BFEB0FA80F4640913E011461220FFF79A +S31508000A18BDFD70B94FF4007631462846FFF72CFE1F +S31508000A2818B105F50075013CF6D100210C20FFF731 +S31508000A38ADFDFFF789FD201C18BF012070BD0420F5 +S31508000A487047042070BD032070BD00BF0000002059 +S31508000A5844020020002847D170B50D4616461C46A4 +S31508000A68002B43D0244B1B7813F0010F40D1224B9F +S31508000A781B7813F0040F3DD1204B1B6813F0080FA1 +S31508000A8808BF5602012C0CD131461820FFF77EFD07 +S31508000A9820BBFE212846FFF7C1FDB0FA80F4640999 +S31508000AA81CE013F0060F03D021469720FFF76EFDCA +S31508000AB831461920FFF76AFD80B9FC2631462846D3 +S31508000AC8FFF7ACFD18B105F50075013CF6D1FD2117 +S31508000AD80020FFF7A3FD002808BF0124FFF734FD0F +S31508000AE8201C18BF012070BD04207047042070BD63 +S31508000AF8032070BD022070BD0000002044020020BB +S31508000B08002840F02681964B1B7813F0010F40F019 +S31508000B18228170B584B014460E2900F2FF80DFE8FA +S31508000B2811F00F001500FD005C00FD00FD00FD003A +S31508000B38FD00FD00FD00B700BC00CA00D700E800AC +S31508000B48FFF70EFDB0FA80F46409FEE000210920DB +S31508000B58FFF71CFD002840F0E38010216846FFF7E0 +S31508000B688BFD002800F0DE809DF800309B09012BDC +S31508000B7810D19DF808209DF8093003EB02229DF84C +S31508000B8807301B0403F47C13013313449B022360C8 +S31508000B980024DAE09DF808209DF807309B0003EB4F +S31508000BA892129DF806309B0203F4406313440133FE +S31508000BB89DF8052002F00F029DF80A1002EBD112E3 +S31508000BC8911C9DF80920520002F006020A44D2B286 +S31508000BD8093A934023600024B7E0624B1B6813F078 +S31508000BE8040F21D000218D20FFF7D0FC002840F003 +S31508000BF89B80FF20FFF77EFC10216846FFF73CFD27 +S31508000C08002800F093803025FF263046FFF772FC4F +S31508000C186B1E13F0FF05F8D19DF80A301A09102340 +S31508000C2893402360002490E000210920FFF7AEFCDA +S31508000C3800287DD110216846FFF71EFD002879D0C7 +S31508000C48484B1B6813F0020F11D09DF80A305B0059 +S31508000C5803F07E039DF80B2003EBD21301339DF8AE +S31508000C680D209209013A9340236000246DE09DF80F +S31508000C780B10CB0003F0180303EB51119DF80A205B +S31508000C88C2F38402531C01FB0333236000245CE08F +S31508000C98344B1B681370002457E000210920FFF71E +S31508000CA875FC002848D110212046FFF7E5FCB0FA64 +S31508000CB880F4640949E000210A20FFF767FCE8BBCD +S31508000CC810212046FFF7D8FCB0FA80F464093CE006 +S31508000CD800213A20FFF75AFC90BB651E0334FF260D +S31508000CE83046FFF707FC05F8010FAC42F8D1002497 +S31508000CF82BE01C4B1B6813F0040F23D000218D2012 +S31508000D08FFF744FC00BBFF20FFF7F4FB4021204611 +S31508000D18FFF7B2FCB0FA80F4640916E0042414E07C +S31508000D28012412E0012410E001240EE001240CE05D +S31508000D3801240AE0012408E0012406E0012404E06D +S31508000D48012402E0012400E00124FFF7FDFB204608 +S31508000D5803E0042070470320704704B070BD00BF45 +S31508000D680000002044020020F0B5CB7803F00F06F7 +S31508000D7813F0100F1CBF8B781E430B78F3B1056868 +S31508000D88002301274FF00F0C07FA03F20C8832EA02 +S31508000D9804040FD19C000CFA04FE25EA0E0506FA8F +S31508000DA804F42543CC78282C01D1426102E0482C6A +S31508000DB808BF02610133082BE6D105600B88FF2BB3 +S31508000DC820D94568002301274FF00F0E03F10802C2 +S31508000DD807FA02F20C8832EA04040FD19C000EFACC +S31508000DE804FC25EA0C0506FA04F42543CC78282CD5 +S31508000DF808BF4261CC78482C08BF02610133082B2A +S31508000E08E4D14560F0BD00BF016170474161704794 +S31508000E1821B1054B9A69104398617047024A93694C +S31508000E2823EA0000906170470010024021B1054B83 +S31508000E38DA691043D8617047024AD36923EA000081 +S31508000E48D06170470010024010B4038803F4415477 +S31508000E580A884B8813438A881343CA8813430A891E +S31508000E6813434A8913438A891343CA891343234375 +S31508000E789BB20380838B23F400631B041B0C8383B8 +S31508000E880B8A038210BC704729B103889BB243F0CA +S31508000E98400303807047038823F040031B041B0C98 +S31508000EA80380704781817047808980B2704700BF88 +S31508000EB829B103889BB243F400530380704703881B +S31508000EC823F400531B041B0C03807047038919423B +S31508000ED814BF012000207047C1F3080181807047BC +S31508000EE80388194214BF012000207047F8B5484AFC +S31508000EF802F1240E4FF4FA7748F6A040157854788C +S31508000F082B1903FB077390FBF3F103FB110139B99E +S31508000F1890FBF3F39EB2731E9BB2B3F5806F03D3AF +S31508000F2802329645EAD16EE03A4B00225A611A68AF +S31508000F3842F400421A601B6813F4004F06D0354F76 +S31508000F4800F028FD3B6813F4004FF9D1314B1A68B5 +S31508000F5822F002021A601A6842F001021A605B68F7 +S31508000F6813F0010F06D12B4F00F014FD7B6813F020 +S31508000F78010FF9D0013D013C240544EA0545731ED5 +S31508000F881D43244AD561136823F001031360536887 +S31508000F9813F0010F06D0144600F0FCFC636813F042 +S31508000FA8010FF9D11B4BD3F8002242F00102C3F80E +S31508000FB80022D3F81C2222F00102C3F81C22D3F817 +S31508000FC80C2242F00102C3F80C220022C3F8402280 +S31508000FD8C3F84422D3F8042222F00102C3F80422F3 +S31508000FE8D3F8142222F00102C3F81422D3F81C22DB +S31508000FF842F00102C3F81C22D3F8002222F00102AB +S31508001008C3F80022F8BDE221034800F003FC8BE789 +S3150800101888460008006400400446000838B50446B7 +S315080010280D46224B9B6813F0806F04D140F22111BC +S315080010381F4800F0EFFB1D4BD3F8802102F0010290 +S31508001048C3F88021D3F8802142F07C4242F400128A +S31508001058C3F88021C3F88451E078A1780A0442EAE3 +S31508001068006122780A43617842EA0122C3F8882196 +S31508001078E079A1790A0442EA006122790A4361798A +S3150800108842EA0122C3F88C21D3F8802142F00102F2 +S31508001098C3F880219B6813F0806F06D1034C00F0D3 +S315080010A879FCA36813F0806FF9D038BD0064004056 +S315080010B8044600081B4BDB6813F0030F2FD0194BA7 +S315080010C8D3F8B02140F26763B3EB525F20D1154BD2 +S315080010D8D3F8B8210270D3F8B821120A4270D3F8A7 +S315080010E8B821120C8270D3F8B821120EC270D3F840 +S315080010F8BC210271D3F8BC21120A4271D3F8BC216B +S31508001108120C8271D3F8BC311B0EC371012000E0A2 +S315080011180020044AD36843F02003D36070470020B0 +S31508001128704700BF0064004008B500F067FB08BDBB +S3150800113810B500F06BFA88B100F0EAFB00F08AFAFD +S3150800114800F068FA20F0604020F07F00044B186031 +S3150800115800F060FA446800F053FBA04710BD00BFD2 +S3150800116808ED00E072B170B50D46561EB6B2441EBB +S31508001178064415F8013B04F8013F00F00BFCB4429D +S31508001188F7D170BD704700BF024A136943F0800360 +S31508001198136170470020024070B506460B4D0024BF +S315080011A800F0F8FB2B68B3420AD86A6813449E42D3 +S315080011B806D204EB4401054B03EB8101087A70BD9E +S315080011C801340C350D2CEBD1FF2070BDAC46000858 +S315080011D82DE9F04107460068FFF7DEFFFF2849D0EA +S315080011E8264B274A5A6002F188325A603422DA6056 +S315080011F8DB6813F0010304D0FFF7C6FF0020BDE83B +S31508001208F0811E490A6942F001020A610C463A68E9 +S3150800121803EB02081E1DBD59A9B29952E36813F0DB +S31508001228010F05D000F0B6FBE36813F0010FF9D1FA +S315080012382B0CA8F80230E36813F0010F05D000F06C +S31508001248A9FBE36813F0010FF9D1D8F800309D42DD +S3150800125805D13346B6F5007FD9D1012400E000242C +S31508001268064A136923F001031361FFF78DFF204629 +S31508001278BDE8F0810020BDE8F08100BF00200240EB +S315080012882301674538B50D46114B984207D00446E1 +S31508001298104B994208D0FFF79BFF08B911E00E4C8E +S315080012A8C5F308037BB900E0094C2368AB420CD0A8 +S315080012B8204640F8045B4FF400722946FFF752FFB0 +S315080012C803E0002038BD002038BD204638BD00BFE1 +S315080012D848020020006000084C0400202DE9F0416F +S315080012E806460C4617461D4621F4FF7828F00108DD +S315080012F80368B3F1FF3F06D140F8048B4FF4007238 +S315080013084146FFF72FFF3368984505D041463046D2 +S31508001318FFF7B8FF0646E0B13368E41A34440434E4 +S3150800132808F5007800F036FB331DE31AB3F5007F9D +S3150800133806D341463046FFF7A5FF064660B1041DA9 +S3150800134817F8013B04F8013B013DEBD10120BDE844 +S31508001358F0810020BDE8F0810020BDE8F08100BFDB +S315080013684FF0FF33024A1360024A1360704700BF02 +S315080013784C0400204802002070B504460D4616465F +S31508001388FFF70AFFFF2814D0681E2044FFF704FF5A +S31508001398FF2810D024F4FF7323F00103074A934269 +S315080013A82B46324621460CBF05480648FFF796FFE6 +S315080013B870BD002070BD002070BD00BF0060000829 +S315080013C8480200204C0400202DE9F04106460C4648 +S315080013D8FFF7E2FE0546601E3044FFF7DDFE85424C +S315080013E800F286800446EB1EDBB2FB2B00F28380F4 +S315080013F80F2800F28380434B434A5A6002F1883229 +S315080014085A603422DA60DB6813F0010F04D0FFF75C +S31508001418BBFE0020BDE8F0813A4A136943F002038F +S3150800142813613A4FB846002600F0B4FA98F808301F +S31508001438AB4205D106EB4602344B53F8225006E078 +S31508001448013608F10C080D2EEED14FF0FF35B846D7 +S31508001458002600F09FFA98F80830A34205D106EB53 +S3150800146846022A4B53F8228006E0013608F10C0892 +S315080014780D2EEED14FF0FF38002600F08BFA3B7A96 +S31508001488A34206D106EB4602204B03EB82025368B9 +S3150800149804E001360C370D2EEFD10023C5EB0808FA +S315080014A84344C3F38F23CBB15E1EB6B205F58063FA +S315080014B803EB8626134C6561236943F040032361D1 +S315080014C8E36813F0010F05D000F064FAE36813F037 +S315080014D8010FF9D105F58065B542ECD1094A1369BA +S315080014E823F002031361FFF74FFE0120BDE8F081E0 +S315080014F80020BDE8F0810020BDE8F0810020BDE8A5 +S31508001508F08100BF0020024023016745AC46000869 +S31508001518114B1B68B3F1FF3F18D000B583B00E4BCB +S3150800152859689A681144DA6811441A6911445A695B +S3150800153811449A691144DA698B185B4202AA42F87F +S31508001548043D04210548FFF717FF01E0012070470D +S3150800155803B05DF804FB00BF48020020506100088C +S315080015680D4B1A6804331B6813440C4A1268134453 +S315080015780B4A126813440B4A11680B440432126862 +S315080015881A44094B1B681344084A1268D3420CBF0D +S3150800159801200020704700BF0060000808600008A6 +S315080015A80C60000810600008186000085061000800 +S315080015B808B50C4B1B68B3F1FF3F04D00948FFF781 +S315080015C807FE034660B1084B1B68B3F1FF3F06D018 +S315080015D80548FFF7FDFD031C18BF012300E001239A +S315080015E8184608BD480200204C04002000487047E9 +S315080015F80060000808B5FFF7B3FE08BD08B5FFF791 +S31508001608BBFE08BD08B5FFF7DFFE08BD08B5FFF73E +S31508001618A7FF08BD08B5FFF7E9FF08BD08B5FFF736 +S3150800162877FF034610B1FFF7C3FF0346184608BD00 +S31508001638054B00221A60054959609A600521196008 +S31508001648034B1A60704700BF10E000E03F1901001D +S31508001658500600200022014B1A60704710E000E08F +S31508001668044B1B6813F4803F03D0034A13680133FD +S315080016781360704710E000E05006002008B5FFF731 +S31508001688EFFF014B186808BD500600200E4B1B8853 +S3150800169803F080039BB29BB180B20B4B98801B88E2 +S315080016A803F080039BB26BB910B5074C00F072F9CA +S315080016B8238803F080039BB2002BF7D0012010BDC6 +S315080016C8002070470120704700440040084B00225C +S315080016D81A819A811A829A821A8340F271221A8189 +S315080016E89A8992B242F4005242F00C029A817047E3 +S315080016F800440040F8B505460C46402903D98D2113 +S31508001708114800F087F82046FFF7C0FF012803D0E4 +S3150800171891210D4800F07EF8A3B29BB16C1E013BDF +S315080017289BB21D44084F9A2600F034F914F8010FA5 +S31508001738FFF7ACFF012803D03146384600F06AF8AF +S31508001748AC42F1D1F8BD00BF4847000838B5254B6B +S315080017581C78CCB9244B1B8803F020039BB2002BBA +S315080017683DD0214B9B889BB2204A137013F0FF0388 +S3150800177829D0FFF783FF1E4B186000221D4B1A70ED +S315080017880122184B1A702AE0174B1B8803F020030E +S315080017989BB2E3B117490A78134B9D88134B9C18DB +S315080017A865700132D2B20A701B7893420DD112497C +S315080017B8FFF7D8FC00220B4B1A7001240FE000240F +S315080017C8084B1C700BE01C4609E0002407E0FFF7ED +S315080017D855FF074B1B6864339842F0D80024204607 +S315080017E838BD00BF96060020004400405406002075 +S315080017F898060020950600205506002072B6704700 +S3150800180862B6704708B53821014800F003F808BDE4 +S31508001818CC47000808B500F0BDF8FCE708B500F0A5 +S31508001828B3F8012816D000F0E3FA98B10A4B1B78EA +S31508001838012B0FD1FFF722FF084B1B6803F5FA7334 +S31508001848984207D30022044B1A7000F0D9FA08B94F +S31508001858FFF76EFC08BD00BF9C060020A006002006 +S3150800186808B50122044B1A70FFF708FF034B1860E6 +S31508001878FFF7D4FF08BD00BF9C060020A00600207D +S3150800188808B5FFF751FC00F083F8FFF7D1FEFFF71C +S31508001898B1FE00F097FA00F00FF8FFF7E1FF08BD70 +S315080018A808B500F077F8FFF7DBFE00F0CDFB00F08F +S315080018B813F8FFF7B3FF08BD10B500F077F8FFF780 +S315080018C815FB044C01232370FFF700FF0023237040 +S315080018D810BD00BF0100002008B50B48FFF7EAFB5A +S315080018E8012805D10122094B1A70074800F07CF82F +S315080018F80548FFF72BFF012805D10022034B1A706C +S31508001908014800F071F808BDA4060020010000206F +S31508001918704700BF38B504460D46084B1B78012B9F +S3150800192802D1C9B2FFF77AFB044B1B781BB9E9B297 +S315080019382046FFF7DFFE00F04FF838BD010000200B +S31508001948074B1B78022B06D0032B06D0012B0CBF9E +S31508001958082040207047002070470020704700BFC5 +S3150800196801000020074B1B78022B06D0032B06D054 +S31508001978012B0CBF08204020704700207047002024 +S31508001988704700BF0100002008B500F01DF808BD23 +S31508001998704700BF704700BF034BFE22DA70187104 +S315080019A80222A3F844207047E4060020054B0022CB +S315080019B81A709A6483F84320A3F844209A705A70D8 +S315080019C8704700BFE4060020024B1878003018BF9D +S315080019D801207047E40600200022024B83F84320C2 +S315080019E8704700BFE406002038B50378FF2B22D1DC +S315080019F800F0FEF918B91020FFF7CEFF61E1AD4CEB +S31508001A080023637001252570FF22E27010222271D7 +S31508001A186371FFF795FFA071FFF7A4FFE071FFF761 +S31508001A28A1FF000A20726572A5720823A4F844303B +S31508001A38FFF7E0FD45E104469E4A1278012A40F080 +S31508001A486081C93B352B00F23981DFE813F0C00005 +S31508001A58370137012F01370137012601DB00150148 +S31508001A6805013701370137013701370137013701D2 +S31508001A783701370137013701370137013701370190 +S31508001A883701370137013701370137013701370180 +S31508001A983701370137013701370137013701370170 +S31508001AA837017600510036006D00370137013701D6 +S31508001AB892003701A400A800B6004578FFF740FF52 +S31508001AC80138854203DD2220FFF766FFF9E0794DE4 +S31508001AD86278A96C281DFFF745FBFF23EB7063782E +S31508001AE8AA6C1344AB6463780133A5F84430E8E07C +S31508001AF84578FFF725FF0138854203DD2220FFF7E1 +S31508001B084BFFDEE061686B4DA9646278281DFFF714 +S31508001B1829FBFF23EB706378AA6C1344AB646378DC +S31508001B280133A5F84430CCE0624BFF22DA704268EC +S31508001B389A640122A3F84420DDE05E4BFF22DA709E +S31508001B489A6C406840B11044002312F8011B0B44F4 +S31508001B58DBB29042F9D100E00023564AC2F80730B2 +S31508001B68012313710023537193710823A2F8443093 +S31508001B78C1E0504BFF22DA704F4A9A6400221A7164 +S31508001B885A719A710721D9711A725A729A72082269 +S31508001B98A3F84420AFE00020FFF7FEFE91E0454B8E +S31508001BA8FF22DA7000221A71597859719A71DA7116 +S31508001BB81A720622A3F844209DE03E4B00221A70AA +S31508001BC85A70FF22DA700122A3F8442093E0394BB1 +S31508001BD89D6CFFF7B5FE621C411E2846FFF70EFDF1 +S31508001BE818B93120FFF7D8FE6BE0324CFF23E370B3 +S31508001BF8FFF7A6FE0138A36C0344A3640123A4F8DF +S31508001C08443078E04578FFF79BFE0238854203DDC5 +S31508001C182220FFF7C1FE54E0264BFF22DA70012284 +S31508001C28A3F84420617839B9FFF7F8FC002848D1A9 +S31508001C383120FFF7B1FE44E0A21C1E4B986CFFF753 +S31508001C48DDFC18B93120FFF7A7FE3AE0194A637890 +S31508001C58916C0B44936434E0164CFF23E37000251B +S31508001C6825716571FFF76CFEA071E57125726572BD +S31508001C780723A4F844303EE041680E4B986CFFF7FA +S31508001C88C1FC18B93120FFF787FE1AE0094BFF2275 +S31508001C98DA700122A3F844202DE0FFF749FA054B2C +S31508001CA8FF22DA700122A3F8442024E03120FFF746 +S31508001CB873FE06E0E40600205C4800082020FFF7CB +S31508001CC86BFE104B93F84330012B02D11020FFF717 +S31508001CD863FE0C4BB3F94410002912DD09480123A9 +S31508001CE880F8433089B20330FFF714FE38BD054B38 +S31508001CF8B3F94410F2E7034B93F84330012BF6D1B6 +S31508001D08E4E738BDE406002010B4034602460C484A +S31508001D180131A0FB0242D208FAD100220A70084C07 +S31508001D28A4FB0302D20802EB8200A3EB400330337C +S31508001D3801F8013D1346002AF2D1084610BC70473F +S31508001D48CDCCCCCC70B5441E451C002614F8010F22 +S31508001D5802F0D0FBC0B2A0F13003DBB2162B11D8C3 +S31508001D68A0F13A02D2B2062A0ED9092B84BFA0F1ED +S31508001D783703DBB203EB061303F0FF06AC42E5D1E3 +S31508001D88304670BD002070BD002070BD38B50446C9 +S31508001D980D460009092801D9373003E0303002F02A +S31508001DA8A9FBC0B2287004F00F00092801D93730FA +S31508001DB803E0303002F09EFBC0B268700023AB70B7 +S31508001DC8284638BD08B50022054B1A700549064845 +S31508001DD801F022FE18B177210448FFF71BFD08BD5C +S31508001DE870070020644800087C0700206848000837 +S31508001DF8024B1878B0FA80F040097047700700203F +S31508001E0808B5FFF7C1FD01280AD0084B1B784BB95E +S31508001E18FEF71EFA012807D10122044B1A7008BDDD +S31508001E28002008BD002008BD002008BD7007002056 +S31508001E3810B50446007802F05DFB53280DD160788A +S31508001E4802F052FB58B16378312B0AD0322B0AD0EC +S31508001E58332B0CBF0220032010BD032010BD03201E +S31508001E6810BD002010BD012010BD00BF70B5064684 +S31508001E780230FFF767FF054684B204363046FFF797 +S31508001E8861FF2844C5B2013CA4B20236012CF5D834 +S31508001E983046FFF757FFED43EDB2854214BF0020E1 +S31508001EA8012070BD2DE9F04104461646884601B161 +S31508001EB820B940F261216348FFF7ACFC2046FFF7DA +S31508001EC8B7FF0546032800F0A0802046FFF7CEFF97 +S31508001ED8002800F09D80012D2CD015B1022D5AD06E +S31508001EE89AE0A01CFFF72EFF0746201DFFF72AFFDA +S31508001EF80002C8F80000A01DFFF724FFD8F8003034 +S31508001F081844C8F800000834F81E07B2002E00F076 +S31508001F188680B846002F40F3858000252046FFF7BF +S31508001F2811FF705502340135ADB24545F6DB384622 +S31508001F38BDE8F081A01CFFF705FF0746201DFFF73F +S31508001F4801FF0004C8F80000A01DFFF7FBFED8F83B +S31508001F58003003EB0020C8F8000004F10800FFF77A +S31508001F68F1FED8F800301844C8F800000A34381FBB +S31508001F7807B2002E59D0B846002F59DD002520464D +S31508001F88FFF7E0FE705502340135ADB24545F6DB7C +S31508001F983846BDE8F081A01CFFF7D4FE0746201D89 +S31508001FA8FFF7D0FE0006C8F80000A01DFFF7CAFE16 +S31508001FB8D8F8003003EB0040C8F8000004F1080020 +S31508001FC8FFF7C0FED8F8003003EB0020C8F8000079 +S31508001FD804F10A00FFF7B6FED8F800301844C8F826 +S31508001FE800000C34781F07B22EB3B846002F25DD3B +S31508001FF800252046FFF7A6FE705502340135ADB216 +S315080020084545F6DB3846BDE8F0810020BDE8F08195 +S315080020184FF0FF30BDE8F0810020BDE8F081384672 +S31508002028BDE8F0813846BDE8F0813846BDE8F0815C +S315080020383846BDE8F0813846BDE8F0813846BDE83F +S31508002048F08100BF6848000870B5AC4B1B78002BB8 +S3150800205800F0E681012B29D1FFF7CCFAFEF71AF929 +S31508002068A748FEF75BF9A748FEF758F9FEF70EF9F1 +S3150800207801220146A44801F001FD30B1A348FEF744 +S315080020884DF90120FEF73EF970BDA148FEF746F95D +S31508002098A048FEF743F9A048FEF740F99F4B0022EF +S315080020A81A605A600222954B1A7070BD022B40F0CE +S315080020B8EF809B4C04F50C724FF48071994802F036 +S315080020C8F5F894F841326BB19048FEF727F90220E3 +S315080020D8FEF718F904F50C7001F09CFF0022874BEF +S315080020E81A7070BD002874D08E48002200F5C07199 +S315080020F8FFF7D8FE0446B0F1FF3F0CD18348FEF738 +S315080021080DF90320FEF7FEF87F4801F083FF002249 +S315080021187A4B1A7070BD00285BDD804B5B6833B953 +S315080021287E4B804AD2F880211A60586051E07B4A73 +S3150800213812681A447B49D1F88011914203D10344A5 +S31508002148764A536045E07248FEF7E8F87648FEF79F +S31508002158E5F8764E714D31466868FFF7D5FD304685 +S31508002168FEF7DCF87248FEF7D9F83146E878FFF743 +S315080021780DFEB11CA878FFF709FE311D6878FFF730 +S3150800218805FEB11D2878FFF701FE3046FEF7C6F8AA +S315080021986848FEF7C3F869682868FFF733FA60B92C +S315080021A85A48FEF7BBF80520FEF7ACF8564801F082 +S315080021B831FF0022514B1A7070BD5548FEF7AEF82C +S315080021C85548FEF7ABF8554B564AD2F880211A609F +S315080021D85C60534BD3F84422D3F83C329A4240F019 +S315080021E81F810021484801F027FF60B14748FEF7DC +S315080021F895F80420FEF786F8434801F00BFF0022FD +S315080022083E4B1A7070BD454B5B68002B39D0404869 +S31508002218FEF784F84448FEF781F8444D3F4C2946B2 +S315080022286068FFF771FD2846FEF778F84048FEF71C +S3150800223875F82946E078FFF7A9FDA91CA078FFF7E5 +S31508002248A5FD291D6078FFF7A1FDA91D2078FFF7D0 +S315080022589DFD2846FEF762F83648FEF75FF861687E +S315080022682068FFF7CFF960B92848FEF757F8052020 +S31508002278FEF748F8244801F0CDFE00221F4B1A70D5 +S3150800228870BD2348FEF74AF803221C4B1A7070BD26 +S31508002298032B40F0C580224C04F50C724FF480716C +S315080022A8204802F003F894F841326BB12248FEF749 +S315080022B835F80220FEF726F804F50C7001F0AAFE98 +S315080022C800220E4B1A7070BD00287CD0154800F500 +S315080022D8807200F5C071FFF7E5FD0646B0F1FF3FCD +S315080022E82ED11648FEF71AF80320FEF70BF806480B +S315080022F801F090FE0022014B1A7070BD700700208D +S31508002308DC48000800490008AC09002028490008EC +S3150800231830490008384900085C4900087407002055 +S315080023287C070020D40B00208C49000830070020C1 +S31508002338984900083C4A0008B4490008D8490008E2 +S31508002348002840DD3748FDF7E9FF374C2146304677 +S31508002358FFF7DAFC2046FDF7E1FF3448FDF7DEFF14 +S31508002368334D214695F88301FFF710FDA11C95F812 +S315080023788201FFF70BFD211D95F88101FFF706FD80 +S31508002388A11D95F88001FFF701FD2046FDF7C6FF58 +S315080023982848FDF7C3FF05F580723146D5F8800150 +S315080023A8FFF72CF960B92448FDF7B8FF0620FDF7B2 +S315080023B8A9FF224801F02EFE0022214B1A7070BD93 +S315080023C82048FDF7ABFF204BD3F84422D3F83C321C +S315080023D89A4225D11D48FDF7A1FFFFF71FF960B9F5 +S315080023E81548FDF79BFF0720FDF78CFF134801F0FA +S315080023F811FE0022124B1A7070BD1248FDF78EFFA7 +S315080024081348FDF78BFF0D4801F004FE1148FDF748 +S3150800241885FF00220A4B1A70FDF750FFFEF788FE63 +S3150800242870BD00BFFC490008300700200C4A0008A8 +S31508002438D40B00203C4A000828490008AC090020AB +S3150800244870070020304900087C070020244A000845 +S31508002458404A0008584A0008C278837843EA0222A4 +S31508002468437843EA0223007840EA0320704700BF0E +S315080024783AB101388A1811F8013B00F8013F914230 +S31508002488F9D1704702394369023B99423DBF4389EE +S31508002498806A01FB03000020704700BF00F10B01AA +S315080024A80023DA0142EA530310F8012B134403F018 +S315080024B8FF038842F5D11846704700BF0168E1B1A5 +S315080024C810B40C781F2C09D93A2C1FD00A4612F8D2 +S315080024D8013F1F2B04D93A2BF9D105E023460A46B2 +S315080024E83A2B18BF002013D14B1C9A4208D1302C1E +S315080024F809D10231016000200AE04FF0FF30704729 +S315080025084FF0FF3004E04FF0FF3001E00A46EBE7F2 +S3150800251810BC704738B50C4670B1054603685BB100 +S315080025281A784AB1D9888288914205D15878FEF72F +S3150800253841FA10F0010F03D000232360092038BDA3 +S315080025482B682360002038BDC37833B32DE9F041E2 +S315080025580446C56A00F1300701232A4639464078F9 +S31508002568FEF778FAD8B90023E370236AEB1AA2694A +S31508002578934217D2A678012E17D94FF00108A369F6 +S315080025881D4443462A4639466078FEF763FA013EF3 +S31508002598012EF4D10020BDE8F08100207047012003 +S315080025A8BDE8F0810020BDE8F0810020BDE8F08193 +S315080025B870B5C36A8B4213D004460D46FFF7C4FFAD +S315080025C8064670B901232A4604F130016078FEF7F9 +S315080025D8FBF900281CBF01264FF0FF35E56200E02D +S315080025E80026304670BD00BF10B50446FFF7ACFF9D +S315080025F80346002852D12378032B47D12379012B88 +S3150800260844D104F1300104F50C700B46002203F896 +S31508002618012B8342FBD1552384F82E32AA2384F84A +S315080026282F32522384F8303084F83130612384F805 +S315080026383230412284F83320722084F8140284F850 +S31508002648150284F8162284F81732236984F8183292 +S315080026581A0A84F819221A0C84F81A221B0E84F806 +S315080026681B32E36884F81C321A0A84F81D221A0CED +S3150800267884F81E221B0E84F81F32E2690132E262D0 +S3150800268801236078FEF7E6F9002323710022114634 +S315080026986078FEF735FA031C18BF0123184610BDE3 +S315080026A82DE9F843012940F283804369994280F06D +S315080026B8818017460C4605460378022B3DD0032B26 +S315080026C851D0012B78D101EB5108016A01EB582149 +S315080026D8FFF76EFF0646002840F0858008F10109D5 +S315080026E8C8F3080814F0010F13D0A84498F8303036 +S315080026F803F00F0343EA071388F830300123EB7019 +S31508002708296A01EB59212846FFF752FF002859D0B4 +S3150800271854E0A84488F830700123EB70296A01EB65 +S3150800272859212846FFF744FF002850D048E0A94415 +S3150800273889F830200123EB7055E0016A01EB142172 +S31508002748FFF736FF064600284DD1630003F4FF73EA +S31508002758EA1882F830701346C7F3072283F831203F +S315080027680123EB703FE0016A01EBD411FFF720FF64 +S315080027780646C0BB27F07047A40004F4FE7404F1AB +S315080027883008A8444046FFF767FE00F0704040EA64 +S3150800279807022C4484F83020130A88F80130130CF1 +S315080027A888F80230120E88F803200123EB701AE025 +S315080027B8022618E0022616E0022614E0064612E06B +S315080027C8064610E0C9F30809C7F30712AFE7C9F3C5 +S315080027D8080905EB090393F8303023F00F03C7F30C +S315080027E803221A43A3E73046BDE8F8838A76C2F37C +S315080027F80723CB760378032B03D1120C0A75120A22 +S315080028084A7570472DE9F84300238B758369002BB1 +S3150800281872D00D460646436AB3F1FF3F1DD0836A58 +S315080028289F1C188888B101F115080024A146494655 +S3150800283801F092FD58B1FF2C0BD0013408F8010FAE +S3150800284837F8020B0028F2D104E0002402E000243D +S3150800285800E000242C440023A375A87D0024234601 +S315080028682E275A1CF169CB5C202B22D0052B08BFD2 +S31508002878E523092A05D108B929198F7529194F7227 +S31508002888013429194B7298B9A3F14101C9B219291A +S315080028980CD8F169097B082A8CBF4FF0100E4FF047 +S315080028A8080E1EEA010F1CBF2033DBB229198B75E7 +S315080028B8013413460B2AD4D138B92B1900229A7534 +S315080028C8F3691B7B934208BF14462C4400236372A2 +S315080028D8F369DB7A2B72F0691C30FFF7BDFD2860B7 +S315080028E8F269517E137E43EA0123AB80F269D17DF2 +S315080028F8937D43EA0123EB80BDE8F883012955D97E +S31508002908F8B506687369994252D20C463378022B91 +S3150800291829D0032B39D0012B4CD101EB5105316A4B +S3150800292801EB55213046FFF743FE002844D16F1CBA +S31508002938C5F30805354495F83050316A01EB572137 +S315080029483046FFF735FE002839D1C7F308073E4455 +S3150800295896F8300045EA002014F0010F14BF000964 +S31508002968C0F30B00F8BD316A01EB14213046FFF7B6 +S315080029781FFE38BB610001F4FF71731893F8310024 +S3150800298893F8303043EA0020F8BD316A01EBD411D8 +S315080029983046FFF70DFEC0B9A00000F4FE703030CF +S315080029A83044FFF759FD20F07040F8BD0120704704 +S315080029B80120F8BD0120F8BD4FF0FF30F8BD4FF0F3 +S315080029C8FF30F8BD4FF0FF30F8BD4FF0FF30F8BDC7 +S315080029D8B1F5001F46D22DE9F04106460C4611F01E +S315080029E81F0F41D1D0F800803161856885B998F8FC +S315080029F80030022B02D9D8F8243043B9B8F8083081 +S31508002A08B3EB541F33D9D8F82430B3611BE01D46FD +S31508002A18B8F80A707F02BC4210D329463046FFF739 +S31508002A286DFF0546B0F1FF3F24D0012825D9D8F80F +S31508002A381430984224D2E41BA742EED929464046C8 +S31508002A48FFF720FDB0617561B369E3B103EB542361 +S31508002A58B36108F13003C4F308042344F361002082 +S31508002A68BDE8F081022070470220BDE8F081022007 +S31508002A78BDE8F0810120BDE8F0810220BDE8F081BB +S31508002A880220BDE8F0810220BDE8F0812DE9F04179 +S31508002A9807460668884631B9F56885B173699D425F +S31508002AA828BF01250CE0FFF729FF012846D9B0F110 +S31508002AB8FF3F46D07369984252D3454600E0012540 +S31508002AC82C46013473699C4202D3012D3DD9022450 +S31508002AD821463846FFF712FF38B1012838D0B0F139 +S31508002AE8FF3F38D0AC42ECD139E04FF0FF322146EF +S31508002AF83046FFF7D5FD0346C8B9B8F1000F06D02A +S31508002B08224641463046FFF7CBFD034678B9F460BE +S31508002B1833697269023A93423CBF03F1FF33336162 +S31508002B28337943F0010333712046BDE8F081012B60 +S31508002B380CBF4FF0FF300120BDE8F0810120BDE849 +S31508002B48F0814FF0FF30BDE8F0810020BDE8F08144 +S31508002B580120BDE8F0814FF0FF30BDE8F081002084 +S31508002B68BDE8F0812DE9F0410E46012930D907461E +S31508002B781146046863699E422DD22AB14FF0FF3286 +S31508002B882046FFF78DFD48BB4FF00008314638460A +S31508002B98FFF7B4FE054618B3012824D0B0F1FF3F65 +S31508002BA824D0424631462046FFF77AFD08BB2369FA +S31508002BB8B3F1FF3F05D001332361237943F00103BD +S31508002BC823712E4663699D42E0D30020BDE8F08153 +S31508002BD80220BDE8F0810220BDE8F081BDE8F08159 +S31508002BE80020BDE8F0810220BDE8F0810120BDE89B +S31508002BF8F081BDE8F08100BF8369002B76D02DE906 +S31508002C08F04705692035B5F5001F71D28846044690 +S31508002C180668C5F30807002F61D101338361416946 +S31508002C2841B93389B3EB551F59D80023836104206A +S31508002C38BDE8F0877389013B13EA55234FD1FFF79F +S31508002C485DFE8146012856D9B0F1FF3F56D0736913 +S31508002C5898423DD3B8F1000F04D10023A36104209C +S31508002C68BDE8F08761692046FFF710FF814600280E +S31508002C7847D0012848D0B0F1FF3F48D03046FFF783 +S31508002C8863FC002846D106F1300306F50C710022CC +S31508002C9803F8012B8B42FBD149463046FFF7F2FB76 +S31508002CA8F0624FF000084FF0010A0AE086F803A020 +S31508002CB83046FFF749FC80BB08F10108F36A01337F +S31508002CC8F36273899845F1D3F36AC8EB0303F36291 +S31508002CD8C4F8149049463046FFF7D4FBA06125612D +S31508002CE830373744E7610020BDE8F087042070478D +S31508002CF80420BDE8F0870220BDE8F0870120BDE87A +S31508002D08F0870720BDE8F0870220BDE8F087012094 +S31508002D18BDE8F0870120BDE8F0870120BDE8F08707 +S31508002D282DE9F843044605680669416AB1F1FF3F8B +S31508002D3803D0FFF74DFE0346D8B94FF0E50801273B +S31508002D484FF00009A1692846FFF732FC034668B91F +S31508002D58E26982F80080EF702269964209D94946E5 +S31508002D682046FFF749FF03460028EBD0042B08BF87 +S31508002D7802231846BDE8F8832DE9F04F85B00546C5 +S31508002D88D0F800B00021FFF723FE002840F0A680FF +S31508002D984FF0FF336B624FF0FF0AD1461F46A96909 +S31508002DA85846FFF705FC002840F09980EC69267814 +S31508002DB8002E00F09580E37A03F03F02AA71E52E0B +S31508002DC804D013F0080F05D00F2A05D06F624FF00C +S31508002DD8FF097BE00F2A5AD1D5F82880B8F1000FE9 +S31508002DE874D016F0400F06D094F80DA006F0BF066A +S31508002DF82B696B6204E0B14518BF4FF0FF0965D12E +S31508002E08637B009353455FD1E27EA37E53EA022390 +S31508002E187DD1237803F03F03013B03EB430203EB21 +S31508002E288203DFF80CA10121CDF804B003961E46EB +S31508002E3802951AF8013BE2185578E35C43EA05253A +S31508002E4881B1FE2E58D8284601F0A8FA834606F11D +S31508002E58010938F8160001F0A1FA834550D1294628 +S31508002E684E4603E04FF6FF739D424DD12F4B53450F +S31508002E78DFD1DDF804B03246039E029D237813F0AD +S31508002E88400F33D091B338F812307BB33FE0B9F12D +S31508002E98000F04D12046FFF701FB824522D02A6A93 +S31508002EA8D37A13F0010F37D00AE011F8013B10F86E +S31508002EB8012B9B1A8C4202D0002BF6D000E09BB15E +S31508002EC86F624FF0FF0901E04FF0FF09002128461D +S31508002ED8FFF792FE00283FF462AF24E023E022E0E1 +S31508002EE8042020E000201EE000201CE0013E5FFAD6 +S31508002EF886F9DDF800A0E9E7DDF804B0029D06E0EA +S31508002F08DDF804B0029D02E0DDF804B0029DDDF8A4 +S31508002F1800A04FF0FF09D9E7611C501C14F80B3BB9 +S31508002F2812789B1AC8E705B0BDE8F08F254B00084C +S31508002F38184B00082DE9F04F8BB0076AFB7A13F097 +S31508002F48A00F40F03E81D0F828A0BAF800304BB15F +S31508002F5853464FF0000808F1010833F8022F002AF3 +S31508002F68F9D101E04FF000080446036801930C22E2 +S31508002F78394607A8FFF77CFA9DF8273013F0010FA2 +S31508002F8875D00023FB72A3620B2207A93846FFF700 +S31508002F986FFA012633464FF07E0920251FE00B22DB +S31508002FA807A93846FFF764FA052E17D9AAF1020EBB +S31508002FB833460EE0102102F0010000EB43035208E5 +S31508002FC813F4803F1CBF83F4883383F02103013947 +S31508002FD8F1D13EF8022F002AECD100E033460DF174 +S31508002FE81C0E072203F00F0000F13001392988BFAB +S31508002FF800F13701013A0EF8011D1B09F2D10AAB97 +S31508003008134403F8149C62B13B78202B0BD039463D +S31508003018002301339A4207D011F8010F2028F8D166 +S3150800302802E0002300E00023F9180133072A05D82F +S315080030380AA8104410F8140C013200E0284601F8D2 +S31508003048010B072BF1D92046FFF796FE20B9013662 +S31508003058642EA4D10720D3E0642E00F0B480042897 +S3150800306840F0B3809DF82730FB72C4F828A09DF875 +S31508003078273013F0020F07D008F10C08624DA5FB9C +S315080030880835AD08013500E00125276800212046E6 +S31508003098FFF79EFC0346002840F0AC8000264FF058 +S315080030A80108A1693846FFF783FA0346002840F065 +S315080030B8A180E3691B78E52B00D01BB90136B54218 +S315080030C801D19AE0002641462046FFF795FD0346BA +S315080030D80028E6D08EE02169A1EB45112046FFF7C6 +S315080030E877FC034600287CD1206AFFF7D7F90290B7 +S315080030F800260396A1690198FFF75AFA034600289D +S315080031086FD1D4F82880E1695FFA85F99DF8083007 +S315080031184B734FF00F03CB720E738E76CE7609F18A +S31508003128FF3303EB430003EB8000384A02F10D0C2A +S31508003138039B4FF6FF774FF0FF0ABB4248D000F1D2 +S31508003148010E38F81030107801EB000B0B54180AEA +S315080031588BF8010013B970463B4600E07046013209 +S315080031686245EAD14FF6FF72934202D038F810301A +S315080031780BB949F0400981F800900123019AD370E8 +S3150800318831462046FFF738FD034650BB013DB1D10D +S3150800319829E0E36903F12001002203F8012B99428B +S315080031A8FBD10B22216AE069FFF762F9E269236A13 +S315080031B8DB7A03F0180313730123019AD3700020EE +S315080031C81EE006201CE007201AE019E0072017E091 +S315080031D892F800E001EB0E0B01F80EA08BF801A09F +S315080031E8BDE718460CE0A1690198FFF7E1F9002840 +S315080031F8CFD005E0042BE9D0F3E7013DF3D06AE721 +S315080032080BB0BDE8F08F00BF4FECC44E184B000852 +S3150800321810B504460023C3704FF0FF33C362FFF7A7 +S31508003228C7F9F0B994F82F2294F82E3243EA022304 +S315080032381BB20F4A934216D104F16600FFF70CF940 +S3150800324820F07F400B4B98420FD004F18200FFF71D +S3150800325803F920F07F40074B984214BF022000204C +S3150800326810BD042010BD032010BD002010BD00BFEE +S3150800327855AAFFFF464154002DE9F04385B00E468E +S31508003288174600230B60FFF719F9051EC0F22E81B1 +S31508003298C04B53F82540002C00F02A81346007F00B +S315080032A8FE07237883B16078FDF784FB10F0010FD9 +S315080032B80AD1002F00F01E8100F00400C0B20028D1 +S315080032C80CBF00200A206FE100232370E8B2607063 +S315080032D8FDF700FA10F0010F40F00E811FB110F04B +S315080032E8040F40F00B8100212046FFF791FF0228C2 +S315080032F825D16E4604F5FB7504F236286F464FF05D +S31508003308000915F8043C1BB12846FFF7A5F800E0A4 +S31508003318484647F8040B1035A845F2D104AF4FF0D4 +S31508003328030856F8045B35B129462046FFF770FFAF +S31508003338012801D802E14046BE42F2D100E0002544 +S31508003348042800F0DD80012888BF0D2000F22C81B2 +S3150800335894F83C2094F83B3043EA02231BB2B3F5B1 +S31508003368007F40F0CF8094F8477094F8463053EAC7 +S31508003378072704D104F15400FFF76EF80746A7613A +S3150800338894F8409084F8029009F1FF33DBB2012BD8 +S3150800339800F2BA8094F83D60B3B26381002B00F05E +S315080033A8B580731E334240F0B38094F8428094F88F +S315080033B8413043EA0828A4F8088018F00F0F40F0AF +S315080033C8A98094F8440094F8433053EA002003D1BE +S315080033D804F15000FFF740F894F83F2094F83E307F +S315080033E853EA022300F0988007FB09F903EB181142 +S315080033F849448842C0F09280401AB0FBF6F6002E7F +S3150800340800F08E8040F6F572964294BF0122022299 +S315080034184FF6F570864200F2958002366661E561D8 +S315080034282B4423622944A162032A15D194F85B2008 +S3150800343894F85A3053EA022374D1B8F1000F73D1BD +S3150800344804F15C00FFF708F86062B30003F2FF13A3 +S31508003458B7EB532F6AD38AE0B8F1000F68D04B440C +S315080034686362022A0FBF760006EB460306F00106DA +S3150800347806EB530675E0691C2046FFF799F828BB42 +S315080034880023237194F82F2294F82E3243EA022354 +S315080034981BB2414A93421BD104F13000FEF7DCFF08 +S315080034A83E4B984216D104F50570FEF7D5FF3C4BFE +S315080034B8984211D104F50670FEF7CEFF206104F58F +S315080034C80770FEF7C9FFE060032206E0032204E05E +S315080034D8032202E0032200E003222270314A1388FD +S315080034E801339BB21380E38000205DE00B205BE08C +S315080034F80C2059E0002057E0032055E00A2053E045 +S31508003508012051E00D204FE00D204DE00D204BE045 +S315080035180D2049E00D2047E00D2045E00D2043E049 +S315080035280D2041E00D203FE00D203DE00D203BE059 +S315080035380D2039E0012037E00D2035E004287FF416 +S3150800354807AFF7E702366661E5612B4423626B1815 +S31508003558A3626BE74FF0FF332361E360802323718F +S31508003568BBE706F2FF16B7EB562FE5D3F2E74FF09F +S31508003578FF332361E3608023237194F8612094F86C +S31508003588603043EA02231BB2012B3FF474AF0322CF +S31508003598A3E700BF5C0F002055AAFFFF52526141FE +S315080035A872724161580F002005B0BDE8F08300BF6C +S315080035B82DE9F04F83B00446894607684FF0FF0A9D +S315080035C855460426D0464FF6FF7B7AE03846FEF77E +S315080035D8EFFF0646002878D1E0690378002B7ED0ED +S315080035E8C27A02F03F02A271E52B5DD02E2B5DD080 +S315080035F822F02001082914BF00210121494557D185 +S315080036080F2A48D113F0400F06D090F80DA003F002 +S31508003618BF032269626203E09D4218BF45464AD144 +S3150800362890F80DE0D64545D1C17E827E52EA012240 +S315080036384ED1A26A11460192027802F03F02013A77 +S3150800364802EB420602EB8606284D05F10D0A4FF0F5 +S31508003658010C009363468C4615F8012B81184978A6 +S31508003668825C42EA012233B1FE2E31D82CF81620A4 +S315080036781346013601E05A452AD1AA45ECD1009BE2 +S31508003688027812F0400F26D0FE2E21D80022019982 +S3150800369821F816201FE01DB9FEF700FF824520D045 +S315080036A84FF0FF3363621CE0454604E0454602E0F6 +S315080036B8454600E0454600212046FFF79DFA06469E +S315080036C818B9A169002981D15EB10023A36108E070 +S315080036D8F2464546EFE7013BDDB2F246EBE704263C +S315080036E8F3E7304603B0BDE8F08F00BF184B000873 +S315080036F8CA7E8B7E43EA02230278032A05D1487DCF +S315080037080A7D42EA002243EA02431846704700BF88 +S315080037182DE9F04F85B00546D0F80090884611F88F +S31508003728013B2F2BFAD05C2BF8D00023AB6098F816 +S3150800373800301F2B08D82B6A8022DA720021284607 +S31508003748FFF746F903465CE14FF0010AAE6A98F8B6 +S3150800375800001F280DD92F280ED05C280FD0A6F1F7 +S31508003768020B474601241AE02F280AD05C2811D1F3 +S3150800377807E00024534604E00024534601E00024E9 +S3150800378853464344984613F8012B2F2AFAD05C2A45 +S31508003798F8D01FE0B3F5807F00F029811C46514612 +S315080037A800F0DAFD0146002800F021817F2809D8B3 +S315080037B8222800F0E880954A12F8013F13B198428A +S315080037C8FAD1E0E02BF8021F631C17F8010F1F282F +S315080037D8CAD8D6E7202834BF04270027002C00F0CB +S315080037E8F28006EB440232F8023D202B01D02E2B3C +S315080037F803D1013CF7D1B346E6E06000002326F87A +S315080038081430002C00F0F3802B6A03F10B012022F8 +S3150800381803F8012B9942FBD1B11E002300E00133BE +S3150800382831F8022F202AFAD02E2AF8D0002B00F0D9 +S31508003838CF8047F00307CBE0013C05D10822019267 +S3150800384800220292039204E032F8021D2E29F3D1CF +S31508003858F4E703F1010B36F81300002860D0202896 +S3150800386803D02E2805D1A34503D047F003075B46A6 +S31508003878EFE7029B019A934202D2A34519D1B8E011 +S31508003888019B0B2B06D147F003072B6A1A78E52A02 +S3150800389856D14AE0A34502D047F0030740D8039B10 +S315080038A89B00DBB2039323460B220192082202925D +S315080038B8CFE77F2840F29380002100F04DFD0346AC +S315080038C8002800F09B80524A134413F8801C88B2DB +S315080038D847F0020740B12B2906D04E4A12F8013F95 +S315080038E8002B7ED08B42F9D147F003075F200FE003 +S315080038F8039B43F0020303930AE0A0F161039BB21A +S31508003908192B05D8039B43F001030393203880B28B +S315080039182B6A02990A4658545B460132029298E77E +S315080039282B6A1A78E52A04D101E00B2201920522AE +S315080039381A70019B082B03D1039B9B00DBB20393E8 +S31508003948039A02F00C030C2B03D002F00302032A95 +S3150800395801D147F0020717F0020F0AD1039A02F0BD +S315080039680302012A08BF47F01007042B08BF47F0CF +S3150800397808072B6ADF722846FFF7FEF92B6ADA7AF8 +S31508003988034660B101E006233BE0042839D102F07A +S315080039980402D2B2002A14BF0346052331E012F006 +S315080039A8040F2ED1AB7913F0100F0AD02B69C3F385 +S315080039B8080303F1300149444846FFF799FEA86011 +S315080039C8C4E605231DE0B3460023ABF80030DAE762 +S315080039D802383218315A2E293FF430AF2CE70146FF +S315080039E879E7A0F141039BB2192B81D985E706230C +S315080039F807E0019B0B2B7FF452AF44E747F0020719 +S31508003A0872E7184605B0BDE8F08F00BF844A00087B +S31508003A18984A0008904A000810B584B001900091A9 +S31508003A28144604A840F8041DFEF748FD002816DBCE +S31508003A38114B53F820300BB100221A70019BA3B121 +S31508003A4800221A70019B0C4A42F820304BB1012C0F +S31508003A5809D1002201A96846FFF70EFC0AE00B20E7 +S31508003A6808E0002006E0002004E00023024A42F8A5 +S31508003A782030184604B010BD5C0F00202DE9F0432D +S31508003A8893B00191002800F09C800446154600234F +S31508003A98036002F01F06324606A901A8FFF7ECFBE9 +S31508003AA8002840F09080069B079303AB0F935A4B68 +S31508003AB81193019907A8FFF72BFE0346002840F043 +S31508003AC883800F9B93F90B30002B80F288807FE068 +S31508003AD8042B40F08C8007A8FFF72CFA46F0080656 +S31508003AE8034650B193E09DF8223013F0110F40F0C9 +S31508003AF8878015F0040F40F0858016F0080F46D029 +S31508003B080E9B00259D73DD736121197448225A742A +S31508003B180E9B9D75DD7519765A7620220E9BDA72EC +S31508003B28069FDDF8388041463846FFF7E1FD8146AD +S31508003B382A4641463846FEF759FE0E9B1D775D779D +S31508003B489D77DD770122069BDA70B9F1000F1CD044 +S31508003B58069BDD6A0022494607A8FFF703F80346CD +S31508003B68002854D129460698FEF722FD09F1FF33A5 +S31508003B78069AD36048B14BE015F0020F02D013F04D +S31508003B88010F41D115F0080F01D046F02006069B13 +S31508003B98DB6A23620E9B6362069D0E9F394628469A +S31508003BA8FFF7A6FDA06007F11C00FEF755FCE060CC +S31508003BB8002060746061E06126742560EB88A38044 +S31508003BC826E0092024E023E015F01C0F0BD07FE738 +S31508003BD815F01C0F18BF062309D1062303E015F0B4 +S31508003BE81C0F80D106E0002BD6D0184610E046F008 +S31508003BF80806F8E79DF8223013F0100F06D1BBE740 +S31508003C08072005E0082003E0072300E004231846F8 +S31508003C1813B0BDE8F08300BF580D00202DE9F04F1A +S31508003C2885B00446884615461F4600233B6003A907 +S31508003C38FEF770FC002840F0A280607C002840F05F +S31508003C48A280237C13F0010F00F09A80E368666966 +S31508003C589E1BAE4228BF2E46002E00F0938004F124 +S31508003C68280301936369C3F30802002A6DD1039AEE +S31508003C785289013A12EA532912D10BB9A06803E00E +S31508003C88A1692046FEF73AFE012802D80220607488 +S31508003C9879E0B0F1FF3F02D10120607473E0A061BA +S31508003CA8DDF80CA0A1695046FEF7ECFB054610B9ED +S31508003CB80220607467E04D445FEA562B24D0BAF8B0 +S31508003CC80A3009EB0B029A4288BFC9EB030B5B461D +S31508003CD82A4641469AF80100FCF776FE10B10120FB +S31508003CE8607450E0237C13F0400F0AD0E069401B4B +S31508003CF8834506D94FF40072019908EB4020FEF770 +S31508003D08B7FB4FEA4B252EE0E26995421CD0237C87 +S31508003D1813F0400F0DD0012301999AF80100FCF71A +S31508003D2899FE10B1012060742DE0237C23F040032E +S31508003D38237401232A46019903984078FCF744FE20 +S31508003D4810B1012060741EE0E5616169C1F30801DC +S31508003D58C1F50075B54228BF354628312A4621449B +S31508003D684046FEF785FBA84463692B4463613B68B4 +S31508003D782B443B60761B7FF475AF002003E002E016 +S31508003D88072000E0002005B0BDE8F08F2DE9F04FC8 +S31508003D9885B00446884616461F4600233B6003A995 +S31508003DA8FEF7B8FB002840F0BD80607C002840F08C +S31508003DB8BB80237C13F0020F00F0B5806369F342D9 +S31508003DC828BFDE43002E00F0A78004F128030193DC +S31508003DD86369C3F30802002A7DD1039A5289013A16 +S31508003DE812EA53291DD133B9A06858B900212046CB +S31508003DF8FEF74CFE03E0A1692046FEF747FE0028B9 +S31508003E0800F08A80012802D1022060748CE0B0F1A3 +S31508003E18FF3F02D10120607486E0A061A36803B958 +S31508003E28A060237C13F0400F0ED00123E2690199A4 +S31508003E3803984078FCF70EFE10B10120607473E011 +S31508003E48237C23F040032374DDF80CA0A1695046AF +S31508003E58FEF718FB054610B90220607464E04D4465 +S31508003E685FEA562B24D0BAF80A3009EB0B029A42B5 +S31508003E7888BFC9EB030B5B462A4641469AF80100F8 +S31508003E88FCF7E8FD10B1012060744DE0E169491BB3 +S31508003E988B450AD94FF4007208EB41210198FEF7C1 +S31508003EA8E7FA237C23F0400323744FEA4B2524E0E2 +S31508003EB8E3699D420ED06269E3689A420AD20123F1 +S31508003EC82A4601999AF80100FCF77EFD10B10120EF +S31508003ED8607429E0E5616069C0F30800C0F50075FB +S31508003EE8B54228BF354628302A4641462044FEF7BB +S31508003EF8BFFA237C43F040032374A84463692B4420 +S31508003F086361E268934238BF1346E3603B682B4413 +S31508003F183B60761B7FF45CAF237C43F02003237455 +S31508003F28002001E000E0072005B0BDE8F08F00BFDB +S31508003F3870B582B004460E460A2902D10D21FFF74C +S31508003F48F7FF6368002B14DB5D1C23441E733C2DA6 +S31508003F580BDD01AB2A4604F10C012068FFF716FFB2 +S31508003F68019B5D1B18BF4FF0FF356560A3680133D9 +S31508003F78A36002B070BD00BF30B583B0044601A97E +S31508003F88FEF7C8FA00283ED1237C13F0200F3BD051 +S31508003F9813F0400F0CD00123E26904F128010198B7 +S31508003FA84078FCF757FD88BB237C23F0400323742D +S31508003FB8216A0198FEF7FCFA50BB656AEB7A43F06A +S31508003FC82003EB72A26829462068FEF70FFCE3680F +S31508003FD82B771A0A6A771A0CAA771B0EEB7700232F +S31508003FE8AB75EB7561222A7648226A76AB74EB7450 +S31508003FF80122019BDA700198FEF7F6FA237C23F072 +S315080040082003237404E003E0002001E00120FFE711 +S3150800401803B030BD10B582B00446FFF7ADFF0346BE +S3150800402838B901A92046FEF775FA034608B90022E9 +S315080040382260184602B010BD70B582B004460D4617 +S3150800404801A9FEF767FA002840F0A880607C0028D6 +S3150800405840F0A880E268AA4206D2237C03F002034D +S31508004068DBB2002B08BF1546636900226261002D82 +S3150800407800F09580019A568976026BB1013B6A1E53 +S31508004088B2FBF6F2B3FBF6F18A4205D37242134045 +S315080040986361ED1AA16912E0A16879B92046FEF7AD +S315080040A8F5FC0146012802D1022060747AE0B0F1D5 +S315080040B8FF3F02D10120607474E0A060A161002965 +S315080040C837D0B54225D9237C13F0020F05D02046F0 +S315080040D8FEF7DCFC014620B91AE02046FEF70EFC7E +S315080040E80146B1F1FF3F02D1012060745AE0012967 +S315080040F803D9019B5B69994202D30220607451E097 +S31508004108A161636933446361AD1BAE42DBD300E04A +S31508004118354663692B446361C5F308035BB10198A7 +S31508004128FEF7B0F910B9022060743BE000EB55259C +S3150800413802E0002500E000256369C3F3080313B30A +S31508004148E26995421FD0237C13F0400F0ED0012355 +S3150800415804F1280101984078FCF77CFC10B101208D +S3150800416860741FE0237C23F04003237401232A4646 +S3150800417804F1280101984078FCF726FC10B10120C3 +S3150800418860740FE0E5616369E268934209D9E36000 +S31508004198237C43F020032374002003E002E0002078 +S315080041A800E0002002B070BD30B591B001900D4610 +S315080041B8002205A901A8FFF75FF80446A8B902ABCB +S315080041C80D930B4B0F93019905A8FFF7A1FA04461F +S315080041D858B90D9B93F90B30002B05DB2DB12946F1 +S315080041E805A8FEF70FFB00E00624204611B030BDEF +S315080041F8580D002070B59CB00190022205A901A8A7 +S31508004208FFF73AF8059B11930346002848D102ABF5 +S315080042181993254B1B93019911A8FFF779FA0346B9 +S3150800422800283DD1199B93F90B30002B35DB9DF8F7 +S315080042384A4014F0010F32D11DE006950896002170 +S3150800424806A8FEF7C5FB034650BB002106A8FFF7DC +S31508004258AFF90346F8B1042816D021E036B1002292 +S31508004268314611A8FEF77EFC0346C8B90598FEF73D +S31508004278BBF9034614E0059D18992846FFF738FA4E +S31508004288064614F0100FD8D111A8FEF749FD0346C3 +S315080042980028E3D004E0072302E0062300E007230A +S315080042A818461CB070BD00BF580D00202DE9F04116 +S315080042B882B080461746054600244E1E12E06B4615 +S315080042C8012201A93846FFF7A9FC009B012B0DD14D +S315080042D89DF804300D2B05D06A1C2B7001340A2B67 +S315080042E803D01546B442EADB00E0154600232B70D6 +S315080042F89C4214BF4046184602B0BDE8F08100BF8C +S3150800430810B594B0044601910023029303930178EB +S3150800431851B101A8FFF70CFE14F8011F0029F8D1BE +S31508004328029A002A01DA0CE000226B4604A90198D1 +S31508004338FFF72CFD40B9009B029A9A4207D10398C9 +S3150800434807E04FF0FF3004E04FF0FF3001E04FF090 +S31508004358FF3014B010BD00BF7F281BD911B9C72874 +S3150800436808D112E0FF2814D8A0F180030A4A32F8C7 +S3150800437813007047084A012332F8021F814205D004 +S3150800438801339BB2802BF7D100E000238033D8B2E3 +S3150800439870470020704700BF284B0008F0B524492D +S315080043A8244BB0F5805F38BF1946074604310C46DA +S315080043B831F8043C002B39D0984237D331F8022C0F +S315080043C8150AD2B2BE46D618B04229DA082D2DD813 +S315080043D8DFE805F0050A101316191C1F2200C3EB9F +S315080043E8070E31F81E00F0BDC31A03F00103C01A00 +S315080043F880B2F0BD103880B2F0BD203880B2F0BD6A +S31508004408303880B2F0BD1A3880B2F0BD083080B2B4 +S31508004418F0BD503880B2F0BDA0F5E35080B2F0BDCB +S315080044280431002DC3D104EB4201BFE7F0BD00BF3C +S31508004438284C0008E44C00087F2805D8034B185C6C +S31508004448034B5B5C184070470020704770510008A2 +S3150800445804500008A0F16103192B98BF203870474B +S31508004468A0F14103192B98BF203070477F2805D83B +S31508004478034B185C034B5B5C184070470020704779 +S315080044887051000804500008A0F16103192B98BF61 +S3150800449820387047A0F14103192B98BF2030704780 +S315080044A87F299ABF017001206FF02E00704700BF60 +S315080044B85AB10A787F2A0AD800B102600021196021 +S315080044C85960501A18BF01207047002070476FF0CE +S315080044D82E00704708B5034B5B689B681B689847AE +S315080044E808BD00BF0400002008B50421FFF7F2FF45 +S315080044F808BD00BF08B5034B5B689B685B689847AF +S3150800450808BD00BF040000208446002A2AD010F0FF +S31508004518030F04D000F8011B013A23D0F7E7282A2D +S315080045281CD3A2F128022DE9F00F01F0FF0141EA98 +S31508004538012141EA014141EA01610B460C460D4653 +S315080045480E460F46884689468A468B46A0E8FA0FDD +S31508004558283AFBD2BDE8F00F283203D000F8011B31 +S30D08004568013AFBD160467047D9 +S315080045702F64656D6F70726F675F6F6C696D6578B4 +S315080045805F73746D3332703130332E737265630026 +S315080045902F626F6F746C6F672E747874000000005A +S315080045A0433A2F576F726B2F736F66747761726514 +S315080045B02F4F70656E424C542F5461726765742F85 +S315080045C044656D6F2F41524D434D335F53544D3300 +S315080045D03246315F4F6C696D65785F53544D33329F +S315080045E0503130335F43726F7373776F726B732F0B +S315080045F0426F6F742F6964652F2E2E2F6D61696E59 +S315080046002E630000433A2F576F726B2F736F6674D1 +S31508004610776172652F4F70656E424C542F546172E4 +S315080046206765742F44656D6F2F41524D434D335F57 +S3150800463053544D333246315F4F6C696D65785F531D +S31508004640544D3332503130335F43726F7373776F23 +S31508004650726B732F426F6F742F6964652F2E2E2F1E +S315080046602E2E2F2E2E2F2E2E2F536F757263652FFB +S3150800467041524D434D335F53544D333246312F63C8 +S31508004680616E2E630000000005020602060307039A +S315080046900803090309040A040B040C040C050D0598 +S315080046A00E050F050F061006100710080060000813 +S315080046B00020000003000000008000080020000021 +S315080046C00400000000A0000800200000050000000B +S315080046D000C00008002000000600000000E00008F6 +S315080046E0002000000700000000000108002000006C +S315080046F00800000000200108002000000900000052 +S3150800470000400108002000000A00000000600108BF +S31508004710002000000B0000000080010800200000B7 +S315080047200C00000000A00108002000000D00000099 +S3150800473000C00108002000000E00000000E001088B +S31508004740002000000F000000433A2F576F726B2FAE +S31508004750736F6674776172652F4F70656E424C543D +S315080047602F5461726765742F44656D6F2F41524DE2 +S31508004770434D335F53544D333246315F4F6C696D49 +S3150800478065785F53544D3332503130335F43726F1F +S315080047907373776F726B732F426F6F742F696465CB +S315080047A02F2E2E2F2E2E2F2E2E2F2E2E2F536F7569 +S315080047B07263652F41524D434D335F53544D333227 +S315080047C046312F756172742E63000000433A2F57E5 +S315080047D06F726B2F736F6674776172652F4F706592 +S315080047E06E424C542F5461726765742F44656D6F21 +S315080047F02F41524D434D335F53544D333246315F4B +S315080048004F6C696D65785F53544D33325031303390 +S315080048105F43726F7373776F726B732F426F6F7428 +S315080048202F6964652F2E2E2F2E2E2F2E2E2F2E2EED +S315080048302F536F757263652F41524D434D335F5346 +S31508004840544D333246312F43726F7373776F726BE1 +S31508004850732F766563746F72732E63004F70656E7F +S31508004860424C5400303A0000433A2F576F726B2F70 +S31508004870736F6674776172652F4F70656E424C541C +S315080048802F5461726765742F44656D6F2F41524DC1 +S31508004890434D335F53544D333246315F4F6C696D28 +S315080048A065785F53544D3332503130335F43726FFE +S315080048B07373776F726B732F426F6F742F696465AA +S315080048C02F2E2E2F2E2E2F2E2E2F2E2E2F536F7548 +S315080048D07263652F66696C652E6300004669726DA2 +S315080048E0776172652075706461746520726571758B +S315080048F06573742064657465637465640A0D0000E5 +S315080049004F70656E696E67206669726D776172654C +S315080049102066696C6520666F722072656164696ECF +S31508004920672E2E2E000000004552524F520A0D00E7 +S315080049304F4B0A0D000000005374617274696E676C +S31508004940207468652070726F6772616D6D696E6735 +S315080049502073657175656E63650A0D005061727323 +S31508004960696E67206669726D776172652066696C23 +S315080049706520746F2064657465637420657261735D +S315080049806520626C6F636B732E2E2E004572617301 +S31508004990696E6720000000002062797465732066DE +S315080049A0726F6D206D656D6F727920617420307835 +S315080049B00000000052656164696E67206C696E6567 +S315080049C02066726F6D2066696C652E2E2E455252D2 +S315080049D04F520A0D00000000496E76616C6964202A +S315080049E0636865636B73756D20666F756E642E2ECE +S315080049F02E4552524F520A0D0000000050726F6742 +S31508004A0072616D6D696E672000000000206279741E +S31508004A10657320746F206D656D6F727920617420DF +S31508004A203078000057726974696E672070726F6714 +S31508004A3072616D20636865636B73756D2E2E2E002B +S31508004A40436C6F73696E67206669726D776172650C +S31508004A502066696C650A0D004669726D7761726534 +S31508004A602075706461746520737563636573736616 +S31508004A70756C6C7920636F6D706C657465640A0D6E +S31508004A8000000000222A3A3C3E3F7C7F00000000DE +S31508004A902B2C3B3D5B5D0000809A45418E418F8003 +S31508004AA04545454949498E8F9092924F994F55559C +S31508004AB059999A9B9C9D9E9F41494F55A5A5A6A786 +S31508004AC0A8A9AAABACADAEAFB0B1B2B3B4B5B6B7E0 +S31508004AD0B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7D0 +S31508004AE0C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7C0 +S31508004AF0D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7B0 +S31508004B00E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F79F +S31508004B10F8F9FAFBFCFDFEFF01030507090E101262 +S31508004B201416181C1E000000C700FC00E900E2006D +S31508004B30E400E000E500E700EA00EB00E800EF002B +S31508004B40EE00EC00C400C500C900E600C600F4008B +S31508004B50F600F200FB00F900FF00D600DC00A20018 +S31508004B60A300A500A7209201E100ED00F300FA00DA +S31508004B70F100D100AA00BA00BF001023AC00BD00A6 +S31508004B80BC00A100AB00BB00912592259325022508 +S31508004B902425612562255625552563255125572542 +S31508004BA05D255C255B251025142534252C251C251B +S31508004BB000253C255E255F255A2554256925662549 +S31508004BC0602550256C2567256825642565255925A2 +S31508004BD05825522553256B256A2518250C25882521 +S31508004BE084258C2590258025B103DF009303C00317 +S31508004BF0A303C303B500C403A6039803A903B40318 +S31508004C001E22C603B50329226122B1006522642249 +S31508004C1020232123F7004822B0001922B7001A22C0 +S31508004C207F20B200A025A0007D1D0100632C001E78 +S31508004C309601A01E5A01001F0806101F0606201F0F +S31508004C400806301F0806401F0606511F0700591F91 +S31508004C50521F5B1F541F5D1F561F5F1F601F0806EC +S31508004C60701F0E00BA1FBB1FC81FC91FCA1FCB1F44 +S31508004C70DA1FDB1FF81FF91FEA1FEB1FFA1FFB1FBE +S31508004C80801F0806901F0806A01F0806B01F04000C +S31508004C90B81FB91FB21FBC1FCC1F0100C31FD01FEE +S31508004CA00206E01F0206E51F0100EC1FF21F0100C5 +S31508004CB0FC1F4E21010032217021100284210100BF +S31508004CC08321D0241A05302C2F04602C0201672C6E +S31508004CD00601752C0201802C6401002D260841FF6F +S31508004CE01A03000061001A03E0001703F80007031F +S31508004CF0FF00010078010001300132010601390187 +S31508004D0010014A012E017901060180014D00430276 +S31508004D10810182018201840184018601870187015C +S31508004D2089018A018B018B018D018E018F0190010A +S31508004D309101910193019401F60196019701980159 +S31508004D4098013D029B019C019D0120029F01A00143 +S31508004D50A001A201A201A401A401A601A701A7011D +S31508004D60A901AA01AB01AC01AC01AE01AF01AF01CB +S31508004D70B101B201B301B301B501B501B701B8017B +S31508004D80B801BA01BB01BC01BC01BE01F701C001F3 +S31508004D90C101C201C301C401C501C401C701C801DB +S31508004DA0C701CA01CB01CA01CD011001DD0101000D +S31508004DB08E01DE011201F3010300F101F401F40191 +S31508004DC0F8012801220212013A020900652C3B0269 +S31508004DD03B023D02662C3F02400241024102460266 +S31508004DE00A015302400081018601550289018A01A0 +S31508004DF058028F015A0290015C025D025E025F0250 +S31508004E009301610262029401640265026602670206 +S31508004E10970196016A02622C6C026D026E029C0171 +S31508004E20700271029D01730274029F017602770275 +S31508004E30780279027A027B027C02642C7E027F0267 +S31508004E40A60181028202A9018402850286028702DE +S31508004E50AE014402B101B20145028D028E028F02F3 +S31508004E6090029102B7017B030300FD03FE03FF03D3 +S31508004E70AC0304008603880389038A03B10311037C +S31508004E80C2030200A303A303C4030803CC0303005D +S31508004E908C038E038F03D8031801F2030A00F90363 +S31508004EA0F303F403F503F603F703F703F903FA0329 +S31508004EB0FA033004200350041007600422018A0410 +S31508004EC03601C1040E01CF040100C004D004440118 +S31508004ED061052604000000004A616E00466562000E +S31508004EE04D617200417072004D6179004A756E001D +S31508004EF04A756C0041756700536570004F6374000E +S31508004F004E6F760044656300000000002E00000026 +S31508004F107375636365737300646F6D61696E20658D +S31508004F2072726F7200000000696C6C6567616C20B4 +S31508004F3073657175656E6365206572726F720000C0 +S31508004F4072616E6765206572726F7200636F727246 +S31508004F507570742068656170000000006E6F206DC2 +S31508004F60656D6F7279000000696E76616C69642000 +S31508004F70617267756D656E7400000000756E6B6E04 +S31508004F806F776E206572726F720000003B0000003A +S31508004F9043000000504F53495800000025412C207B +S31508004FA02542202523642C2025592C2025483A25DE +S31508004FB04D3A255300000000256D2F25642F2579CD +S31508004FC00000000025592D256D2D256400000000E0 +S31508004FD025493A254D3A25732025700025483A2556 +S31508004FE04D00000025412C202542202523642C2035 +S31508004FF02559000000000000904F0008785000086E +S31508005000D050000800070320041702010857104073 +S315080050108000000053756E646179004D6F6E64619F +S31508005020790054756573646179005765646E6573B4 +S3150800503064617900546875727364617900467269AF +S3150800504064617900536174757264617900000000C7 +S3150800505053756E004D6F6E00547565005765640094 +S3150800506054687500467269005361740000000000B8 +S31508005070414D00504D0000000C4F0008F44F000849 +S31508005080F44F0008F44F0008F44F0008F44F0008E6 +S31508005090F44F0008F44F0008F44F0008F44F0008D6 +S315080050A0FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +S315080050B01450000850500008F0500008D84E000858 +S315080050C070500008645100085851000848510008FB +S315080050D0414400085D440008694400087544000816 +S315080050E0914400089D440008A9440008B9440008F2 +S315080050F04A616E7561727900466562727561727988 +S31508005100004D6172636800417072696C004D617987 +S31508005110004A756E65004A756C7900417567757346 +S31508005120740053657074656D626572004F63746FC1 +S31508005130626572004E6F76656D62657200446563DE +S31508005140656D62657200000025612025622025656F +S31508005150202554202559000025483A254D3A25533F +S3150800516000000000256D2F25642F2579000000001A +S3150800517020202020202020202068282828282020B9 +S315080051802020202020202020202020202020202011 +S3150800519048101010101010101010101010101010C9 +S315080051A08484848484848484848410101010101069 +S315080051B010818181818181010101010101010101C2 +S315080051C00101010101010101010101101010101076 +S315080051D01082828282828202020202020202020293 +S315080051E0020202020202020202020210101010203B +S315080051F001040000F84F0008F84F0008F84F0008AF +S30D08005200F84F0008F84F0008FA S70508000151A0 diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/readme.txt b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/readme.txt index a49767fb..a10a52ca 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/readme.txt +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/readme.txt @@ -1,4 +1,4 @@ Integrated Development Environment ---------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains +Rowleys CrossWorks (version 3.7.6) was used as the editor during the development of this software program. This directory contains the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp index b8251787..f052b79f 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp @@ -1,102 +1,168 @@ - - + + - + - - - - + + + + - - - - - - + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - + + + + + - + - + - + - + - - diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs index 8bf798e7..7af2a67f 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs @@ -1,19 +1,28 @@ - + - + + + + + + - + + - + + - + + - + + @@ -21,18 +30,24 @@ + + - + + - + + - + + - + + @@ -40,9 +55,9 @@ - - - + + + @@ -55,7 +70,7 @@ - + - + diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c deleted file mode 100644 index 56fddc52..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.c +++ /dev/null @@ -1,784 +0,0 @@ -/**************************************************************************//** - * @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/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h index 2b6b51a7..efac390f 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cm3.h @@ -1,16 +1,16 @@ /**************************************************************************//** * @file core_cm3.h * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V1.30 - * @date 30. October 2009 + * @version V3.00 + * @date 03. February 2012 * * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. + * Copyright (C) 2009-2012 ARM Limited. All rights reserved. * * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. + * 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 @@ -20,1618 +20,1354 @@ * 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 - @{ - */ +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif #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 __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC -#ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 /*!< standard definition for NVIC Priority Bits */ -#endif +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. - - - -/** - * IO definitions - * - * define access restrictions to peripheral registers + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. */ -#ifdef __cplusplus - #define __I volatile /*!< defines 'read only' permissions */ -#else - #define __I volatile const /*!< defines 'read only' permissions */ + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M3 + @{ + */ + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + #endif -#define __O volatile /*!< defines 'write only' permissions */ -#define __IO volatile /*!< defines 'read / write' permissions */ + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + /* add preprocessor checks */ +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200 + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M3 */ /******************************************************************************* * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register ******************************************************************************/ -/** @addtogroup CMSIS_CM3_core_register CMSIS CM3 Core Register - @{ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. */ - -/** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC - memory mapped structure for Nested Vectored Interrupt Controller (NVIC) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. @{ */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ typedef struct { - __IO uint32_t ISER[8]; /*!< Offset: 0x000 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 */ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ -/** @addtogroup CMSIS_CM3_SCB CMSIS CM3 SCB - memory mapped structure for System Control Block (SCB) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers @{ */ + +/** \brief Structure type to access the System Control Block (SCB). + */ typedef struct { - __I uint32_t CPUID; /*!< Offset: 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; + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; /* SCB CPUID Register Definitions */ #define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFul << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ +#define SCB_CPUID_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_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ #define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFul << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ +#define SCB_CPUID_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 */ +#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_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_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_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_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_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_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_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_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_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 */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ -/* SCB Interrupt Control State Register Definitions */ +/* SCB Vector Table Offset Register Definitions */ +#if (__CM3_REV < 0x0201) /* core r2p1 */ #define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ -#define SCB_VTOR_TBLBASE_Msk (0x1FFul << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ #define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFul << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif /* SCB Application Interrupt and Reset Control Register Definitions */ #define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFul << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ +#define SCB_AIRCR_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_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_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_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_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_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 */ +#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_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_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 */ +#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_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_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_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_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_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 */ +#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_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_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_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_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_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_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_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_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_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_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_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_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_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 */ +#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_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_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 */ +#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_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_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 */ +#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_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_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_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_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 */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ -/** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick - memory mapped structure for SysTick +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB @{ */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ typedef struct { - __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 */ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ } SysTick_Type; /* SysTick Control / Status Register Definitions */ #define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1ul << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ +#define SysTick_CTRL_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_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_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 */ +#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 */ +#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 */ +#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_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_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 */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ -/** @addtogroup CMSIS_CM3_ITM CMSIS CM3 ITM - memory mapped structure for Instrumentation Trace Macrocell (ITM) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) @{ */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ typedef struct { - __O union + __O 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; + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ +} 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 */ +#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_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_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_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_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1ul << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA 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_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1ul << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA 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_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1ul << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ +#define ITM_TCR_TXENA_Pos 3 /*!< ITM TCR: TXENA Position */ +#define ITM_TCR_TXENA_Msk (1UL << ITM_TCR_TXENA_Pos) /*!< ITM TCR: TXENA 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_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA 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 */ +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA 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 */ +#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 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 */ +/*@}*/ /* end of group CMSIS_ITM */ -/** @addtogroup CMSIS_CM3_InterruptType CMSIS CM3 Interrupt Type - memory mapped structure for Interrupt Type +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) @{ */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ typedef struct { - 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; + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; -/* 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 */ +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ -/* 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 DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT 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 DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG 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 */ +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) -/** @addtogroup CMSIS_CM3_MPU CMSIS CM3 MPU - memory mapped structure for Memory Protection Unit (MPU) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) @{ */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ typedef struct { - __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; + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; /* MPU Type Register */ #define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFul << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ +#define MPU_TYPE_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_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 */ +#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_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_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 */ +#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 */ +#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_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_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 */ +#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_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ #define MPU_RASR_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_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_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 */ +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ -/*@}*/ /* end of group CMSIS_CM3_MPU */ +/*@} end of group CMSIS_MPU */ #endif -/** @addtogroup CMSIS_CM3_CoreDebug CMSIS CM3 Core Debug - memory mapped structure for Core Debug Register +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers @{ */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ typedef struct { - __IO uint32_t DHCSR; /*!< Offset: 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 */ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ } CoreDebug_Type; /* Debug Halting Control and Status Register */ #define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFul << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ +#define CoreDebug_DHCSR_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_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_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_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_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_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_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_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_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_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_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 */ +#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_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 */ +#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_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_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_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_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_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_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_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_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_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_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_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_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 */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ /* Memory mapping of Cortex-M3 Hardware */ -#define SCS_BASE (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 SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ -#define 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 */ +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) - #define MPU_BASE (SCS_BASE + 0x0D90) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type*) MPU_BASE) /*!< Memory Protection Unit */ +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< 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 Function Interface contains: - Core NVIC Functions - Core SysTick Functions - - Core Reset Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference */ -/*@{*/ + + /* ########################## 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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ */ -static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + reg_value = SCB->AIRCR; /* read old register configuration */ reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - (0x5FA << SCB_AIRCR_VECTKEY_Pos) | + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ SCB->AIRCR = reg_value; } -/** - * @brief Get 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. + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). */ -static __INLINE uint32_t NVIC_GetPriorityGrouping(void) +__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. + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +__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. + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +__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 + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. */ -static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. */ -static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +__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. + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. */ -static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +__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 */ + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ else { NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ } -/** - * @brief 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. + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. */ -static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +__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 */ + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ else { return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ } -/** - * @brief Encode 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 +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). */ -static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +__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; @@ -1639,7 +1375,7 @@ static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t P 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))) @@ -1647,22 +1383,19 @@ static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t P } -/** - * @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 +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). */ -static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +__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; @@ -1670,132 +1403,134 @@ static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGr PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); } +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + /* ################################## SysTick function ############################################ */ - -#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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ */ -static __INLINE uint32_t SysTick_Config(uint32_t ticks) -{ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ if (ticks > 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 */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ SysTick->VAL = 0; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | + SysTick->CTRL = 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 */ +/*@} end of CMSIS_Core_SysTickFunctions */ /* ##################################### 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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ */ -static __INLINE uint32_t ITM_SendChar (uint32_t ch) + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) { - if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */ - (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ - (ITM->TER & (1ul << 0) ) ) /* ITM Port #0 enabled */ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ { while (ITM->PORT[0].u32 == 0); ITM->PORT[0].u8 = (uint8_t) ch; - } + } return (ch); } -/** - * @brief 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. +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. */ -static __INLINE int ITM_ReceiveChar (void) { - int ch = -1; /* no character available */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { ch = ITM_RxBuffer; ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ } - - return (ch); + + 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. +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. */ -static __INLINE int ITM_CheckChar (void) { +__STATIC_INLINE int32_t ITM_CheckChar (void) { if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { return (0); /* no character available */ @@ -1804,15 +1539,12 @@ static __INLINE int ITM_CheckChar (void) { } } -/*@}*/ /* end of group CMSIS_CM3_core_DebugInterface */ +/*@} end of CMSIS_core_DebugFunctions */ +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ #ifdef __cplusplus } #endif - -/*@}*/ /* end of group CMSIS_CM3_core_definitions */ - -#endif /* __CM3_CORE_H__ */ - -/*lint -restore */ diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmFunc.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmFunc.h new file mode 100644 index 00000000..adb07b5d --- /dev/null +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmFunc.h @@ -0,0 +1,616 @@ +/**************************************************************************//** + * @file core_cmFunc.h + * @brief CMSIS Cortex-M Core Function Access Header File + * @version V3.01 + * @date 06. March 2012 + * + * @note + * Copyright (C) 2009-2012 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + +#ifndef __CORE_CMFUNC_H +#define __CORE_CMFUNC_H + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + +/* intrinsic void __enable_irq(); */ +/* intrinsic void __disable_irq(); */ + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xff); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#endif +} + +#endif /* (__CORTEX_M == 0x04) */ + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#include + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ + +#include + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** \brief Enable IRQ Interrupts + + This function enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i"); +} + + +/** \brief Disable IRQ Interrupts + + This function disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i"); +} + + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) ); +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) ); +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) ); +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) ); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f"); +} + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f"); +} + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); + return(result); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (value) ); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) ); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + uint32_t result; + + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + return(result); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) ); +#endif +} + +#endif /* (__CORTEX_M == 0x04) */ + + +#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 + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +#endif /* __CORE_CMFUNC_H */ diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmInstr.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmInstr.h new file mode 100644 index 00000000..624c175f --- /dev/null +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CM3/CoreSupport/core_cmInstr.h @@ -0,0 +1,618 @@ +/**************************************************************************//** + * @file core_cmInstr.h + * @brief CMSIS Cortex-M Core Instruction Access Header File + * @version V3.01 + * @date 06. March 2012 + * + * @note + * Copyright (C) 2009-2012 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + +#ifndef __CORE_CMINSTR_H +#define __CORE_CMINSTR_H + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} + + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) +{ + revsh r0, r0 + bx lr +} + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +#define __ROR __ror + + +#if (__CORTEX_M >= 0x03) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __rbit + + +/** \brief LDR Exclusive (8 bit) + + This function performs a exclusive LDR command for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) + + +/** \brief LDR Exclusive (16 bit) + + This function performs a exclusive LDR command for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) + + +/** \brief LDR Exclusive (32 bit) + + This function performs a exclusive LDR command for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) + + +/** \brief STR Exclusive (8 bit) + + This function performs a exclusive STR command for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (16 bit) + + This function performs a exclusive STR command for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (32 bit) + + This function performs a exclusive STR command for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW(value, ptr) __strex(value, ptr) + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +#define __CLREX __clrex + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + +#endif /* (__CORTEX_M >= 0x03) */ + + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#include + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ + +#include + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __NOP(void) +{ + __ASM volatile ("nop"); +} + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFI(void) +{ + __ASM volatile ("wfi"); +} + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFE(void) +{ + __ASM volatile ("wfe"); +} + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __SEV(void) +{ + __ASM volatile ("sev"); +} + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __ISB(void) +{ + __ASM volatile ("isb"); +} + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void) +{ + __ASM volatile ("dsb"); +} + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DMB(void) +{ + __ASM volatile ("dmb"); +} + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value) +{ + uint32_t result; + + __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + + __ASM volatile ("ror %0, %0, %1" : "+r" (op1) : "r" (op2) ); + return(op1); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief LDR Exclusive (8 bit) + + This function performs a exclusive LDR command for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint8_t result; + + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + + +/** \brief LDR Exclusive (16 bit) + + This function performs a exclusive LDR command for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint16_t result; + + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + + +/** \brief LDR Exclusive (32 bit) + + This function performs a exclusive LDR command for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + + +/** \brief STR Exclusive (8 bit) + + This function performs a exclusive STR command for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +/** \brief STR Exclusive (16 bit) + + This function performs a exclusive STR command for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +/** \brief STR Exclusive (32 bit) + + This function performs a exclusive STR command for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void) +{ + __ASM volatile ("clrex"); +} + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value) +{ + uint8_t result; + + __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ + +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + +#endif + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + +#endif /* __CORE_CMINSTR_H */ diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CMSIS debug support.htm b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CMSIS debug support.htm deleted file mode 100644 index efda685b..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CMSIS debug support.htm +++ /dev/null @@ -1,243 +0,0 @@ - - - -CMSIS Debug Support - - - - - - - - -

CMSIS Debug Support

- -
- -

Cortex-M3 ITM Debug Access

-

- The Cortex-M3 incorporates the Instrumented Trace Macrocell (ITM) that provides together with - the Serial Viewer Output trace capabilities for the microcontroller system. The ITM has - 32 communication channels which are able to transmit 32 / 16 / 8 bit values; two ITM - communication channels are used by CMSIS to output the following information: -

-
    -
  • ITM Channel 0: used for printf-style output via the debug interface.
  • -
  • ITM Channel 31: is reserved for RTOS kernel awareness debugging.
  • -
- -

Debug IN / OUT functions

-

CMSIS provides following debug functions:

-
    -
  • ITM_SendChar (uses ITM channel 0)
  • -
  • ITM_ReceiveChar (uses global variable)
  • -
  • ITM_CheckChar (uses global variable)
  • -
- -

ITM_SendChar

-

- ITM_SendChar is used to transmit a character over ITM channel 0 from - the microcontroller system to the debug system.
- Only a 8 bit value is transmitted. -

-
-static __INLINE uint32_t ITM_SendChar (uint32_t ch)
-{
-  /* check if debugger connected and ITM channel enabled for tracing */
-  if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA)  &&
-      (ITM->TCR & ITM_TCR_ITMENA)                  &&
-      (ITM->TER & (1UL << 0))  ) 
-  {
-    while (ITM->PORT[0].u32 == 0);
-    ITM->PORT[0].u8 = (uint8_t)ch;
-  }  
-  return (ch);
-}
- -

ITM_ReceiveChar

-

- ITM communication channel is only capable for OUT direction. For IN direction - a globel variable is used. A simple mechansim detects if a character is received. - The project to test need to be build with debug information. -

- -

- The globale variable ITM_RxBuffer is used to transmit a 8 bit value from debug system - to microcontroller system. ITM_RxBuffer is 32 bit wide to enshure a proper handshake. -

-
-extern volatile int ITM_RxBuffer;                    /* variable to receive characters                             */
-
-

- A dedicated bit pattern is used to determin if ITM_RxBuffer is empty - or contains a valid value. -

-
-#define             ITM_RXBUFFER_EMPTY    0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */
-
-

- ITM_ReceiveChar is used to receive a 8 bit value from the debug system. The function is nonblocking. - It returns the received character or '-1' if no character was available. -

-
-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); 
-}
-
- -

ITM_CheckChar

-

- ITM_CheckChar is used to check if a character is received. -

-
-static __INLINE int ITM_CheckChar (void) {
-
-  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
-    return (0);                                 /* no character available */
-  } else {
-    return (1);                                 /*    character available */
-  }
-}
- - -

ITM Debug Support in uVision

-

- uVision uses in a debug session the Debug (printf) Viewer window to - display the debug data. -

-

Direction microcontroller system -> uVision:

-
    -
  • - Characters received via ITM communication channel 0 are written in a printf style - to Debug (printf) Viewer window. -
  • -
- -

Direction uVision -> microcontroller system:

-
    -
  • Check if ITM_RxBuffer variable is available (only performed once).
  • -
  • Read character from Debug (printf) Viewer window.
  • -
  • If ITM_RxBuffer empty write character to ITM_RxBuffer.
  • -
- -

Note

-
    -
  • Current solution does not use a buffer machanism for trasmitting the characters.

    -
  • -
- -

RTX Kernel awareness in uVision

-

- uVision / RTX are using a simple and efficient solution for RTX Kernel awareness. - No format overhead is necessary.
- uVsion debugger decodes the RTX events via the 32 / 16 / 8 bit ITM write access - to ITM communication channel 31. -

- -

Following RTX events are traced:

-
    -
  • Task Create / Delete event -
      -
    1. 32 bit access. Task start address is transmitted
    2. -
    3. 16 bit access. Task ID and Create/Delete flag are transmitted
      - High byte holds Create/Delete flag, Low byte holds TASK ID. -
    4. -
    -
  • -
  • Task switch event -
      -
    1. 8 bit access. Task ID of current task is transmitted
    2. -
    -
  • -
- -

Note

-
    -
  • Other RTOS information could be retrieved via memory read access in a polling mode manner.

    -
  • -
- - -

 

- -
- -

Copyright © KEIL - An ARM Company.
-All rights reserved.
-Visit our web site at
www.keil.com. -

- - - - \ No newline at end of file diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CMSIS_changes.htm b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CMSIS_changes.htm deleted file mode 100644 index 162ffcc9..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/CMSIS_changes.htm +++ /dev/null @@ -1,320 +0,0 @@ - - - -CMSIS Changes - - - - - - - - -

Changes to CMSIS version V1.20

- -
- -

1. Removed CMSIS Middelware packages

-

- CMSIS Middleware is on hold from ARM side until a agreement between all CMSIS partners is found. -

- -

2. SystemFrequency renamed to SystemCoreClock

-

- The variable name SystemCoreClock is more precise than SystemFrequency - because the variable holds the clock value at which the core is running. -

- -

3. Changed startup concept

-

- The old startup concept (calling SystemInit_ExtMemCtl from startup file and calling SystemInit - from main) has the weakness that it does not work for controllers which need a already - configuerd clock system to configure the external memory controller. -

- -

Changed startup concept

-
    -
  • - SystemInit() is called from startup file before premain. -
  • -
  • - SystemInit() configures the clock system and also configures - an existing external memory controller. -
  • -
  • - SystemInit() must not use global variables. -
  • -
  • - SystemCoreClock is initialized with a correct predefined value. -
  • -
  • - Additional function void SystemCoreClockUpdate (void) is provided.
    - SystemCoreClockUpdate() updates the variable SystemCoreClock - and must be called whenever the core clock is changed.
    - SystemCoreClockUpdate() evaluates the clock register settings and calculates - the current core clock. -
  • -
- - -

4. Advanced Debug Functions

-

- ITM communication channel is only capable for OUT direction. To allow also communication for - IN direction a simple concept is provided. -

-
    -
  • - Global variable volatile int ITM_RxBuffer used for IN data. -
  • -
  • - Function int ITM_CheckChar (void) checks if a new character is available. -
  • -
  • - Function int ITM_ReceiveChar (void) retrieves the new character. -
  • -
- -

- For detailed explanation see file CMSIS debug support.htm. -

- - -

5. Core Register Bit Definitions

-

- Files core_cm3.h and core_cm0.h contain now bit definitions for Core Registers. The name for the - defines correspond with the Cortex-M Technical Reference Manual. -

-

- e.g. SysTick structure with bit definitions -

-
-/** @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 */
- -

7. DoxyGen Tags

-

- DoxyGen tags in files core_cm3.[c,h] and core_cm0.[c,h] are reworked to create proper documentation - using DoxyGen. -

- -

8. Folder Structure

-

- The folder structure is changed to differentiate the single support packages. -

- -
    -
  • CM0
  • -
  • CM3 -
      -
    • CoreSupport
    • -
    • DeviceSupport
    • -
        -
      • Vendor -
          -
        • Device -
            -
          • Startup -
              -
            • Toolchain
            • -
            • Toolchain
            • -
            • ...
            • -
            -
          • -
          -
        • -
        • Device
        • -
        • ...
        • -
        -
      • -
      • Vendor
      • -
      • ...
      • -
      - -
    • Example -
        -
      • Toolchain -
          -
        • Device
        • -
        • Device
        • -
        • ...
        • -
        -
      • -
      • Toolchain
      • -
      • ...
      • -
      -
    • -
    -
  • - -
  • Documentation
  • -
- -

9. Open Points

-

- Following points need to be clarified and solved: -

-
    -
  • -

    - Equivalent C and Assembler startup files. -

    -

    - Is there a need for having C startup files although assembler startup files are - very efficient and do not need to be changed? -

    -

  • -
  • -

    - Placing of HEAP in external RAM. -

    -

    - It must be possible to place HEAP in external RAM if the device supports an - external memory controller. -

    -
  • -
  • -

    - Placing of STACK /HEAP. -

    -

    - STACK should always be placed at the end of internal RAM. -

    -

    - If HEAP is placed in internal RAM than it should be placed after RW ZI section. -

    -
  • -
  • -

    - Removing core_cm3.c and core_cm0.c. -

    -

    - On a long term the functions in core_cm3.c and core_cm0.c must be replaced with - appropriate compiler intrinsics. -

    -
  • -
- - -

10. Limitations

-

- The following limitations are not covered with the current CMSIS version: -

-
    -
  • - No C startup files for ARM toolchain are provided. -
  • -
  • - No C startup files for GNU toolchain are provided. -
  • -
  • - No C startup files for IAR toolchain are provided. -
  • -
  • - No Tasking projects are provided yet. -
  • -
diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/License.doc b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/License.doc deleted file mode 100644 index b6b8acecc137bca709444106cba045d3d01daedd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39936 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 diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.elf b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.elf index 70775ba1f80519ca149cb6d0ad066dc281c04162..f99ad9556edf4820f350e88a4882395bb29c88ad 100644 GIT binary patch literal 68652 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 TpUWoln4)GP@Pwm1s>go=*A_#) diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.map b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.map index e4d866d9..48dbed2e 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.map +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.map @@ -1,9 +1,17 @@ -Archive member included because of file (symbol) +Archive member included to satisfy reference by file (symbol) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - (__do_debug_operation_mempoll) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) (__debug_io_lock) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o (__aeabi_i2d) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o (frexp) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) (fabs) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o (__aeabi_uldivmod) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o (__getc) +C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) (memcpy) Discarded input sections @@ -35,94 +43,124 @@ Discarded input sections .data 0x00000000 0x0 THUMB Debug/../../obj/misc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/misc.o .text.NVIC_PriorityGroupConfig - 0x00000000 0x28 THUMB Debug/../../obj/misc.o + 0x00000000 0x24 THUMB Debug/../../obj/misc.o .text.NVIC_Init - 0x00000000 0xe8 THUMB Debug/../../obj/misc.o + 0x00000000 0xc4 THUMB Debug/../../obj/misc.o .text.NVIC_SetVectorTable 0x00000000 0x2c THUMB Debug/../../obj/misc.o .text.NVIC_SystemLPConfig - 0x00000000 0x54 THUMB Debug/../../obj/misc.o + 0x00000000 0x40 THUMB Debug/../../obj/misc.o .text.SysTick_CLKSourceConfig - 0x00000000 0x4c THUMB Debug/../../obj/misc.o + 0x00000000 0x38 THUMB Debug/../../obj/misc.o + .debug_frame 0x00000000 0x150 THUMB Debug/../../obj/misc.o + .debug_info 0x00000000 0x527 THUMB Debug/../../obj/misc.o + .debug_abbrev 0x00000000 0x14a THUMB Debug/../../obj/misc.o + .debug_pubnames + 0x00000000 0xa0 THUMB Debug/../../obj/misc.o + .debug_pubtypes + 0x00000000 0x126 THUMB Debug/../../obj/misc.o + .debug_aranges + 0x00000000 0x40 THUMB Debug/../../obj/misc.o + .debug_ranges 0x00000000 0x30 THUMB Debug/../../obj/misc.o + .debug_line 0x00000000 0x333 THUMB Debug/../../obj/misc.o + .debug_str 0x00000000 0x490 THUMB Debug/../../obj/misc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/misc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/misc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_adc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_adc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_DeInit - 0x00000000 0xac THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_Init - 0x00000000 0xb0 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0xa4 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_adc.o - .text.ADC_Cmd 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + .text.ADC_Cmd 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_DMACmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ITConfig - 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ResetCalibration 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetResetCalibrationStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_StartCalibration 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetCalibrationStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_SoftwareStartConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetSoftwareStartConvStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_DiscModeChannelCountConfig - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_DiscModeCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_RegularChannelConfig - 0x00000000 0x1bc THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x194 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ExternalTrigConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetConversionValue - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_adc.o - .text.ADC_GetDualModeConversionValue 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_adc.o + .text.ADC_GetDualModeConversionValue + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_AutoInjectedConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_InjectedDiscModeCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ExternalTrigInjectedConvConfig - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ExternalTrigInjectedConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o - .text.ADC_SoftwareStartInjectedConvCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o - .text.ADC_GetSoftwareStartInjectedConvCmdStatus 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + .text.ADC_SoftwareStartInjectedConvCmd + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o + .text.ADC_GetSoftwareStartInjectedConvCmdStatus + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_InjectedChannelConfig - 0x00000000 0x144 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x120 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_InjectedSequencerLengthConfig - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_SetInjectedOffset 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetInjectedConversionValue - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_AnalogWatchdogCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_AnalogWatchdogThresholdsConfig 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_AnalogWatchdogSingleChannelConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_TempSensorVrefintCmd - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetFlagStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ClearFlag 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_GetITStatus - 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_adc.o .text.ADC_ClearITPendingBit - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_adc.o + .debug_frame 0x00000000 0x8f8 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_info 0x00000000 0xb42 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_abbrev 0x00000000 0x19d THUMB Debug/../../obj/stm32f10x_adc.o + .debug_pubnames + 0x00000000 0x42a THUMB Debug/../../obj/stm32f10x_adc.o + .debug_pubtypes + 0x00000000 0x132 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_aranges + 0x00000000 0x138 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_ranges 0x00000000 0x128 THUMB Debug/../../obj/stm32f10x_adc.o + .debug_line 0x00000000 0x62a THUMB Debug/../../obj/stm32f10x_adc.o + .debug_str 0x00000000 0x7c2 THUMB Debug/../../obj/stm32f10x_adc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_adc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_adc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_bkp.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_bkp.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_DeInit - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_TamperPinLevelConfig 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_TamperPinCmd @@ -130,70 +168,85 @@ Discarded input sections .text.BKP_ITConfig 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_RTCOutputConfig - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_SetRTCCalibrationValue - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_WriteBackupRegister 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_ReadBackupRegister - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_GetFlagStatus 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_ClearFlag - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_GetITStatus 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_bkp.o .text.BKP_ClearITPendingBit - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_frame 0x00000000 0x2b4 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_info 0x00000000 0x76b THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_abbrev 0x00000000 0x168 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_pubnames + 0x00000000 0x13f THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_pubtypes + 0x00000000 0x11e THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_aranges + 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_ranges 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_line 0x00000000 0x323 THUMB Debug/../../obj/stm32f10x_bkp.o + .debug_str 0x00000000 0x67c THUMB Debug/../../obj/stm32f10x_bkp.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_bkp.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_bkp.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_can.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_can.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_SlaveStartBank - 0x00000000 0x8c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_DBGFreeze - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_TTComModeCmd - 0x00000000 0x94 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_Transmit - 0x00000000 0x1dc THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x194 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_TransmitStatus - 0x00000000 0x10c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0xd4 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_CancelTransmit 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_FIFORelease 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_OperatingModeRequest - 0x00000000 0x114 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0xfc THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_Sleep - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_WakeUp - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetLastErrorCode - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetReceiveErrorCounter - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetLSBTransmitErrorCounter - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_ITConfig 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetFlagStatus - 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0xcc THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_ClearFlag - 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_GetITStatus - 0x00000000 0x214 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x198 THUMB Debug/../../obj/stm32f10x_can.o .text.CAN_ClearITPendingBit - 0x00000000 0xfc THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0xdc THUMB Debug/../../obj/stm32f10x_can.o .text.CheckITStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_can.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_can.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_cec.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_cec.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_DeInit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_Init - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_cec.o - .text.CEC_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_cec.o + .text.CEC_Cmd 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_ITConfig 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_OwnAddressConfig @@ -209,263 +262,383 @@ Discarded input sections .text.CEC_EndOfMessageCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_GetFlagStatus - 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_ClearFlag - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_GetITStatus - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_cec.o .text.CEC_ClearITPendingBit - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_cec.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_cec.o + .debug_frame 0x00000000 0x354 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_info 0x00000000 0x3ea THUMB Debug/../../obj/stm32f10x_cec.o + .debug_abbrev 0x00000000 0x1b3 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_pubnames + 0x00000000 0x154 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_pubtypes + 0x00000000 0x132 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_aranges + 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_ranges 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_cec.o + .debug_line 0x00000000 0x3fb THUMB Debug/../../obj/stm32f10x_cec.o + .debug_str 0x00000000 0x43d THUMB Debug/../../obj/stm32f10x_cec.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_cec.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_cec.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_crc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_crc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_ResetDR 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_CalcCRC - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_crc.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_CalcBlockCRC - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_crc.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_GetCRC - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_crc.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_SetIDRegister 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_crc.o .text.CRC_GetIDRegister 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_frame 0x00000000 0x160 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_info 0x00000000 0x1ce THUMB Debug/../../obj/stm32f10x_crc.o + .debug_abbrev 0x00000000 0x117 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_pubnames + 0x00000000 0x82 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_pubtypes + 0x00000000 0xee THUMB Debug/../../obj/stm32f10x_crc.o + .debug_aranges + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_ranges 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_crc.o + .debug_line 0x00000000 0x2bc THUMB Debug/../../obj/stm32f10x_crc.o + .debug_str 0x00000000 0x302 THUMB Debug/../../obj/stm32f10x_crc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_crc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_crc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dac.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dac.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dac.o .text.DAC_DeInit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_dac.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_dac.o .text.DAC_Init - 0x00000000 0x74 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_StructInit - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_Cmd 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_DMACmd - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_SoftwareTriggerCmd - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_DualSoftwareTriggerCmd - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_WaveGenerationCmd - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_SetChannel1Data - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_SetChannel2Data - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dac.o - .text.DAC_SetDualChannelData 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_StructInit + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_Cmd 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_DMACmd + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_SoftwareTriggerCmd + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_DualSoftwareTriggerCmd + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_WaveGenerationCmd + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_SetChannel1Data + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_SetChannel2Data + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dac.o + .text.DAC_SetDualChannelData + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_dac.o .text.DAC_GetDataOutputValue - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_dac.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_frame 0x00000000 0x2f4 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_info 0x00000000 0x47a THUMB Debug/../../obj/stm32f10x_dac.o + .debug_abbrev 0x00000000 0x178 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_pubnames + 0x00000000 0x12d THUMB Debug/../../obj/stm32f10x_dac.o + .debug_pubtypes + 0x00000000 0x116 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_aranges + 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_ranges 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_line 0x00000000 0x3d7 THUMB Debug/../../obj/stm32f10x_dac.o + .debug_str 0x00000000 0x476 THUMB Debug/../../obj/stm32f10x_dac.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_dac.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_dac.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .text.DBGMCU_GetREVID - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_dbgmcu.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .text.DBGMCU_GetDEVID - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .text.DBGMCU_Config - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_frame 0x00000000 0xb0 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_info 0x00000000 0x13e THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_abbrev 0x00000000 0xe3 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_pubnames + 0x00000000 0x63 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_pubtypes + 0x00000000 0xec THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_aranges + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_ranges 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_line 0x00000000 0x278 THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .debug_str 0x00000000 0x2ce THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_dbgmcu.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_dbgmcu.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dma.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dma.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_DeInit - 0x00000000 0x220 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x178 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_Init - 0x00000000 0x80 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_StructInit - 0x00000000 0x6c THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_Cmd 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_ITConfig 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_SetCurrDataCounter 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_GetCurrDataCounter - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_GetFlagStatus - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_ClearFlag - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_GetITStatus - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_dma.o .text.DMA_ClearITPendingBit - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_dma.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_frame 0x00000000 0x2d0 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_info 0x00000000 0x44c THUMB Debug/../../obj/stm32f10x_dma.o + .debug_abbrev 0x00000000 0x15a THUMB Debug/../../obj/stm32f10x_dma.o + .debug_pubnames + 0x00000000 0x113 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_pubtypes + 0x00000000 0x13e THUMB Debug/../../obj/stm32f10x_dma.o + .debug_aranges + 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_ranges 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_line 0x00000000 0x428 THUMB Debug/../../obj/stm32f10x_dma.o + .debug_str 0x00000000 0x488 THUMB Debug/../../obj/stm32f10x_dma.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_dma.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_dma.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_exti.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_exti.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_DeInit - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_exti.o - .text.EXTI_Init - 0x00000000 0x138 THUMB Debug/../../obj/stm32f10x_exti.o - .text.EXTI_StructInit 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_exti.o - .text.EXTI_GenerateSWInterrupt + .text.EXTI_Init + 0x00000000 0xe4 THUMB Debug/../../obj/stm32f10x_exti.o + .text.EXTI_StructInit 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_exti.o + .text.EXTI_GenerateSWInterrupt + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_GetFlagStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_exti.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_ClearFlag - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_exti.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_GetITStatus - 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_exti.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_exti.o .text.EXTI_ClearITPendingBit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_exti.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_exti.o + .debug_frame 0x00000000 0x200 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_info 0x00000000 0x32d THUMB Debug/../../obj/stm32f10x_exti.o + .debug_abbrev 0x00000000 0x158 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_pubnames + 0x00000000 0x161 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_pubtypes + 0x00000000 0x148 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_aranges + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_ranges 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_line 0x00000000 0x396 THUMB Debug/../../obj/stm32f10x_exti.o + .debug_str 0x00000000 0x425 THUMB Debug/../../obj/stm32f10x_exti.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_exti.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_exti.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_flash.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_flash.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_SetLatency - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_HalfCycleAccessCmd - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_PrefetchBufferCmd - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_Unlock - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_UnlockBank1 - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_Lock - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_LockBank1 - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ErasePage - 0x00000000 0x9c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_EraseAllPages - 0x00000000 0x8c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_EraseAllBank1Pages - 0x00000000 0x8c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_EraseOptionBytes - 0x00000000 0x14c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ProgramWord - 0x00000000 0xd0 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ProgramHalfWord - 0x00000000 0x80 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ProgramOptionByteData - 0x00000000 0xac THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_EnableWriteProtection - 0x00000000 0x178 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ReadOutProtection - 0x00000000 0x14c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_UserOptionByteConfig - 0x00000000 0xc8 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_GetUserOptionByte 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_GetWriteProtectionOptionByte - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_GetReadOutProtectionStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_GetPrefetchBufferStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_ITConfig - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_flash.o - .text.FLASH_GetFlagStatus + .text.FLASH_LockBank1 + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ErasePage 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_EraseAllPages + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_EraseAllBank1Pages + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_EraseOptionBytes + 0x00000000 0xdc THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ProgramWord + 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ProgramHalfWord + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ProgramOptionByteData + 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_EnableWriteProtection + 0x00000000 0x11c THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ReadOutProtection + 0x00000000 0xd8 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_UserOptionByteConfig + 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_GetUserOptionByte + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_GetWriteProtectionOptionByte + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_GetReadOutProtectionStatus + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_GetPrefetchBufferStatus + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_ITConfig + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_flash.o + .text.FLASH_GetFlagStatus + 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_ClearFlag - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_GetStatus - 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_GetBank1Status - 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_WaitForLastOperation - 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_flash.o .text.FLASH_WaitForLastBank1Operation - 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_flash.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_frame 0x00000000 0x650 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_info 0x00000000 0x783 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_abbrev 0x00000000 0x192 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_pubnames + 0x00000000 0x376 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_pubtypes + 0x00000000 0x133 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_aranges + 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_ranges 0x00000000 0xe8 THUMB Debug/../../obj/stm32f10x_flash.o + .debug_line 0x00000000 0x5bc THUMB Debug/../../obj/stm32f10x_flash.o + .debug_str 0x00000000 0x6af THUMB Debug/../../obj/stm32f10x_flash.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_flash.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_flash.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_fsmc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_fsmc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NORSRAMDeInit - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NANDDeInit - 0x00000000 0x8c THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_PCCARDDeInit - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NORSRAMInit - 0x00000000 0x150 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x134 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NANDInit - 0x00000000 0x100 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0xcc THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_PCCARDInit - 0x00000000 0xd4 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0xac THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NORSRAMStructInit - 0x00000000 0x108 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0xd4 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NANDStructInit - 0x00000000 0x9c THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_PCCARDStructInit - 0x00000000 0xa4 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x84 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NORSRAMCmd 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_NANDCmd - 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x6c THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_PCCARDCmd - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_fsmc.o - .text.FSMC_NANDECCCmd - 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_fsmc.o - .text.FSMC_GetECC 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_fsmc.o + .text.FSMC_NANDECCCmd + 0x00000000 0x6c THUMB Debug/../../obj/stm32f10x_fsmc.o + .text.FSMC_GetECC + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_ITConfig - 0x00000000 0xe0 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0xa0 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_GetFlagStatus - 0x00000000 0x74 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_ClearFlag - 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_GetITStatus - 0x00000000 0x94 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x80 THUMB Debug/../../obj/stm32f10x_fsmc.o .text.FSMC_ClearITPendingBit - 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_fsmc.o + 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_frame 0x00000000 0x4c0 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_info 0x00000000 0x8cd THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_abbrev 0x00000000 0x175 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_pubnames + 0x00000000 0x1cc THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_pubtypes + 0x00000000 0x20e THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_aranges + 0x00000000 0xb0 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_ranges 0x00000000 0xa0 THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_line 0x00000000 0x57d THUMB Debug/../../obj/stm32f10x_fsmc.o + .debug_str 0x00000000 0x84b THUMB Debug/../../obj/stm32f10x_fsmc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_fsmc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_fsmc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_gpio.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_gpio.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_DeInit - 0x00000000 0x17c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0xe8 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_AFIODeInit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_StructInit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadInputDataBit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadInputData - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadOutputDataBit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ReadOutputData - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_WriteBit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_Write 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_PinLockConfig 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_EventOutputConfig - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_EventOutputCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_EXTILineConfig - 0x00000000 0xb0 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x84 THUMB Debug/../../obj/stm32f10x_gpio.o .text.GPIO_ETH_MediaInterfaceConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_i2c.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_i2c.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_DeInit - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_Init - 0x00000000 0x1b4 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x188 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_i2c.o - .text.I2C_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + .text.I2C_Cmd 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_DMACmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_DMALastTransferCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GenerateSTART - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GenerateSTOP - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_AcknowledgeConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_OwnAddress2Config 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_DualAddressCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GeneralCallCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_ITConfig 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_SendData @@ -475,7 +648,7 @@ Discarded input sections .text.I2C_Send7bitAddress 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_ReadRegister - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_SoftwareResetCmd 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_NACKPositionConfig @@ -483,31 +656,46 @@ Discarded input sections .text.I2C_SMBusAlertConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_TransmitPEC - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_PECPositionConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_CalculatePEC - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GetPEC - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_ARPCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_StretchClockCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_FastModeDutyCycleConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_CheckEvent - 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GetLastEvent - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_GetFlagStatus - 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_i2c.o - .text.I2C_ClearFlag - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_i2c.o - .text.I2C_GetITStatus 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_i2c.o + .text.I2C_ClearFlag + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_i2c.o + .text.I2C_GetITStatus + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_i2c.o .text.I2C_ClearITPendingBit - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_i2c.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_frame 0x00000000 0x840 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_info 0x00000000 0xad2 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_abbrev 0x00000000 0x169 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_pubnames + 0x00000000 0x30a THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_pubtypes + 0x00000000 0x158 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_aranges + 0x00000000 0x120 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_ranges 0x00000000 0x110 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_line 0x00000000 0x5d5 THUMB Debug/../../obj/stm32f10x_i2c.o + .debug_str 0x00000000 0x72d THUMB Debug/../../obj/stm32f10x_i2c.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_i2c.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_i2c.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_iwdg.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_iwdg.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_iwdg.o @@ -522,75 +710,103 @@ Discarded input sections .text.IWDG_Enable 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_iwdg.o .text.IWDG_GetFlagStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_iwdg.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_frame 0x00000000 0x170 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_info 0x00000000 0x1d4 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_abbrev 0x00000000 0x106 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_pubnames + 0x00000000 0xa3 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_pubtypes + 0x00000000 0xfe THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_aranges + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_ranges 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_line 0x00000000 0x2ad THUMB Debug/../../obj/stm32f10x_iwdg.o + .debug_str 0x00000000 0x323 THUMB Debug/../../obj/stm32f10x_iwdg.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_iwdg.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_iwdg.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_pwr.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_pwr.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_pwr.o - .text.__WFI 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_pwr.o - .text.__WFE 0x00000000 0xc THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_DeInit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_pwr.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_BackupAccessCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_PVDCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_PVDLevelConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_pwr.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_WakeUpPinCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_EnterSTOPMode - 0x00000000 0x90 THUMB Debug/../../obj/stm32f10x_pwr.o + 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_EnterSTANDBYMode - 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_pwr.o - .text.PWR_GetFlagStatus 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_pwr.o + .text.PWR_GetFlagStatus + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_pwr.o .text.PWR_ClearFlag - 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_pwr.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_frame 0x00000000 0x224 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_info 0x00000000 0x465 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_abbrev 0x00000000 0x184 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_pubnames + 0x00000000 0x108 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_pubtypes + 0x00000000 0x11e THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_aranges + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_ranges 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_line 0x00000000 0x319 THUMB Debug/../../obj/stm32f10x_pwr.o + .debug_str 0x00000000 0x3e9 THUMB Debug/../../obj/stm32f10x_pwr.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_pwr.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_pwr.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rcc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rcc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_DeInit - 0x00000000 0x9c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_HSEConfig - 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_WaitForHSEStartUp - 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_AdjustHSICalibrationValue - 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_HSICmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PLLConfig - 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PLLCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_SYSCLKConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_GetSYSCLKSource - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_HCLKConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PCLK1Config - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_PCLK2Config - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ITConfig - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_USBCLKConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ADCCLKConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_LSEConfig - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_LSICmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_RTCCLKConfig - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_RTCCLKCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_AHBPeriphClockCmd - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_APB2PeriphResetCmd - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_BackupResetCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ClockSecuritySystemCmd @@ -598,89 +814,104 @@ Discarded input sections .text.RCC_MCOConfig 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_GetFlagStatus - 0x00000000 0x90 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ClearFlag - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_GetITStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_rcc.o .text.RCC_ClearITPendingBit 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rcc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rtc.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rtc.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_ITConfig - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_EnterConfigMode - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_ExitConfigMode - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_GetCounter - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_SetCounter - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_SetPrescaler - 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_SetAlarm - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_GetDivider - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_WaitForLastTask 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_WaitForSynchro - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_GetFlagStatus - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_ClearFlag - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_GetITStatus - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_rtc.o .text.RTC_ClearITPendingBit - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_rtc.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_frame 0x00000000 0x338 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_info 0x00000000 0x402 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_abbrev 0x00000000 0x192 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_pubnames + 0x00000000 0x15f THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_pubtypes + 0x00000000 0x11e THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_aranges + 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_ranges 0x00000000 0x78 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_line 0x00000000 0x368 THUMB Debug/../../obj/stm32f10x_rtc.o + .debug_str 0x00000000 0x469 THUMB Debug/../../obj/stm32f10x_rtc.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_rtc.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_rtc.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_sdio.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_sdio.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_DeInit - 0x00000000 0x8c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_Init - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ClockCmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SetPowerState - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetPowerState - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ITConfig - 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_DMACmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SendCommand - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_CmdStructInit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetCommandResponse 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetResponse - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_DataConfig - 0x00000000 0x70 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_DataStructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetDataCounter - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ReadData 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_WriteData 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetFIFOCount - 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x14 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_StartSDIOReadWait 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_StopSDIOReadWait 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SetSDIOReadWaitMode - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SetSDIOOperation 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_SendSDIOSuspendCmd @@ -692,90 +923,120 @@ Discarded input sections .text.SDIO_SendCEATACmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetFlagStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ClearFlag - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_GetITStatus - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_sdio.o .text.SDIO_ClearITPendingBit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_sdio.o + 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_frame 0x00000000 0x730 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_info 0x00000000 0x7c4 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_abbrev 0x00000000 0x1b4 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_pubnames + 0x00000000 0x2d5 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_pubtypes + 0x00000000 0x158 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_aranges + 0x00000000 0x108 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_ranges 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_line 0x00000000 0x536 THUMB Debug/../../obj/stm32f10x_sdio.o + .debug_str 0x00000000 0x702 THUMB Debug/../../obj/stm32f10x_sdio.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_sdio.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_sdio.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_spi.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_spi.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_DeInit - 0x00000000 0xac THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x7c THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_Init 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_spi.o .text.I2S_Init - 0x00000000 0x1a0 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x16c THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_StructInit - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_spi.o .text.I2S_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_spi.o - .text.SPI_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_spi.o - .text.I2S_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_spi.o + .text.SPI_Cmd 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o + .text.I2S_Cmd 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_ITConfig - 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_DMACmd 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_SendData 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_ReceiveData - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_NSSInternalSoftwareConfig 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_SSOutputCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_DataSizeConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_TransmitCRC 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_CalculateCRC - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_GetCRC - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_GetCRCPolynomial - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_spi.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_BiDirectionalLineConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o .text.SPI_I2S_GetFlagStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_spi.o - .text.SPI_I2S_ClearFlag - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_spi.o - .text.SPI_I2S_GetITStatus - 0x00000000 0x88 THUMB Debug/../../obj/stm32f10x_spi.o - .text.SPI_I2S_ClearITPendingBit 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_spi.o + .text.SPI_I2S_ClearFlag + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_spi.o + .text.SPI_I2S_GetITStatus + 0x00000000 0x74 THUMB Debug/../../obj/stm32f10x_spi.o + .text.SPI_I2S_ClearITPendingBit + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_frame 0x00000000 0x5c0 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_info 0x00000000 0x8c1 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_abbrev 0x00000000 0x183 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_pubnames + 0x00000000 0x21f THUMB Debug/../../obj/stm32f10x_spi.o + .debug_pubtypes + 0x00000000 0x15c THUMB Debug/../../obj/stm32f10x_spi.o + .debug_aranges + 0x00000000 0xd0 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_ranges 0x00000000 0xc0 THUMB Debug/../../obj/stm32f10x_spi.o + .debug_line 0x00000000 0x51d THUMB Debug/../../obj/stm32f10x_spi.o + .debug_str 0x00000000 0x6c4 THUMB Debug/../../obj/stm32f10x_spi.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_spi.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_spi.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_tim.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_tim.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_DeInit - 0x00000000 0x37c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x234 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_TimeBaseInit - 0x00000000 0x11c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1Init - 0x00000000 0x128 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x118 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC2Init - 0x00000000 0x128 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x110 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC3Init - 0x00000000 0x120 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x10c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC4Init - 0x00000000 0xe0 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xd0 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ICInit - 0x00000000 0xe8 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xc8 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_PWMIConfig - 0x00000000 0xfc THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xc8 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_BDTRConfig 0x00000000 0x50 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_TimeBaseStructInit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OCStructInit - 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ICStructInit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x30 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_BDTRStructInit - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_Cmd 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_Cmd 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_CtrlPWMOutputs 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ITConfig @@ -791,13 +1052,13 @@ Discarded input sections .text.TIM_ITRxExternalClockConfig 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_TIxExternalClockConfig - 0x00000000 0x6c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x68 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ETRClockMode1Config - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x64 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ETRClockMode2Config - 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ETRConfig - 0x00000000 0x4c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_PrescalerConfig 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_CounterModeConfig @@ -805,73 +1066,73 @@ Discarded input sections .text.TIM_SelectInputTrigger 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_EncoderInterfaceConfig - 0x00000000 0x94 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x98 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ForcedOC1Config 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ForcedOC2Config - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ForcedOC3Config 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ForcedOC4Config - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ARRPreloadConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectCOM - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectCCDMA - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_CCPreloadControl - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1PreloadConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC2PreloadConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC3PreloadConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC4PreloadConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1FastConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC2FastConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC3FastConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC4FastConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearOC1Ref 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearOC2Ref - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearOC3Ref 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearOC4Ref - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1PolarityConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC1NPolarityConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_OC2PolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_OC2NPolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_OC3PolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_OC3NPolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_OC4PolarityConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_CCxCmd - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_CCxNCmd - 0x00000000 0x5c THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_SelectOCxM - 0x00000000 0xbc THUMB Debug/../../obj/stm32f10x_tim.o - .text.TIM_UpdateDisableConfig 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_OC2NPolarityConfig + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_OC3PolarityConfig + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_OC3NPolarityConfig + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_OC4PolarityConfig + 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_CCxCmd + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_CCxNCmd + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_SelectOCxM + 0x00000000 0xac THUMB Debug/../../obj/stm32f10x_tim.o + .text.TIM_UpdateDisableConfig + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_UpdateRequestConfig 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectHallSensor - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectOnePulseMode 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_SelectOutputTrigger @@ -903,46 +1164,61 @@ Discarded input sections .text.TIM_SetClockDivision 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCapture1 - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCapture2 - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCapture3 - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCapture4 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetCounter - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetPrescaler - 0x00000000 0x1c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetFlagStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearFlag - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_GetITStatus - 0x00000000 0x60 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x54 THUMB Debug/../../obj/stm32f10x_tim.o .text.TIM_ClearITPendingBit - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_tim.o .text.TI1_Config - 0x00000000 0xe4 THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xe0 THUMB Debug/../../obj/stm32f10x_tim.o .text.TI2_Config - 0x00000000 0x104 THUMB Debug/../../obj/stm32f10x_tim.o - .text.TI3_Config 0x00000000 0xf4 THUMB Debug/../../obj/stm32f10x_tim.o + .text.TI3_Config + 0x00000000 0xec THUMB Debug/../../obj/stm32f10x_tim.o .text.TI4_Config - 0x00000000 0x10c THUMB Debug/../../obj/stm32f10x_tim.o + 0x00000000 0xf8 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_frame 0x00000000 0x16ac THUMB Debug/../../obj/stm32f10x_tim.o + .debug_info 0x00000000 0x1c26 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_abbrev 0x00000000 0x1b5 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_pubnames + 0x00000000 0x815 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_pubtypes + 0x00000000 0x17e THUMB Debug/../../obj/stm32f10x_tim.o + .debug_aranges + 0x00000000 0x2f0 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_ranges 0x00000000 0x2e0 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_line 0x00000000 0xc40 THUMB Debug/../../obj/stm32f10x_tim.o + .debug_str 0x00000000 0xea4 THUMB Debug/../../obj/stm32f10x_tim.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_tim.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_tim.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_usart.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_usart.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_DeInit - 0x00000000 0x114 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0xc0 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_StructInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClockInit 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClockStructInit - 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ITConfig - 0x00000000 0xa0 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x90 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_DMACmd 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SetAddress @@ -950,13 +1226,13 @@ Discarded input sections .text.USART_WakeUpConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ReceiverWakeUpCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_LINBreakDetectLengthConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_LINCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SendData - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SendBreak 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SetGuardTime @@ -964,87 +1240,59 @@ Discarded input sections .text.USART_SetPrescaler 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SmartCardCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_SmartCardNACKCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_HalfDuplexCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_OverSampling8Cmd 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_OneBitMethodCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_IrDAConfig 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_IrDACmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x40 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClearFlag - 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_GetITStatus - 0x00000000 0xc4 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0xb4 THUMB Debug/../../obj/stm32f10x_usart.o .text.USART_ClearITPendingBit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_usart.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_usart.o .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_wwdg.o .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_wwdg.o .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_DeInit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f10x_wwdg.o + 0x00000000 0x20 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_SetPrescaler - 0x00000000 0x3c THUMB Debug/../../obj/stm32f10x_wwdg.o + 0x00000000 0x34 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_SetWindowValue - 0x00000000 0x44 THUMB Debug/../../obj/stm32f10x_wwdg.o + 0x00000000 0x38 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_EnableIT 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_SetCounter 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_Enable - 0x00000000 0x28 THUMB Debug/../../obj/stm32f10x_wwdg.o + 0x00000000 0x24 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_GetFlagStatus 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_wwdg.o .text.WWDG_ClearFlag 0x00000000 0x18 THUMB Debug/../../obj/stm32f10x_wwdg.o - .text 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .data 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/core_cm3.o - .text.__get_PSP - 0x00000000 0x10 THUMB Debug/../../obj/core_cm3.o - .text.__set_PSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_MSP - 0x00000000 0x10 THUMB Debug/../../obj/core_cm3.o - .text.__set_MSP - 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o - .text.__get_BASEPRI - 0x00000000 0x20 THUMB Debug/../../obj/core_cm3.o - .text.__set_BASEPRI - 0x00000000 0x18 THUMB Debug/../../obj/core_cm3.o - .text.__get_PRIMASK - 0x00000000 0x20 THUMB Debug/../../obj/core_cm3.o - .text.__set_PRIMASK - 0x00000000 0x18 THUMB Debug/../../obj/core_cm3.o - .text.__get_FAULTMASK - 0x00000000 0x20 THUMB Debug/../../obj/core_cm3.o - .text.__set_FAULTMASK - 0x00000000 0x18 THUMB Debug/../../obj/core_cm3.o - .text.__get_CONTROL - 0x00000000 0x20 THUMB Debug/../../obj/core_cm3.o - .text.__set_CONTROL - 0x00000000 0x18 THUMB Debug/../../obj/core_cm3.o - .text.__REV 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__REV16 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__REVSH 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__RBIT 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXB - 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXH - 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__LDREXW - 0x00000000 0x24 THUMB Debug/../../obj/core_cm3.o - .text.__STREXB - 0x00000000 0x2c THUMB Debug/../../obj/core_cm3.o - .text.__STREXH - 0x00000000 0x2c THUMB Debug/../../obj/core_cm3.o - .text.__STREXW - 0x00000000 0x28 THUMB Debug/../../obj/core_cm3.o + .debug_frame 0x00000000 0x1c4 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_info 0x00000000 0x207 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_abbrev 0x00000000 0x11c THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_pubnames + 0x00000000 0xd9 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_pubtypes + 0x00000000 0xf1 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_aranges + 0x00000000 0x58 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_ranges 0x00000000 0x48 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_line 0x00000000 0x2d4 THUMB Debug/../../obj/stm32f10x_wwdg.o + .debug_str 0x00000000 0x32f THUMB Debug/../../obj/stm32f10x_wwdg.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/stm32f10x_wwdg.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/stm32f10x_wwdg.o .text 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .data 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .bss 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o @@ -1053,170 +1301,1866 @@ Discarded input sections .data.AHBPrescTable 0x00000000 0x10 THUMB Debug/../../obj/system_stm32f10x.o .text.SystemInit - 0x00000000 0xb0 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0x6c THUMB Debug/../../obj/system_stm32f10x.o .text.SystemCoreClockUpdate - 0x00000000 0x148 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0xd8 THUMB Debug/../../obj/system_stm32f10x.o .text.SetSysClock 0x00000000 0x10 THUMB Debug/../../obj/system_stm32f10x.o .text.SetSysClockTo72 - 0x00000000 0x1ac THUMB Debug/../../obj/system_stm32f10x.o - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio - 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.__do_nvdebug_operation - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_abort - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fopen - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgets - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fputs - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fread - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fwrite - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fseek - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ftell - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_gets - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fflush - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fclose - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetc - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_putchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_puts - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rewind - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_clearerr - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_feof - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ferror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getch - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_time - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vprintf - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfprintf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ungetc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fgetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_fsetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_freopen - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_perror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_remove - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_rename - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpfile - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_tmpnam - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getenv - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_system - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vfscanf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_vscanf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_exit - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_enabled - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_kbhit - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_ioctl - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_runtime_error - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_break - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getargs - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_geti - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getu - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getl - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getul - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getd - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getll - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_getull - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_filesize - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_accept - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_bind - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_listen - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_shutdown - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_socket - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htons - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_htonl - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_loadsymbols - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text.libdebugio.debug_unloadsymbols - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.getenv_buffer - 0x00000000 0x400 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.__dbgEnabled - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .bss.libdebugio.tmpnam_buffer - 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__errno - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__heap_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__printf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .text.libc.__scanf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - .bss.libc.errno - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x00000000 0x100 THUMB Debug/../../obj/system_stm32f10x.o + .debug_frame 0x00000000 0xd8 THUMB Debug/../../obj/system_stm32f10x.o + .debug_info 0x00000000 0x462 THUMB Debug/../../obj/system_stm32f10x.o + .debug_abbrev 0x00000000 0x151 THUMB Debug/../../obj/system_stm32f10x.o + .debug_pubnames + 0x00000000 0x97 THUMB Debug/../../obj/system_stm32f10x.o + .debug_pubtypes + 0x00000000 0x10d THUMB Debug/../../obj/system_stm32f10x.o + .debug_aranges + 0x00000000 0x38 THUMB Debug/../../obj/system_stm32f10x.o + .debug_ranges 0x00000000 0x28 THUMB Debug/../../obj/system_stm32f10x.o + .debug_line 0x00000000 0x2f3 THUMB Debug/../../obj/system_stm32f10x.o + .debug_str 0x00000000 0x3bd THUMB Debug/../../obj/system_stm32f10x.o + .comment 0x00000000 0x4d THUMB Debug/../../obj/system_stm32f10x.o + .ARM.attributes + 0x00000000 0x33 THUMB Debug/../../obj/system_stm32f10x.o + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int + 0x00000000 0x5e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp + 0x00000000 0x49c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long + 0x00000000 0x600 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp + 0x00000000 0x4b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long + 0x00000000 0x730 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp + 0x00000000 0x580 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long + 0x00000000 0xfe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_compute_wide_metrics + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__RAL_print_wide_string + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_wchar + 0x00000000 0x698 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_int_nwp_wchar + 0x00000000 0x4e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_wchar + 0x00000000 0x6a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_nwp_wchar + 0x00000000 0x4e8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_wchar + 0x00000000 0x7d8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_long_long_nwp_wchar + 0x00000000 0x604 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text.libc.__vfprintf_float_long_long_wchar + 0x00000000 0x104c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.str1.4 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .rodata.libc.ipow10 + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x3f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x160 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x36e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__ungetc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_string_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long + 0x00000000 0x194 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_int_long_long + 0x00000000 0x1c8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.rd_real + 0x00000000 0x274 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_int_cc + 0x00000000 0x3a8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_cc + 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_long_long_cc + 0x00000000 0x3d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_cc + 0x00000000 0x3c4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc.__vfscanf_float_long_long_cc + 0x00000000 0x3e4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_frame 0x00000000 0x38c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_info 0x00000000 0x14b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_abbrev 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_aranges + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_ranges 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_line 0x00000000 0x7a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .debug_str 0x00000000 0x2dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int32_to_float32 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int32_to_float64 + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint32_to_float32 + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint32_to_float64 + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int64_to_float32 + 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__int64_to_float64 + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint64_to_float32 + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__uint64_to_float64 + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_int32 + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_int64 + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_uint32 + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_uint64 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_int32 + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_int64 + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_uint32 + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_uint64 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_to_float64 + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_to_float32 + 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_add + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_mul + 0x00000000 0xd4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_div + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_cmp + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_cfrcmple + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpeq + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmplt + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmple + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpgt + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__aeabi_fcmpge + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_add + 0x00000000 0x294 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_mul + 0x00000000 0x16c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_div + 0x00000000 0x214 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmp + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmpeq + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdcmple + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cdrcmple + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpeq + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmple + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpge + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmplt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpgt + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_cmpun + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_signbit + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_signbit + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isinf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isinf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isnan + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isnan + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isfinite + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isfinite + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_isnormal + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_isnormal + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float32_classify + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text.libc.__float64_classify + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float32_infinity + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float32_nan + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float64_infinity + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .rodata.libc.__float64_nan + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .debug_frame 0x00000000 0x440 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_eval + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly1_evalf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_eval + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_poly_evalf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincos + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_sincosf + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2 + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanf + 0x00000000 0x170 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atan2f + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ceil + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cos + 0x00000000 0x1b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosf + 0x00000000 0x258 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.expf + 0x00000000 0x128 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.coshf + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fma + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaf + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmax + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmaxf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmin + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fminf + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.frexp + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.ldexp + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cosh + 0x00000000 0xf4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log + 0x00000000 0x240 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanh + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.logf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.atanhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.log10f + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modf + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.modff + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.pow + 0x00000000 0x118 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2 + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.powf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.exp2f + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbn + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.scalbnf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sin + 0x00000000 0x1b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinf + 0x00000000 0x224 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinh + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sinhf + 0x00000000 0xcc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tan + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanf + 0x00000000 0x150 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanh + 0x00000000 0x1d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.tanhf + 0x00000000 0x130 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrt + 0x00000000 0x110 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacos + 0x00000000 0x2c0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosh + 0x00000000 0x108 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinh + 0x00000000 0x114 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypot + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asin + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acos + 0x00000000 0x268 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.sqrtf + 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.__RAL_asinacosf + 0x00000000 0x1d4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acoshf + 0x00000000 0xc8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinhf + 0x00000000 0xb4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.hypotf + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.asinf + 0x00000000 0x184 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.acosf + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrtf + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.cbrt + 0x00000000 0x1cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.floor + 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmodf + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc.fmod + 0x00000000 0x154 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_a + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacosf_b + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.atanf_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_a + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .rodata.libc.__asinacos_b + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_frame 0x00000000 0xb80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_info 0x00000000 0x847 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_abbrev 0x00000000 0xdb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_aranges + 0x00000000 0x228 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_ranges 0x00000000 0x750 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_line 0x00000000 0x345 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .debug_str 0x00000000 0x364 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.fabsf + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ceilf + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.floorf + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.ldexpf + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc.frexpf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .debug_frame 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a(libm2_asm.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_umod + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_asr + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_div + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_lsl + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_lsr + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_mod + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_udivmod + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__aeabi_ldivmod + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_cmp + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int64_ucmp + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.muldi3 + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int32_umod + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int32_div + 0x00000000 0x310 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .rodata.libc.__aeabi_idiv + 0x00000000 0xa C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .rodata.libc.__aeabi_uidiv + 0x00000000 0x46 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__int32_mod + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__aeabi_uidivmod + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__aeabi_idivmod + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.ctl_count_leading_zeros_32 + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.ctl_count_leading_zeros_16 + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_shi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_si + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_sqi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_uhi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text.libc.__gnu_thumb1_case_uqi + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .debug_frame 0x00000000 0x164 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc_asm.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__stdin_ungetc + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.twodigit + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc_fn + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_isctype + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_toupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_tolower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_iswctype + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_towlower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_ch + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_str + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigits_leading_blank + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_twodigit_optional_zero_suppress + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_wctomb + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_wctomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_map_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_singleton_search + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_bmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_set_nonbmp_range_search + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_ascii_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_utf8_mbtowc + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__getc + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pow10 + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__putc + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_print_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_pre_padding + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__xlltoa + 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__xltoa + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__xtoa + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.abs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atexit + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc._execute_at_exit_fns + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.bsearch + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towupper + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_toupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_towlower + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_is_exact_power_of_two + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_round_power_of_two + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_count_leading_zeroes + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctl_ilogb + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_alloc + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_heap_init + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_isctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_isctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalpha + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.islower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__digit + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isspace + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ispunct + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalnum + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isprint + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isgraph + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iscntrl + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isblank + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.toupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.islower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ispunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iscntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.isblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tolower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.toupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.div + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__aeabi_errno_addr + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.buddy_free + 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoul + 0x00000000 0xdc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__strtoull + 0x00000000 0x148 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fopen + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfprintf + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vfscanf + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fscanf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetpos + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ftell + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ungetc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fileno + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.feof + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ferror + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fstat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gets + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.itoa + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.labs + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ldiv + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_init + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_alloc + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_free + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.linked_heap_realloc + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.llabs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.lldiv + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.lltoa + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_global_locale_category + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_locale_category + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localeconv_l + 0x00000000 0xd8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localeconv + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_compare_locale_name + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ltoa + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.malloc + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getBuf + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fflush + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fseek + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fsetpos + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.rewind + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.output_fn + 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fputs + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fwrite + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc_fn + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgetc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fread + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.getc + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fgets + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.calloc + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.free + 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setBuf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.fclose + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setbuf + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setvbuf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.realloc + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memccpy + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mempcpy + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memchr + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memcmp + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.memmove + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.printf + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.putchar + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.puts + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.qsort + 0x00000000 0x21c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.rand + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.scanf + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.snprintf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.sprintf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.srand + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.sscanf + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcasecmp + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcasestr + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_decode_error + 0x00000000 0x78 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strerror + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_register_error_decoder + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_encode_locale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strchr + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcoll + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strcspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strdup + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_encode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_string_list_decode + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime_r + 0x00000000 0xa4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.asctime + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncasecmp + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncasestr + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncat + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strlcat + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strnchr + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncmp + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strncpy + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strlcpy + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strnlen + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strndup + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strnstr + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strpbrk + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strrchr + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strsep + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strstr + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtod + 0x00000000 0x1e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtof + 0x00000000 0x1a4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtok + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtok_r + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtol + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atoi + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atof + 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atol + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtoll + 0x00000000 0xd0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.atoll + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtoul + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strtoull + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strxfrm + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localtime_r + 0x00000000 0x14c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.difftime + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.checktm + 0x00000000 0x1dc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mktime + 0x00000000 0x180 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctime + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ctime_r + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gmtime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gmtime_r + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.localtime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.gettimeofday + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.settimeofday + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.time + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ulltoa + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.ultoa + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.utoa + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vprintf + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vscanf + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vsnprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vsprintf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.vsscanf + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscat + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcschr + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscmp + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscpy + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcscspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcslen + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsdup + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsncat + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsnchr + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsncmp + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsncpy + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsnlen + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsnstr + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcspbrk + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrchr + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcssep + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsspn + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsstr + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstok + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstok_r + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemcpy + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemccpy + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmempcpy + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemmove + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemcmp + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemchr + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wmemset + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.tmpnam + 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.duplocale + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.freelocale + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_find_locale + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_set_locale + 0x00000000 0x9c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.setlocale + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.newlocale + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__user_find_locale + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsinit + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctob + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc_l + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.btowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen_l + 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mblen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen_l + 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrlen + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_wide_char + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.put_formatted + 0x00000000 0x4cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime_l + 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.strftime + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb_l + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcrtomb + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc_l + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbtowc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc_l + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbrtowc + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs_l + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbstowcs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs_l + 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.mbsrtowcs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs_l + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcstombs + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs_l + 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wcsrtombs + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_init_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_mb_max + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_1 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_2 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_3 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_4 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_5 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_6 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_7 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_8 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_9 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_10 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_11 + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_13 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_14 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_15 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_iso8859_16 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1250 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1251 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1252 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1253 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1254 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1255 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1256 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1257 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_to_unicode + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_mbtowc + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_to_cp1258 + 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_toupper + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_tolower + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_wctomb + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctrans_l + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.towctrans_l + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalpha + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswprint + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswblank + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswcntrl + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswspace + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswalnum + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswlower + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswupper + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswgraph + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswpunct + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.wctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iswctype_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_iswctype + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_unicode_isctype + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_1_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_2_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_3_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_4_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_5_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_6_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_7_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_8_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_9_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_10_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_11_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_13_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_14_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_15_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_iso8859_16_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1250_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1251_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1252_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1253_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1254_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1255_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1256_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1257_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.__RAL_cp1258_isctype + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalpha_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswupper_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswlower_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswxdigit_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswspace_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswpunct_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswalnum_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswprint_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswgraph_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswcntrl_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc.iswblank_l + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1258_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_singleton_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_11 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_13 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_14 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_15 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_16 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1253_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctrans_name_list + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_abbrev_month_names + 0x00000000 0x31 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1253 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_4 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_period + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_singleton + 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_6 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_3_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcsrtombs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.power + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_9 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_strtok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EDOM + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_singleton_map + 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_9_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_singleton_map + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_singleton_map + 0x00000000 0xe0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isprint_range + 0x00000000 0x470 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_singleton_map + 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_7_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__RAL_global_locale + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_10_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_4_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_fileno + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_get_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_uc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_singleton + 0x00000000 0xac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_range + 0x00000000 0x534 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_14_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1256_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_11_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_singleton_map + 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_5_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_range + 0x00000000 0x2d0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isprint_singleton + 0x00000000 0x52 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unknown_string + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.str1.4 + 0x00000000 0xf1 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_empty_string + 0x00000000 0x1 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_plus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1250 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_8_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_range2_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1251_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.streams + 0x00000000 0xc0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_singleton_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1255 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1257_singleton_map + 0x00000000 0x134 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_tmpnam_template + 0x00000000 0x11 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1258 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_ascii_ctype_mask + 0x00000000 0xd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_singleton_map + 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_1_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_singleton_map + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stdout + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.iod2 + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wctomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__ungot + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.stdin + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_3 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_7_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.atexitfn_count + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_singleton_map + 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1252_range_map + 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_day_names + 0x00000000 0x3a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_abbrev_day_names + 0x00000000 0x1d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbsrtowcs_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_2_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_singleton_map + 0x00000000 0xec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_singleton_map + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_space + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.heap + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_8_singleton_map + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_am_pm_indicator + 0x00000000 0x7 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_3_range_map + 0x00000000 0x5a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_tmpnam_buf + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcrtomb_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_data + 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1256_range_map + 0x00000000 0x72 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_mon_lengths + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_asctime_buf + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range1_map + 0x00000000 0xde C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_range_map + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_1 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_2 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.errno_val + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrlen_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_5 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_singleton_map + 0x00000000 0x124 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_7 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1254_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_year_lengths + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1251_singleton_map + 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_ascii + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1250_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_2_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1252 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1255_range_map + 0x00000000 0x4e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1254 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_13_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1256 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1257 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_16_singleton_map + 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_month_names + 0x00000000 0x57 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_date_time_format + 0x00000000 0xf C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1250_range_map + 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_EILSEQ + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbrtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_minus + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_lconv_data + 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_10_range_map + 0x00000000 0x36 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_mbtowc_mbstate + 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1255_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_15_range_map + 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_hex_lc + 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_wctype_class_name_list + 0x00000000 0x4a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_cp1251 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_isalpha_range + 0x00000000 0x46c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_1_range_map + 0x00000000 0x6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_singleton_map + 0x00000000 0x168 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_6_range_map + 0x00000000 0x12 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_nonbmp_isalpha_singleton + 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_set_time_of_day + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_5_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_range_map + 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__user_format_extender + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_singleton_map + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .tbss.__RAL_wcstok_state + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.stderr + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1254_range_map + 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_15_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_time_format + 0x00000000 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .data.libc.__RAL_rand_next + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_c_locale_date_format + 0x00000000 0x9 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__RAL_error_decoder_head + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc.__atexitfns + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1253_singleton_map + 0x00000000 0x40 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_6_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_tolower_singleton_map + 0x00000000 0x13c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_utf8 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1257_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_data_utf8_comma + 0x00000000 0x2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_cp1258_range_map + 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .bss.libc._tm 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_13_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_16_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_bmp_toupper_range2_map + 0x00000000 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_cp1252_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_4_range_map + 0x00000000 0x42 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_codeset_iso8859_10 + 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__aeabi_ERANGE + 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_9_range_map + 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_ascii_ctype_map + 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_iso8859_11_to_unicode_map + 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .rodata.libc.__RAL_unicode_to_iso8859_14_singleton_map + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_frame 0x00000000 0x3d6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_info 0x00000000 0x2374 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_abbrev 0x00000000 0x179 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_aranges + 0x00000000 0xfa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_ranges 0x00000000 0xf90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_line 0x00000000 0xb26 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .debug_str 0x00000000 0x203c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .comment 0x00000000 0x4d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .ARM.attributes + 0x00000000 0x2d C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2.o) + .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.longjmp + 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memcpy + 0x00000000 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memcpy_fast + 0x00000000 0x3ac C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memcpy_small + 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.memset + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.__aeabi_memset + 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.setjmp + 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strcpy + 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strcmp + 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .text.libc.strlen + 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .debug_frame 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) + .ARM.attributes + 0x00000000 0x1b C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a(libc2_asm.o) Memory Configuration @@ -1228,7 +3172,8 @@ FLASH 0x08006000 0x0001a000 xr Linker script and memory map - 0x08007b4c __do_debug_operation = __do_debug_operation_mempoll + 0x00000000 __vfprintf = __vfprintf_float_long_long + 0x00000000 __vfscanf = __vfscanf_float_long_long_cc 0x20000000 __SRAM_segment_start__ = 0x20000000 0x20005000 __SRAM_segment_end__ = 0x20005000 0x08006000 __FLASH_segment_start__ = 0x8006000 @@ -1261,193 +3206,189 @@ Linker script and memory map 0x00000001 . = ASSERT (((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <= __FLASH_segment_end__)), error: .vectors is too large to fit in FLASH memory segment) 0x08006154 __init_load_start__ = ALIGN (__vectors_end__, 0x4) -.init 0x08006154 0x114 +.init 0x08006154 0x118 0x08006154 __init_start__ = . *(.init .init.*) - .init 0x08006154 0x114 THUMB Debug/../../obj/cstart.o + .init 0x08006154 0x118 THUMB Debug/../../obj/cstart.o 0x08006154 _start - 0x080061d2 exit - 0x080061f6 reset_handler - 0x08006268 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x08006268 __init_load_end__ = __init_end__ + 0x080061d6 exit + 0x080061fa reset_handler + 0x0800626c __init_end__ = (__init_start__ + SIZEOF (.init)) + 0x0800626c __init_load_end__ = __init_end__ 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment) - 0x08006268 __text_load_start__ = ALIGN (__init_end__, 0x4) + 0x0800626c __text_load_start__ = ALIGN (__init_end__, 0x4) -.text 0x08006268 0x1924 - 0x08006268 __text_start__ = . +.text 0x0800626c 0x1370 + 0x0800626c __text_start__ = . *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs - .text.LedInit 0x08006268 0x60 THUMB Debug/../../obj/led.o - 0x08006268 LedInit + .glue_7 0x0800626c 0x0 linker stubs + .glue_7t 0x0800626c 0x0 linker stubs + .text.LedInit 0x0800626c 0x48 THUMB Debug/../../obj/led.o + 0x0800626c LedInit .text.LedToggle - 0x080062c8 0x9c THUMB Debug/../../obj/led.o - 0x080062c8 LedToggle - .text.main 0x08006364 0x30 THUMB Debug/../../obj/main.o - 0x08006364 main - .text.Init 0x08006394 0x254 THUMB Debug/../../obj/main.o + 0x080062b4 0x6c THUMB Debug/../../obj/led.o + 0x080062b4 LedToggle + .text.main 0x08006320 0x28 THUMB Debug/../../obj/main.o + 0x08006320 main + .text.Init 0x08006348 0x160 THUMB Debug/../../obj/main.o .text.NVIC_SetPriority - 0x080065e8 0x58 THUMB Debug/../../obj/timer.o + 0x080064a8 0x54 THUMB Debug/../../obj/timer.o .text.SysTick_Config - 0x08006640 0x68 THUMB Debug/../../obj/timer.o + 0x080064fc 0x48 THUMB Debug/../../obj/timer.o .text.TimerInit - 0x080066a8 0x28 THUMB Debug/../../obj/timer.o - 0x080066a8 TimerInit + 0x08006544 0x20 THUMB Debug/../../obj/timer.o + 0x08006544 TimerInit .text.TimerSet - 0x080066d0 0x20 THUMB Debug/../../obj/timer.o - 0x080066d0 TimerSet + 0x08006564 0x1c THUMB Debug/../../obj/timer.o + 0x08006564 TimerSet .text.TimerGet - 0x080066f0 0x18 THUMB Debug/../../obj/timer.o - 0x080066f0 TimerGet + 0x08006580 0x14 THUMB Debug/../../obj/timer.o + 0x08006580 TimerGet .text.TimerISRHandler - 0x08006708 0x24 THUMB Debug/../../obj/timer.o - 0x08006708 TimerISRHandler + 0x08006594 0x1c THUMB Debug/../../obj/timer.o + 0x08006594 TimerISRHandler .text.UnusedISR - 0x0800672c 0x8 THUMB Debug/../../obj/vectors.o - 0x0800672c UnusedISR - .text.__DSB 0x08006734 0x10 THUMB Debug/../../obj/boot.o + 0x080065b0 0x8 THUMB Debug/../../obj/vectors.o + 0x080065b0 UnusedISR .text.NVIC_SystemReset - 0x08006744 0x34 THUMB Debug/../../obj/boot.o + 0x080065b8 0x28 THUMB Debug/../../obj/boot.o .text.BootComInit - 0x08006778 0x1c THUMB Debug/../../obj/boot.o - 0x08006778 BootComInit + 0x080065e0 0x18 THUMB Debug/../../obj/boot.o + 0x080065e0 BootComInit .text.BootComCheckActivationRequest - 0x08006794 0x1c THUMB Debug/../../obj/boot.o - 0x08006794 BootComCheckActivationRequest + 0x080065f8 0x18 THUMB Debug/../../obj/boot.o + 0x080065f8 BootComCheckActivationRequest .text.BootActivate - 0x080067b0 0x10 THUMB Debug/../../obj/boot.o - 0x080067b0 BootActivate + 0x08006610 0x10 THUMB Debug/../../obj/boot.o + 0x08006610 BootActivate .text.BootComUartInit - 0x080067c0 0xd0 THUMB Debug/../../obj/boot.o + 0x08006620 0x94 THUMB Debug/../../obj/boot.o .text.BootComUartCheckActivationRequest - 0x08006890 0xdc THUMB Debug/../../obj/boot.o + 0x080066b4 0x88 THUMB Debug/../../obj/boot.o .text.UartReceiveByte - 0x0800696c 0x54 THUMB Debug/../../obj/boot.o + 0x0800673c 0x40 THUMB Debug/../../obj/boot.o .text.CanGetSpeedConfig - 0x080069c0 0xf4 THUMB Debug/../../obj/boot.o + 0x0800677c 0xc0 THUMB Debug/../../obj/boot.o .text.BootComCanInit - 0x08006ab4 0x184 THUMB Debug/../../obj/boot.o + 0x0800683c 0x128 THUMB Debug/../../obj/boot.o .text.BootComCanCheckActivationRequest - 0x08006c38 0x64 THUMB Debug/../../obj/boot.o + 0x08006964 0x54 THUMB Debug/../../obj/boot.o .text.CAN_DeInit - 0x08006c9c 0x68 THUMB Debug/../../obj/stm32f10x_can.o - 0x08006c9c CAN_DeInit + 0x080069b8 0x4c THUMB Debug/../../obj/stm32f10x_can.o + 0x080069b8 CAN_DeInit .text.CAN_Init - 0x08006d04 0x1c0 THUMB Debug/../../obj/stm32f10x_can.o - 0x08006d04 CAN_Init + 0x08006a04 0x1a0 THUMB Debug/../../obj/stm32f10x_can.o + 0x08006a04 CAN_Init .text.CAN_FilterInit - 0x08006ec4 0x20c THUMB Debug/../../obj/stm32f10x_can.o - 0x08006ec4 CAN_FilterInit + 0x08006ba4 0x174 THUMB Debug/../../obj/stm32f10x_can.o + 0x08006ba4 CAN_FilterInit .text.CAN_StructInit - 0x080070d0 0x6c THUMB Debug/../../obj/stm32f10x_can.o - 0x080070d0 CAN_StructInit + 0x08006d18 0x54 THUMB Debug/../../obj/stm32f10x_can.o + 0x08006d18 CAN_StructInit .text.CAN_Receive - 0x0800713c 0x1a8 THUMB Debug/../../obj/stm32f10x_can.o - 0x0800713c CAN_Receive + 0x08006d6c 0x174 THUMB Debug/../../obj/stm32f10x_can.o + 0x08006d6c CAN_Receive .text.CAN_MessagePending - 0x080072e4 0x50 THUMB Debug/../../obj/stm32f10x_can.o - 0x080072e4 CAN_MessagePending + 0x08006ee0 0x48 THUMB Debug/../../obj/stm32f10x_can.o + 0x08006ee0 CAN_MessagePending .text.GPIO_Init - 0x08007334 0x1b0 THUMB Debug/../../obj/stm32f10x_gpio.o - 0x08007334 GPIO_Init + 0x08006f28 0x178 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x08006f28 GPIO_Init .text.GPIO_SetBits - 0x080074e4 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o - 0x080074e4 GPIO_SetBits + 0x080070a0 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x080070a0 GPIO_SetBits .text.GPIO_ResetBits - 0x08007500 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o - 0x08007500 GPIO_ResetBits + 0x080070bc 0x1c THUMB Debug/../../obj/stm32f10x_gpio.o + 0x080070bc GPIO_ResetBits .text.GPIO_PinRemapConfig - 0x0800751c 0x11c THUMB Debug/../../obj/stm32f10x_gpio.o - 0x0800751c GPIO_PinRemapConfig + 0x080070d8 0xe0 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x080070d8 GPIO_PinRemapConfig .text.RCC_GetClocksFreq - 0x08007638 0x1d4 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x08007638 RCC_GetClocksFreq + 0x080071b8 0x160 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x080071b8 RCC_GetClocksFreq .text.RCC_APB2PeriphClockCmd - 0x0800780c 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x0800780c RCC_APB2PeriphClockCmd + 0x08007318 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x08007318 RCC_APB2PeriphClockCmd .text.RCC_APB1PeriphClockCmd - 0x0800785c 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x0800785c RCC_APB1PeriphClockCmd + 0x08007354 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x08007354 RCC_APB1PeriphClockCmd .text.RCC_APB1PeriphResetCmd - 0x080078ac 0x50 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x080078ac RCC_APB1PeriphResetCmd + 0x08007390 0x3c THUMB Debug/../../obj/stm32f10x_rcc.o + 0x08007390 RCC_APB1PeriphResetCmd .text.USART_Init - 0x080078fc 0x1b0 THUMB Debug/../../obj/stm32f10x_usart.o - 0x080078fc USART_Init + 0x080073cc 0x178 THUMB Debug/../../obj/stm32f10x_usart.o + 0x080073cc USART_Init .text.USART_Cmd - 0x08007aac 0x3c THUMB Debug/../../obj/stm32f10x_usart.o - 0x08007aac USART_Cmd + 0x08007544 0x40 THUMB Debug/../../obj/stm32f10x_usart.o + 0x08007544 USART_Cmd .text.USART_ReceiveData - 0x08007ae8 0x24 THUMB Debug/../../obj/stm32f10x_usart.o - 0x08007ae8 USART_ReceiveData + 0x08007584 0x20 THUMB Debug/../../obj/stm32f10x_usart.o + 0x08007584 USART_ReceiveData .text.USART_GetFlagStatus - 0x08007b0c 0x40 THUMB Debug/../../obj/stm32f10x_usart.o - 0x08007b0c USART_GetFlagStatus - .text.libdebugio.__do_debug_operation_mempoll - 0x08007b4c 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x08007b4c __do_debug_operation_mempoll - .text.libc.__debug_io_lock - 0x08007b84 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08007b84 __debug_io_lock - .text.libc.__debug_io_unlock - 0x08007b88 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08007b88 __debug_io_unlock - 0x08007b8c __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x08007b8c __text_load_end__ = __text_end__ + 0x080075a4 0x38 THUMB Debug/../../obj/stm32f10x_usart.o + 0x080075a4 USART_GetFlagStatus + 0x080075dc __text_end__ = (__text_start__ + SIZEOF (.text)) + 0x080075dc __text_load_end__ = __text_end__ .vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0 linker stubs .v4_bx 0x00000000 0x0 .v4_bx 0x00000000 0x0 linker stubs - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) - 0x08007b8c __dtors_load_start__ = ALIGN (__text_end__, 0x4) -.dtors 0x08007b8c 0x0 - 0x08007b8c __dtors_start__ = . +.iplt 0x00000000 0x0 + .iplt 0x00000000 0x0 THUMB Debug/../../obj/cstart.o + 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) + 0x080075dc __dtors_load_start__ = ALIGN (__text_end__, 0x4) + +.dtors 0x080075dc 0x0 + 0x080075dc __dtors_start__ = . *(SORT(.dtors.*)) *(.dtors) *(.fini_array .fini_array.*) - 0x08007b8c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x08007b8c __dtors_load_end__ = __dtors_end__ + 0x080075dc __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) + 0x080075dc __dtors_load_end__ = __dtors_end__ 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment) - 0x08007b8c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) + 0x080075dc __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) -.ctors 0x08007b8c 0x0 - 0x08007b8c __ctors_start__ = . +.ctors 0x080075dc 0x0 + 0x080075dc __ctors_start__ = . *(SORT(.ctors.*)) *(.ctors) *(.init_array .init_array.*) - 0x08007b8c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x08007b8c __ctors_load_end__ = __ctors_end__ + 0x080075dc __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) + 0x080075dc __ctors_load_end__ = __ctors_end__ 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment) - 0x08007b8c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) + 0x080075dc __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) -.rodata 0x08007b8c 0x48 - 0x08007b8c __rodata_start__ = . +.rodata 0x080075dc 0x24 + 0x080075dc __rodata_start__ = . *(.rodata .rodata.* .gnu.linkonce.r.*) .rodata.canTiming - 0x08007b8c 0x48 THUMB Debug/../../obj/boot.o - 0x08007bd4 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x08007bd4 __rodata_load_end__ = __rodata_end__ + 0x080075dc 0x24 THUMB Debug/../../obj/boot.o + 0x08007600 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) + 0x08007600 __rodata_load_end__ = __rodata_end__ + +.rel.dyn 0x08006000 0x0 + .rel.iplt 0x08006000 0x0 THUMB Debug/../../obj/cstart.o 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment) - 0x08007bd4 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) + 0x08007600 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) -.ARM.exidx 0x08007bd4 0x0 - 0x08007bd4 __ARM.exidx_start__ = . - 0x08007bd4 __exidx_start = __ARM.exidx_start__ +.ARM.exidx 0x08007600 0x0 + 0x08007600 __ARM.exidx_start__ = . + 0x08007600 __exidx_start = __ARM.exidx_start__ *(.ARM.exidx .ARM.exidx.*) - 0x08007bd4 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) - 0x08007bd4 __exidx_end = __ARM.exidx_end__ - 0x08007bd4 __ARM.exidx_load_end__ = __ARM.exidx_end__ + 0x08007600 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) + 0x08007600 __exidx_end = __ARM.exidx_end__ + 0x08007600 __ARM.exidx_load_end__ = __ARM.exidx_end__ 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment) - 0x08007bd4 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) + 0x08007600 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) -.fast 0x20000000 0x0 load address 0x08007bd4 +.fast 0x20000000 0x0 load address 0x08007600 0x20000000 __fast_start__ = . *(.fast .fast.*) 0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x08007bd4 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) + 0x08007600 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) 0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment) .fast_run 0x20000000 0x0 @@ -1456,9 +3397,9 @@ Linker script and memory map 0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) 0x20000000 __fast_run_load_end__ = __fast_run_end__ 0x00000001 . = ASSERT (((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <= __SRAM_segment_end__)), error: .fast_run is too large to fit in SRAM memory segment) - 0x08007bd4 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) + 0x08007600 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) -.data 0x20000000 0x14 load address 0x08007bd4 +.data 0x20000000 0x14 load address 0x08007600 0x20000000 __data_start__ = . *(.data .data.* .gnu.linkonce.d.*) .data.APBAHBPrescTable @@ -1466,107 +3407,103 @@ Linker script and memory map .data.ADCPrescTable 0x20000010 0x4 THUMB Debug/../../obj/stm32f10x_rcc.o 0x20000014 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x08007be8 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + 0x08007614 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + +.igot.plt 0x00000000 0x0 + .igot.plt 0x00000000 0x0 THUMB Debug/../../obj/cstart.o 0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment) -.data_run 0x20000000 0x14 load address 0x08007bd4 +.data_run 0x20000000 0x14 load address 0x08007600 0x20000000 __data_run_start__ = . 0x20000014 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) - *fill* 0x20000000 0x14 00 + *fill* 0x20000000 0x14 0x20000014 __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) 0x20000014 __data_run_load_end__ = __data_run_end__ 0x00000001 . = ASSERT (((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <= __SRAM_segment_end__)), error: .data_run is too large to fit in SRAM memory segment) 0x20000014 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) -.bss 0x20000014 0x60 +.bss 0x20000014 0x52 0x20000014 __bss_start__ = . *(.bss .bss.* .gnu.linkonce.b.*) - .bss.timer_counter_last.3152 + .bss.timer_counter_last.6204 0x20000014 0x4 THUMB Debug/../../obj/led.o - .bss.led_toggle_state.3151 + .bss.led_toggle_state.6203 0x20000018 0x1 THUMB Debug/../../obj/led.o - *fill* 0x20000019 0x3 00 + *fill* 0x20000019 0x3 .bss.millisecond_counter 0x2000001c 0x4 THUMB Debug/../../obj/timer.o - .bss.xcpCtoRxInProgress.3173 + .bss.xcpCtoRxInProgress.6225 0x20000020 0x1 THUMB Debug/../../obj/boot.o - *fill* 0x20000021 0x3 00 - .bss.xcpCtoReqPacket.3171 - 0x20000024 0x44 THUMB Debug/../../obj/boot.o - .bss.xcpCtoRxLength.3172 - 0x20000068 0x1 THUMB Debug/../../obj/boot.o - *fill* 0x20000069 0x3 00 - .bss.libdebugio.dbgCommWord - 0x2000006c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x2000006c dbgCommWord - .bss.libdebugio.dbgCntrlWord_mempoll - 0x20000070 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x20000070 dbgCntrlWord_mempoll + *fill* 0x20000021 0x3 + .bss.xcpCtoReqPacket.6223 + 0x20000024 0x41 THUMB Debug/../../obj/boot.o + .bss.xcpCtoRxLength.6224 + 0x20000065 0x1 THUMB Debug/../../obj/boot.o *(COMMON) - 0x20000074 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x20000074 __bss_load_end__ = __bss_end__ + 0x20000066 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) + 0x20000066 __bss_load_end__ = __bss_end__ 0x00000001 . = ASSERT (((__bss_end__ >= __SRAM_segment_start__) && (__bss_end__ <= __SRAM_segment_end__)), error: .bss is too large to fit in SRAM memory segment) - 0x20000074 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) + 0x20000068 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) -.non_init 0x20000074 0x0 - 0x20000074 __non_init_start__ = . +.non_init 0x20000068 0x0 + 0x20000068 __non_init_start__ = . *(.non_init .non_init.*) - 0x20000074 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x20000074 __non_init_load_end__ = __non_init_end__ + 0x20000068 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) + 0x20000068 __non_init_load_end__ = __non_init_end__ 0x00000001 . = ASSERT (((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <= __SRAM_segment_end__)), error: .non_init is too large to fit in SRAM memory segment) - 0x20000074 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) + 0x20000068 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) -.heap 0x20000074 0x80 - 0x20000074 __heap_start__ = . +.heap 0x20000068 0x80 + 0x20000068 __heap_start__ = . *(.heap .heap.*) - 0x200000f4 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x20000074 0x80 00 - 0x200000f4 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x200000f4 __heap_load_end__ = __heap_end__ + 0x200000e8 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) + *fill* 0x20000068 0x80 + 0x200000e8 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) + 0x200000e8 __heap_load_end__ = __heap_end__ 0x00000001 . = ASSERT (((__heap_end__ >= __SRAM_segment_start__) && (__heap_end__ <= __SRAM_segment_end__)), error: .heap is too large to fit in SRAM memory segment) - 0x200000f4 __stack_load_start__ = ALIGN (__heap_end__, 0x4) + 0x200000e8 __stack_load_start__ = ALIGN (__heap_end__, 0x4) -.stack 0x200000f4 0x100 - 0x200000f4 __stack_start__ = . +.stack 0x200000e8 0x100 + 0x200000e8 __stack_start__ = . *(.stack .stack.*) - 0x200001f4 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x200000f4 0x100 00 - 0x200001f4 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x200001f4 __stack_load_end__ = __stack_end__ + 0x200001e8 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) + *fill* 0x200000e8 0x100 + 0x200001e8 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) + 0x200001e8 __stack_load_end__ = __stack_end__ 0x00000001 . = ASSERT (((__stack_end__ >= __SRAM_segment_start__) && (__stack_end__ <= __SRAM_segment_end__)), error: .stack is too large to fit in SRAM memory segment) - 0x200001f4 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) + 0x200001e8 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) -.stack_process 0x200001f4 0x0 - 0x200001f4 __stack_process_start__ = . +.stack_process 0x200001e8 0x0 + 0x200001e8 __stack_process_start__ = . *(.stack_process .stack_process.*) - 0x200001f4 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) - 0x200001f4 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) - 0x200001f4 __stack_process_load_end__ = __stack_process_end__ + 0x200001e8 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) + 0x200001e8 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) + 0x200001e8 __stack_process_load_end__ = __stack_process_end__ 0x00000001 . = ASSERT (((__stack_process_end__ >= __SRAM_segment_start__) && (__stack_process_end__ <= __SRAM_segment_end__)), error: .stack_process is too large to fit in SRAM memory segment) - 0x200001f4 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) + 0x200001e8 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) -.tbss 0x200001f4 0x0 - 0x200001f4 __tbss_start__ = . +.tbss 0x200001e8 0x0 + 0x200001e8 __tbss_start__ = . *(.tbss .tbss.*) - 0x200001f4 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) - 0x200001f4 __tbss_load_end__ = __tbss_end__ + 0x200001e8 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) + 0x200001e8 __tbss_load_end__ = __tbss_end__ 0x00000001 . = ASSERT (((__tbss_end__ >= __SRAM_segment_start__) && (__tbss_end__ <= __SRAM_segment_end__)), error: .tbss is too large to fit in SRAM memory segment) - 0x08007be8 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + 0x08007614 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) -.tdata 0x200001f4 0x0 load address 0x08007be8 - 0x200001f4 __tdata_start__ = . +.tdata 0x200001e8 0x0 load address 0x08007614 + 0x200001e8 __tdata_start__ = . *(.tdata .tdata.*) - 0x200001f4 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) - 0x08007be8 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) - 0x08007be8 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) + 0x200001e8 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) + 0x08007614 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) + 0x08007614 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) 0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment) -.tdata_run 0x200001f4 0x0 - 0x200001f4 __tdata_run_start__ = . - 0x200001f4 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) - 0x200001f4 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) - 0x200001f4 __tdata_run_load_end__ = __tdata_run_end__ - 0x200001f4 __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) +.tdata_run 0x200001e8 0x0 + 0x200001e8 __tdata_run_start__ = . + 0x200001e8 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) + 0x200001e8 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) + 0x200001e8 __tdata_run_load_end__ = __tdata_run_end__ + 0x200001e8 __SRAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) 0x00000001 . = ASSERT (((__tdata_run_end__ >= __SRAM_segment_start__) && (__tdata_run_end__ <= __SRAM_segment_end__)), error: .tdata_run is too large to fit in SRAM memory segment) START GROUP LOAD THUMB Debug/../../obj/cstart.o @@ -1598,228 +3535,90 @@ LOAD THUMB Debug/../../obj/stm32f10x_spi.o LOAD THUMB Debug/../../obj/stm32f10x_tim.o LOAD THUMB Debug/../../obj/stm32f10x_usart.o LOAD THUMB Debug/../../obj/stm32f10x_wwdg.o -LOAD THUMB Debug/../../obj/core_cm3.o LOAD THUMB Debug/../../obj/system_stm32f10x.o -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcpp_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_targetio_impl_v7m_t_le.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_mempoll_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libm_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libc_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libcpp_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libdebugio_v7m_t_le_eabi.a +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfprintf_v7m_t_le_eabi.o +LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 3.7/lib/libvfscanf_v7m_t_le_eabi.o END GROUP OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/../bin/demoprog_olimex_stm32p103.elf elf32-littlearm) .ARM.attributes - 0x00000000 0x10 + 0x00000000 0x2f .ARM.attributes - 0x00000000 0x10 THUMB Debug/../../obj/cstart.o + 0x00000000 0x21 THUMB Debug/../../obj/cstart.o .ARM.attributes - 0x00000010 0x10 THUMB Debug/../../obj/led.o + 0x00000021 0x33 THUMB Debug/../../obj/led.o .ARM.attributes - 0x00000020 0x10 THUMB Debug/../../obj/main.o + 0x00000054 0x33 THUMB Debug/../../obj/main.o .ARM.attributes - 0x00000030 0x10 THUMB Debug/../../obj/timer.o + 0x00000087 0x33 THUMB Debug/../../obj/timer.o .ARM.attributes - 0x00000040 0x10 THUMB Debug/../../obj/vectors.o + 0x000000ba 0x33 THUMB Debug/../../obj/vectors.o .ARM.attributes - 0x00000050 0x10 THUMB Debug/../../obj/boot.o + 0x000000ed 0x33 THUMB Debug/../../obj/boot.o .ARM.attributes - 0x00000060 0x10 THUMB Debug/../../obj/misc.o + 0x00000120 0x33 THUMB Debug/../../obj/stm32f10x_can.o .ARM.attributes - 0x00000070 0x10 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000153 0x33 THUMB Debug/../../obj/stm32f10x_gpio.o .ARM.attributes - 0x00000080 0x10 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x00000186 0x33 THUMB Debug/../../obj/stm32f10x_rcc.o .ARM.attributes - 0x00000090 0x10 THUMB Debug/../../obj/stm32f10x_can.o - .ARM.attributes - 0x000000a0 0x10 THUMB Debug/../../obj/stm32f10x_cec.o - .ARM.attributes - 0x000000b0 0x10 THUMB Debug/../../obj/stm32f10x_crc.o - .ARM.attributes - 0x000000c0 0x10 THUMB Debug/../../obj/stm32f10x_dac.o - .ARM.attributes - 0x000000d0 0x10 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .ARM.attributes - 0x000000e0 0x10 THUMB Debug/../../obj/stm32f10x_dma.o - .ARM.attributes - 0x000000f0 0x10 THUMB Debug/../../obj/stm32f10x_exti.o - .ARM.attributes - 0x00000100 0x10 THUMB Debug/../../obj/stm32f10x_flash.o - .ARM.attributes - 0x00000110 0x10 THUMB Debug/../../obj/stm32f10x_fsmc.o - .ARM.attributes - 0x00000120 0x10 THUMB Debug/../../obj/stm32f10x_gpio.o - .ARM.attributes - 0x00000130 0x10 THUMB Debug/../../obj/stm32f10x_i2c.o - .ARM.attributes - 0x00000140 0x10 THUMB Debug/../../obj/stm32f10x_iwdg.o - .ARM.attributes - 0x00000150 0x10 THUMB Debug/../../obj/stm32f10x_pwr.o - .ARM.attributes - 0x00000160 0x10 THUMB Debug/../../obj/stm32f10x_rcc.o - .ARM.attributes - 0x00000170 0x10 THUMB Debug/../../obj/stm32f10x_rtc.o - .ARM.attributes - 0x00000180 0x10 THUMB Debug/../../obj/stm32f10x_sdio.o - .ARM.attributes - 0x00000190 0x10 THUMB Debug/../../obj/stm32f10x_spi.o - .ARM.attributes - 0x000001a0 0x10 THUMB Debug/../../obj/stm32f10x_tim.o - .ARM.attributes - 0x000001b0 0x10 THUMB Debug/../../obj/stm32f10x_usart.o - .ARM.attributes - 0x000001c0 0x10 THUMB Debug/../../obj/stm32f10x_wwdg.o - .ARM.attributes - 0x000001d0 0x10 THUMB Debug/../../obj/core_cm3.o - .ARM.attributes - 0x000001e0 0x10 THUMB Debug/../../obj/system_stm32f10x.o - .ARM.attributes - 0x000001f0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .ARM.attributes - 0x00000200 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x000001b9 0x33 THUMB Debug/../../obj/stm32f10x_usart.o -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e THUMB Debug/../../obj/led.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f THUMB Debug/../../obj/main.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/timer.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/vectors.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/boot.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/misc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_adc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_bkp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_can.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_cec.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_crc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_dac.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_dma.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_exti.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_flash.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_fsmc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_gpio.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_i2c.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_iwdg.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_pwr.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_rcc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_rtc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_sdio.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_spi.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_tim.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_usart.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f10x_wwdg.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/core_cm3.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/system_stm32f10x.o - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.comment 0x00000000 0x4c + .comment 0x00000000 0x4c THUMB Debug/../../obj/led.o + 0x4d (size before relaxing) + .comment 0x0000004c 0x4d THUMB Debug/../../obj/main.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/timer.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/vectors.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/boot.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_can.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_gpio.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_rcc.o + .comment 0x0000004c 0x4d THUMB Debug/../../obj/stm32f10x_usart.o -.debug_line 0x00000000 0x8475 - .debug_line 0x00000000 0xed THUMB Debug/../../obj/cstart.o - .debug_line 0x000000ed 0x2e4 THUMB Debug/../../obj/led.o - .debug_line 0x000003d1 0x27e THUMB Debug/../../obj/main.o - .debug_line 0x0000064f 0x2a8 THUMB Debug/../../obj/timer.o - .debug_line 0x000008f7 0x12b THUMB Debug/../../obj/vectors.o - .debug_line 0x00000a22 0x426 THUMB Debug/../../obj/boot.o - .debug_line 0x00000e48 0x343 THUMB Debug/../../obj/misc.o - .debug_line 0x0000118b 0x622 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_line 0x000017ad 0x331 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_line 0x00001ade 0x658 THUMB Debug/../../obj/stm32f10x_can.o - .debug_line 0x00002136 0x412 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_line 0x00002548 0x2ca THUMB Debug/../../obj/stm32f10x_crc.o - .debug_line 0x00002812 0x3ee THUMB Debug/../../obj/stm32f10x_dac.o - .debug_line 0x00002c00 0x285 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_line 0x00002e85 0x402 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_line 0x00003287 0x3a3 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_line 0x0000362a 0x5d8 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_line 0x00003c02 0x554 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_line 0x00004156 0x4ae THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_line 0x00004604 0x5d6 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_line 0x00004bda 0x2bb THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_line 0x00004e95 0x335 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_line 0x000051ca 0x5bc THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_line 0x00005786 0x378 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_line 0x00005afe 0x54a THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_line 0x00006048 0x521 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_line 0x00006569 0xb94 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_line 0x000070fd 0x59a THUMB Debug/../../obj/stm32f10x_usart.o - .debug_line 0x00007697 0x2e2 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_line 0x00007979 0x2ba THUMB Debug/../../obj/core_cm3.o - .debug_line 0x00007c33 0x27e THUMB Debug/../../obj/system_stm32f10x.o - .debug_line 0x00007eb1 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_line 0x00008401 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_line 0x00000000 0x251d + .debug_line 0x00000000 0x117 THUMB Debug/../../obj/cstart.o + .debug_line 0x00000117 0x2cf THUMB Debug/../../obj/led.o + .debug_line 0x000003e6 0x277 THUMB Debug/../../obj/main.o + .debug_line 0x0000065d 0x29a THUMB Debug/../../obj/timer.o + .debug_line 0x000008f7 0x180 THUMB Debug/../../obj/vectors.o + .debug_line 0x00000a77 0x42f THUMB Debug/../../obj/boot.o + .debug_line 0x00000ea6 0x65a THUMB Debug/../../obj/stm32f10x_can.o + .debug_line 0x00001500 0x4c0 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_line 0x000019c0 0x5bb THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_line 0x00001f7b 0x5a2 THUMB Debug/../../obj/stm32f10x_usart.o -.debug_info 0x00000000 0xd720 +.debug_info 0x00000000 0x3bd3 .debug_info 0x00000000 0xe6 THUMB Debug/../../obj/cstart.o - .debug_info 0x000000e6 0x251 THUMB Debug/../../obj/led.o - .debug_info 0x00000337 0x25d THUMB Debug/../../obj/main.o - .debug_info 0x00000594 0x5fe THUMB Debug/../../obj/timer.o - .debug_info 0x00000b92 0x10e THUMB Debug/../../obj/vectors.o - .debug_info 0x00000ca0 0xbe5 THUMB Debug/../../obj/boot.o - .debug_info 0x00001885 0x53f THUMB Debug/../../obj/misc.o - .debug_info 0x00001dc4 0xc07 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_info 0x000029cb 0x872 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_info 0x0000323d 0xc50 THUMB Debug/../../obj/stm32f10x_can.o - .debug_info 0x00003e8d 0x435 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_info 0x000042c2 0x1f9 THUMB Debug/../../obj/stm32f10x_crc.o - .debug_info 0x000044bb 0x4d1 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_info 0x0000498c 0x153 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_info 0x00004adf 0x49b THUMB Debug/../../obj/stm32f10x_dma.o - .debug_info 0x00004f7a 0x35a THUMB Debug/../../obj/stm32f10x_exti.o - .debug_info 0x000052d4 0x812 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_info 0x00005ae6 0x992 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_info 0x00006478 0x71c THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_info 0x00006b94 0xb8d THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_info 0x00007721 0x1f9 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_info 0x0000791a 0x454 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_info 0x00007d6e 0x8fa THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_info 0x00008668 0x463 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_info 0x00008acb 0x888 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_info 0x00009353 0x96a THUMB Debug/../../obj/stm32f10x_spi.o - .debug_info 0x00009cbd 0x1e11 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_info 0x0000bace 0xa65 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_info 0x0000c533 0x22e THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_info 0x0000c761 0x53a THUMB Debug/../../obj/core_cm3.o - .debug_info 0x0000cc9b 0x499 THUMB Debug/../../obj/system_stm32f10x.o - .debug_info 0x0000d134 0x51f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_info 0x0000d653 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_info 0x000000e6 0x23e THUMB Debug/../../obj/led.o + .debug_info 0x00000324 0x232 THUMB Debug/../../obj/main.o + .debug_info 0x00000556 0x5ef THUMB Debug/../../obj/timer.o + .debug_info 0x00000b45 0xfc THUMB Debug/../../obj/vectors.o + .debug_info 0x00000c41 0xb4d THUMB Debug/../../obj/boot.o + .debug_info 0x0000178e 0xb6a THUMB Debug/../../obj/stm32f10x_can.o + .debug_info 0x000022f8 0x6bc THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_info 0x000029b4 0x869 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_info 0x0000321d 0x9b6 THUMB Debug/../../obj/stm32f10x_usart.o -.debug_abbrev 0x00000000 0x2804 +.debug_abbrev 0x00000000 0xdb0 .debug_abbrev 0x00000000 0x14 THUMB Debug/../../obj/cstart.o - .debug_abbrev 0x00000014 0xec THUMB Debug/../../obj/led.o - .debug_abbrev 0x00000100 0xe1 THUMB Debug/../../obj/main.o - .debug_abbrev 0x000001e1 0x195 THUMB Debug/../../obj/timer.o - .debug_abbrev 0x00000376 0xd6 THUMB Debug/../../obj/vectors.o - .debug_abbrev 0x0000044c 0x1f8 THUMB Debug/../../obj/boot.o - .debug_abbrev 0x00000644 0x135 THUMB Debug/../../obj/misc.o - .debug_abbrev 0x00000779 0x174 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_abbrev 0x000008ed 0x156 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_abbrev 0x00000a43 0x1ac THUMB Debug/../../obj/stm32f10x_can.o - .debug_abbrev 0x00000bef 0x189 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_abbrev 0x00000d78 0x10a THUMB Debug/../../obj/stm32f10x_crc.o - .debug_abbrev 0x00000e82 0x169 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_abbrev 0x00000feb 0xda THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_abbrev 0x000010c5 0x14e THUMB Debug/../../obj/stm32f10x_dma.o - .debug_abbrev 0x00001213 0x14a THUMB Debug/../../obj/stm32f10x_exti.o - .debug_abbrev 0x0000135d 0x162 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_abbrev 0x000014bf 0x166 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_abbrev 0x00001625 0x1a4 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_abbrev 0x000017c9 0x15d THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_abbrev 0x00001926 0xfa THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_abbrev 0x00001a20 0x184 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_abbrev 0x00001ba4 0x191 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_abbrev 0x00001d35 0x166 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_abbrev 0x00001e9b 0x1a2 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_abbrev 0x0000203d 0x15d THUMB Debug/../../obj/stm32f10x_spi.o - .debug_abbrev 0x0000219a 0x172 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_abbrev 0x0000230c 0x15b THUMB Debug/../../obj/stm32f10x_usart.o - .debug_abbrev 0x00002467 0xf8 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_abbrev 0x0000255f 0xca THUMB Debug/../../obj/core_cm3.o - .debug_abbrev 0x00002629 0x17e THUMB Debug/../../obj/system_stm32f10x.o - .debug_abbrev 0x000027a7 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_abbrev 0x000027df 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_abbrev 0x00000014 0xf4 THUMB Debug/../../obj/led.o + .debug_abbrev 0x00000108 0xea THUMB Debug/../../obj/main.o + .debug_abbrev 0x000001f2 0x1bb THUMB Debug/../../obj/timer.o + .debug_abbrev 0x000003ad 0xda THUMB Debug/../../obj/vectors.o + .debug_abbrev 0x00000487 0x23c THUMB Debug/../../obj/boot.o + .debug_abbrev 0x000006c3 0x1f8 THUMB Debug/../../obj/stm32f10x_can.o + .debug_abbrev 0x000008bb 0x1cf THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_abbrev 0x00000a8a 0x1bf THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_abbrev 0x00000c49 0x167 THUMB Debug/../../obj/stm32f10x_usart.o -.debug_aranges 0x00000000 0x15c0 +.debug_aranges 0x00000000 0x4e8 .debug_aranges 0x00000000 0x20 THUMB Debug/../../obj/cstart.o .debug_aranges @@ -1831,225 +3630,96 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Cros .debug_aranges 0x000000c0 0x20 THUMB Debug/../../obj/vectors.o .debug_aranges - 0x000000e0 0x70 THUMB Debug/../../obj/boot.o + 0x000000e0 0x68 THUMB Debug/../../obj/boot.o .debug_aranges - 0x00000150 0x40 THUMB Debug/../../obj/misc.o + 0x00000148 0xe0 THUMB Debug/../../obj/stm32f10x_can.o .debug_aranges - 0x00000190 0x138 THUMB Debug/../../obj/stm32f10x_adc.o + 0x00000228 0xa8 THUMB Debug/../../obj/stm32f10x_gpio.o .debug_aranges - 0x000002c8 0x78 THUMB Debug/../../obj/stm32f10x_bkp.o + 0x000002d0 0x118 THUMB Debug/../../obj/stm32f10x_rcc.o .debug_aranges - 0x00000340 0xe0 THUMB Debug/../../obj/stm32f10x_can.o - .debug_aranges - 0x00000420 0x88 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_aranges - 0x000004a8 0x48 THUMB Debug/../../obj/stm32f10x_crc.o - .debug_aranges - 0x000004f0 0x78 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_aranges - 0x00000568 0x30 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_aranges - 0x00000598 0x70 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_aranges - 0x00000608 0x58 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_aranges - 0x00000660 0xf8 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_aranges - 0x00000758 0xb0 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_aranges - 0x00000808 0xa8 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_aranges - 0x000008b0 0x120 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_aranges - 0x000009d0 0x48 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_aranges - 0x00000a18 0x70 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_aranges - 0x00000a88 0x118 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_aranges - 0x00000ba0 0x88 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_aranges - 0x00000c28 0x108 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_aranges - 0x00000d30 0xd0 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_aranges - 0x00000e00 0x2f0 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_aranges - 0x000010f0 0x100 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_aranges - 0x000011f0 0x58 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_aranges - 0x00001248 0xc8 THUMB Debug/../../obj/core_cm3.o - .debug_aranges - 0x00001310 0x38 THUMB Debug/../../obj/system_stm32f10x.o - .debug_aranges - 0x00001348 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_aranges - 0x00001560 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x000003e8 0x100 THUMB Debug/../../obj/stm32f10x_usart.o -.debug_frame 0x00000000 0x5aa0 - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/led.o - .debug_frame 0x00000068 0x60 THUMB Debug/../../obj/main.o - .debug_frame 0x000000c8 0x110 THUMB Debug/../../obj/timer.o - .debug_frame 0x000001d8 0x30 THUMB Debug/../../obj/vectors.o - .debug_frame 0x00000208 0x1bc THUMB Debug/../../obj/boot.o - .debug_frame 0x000003c4 0xd8 THUMB Debug/../../obj/misc.o - .debug_frame 0x0000049c 0x5ac THUMB Debug/../../obj/stm32f10x_adc.o - .debug_frame 0x00000a48 0x1cc THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_frame 0x00000c14 0x400 THUMB Debug/../../obj/stm32f10x_can.o - .debug_frame 0x00001014 0x22c THUMB Debug/../../obj/stm32f10x_cec.o - .debug_frame 0x00001240 0xe8 THUMB Debug/../../obj/stm32f10x_crc.o - .debug_frame 0x00001328 0x1ec THUMB Debug/../../obj/stm32f10x_dac.o - .debug_frame 0x00001514 0x78 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_frame 0x0000158c 0x1c8 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_frame 0x00001754 0x148 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_frame 0x0000189c 0x470 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_frame 0x00001d0c 0x300 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_frame 0x0000200c 0x2e4 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_frame 0x000022f0 0x540 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_frame 0x00002830 0xf0 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_frame 0x00002920 0x1b4 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_frame 0x00002ad4 0x4fc THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_frame 0x00002fd0 0x22c THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_frame 0x000031fc 0x490 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_frame 0x0000368c 0x3b0 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_frame 0x00003a3c 0xe64 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_frame 0x000048a0 0x4a0 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_frame 0x00004d40 0x134 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_frame 0x00004e74 0x358 THUMB Debug/../../obj/core_cm3.o - .debug_frame 0x000051cc 0xa8 THUMB Debug/../../obj/system_stm32f10x.o - .debug_frame 0x00005274 0x78c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_frame 0x00005a00 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) +.debug_frame 0x00000000 0x1e40 + .debug_frame 0x00000000 0x80 THUMB Debug/../../obj/led.o + .debug_frame 0x00000080 0x6c THUMB Debug/../../obj/main.o + .debug_frame 0x000000ec 0x17c THUMB Debug/../../obj/timer.o + .debug_frame 0x00000268 0x30 THUMB Debug/../../obj/vectors.o + .debug_frame 0x00000298 0x1e4 THUMB Debug/../../obj/boot.o + .debug_frame 0x0000047c 0x640 THUMB Debug/../../obj/stm32f10x_can.o + .debug_frame 0x00000abc 0x46c THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_frame 0x00000f28 0x7d8 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_frame 0x00001700 0x740 THUMB Debug/../../obj/stm32f10x_usart.o -.debug_loc 0x00000000 0x76a2 - .debug_loc 0x00000000 0x70 THUMB Debug/../../obj/led.o - .debug_loc 0x00000070 0x64 THUMB Debug/../../obj/main.o - .debug_loc 0x000000d4 0x158 THUMB Debug/../../obj/timer.o - .debug_loc 0x0000022c 0x2c THUMB Debug/../../obj/vectors.o - .debug_loc 0x00000258 0x222 THUMB Debug/../../obj/boot.o - .debug_loc 0x0000047a 0x118 THUMB Debug/../../obj/misc.o - .debug_loc 0x00000592 0x7d4 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_loc 0x00000d66 0x264 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_loc 0x00000fca 0x578 THUMB Debug/../../obj/stm32f10x_can.o - .debug_loc 0x00001542 0x2ec THUMB Debug/../../obj/stm32f10x_cec.o - .debug_loc 0x0000182e 0x12c THUMB Debug/../../obj/stm32f10x_crc.o - .debug_loc 0x0000195a 0x294 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_loc 0x00001bee 0x90 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_loc 0x00001c7e 0x268 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_loc 0x00001ee6 0x1b4 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_loc 0x0000209a 0x5d8 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_loc 0x00002672 0x41c THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_loc 0x00002a8e 0x3e4 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_loc 0x00002e72 0x738 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_loc 0x000035aa 0x138 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_loc 0x000036e2 0x238 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_loc 0x0000391a 0x6dc THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_loc 0x00003ff6 0x2e0 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_loc 0x000042d6 0x648 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_loc 0x0000491e 0x508 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_loc 0x00004e26 0x13e8 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_loc 0x0000620e 0x658 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_loc 0x00006866 0x190 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_loc 0x000069f6 0x3f0 THUMB Debug/../../obj/core_cm3.o - .debug_loc 0x00006de6 0xc8 THUMB Debug/../../obj/system_stm32f10x.o - .debug_loc 0x00006eae 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) +.debug_pubnames + 0x00000000 0x12b4 + .debug_pubnames + 0x00000000 0x123 THUMB Debug/../../obj/led.o + .debug_pubnames + 0x00000123 0x36 THUMB Debug/../../obj/main.o + .debug_pubnames + 0x00000159 0x42f THUMB Debug/../../obj/timer.o + .debug_pubnames + 0x00000588 0x2d THUMB Debug/../../obj/vectors.o + .debug_pubnames + 0x000005b5 0x227 THUMB Debug/../../obj/boot.o + .debug_pubnames + 0x000007dc 0x243 THUMB Debug/../../obj/stm32f10x_can.o + .debug_pubnames + 0x00000a1f 0x2ae THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_pubnames + 0x00000ccd 0x32a THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_pubnames + 0x00000ff7 0x2bd THUMB Debug/../../obj/stm32f10x_usart.o -.debug_ranges 0x00000000 0x13a0 +.debug_pubtypes + 0x00000000 0xc5d + .debug_pubtypes + 0x00000000 0x139 THUMB Debug/../../obj/led.o + .debug_pubtypes + 0x00000139 0x109 THUMB Debug/../../obj/main.o + .debug_pubtypes + 0x00000242 0x12a THUMB Debug/../../obj/timer.o + .debug_pubtypes + 0x0000036c 0xdb THUMB Debug/../../obj/vectors.o + .debug_pubtypes + 0x00000447 0x23f THUMB Debug/../../obj/boot.o + .debug_pubtypes + 0x00000686 0x1bb THUMB Debug/../../obj/stm32f10x_can.o + .debug_pubtypes + 0x00000841 0x169 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_pubtypes + 0x000009aa 0x144 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_pubtypes + 0x00000aee 0x16f THUMB Debug/../../obj/stm32f10x_usart.o + +.debug_ranges 0x00000000 0x438 .debug_ranges 0x00000000 0x18 THUMB Debug/../../obj/led.o .debug_ranges 0x00000018 0x18 THUMB Debug/../../obj/main.o .debug_ranges 0x00000030 0x40 THUMB Debug/../../obj/timer.o .debug_ranges 0x00000070 0x10 THUMB Debug/../../obj/vectors.o - .debug_ranges 0x00000080 0x60 THUMB Debug/../../obj/boot.o - .debug_ranges 0x000000e0 0x30 THUMB Debug/../../obj/misc.o - .debug_ranges 0x00000110 0x128 THUMB Debug/../../obj/stm32f10x_adc.o - .debug_ranges 0x00000238 0x68 THUMB Debug/../../obj/stm32f10x_bkp.o - .debug_ranges 0x000002a0 0xd0 THUMB Debug/../../obj/stm32f10x_can.o - .debug_ranges 0x00000370 0x78 THUMB Debug/../../obj/stm32f10x_cec.o - .debug_ranges 0x000003e8 0x38 THUMB Debug/../../obj/stm32f10x_crc.o - .debug_ranges 0x00000420 0x68 THUMB Debug/../../obj/stm32f10x_dac.o - .debug_ranges 0x00000488 0x20 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - .debug_ranges 0x000004a8 0x60 THUMB Debug/../../obj/stm32f10x_dma.o - .debug_ranges 0x00000508 0x48 THUMB Debug/../../obj/stm32f10x_exti.o - .debug_ranges 0x00000550 0xe8 THUMB Debug/../../obj/stm32f10x_flash.o - .debug_ranges 0x00000638 0xa0 THUMB Debug/../../obj/stm32f10x_fsmc.o - .debug_ranges 0x000006d8 0x98 THUMB Debug/../../obj/stm32f10x_gpio.o - .debug_ranges 0x00000770 0x110 THUMB Debug/../../obj/stm32f10x_i2c.o - .debug_ranges 0x00000880 0x38 THUMB Debug/../../obj/stm32f10x_iwdg.o - .debug_ranges 0x000008b8 0x60 THUMB Debug/../../obj/stm32f10x_pwr.o - .debug_ranges 0x00000918 0x108 THUMB Debug/../../obj/stm32f10x_rcc.o - .debug_ranges 0x00000a20 0x78 THUMB Debug/../../obj/stm32f10x_rtc.o - .debug_ranges 0x00000a98 0xf8 THUMB Debug/../../obj/stm32f10x_sdio.o - .debug_ranges 0x00000b90 0xc0 THUMB Debug/../../obj/stm32f10x_spi.o - .debug_ranges 0x00000c50 0x2e0 THUMB Debug/../../obj/stm32f10x_tim.o - .debug_ranges 0x00000f30 0xf0 THUMB Debug/../../obj/stm32f10x_usart.o - .debug_ranges 0x00001020 0x48 THUMB Debug/../../obj/stm32f10x_wwdg.o - .debug_ranges 0x00001068 0xb8 THUMB Debug/../../obj/core_cm3.o - .debug_ranges 0x00001120 0x28 THUMB Debug/../../obj/system_stm32f10x.o - .debug_ranges 0x00001148 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - .debug_ranges 0x00001350 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_ranges 0x00000080 0x58 THUMB Debug/../../obj/boot.o + .debug_ranges 0x000000d8 0xd0 THUMB Debug/../../obj/stm32f10x_can.o + .debug_ranges 0x000001a8 0x98 THUMB Debug/../../obj/stm32f10x_gpio.o + .debug_ranges 0x00000240 0x108 THUMB Debug/../../obj/stm32f10x_rcc.o + .debug_ranges 0x00000348 0xf0 THUMB Debug/../../obj/stm32f10x_usart.o -.debug_str 0x00000000 0x6206 - .debug_str 0x00000000 0x298 THUMB Debug/../../obj/led.o - 0x2bf (size before relaxing) - .debug_str 0x00000298 0xf6 THUMB Debug/../../obj/main.o - 0x1e1 (size before relaxing) - .debug_str 0x0000038e 0x47a THUMB Debug/../../obj/timer.o - 0x56b (size before relaxing) - .debug_str 0x00000808 0x95 THUMB Debug/../../obj/vectors.o - 0x162 (size before relaxing) - .debug_str 0x0000089d 0x4bf THUMB Debug/../../obj/boot.o - 0x762 (size before relaxing) - .debug_str 0x00000d5c 0x1d9 THUMB Debug/../../obj/misc.o - 0x3ab (size before relaxing) - .debug_str 0x00000f35 0x59b THUMB Debug/../../obj/stm32f10x_adc.o - 0x6e3 (size before relaxing) - .debug_str 0x000014d0 0x411 THUMB Debug/../../obj/stm32f10x_bkp.o - 0x59d (size before relaxing) - .debug_str 0x000018e1 0x370 THUMB Debug/../../obj/stm32f10x_can.o - 0x716 (size before relaxing) - .debug_str 0x00001c51 0x20d THUMB Debug/../../obj/stm32f10x_cec.o - 0x35e (size before relaxing) - .debug_str 0x00001e5e 0x123 THUMB Debug/../../obj/stm32f10x_crc.o - 0x223 (size before relaxing) - .debug_str 0x00001f81 0x26e THUMB Debug/../../obj/stm32f10x_dac.o - 0x397 (size before relaxing) - .debug_str 0x000021ef 0xf1 THUMB Debug/../../obj/stm32f10x_dbgmcu.o - 0x1ef (size before relaxing) - .debug_str 0x000022e0 0x277 THUMB Debug/../../obj/stm32f10x_dma.o - 0x3a9 (size before relaxing) - .debug_str 0x00002557 0x220 THUMB Debug/../../obj/stm32f10x_exti.o - 0x346 (size before relaxing) - .debug_str 0x00002777 0x45c THUMB Debug/../../obj/stm32f10x_flash.o - 0x5d0 (size before relaxing) - .debug_str 0x00002bd3 0x62e THUMB Debug/../../obj/stm32f10x_fsmc.o - 0x76c (size before relaxing) - .debug_str 0x00003201 0x2aa THUMB Debug/../../obj/stm32f10x_gpio.o - 0x501 (size before relaxing) - .debug_str 0x000034ab 0x499 THUMB Debug/../../obj/stm32f10x_i2c.o - 0x64e (size before relaxing) - .debug_str 0x00003944 0x13b THUMB Debug/../../obj/stm32f10x_iwdg.o - 0x244 (size before relaxing) - .debug_str 0x00003a7f 0x17b THUMB Debug/../../obj/stm32f10x_pwr.o - 0x2fa (size before relaxing) - .debug_str 0x00003bfa 0x3d8 THUMB Debug/../../obj/stm32f10x_rcc.o - 0x602 (size before relaxing) - .debug_str 0x00003fd2 0x1f3 THUMB Debug/../../obj/stm32f10x_rtc.o - 0x38a (size before relaxing) - .debug_str 0x000041c5 0x4d4 THUMB Debug/../../obj/stm32f10x_sdio.o - 0x623 (size before relaxing) - .debug_str 0x00004699 0x3c4 THUMB Debug/../../obj/stm32f10x_spi.o - 0x5e5 (size before relaxing) - .debug_str 0x00004a5d 0xb55 THUMB Debug/../../obj/stm32f10x_tim.o - 0xdc5 (size before relaxing) - .debug_str 0x000055b2 0x3ec THUMB Debug/../../obj/stm32f10x_usart.o - 0x678 (size before relaxing) - .debug_str 0x0000599e 0x137 THUMB Debug/../../obj/stm32f10x_wwdg.o - 0x250 (size before relaxing) - .debug_str 0x00005ad5 0x1ba THUMB Debug/../../obj/core_cm3.o - 0x2b1 (size before relaxing) - .debug_str 0x00005c8f 0xf2 THUMB Debug/../../obj/system_stm32f10x.o - 0x2ce (size before relaxing) - .debug_str 0x00005d81 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7m_t_le.a(libdebugio.o) - 0x3fc (size before relaxing) - .debug_str 0x00006134 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x11b (size before relaxing) +.debug_str 0x00000000 0x1ccc + .debug_str 0x00000000 0x37d THUMB Debug/../../obj/led.o + 0x3b0 (size before relaxing) + .debug_str 0x0000037d 0xfb THUMB Debug/../../obj/main.o + 0x2d2 (size before relaxing) + .debug_str 0x00000478 0x48e THUMB Debug/../../obj/timer.o + 0x662 (size before relaxing) + .debug_str 0x00000906 0x95 THUMB Debug/../../obj/vectors.o + 0x253 (size before relaxing) + .debug_str 0x0000099b 0x4bf THUMB Debug/../../obj/boot.o + 0x847 (size before relaxing) + .debug_str 0x00000e5a 0x379 THUMB Debug/../../obj/stm32f10x_can.o + 0x7f5 (size before relaxing) + .debug_str 0x000011d3 0x2b1 THUMB Debug/../../obj/stm32f10x_gpio.o + 0x5e0 (size before relaxing) + .debug_str 0x00001484 0x455 THUMB Debug/../../obj/stm32f10x_rcc.o + 0x6e1 (size before relaxing) + .debug_str 0x000018d9 0x3f3 THUMB Debug/../../obj/stm32f10x_usart.o + 0x757 (size before relaxing) diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.srec b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.srec index e474f8f6..a37f2bd8 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.srec +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.srec @@ -1,452 +1,358 @@ S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF -S31508006000F4010020F76100082D6700082D670008D5 -S315080060102D6700082D6700082D6700082D67000802 -S315080060202D6700082D6700082D6700082D670008F2 -S315080060302D6700082D6700082D6700080967000806 -S315080060402D6700082D6700082D6700082D670008D2 -S315080060502D6700082D6700082D6700082D670008C2 -S315080060602D6700082D6700082D6700082D670008B2 -S315080060702D6700082D6700082D6700082D670008A2 -S315080060802D6700082D6700082D6700082D67000892 -S315080060902D6700082D6700082D6700082D67000882 -S315080060A02D6700082D6700082D6700082D67000872 -S315080060B02D6700082D6700082D6700082D67000862 -S315080060C02D6700082D6700082D6700082D67000852 -S315080060D02D6700082D6700082D6700082D67000842 -S315080060E02D6700082D6700082D6700082D67000832 -S315080060F02D6700082D6700082D6700082D67000822 -S315080061002D6700082D6700082D6700082D67000811 -S315080061102D6700082D6700082D6700082D67000801 -S315080061202D6700082D6700082D6700082D670008F1 -S315080061302D6700082D6700082D6700082D670008E1 -S315080061402D6700082D6700082D6700082D670008D1 +S31508006000E8010020FB610008B1650008B1650008D9 +S31508006010B1650008B1650008B1650008B1650008FA +S31508006020B1650008B1650008B1650008B1650008EA +S31508006030B1650008B1650008B165000895650008F6 +S31508006040B1650008B1650008B1650008B1650008CA +S31508006050B1650008B1650008B1650008B1650008BA +S31508006060B1650008B1650008B1650008B1650008AA +S31508006070B1650008B1650008B1650008B16500089A +S31508006080B1650008B1650008B1650008B16500088A +S31508006090B1650008B1650008B1650008B16500087A +S315080060A0B1650008B1650008B1650008B16500086A +S315080060B0B1650008B1650008B1650008B16500085A +S315080060C0B1650008B1650008B1650008B16500084A +S315080060D0B1650008B1650008B1650008B16500083A +S315080060E0B1650008B1650008B1650008B16500082A +S315080060F0B1650008B1650008B1650008B16500081A +S31508006100B1650008B1650008B1650008B165000809 +S31508006110B1650008B1650008B1650008B1650008F9 +S31508006120B1650008B1650008B1650008B1650008E9 +S31508006130B1650008B1650008B1650008B1650008D9 +S31508006140B1650008B1650008B1650008B1650008C9 S30908006150EE11AA553F -S315080061542A498D462A482B492B4A00F039F82B48F8 -S315080061642B492C4A00F034F82B482C492C4A00F0C9 -S315080061742FF82C482C492D4A00F02AF82C482D498A -S315080061842D4A00F025F82D482D492E4A00F020F80E -S315080061942D482E49002200F026F82D482D49091AC3 -S315080061A4082903DB00220260043001601E481F49E7 -S315080061B4884205D00268043003B4904703BCF7E765 -S315080061C400208646EC4600200021234A9047FEE735 -S315080061D4884207D0521A05D0037801300B70013172 -S315080061E4013AF9D17047884202D002700130FAE7C1 -S315080061F470471A481A490160AAE70000F40100200A -S31508006204D47B0008000000201400002068620008FF -S31508006214686200088C7B0008D47B00080000002014 -S31508006224000000208C7B00088C7B00088C7B00080F -S315080062348C7B00088C7B00088C7B00088C7B000810 -S315080062448C7B0008D47B000814000020740000200E -S3150800625474000020F40000206563000808ED00E0DF -S3090800626400600008C0 -S3150800626880B583B000AF4FF010004FF0010147F634 -S315080062780D03C0F6000398474FF480533B804FF050 -S3150800628803037B604FF01003BB603B464FF4805016 -S31508006298C4F20100194647F23533C0F60003984799 -S315080062A84FF48050C4F201004FF4805147F2E54399 -S315080062B8C0F60003984707F10C07BD4680BD00BF26 -S315080062C880B581B000AF46F2F163C0F6000398477F -S315080062D803463B6040F21403C2F200031B683A689F -S315080062E8D21A40F2F3139A4232D940F21803C2F28C -S315080062F800031B78002B12D140F21803C2F20003E0 -S315080063084FF001021A704FF48050C4F201004FF49E -S31508006318805147F20153C0F60003984711E040F24E -S315080063281803C2F200034FF000021A704FF48050A7 -S31508006338C4F201004FF4805147F2E543C0F6000362 -S31508006348984740F21403C2F200033A681A6000E05C -S3150800635800BF07F10407BD4680BD00BF80B500AF82 -S3150800636846F29533C0F60003984746F27973C0F6A5 -S315080063780003984746F2C923C0F60003984746F231 -S315080063889573C0F600039847F4E700BF80B583B055 -S3150800639800AF4FF000037B604FF000033B604FF4FB -S315080063A88053C4F202034FF48052C4F20202126800 -S315080063B842F001021A604FF48052C4F202024FF406 -S315080063C88053C4F2020359684FF00003CFF6FF035F -S315080063D80B4053604FF48053C4F202034FF48052C3 -S315080063E8C4F20202126822F0847222F480321A6019 -S315080063F84FF48053C4F202034FF48052C4F20202E7 -S31508006408126822F480221A604FF48053C4F20203F9 -S315080064184FF48052C4F20202526822F4FE025A600D -S315080064284FF48053C4F202034FF41F029A604FF4E4 -S315080064388053C4F202034FF48052C4F2020212686F -S3150800644842F480321A604FF48053C4F202031B6880 -S3150800645803F400333B607B6803F101037B603B6808 -S31508006468002B04D17A6840F2DC539A42EBD14FF4F8 -S315080064788053C4F202031B6803F40033002B00D1CF -S31508006488FEE74FF40053C4F202034FF40052C4F275 -S315080064980202126842F010021A604FF40053C4F25E -S315080064A802034FF40052C4F20202126822F00302F1 -S315080064B81A604FF40053C4F202034FF40052C4F2B0 -S315080064C80202126842F002021A604FF48053C4F2BC -S315080064D802034FF48052C4F2020252685A604FF41B -S315080064E88053C4F202034FF48052C4F2020252687F -S315080064F842F400525A604FF48053C4F202034FF430 -S315080065088052C4F20202526842F480625A604FF41A -S315080065188053C4F202034FF48052C4F2020252684E -S3150800652822F47C125A604FF00903BB60BB68A3F1DA -S3150800653802034FEA8343BB604FF48053C4F2020355 -S315080065484FF48052C4F202025168BA680A4342F408 -S3150800655880325A604FF48053C4F202034FF48052D3 -S31508006568C4F20202126842F080721A6000BF4FF441 -S315080065788053C4F202031B6803F00073002BF6D09D -S315080065884FF48053C4F202034FF48052C4F2020255 -S31508006598526822F003025A604FF48053C4F2020389 -S315080065A84FF48052C4F20202526842F002025A605C -S315080065B800BF4FF48053C4F202035B6803F00C0370 -S315080065C8082BF6D146F26923C0F60003984746F227 -S315080065D8A963C0F60003984707F10C07BD4680BDB6 -S315080065E880B482B000AF786039607B68002B10DA17 -S315080065F84FF46D43CEF200037A6802F00F02A2F157 -S3150800660804013A68D2B24FEA0212D2B25B181A7675 -S315080066180CE04FF46143CEF2000379683A68D2B2C7 -S315080066284FEA0212D2B25B1883F8002307F108076B -S31508006638BD4680BC704700BF80B581B000AF3860E2 -S315080066483A686FF07F439A4202D94FF0010322E075 -S315080066584EF21003CEF200033A6822F07F4202F1A6 -S31508006668FF325A604FF0FF304FF00F0146F2E953F8 -S31508006678C0F6000398474EF21003CEF200034FF017 -S3150800668800029A604EF21003CEF200034FF007029A -S315080066981A604FF00003184607F10407BD4680BD87 -S315080066A880B500AF4FF4CA50C0F2010046F2416304 -S315080066B8C0F6000398474FF0000046F2D163C0F6CB -S315080066C80003984780BD00BF80B481B000AF38602A -S315080066D840F21C03C2F200033A681A6007F104077D -S315080066E8BD4680BC704700BF80B400AF40F21C03AB -S315080066F8C2F200031B681846BD4680BC704700BF37 -S3150800670880B400AF40F21C03C2F200031B6803F111 -S31508006718010240F21C03C2F200031A60BD4680BC9F -S31508006728704700BF80B400AFFEE700BF80B400AF73 -S31508006738BFF34F8FBD4680BC704700BF80B500AF1A -S315080067484FF46D42CEF200024FF46D43CEF20003C9 -S31508006758DB6803F4E0614FF00403C0F2FA530B4315 -S31508006768D36046F23573C0F600039847FEE700BFC4 -S3150800677880B500AF46F2C173C0F60003984746F6DF -S31508006788B523C0F60003984780BD00BF80B500AFA3 -S3150800679846F69103C0F60003984746F63943C0F60D -S315080067A80003984780BD00BF80B500AF46F2457321 -S315080067B8C0F60003984780BD80B587B000AF4FF490 -S315080067C800304FF0010147F65D03C0F6000398470D -S315080067D84FF005004FF0010147F60D03C0F6000318 -S315080067E898474FF01803BB614FF004033B824FF0FC -S315080067F803037B6107F110034FF40060C4F201003C -S31508006808194647F23533C0F6000398474FF0040394 -S31508006818BB614FF008033B8207F110034FF4006091 -S31508006828C4F20100194647F23533C0F60003984703 -S315080068384FF461433B604FF00003BB804FF0000301 -S31508006848FB804FF000033B814FF00003BB814FF0FC -S315080068580C037B813B464FF48840C4F20000194676 -S3150800686847F6FD03C0F6000398474FF48840C4F27C -S3150800687800004FF0010147F6AD23C0F6000398471C -S3150800688807F11C07BD4680BD80B500AF40F220035E -S31508006898C2F200031B78002B1AD140F22400C2F278 -S315080068A8000046F66D13C0F6000398470346012B09 -S315080068B856D140F22003C2F200034FF001021A70C3 -S315080068C840F26803C2F200034FF000021A7047E06C -S315080068D840F26803C2F200031B7803F1010240F292 -S315080068E82403C2F20003D318184646F66D13C0F6F9 -S315080068F8000398470346012B32D140F26803C2F2D7 -S3150800690800031B7803F10103DAB240F26803C2F206 -S3150800691800031A7040F22403C2F200031A7840F200 -S315080069286803C2F200031B789A4219D140F2200381 -S31508006938C2F200034FF000021A7040F22403C2F2B2 -S3150800694800035B78FF2B0BD140F22403C2F2000345 -S315080069589B78002B04D146F2B173C0F6000398471A -S3150800696880BD00BF80B581B000AF38604FF488405D -S31508006978C4F200004FF0200147F60D33C0F60003B5 -S3150800698898470346012B0FD14FF48840C4F20000FC -S3150800699847F6E923C0F6000398470346DAB23B6888 -S315080069A81A704FF0010301E04FF00003184607F18B -S315080069B80407BD4680BD00BF80B485B000AFB96086 -S315080069C87A603B600346BB814FF00003FB7461E0C5 -S315080069D8B989FA7C47F68C33C0F6000313F82230D7 -S315080069E81846FB7C47F68C32C0F600024FEA83034A -S315080069F8D3185B78C31803F1010303FB01F248F6C1 -S31508006A08A04393FBF2F102FB01F29B1A002B3DD13E -S31508006A18B989FA7C47F68C33C0F6000313F8223096 -S31508006A281846FB7C47F68C32C0F600024FEA830309 -S31508006A38D3185B78C31803F1010303FB01F348F67F -S31508006A48A04292FBF3F39AB2BB681A80BB681B880C -S31508006A58002B1BD0BB681B88B3F5806F16D8FA7C49 -S31508006A6847F68C33C0F6000313F822207B681A70A1 -S31508006A78FB7C47F68C32C0F600024FEA8303D3182C -S31508006A885A783B681A704FF0010308E0FB7C03F15B -S31508006A980103FB74FB7C112B9AD94FF000031846A7 -S31508006AA807F11407BD4680BC704700BF90B591B082 -S31508006AB800AF4FF001004FF0010147F60D03C0F68D -S31508006AC8000398474FF008004FF0010147F60D03F9 -S31508006AD8C0F6000398474FF480733B874FF0480386 -S31508006AE83B6407F138034FF44060C4F201001946C5 -S31508006AF847F23533C0F6000398474FF400733B87CF -S31508006B084FF018033B644FF00303FB6307F13803A0 -S31508006B184FF44060C4F20100194647F23533C0F60F -S31508006B28000398474FF4EA104FF0010147F21D5346 -S31508006B38C0F6000398474FF000704FF0010147F67A -S31508006B485D03C0F6000398474FF4C840C4F2000036 -S31508006B5846F69D43C0F60003984707F118031846FA -S31508006B6847F2D103C0F60003984707F1020107F177 -S31508006B7801023B464FF4FA7046F6C114C0F6000403 -S31508006B88A0474FF000033B624FF000037B624FF0CB -S31508006B980003BB624FF00003FB624FF000033B6340 -S31508006BA84FF000037B634FF00003BB764FF00003FA -S31508006BB8FB767B7803F1FF33DBB23B773B7803F14F -S31508006BC8FF33DBB27B777B883B8307F118034FF4E7 -S31508006BD8C840C4F20000194646F60553C0F6000335 -S31508006BE898474FF00003BB734FF00003FB734FF051 -S31508006BF801033B744FF00003BB804FF00003FB8092 -S31508006C084FF000033B814FF000037B814FF00003F0 -S31508006C18BB814FF001037B6107F10403184646F66A -S31508006C28C563C0F60003984707F14407BD4690BDFB -S31508006C3880B585B000AF4FF4C840C4F200004FF0E5 -S31508006C48000147F2E523C0F6000398470346002BE0 -S31508006C581CD03B464FF4C840C4F200004FF0000170 -S31508006C681A4647F23D13C0F6000398473A6840F2B9 -S31508006C7867639A420AD1FB7AFF2B07D13B7B002B25 -S31508006C8804D146F2B173C0F60003984707F1140712 -S31508006C98BD4680BD80B581B000AF38603A684FF40C -S31508006CA8C843C4F200039A4212D14FF000704FF05D -S31508006CB8010147F6AD03C0F6000398474FF0007088 -S31508006CC84FF0000147F6AD03C0F60003984711E0F8 -S31508006CD84FF080604FF0010147F6AD03C0F6000398 -S31508006CE898474FF080604FF0000147F6AD03C0F6AD -S31508006CF80003984707F10407BD4680BD80B484B0F1 -S31508006D0800AF786039604FF00003FB734FF000035B -S31508006D18BB607B681B6823F002027B681A607B6885 -S31508006D281B6843F001027B681A6003E0BB6803F13D -S31508006D380103BB607B685B6803F00103002B04D181 -S31508006D48BA684FF6FF739A42F0D17B685B6803F01E -S31508006D580103002B03D14FF00003FB73A7E03B6840 -S31508006D689B68012B06D17B681B6843F080027B6809 -S31508006D781A6005E07B681B6823F080027B681A6046 -S31508006D883B68DB68012B06D17B681B6843F0400229 -S31508006D987B681A6005E07B681B6823F040027B68FD -S31508006DA81A603B681B69012B06D17B681B6843F090 -S31508006DB820027B681A6005E07B681B6823F02002BE -S31508006DC87B681A603B685B69012B06D17B681B6880 -S31508006DD843F010027B681A6005E07B681B6823F09D -S31508006DE810027B681A603B689B69012B06D17B6891 -S31508006DF81B6843F008027B681A6005E07B681B6815 -S31508006E0823F008027B681A603B68DB69012B06D108 -S31508006E187B681B6843F004027B681A6005E07B6898 -S31508006E281B6823F004027B681A603B689B784FEA64 -S31508006E3883723B68DB784FEA03631A433B681B791E -S31508006E484FEA03431A433B685B794FEA03531A43ED -S31508006E583B681B8803F1FF331A437B68DA617B6852 -S31508006E681B6823F001027B681A604FF00003BB60B9 -S31508006E7803E0BB6803F10103BB607B685B6803F04A -S31508006E880103DBB2002B04D0BA684FF6FF739A42A7 -S31508006E98EFD17B685B6803F00103DBB2002B03D0F4 -S31508006EA84FF00003FB7302E04FF00103FB73FB7B13 -S31508006EB8184607F11007BD4680BC704780B482B0F3 -S31508006EC800AF38604FF000037B603B689B7A4FF051 -S31508006ED8010202FA03F37B604FF4C843C4F20003C5 -S31508006EE84FF4C842C4F20002D2F8002242F0010266 -S31508006EF8C3F800224FF4C843C4F200034FF4C8424B -S31508006F08C4F20002D2F81C127A686FEA02020A4032 -S31508006F18C3F81C223B681B7B002B32D14FF4C843AD -S31508006F28C4F200034FF4C842C4F20002D2F80C12A5 -S31508006F387A686FEA02020A40C3F80C224FF4C8437B -S31508006F48C4F200033A68927A3968C9884FEA014058 -S31508006F5839684988014302F1480243F832104FF468 -S31508006F68C842C4F200023B689B7A396889884FEAA6 -S31508006F7801403968098801434FEAC303D318C3F89F -S31508006F8844123B681B7B012B30D14FF4C843C4F22B -S31508006F9800034FF4C842C4F20002D2F80C127A6809 -S31508006FA80A43C3F80C224FF4C843C4F200033A68EC -S31508006FB8927A396809884FEA01403968498801434D -S31508006FC802F1480243F832104FF4C842C4F20002EC -S31508006FD83B689B7A396889884FEA01403968C988C5 -S31508006FE801434FEAC303D318C3F844123B68DB7A54 -S31508006FF8002B10D14FF4C843C4F200034FF4C8421B -S31508007008C4F20002D2F804127A686FEA02020A4049 -S31508007018C3F804220DE04FF4C843C4F200034FF442 -S31508007028C842C4F20002D2F804127A680A43C3F8BE -S3150800703804223B681B89002B0FD14FF4C843C4F2BE -S3150800704800034FF4C842C4F20002D2F814127A6850 -S315080070586FEA02020A40C3F814223B681B89012B0F -S315080070680DD14FF4C843C4F200034FF4C842C4F222 -S315080070780002D2F814127A680A43C3F814223B6845 -S315080070881B69012B0DD14FF4C843C4F200034FF412 -S31508007098C842C4F20002D2F81C127A680A43C3F836 -S315080070A81C224FF4C843C4F200034FF4C842C4F282 -S315080070B80002D2F8002222F00102C3F8002207F1E2 -S315080070C80807BD4680BC704780B481B000AF3860F9 -S315080070D83B684FF000029A603B684FF00002DA609E -S315080070E83B684FF000021A613B684FF000025A618C -S315080070F83B684FF000029A613B684FF00002DA617C -S315080071083B684FF000029A703B684FF00002DA704D -S315080071183B684FF003021A713B684FF002025A7136 -S315080071283B684FF001021A8007F10407BD4680BC88 -S31508007138704700BF80B483B000AFB8600B463A60AA -S315080071483B713B79BA6803F11B034FEA0313D3185B -S315080071581B68DBB203F00403DAB23B681A723B68B1 -S315080071681B7A002B0CD13B79BA6803F11B034FEA4B -S315080071780313D3181B684FEA53523B681A600BE08F -S315080071883B79BA6803F11B034FEA0313D3181B6844 -S315080071984FEAD3023B685A603B79BA6803F11B0386 -S315080071A84FEA0313D3181B68DBB203F00203DAB2FB -S315080071B83B685A723B79BA684FEA0313D31803F542 -S315080071C8DA731B68DBB203F00F03DAB23B689A720C -S315080071D83B79BA684FEA0313D31803F5DA731B68C1 -S315080071E84FEA1323DAB23B68DA743B79BA684FEA8E -S315080071F80313D31803F5DC731B68DAB23B68DA7233 -S315080072083B79BA684FEA0313D31803F5DC731B688E -S315080072184FEA1323DAB23B681A733B79BA684FEA1E -S315080072280313D31803F5DC731B684FEA1343DAB262 -S315080072383B685A733B79BA684FEA0313D31803F5C0 -S31508007248DC731B684FEA1363DAB23B689A733B79B7 -S31508007258BA684FEA0313D31803F5DE731B68DAB264 -S315080072683B68DA733B79BA684FEA0313D31803F510 -S31508007278DE731B684FEA1323DAB23B681A743B7944 -S31508007288BA684FEA0313D31803F5DE731B684FEA87 -S315080072981343DAB23B685A743B79BA684FEA031360 -S315080072A8D31803F5DE731B684FEA1363DAB23B6833 -S315080072B89A743B79002B06D1BB68DB6843F0200239 -S315080072C8BB68DA6005E0BB681B6943F02002BB6847 -S315080072D81A6107F10C07BD4680BC704780B483B0B5 -S315080072E800AF78600B463B704FF00003FB723B78A3 -S315080072F8002B06D17B68DB68DBB203F00303FB725D -S315080073080CE03B78012B06D17B681B69DBB203F0DE -S315080073180303FB7202E04FF00003FB72FB7A184680 -S3150800732807F10C07BD4680BC704700BF80B488B01B -S3150800733800AF786039604FF00003FB614FF0000337 -S315080073483B614FF00003BB614FF00003FB604FF051 -S3150800735800037B614FF00003BB603B689B6803F042 -S315080073680F03FB613B689B6803F01003002B04D0EE -S315080073783B685B68FA691343FB613B681B88DBB2A9 -S31508007388002B4ED07B681B687B614FF00003BB61FE -S3150800739841E0BB694FF0010202FA03F3FB603B6860 -S315080073A81B881A46FB6813403B613A69FB689A4290 -S315080073B82DD1BB694FEA8303FB60FB684FF00F02C8 -S315080073C802FA03F3BB60BB686FEA03037A691340E2 -S315080073D87B61FB68FA6902FA03F37A6913437B61EE -S315080073E83B689B68282B07D1BB694FF0010202FA54 -S315080073F803F27B685A610AE03B689B68482B06D10A -S31508007408BB694FF0010202FA03F27B681A61BB698D -S3150800741803F10103BB61BB69072BBAD97B687A6993 -S315080074281A603B681B88FF2B53D97B685B687B61AE -S315080074384FF00003BB6146E0BB6903F108034FF050 -S31508007448010202FA03F3FB603B681B881A46FB68CD -S3150800745813403B613A69FB689A4230D1BB694FEAE7 -S315080074688303FB60FB684FF00F0202FA03F3BB6065 -S31508007478BB686FEA03037A6913407B61FB68FA699C -S3150800748802FA03F37A6913437B613B689B68282BE6 -S3150800749808D1BB6903F108034FF0010202FA03F2A7 -S315080074A87B685A613B689B68482B08D1BB6903F11E -S315080074B808034FF0010202FA03F27B681A61BB69F6 -S315080074C803F10103BB61BB69072BB5D97B687A69E8 -S315080074D85A6007F12007BD4680BC704780B482B061 -S315080074E800AF78600B463B803A887B681A6107F1DB -S315080074F80807BD4680BC704780B482B000AF786084 -S315080075080B463B803A887B685A6107F10807BD46EF -S3150800751880BC704780B486B000AF786039604FF099 -S3150800752800033B614FF00003FB604FF000037B61EB -S315080075384FF00003BB607B68002B06DA4FF00003A8 -S31508007548C4F20103DB697B6105E04FF00003C4F26E -S3150800755801035B687B617B6803F470234FEA134376 -S31508007568BB607B684FEA03434FEA13433B617B687A -S3150800757803F44013B3F5401F10D17B6923F07063F9 -S315080075887B614FF00003C4F201034FF00002C4F216 -S315080075980102526822F070625A6026E07B6803F49A -S315080075A88013002B10D0BB684FF0030202FA03F3CE -S315080075B8FB60FB686FEA03037A6913407B617B69A2 -S315080075C843F070637B6110E07B684FEA53534FEAD8 -S315080075D803133A6902FA03F36FEA03037A69134055 -S315080075E87B617B6943F070637B613B68002B0AD03B -S315080075F87B684FEA53534FEA03133A6902FA03F3CF -S315080076087A6913437B617B68002B06DA4FF000031F -S31508007618C4F201037A69DA6105E04FF00003C4F29F -S3150800762801037A695A6007F11807BD4680BC704796 -S3150800763880B485B000AF38604FF000033B614FF067 -S315080076480003FB604FF00003BB604FF000037B604C -S315080076584FF48053C4F202035B6803F00C033B61E2 -S315080076683B69042B0AD0082B0FD0002B4DD13A685A -S315080076784FF49053C0F27A0313604DE03A684FF41A -S315080076889053C0F27A03136046E04FF48053C4F26D -S3150800769802035B6803F47013FB604FF48053C4F26B -S315080076A802035B6803F48033BB60FB684FEA9343C5 -S315080076B803F10203FB60BB68002B09D1FA684FF493 -S315080076C81063C0F23D0303FB02F23B681A6023E02D -S315080076D84FF48053C4F202035B6803F40033002BAB -S315080076E809D0FA684FF41063C0F23D0303FB02F2AF -S315080076F83B681A6010E0FA684FF49053C0F27A03B0 -S3150800770803FB02F23B681A6006E03A684FF49053A6 -S31508007718C0F27A03136000BF4FF48053C4F2020321 -S315080077285B6803F0F0033B613B694FEA13133B615F -S3150800773840F20003C2F200033A699B181B78DBB2D1 -S315080077487B603B681A687B6822FA03F23B685A60D2 -S315080077584FF48053C4F202035B6803F4E0633B61A9 -S315080077683B694FEA13233B6140F20003C2F2000368 -S315080077783A699B181B78DBB27B603B685A687B685A -S3150800778822FA03F23B689A604FF48053C4F2020364 -S315080077985B6803F460533B613B694FEAD3233B615B -S315080077A840F20003C2F200033A699B181B78DBB261 -S315080077B87B603B685A687B6822FA03F23B68DA60A2 -S315080077C84FF48053C4F202035B6803F440433B61F9 -S315080077D83B694FEA93333B6140F21003C2F2000358 -S315080077E83A699B181B78DBB27B603B68DA687B686A -S315080077F8B2FBF3F23B681A6107F11407BD4680BC71 -S31508007808704700BF80B482B000AF786039603B68C3 -S31508007818002B0CD04FF48053C4F202034FF4805265 -S31508007828C4F2020291697A680A439A610DE04FF434 -S315080078388053C4F202034FF48052C4F202029169DB -S315080078487A686FEA02020A409A6107F10807BD4694 -S3150800785880BC704780B482B000AF786039603B68F6 -S31508007868002B0CD04FF48053C4F202034FF4805215 -S31508007878C4F20202D1697A680A43DA610DE04FF464 -S315080078888053C4F202034FF48052C4F20202D1694B -S315080078987A686FEA02020A40DA6107F10807BD4604 -S315080078A880BC704780B482B000AF786039603B68A6 -S315080078B8002B0CD04FF48053C4F202034FF48052C5 -S315080078C8C4F2020211697A680A431A610DE04FF494 -S315080078D88053C4F202034FF48052C4F202021169BB -S315080078E87A686FEA02020A401A6107F10807BD4674 -S315080078F880BC704780B58CB000AF786039604FF0AF -S315080079080003FB624FF00003BB624FF000037B6283 -S315080079184FF000033B624FF00003FB617B68FB6195 -S315080079287B681B8A9BB2FB62FA6A4CF6FF731340A4 -S31508007938FB623B68DB88FA6A1343FB62FB6A9AB206 -S315080079487B681A827B689B899BB2FB62FA6A4EF649 -S31508007958F3131340FB623B689A883B681B891343F9 -S315080079689AB23B685B8913439BB2FA6A1343FB6274 -S31508007978FB6A9AB27B689A817B689B8A9BB2FB6290 -S31508007988FA6A4FF6FF431340FB623B689B89FA6A1B -S315080079981343FB62FB6A9AB27B689A8207F108036B -S315080079A8184647F23963C0F600039847FA694FF450 -S315080079B86053C4F201039A4202D17B69BB6201E0B3 -S315080079C83B69BB627B689B899BB29BB21BB2002B47 -S315080079D80FDABA6A13464FEA83039B184FEA8302FB -S315080079E89A183B681B684FEA4303B2FBF3F37B62BA -S315080079F80EE0BA6A13464FEA83039B184FEA8302D6 -S31508007A089A183B681B684FEA8303B2FBF3F37B6259 -S31508007A187A6A48F21F53C5F2EB13A3FB02134FEA1F -S31508007A2853134FEA0313FB62FB6A4FEA13134FF02B -S31508007A38640202FB03F37A6AD31A3B627B689B8962 -S31508007A489BB29BB21BB2002B12DA3B6A4FEAC303FE -S31508007A5803F1320248F21F53C5F2EB13A3FB0213D4 -S31508007A684FEA531303F00703FA6A1343FB6211E05C -S31508007A783B6A4FEA031303F1320248F21F53C5F271 -S31508007A88EB13A3FB02134FEA531303F00F03FA6A27 -S31508007A981343FB62FB6A9AB27B681A8107F13007BF -S31508007AA8BD4680BD80B482B000AF786039603B6857 -S31508007AB8002B08D07B689B899BB243F400539AB283 -S31508007AC87B689A8107E07B689B899BB223F40053FD -S31508007AD89AB27B689A8107F10807BD4680BC704749 -S31508007AE880B481B000AF38603B689B889BB24FEA88 -S31508007AF8C3534FEAD3539BB2184607F10407BD464A -S31508007B0880BC704780B483B000AF78600B463B8072 -S31508007B184FF00003BB607B681B889AB23B8813400A -S31508007B289BB2002B03D04FF00103BB6002E04FF075 -S31508007B380003BB60BB68184607F10C07BD4680BC46 -S31508007B48704700BF30B504460D4600F017F840F2F6 -S31508007B586C03C2F200031D6040F27003C2F2000310 -S31508007B681C601A461368002BFCD100F009F840F28D -S31508007B786C03C2F20003186830BD00BF704700BF27 -S30908007B88704700BF75 -S31508007B8C05020000060200000603000007030000B9 -S31508007B9C0803000009030000090400000A04000099 -S31508007BAC0B0400000C0400000C0500000D05000079 -S31508007BBC0E0500000F0500000F0600001006000059 -S30D08007BCC100700001008000074 -S31508007BD40000000001020304010203040607080961 -S30908007BE4020406087B -S705080061F79A +S315080061542B49072291438D462A482B492B4A00F09E +S3150800616439F82B482B492C4A00F034F82B482C498B +S315080061742C4A00F02FF82C482C492D4A00F02AF80E +S315080061842C482D492D4A00F025F82D482D492E4A2C +S3150800619400F020F82D482E49002200F026F82D4854 +S315080061A42D49091A082903DB00220260043001601C +S315080061B41E481F49884205D00268043003B4904734 +S315080061C403BCF7E700208646EC4600200021234A54 +S315080061D49047FEE7884207D0521A05D00378013063 +S315080061E40B700131013AF9D17047884202D0027026 +S315080061F40130FAE770471A481A490160A8E700000F +S31508006204E8010020007600080000002014000020A1 +S315080062146C6200086C620008DC75000800760008E9 +S315080062240000002000000020DC750008DC7500086A +S31508006234DC750008DC750008DC750008DC750008E8 +S31508006244DC750008DC7500080076000814000020D8 +S315080062546600002068000020E8000020216300088A +S30D0800626408ED00E000600008E7 +S3150800626C80B582B000AF012110200B4B98474FF434 +S3150800627C8053BB800323BB711023FB713B1D19464E +S3150800628C0648074B98474FF480510448054B9847E6 +S3150800629C00BF0837BD4680BD1973000800100140C1 +S315080062AC296F0008A170000880B582B000AF134BA7 +S315080062BC98477860124B1B687A68D31AB3F5FA7F3D +S315080062CC18D3104B1B78002B08D10E4B01221A70D1 +S315080062DC4FF480510C480D4B984707E0094B0022A8 +S315080062EC1A704FF480510848094B9847044A7B6842 +S315080062FC136000E000BF0837BD4680BD8165000805 +S3150800630C140000201800002000100140BD70000881 +S3150800631CA170000880B500AF044B9847044B98470A +S3150800632C044B9847044B9847FAE700BF49630008A3 +S3150800633CE1650008B5620008F965000880B584B007 +S3150800634C00AF0023BB6000237B604F4A4E4B1B6893 +S3150800635C43F0010313604C494B4B5A684B4B1340A3 +S3150800636C4B60494A484B1B6823F0847323F48033EB +S3150800637C1360454A444B1B6823F480231360424A36 +S3150800638C414B5B6823F4FE0353603F4B4FF41F02EB +S3150800639C9A603D4A3C4B1B6843F4803313603A4B76 +S315080063AC1B6803F400337B60BB680133BB607B68F6 +S315080063BC002B04D1BB6840F2DC529342EFD1324B2E +S315080063CC1B6803F40033002B00D1FEE7304A304B30 +S315080063DC1B6843F0100313602D4A2D4B1B6823F0E2 +S315080063EC030313602A4A2A4B1B6843F00203136003 +S315080063FC254A254B5B685360234A234B5B6843F459 +S3150800640C00535360204A204B5B6843F48063536007 +S3150800641C1D4A1D4B5B6823F47C1353600923FB60F0 +S3150800642CFB68023B9B04FB601749174B5A68FB68D1 +S3150800643C134343F480334B60134A134B1B6843F0E6 +S3150800644C8073136000BF104B1B6803F00073002B9E +S3150800645CF9D00D4A0C4B5B6823F0030353600A4AC8 +S3150800646C094B5B6843F00203536000BF064B5B683D +S3150800647C03F00C03082BF9D1064B9847064B9847A3 +S3150800648C00BF1037BD4680BD001002400000FFF863 +S3150800649C002002406D6200084565000880B483B090 +S315080064AC00AF03463960FB7197F90730002B0BDAFE +S315080064BC0D49FB7903F00F03043B3A68D2B212017B +S315080064CCD2B20B441A7609E0084997F907303A68AC +S315080064DCD2B21201D2B20B4483F8002300BF0C3798 +S315080064ECBD4680BC704700BF00ED00E000E100E04F +S315080064FC80B582B000AF78607B68B3F1807F01D33A +S3150800650C012311E00A4A7B6823F07F43013B536061 +S3150800651C0F214FF0FF30074B9847054B00229A6026 +S3150800652C034B07221A60002318460837BD4680BD60 +S3150800653C10E000E0A964000880B500AF0348044BDE +S3150800654C98470020034B984700BF80BD40190100AF +S3150800655CFD6400086565000880B483B000AF7860F8 +S3150800656C034A7B68136000BF0C37BD4680BC704776 +S3150800657C1C00002080B400AF024B1B681846BD46B1 +S3150800658C80BC70471C00002080B400AF044B1B680D +S3150800659C0133034A136000BFBD4680BC704700BF79 +S315080065AC1C00002080B400AFFEE700BF80B400AF2B +S315080065BCBFF34F8F0549054BDB6803F4E062044BC8 +S315080065CC1343CB60BFF34F8FFEE700BF00ED00E02F +S315080065DC0400FA0580B500AF024B9847024B984762 +S315080065EC00BF80BD216600083D68000880B500AF75 +S315080065FC024B9847024B984700BF80BDB56600080A +S3150800660C6569000880B500AF014B984700BF80BD8F +S3150800661CB965000880B586B000AF01214FF400308B +S3150800662C1A4B984701210520194B98471823FB75D7 +S3150800663C0423BB820323BB7507F1140319461548BB +S3150800664C154B98470423FB750823BB8207F11403E3 +S3150800665C19461048104B98474FF461437B6000234A +S3150800666C3B8100237B810023BB8100233B820C23C7 +S3150800667CFB813B1D19460948094B984701210748D8 +S3150800668C084B984700BF1837BD4680BD55730008A0 +S3150800669C1973000800080140296F000800440040DF +S315080066ACCD7300084575000880B500AF1B4B1B78E9 +S315080066BC002B0CD11A481B4B98470346012B2AD1A1 +S315080066CC164B01221A70184B00221A7023E0164B2F +S315080066DC1B780133124A13441846124B9847034643 +S315080066EC012B18D1104B1B780133DAB20E4B1A70EA +S315080066FC0B4B1A780C4B1B789A420CD1074B002281 +S3150800670C1A70074B5B78FF2B05D1054B9B78002B32 +S3150800671C01D1064B984700BF80BD00BF2000002062 +S3150800672C240000203D67000865000020116600085B +S3150800673C80B582B000AF786020210A480A4B98478A +S3150800674C0346012B08D10748084B98470346DAB28B +S3150800675C7B681A70012300E0002318460837BD46EB +S3150800676C80BD00BF00440040A5750008857500086B +S3150800677C80B487B000AFB9607A603B600346FB8192 +S3150800678C0023FB7548E0FA89FB7D284911F813307C +S3150800679C1846FB7D25495B000B445B7803440133A3 +S315080067AC03FB02F348F6A04292FBF3F103FB01F359 +S315080067BCD31A002B2DD1FA89FB7D1C4911F81330FD +S315080067CC1846FB7D19495B000B445B78034401337F +S315080067DC03FB02F348F6A04292FBF3F39AB2BB68AA +S315080067EC1A80BB681B88002B13D0BB681B88B3F5B3 +S315080067FC806F0ED8FB7D0D4A12F813207B681A7031 +S3150800680CFB7D0A4A5B0013445A783B681A700123CD +S3150800681C06E0FB7D0133FB75FB7D112BB3D90023F9 +S3150800682C18461C37BD4680BC704700BFDC7500088F +S3150800683C90B58BB000AF012101203C4B9847012144 +S3150800684C08203A4B98474FF48073BB84482387F843 +S3150800685C273007F1240319463548364B98474FF429 +S3150800686C0073BB84182387F82730032387F8263050 +S3150800687C07F1240319462E482E4B984701214FF44D +S3150800688CEA102D4B984701214FF000702B4B984777 +S3150800689C2B482C4B984707F1180318462A4B984750 +S315080068AC3B1D7A1DB91D4FF4FA70284CA0470023DE +S315080068BCBB770023FB77002387F82030002387F863 +S315080068CC2130002387F82230002387F82330002351 +S315080068DCBB760023FB767B79013BDBB23B773B79B6 +S315080068EC013BDBB27B77FB883B8307F11803194620 +S315080068FC1348174B98470023BB740023FB740123DA +S3150800690C3B7500233B8100237B810023BB8100233D +S3150800691CFB8100233B8201237B7507F1080318468C +S3150800692C0C4B984700BF2C37BD4690BD1973000811 +S3150800693C000C0140296F0008D9700008557300082F +S3150800694C00640040B9690008196D00087D670008E5 +S3150800695C056A0008A56B000880B586B000AF002153 +S3150800696C0E480F4B98470346002B12D03B1D1A4670 +S3150800697C00210A480B4B98477B6840F267629342A2 +S3150800698C07D1FB7BFF2B04D13B7C002B01D1064B9B +S3150800699C984700BF1837BD4680BD00BF006400404D +S315080069ACE16E00086D6D00081166000880B582B0AE +S315080069BC00AF78607B680E4A93420AD101214FF0EA +S315080069CC00700C4B984700214FF00070094B984704 +S315080069DC09E001214FF08060064B984700214FF0E3 +S315080069EC8060044B984700BF0837BD4680BD00BF82 +S315080069FC006400409173000880B485B000AF7860DD +S31508006A0C39600023FB730023BB607B681B6823F08B +S31508006A1C02027B681A607B681B6843F001027B687C +S31508006A2C1A6002E0BB680133BB607B685B6803F0E5 +S31508006A3C0103002B04D1BB684FF6FF729342F1D1C8 +S31508006A4C7B685B6803F00103002B02D10023FB7300 +S31508006A5C9CE03B689B79012B06D17B681B6843F04D +S31508006A6C80027B681A6005E07B681B6823F080024D +S31508006A7C7B681A603B68DB79012B06D17B681B683F +S31508006A8C43F040027B681A6005E07B681B6823F0BC +S31508006A9C40027B681A603B681B7A012B06D17B681F +S31508006AAC1B6843F020027B681A6005E07B681B684C +S31508006ABC23F020027B681A603B685B7A012B06D1AF +S31508006ACC7B681B6843F010027B681A6005E07B68DC +S31508006ADC1B6823F010027B681A603B689B7A012BB3 +S31508006AEC06D17B681B6843F008027B681A6005E0D0 +S31508006AFC7B681B6823F008027B681A603B68DB7AA4 +S31508006B0C012B06D17B681B6843F004027B681A606C +S31508006B1C05E07B681B6823F004027B681A603B68F7 +S31508006B2C9B789A073B68DB781B061A433B681B79EC +S31508006B3C1B041A433B685B791B051A433B681B8885 +S31508006B4C013B1A437B68DA617B681B6823F00102F8 +S31508006B5C7B681A600023BB6002E0BB680133BB602C +S31508006B6C7B685B6803F00103002B04D0BB684FF607 +S31508006B7CFF729342F1D17B685B6803F00103002B2B +S31508006B8C02D00023FB7301E00123FB73FB7B184641 +S31508006B9C1437BD4680BC704780B485B000AF7860AA +S31508006BAC0023FB607B689B7A1A4601239340FB60A3 +S31508006BBC554A554BD3F8003243F00103C2F800325C +S31508006BCC5149514BD3F81C22FB68DB431340C1F8DF +S31508006BDC1C327B681B7B002B25D14B494A4BD3F8BF +S31508006BEC0C22FB68DB431340C1F80C3246497B6820 +S31508006BFC9B7A18467B68DB881B047A6852881A438A +S31508006C0C00F1480341F833203F497B689B7A1846C4 +S31508006C1C7B689B881B047A6812881A4300F1480320 +S31508006C2CDB000B445A607B681B7B012B24D136494D +S31508006C3C354BD3F80C22FB681343C1F80C32324996 +S31508006C4C7B689B7A18467B681B881B047A68528873 +S31508006C5C1A4300F1480341F833202B497B689B7A89 +S31508006C6C18467B689B881B047A68D2881A4300F1FD +S31508006C7C4803DB000B445A607B68DB7A002B09D18E +S31508006C8C2149214BD3F80422FB68DB431340C1F896 +S31508006C9C043207E01C491C4BD3F80422FB68134347 +S31508006CACC1F804327B681B89002B08D11649164B90 +S31508006CBCD3F81422FB68DB431340C1F814327B6803 +S31508006CCC1B89012B07D110490F4BD3F81422FB68EB +S31508006CDC1343C1F814327B685B7B012B07D10A4935 +S31508006CEC094BD3F81C22FB681343C1F81C32064A1D +S31508006CFC054BD3F8003223F00103C2F8003200BF6B +S31508006D0C1437BD4680BC70470064004080B483B01D +S31508006D1C00AF78607B6800229A717B680022DA7172 +S31508006D2C7B6800221A727B6800225A727B680022E2 +S31508006D3C9A727B680022DA727B6800229A707B68EA +S31508006D4C0022DA707B6803221A717B6802225A7158 +S31508006D5C7B6801221A8000BF0C37BD4680BC704781 +S31508006D6C80B485B000AFF8600B467A60FB72FB7A8C +S31508006D7CFA681B331B0113441B68DBB203F00403CC +S31508006D8CDAB27B681A727B681B7A002B09D1FB7AFC +S31508006D9CFA681B331B0113441B685A0D7B681A606F +S31508006DAC08E0FB7AFA681B331B0113441B68DA08E4 +S31508006DBC7B685A60FB7AFA681B331B0113441B6801 +S31508006DCCDBB203F00203DAB27B685A72FB7AFA6812 +S31508006DDC1B331B01134404331B68DBB203F00F038C +S31508006DECDAB27B689A72FB7AFA681B331B01134476 +S31508006DFC04331B681B0ADAB27B68DA74FB7AFA6806 +S31508006E0C1B01134403F5DC731B68DAB27B68DA7270 +S31508006E1CFB7AFA681B01134403F5DC731B681B0A1F +S31508006E2CDAB27B681A73FB7AFA681B01134403F50A +S31508006E3CDC731B681B0CDAB27B685A73FB7AFA682C +S31508006E4C1B01134403F5DC731B681B0EDAB27B6853 +S31508006E5C9A73FB7AFA681B01134403F5DE731B68F5 +S31508006E6CDAB27B68DA73FB7AFA681B01134403F50A +S31508006E7CDE731B681B0ADAB27B681A74FB7AFA682B +S31508006E8C1B01134403F5DE731B681B0CDAB27B6813 +S31508006E9C5A74FB7AFA681B01134403F5DE731B68F4 +S31508006EAC1B0EDAB27B689A74FB7A002B06D1FB6848 +S31508006EBCDB6843F02002FB68DA6005E0FB681B69B7 +S31508006ECC43F02002FB681A6100BF1437BD4680BC2C +S31508006EDC704700BF80B485B000AF78600B46FB7076 +S31508006EEC0023FB73FB78002B06D17B68DB68DBB2CF +S31508006EFC03F00303FB730BE0FB78012B06D17B68CD +S31508006F0C1B69DBB203F00303FB7301E00023FB737D +S31508006F1CFB7B18461437BD4680BC704780B489B0D5 +S31508006F2C00AF786039600023FB6100233B610023C6 +S31508006F3CBB610023FB6000237B610023BB603B68BD +S31508006F4CDB7803F00F03FB613B68DB7803F0100377 +S31508006F5C002B05D03B689B781A46FB691343FB61EB +S31508006F6C3B681B88DBB2002B44D07B681B687B61B3 +S31508006F7C0023BB6138E00122BB6902FA03F3FB600C +S31508006F8C3B681B881A46FB6813403B613A69FB68E9 +S31508006F9C9A4226D1BB699B00FB600F22FB6802FA5A +S31508006FAC03F3BB60BB68DB437A6913407B61FA6900 +S31508006FBCFB6802FA03F37A6913437B613B68DB7857 +S31508006FCC282B05D10122BB699A407B685A6108E0D7 +S31508006FDC3B68DB78482B04D10122BB699A407B6855 +S31508006FEC1A61BB690133BB61BB69072BC3D97B68C3 +S31508006FFC7A691A603B681B88FF2B46D97B685B68E5 +S3150800700C7B610023BB613AE0BB690833012202FAB3 +S3150800701C03F3FB603B681B881A46FB6813403B610D +S3150800702C3A69FB689A4227D1BB699B00FB600F2221 +S3150800703CFB6802FA03F3BB60BB68DB437A6913404F +S3150800704C7B61FA69FB6802FA03F37A6913437B617D +S3150800705C3B68DB78282B05D1BB69083301229A409B +S3150800706C7B685A613B68DB78482B05D1BB690833CA +S3150800707C01229A407B681A61BB690133BB61BB6903 +S3150800708C072BC1D97B687A695A6000BF2437BD467D +S3150800709C80BC704780B483B000AF78600B467B80A9 +S315080070AC7A887B681A6100BF0C37BD4680BC70476E +S315080070BC80B483B000AF78600B467B807A887B6897 +S315080070CC5A6100BF0C37BD4680BC704780B487B088 +S315080070DC00AF78600B46FB7000233B610023FB6016 +S315080070EC00237B610023BB607B68002B03DA2E4BE5 +S315080070FCDB697B6102E02C4B5B687B617B681B0C54 +S3150800710C03F00F03BB607B689BB23B617B6803F49F +S3150800711C4013B3F5401F0AD17B6923F070637B617A +S3150800712C214A214B5B6823F07063536021E07B682E +S3150800713C03F48013002B0ED00322BB6802FA03F368 +S3150800714CFB60FB68DB437A6913407B617B6943F020 +S3150800715C70637B610DE07B685B0D1B013A6902FA73 +S3150800716C03F3DB437A6913407B617B6943F07063F5 +S3150800717C7B61FB78002B08D07B685B0D1B013A6999 +S3150800718C02FA03F37A6913437B617B68002B03DAF3 +S3150800719C054A7B69D36102E0034A7B69536000BFE9 +S315080071AC1C37BD4680BC70470000014080B487B0D0 +S315080071BC00AF786000237B6100233B610023FB60F2 +S315080071CC0023BB604C4B5B6803F00C037B617B694B +S315080071DC042B07D0082B09D0002B33D17B68474AE0 +S315080071EC1A6033E07B68454A1A602FE0424B5B68AD +S315080071FC03F470133B61404B5B6803F48033FB600C +S3150800720C3B699B0C02333B61FB68002B06D13B693F +S3150800721C3B4A02FB03F27B681A6017E0364B5B6845 +S3150800722C03F40033002B06D03B69354A02FB03F204 +S3150800723C7B681A600AE03B69304A02FB03F27B68FA +S3150800724C1A6003E07B682D4A1A6000BF2A4B5B68FC +S3150800725C03F0F0037B617B691B097B61294A7B6917 +S3150800726C13441B78DBB2BB607B681A68BB68DA40D0 +S3150800727C7B685A60204B5B6803F4E0637B617B692F +S3150800728C1B0A7B611F4A7B6913441B78DBB2BB6004 +S3150800729C7B685A68BB68DA407B689A60164B5B68F1 +S315080072AC03F460537B617B69DB0A7B61154A7B6956 +S315080072BC13441B78DBB2BB607B685A68BB68DA4040 +S315080072CC7B68DA600C4B5B6803F440437B617B6933 +S315080072DC9B0B7B610C4A7B6913441B78DBB2BB6046 +S315080072EC7B68DA68BB68B2FBF3F27B681A6100BF8D +S315080072FC1C37BD4680BC70470010024000127A004D +S3150800730C00093D00000000201000002080B483B066 +S3150800731C00AF78600B46FB70FB78002B06D009494A +S3150800732C084B9A697B6813438B6106E00549054B44 +S3150800733C9A697B68DB4313408B6100BF0C37BD46EB +S3150800734C80BC70470010024080B483B000AF7860F0 +S3150800735C0B46FB70FB78002B06D00949084BDA69FB +S3150800736C7B681343CB6106E00549054BDA697B68F4 +S3150800737CDB431340CB6100BF0C37BD4680BC70475E +S3150800738C0010024080B483B000AF78600B46FB70E7 +S3150800739CFB78002B06D00949084B1A697B681343FE +S315080073AC0B6106E00549054B1A697B68DB431340FC +S315080073BC0B6100BF0C37BD4680BC704700100240FD +S315080073CC80B58CB000AF786039600023FB6200236F +S315080073DCBB6200237B6200233B620023FB617B6854 +S315080073ECFB617B681B8A9BB2FB62FA6A4CF6FF73DD +S315080073FC1340FB623B68DB881A46FB6A1343FB6245 +S3150800740CFB6A9AB27B681A827B689B899BB2FB6281 +S3150800741CFA6A4EF6F3131340FB623B689A883B688C +S3150800742C1B8913439AB23B685B8913439BB21A4672 +S3150800743CFB6A1343FB62FB6A9AB27B689A817B6888 +S3150800744C9B8A9BB2FB62FA6A4FF6FF431340FB62B8 +S3150800745C3B689B891A46FB6A1343FB62FB6A9AB222 +S3150800746C7B689A8207F108031846304B9847FB69E4 +S3150800747C2F4A934202D17B69BB6201E03B69BB622E +S3150800748C7B689B899BB21BB2002B0CDABA6A134633 +S3150800749C9B0013449A001A443B681B685B00B2FBBA +S315080074ACF3F37B620BE0BA6A13469B0013449A000B +S315080074BC1A443B681B689B00B2FBF3F37B627B6A3E +S315080074CC1C4AA2FB03235B091B01FB62FB6A1B0913 +S315080074DC642202FB03F37A6AD31A3B627B689B89A4 +S315080074EC9BB21BB2002B0CDA3B6ADB003233114A17 +S315080074FCA2FB03235B0903F00703FA6A1343FB6237 +S3150800750C0BE03B6A1B0132330A4AA2FB03235B09D5 +S3150800751C03F00F03FA6A1343FB62FB6A9AB27B68A1 +S3150800752C1A8100BF3037BD4680BD00BFB97100084F +S3150800753C003801401F85EB5180B483B000AF7860EA +S3150800754C0B46FB70FB78002B08D07B689B899BB29B +S3150800755C43F400539AB27B689A8107E07B689B894F +S3150800756C9BB223F400539AB27B689A8100BF0C37FE +S3150800757CBD4680BC704700BF80B483B000AF78604E +S3150800758C7B689B889BB2C3F308039BB218460C37DF +S3150800759CBD4680BC704700BF80B485B000AF78602C +S315080075AC0B467B800023FB737B681B889AB27B880F +S315080075BC13409BB2002B02D00123FB7301E000237E +S315080075CCFB73FB7B18461437BD4680BC704700BF5F +S315080075DC05020602060307030803090309040A043D +S315080075EC0B040C040C050D050E050F050F061006ED +S309080075FC100710084E +S31508007600000000000102030401020304060708093A +S309080076100204060854 +S705080061FB96 diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/readme.txt b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/readme.txt index a49767fb..a10a52ca 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/readme.txt +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/readme.txt @@ -1,4 +1,4 @@ Integrated Development Environment ---------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains +Rowleys CrossWorks (version 3.7.6) was used as the editor during the development of this software program. This directory contains the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/stm32f103_crossworks.hzp b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/stm32f103_crossworks.hzp index 610b7fda..f76e82fb 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/stm32f103_crossworks.hzp +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/stm32f103_crossworks.hzp @@ -1,100 +1,146 @@ - - + + - + - - - - - - - - - - + + + + + + + + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - + - - - + + + @@ -102,9 +148,30 @@ - - diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/stm32f103_crossworks.hzs b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/stm32f103_crossworks.hzs index e1fdd913..29ca23fd 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/stm32f103_crossworks.hzs +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/ide/stm32f103_crossworks.hzs @@ -1,19 +1,22 @@ - + + + + - + - + - + - + @@ -23,16 +26,16 @@ - + - + - + - + @@ -51,7 +54,7 @@ - + - + diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c deleted file mode 100644 index 56fddc52..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c +++ /dev/null @@ -1,784 +0,0 @@ -/**************************************************************************//** - * @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/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h index 2b6b51a7..efac390f 100644 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h @@ -1,16 +1,16 @@ /**************************************************************************//** * @file core_cm3.h * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V1.30 - * @date 30. October 2009 + * @version V3.00 + * @date 03. February 2012 * * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. + * Copyright (C) 2009-2012 ARM Limited. All rights reserved. * * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. + * 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 @@ -20,1618 +20,1354 @@ * 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 - @{ - */ +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif #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 __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC -#ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 /*!< standard definition for NVIC Priority Bits */ -#endif +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. - - - -/** - * IO definitions - * - * define access restrictions to peripheral registers + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. */ -#ifdef __cplusplus - #define __I volatile /*!< defines 'read only' permissions */ -#else - #define __I volatile const /*!< defines 'read only' permissions */ + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M3 + @{ + */ + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + #endif -#define __O volatile /*!< defines 'write only' permissions */ -#define __IO volatile /*!< defines 'read / write' permissions */ + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + /* add preprocessor checks */ +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200 + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M3 */ /******************************************************************************* * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register ******************************************************************************/ -/** @addtogroup CMSIS_CM3_core_register CMSIS CM3 Core Register - @{ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. */ - -/** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC - memory mapped structure for Nested Vectored Interrupt Controller (NVIC) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. @{ */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ typedef struct { - __IO uint32_t ISER[8]; /*!< Offset: 0x000 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 */ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ -/** @addtogroup CMSIS_CM3_SCB CMSIS CM3 SCB - memory mapped structure for System Control Block (SCB) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers @{ */ + +/** \brief Structure type to access the System Control Block (SCB). + */ typedef struct { - __I uint32_t CPUID; /*!< Offset: 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; + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; /* SCB CPUID Register Definitions */ #define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFul << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ +#define SCB_CPUID_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_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ #define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFul << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ +#define SCB_CPUID_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 */ +#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_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_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_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_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_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_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_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_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_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 */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ -/* SCB Interrupt Control State Register Definitions */ +/* SCB Vector Table Offset Register Definitions */ +#if (__CM3_REV < 0x0201) /* core r2p1 */ #define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ -#define SCB_VTOR_TBLBASE_Msk (0x1FFul << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ #define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFul << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif /* SCB Application Interrupt and Reset Control Register Definitions */ #define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFul << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ +#define SCB_AIRCR_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_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_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_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_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_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 */ +#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_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_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 */ +#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_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_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_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_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_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 */ +#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_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_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_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_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_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_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_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_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_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_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_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_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_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 */ +#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_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_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 */ +#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_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_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 */ +#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_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_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_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_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 */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ -/** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick - memory mapped structure for SysTick +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB @{ */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ typedef struct { - __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 */ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ } SysTick_Type; /* SysTick Control / Status Register Definitions */ #define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1ul << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ +#define SysTick_CTRL_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_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_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 */ +#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 */ +#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 */ +#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_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_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 */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ -/** @addtogroup CMSIS_CM3_ITM CMSIS CM3 ITM - memory mapped structure for Instrumentation Trace Macrocell (ITM) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) @{ */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ typedef struct { - __O union + __O 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; + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ +} 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 */ +#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_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_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_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_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1ul << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA 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_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1ul << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA 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_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1ul << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ +#define ITM_TCR_TXENA_Pos 3 /*!< ITM TCR: TXENA Position */ +#define ITM_TCR_TXENA_Msk (1UL << ITM_TCR_TXENA_Pos) /*!< ITM TCR: TXENA 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_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA 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 */ +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA 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 */ +#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 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 */ +/*@}*/ /* end of group CMSIS_ITM */ -/** @addtogroup CMSIS_CM3_InterruptType CMSIS CM3 Interrupt Type - memory mapped structure for Interrupt Type +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) @{ */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ typedef struct { - 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; + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; -/* 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 */ +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ -/* 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 DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT 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 DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG 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 */ +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) -/** @addtogroup CMSIS_CM3_MPU CMSIS CM3 MPU - memory mapped structure for Memory Protection Unit (MPU) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) @{ */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ typedef struct { - __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; + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; /* MPU Type Register */ #define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFul << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ +#define MPU_TYPE_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_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 */ +#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_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_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 */ +#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 */ +#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_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_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 */ +#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_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ #define MPU_RASR_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_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_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 */ +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ -/*@}*/ /* end of group CMSIS_CM3_MPU */ +/*@} end of group CMSIS_MPU */ #endif -/** @addtogroup CMSIS_CM3_CoreDebug CMSIS CM3 Core Debug - memory mapped structure for Core Debug Register +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers @{ */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ typedef struct { - __IO uint32_t DHCSR; /*!< Offset: 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 */ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ } CoreDebug_Type; /* Debug Halting Control and Status Register */ #define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFul << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ +#define CoreDebug_DHCSR_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_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_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_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_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_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_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_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_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_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_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 */ +#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_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 */ +#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_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_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_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_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_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_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_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_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_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_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_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_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 */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ /* Memory mapping of Cortex-M3 Hardware */ -#define SCS_BASE (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 SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ -#define 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 */ +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) - #define MPU_BASE (SCS_BASE + 0x0D90) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type*) MPU_BASE) /*!< Memory Protection Unit */ +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< 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 Function Interface contains: - Core NVIC Functions - Core SysTick Functions - - Core Reset Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference */ -/*@{*/ + + /* ########################## 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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ */ -static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + reg_value = SCB->AIRCR; /* read old register configuration */ reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - (0x5FA << SCB_AIRCR_VECTKEY_Pos) | + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ SCB->AIRCR = reg_value; } -/** - * @brief Get 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. + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). */ -static __INLINE uint32_t NVIC_GetPriorityGrouping(void) +__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. + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +__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. + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +__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 + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. */ -static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. */ -static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +__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. + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. */ -static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +__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. + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. */ -static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +__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 */ + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ else { NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ } -/** - * @brief 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. + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. */ -static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +__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 */ + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ else { return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ } -/** - * @brief Encode 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 +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). */ -static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +__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; @@ -1639,7 +1375,7 @@ static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t P 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))) @@ -1647,22 +1383,19 @@ static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t P } -/** - * @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 +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). */ -static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +__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; @@ -1670,132 +1403,134 @@ static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGr PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); } +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + /* ################################## SysTick function ############################################ */ - -#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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ */ -static __INLINE uint32_t SysTick_Config(uint32_t ticks) -{ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ if (ticks > 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 */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ SysTick->VAL = 0; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | + SysTick->CTRL = 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 */ +/*@} end of CMSIS_Core_SysTickFunctions */ /* ##################################### 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. +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ */ -static __INLINE uint32_t ITM_SendChar (uint32_t ch) + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) { - if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */ - (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ - (ITM->TER & (1ul << 0) ) ) /* ITM Port #0 enabled */ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ { while (ITM->PORT[0].u32 == 0); ITM->PORT[0].u8 = (uint8_t) ch; - } + } return (ch); } -/** - * @brief 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. +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. */ -static __INLINE int ITM_ReceiveChar (void) { - int ch = -1; /* no character available */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { ch = ITM_RxBuffer; ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ } - - return (ch); + + 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. +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. */ -static __INLINE int ITM_CheckChar (void) { +__STATIC_INLINE int32_t ITM_CheckChar (void) { if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { return (0); /* no character available */ @@ -1804,15 +1539,12 @@ static __INLINE int ITM_CheckChar (void) { } } -/*@}*/ /* end of group CMSIS_CM3_core_DebugInterface */ +/*@} end of CMSIS_core_DebugFunctions */ +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ #ifdef __cplusplus } #endif - -/*@}*/ /* end of group CMSIS_CM3_core_definitions */ - -#endif /* __CM3_CORE_H__ */ - -/*lint -restore */ diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmFunc.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmFunc.h new file mode 100644 index 00000000..adb07b5d --- /dev/null +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmFunc.h @@ -0,0 +1,616 @@ +/**************************************************************************//** + * @file core_cmFunc.h + * @brief CMSIS Cortex-M Core Function Access Header File + * @version V3.01 + * @date 06. March 2012 + * + * @note + * Copyright (C) 2009-2012 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + +#ifndef __CORE_CMFUNC_H +#define __CORE_CMFUNC_H + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + +/* intrinsic void __enable_irq(); */ +/* intrinsic void __disable_irq(); */ + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xff); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#endif +} + +#endif /* (__CORTEX_M == 0x04) */ + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#include + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ + +#include + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** \brief Enable IRQ Interrupts + + This function enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i"); +} + + +/** \brief Disable IRQ Interrupts + + This function disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i"); +} + + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) ); +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) ); +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) ); +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) ); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f"); +} + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f"); +} + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); + return(result); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (value) ); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) ); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + uint32_t result; + + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + return(result); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) ); +#endif +} + +#endif /* (__CORTEX_M == 0x04) */ + + +#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 + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +#endif /* __CORE_CMFUNC_H */ diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmInstr.h b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmInstr.h new file mode 100644 index 00000000..624c175f --- /dev/null +++ b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cmInstr.h @@ -0,0 +1,618 @@ +/**************************************************************************//** + * @file core_cmInstr.h + * @brief CMSIS Cortex-M Core Instruction Access Header File + * @version V3.01 + * @date 06. March 2012 + * + * @note + * Copyright (C) 2009-2012 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + +#ifndef __CORE_CMINSTR_H +#define __CORE_CMINSTR_H + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} + + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) +{ + revsh r0, r0 + bx lr +} + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +#define __ROR __ror + + +#if (__CORTEX_M >= 0x03) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __rbit + + +/** \brief LDR Exclusive (8 bit) + + This function performs a exclusive LDR command for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) + + +/** \brief LDR Exclusive (16 bit) + + This function performs a exclusive LDR command for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) + + +/** \brief LDR Exclusive (32 bit) + + This function performs a exclusive LDR command for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) + + +/** \brief STR Exclusive (8 bit) + + This function performs a exclusive STR command for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (16 bit) + + This function performs a exclusive STR command for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (32 bit) + + This function performs a exclusive STR command for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW(value, ptr) __strex(value, ptr) + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +#define __CLREX __clrex + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + +#endif /* (__CORTEX_M >= 0x03) */ + + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#include + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ + +#include + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __NOP(void) +{ + __ASM volatile ("nop"); +} + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFI(void) +{ + __ASM volatile ("wfi"); +} + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFE(void) +{ + __ASM volatile ("wfe"); +} + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __SEV(void) +{ + __ASM volatile ("sev"); +} + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __ISB(void) +{ + __ASM volatile ("isb"); +} + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void) +{ + __ASM volatile ("dsb"); +} + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DMB(void) +{ + __ASM volatile ("dmb"); +} + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value) +{ + uint32_t result; + + __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + + __ASM volatile ("ror %0, %0, %1" : "+r" (op1) : "r" (op2) ); + return(op1); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief LDR Exclusive (8 bit) + + This function performs a exclusive LDR command for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint8_t result; + + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + + +/** \brief LDR Exclusive (16 bit) + + This function performs a exclusive LDR command for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint16_t result; + + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + + +/** \brief LDR Exclusive (32 bit) + + This function performs a exclusive LDR command for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + + +/** \brief STR Exclusive (8 bit) + + This function performs a exclusive STR command for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +/** \brief STR Exclusive (16 bit) + + This function performs a exclusive STR command for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +/** \brief STR Exclusive (32 bit) + + This function performs a exclusive STR command for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void) +{ + __ASM volatile ("clrex"); +} + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value) +{ + uint8_t result; + + __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ + +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + +#endif + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + +#endif /* __CORE_CMINSTR_H */ diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS debug support.htm b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS debug support.htm deleted file mode 100644 index efda685b..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS debug support.htm +++ /dev/null @@ -1,243 +0,0 @@ - - - -CMSIS Debug Support - - - - - - - - -

CMSIS Debug Support

- -
- -

Cortex-M3 ITM Debug Access

-

- The Cortex-M3 incorporates the Instrumented Trace Macrocell (ITM) that provides together with - the Serial Viewer Output trace capabilities for the microcontroller system. The ITM has - 32 communication channels which are able to transmit 32 / 16 / 8 bit values; two ITM - communication channels are used by CMSIS to output the following information: -

-
    -
  • ITM Channel 0: used for printf-style output via the debug interface.
  • -
  • ITM Channel 31: is reserved for RTOS kernel awareness debugging.
  • -
- -

Debug IN / OUT functions

-

CMSIS provides following debug functions:

-
    -
  • ITM_SendChar (uses ITM channel 0)
  • -
  • ITM_ReceiveChar (uses global variable)
  • -
  • ITM_CheckChar (uses global variable)
  • -
- -

ITM_SendChar

-

- ITM_SendChar is used to transmit a character over ITM channel 0 from - the microcontroller system to the debug system.
- Only a 8 bit value is transmitted. -

-
-static __INLINE uint32_t ITM_SendChar (uint32_t ch)
-{
-  /* check if debugger connected and ITM channel enabled for tracing */
-  if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA)  &&
-      (ITM->TCR & ITM_TCR_ITMENA)                  &&
-      (ITM->TER & (1UL << 0))  ) 
-  {
-    while (ITM->PORT[0].u32 == 0);
-    ITM->PORT[0].u8 = (uint8_t)ch;
-  }  
-  return (ch);
-}
- -

ITM_ReceiveChar

-

- ITM communication channel is only capable for OUT direction. For IN direction - a globel variable is used. A simple mechansim detects if a character is received. - The project to test need to be build with debug information. -

- -

- The globale variable ITM_RxBuffer is used to transmit a 8 bit value from debug system - to microcontroller system. ITM_RxBuffer is 32 bit wide to enshure a proper handshake. -

-
-extern volatile int ITM_RxBuffer;                    /* variable to receive characters                             */
-
-

- A dedicated bit pattern is used to determin if ITM_RxBuffer is empty - or contains a valid value. -

-
-#define             ITM_RXBUFFER_EMPTY    0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */
-
-

- ITM_ReceiveChar is used to receive a 8 bit value from the debug system. The function is nonblocking. - It returns the received character or '-1' if no character was available. -

-
-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); 
-}
-
- -

ITM_CheckChar

-

- ITM_CheckChar is used to check if a character is received. -

-
-static __INLINE int ITM_CheckChar (void) {
-
-  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
-    return (0);                                 /* no character available */
-  } else {
-    return (1);                                 /*    character available */
-  }
-}
- - -

ITM Debug Support in uVision

-

- uVision uses in a debug session the Debug (printf) Viewer window to - display the debug data. -

-

Direction microcontroller system -> uVision:

-
    -
  • - Characters received via ITM communication channel 0 are written in a printf style - to Debug (printf) Viewer window. -
  • -
- -

Direction uVision -> microcontroller system:

-
    -
  • Check if ITM_RxBuffer variable is available (only performed once).
  • -
  • Read character from Debug (printf) Viewer window.
  • -
  • If ITM_RxBuffer empty write character to ITM_RxBuffer.
  • -
- -

Note

-
    -
  • Current solution does not use a buffer machanism for trasmitting the characters.

    -
  • -
- -

RTX Kernel awareness in uVision

-

- uVision / RTX are using a simple and efficient solution for RTX Kernel awareness. - No format overhead is necessary.
- uVsion debugger decodes the RTX events via the 32 / 16 / 8 bit ITM write access - to ITM communication channel 31. -

- -

Following RTX events are traced:

-
    -
  • Task Create / Delete event -
      -
    1. 32 bit access. Task start address is transmitted
    2. -
    3. 16 bit access. Task ID and Create/Delete flag are transmitted
      - High byte holds Create/Delete flag, Low byte holds TASK ID. -
    4. -
    -
  • -
  • Task switch event -
      -
    1. 8 bit access. Task ID of current task is transmitted
    2. -
    -
  • -
- -

Note

-
    -
  • Other RTOS information could be retrieved via memory read access in a polling mode manner.

    -
  • -
- - -

 

- -
- -

Copyright © KEIL - An ARM Company.
-All rights reserved.
-Visit our web site at
www.keil.com. -

- - - - \ No newline at end of file diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS_changes.htm b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS_changes.htm deleted file mode 100644 index 162ffcc9..00000000 --- a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS_changes.htm +++ /dev/null @@ -1,320 +0,0 @@ - - - -CMSIS Changes - - - - - - - - -

Changes to CMSIS version V1.20

- -
- -

1. Removed CMSIS Middelware packages

-

- CMSIS Middleware is on hold from ARM side until a agreement between all CMSIS partners is found. -

- -

2. SystemFrequency renamed to SystemCoreClock

-

- The variable name SystemCoreClock is more precise than SystemFrequency - because the variable holds the clock value at which the core is running. -

- -

3. Changed startup concept

-

- The old startup concept (calling SystemInit_ExtMemCtl from startup file and calling SystemInit - from main) has the weakness that it does not work for controllers which need a already - configuerd clock system to configure the external memory controller. -

- -

Changed startup concept

-
    -
  • - SystemInit() is called from startup file before premain. -
  • -
  • - SystemInit() configures the clock system and also configures - an existing external memory controller. -
  • -
  • - SystemInit() must not use global variables. -
  • -
  • - SystemCoreClock is initialized with a correct predefined value. -
  • -
  • - Additional function void SystemCoreClockUpdate (void) is provided.
    - SystemCoreClockUpdate() updates the variable SystemCoreClock - and must be called whenever the core clock is changed.
    - SystemCoreClockUpdate() evaluates the clock register settings and calculates - the current core clock. -
  • -
- - -

4. Advanced Debug Functions

-

- ITM communication channel is only capable for OUT direction. To allow also communication for - IN direction a simple concept is provided. -

-
    -
  • - Global variable volatile int ITM_RxBuffer used for IN data. -
  • -
  • - Function int ITM_CheckChar (void) checks if a new character is available. -
  • -
  • - Function int ITM_ReceiveChar (void) retrieves the new character. -
  • -
- -

- For detailed explanation see file CMSIS debug support.htm. -

- - -

5. Core Register Bit Definitions

-

- Files core_cm3.h and core_cm0.h contain now bit definitions for Core Registers. The name for the - defines correspond with the Cortex-M Technical Reference Manual. -

-

- e.g. SysTick structure with bit definitions -

-
-/** @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 */
- -

7. DoxyGen Tags

-

- DoxyGen tags in files core_cm3.[c,h] and core_cm0.[c,h] are reworked to create proper documentation - using DoxyGen. -

- -

8. Folder Structure

-

- The folder structure is changed to differentiate the single support packages. -

- -
    -
  • CM0
  • -
  • CM3 -
      -
    • CoreSupport
    • -
    • DeviceSupport
    • -
        -
      • Vendor -
          -
        • Device -
            -
          • Startup -
              -
            • Toolchain
            • -
            • Toolchain
            • -
            • ...
            • -
            -
          • -
          -
        • -
        • Device
        • -
        • ...
        • -
        -
      • -
      • Vendor
      • -
      • ...
      • -
      - -
    • Example -
        -
      • Toolchain -
          -
        • Device
        • -
        • Device
        • -
        • ...
        • -
        -
      • -
      • Toolchain
      • -
      • ...
      • -
      -
    • -
    -
  • - -
  • Documentation
  • -
- -

9. Open Points

-

- Following points need to be clarified and solved: -

-
    -
  • -

    - Equivalent C and Assembler startup files. -

    -

    - Is there a need for having C startup files although assembler startup files are - very efficient and do not need to be changed? -

    -

  • -
  • -

    - Placing of HEAP in external RAM. -

    -

    - It must be possible to place HEAP in external RAM if the device supports an - external memory controller. -

    -
  • -
  • -

    - Placing of STACK /HEAP. -

    -

    - STACK should always be placed at the end of internal RAM. -

    -

    - If HEAP is placed in internal RAM than it should be placed after RW ZI section. -

    -
  • -
  • -

    - Removing core_cm3.c and core_cm0.c. -

    -

    - On a long term the functions in core_cm3.c and core_cm0.c must be replaced with - appropriate compiler intrinsics. -

    -
  • -
- - -

10. Limitations

-

- The following limitations are not covered with the current CMSIS version: -

-
    -
  • - No C startup files for ARM toolchain are provided. -
  • -
  • - No C startup files for GNU toolchain are provided. -
  • -
  • - No C startup files for IAR toolchain are provided. -
  • -
  • - No Tasking projects are provided yet. -
  • -
diff --git a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/License.doc b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/License.doc deleted file mode 100644 index b6b8acecc137bca709444106cba045d3d01daedd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39936 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 diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.elf b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.elf deleted file mode 100644 index 028d835387db0f58bcb0e0d575625f7596ea7997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482276 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 __RAM_segment_start__) && (__vectors_ram_end__ <= __RAM_segment_end__)), error: .vectors_ram is too large to fit in RAM memory segment) - 0x08000000 __vectors_load_start__ = ALIGN (__FLASH_segment_start__, 0x100) - -.vectors 0x08000000 0x188 - 0x08000000 __vectors_start__ = . - *(.vectors .vectors.*) - .vectors 0x08000000 0x188 THUMB Debug/../../obj/vectors.o - 0x08000000 _vectors - 0x08000188 __vectors_end__ = (__vectors_start__ + SIZEOF (.vectors)) - 0x08000188 __vectors_load_end__ = __vectors_end__ - 0x00000001 . = ASSERT (((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <= __FLASH_segment_end__)), error: .vectors is too large to fit in FLASH memory segment) - 0x08000188 __init_load_start__ = ALIGN (__vectors_end__, 0x4) - -.init 0x08000188 0x108 - 0x08000188 __init_start__ = . - *(.init .init.*) - .init 0x08000188 0x108 THUMB Debug/../../obj/cstart.o - 0x08000188 reset_handler - 0x0800020a exit - 0x08000290 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x08000290 __init_load_end__ = __init_end__ - 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment) - 0x08000290 __text_load_start__ = ALIGN (__init_end__, 0x4) - -.text 0x08000290 0xa168 - 0x08000290 __text_start__ = . - *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs - .text.CmdResp2Error - 0x08000290 0x3c THUMB Debug/../../obj/mmc.o - .text.CmdResp1Error - 0x080002cc 0xf4 THUMB Debug/../../obj/mmc.o - .text.SDEnWideBus - 0x080003c0 0x240 THUMB Debug/../../obj/mmc.o - .text.SD_Detect - 0x08000600 0x28 THUMB Debug/../../obj/mmc.o - 0x08000600 SD_Detect - .text.SD_PowerON - 0x08000628 0x220 THUMB Debug/../../obj/mmc.o - 0x08000628 SD_PowerON - .text.SD_InitializeCards - 0x08000848 0x15c THUMB Debug/../../obj/mmc.o - 0x08000848 SD_InitializeCards - .text.SD_GetCardInfo - 0x080009a4 0x304 THUMB Debug/../../obj/mmc.o - 0x080009a4 SD_GetCardInfo - .text.SD_EnableWideBusOperation - 0x08000ca8 0x74 THUMB Debug/../../obj/mmc.o - 0x08000ca8 SD_EnableWideBusOperation - .text.SD_SelectDeselect - 0x08000d1c 0x30 THUMB Debug/../../obj/mmc.o - 0x08000d1c SD_SelectDeselect - .text.SD_Init 0x08000d4c 0x170 THUMB Debug/../../obj/mmc.o - 0x08000d4c SD_Init - .text.SD_ReadBlock - 0x08000ebc 0x1e8 THUMB Debug/../../obj/mmc.o - 0x08000ebc SD_ReadBlock - .text.SD_WriteBlock - 0x080010a4 0x1ec THUMB Debug/../../obj/mmc.o - 0x080010a4 SD_WriteBlock - .text.SD_SendStatus - 0x08001290 0x50 THUMB Debug/../../obj/mmc.o - 0x08001290 SD_SendStatus - .text.SD_GetState - 0x080012e0 0x28 THUMB Debug/../../obj/mmc.o - 0x080012e0 SD_GetState - .text.SD_GetStatus - 0x08001308 0x18 THUMB Debug/../../obj/mmc.o - 0x08001308 SD_GetStatus - .text.disk_initialize - 0x08001320 0x30 THUMB Debug/../../obj/mmc.o - 0x08001320 disk_initialize - .text.disk_status - 0x08001350 0x28 THUMB Debug/../../obj/mmc.o - 0x08001350 disk_status - .text.disk_read - 0x08001378 0x5c THUMB Debug/../../obj/mmc.o - 0x08001378 disk_read - .text.disk_write - 0x080013d4 0x60 THUMB Debug/../../obj/mmc.o - 0x080013d4 disk_write - .text.disk_ioctl - 0x08001434 0x60 THUMB Debug/../../obj/mmc.o - 0x08001434 disk_ioctl - .text.SystemInit - 0x08001494 0x118 THUMB Debug/../../obj/system_stm32f4xx.o - 0x08001494 SystemInit - .text.FLASH_Unlock - 0x080015ac 0x24 THUMB Debug/../../obj/stm32f4xx_flash.o - 0x080015ac FLASH_Unlock - .text.FLASH_Lock - 0x080015d0 0x14 THUMB Debug/../../obj/stm32f4xx_flash.o - 0x080015d0 FLASH_Lock - .text.FLASH_ClearFlag - 0x080015e4 0xc THUMB Debug/../../obj/stm32f4xx_flash.o - 0x080015e4 FLASH_ClearFlag - .text.FLASH_GetStatus - 0x080015f0 0x38 THUMB Debug/../../obj/stm32f4xx_flash.o - 0x080015f0 FLASH_GetStatus - .text.FLASH_WaitForLastOperation - 0x08001628 0x24 THUMB Debug/../../obj/stm32f4xx_flash.o - 0x08001628 FLASH_WaitForLastOperation - .text.FLASH_ProgramWord - 0x0800164c 0x40 THUMB Debug/../../obj/stm32f4xx_flash.o - 0x0800164c FLASH_ProgramWord - .text.FLASH_EraseSector - 0x0800168c 0x78 THUMB Debug/../../obj/stm32f4xx_flash.o - 0x0800168c FLASH_EraseSector - .text.GPIO_Init - 0x08001704 0x150 THUMB Debug/../../obj/stm32f4xx_gpio.o - 0x08001704 GPIO_Init - .text.GPIO_ReadInputDataBit - 0x08001854 0xc THUMB Debug/../../obj/stm32f4xx_gpio.o - 0x08001854 GPIO_ReadInputDataBit - .text.GPIO_PinAFConfig - 0x08001860 0x30 THUMB Debug/../../obj/stm32f4xx_gpio.o - 0x08001860 GPIO_PinAFConfig - .text.RCC_GetClocksFreq - 0x08001890 0xb4 THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x08001890 RCC_GetClocksFreq - .text.RCC_AHB1PeriphClockCmd - 0x08001944 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x08001944 RCC_AHB1PeriphClockCmd - .text.RCC_AHB2PeriphClockCmd - 0x08001960 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x08001960 RCC_AHB2PeriphClockCmd - .text.RCC_APB1PeriphClockCmd - 0x0800197c 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x0800197c RCC_APB1PeriphClockCmd - .text.RCC_APB2PeriphClockCmd - 0x08001998 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x08001998 RCC_APB2PeriphClockCmd - .text.RCC_AHB1PeriphResetCmd - 0x080019b4 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x080019b4 RCC_AHB1PeriphResetCmd - .text.RCC_APB2PeriphResetCmd - 0x080019d0 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x080019d0 RCC_APB2PeriphResetCmd - .text.SDIO_DeInit - 0x080019ec 0x1c THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x080019ec SDIO_DeInit - .text.SDIO_Init - 0x08001a08 0x38 THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001a08 SDIO_Init - .text.SDIO_ClockCmd - 0x08001a40 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001a40 SDIO_ClockCmd - .text.SDIO_SetPowerState - 0x08001a4c 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001a4c SDIO_SetPowerState - .text.SDIO_GetPowerState - 0x08001a58 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001a58 SDIO_GetPowerState - .text.SDIO_SendCommand - 0x08001a68 0x30 THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001a68 SDIO_SendCommand - .text.SDIO_GetCommandResponse - 0x08001a98 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001a98 SDIO_GetCommandResponse - .text.SDIO_GetResponse - 0x08001aa8 0x1c THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001aa8 SDIO_GetResponse - .text.SDIO_DataConfig - 0x08001ac4 0x30 THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001ac4 SDIO_DataConfig - .text.SDIO_ReadData - 0x08001af4 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001af4 SDIO_ReadData - .text.SDIO_WriteData - 0x08001b04 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001b04 SDIO_WriteData - .text.SDIO_GetFlagStatus - 0x08001b14 0x14 THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001b14 SDIO_GetFlagStatus - .text.SDIO_ClearFlag - 0x08001b28 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x08001b28 SDIO_ClearFlag - .text.SYSCFG_ETH_MediaInterfaceConfig - 0x08001b34 0xc THUMB Debug/../../obj/stm32f4xx_syscfg.o - 0x08001b34 SYSCFG_ETH_MediaInterfaceConfig - .text.USART_Init - 0x08001b40 0xe0 THUMB Debug/../../obj/stm32f4xx_usart.o - 0x08001b40 USART_Init - .text.USART_Cmd - 0x08001c20 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - 0x08001c20 USART_Cmd - .text.USART_SendData - 0x08001c3c 0x8 THUMB Debug/../../obj/stm32f4xx_usart.o - 0x08001c3c USART_SendData - .text.USART_ReceiveData - 0x08001c44 0x8 THUMB Debug/../../obj/stm32f4xx_usart.o - 0x08001c44 USART_ReceiveData - .text.USART_GetFlagStatus - 0x08001c4c 0xc THUMB Debug/../../obj/stm32f4xx_usart.o - 0x08001c4c USART_GetFlagStatus - .text.ETH_DeInit - 0x08001c58 0x1c THUMB Debug/../../obj/stm32_eth.o - 0x08001c58 ETH_DeInit - .text.ETH_StructInit - 0x08001c74 0xa0 THUMB Debug/../../obj/stm32_eth.o - 0x08001c74 ETH_StructInit - .text.ETH_Start - 0x08001d14 0x38 THUMB Debug/../../obj/stm32_eth.o - 0x08001d14 ETH_Start - .text.ETH_ReadPHYRegister - 0x08001d4c 0x68 THUMB Debug/../../obj/stm32_eth.o - 0x08001d4c ETH_ReadPHYRegister - .text.ETH_WritePHYRegister - 0x08001db4 0x60 THUMB Debug/../../obj/stm32_eth.o - 0x08001db4 ETH_WritePHYRegister - .text.ETH_Init - 0x08001e14 0x328 THUMB Debug/../../obj/stm32_eth.o - 0x08001e14 ETH_Init - .text.ETH_SoftwareReset - 0x0800213c 0x14 THUMB Debug/../../obj/stm32_eth.o - 0x0800213c ETH_SoftwareReset - .text.ETH_GetSoftwareResetStatus - 0x08002150 0x10 THUMB Debug/../../obj/stm32_eth.o - 0x08002150 ETH_GetSoftwareResetStatus - .text.netdev_init - 0x08002160 0x25c THUMB Debug/../../obj/netdev.o - 0x08002160 netdev_init - .text.netdev_init_mac - 0x080023bc 0x24 THUMB Debug/../../obj/netdev.o - 0x080023bc netdev_init_mac - .text.netdev_read - 0x080023e0 0x48 THUMB Debug/../../obj/netdev.o - 0x080023e0 netdev_read - .text.netdev_send - 0x08002428 0x54 THUMB Debug/../../obj/netdev.o - 0x08002428 netdev_send - .text.USBD_Resume - 0x0800247c 0x18 THUMB Debug/../../obj/usbd_core.o - .text.USBD_Suspend - 0x08002494 0x1c THUMB Debug/../../obj/usbd_core.o - .text.USBD_SOF - 0x080024b0 0x10 THUMB Debug/../../obj/usbd_core.o - .text.USBD_IsoINIncomplete - 0x080024c0 0x10 THUMB Debug/../../obj/usbd_core.o - .text.USBD_IsoOUTIncomplete - 0x080024d0 0x10 THUMB Debug/../../obj/usbd_core.o - .text.USBD_DevConnected - 0x080024e0 0x18 THUMB Debug/../../obj/usbd_core.o - .text.USBD_DevDisconnected - 0x080024f8 0x20 THUMB Debug/../../obj/usbd_core.o - .text.USBD_Reset - 0x08002518 0x30 THUMB Debug/../../obj/usbd_core.o - .text.USBD_SetupStage - 0x08002548 0x4c THUMB Debug/../../obj/usbd_core.o - .text.USBD_DataInStage - 0x08002594 0xbc THUMB Debug/../../obj/usbd_core.o - .text.USBD_DataOutStage - 0x08002650 0x7c THUMB Debug/../../obj/usbd_core.o - .text.USBD_Init - 0x080026cc 0x38 THUMB Debug/../../obj/usbd_core.o - 0x080026cc USBD_Init - .text.USBD_SetCfg - 0x08002704 0x18 THUMB Debug/../../obj/usbd_core.o - 0x08002704 USBD_SetCfg - .text.USBD_ClrCfg - 0x0800271c 0x10 THUMB Debug/../../obj/usbd_core.o - 0x0800271c USBD_ClrCfg - .text.USBD_CtlSendData - 0x0800272c 0x20 THUMB Debug/../../obj/usbd_ioreq.o - 0x0800272c USBD_CtlSendData - .text.USBD_CtlContinueSendData - 0x0800274c 0x14 THUMB Debug/../../obj/usbd_ioreq.o - 0x0800274c USBD_CtlContinueSendData - .text.USBD_CtlContinueRx - 0x08002760 0x14 THUMB Debug/../../obj/usbd_ioreq.o - 0x08002760 USBD_CtlContinueRx - .text.USBD_CtlSendStatus - 0x08002774 0x20 THUMB Debug/../../obj/usbd_ioreq.o - 0x08002774 USBD_CtlSendStatus - .text.USBD_CtlReceiveStatus - 0x08002794 0x20 THUMB Debug/../../obj/usbd_ioreq.o - 0x08002794 USBD_CtlReceiveStatus - .text.USBD_ParseSetupRequest - 0x080027b4 0x44 THUMB Debug/../../obj/usbd_req.o - 0x080027b4 USBD_ParseSetupRequest - .text.USBD_CtlError - 0x080027f8 0x1c THUMB Debug/../../obj/usbd_req.o - 0x080027f8 USBD_CtlError - .text.USBD_StdEPReq - 0x08002814 0xd8 THUMB Debug/../../obj/usbd_req.o - 0x08002814 USBD_StdEPReq - .text.USBD_StdItfReq - 0x080028ec 0x34 THUMB Debug/../../obj/usbd_req.o - 0x080028ec USBD_StdItfReq - .text.USBD_StdDevReq - 0x08002920 0x2e8 THUMB Debug/../../obj/usbd_req.o - 0x08002920 USBD_StdDevReq - .text.USBD_GetString - 0x08002c08 0x4c THUMB Debug/../../obj/usbd_req.o - 0x08002c08 USBD_GetString - .text.USB_OTG_CoreReset - 0x08002c54 0x90 THUMB Debug/../../obj/usb_core.o - .text.USB_OTG_WritePacket - 0x08002ce4 0x54 THUMB Debug/../../obj/usb_core.o - 0x08002ce4 USB_OTG_WritePacket - .text.USB_OTG_ReadPacket - 0x08002d38 0x50 THUMB Debug/../../obj/usb_core.o - 0x08002d38 USB_OTG_ReadPacket - .text.USB_OTG_SelectCore - 0x08002d88 0x1f0 THUMB Debug/../../obj/usb_core.o - 0x08002d88 USB_OTG_SelectCore - .text.USB_OTG_CoreInit - 0x08002f78 0x8c THUMB Debug/../../obj/usb_core.o - 0x08002f78 USB_OTG_CoreInit - .text.USB_OTG_EnableGlobalInt - 0x08003004 0x10 THUMB Debug/../../obj/usb_core.o - 0x08003004 USB_OTG_EnableGlobalInt - .text.USB_OTG_DisableGlobalInt - 0x08003014 0x10 THUMB Debug/../../obj/usb_core.o - 0x08003014 USB_OTG_DisableGlobalInt - .text.USB_OTG_FlushTxFifo - 0x08003024 0x58 THUMB Debug/../../obj/usb_core.o - 0x08003024 USB_OTG_FlushTxFifo - .text.USB_OTG_FlushRxFifo - 0x0800307c 0x50 THUMB Debug/../../obj/usb_core.o - 0x0800307c USB_OTG_FlushRxFifo - .text.USB_OTG_SetCurrentMode - 0x080030cc 0x2c THUMB Debug/../../obj/usb_core.o - 0x080030cc USB_OTG_SetCurrentMode - .text.USB_OTG_IsDeviceMode - 0x080030f8 0x10 THUMB Debug/../../obj/usb_core.o - 0x080030f8 USB_OTG_IsDeviceMode - .text.USB_OTG_ReadCoreItr - 0x08003108 0xc THUMB Debug/../../obj/usb_core.o - 0x08003108 USB_OTG_ReadCoreItr - .text.USB_OTG_EnableDevInt - 0x08003114 0x48 THUMB Debug/../../obj/usb_core.o - 0x08003114 USB_OTG_EnableDevInt - .text.USB_OTG_CoreInitDev - 0x0800315c 0x114 THUMB Debug/../../obj/usb_core.o - 0x0800315c USB_OTG_CoreInitDev - .text.USB_OTG_GetDeviceSpeed - 0x08003270 0x1c THUMB Debug/../../obj/usb_core.o - 0x08003270 USB_OTG_GetDeviceSpeed - .text.USB_OTG_EP0Activate - 0x0800328c 0x2c THUMB Debug/../../obj/usb_core.o - 0x0800328c USB_OTG_EP0Activate - .text.USB_OTG_EPActivate - 0x080032b8 0x68 THUMB Debug/../../obj/usb_core.o - 0x080032b8 USB_OTG_EPActivate - .text.USB_OTG_EPDeactivate - 0x08003320 0x48 THUMB Debug/../../obj/usb_core.o - 0x08003320 USB_OTG_EPDeactivate - .text.USB_OTG_EPStartXfer - 0x08003368 0x178 THUMB Debug/../../obj/usb_core.o - 0x08003368 USB_OTG_EPStartXfer - .text.USB_OTG_EP0StartXfer - 0x080034e0 0x108 THUMB Debug/../../obj/usb_core.o - 0x080034e0 USB_OTG_EP0StartXfer - .text.USB_OTG_EPSetStall - 0x080035e8 0x38 THUMB Debug/../../obj/usb_core.o - 0x080035e8 USB_OTG_EPSetStall - .text.USB_OTG_EPClearStall - 0x08003620 0x28 THUMB Debug/../../obj/usb_core.o - 0x08003620 USB_OTG_EPClearStall - .text.USB_OTG_ReadDevAllOutEp_itr - 0x08003648 0xc THUMB Debug/../../obj/usb_core.o - 0x08003648 USB_OTG_ReadDevAllOutEp_itr - .text.USB_OTG_ReadDevOutEP_itr - 0x08003654 0x10 THUMB Debug/../../obj/usb_core.o - 0x08003654 USB_OTG_ReadDevOutEP_itr - .text.USB_OTG_ReadDevAllInEPItr - 0x08003664 0xc THUMB Debug/../../obj/usb_core.o - 0x08003664 USB_OTG_ReadDevAllInEPItr - .text.USB_OTG_EP0_OutStart - 0x08003670 0x3c THUMB Debug/../../obj/usb_core.o - 0x08003670 USB_OTG_EP0_OutStart - .text.DCD_Init - 0x080036ac 0xa0 THUMB Debug/../../obj/usb_dcd.o - 0x080036ac DCD_Init - .text.DCD_EP_Open - 0x0800374c 0x4c THUMB Debug/../../obj/usb_dcd.o - 0x0800374c DCD_EP_Open - .text.DCD_EP_Close - 0x08003798 0x2c THUMB Debug/../../obj/usb_dcd.o - 0x08003798 DCD_EP_Close - .text.DCD_EP_PrepareRx - 0x080037c4 0x40 THUMB Debug/../../obj/usb_dcd.o - 0x080037c4 DCD_EP_PrepareRx - .text.DCD_EP_Tx - 0x08003804 0x3c THUMB Debug/../../obj/usb_dcd.o - 0x08003804 DCD_EP_Tx - .text.DCD_EP_Stall - 0x08003840 0x40 THUMB Debug/../../obj/usb_dcd.o - 0x08003840 DCD_EP_Stall - .text.DCD_EP_ClrStall - 0x08003880 0x40 THUMB Debug/../../obj/usb_dcd.o - 0x08003880 DCD_EP_ClrStall - .text.DCD_EP_SetAddress - 0x080038c0 0x10 THUMB Debug/../../obj/usb_dcd.o - 0x080038c0 DCD_EP_SetAddress - .text.DCD_DevDisconnect - 0x080038d0 0x10 THUMB Debug/../../obj/usb_dcd.o - 0x080038d0 DCD_DevDisconnect - .text.USBD_OTG_ISR_Handler - 0x080038e0 0x534 THUMB Debug/../../obj/usb_dcd_int.o - 0x080038e0 USBD_OTG_ISR_Handler - .text.UsbConnectHook - 0x08003e14 0x4 THUMB Debug/../../obj/hooks.o - 0x08003e14 UsbConnectHook - .text.UsbEnterLowPowerModeHook - 0x08003e18 0x4 THUMB Debug/../../obj/hooks.o - 0x08003e18 UsbEnterLowPowerModeHook - .text.UsbLeaveLowPowerModeHook - 0x08003e1c 0x4 THUMB Debug/../../obj/hooks.o - 0x08003e1c UsbLeaveLowPowerModeHook - .text.CpuUserProgramStartHook - 0x08003e20 0x18 THUMB Debug/../../obj/hooks.o - 0x08003e20 CpuUserProgramStartHook - .text.FileIsFirmwareUpdateRequestedHook - 0x08003e38 0x38 THUMB Debug/../../obj/hooks.o - 0x08003e38 FileIsFirmwareUpdateRequestedHook - .text.FileGetFirmwareFilenameHook - 0x08003e70 0xc THUMB Debug/../../obj/hooks.o - 0x08003e70 FileGetFirmwareFilenameHook - .text.FileFirmwareUpdateStartedHook - 0x08003e7c 0x28 THUMB Debug/../../obj/hooks.o - 0x08003e7c FileFirmwareUpdateStartedHook - .text.FileFirmwareUpdateCompletedHook - 0x08003ea4 0x48 THUMB Debug/../../obj/hooks.o - 0x08003ea4 FileFirmwareUpdateCompletedHook - .text.FileFirmwareUpdateErrorHook - 0x08003eec 0x14 THUMB Debug/../../obj/hooks.o - 0x08003eec FileFirmwareUpdateErrorHook - .text.FileFirmwareUpdateLogHook - 0x08003f00 0x58 THUMB Debug/../../obj/hooks.o - 0x08003f00 FileFirmwareUpdateLogHook - .text.startup.main - 0x08003f58 0xf8 THUMB Debug/../../obj/main.o - 0x08003f58 main - .text.USB_OTG_BSP_Init - 0x08004050 0xb0 THUMB Debug/../../obj/usb_bsp.o - 0x08004050 USB_OTG_BSP_Init - .text.USB_OTG_BSP_EnableInterrupt - 0x08004100 0x4 THUMB Debug/../../obj/usb_bsp.o - 0x08004100 USB_OTG_BSP_EnableInterrupt - .text.USB_OTG_BSP_uDelay - 0x08004104 0x1c THUMB Debug/../../obj/usb_bsp.o - 0x08004104 USB_OTG_BSP_uDelay - .text.USB_OTG_BSP_mDelay - 0x08004120 0x24 THUMB Debug/../../obj/usb_bsp.o - 0x08004120 USB_OTG_BSP_mDelay - .text.USBD_bulk_GetCfgDesc - 0x08004144 0x10 THUMB Debug/../../obj/usbd_bulk.o - .text.usbd_bulk_SOF - 0x08004154 0x18 THUMB Debug/../../obj/usbd_bulk.o - .text.usbd_bulk_DataIn - 0x0800416c 0xc THUMB Debug/../../obj/usbd_bulk.o - .text.usbd_bulk_DataOut - 0x08004178 0xc THUMB Debug/../../obj/usbd_bulk.o - .text.usbd_bulk_DeInit - 0x08004184 0x18 THUMB Debug/../../obj/usbd_bulk.o - .text.usbd_bulk_Init - 0x0800419c 0x30 THUMB Debug/../../obj/usbd_bulk.o - .text.usbd_bulk_Setup - 0x080041cc 0x6c THUMB Debug/../../obj/usbd_bulk.o - .text.usbd_bulk_get_rx_buffer_ptr - 0x08004238 0xc THUMB Debug/../../obj/usbd_bulk.o - 0x08004238 usbd_bulk_get_rx_buffer_ptr - .text.USBD_USR_DeviceDescriptor - 0x08004244 0x10 THUMB Debug/../../obj/usbd_desc.o - 0x08004244 USBD_USR_DeviceDescriptor - .text.USBD_USR_LangIDStrDescriptor - 0x08004254 0x10 THUMB Debug/../../obj/usbd_desc.o - 0x08004254 USBD_USR_LangIDStrDescriptor - .text.USBD_USR_InterfaceStrDescriptor - 0x08004264 0x20 THUMB Debug/../../obj/usbd_desc.o - 0x08004264 USBD_USR_InterfaceStrDescriptor - .text.USBD_USR_ConfigStrDescriptor - 0x08004284 0x20 THUMB Debug/../../obj/usbd_desc.o - 0x08004284 USBD_USR_ConfigStrDescriptor - .text.USBD_USR_SerialStrDescriptor - 0x080042a4 0x20 THUMB Debug/../../obj/usbd_desc.o - 0x080042a4 USBD_USR_SerialStrDescriptor - .text.USBD_USR_ManufacturerStrDescriptor - 0x080042c4 0x20 THUMB Debug/../../obj/usbd_desc.o - 0x080042c4 USBD_USR_ManufacturerStrDescriptor - .text.USBD_USR_ProductStrDescriptor - 0x080042e4 0x20 THUMB Debug/../../obj/usbd_desc.o - 0x080042e4 USBD_USR_ProductStrDescriptor - .text.USBD_USR_Init - 0x08004304 0x4 THUMB Debug/../../obj/usbd_usr.o - 0x08004304 USBD_USR_Init - .text.USBD_USR_DeviceReset - 0x08004308 0x4 THUMB Debug/../../obj/usbd_usr.o - 0x08004308 USBD_USR_DeviceReset - .text.USBD_USR_DeviceConfigured - 0x0800430c 0x4 THUMB Debug/../../obj/usbd_usr.o - 0x0800430c USBD_USR_DeviceConfigured - .text.USBD_USR_DeviceDisconnected - 0x08004310 0x8 THUMB Debug/../../obj/usbd_usr.o - 0x08004310 USBD_USR_DeviceDisconnected - .text.USBD_USR_DeviceConnected - 0x08004318 0x8 THUMB Debug/../../obj/usbd_usr.o - 0x08004318 USBD_USR_DeviceConnected - .text.USBD_USR_DeviceResumed - 0x08004320 0x4 THUMB Debug/../../obj/usbd_usr.o - 0x08004320 USBD_USR_DeviceResumed - .text.USBD_USR_DeviceSuspended - 0x08004324 0x4 THUMB Debug/../../obj/usbd_usr.o - 0x08004324 USBD_USR_DeviceSuspended - .text.CpuIrqDisable - 0x08004328 0x4 THUMB Debug/../../obj/cpu_comp.o - 0x08004328 CpuIrqDisable - .text.CpuIrqEnable - 0x0800432c 0x4 THUMB Debug/../../obj/cpu_comp.o - 0x0800432c CpuIrqEnable - .text.UnusedISR - 0x08004330 0x10 THUMB Debug/../../obj/vectors.o - 0x08004330 UnusedISR - .text.CanInit 0x08004340 0x174 THUMB Debug/../../obj/can.o - 0x08004340 CanInit - .text.CanTransmitPacket - 0x080044b4 0x9c THUMB Debug/../../obj/can.o - 0x080044b4 CanTransmitPacket - .text.CanReceivePacket - 0x08004550 0x78 THUMB Debug/../../obj/can.o - 0x08004550 CanReceivePacket - .text.CpuInit 0x080045c8 0x4 THUMB Debug/../../obj/cpu.o - 0x080045c8 CpuInit - .text.CpuStartUserProgram - 0x080045cc 0x40 THUMB Debug/../../obj/cpu.o - 0x080045cc CpuStartUserProgram - .text.CpuMemCopy - 0x0800460c 0x54 THUMB Debug/../../obj/cpu.o - 0x0800460c CpuMemCopy - .text.FlashGetSector - 0x08004660 0x130 THUMB Debug/../../obj/flash.o - .text.FlashWriteBlock - 0x08004790 0x9c THUMB Debug/../../obj/flash.o - .text.FlashSwitchBlock - 0x0800482c 0x54 THUMB Debug/../../obj/flash.o - .text.FlashAddToBlock - 0x08004880 0x110 THUMB Debug/../../obj/flash.o - .text.FlashInit - 0x08004990 0x1c THUMB Debug/../../obj/flash.o - 0x08004990 FlashInit - .text.FlashWrite - 0x080049ac 0x4c THUMB Debug/../../obj/flash.o - 0x080049ac FlashWrite - .text.FlashErase - 0x080049f8 0xc4 THUMB Debug/../../obj/flash.o - 0x080049f8 FlashErase - .text.FlashWriteChecksum - 0x08004abc 0x48 THUMB Debug/../../obj/flash.o - 0x08004abc FlashWriteChecksum - .text.FlashVerifyChecksum - 0x08004b04 0x6c THUMB Debug/../../obj/flash.o - 0x08004b04 FlashVerifyChecksum - .text.FlashDone - 0x08004b70 0x34 THUMB Debug/../../obj/flash.o - 0x08004b70 FlashDone - .text.FlashGetUserProgBaseAddress - 0x08004ba4 0xc THUMB Debug/../../obj/flash.o - 0x08004ba4 FlashGetUserProgBaseAddress - .text.NvmInit 0x08004bb0 0x4 THUMB Debug/../../obj/nvm.o - 0x08004bb0 NvmInit - .text.NvmWrite - 0x08004bb4 0x4 THUMB Debug/../../obj/nvm.o - 0x08004bb4 NvmWrite - .text.NvmErase - 0x08004bb8 0x4 THUMB Debug/../../obj/nvm.o - 0x08004bb8 NvmErase - .text.NvmVerifyChecksum - 0x08004bbc 0x4 THUMB Debug/../../obj/nvm.o - 0x08004bbc NvmVerifyChecksum - .text.NvmGetUserProgBaseAddress - 0x08004bc0 0x4 THUMB Debug/../../obj/nvm.o - 0x08004bc0 NvmGetUserProgBaseAddress - .text.NvmDone 0x08004bc4 0x14 THUMB Debug/../../obj/nvm.o - 0x08004bc4 NvmDone - .text.TimerInit - 0x08004bd8 0x28 THUMB Debug/../../obj/timer.o - 0x08004bd8 TimerInit - .text.TimerReset - 0x08004c00 0x10 THUMB Debug/../../obj/timer.o - 0x08004c00 TimerReset - .text.TimerUpdate - 0x08004c10 0x1c THUMB Debug/../../obj/timer.o - 0x08004c10 TimerUpdate - .text.TimerGet - 0x08004c2c 0x20 THUMB Debug/../../obj/timer.o - 0x08004c2c TimerGet - .text.UartReceiveByte - 0x08004c4c 0x30 THUMB Debug/../../obj/uart.o - .text.UartInit - 0x08004c7c 0x40 THUMB Debug/../../obj/uart.o - 0x08004c7c UartInit - .text.UartTransmitPacket - 0x08004cbc 0xb0 THUMB Debug/../../obj/uart.o - 0x08004cbc UartTransmitPacket - .text.UartReceivePacket - 0x08004d6c 0x94 THUMB Debug/../../obj/uart.o - 0x08004d6c UartReceivePacket - .text.UsbFifoMgrWrite - 0x08004e00 0x54 THUMB Debug/../../obj/usb.o - .text.UsbFifoMgrRead - 0x08004e54 0x50 THUMB Debug/../../obj/usb.o - .text.UsbInit 0x08004ea4 0xb8 THUMB Debug/../../obj/usb.o - 0x08004ea4 UsbInit - .text.UsbFree 0x08004f5c 0x18 THUMB Debug/../../obj/usb.o - 0x08004f5c UsbFree - .text.UsbTransmitPacket - 0x08004f74 0xcc THUMB Debug/../../obj/usb.o - 0x08004f74 UsbTransmitPacket - .text.UsbReceivePacket - 0x08005040 0x88 THUMB Debug/../../obj/usb.o - 0x08005040 UsbReceivePacket - .text.UsbTransmitPipeBulkIN - 0x080050c8 0xf4 THUMB Debug/../../obj/usb.o - 0x080050c8 UsbTransmitPipeBulkIN - .text.UsbReceivePipeBulkOUT - 0x080051bc 0xcc THUMB Debug/../../obj/usb.o - 0x080051bc UsbReceivePipeBulkOUT - .text.AssertFailure - 0x08005288 0x8 THUMB Debug/../../obj/assert.o - 0x08005288 AssertFailure - .text.BackDoorCheck - 0x08005290 0x48 THUMB Debug/../../obj/backdoor.o - 0x08005290 BackDoorCheck - .text.BackDoorInit - 0x080052d8 0x24 THUMB Debug/../../obj/backdoor.o - 0x080052d8 BackDoorInit - .text.BootInit - 0x080052fc 0x24 THUMB Debug/../../obj/boot.o - 0x080052fc BootInit - .text.BootTask - 0x08005320 0x1c THUMB Debug/../../obj/boot.o - 0x08005320 BootTask - .text.ComInit 0x0800533c 0x30 THUMB Debug/../../obj/com.o - 0x0800533c ComInit - .text.ComTask 0x0800536c 0x80 THUMB Debug/../../obj/com.o - 0x0800536c ComTask - .text.ComFree 0x080053ec 0x4 THUMB Debug/../../obj/com.o - 0x080053ec ComFree - .text.ComTransmitPacket - 0x080053f0 0x54 THUMB Debug/../../obj/com.o - 0x080053f0 ComTransmitPacket - .text.ComGetActiveInterfaceMaxRxLen - 0x08005444 0x20 THUMB Debug/../../obj/com.o - 0x08005444 ComGetActiveInterfaceMaxRxLen - .text.ComGetActiveInterfaceMaxTxLen - 0x08005464 0x20 THUMB Debug/../../obj/com.o - 0x08005464 ComGetActiveInterfaceMaxTxLen - .text.ComIsConnected - 0x08005484 0x4 THUMB Debug/../../obj/com.o - 0x08005484 ComIsConnected - .text.CopInit 0x08005488 0x4 THUMB Debug/../../obj/cop.o - 0x08005488 CopInit - .text.CopService - 0x0800548c 0x4 THUMB Debug/../../obj/cop.o - 0x0800548c CopService - .text.XcpInit 0x08005490 0x1c THUMB Debug/../../obj/xcp.o - 0x08005490 XcpInit - .text.XcpIsConnected - 0x080054ac 0x14 THUMB Debug/../../obj/xcp.o - 0x080054ac XcpIsConnected - .text.XcpPacketTransmitted - 0x080054c0 0x10 THUMB Debug/../../obj/xcp.o - 0x080054c0 XcpPacketTransmitted - .text.XcpPacketReceived - 0x080054d0 0x320 THUMB Debug/../../obj/xcp.o - 0x080054d0 XcpPacketReceived - .text.FileLibHexStringToByte - 0x080057f0 0x5c THUMB Debug/../../obj/file.o - .text.FileLibByteToHexString - 0x0800584c 0x44 THUMB Debug/../../obj/file.o - .text.FileInit - 0x08005890 0x30 THUMB Debug/../../obj/file.o - 0x08005890 FileInit - .text.FileIsIdle - 0x080058c0 0x14 THUMB Debug/../../obj/file.o - 0x080058c0 FileIsIdle - .text.FileHandleFirmwareUpdateRequest - 0x080058d4 0x24 THUMB Debug/../../obj/file.o - 0x080058d4 FileHandleFirmwareUpdateRequest - .text.FileSrecGetLineType - 0x080058f8 0x38 THUMB Debug/../../obj/file.o - 0x080058f8 FileSrecGetLineType - .text.FileSrecVerifyChecksum - 0x08005930 0x74 THUMB Debug/../../obj/file.o - 0x08005930 FileSrecVerifyChecksum - .text.FileSrecParseLine - 0x080059a4 0x154 THUMB Debug/../../obj/file.o - 0x080059a4 FileSrecParseLine - .text.FileTask - 0x08005af8 0x4e8 THUMB Debug/../../obj/file.o - 0x08005af8 FileTask - .text.get_ldnumber - 0x08005fe0 0x48 THUMB Debug/../../obj/ff.o - .text.validate - 0x08006028 0x38 THUMB Debug/../../obj/ff.o - .text.mem_cpy.part.0 - 0x08006060 0x34 THUMB Debug/../../obj/ff.o - .text.get_fileinfo.part.3 - 0x08006094 0x328 THUMB Debug/../../obj/ff.o - .text.sync_window - 0x080063bc 0x6c THUMB Debug/../../obj/ff.o - .text.sync_fs 0x08006428 0xd8 THUMB Debug/../../obj/ff.o - .text.move_window - 0x08006500 0x40 THUMB Debug/../../obj/ff.o - .text.get_fat 0x08006540 0xd4 THUMB Debug/../../obj/ff.o - .text.dir_sdi 0x08006614 0x94 THUMB Debug/../../obj/ff.o - .text.check_fs - 0x080066a8 0x8c THUMB Debug/../../obj/ff.o - .text.find_volume - 0x08006734 0x3fc THUMB Debug/../../obj/ff.o - .text.put_fat 0x08006b30 0x114 THUMB Debug/../../obj/ff.o - .text.create_chain - 0x08006c44 0xbc THUMB Debug/../../obj/ff.o - .text.dir_next - 0x08006d00 0x12c THUMB Debug/../../obj/ff.o - .text.dir_find - 0x08006e2c 0x5c4 THUMB Debug/../../obj/ff.o - .text.follow_path - 0x080073f0 0x364 THUMB Debug/../../obj/ff.o - .text.dir_remove - 0x08007754 0x58 THUMB Debug/../../obj/ff.o - .text.remove_chain - 0x080077ac 0x6c THUMB Debug/../../obj/ff.o - .text.dir_read.constprop.8 - 0x08007818 0x3cc THUMB Debug/../../obj/ff.o - .text.dir_register - 0x08007be4 0x6ec THUMB Debug/../../obj/ff.o - .text.f_mount 0x080082d0 0x58 THUMB Debug/../../obj/ff.o - 0x080082d0 f_mount - .text.f_open 0x08008328 0x1b0 THUMB Debug/../../obj/ff.o - 0x08008328 f_open - .text.f_read 0x080084d8 0x168 THUMB Debug/../../obj/ff.o - 0x080084d8 f_read - .text.f_write 0x08008640 0x1b4 THUMB Debug/../../obj/ff.o - 0x08008640 f_write - .text.putc_bfd - 0x080087f4 0x4c THUMB Debug/../../obj/ff.o - .text.f_sync 0x08008840 0xb0 THUMB Debug/../../obj/ff.o - 0x08008840 f_sync - .text.f_close 0x080088f0 0x20 THUMB Debug/../../obj/ff.o - 0x080088f0 f_close - .text.f_lseek 0x08008910 0x16c THUMB Debug/../../obj/ff.o - 0x08008910 f_lseek - .text.f_stat 0x08008a7c 0x60 THUMB Debug/../../obj/ff.o - 0x08008a7c f_stat - .text.f_unlink - 0x08008adc 0xc8 THUMB Debug/../../obj/ff.o - 0x08008adc f_unlink - .text.f_gets 0x08008ba4 0x4c THUMB Debug/../../obj/ff.o - 0x08008ba4 f_gets - .text.f_puts 0x08008bf0 0x48 THUMB Debug/../../obj/ff.o - 0x08008bf0 f_puts - .text.ff_convert - 0x08008c38 0x50 THUMB Debug/../../obj/unicode.o - 0x08008c38 ff_convert - .text.ff_wtoupper - 0x08008c88 0xb0 THUMB Debug/../../obj/unicode.o - 0x08008c88 ff_wtoupper - .text.chksum 0x08008d38 0xa8 THUMB Debug/../../obj/uip.o - .text.upper_layer_chksum - 0x08008de0 0x40 THUMB Debug/../../obj/uip.o - .text.uip_add32 - 0x08008e20 0x58 THUMB Debug/../../obj/uip.o - 0x08008e20 uip_add32 - .text.unlikely.uip_add_rcv_nxt - 0x08008e78 0x30 THUMB Debug/../../obj/uip.o - .text.uip_ipchksum - 0x08008ea8 0x24 THUMB Debug/../../obj/uip.o - 0x08008ea8 uip_ipchksum - .text.uip_tcpchksum - 0x08008ecc 0x8 THUMB Debug/../../obj/uip.o - 0x08008ecc uip_tcpchksum - .text.uip_init - 0x08008ed4 0x38 THUMB Debug/../../obj/uip.o - 0x08008ed4 uip_init - .text.uip_listen - 0x08008f0c 0x24 THUMB Debug/../../obj/uip.o - 0x08008f0c uip_listen - .text.uip_process - 0x08008f30 0xbc8 THUMB Debug/../../obj/uip.o - 0x08008f30 uip_process - .text.htons 0x08009af8 0xc THUMB Debug/../../obj/uip.o - 0x08009af8 htons - .text.uip_send - 0x08009b04 0x24 THUMB Debug/../../obj/uip.o - 0x08009b04 uip_send - .text.uip_arp_update.constprop.0 - 0x08009b28 0x294 THUMB Debug/../../obj/uip_arp.o - .text.uip_arp_timer - 0x08009dbc 0x64 THUMB Debug/../../obj/uip_arp.o - 0x08009dbc uip_arp_timer - .text.uip_arp_arpin - 0x08009e20 0xbc THUMB Debug/../../obj/uip_arp.o - 0x08009e20 uip_arp_arpin - .text.uip_arp_out - 0x08009edc 0x1fc THUMB Debug/../../obj/uip_arp.o - 0x08009edc uip_arp_out - .text.NetInit 0x0800a0d8 0x78 THUMB Debug/../../obj/net.o - 0x0800a0d8 NetInit - .text.NetTransmitPacket - 0x0800a150 0x60 THUMB Debug/../../obj/net.o - 0x0800a150 NetTransmitPacket - .text.NetReceivePacket - 0x0800a1b0 0xc0 THUMB Debug/../../obj/net.o - 0x0800a1b0 NetReceivePacket - .text.NetApp 0x0800a270 0x6c THUMB Debug/../../obj/net.o - 0x0800a270 NetApp - .text.libc.isdigit - 0x0800a2dc 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - 0x0800a2dc isdigit - .text.libc.toupper - 0x0800a2ec 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - 0x0800a2ec toupper - .text.libc.memcpy - 0x0800a2fc 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - 0x0800a2fc __aeabi_memcpy - 0x0800a2fc __aeabi_memcpy4 - 0x0800a2fc __aeabi_memcpy8 - 0x0800a2fc memcpy - .text.libc.memset - 0x0800a344 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - 0x0800a344 memset - .text.libdebugio.__do_debug_operation_mempoll - 0x0800a3b4 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - 0x0800a3b4 __do_debug_operation_mempoll - .text.libc.__debug_io_lock - 0x0800a3f0 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - 0x0800a3f0 __debug_io_lock - .text.libc.__debug_io_unlock - 0x0800a3f4 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - 0x0800a3f4 __debug_io_unlock - 0x0800a3f8 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x0800a3f8 __text_load_end__ = __text_end__ - -.vfp11_veneer 0x00000000 0x0 - .vfp11_veneer 0x00000000 0x0 linker stubs - -.v4_bx 0x00000000 0x0 - .v4_bx 0x00000000 0x0 linker stubs - -.iplt 0x00000000 0x0 - .iplt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) - 0x0800a3f8 __dtors_load_start__ = ALIGN (__text_end__, 0x4) - -.dtors 0x0800a3f8 0x0 - 0x0800a3f8 __dtors_start__ = . - *(SORT(.dtors.*)) - *(.dtors) - *(.fini_array .fini_array.*) - 0x0800a3f8 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x0800a3f8 __dtors_load_end__ = __dtors_end__ - 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment) - 0x0800a3f8 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) - -.ctors 0x0800a3f8 0x0 - 0x0800a3f8 __ctors_start__ = . - *(SORT(.ctors.*)) - *(.ctors) - *(.init_array .init_array.*) - 0x0800a3f8 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x0800a3f8 __ctors_load_end__ = __ctors_end__ - 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment) - 0x0800a3f8 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) - -.rodata 0x0800a3f8 0xa84 - 0x0800a3f8 __rodata_start__ = . - *(.rodata .rodata.* .gnu.linkonce.r.*) - .rodata.str1.4 - 0x0800a3f8 0x76 THUMB Debug/../../obj/netdev.o - 0x78 (size before relaxing) - *fill* 0x0800a46e 0x2 00 - .rodata.CSWTCH.22 - 0x0800a470 0x4 THUMB Debug/../../obj/usb_core.o - .rodata.firmwareFilename - 0x0800a474 0x20 THUMB Debug/../../obj/hooks.o - .rodata.str1.4 - 0x0800a494 0xd THUMB Debug/../../obj/hooks.o - 0x10 (size before relaxing) - *fill* 0x0800a4a1 0x3 00 - .rodata.str1.4 - 0x0800a4a4 0x53 THUMB Debug/../../obj/usbd_desc.o - 0x54 (size before relaxing) - *fill* 0x0800a4f7 0x1 00 - .rodata.str1.4 - 0x0800a4f8 0x99 THUMB Debug/../../obj/vectors.o - 0x9c (size before relaxing) - *fill* 0x0800a591 0x3 00 - .rodata.str1.4 - 0x0800a594 0x8a THUMB Debug/../../obj/can.o - 0x8c (size before relaxing) - *fill* 0x0800a61e 0x2 00 - .rodata.canTiming - 0x0800a620 0x24 THUMB Debug/../../obj/can.o - .rodata.flashSectorNumToMask - 0x0800a644 0x30 THUMB Debug/../../obj/flash.o - .rodata.flashLayout - 0x0800a674 0x6c THUMB Debug/../../obj/flash.o - .rodata.str1.4 - 0x0800a6e0 0x8b THUMB Debug/../../obj/uart.o - 0x8c (size before relaxing) - *fill* 0x0800a76b 0x1 00 - .rodata.str1.4 - 0x0800a76c 0x8a THUMB Debug/../../obj/usb.o - 0x8c (size before relaxing) - *fill* 0x0800a7f6 0x2 00 - .rodata.CSWTCH.9 - 0x0800a7f8 0x4 THUMB Debug/../../obj/com.o - .rodata.CSWTCH.12 - 0x0800a7fc 0x4 THUMB Debug/../../obj/com.o - .rodata.xcpStationId - 0x0800a800 0x8 THUMB Debug/../../obj/xcp.o - .rodata.str1.4 - 0x0800a808 0x225 THUMB Debug/../../obj/file.o - 0x22c (size before relaxing) - *fill* 0x0800aa2d 0x3 00 - .rodata.str1.4 - 0x0800aa30 0x14 THUMB Debug/../../obj/ff.o - .rodata.ExCvt 0x0800aa44 0x80 THUMB Debug/../../obj/ff.o - .rodata.cvt2.3822 - 0x0800aac4 0xbc THUMB Debug/../../obj/unicode.o - .rodata.Tbl 0x0800ab80 0x100 THUMB Debug/../../obj/unicode.o - .rodata.cvt1.3821 - 0x0800ac80 0x1f4 THUMB Debug/../../obj/unicode.o - .rodata.broadcast_ethaddr - 0x0800ae74 0x8 THUMB Debug/../../obj/uip_arp.o - 0x0800ae7c __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x0800ae7c __rodata_load_end__ = __rodata_end__ - -.rel.dyn 0x08000000 0x0 - .rel.iplt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o - 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment) - 0x0800ae7c __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) - -.ARM.exidx 0x0800ae7c 0x0 - 0x0800ae7c __ARM.exidx_start__ = . - 0x0800ae7c __exidx_start = __ARM.exidx_start__ - *(.ARM.exidx .ARM.exidx.*) - 0x0800ae7c __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) - 0x0800ae7c __exidx_end = __ARM.exidx_end__ - 0x0800ae7c __ARM.exidx_load_end__ = __ARM.exidx_end__ - 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment) - 0x0800ae7c __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) - -.fast 0x20000000 0x0 load address 0x0800ae7c - 0x20000000 __fast_start__ = . - *(.fast .fast.*) - 0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x0800ae7c __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) - 0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment) - -.fast_run 0x20000000 0x0 - 0x20000000 __fast_run_start__ = . - 0x20000000 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .) - 0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) - 0x20000000 __fast_run_load_end__ = __fast_run_end__ - 0x00000001 . = ASSERT (((__fast_run_end__ >= __RAM_segment_start__) && (__fast_run_end__ <= __RAM_segment_end__)), error: .fast_run is too large to fit in RAM memory segment) - 0x0800ae7c __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) - -.data 0x20000000 0xe5 load address 0x0800ae7c - 0x20000000 __data_start__ = . - *(.data .data.* .gnu.linkonce.d.*) - .data.DMAEndOfTransfer - 0x20000000 0x4 THUMB Debug/../../obj/mmc.o - .data.Stat 0x20000004 0x1 THUMB Debug/../../obj/mmc.o - *fill* 0x20000005 0x3 00 - .data.APBAHBPrescTable - 0x20000008 0x10 THUMB Debug/../../obj/stm32f4xx_rcc.o - .data.USBD_DCD_INT_fops - 0x20000018 0x4 THUMB Debug/../../obj/usbd_core.o - 0x20000018 USBD_DCD_INT_fops - .data.USBD_DCD_INT_cb - 0x2000001c 0x2c THUMB Debug/../../obj/usbd_core.o - 0x2000001c USBD_DCD_INT_cb - .data.usbd_bulk_CfgDesc - 0x20000048 0x20 THUMB Debug/../../obj/usbd_bulk.o - 0x20000048 usbd_bulk_CfgDesc - .data.USBD_bulk_cb - 0x20000068 0x2c THUMB Debug/../../obj/usbd_bulk.o - 0x20000068 USBD_bulk_cb - .data.USR_desc - 0x20000094 0x1c THUMB Debug/../../obj/usbd_desc.o - 0x20000094 USR_desc - .data.USBD_LangIDDesc - 0x200000b0 0x4 THUMB Debug/../../obj/usbd_desc.o - 0x200000b0 USBD_LangIDDesc - .data.USBD_DeviceDesc - 0x200000b4 0x14 THUMB Debug/../../obj/usbd_desc.o - 0x200000b4 USBD_DeviceDesc - .data.USR_cb 0x200000c8 0x1c THUMB Debug/../../obj/usbd_usr.o - 0x200000c8 USR_cb - .data.comActiveInterface - 0x200000e4 0x1 THUMB Debug/../../obj/com.o - 0x200000e5 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x0800af61 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) - -.igot.plt 0x00000000 0x0 - .igot.plt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o - 0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment) - -.data_run 0x20000000 0xe5 load address 0x0800ae7c - 0x20000000 __data_run_start__ = . - 0x200000e5 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) - *fill* 0x20000000 0xe5 00 - 0x200000e5 __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) - 0x200000e5 __data_run_load_end__ = __data_run_end__ - 0x00000001 . = ASSERT (((__data_run_end__ >= __RAM_segment_start__) && (__data_run_end__ <= __RAM_segment_end__)), error: .data_run is too large to fit in RAM memory segment) - 0x200000e8 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) - -.bss 0x200000e8 0x2e18 - 0x200000e8 __bss_start__ = . - *(.bss .bss.* .gnu.linkonce.b.*) - .bss.TransferError - 0x200000e8 0x1 THUMB Debug/../../obj/mmc.o - *fill* 0x200000e9 0x3 00 - .bss.SDIO_DataInitStructure - 0x200000ec 0x18 THUMB Debug/../../obj/mmc.o - .bss.CSD_Tab 0x20000104 0x10 THUMB Debug/../../obj/mmc.o - .bss.CardType 0x20000114 0x4 THUMB Debug/../../obj/mmc.o - .bss.CID_Tab 0x20000118 0x10 THUMB Debug/../../obj/mmc.o - .bss.TransferEnd - 0x20000128 0x4 THUMB Debug/../../obj/mmc.o - .bss.SDIO_InitStructure - 0x2000012c 0x18 THUMB Debug/../../obj/mmc.o - .bss.RCA 0x20000144 0x4 THUMB Debug/../../obj/mmc.o - .bss.SDCardInfo - 0x20000148 0x58 THUMB Debug/../../obj/mmc.o - .bss.SDIO_CmdInitStructure - 0x200001a0 0x14 THUMB Debug/../../obj/mmc.o - .bss.StopCondition - 0x200001b4 0x4 THUMB Debug/../../obj/mmc.o - *fill* 0x200001b8 0x48 00 - .bss.EnetDmaRx - 0x20000200 0x80 THUMB Debug/../../obj/netdev.o - 0x20000200 EnetDmaRx - .bss.RxBuff 0x20000280 0x640 THUMB Debug/../../obj/netdev.o - 0x20000280 RxBuff - *fill* 0x200008c0 0x40 00 - .bss.EnetDmaTx - 0x20000900 0x80 THUMB Debug/../../obj/netdev.o - 0x20000900 EnetDmaTx - .bss.TxBuff 0x20000980 0x640 THUMB Debug/../../obj/netdev.o - 0x20000980 TxBuff - .bss.SET_TEST_MODE - 0x20000fc0 0x4 THUMB Debug/../../obj/usbd_core.o - 0x20000fc0 SET_TEST_MODE - .bss.USBD_StrDesc - 0x20000fc4 0x100 THUMB Debug/../../obj/usbd_req.o - 0x20000fc4 USBD_StrDesc - .bss.USBD_cfg_status - 0x200010c4 0x4 THUMB Debug/../../obj/usbd_req.o - 0x200010c4 USBD_cfg_status - .bss.USBD_ep_status - 0x200010c8 0x4 THUMB Debug/../../obj/usbd_req.o - 0x200010c8 USBD_ep_status - .bss.cfgidx.8154 - 0x200010cc 0x1 THUMB Debug/../../obj/usbd_req.o - *fill* 0x200010cd 0x3 00 - .bss.USBD_default_cfg - 0x200010d0 0x4 THUMB Debug/../../obj/usbd_req.o - 0x200010d0 USBD_default_cfg - .bss.logfile 0x200010d4 0x22c THUMB Debug/../../obj/hooks.o - .bss.USB_Rx_Buffer - 0x20001300 0x40 THUMB Debug/../../obj/usbd_bulk.o - 0x20001300 USB_Rx_Buffer - .bss.usbd_bulk_AltSet - 0x20001340 0x4 THUMB Debug/../../obj/usbd_bulk.o - .bss.bootBlockInfo - 0x20001344 0x204 THUMB Debug/../../obj/flash.o - .bss.blockInfo - 0x20001548 0x204 THUMB Debug/../../obj/flash.o - .bss.millisecond_counter - 0x2000174c 0x4 THUMB Debug/../../obj/timer.o - .bss.xcpCtoRxLength.7330 - 0x20001750 0x1 THUMB Debug/../../obj/uart.o - *fill* 0x20001751 0x3 00 - .bss.xcpCtoReqPacket.7329 - 0x20001754 0x44 THUMB Debug/../../obj/uart.o - .bss.xcpCtoRxInProgress.7331 - 0x20001798 0x1 THUMB Debug/../../obj/uart.o - *fill* 0x20001799 0x3 00 - .bss.xcpCtoRxStartTime.7332 - 0x2000179c 0x4 THUMB Debug/../../obj/uart.o - .bss.fifoCtrlFree - 0x200017a0 0x4 THUMB Debug/../../obj/usb.o - .bss.fifoCtrl 0x200017a4 0x30 THUMB Debug/../../obj/usb.o - .bss.fifoPipeBulkOUT - 0x200017d4 0x44 THUMB Debug/../../obj/usb.o - .bss.USB_Tx_Buffer.8520 - 0x20001818 0x40 THUMB Debug/../../obj/usb.o - .bss.xcpCtoReqPacket.8506 - 0x20001858 0x40 THUMB Debug/../../obj/usb.o - .bss.fifoPipeBulkIN - 0x20001898 0x44 THUMB Debug/../../obj/usb.o - .bss.xcpCtoRxLength.8507 - 0x200018dc 0x1 THUMB Debug/../../obj/usb.o - *fill* 0x200018dd 0x3 00 - .bss.USB_OTG_dev - 0x200018e0 0x5f4 THUMB Debug/../../obj/usb.o - .bss.xcpCtoRxInProgress.8508 - 0x20001ed4 0x1 THUMB Debug/../../obj/usb.o - .bss.backdoorOpen - 0x20001ed5 0x1 THUMB Debug/../../obj/backdoor.o - *fill* 0x20001ed6 0x2 00 - .bss.backdoorOpenTime - 0x20001ed8 0x4 THUMB Debug/../../obj/backdoor.o - .bss.xcpCtoReqPacket.3977 - 0x20001edc 0x40 THUMB Debug/../../obj/com.o - .bss.xcpInfo 0x20001f1c 0x4c THUMB Debug/../../obj/xcp.o - .bss.loggingStr - 0x20001f68 0x40 THUMB Debug/../../obj/file.o - .bss.firmwareUpdateState - 0x20001fa8 0x1 THUMB Debug/../../obj/file.o - *fill* 0x20001fa9 0x3 00 - .bss.eraseInfo - 0x20001fac 0x8 THUMB Debug/../../obj/file.o - .bss.fatFsObjects - 0x20001fb4 0x458 THUMB Debug/../../obj/file.o - .bss.lineParseObject - 0x2000240c 0x184 THUMB Debug/../../obj/file.o - .bss.LfnBuf 0x20002590 0x200 THUMB Debug/../../obj/ff.o - .bss.Fsid 0x20002790 0x2 THUMB Debug/../../obj/ff.o - *fill* 0x20002792 0x2 00 - .bss.FatFs 0x20002794 0x4 THUMB Debug/../../obj/ff.o - .bss.uip_conn 0x20002798 0x4 THUMB Debug/../../obj/uip.o - 0x20002798 uip_conn - .bss.uip_conns - 0x2000279c 0x68 THUMB Debug/../../obj/uip.o - 0x2000279c uip_conns - .bss.uip_netmask - 0x20002804 0x4 THUMB Debug/../../obj/uip.o - 0x20002804 uip_netmask - .bss.uip_len 0x20002808 0x2 THUMB Debug/../../obj/uip.o - 0x20002808 uip_len - .bss.ipid 0x2000280a 0x2 THUMB Debug/../../obj/uip.o - .bss.uip_draddr - 0x2000280c 0x4 THUMB Debug/../../obj/uip.o - 0x2000280c uip_draddr - .bss.uip_slen 0x20002810 0x2 THUMB Debug/../../obj/uip.o - 0x20002810 uip_slen - *fill* 0x20002812 0x2 00 - .bss.uip_buf 0x20002814 0x644 THUMB Debug/../../obj/uip.o - 0x20002814 uip_buf - .bss.uip_appdata - 0x20002e58 0x4 THUMB Debug/../../obj/uip.o - 0x20002e58 uip_appdata - .bss.iss 0x20002e5c 0x4 THUMB Debug/../../obj/uip.o - .bss.uip_hostaddr - 0x20002e60 0x4 THUMB Debug/../../obj/uip.o - 0x20002e60 uip_hostaddr - .bss.uip_flags - 0x20002e64 0x1 THUMB Debug/../../obj/uip.o - 0x20002e64 uip_flags - *fill* 0x20002e65 0x3 00 - .bss.uip_acc32 - 0x20002e68 0x4 THUMB Debug/../../obj/uip.o - 0x20002e68 uip_acc32 - .bss.lastport 0x20002e6c 0x2 THUMB Debug/../../obj/uip.o - .bss.tmp16 0x20002e6e 0x2 THUMB Debug/../../obj/uip.o - .bss.uip_ethaddr - 0x20002e70 0x8 THUMB Debug/../../obj/uip.o - 0x20002e70 uip_ethaddr - .bss.c 0x20002e78 0x1 THUMB Debug/../../obj/uip.o - *fill* 0x20002e79 0x3 00 - .bss.uip_listenports - 0x20002e7c 0x4 THUMB Debug/../../obj/uip.o - 0x20002e7c uip_listenports - .bss.uip_sappdata - 0x20002e80 0x4 THUMB Debug/../../obj/uip.o - 0x20002e80 uip_sappdata - .bss.opt 0x20002e84 0x1 THUMB Debug/../../obj/uip.o - .bss.i 0x20002e85 0x1 THUMB Debug/../../obj/uip_arp.o - .bss.tmpage 0x20002e86 0x1 THUMB Debug/../../obj/uip_arp.o - *fill* 0x20002e87 0x1 00 - .bss.arp_table - 0x20002e88 0x60 THUMB Debug/../../obj/uip_arp.o - .bss.c 0x20002ee8 0x1 THUMB Debug/../../obj/uip_arp.o - .bss.arptime 0x20002ee9 0x1 THUMB Debug/../../obj/uip_arp.o - *fill* 0x20002eea 0x2 00 - .bss.ipaddr 0x20002eec 0x4 THUMB Debug/../../obj/uip_arp.o - .bss.ARPTimerTimeOut - 0x20002ef0 0x4 THUMB Debug/../../obj/net.o - .bss.periodicTimerTimeOut - 0x20002ef4 0x4 THUMB Debug/../../obj/net.o - .bss.libdebugio.dbgCommWord - 0x20002ef8 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - 0x20002ef8 dbgCommWord - .bss.libdebugio.dbgCntrlWord_mempoll - 0x20002efc 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - 0x20002efc dbgCntrlWord_mempoll - *(COMMON) - 0x20002f00 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x20002f00 __bss_load_end__ = __bss_end__ - 0x00000001 . = ASSERT (((__bss_end__ >= __RAM_segment_start__) && (__bss_end__ <= __RAM_segment_end__)), error: .bss is too large to fit in RAM memory segment) - 0x20002f00 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) - -.non_init 0x20002f00 0x0 - 0x20002f00 __non_init_start__ = . - *(.non_init .non_init.*) - 0x20002f00 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x20002f00 __non_init_load_end__ = __non_init_end__ - 0x00000001 . = ASSERT (((__non_init_end__ >= __RAM_segment_start__) && (__non_init_end__ <= __RAM_segment_end__)), error: .non_init is too large to fit in RAM memory segment) - 0x20002f00 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) - -.heap 0x20002f00 0x800 - 0x20002f00 __heap_start__ = . - *(.heap .heap.*) - 0x20003700 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x20002f00 0x800 00 - 0x20003700 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x20003700 __heap_load_end__ = __heap_end__ - 0x00000001 . = ASSERT (((__heap_end__ >= __RAM_segment_start__) && (__heap_end__ <= __RAM_segment_end__)), error: .heap is too large to fit in RAM memory segment) - 0x20003700 __stack_load_start__ = ALIGN (__heap_end__, 0x4) - -.stack 0x20003700 0x800 - 0x20003700 __stack_start__ = . - *(.stack .stack.*) - 0x20003f00 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x20003700 0x800 00 - 0x20003f00 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x20003f00 __stack_load_end__ = __stack_end__ - 0x00000001 . = ASSERT (((__stack_end__ >= __RAM_segment_start__) && (__stack_end__ <= __RAM_segment_end__)), error: .stack is too large to fit in RAM memory segment) - 0x20003f00 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) - -.stack_process 0x20003f00 0x0 - 0x20003f00 __stack_process_start__ = . - *(.stack_process .stack_process.*) - 0x20003f00 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) - 0x20003f00 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) - 0x20003f00 __stack_process_load_end__ = __stack_process_end__ - 0x00000001 . = ASSERT (((__stack_process_end__ >= __RAM_segment_start__) && (__stack_process_end__ <= __RAM_segment_end__)), error: .stack_process is too large to fit in RAM memory segment) - 0x20003f00 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) - -.tbss 0x20003f00 0x0 - 0x20003f00 __tbss_start__ = . - *(.tbss .tbss.*) - 0x20003f00 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) - 0x20003f00 __tbss_load_end__ = __tbss_end__ - 0x00000001 . = ASSERT (((__tbss_end__ >= __RAM_segment_start__) && (__tbss_end__ <= __RAM_segment_end__)), error: .tbss is too large to fit in RAM memory segment) - 0x0800af64 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) - -.tdata 0x20003f00 0x0 load address 0x0800af64 - 0x20003f00 __tdata_start__ = . - *(.tdata .tdata.*) - 0x20003f00 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) - 0x0800af64 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) - 0x0800af64 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) - 0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment) - -.tdata_run 0x20003f00 0x0 - 0x20003f00 __tdata_run_start__ = . - 0x20003f00 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) - 0x20003f00 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) - 0x20003f00 __tdata_run_load_end__ = __tdata_run_end__ - 0x20003f00 __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) - 0x00000001 . = ASSERT (((__tdata_run_end__ >= __RAM_segment_start__) && (__tdata_run_end__ <= __RAM_segment_end__)), error: .tdata_run is too large to fit in RAM memory segment) -START GROUP -LOAD THUMB Debug/../../obj/mmc.o -LOAD THUMB Debug/../../obj/system_stm32f4xx.o -LOAD THUMB Debug/../../obj/misc.o -LOAD THUMB Debug/../../obj/stm32f4xx_adc.o -LOAD THUMB Debug/../../obj/stm32f4xx_can.o -LOAD THUMB Debug/../../obj/stm32f4xx_crc.o -LOAD THUMB Debug/../../obj/stm32f4xx_cryp.o -LOAD THUMB Debug/../../obj/stm32f4xx_cryp_aes.o -LOAD THUMB Debug/../../obj/stm32f4xx_cryp_des.o -LOAD THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o -LOAD THUMB Debug/../../obj/stm32f4xx_dac.o -LOAD THUMB Debug/../../obj/stm32f4xx_dbgmcu.o -LOAD THUMB Debug/../../obj/stm32f4xx_dcmi.o -LOAD THUMB Debug/../../obj/stm32f4xx_dma.o -LOAD THUMB Debug/../../obj/stm32f4xx_exti.o -LOAD THUMB Debug/../../obj/stm32f4xx_flash.o -LOAD THUMB Debug/../../obj/stm32f4xx_fsmc.o -LOAD THUMB Debug/../../obj/stm32f4xx_gpio.o -LOAD THUMB Debug/../../obj/stm32f4xx_hash.o -LOAD THUMB Debug/../../obj/stm32f4xx_hash_md5.o -LOAD THUMB Debug/../../obj/stm32f4xx_hash_sha1.o -LOAD THUMB Debug/../../obj/stm32f4xx_i2c.o -LOAD THUMB Debug/../../obj/stm32f4xx_iwdg.o -LOAD THUMB Debug/../../obj/stm32f4xx_pwr.o -LOAD THUMB Debug/../../obj/stm32f4xx_rcc.o -LOAD THUMB Debug/../../obj/stm32f4xx_rng.o -LOAD THUMB Debug/../../obj/stm32f4xx_rtc.o -LOAD THUMB Debug/../../obj/stm32f4xx_sdio.o -LOAD THUMB Debug/../../obj/stm32f4xx_spi.o -LOAD THUMB Debug/../../obj/stm32f4xx_syscfg.o -LOAD THUMB Debug/../../obj/stm32f4xx_tim.o -LOAD THUMB Debug/../../obj/stm32f4xx_usart.o -LOAD THUMB Debug/../../obj/stm32f4xx_wwdg.o -LOAD THUMB Debug/../../obj/stm32_eth.o -LOAD THUMB Debug/../../obj/clock-arch.o -LOAD THUMB Debug/../../obj/netdev.o -LOAD THUMB Debug/../../obj/usbd_core.o -LOAD THUMB Debug/../../obj/usbd_ioreq.o -LOAD THUMB Debug/../../obj/usbd_req.o -LOAD THUMB Debug/../../obj/usb_core.o -LOAD THUMB Debug/../../obj/usb_dcd.o -LOAD THUMB Debug/../../obj/usb_dcd_int.o -LOAD THUMB Debug/../../obj/hooks.o -LOAD THUMB Debug/../../obj/main.o -LOAD THUMB Debug/../../obj/usb_bsp.o -LOAD THUMB Debug/../../obj/usbd_bulk.o -LOAD THUMB Debug/../../obj/usbd_desc.o -LOAD THUMB Debug/../../obj/usbd_usr.o -LOAD THUMB Debug/../../obj/cpu_comp.o -LOAD THUMB Debug/../../obj/cstart.o -LOAD THUMB Debug/../../obj/vectors.o -LOAD THUMB Debug/../../obj/can.o -LOAD THUMB Debug/../../obj/cpu.o -LOAD THUMB Debug/../../obj/flash.o -LOAD THUMB Debug/../../obj/nvm.o -LOAD THUMB Debug/../../obj/timer.o -LOAD THUMB Debug/../../obj/uart.o -LOAD THUMB Debug/../../obj/usb.o -LOAD THUMB Debug/../../obj/assert.o -LOAD THUMB Debug/../../obj/backdoor.o -LOAD THUMB Debug/../../obj/boot.o -LOAD THUMB Debug/../../obj/com.o -LOAD THUMB Debug/../../obj/cop.o -LOAD THUMB Debug/../../obj/xcp.o -LOAD THUMB Debug/../../obj/file.o -LOAD THUMB Debug/../../obj/ff.o -LOAD THUMB Debug/../../obj/unicode.o -LOAD THUMB Debug/../../obj/uip.o -LOAD THUMB Debug/../../obj/uip_arp.o -LOAD THUMB Debug/../../obj/uip_timer.o -LOAD THUMB Debug/../../obj/uip-fw.o -LOAD THUMB Debug/../../obj/uiplib.o -LOAD THUMB Debug/../../obj/net.o -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcm_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcpp_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_targetio_impl_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a -END GROUP -OUTPUT(C:/Users/voorburg/Desktop/BltTest/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/../bin/openblt_olimex_stm32e407.elf elf32-littlearm) - -.debug_frame 0x00000000 0x5334 - .debug_frame 0x00000000 0x4e8 THUMB Debug/../../obj/mmc.o - .debug_frame 0x000004e8 0x38 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_frame 0x00000520 0x2b0 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_frame 0x000007d0 0x130 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_frame 0x00000900 0x30c THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_frame 0x00000c0c 0x22c THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_frame 0x00000e38 0x88 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_frame 0x00000ec0 0x228 THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_frame 0x000010e8 0x770 THUMB Debug/../../obj/stm32_eth.o - .debug_frame 0x00001858 0x94 THUMB Debug/../../obj/netdev.o - .debug_frame 0x000018ec 0x1bc THUMB Debug/../../obj/usbd_core.o - .debug_frame 0x00001aa8 0xd0 THUMB Debug/../../obj/usbd_ioreq.o - .debug_frame 0x00001b78 0xc0 THUMB Debug/../../obj/usbd_req.o - .debug_frame 0x00001c38 0x364 THUMB Debug/../../obj/usb_core.o - .debug_frame 0x00001f9c 0x150 THUMB Debug/../../obj/usb_dcd.o - .debug_frame 0x000020ec 0x40 THUMB Debug/../../obj/usb_dcd_int.o - .debug_frame 0x0000212c 0xf8 THUMB Debug/../../obj/hooks.o - .debug_frame 0x00002224 0x30 THUMB Debug/../../obj/main.o - .debug_frame 0x00002254 0x68 THUMB Debug/../../obj/usb_bsp.o - .debug_frame 0x000022bc 0xd8 THUMB Debug/../../obj/usbd_bulk.o - .debug_frame 0x00002394 0xbc THUMB Debug/../../obj/usbd_desc.o - .debug_frame 0x00002450 0x80 THUMB Debug/../../obj/usbd_usr.o - .debug_frame 0x000024d0 0x30 THUMB Debug/../../obj/cpu_comp.o - .debug_frame 0x00002500 0x20 THUMB Debug/../../obj/vectors.o - .debug_frame 0x00002520 0x70 THUMB Debug/../../obj/can.o - .debug_frame 0x00002590 0x60 THUMB Debug/../../obj/cpu.o - .debug_frame 0x000025f0 0x178 THUMB Debug/../../obj/flash.o - .debug_frame 0x00002768 0x8c THUMB Debug/../../obj/nvm.o - .debug_frame 0x000027f4 0x50 THUMB Debug/../../obj/timer.o - .debug_frame 0x00002844 0x9c THUMB Debug/../../obj/uart.o - .debug_frame 0x000028e0 0x134 THUMB Debug/../../obj/usb.o - .debug_frame 0x00002a14 0x2c THUMB Debug/../../obj/assert.o - .debug_frame 0x00002a40 0x48 THUMB Debug/../../obj/backdoor.o - .debug_frame 0x00002a88 0x48 THUMB Debug/../../obj/boot.o - .debug_frame 0x00002ad0 0xa8 THUMB Debug/../../obj/com.o - .debug_frame 0x00002b78 0x30 THUMB Debug/../../obj/cop.o - .debug_frame 0x00002ba8 0x64 THUMB Debug/../../obj/xcp.o - .debug_frame 0x00002c0c 0x124 THUMB Debug/../../obj/file.o - .debug_frame 0x00002d30 0x67c THUMB Debug/../../obj/ff.o - .debug_frame 0x000033ac 0x4c THUMB Debug/../../obj/unicode.o - .debug_frame 0x000033f8 0x1bc THUMB Debug/../../obj/uip.o - .debug_frame 0x000035b4 0xbc THUMB Debug/../../obj/uip_arp.o - .debug_frame 0x00003670 0x94 THUMB Debug/../../obj/net.o - .debug_frame 0x00003704 0x12e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .debug_frame 0x000049e4 0x120 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .debug_frame 0x00004b04 0x790 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_frame 0x00005294 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_info 0x00000000 0x2566f - .debug_info 0x00000000 0x34af THUMB Debug/../../obj/mmc.o - .debug_info 0x000034af 0x619 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_info 0x00003ac8 0x8c8 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_info 0x00004390 0x814 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_info 0x00004ba4 0xdf6 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_info 0x0000599a 0x8e1 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_info 0x0000627b 0x2b8 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_info 0x00006533 0xc51 THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_info 0x00007184 0x2060 THUMB Debug/../../obj/stm32_eth.o - .debug_info 0x000091e4 0x1559 THUMB Debug/../../obj/netdev.o - .debug_info 0x0000a73d 0x15b5 THUMB Debug/../../obj/usbd_core.o - .debug_info 0x0000bcf2 0xf37 THUMB Debug/../../obj/usbd_ioreq.o - .debug_info 0x0000cc29 0x15d3 THUMB Debug/../../obj/usbd_req.o - .debug_info 0x0000e1fc 0x2a16 THUMB Debug/../../obj/usb_core.o - .debug_info 0x00010c12 0x1503 THUMB Debug/../../obj/usb_dcd.o - .debug_info 0x00012115 0x26c9 THUMB Debug/../../obj/usb_dcd_int.o - .debug_info 0x000147de 0xa3d THUMB Debug/../../obj/hooks.o - .debug_info 0x0001521b 0x4f4 THUMB Debug/../../obj/main.o - .debug_info 0x0001570f 0x1055 THUMB Debug/../../obj/usb_bsp.o - .debug_info 0x00016764 0x1037 THUMB Debug/../../obj/usbd_bulk.o - .debug_info 0x0001779b 0x432 THUMB Debug/../../obj/usbd_desc.o - .debug_info 0x00017bcd 0x26d THUMB Debug/../../obj/usbd_usr.o - .debug_info 0x00017e3a 0xa1 THUMB Debug/../../obj/cpu_comp.o - .debug_info 0x00017edb 0x122 THUMB Debug/../../obj/cstart.o - .debug_info 0x00017ffd 0x146 THUMB Debug/../../obj/vectors.o - .debug_info 0x00018143 0x588 THUMB Debug/../../obj/can.o - .debug_info 0x000186cb 0x234 THUMB Debug/../../obj/cpu.o - .debug_info 0x000188ff 0xabd THUMB Debug/../../obj/flash.o - .debug_info 0x000193bc 0x2be THUMB Debug/../../obj/nvm.o - .debug_info 0x0001967a 0x1ab THUMB Debug/../../obj/timer.o - .debug_info 0x00019825 0x6af THUMB Debug/../../obj/uart.o - .debug_info 0x00019ed4 0x1716 THUMB Debug/../../obj/usb.o - .debug_info 0x0001b5ea 0xdf THUMB Debug/../../obj/assert.o - .debug_info 0x0001b6c9 0x168 THUMB Debug/../../obj/backdoor.o - .debug_info 0x0001b831 0x193 THUMB Debug/../../obj/boot.o - .debug_info 0x0001b9c4 0x4b5 THUMB Debug/../../obj/com.o - .debug_info 0x0001be79 0xa1 THUMB Debug/../../obj/cop.o - .debug_info 0x0001bf1a 0x8d5 THUMB Debug/../../obj/xcp.o - .debug_info 0x0001c7ef 0x144e THUMB Debug/../../obj/file.o - .debug_info 0x0001dc3d 0x4a9c THUMB Debug/../../obj/ff.o - .debug_info 0x000226d9 0x1bb THUMB Debug/../../obj/unicode.o - .debug_info 0x00022894 0xd8b THUMB Debug/../../obj/uip.o - .debug_info 0x0002361f 0x695 THUMB Debug/../../obj/uip_arp.o - .debug_info 0x00023cb4 0x684 THUMB Debug/../../obj/net.o - .debug_info 0x00024338 0xd02 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .debug_info 0x0002503a 0x55f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_info 0x00025599 0xd6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_abbrev 0x00000000 0x5cb5 - .debug_abbrev 0x00000000 0x3c4 THUMB Debug/../../obj/mmc.o - .debug_abbrev 0x000003c4 0x156 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_abbrev 0x0000051a 0x222 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_abbrev 0x0000073c 0x223 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_abbrev 0x0000095f 0x2ad THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_abbrev 0x00000c0c 0x1dc THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_abbrev 0x00000de8 0x17a THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_abbrev 0x00000f62 0x21a THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_abbrev 0x0000117c 0x352 THUMB Debug/../../obj/stm32_eth.o - .debug_abbrev 0x000014ce 0x335 THUMB Debug/../../obj/netdev.o - .debug_abbrev 0x00001803 0x3b7 THUMB Debug/../../obj/usbd_core.o - .debug_abbrev 0x00001bba 0x1c5 THUMB Debug/../../obj/usbd_ioreq.o - .debug_abbrev 0x00001d7f 0x373 THUMB Debug/../../obj/usbd_req.o - .debug_abbrev 0x000020f2 0x496 THUMB Debug/../../obj/usb_core.o - .debug_abbrev 0x00002588 0x2dd THUMB Debug/../../obj/usb_dcd.o - .debug_abbrev 0x00002865 0x2ef THUMB Debug/../../obj/usb_dcd_int.o - .debug_abbrev 0x00002b54 0x2f7 THUMB Debug/../../obj/hooks.o - .debug_abbrev 0x00002e4b 0x198 THUMB Debug/../../obj/main.o - .debug_abbrev 0x00002fe3 0x25d THUMB Debug/../../obj/usb_bsp.o - .debug_abbrev 0x00003240 0x2d9 THUMB Debug/../../obj/usbd_bulk.o - .debug_abbrev 0x00003519 0x131 THUMB Debug/../../obj/usbd_desc.o - .debug_abbrev 0x0000364a 0x12d THUMB Debug/../../obj/usbd_usr.o - .debug_abbrev 0x00003777 0x44 THUMB Debug/../../obj/cpu_comp.o - .debug_abbrev 0x000037bb 0x14 THUMB Debug/../../obj/cstart.o - .debug_abbrev 0x000037cf 0xf9 THUMB Debug/../../obj/vectors.o - .debug_abbrev 0x000038c8 0x20b THUMB Debug/../../obj/can.o - .debug_abbrev 0x00003ad3 0x111 THUMB Debug/../../obj/cpu.o - .debug_abbrev 0x00003be4 0x2de THUMB Debug/../../obj/flash.o - .debug_abbrev 0x00003ec2 0x125 THUMB Debug/../../obj/nvm.o - .debug_abbrev 0x00003fe7 0x114 THUMB Debug/../../obj/timer.o - .debug_abbrev 0x000040fb 0x26a THUMB Debug/../../obj/uart.o - .debug_abbrev 0x00004365 0x39d THUMB Debug/../../obj/usb.o - .debug_abbrev 0x00004702 0x87 THUMB Debug/../../obj/assert.o - .debug_abbrev 0x00004789 0x9f THUMB Debug/../../obj/backdoor.o - .debug_abbrev 0x00004828 0x70 THUMB Debug/../../obj/boot.o - .debug_abbrev 0x00004898 0x1b2 THUMB Debug/../../obj/com.o - .debug_abbrev 0x00004a4a 0x44 THUMB Debug/../../obj/cop.o - .debug_abbrev 0x00004a8e 0x28a THUMB Debug/../../obj/xcp.o - .debug_abbrev 0x00004d18 0x2d7 THUMB Debug/../../obj/file.o - .debug_abbrev 0x00004fef 0x34b THUMB Debug/../../obj/ff.o - .debug_abbrev 0x0000533a 0xb1 THUMB Debug/../../obj/unicode.o - .debug_abbrev 0x000053eb 0x34f THUMB Debug/../../obj/uip.o - .debug_abbrev 0x0000573a 0x208 THUMB Debug/../../obj/uip_arp.o - .debug_abbrev 0x00005942 0x242 THUMB Debug/../../obj/net.o - .debug_abbrev 0x00005b84 0xcb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .debug_abbrev 0x00005c4f 0x3e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_abbrev 0x00005c8d 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_loc 0x00000000 0x19736 - .debug_loc 0x00000000 0x21dd THUMB Debug/../../obj/mmc.o - .debug_loc 0x000021dd 0x182 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_loc 0x0000235f 0x810 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_loc 0x00002b6f 0x439 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_loc 0x00002fa8 0xc0c THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_loc 0x00003bb4 0x2e1 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_loc 0x00003e95 0xe6 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_loc 0x00003f7b 0xa9a THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_loc 0x00004a15 0x1a44 THUMB Debug/../../obj/stm32_eth.o - .debug_loc 0x00006459 0xda THUMB Debug/../../obj/netdev.o - .debug_loc 0x00006533 0x750 THUMB Debug/../../obj/usbd_core.o - .debug_loc 0x00006c83 0x2d4 THUMB Debug/../../obj/usbd_ioreq.o - .debug_loc 0x00006f57 0x89c THUMB Debug/../../obj/usbd_req.o - .debug_loc 0x000077f3 0x14f1 THUMB Debug/../../obj/usb_core.o - .debug_loc 0x00008ce4 0x7f6 THUMB Debug/../../obj/usb_dcd.o - .debug_loc 0x000094da 0x9c7 THUMB Debug/../../obj/usb_dcd_int.o - .debug_loc 0x00009ea1 0x115 THUMB Debug/../../obj/hooks.o - .debug_loc 0x00009fb6 0x2c THUMB Debug/../../obj/main.o - .debug_loc 0x00009fe2 0x13d THUMB Debug/../../obj/usb_bsp.o - .debug_loc 0x0000a11f 0x3ab THUMB Debug/../../obj/usbd_bulk.o - .debug_loc 0x0000a4ca 0x263 THUMB Debug/../../obj/usbd_desc.o - .debug_loc 0x0000a72d 0x1b7 THUMB Debug/../../obj/can.o - .debug_loc 0x0000a8e4 0xfb THUMB Debug/../../obj/cpu.o - .debug_loc 0x0000a9df 0x76c THUMB Debug/../../obj/flash.o - .debug_loc 0x0000b14b 0xc5 THUMB Debug/../../obj/nvm.o - .debug_loc 0x0000b210 0x1d2 THUMB Debug/../../obj/uart.o - .debug_loc 0x0000b3e2 0x4be THUMB Debug/../../obj/usb.o - .debug_loc 0x0000b8a0 0x62 THUMB Debug/../../obj/assert.o - .debug_loc 0x0000b902 0x40 THUMB Debug/../../obj/backdoor.o - .debug_loc 0x0000b942 0x40 THUMB Debug/../../obj/boot.o - .debug_loc 0x0000b982 0xf4 THUMB Debug/../../obj/com.o - .debug_loc 0x0000ba76 0x426 THUMB Debug/../../obj/xcp.o - .debug_loc 0x0000be9c 0xafd THUMB Debug/../../obj/file.o - .debug_loc 0x0000c999 0xa454 THUMB Debug/../../obj/ff.o - .debug_loc 0x00016ded 0x2db THUMB Debug/../../obj/unicode.o - .debug_loc 0x000170c8 0x7b0 THUMB Debug/../../obj/uip.o - .debug_loc 0x00017878 0x47a THUMB Debug/../../obj/uip_arp.o - .debug_loc 0x00017cf2 0x1be THUMB Debug/../../obj/net.o - .debug_loc 0x00017eb0 0x1092 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .debug_loc 0x00018f42 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - -.debug_aranges 0x00000000 0x1cd8 - .debug_aranges - 0x00000000 0x138 THUMB Debug/../../obj/mmc.o - .debug_aranges - 0x00000138 0x28 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_aranges - 0x00000160 0x118 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_aranges - 0x00000278 0x88 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_aranges - 0x00000300 0x180 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_aranges - 0x00000480 0x108 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_aranges - 0x00000588 0x48 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_aranges - 0x000005d0 0x100 THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_aranges - 0x000006d0 0x330 THUMB Debug/../../obj/stm32_eth.o - .debug_aranges - 0x00000a00 0x38 THUMB Debug/../../obj/netdev.o - .debug_aranges - 0x00000a38 0x90 THUMB Debug/../../obj/usbd_core.o - .debug_aranges - 0x00000ac8 0x50 THUMB Debug/../../obj/usbd_ioreq.o - .debug_aranges - 0x00000b18 0x48 THUMB Debug/../../obj/usbd_req.o - .debug_aranges - 0x00000b60 0x130 THUMB Debug/../../obj/usb_core.o - .debug_aranges - 0x00000c90 0x80 THUMB Debug/../../obj/usb_dcd.o - .debug_aranges - 0x00000d10 0x20 THUMB Debug/../../obj/usb_dcd_int.o - .debug_aranges - 0x00000d30 0x68 THUMB Debug/../../obj/hooks.o - .debug_aranges - 0x00000d98 0x20 THUMB Debug/../../obj/main.o - .debug_aranges - 0x00000db8 0x38 THUMB Debug/../../obj/usb_bsp.o - .debug_aranges - 0x00000df0 0x58 THUMB Debug/../../obj/usbd_bulk.o - .debug_aranges - 0x00000e48 0x50 THUMB Debug/../../obj/usbd_desc.o - .debug_aranges - 0x00000e98 0x50 THUMB Debug/../../obj/usbd_usr.o - .debug_aranges - 0x00000ee8 0x28 THUMB Debug/../../obj/cpu_comp.o - .debug_aranges - 0x00000f10 0x20 THUMB Debug/../../obj/cstart.o - .debug_aranges - 0x00000f30 0x20 THUMB Debug/../../obj/vectors.o - .debug_aranges - 0x00000f50 0x30 THUMB Debug/../../obj/can.o - .debug_aranges - 0x00000f80 0x30 THUMB Debug/../../obj/cpu.o - .debug_aranges - 0x00000fb0 0x78 THUMB Debug/../../obj/flash.o - .debug_aranges - 0x00001028 0x50 THUMB Debug/../../obj/nvm.o - .debug_aranges - 0x00001078 0x38 THUMB Debug/../../obj/timer.o - .debug_aranges - 0x000010b0 0x38 THUMB Debug/../../obj/uart.o - .debug_aranges - 0x000010e8 0x58 THUMB Debug/../../obj/usb.o - .debug_aranges - 0x00001140 0x20 THUMB Debug/../../obj/assert.o - .debug_aranges - 0x00001160 0x28 THUMB Debug/../../obj/backdoor.o - .debug_aranges - 0x00001188 0x28 THUMB Debug/../../obj/boot.o - .debug_aranges - 0x000011b0 0x50 THUMB Debug/../../obj/com.o - .debug_aranges - 0x00001200 0x28 THUMB Debug/../../obj/cop.o - .debug_aranges - 0x00001228 0x38 THUMB Debug/../../obj/xcp.o - .debug_aranges - 0x00001260 0x60 THUMB Debug/../../obj/file.o - .debug_aranges - 0x000012c0 0x160 THUMB Debug/../../obj/ff.o - .debug_aranges - 0x00001420 0x28 THUMB Debug/../../obj/unicode.o - .debug_aranges - 0x00001448 0x98 THUMB Debug/../../obj/uip.o - .debug_aranges - 0x000014e0 0x40 THUMB Debug/../../obj/uip_arp.o - .debug_aranges - 0x00001520 0x38 THUMB Debug/../../obj/net.o - .debug_aranges - 0x00001558 0x508 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .debug_aranges - 0x00001a60 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_aranges - 0x00001c78 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_ranges 0x00000000 0x3520 - .debug_ranges 0x00000000 0x2c8 THUMB Debug/../../obj/mmc.o - .debug_ranges 0x000002c8 0x48 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_ranges 0x00000310 0x108 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_ranges 0x00000418 0x78 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_ranges 0x00000490 0x1a0 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_ranges 0x00000630 0xf8 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_ranges 0x00000728 0x38 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_ranges 0x00000760 0xf0 THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_ranges 0x00000850 0x350 THUMB Debug/../../obj/stm32_eth.o - .debug_ranges 0x00000ba0 0x58 THUMB Debug/../../obj/netdev.o - .debug_ranges 0x00000bf8 0xe8 THUMB Debug/../../obj/usbd_core.o - .debug_ranges 0x00000ce0 0x40 THUMB Debug/../../obj/usbd_ioreq.o - .debug_ranges 0x00000d20 0x178 THUMB Debug/../../obj/usbd_req.o - .debug_ranges 0x00000e98 0x1c0 THUMB Debug/../../obj/usb_core.o - .debug_ranges 0x00001058 0x70 THUMB Debug/../../obj/usb_dcd.o - .debug_ranges 0x000010c8 0x158 THUMB Debug/../../obj/usb_dcd_int.o - .debug_ranges 0x00001220 0x58 THUMB Debug/../../obj/hooks.o - .debug_ranges 0x00001278 0x10 THUMB Debug/../../obj/main.o - .debug_ranges 0x00001288 0x28 THUMB Debug/../../obj/usb_bsp.o - .debug_ranges 0x000012b0 0x78 THUMB Debug/../../obj/usbd_bulk.o - .debug_ranges 0x00001328 0x40 THUMB Debug/../../obj/usbd_desc.o - .debug_ranges 0x00001368 0x40 THUMB Debug/../../obj/usbd_usr.o - .debug_ranges 0x000013a8 0x18 THUMB Debug/../../obj/cpu_comp.o - .debug_ranges 0x000013c0 0x10 THUMB Debug/../../obj/vectors.o - .debug_ranges 0x000013d0 0x50 THUMB Debug/../../obj/can.o - .debug_ranges 0x00001420 0x20 THUMB Debug/../../obj/cpu.o - .debug_ranges 0x00001440 0xe0 THUMB Debug/../../obj/flash.o - .debug_ranges 0x00001520 0x40 THUMB Debug/../../obj/nvm.o - .debug_ranges 0x00001560 0x48 THUMB Debug/../../obj/timer.o - .debug_ranges 0x000015a8 0x58 THUMB Debug/../../obj/uart.o - .debug_ranges 0x00001600 0x260 THUMB Debug/../../obj/usb.o - .debug_ranges 0x00001860 0x10 THUMB Debug/../../obj/assert.o - .debug_ranges 0x00001870 0x18 THUMB Debug/../../obj/backdoor.o - .debug_ranges 0x00001888 0x18 THUMB Debug/../../obj/boot.o - .debug_ranges 0x000018a0 0x40 THUMB Debug/../../obj/com.o - .debug_ranges 0x000018e0 0x18 THUMB Debug/../../obj/cop.o - .debug_ranges 0x000018f8 0x168 THUMB Debug/../../obj/xcp.o - .debug_ranges 0x00001a60 0x190 THUMB Debug/../../obj/file.o - .debug_ranges 0x00001bf0 0x10a0 THUMB Debug/../../obj/ff.o - .debug_ranges 0x00002c90 0x18 THUMB Debug/../../obj/unicode.o - .debug_ranges 0x00002ca8 0xa0 THUMB Debug/../../obj/uip.o - .debug_ranges 0x00002d48 0x30 THUMB Debug/../../obj/uip_arp.o - .debug_ranges 0x00002d78 0x58 THUMB Debug/../../obj/net.o - .debug_ranges 0x00002dd0 0x4f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .debug_ranges 0x000032c8 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_ranges 0x000034d0 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_line 0x00000000 0xb758 - .debug_line 0x00000000 0xe3d THUMB Debug/../../obj/mmc.o - .debug_line 0x00000e3d 0x216 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_line 0x00001053 0x4aa THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_line 0x000014fd 0x3c4 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_line 0x000018c1 0x5b3 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_line 0x00001e74 0x474 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_line 0x000022e8 0x25b THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_line 0x00002543 0x515 THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_line 0x00002a58 0xdad THUMB Debug/../../obj/stm32_eth.o - .debug_line 0x00003805 0x3e3 THUMB Debug/../../obj/netdev.o - .debug_line 0x00003be8 0x38f THUMB Debug/../../obj/usbd_core.o - .debug_line 0x00003f77 0x249 THUMB Debug/../../obj/usbd_ioreq.o - .debug_line 0x000041c0 0x352 THUMB Debug/../../obj/usbd_req.o - .debug_line 0x00004512 0x7ce THUMB Debug/../../obj/usb_core.o - .debug_line 0x00004ce0 0x361 THUMB Debug/../../obj/usb_dcd.o - .debug_line 0x00005041 0x321 THUMB Debug/../../obj/usb_dcd_int.o - .debug_line 0x00005362 0x33b THUMB Debug/../../obj/hooks.o - .debug_line 0x0000569d 0x23a THUMB Debug/../../obj/main.o - .debug_line 0x000058d7 0x281 THUMB Debug/../../obj/usb_bsp.o - .debug_line 0x00005b58 0x26d THUMB Debug/../../obj/usbd_bulk.o - .debug_line 0x00005dc5 0x20f THUMB Debug/../../obj/usbd_desc.o - .debug_line 0x00005fd4 0x20d THUMB Debug/../../obj/usbd_usr.o - .debug_line 0x000061e1 0xda THUMB Debug/../../obj/cpu_comp.o - .debug_line 0x000062bb 0x140 THUMB Debug/../../obj/cstart.o - .debug_line 0x000063fb 0x11b THUMB Debug/../../obj/vectors.o - .debug_line 0x00006516 0x1c0 THUMB Debug/../../obj/can.o - .debug_line 0x000066d6 0x16e THUMB Debug/../../obj/cpu.o - .debug_line 0x00006844 0x418 THUMB Debug/../../obj/flash.o - .debug_line 0x00006c5c 0x16c THUMB Debug/../../obj/nvm.o - .debug_line 0x00006dc8 0x1d0 THUMB Debug/../../obj/timer.o - .debug_line 0x00006f98 0x2f5 THUMB Debug/../../obj/uart.o - .debug_line 0x0000728d 0x47a THUMB Debug/../../obj/usb.o - .debug_line 0x00007707 0xea THUMB Debug/../../obj/assert.o - .debug_line 0x000077f1 0x128 THUMB Debug/../../obj/backdoor.o - .debug_line 0x00007919 0x110 THUMB Debug/../../obj/boot.o - .debug_line 0x00007a29 0x1bb THUMB Debug/../../obj/com.o - .debug_line 0x00007be4 0xb9 THUMB Debug/../../obj/cop.o - .debug_line 0x00007c9d 0x282 THUMB Debug/../../obj/xcp.o - .debug_line 0x00007f1f 0x4ea THUMB Debug/../../obj/file.o - .debug_line 0x00008409 0x18ee THUMB Debug/../../obj/ff.o - .debug_line 0x00009cf7 0x1ce THUMB Debug/../../obj/unicode.o - .debug_line 0x00009ec5 0x7d9 THUMB Debug/../../obj/uip.o - .debug_line 0x0000a69e 0x2f1 THUMB Debug/../../obj/uip_arp.o - .debug_line 0x0000a98f 0x252 THUMB Debug/../../obj/net.o - .debug_line 0x0000abe1 0x5b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .debug_line 0x0000b194 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_line 0x0000b6e4 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_str 0x00000000 0x8ebb - .debug_str 0x00000000 0x1465 THUMB Debug/../../obj/mmc.o - 0x1530 (size before relaxing) - .debug_str 0x00001465 0x281 THUMB Debug/../../obj/system_stm32f4xx.o - 0x40d (size before relaxing) - .debug_str 0x000016e6 0x42f THUMB Debug/../../obj/stm32f4xx_flash.o - 0x607 (size before relaxing) - .debug_str 0x00001b15 0x1cd THUMB Debug/../../obj/stm32f4xx_gpio.o - 0x51e (size before relaxing) - .debug_str 0x00001ce2 0x5aa THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x8cd (size before relaxing) - .debug_str 0x0000228c 0x228 THUMB Debug/../../obj/stm32f4xx_sdio.o - 0x6b6 (size before relaxing) - .debug_str 0x000024b4 0x1bf THUMB Debug/../../obj/stm32f4xx_syscfg.o - 0x36a (size before relaxing) - .debug_str 0x00002673 0x493 THUMB Debug/../../obj/stm32f4xx_usart.o - 0x723 (size before relaxing) - .debug_str 0x00002b06 0x12c1 THUMB Debug/../../obj/stm32_eth.o - 0x157b (size before relaxing) - .debug_str 0x00003dc7 0x232 THUMB Debug/../../obj/netdev.o - 0xccc (size before relaxing) - .debug_str 0x00003ff9 0x9f5 THUMB Debug/../../obj/usbd_core.o - 0xcea (size before relaxing) - .debug_str 0x000049ee 0xf4 THUMB Debug/../../obj/usbd_ioreq.o - 0xa48 (size before relaxing) - .debug_str 0x00004ae2 0x1a0 THUMB Debug/../../obj/usbd_req.o - 0xbe8 (size before relaxing) - .debug_str 0x00004c82 0xb5b THUMB Debug/../../obj/usb_core.o - 0x16e5 (size before relaxing) - .debug_str 0x000057dd 0xf6 THUMB Debug/../../obj/usb_dcd.o - 0xd07 (size before relaxing) - .debug_str 0x000058d3 0x3a2 THUMB Debug/../../obj/usb_dcd_int.o - 0x1526 (size before relaxing) - .debug_str 0x00005c75 0x40e THUMB Debug/../../obj/hooks.o - 0x6c2 (size before relaxing) - .debug_str 0x00006083 0x7e THUMB Debug/../../obj/main.o - 0x416 (size before relaxing) - .debug_str 0x00006101 0x8f THUMB Debug/../../obj/usb_bsp.o - 0xbca (size before relaxing) - .debug_str 0x00006190 0x16d THUMB Debug/../../obj/usbd_bulk.o - 0xac8 (size before relaxing) - .debug_str 0x000062fd 0x185 THUMB Debug/../../obj/usbd_desc.o - 0x3ca (size before relaxing) - .debug_str 0x00006482 0x119 THUMB Debug/../../obj/usbd_usr.o - 0x349 (size before relaxing) - .debug_str 0x0000659b 0xb5 THUMB Debug/../../obj/cpu_comp.o - 0x1e4 (size before relaxing) - .debug_str 0x00006650 0xc8 THUMB Debug/../../obj/vectors.o - 0x219 (size before relaxing) - .debug_str 0x00006718 0x1bd THUMB Debug/../../obj/can.o - 0x36e (size before relaxing) - .debug_str 0x000068d5 0x110 THUMB Debug/../../obj/cpu.o - 0x2ab (size before relaxing) - .debug_str 0x000069e5 0x256 THUMB Debug/../../obj/flash.o - 0x51a (size before relaxing) - .debug_str 0x00006c3b 0xb6 THUMB Debug/../../obj/nvm.o - 0x2bb (size before relaxing) - .debug_str 0x00006cf1 0xce THUMB Debug/../../obj/timer.o - 0x24d (size before relaxing) - .debug_str 0x00006dbf 0x13d THUMB Debug/../../obj/uart.o - 0x45b (size before relaxing) - .debug_str 0x00006efc 0x21e THUMB Debug/../../obj/usb.o - 0xcb6 (size before relaxing) - .debug_str 0x0000711a 0x7e THUMB Debug/../../obj/assert.o - 0x1e4 (size before relaxing) - .debug_str 0x00007198 0xf3 THUMB Debug/../../obj/backdoor.o - 0x253 (size before relaxing) - .debug_str 0x0000728b 0xa6 THUMB Debug/../../obj/boot.o - 0x233 (size before relaxing) - .debug_str 0x00007331 0x18f THUMB Debug/../../obj/com.o - 0x3ab (size before relaxing) - .debug_str 0x000074c0 0x7b THUMB Debug/../../obj/cop.o - 0x1bd (size before relaxing) - .debug_str 0x0000753b 0x21e THUMB Debug/../../obj/xcp.o - 0x484 (size before relaxing) - .debug_str 0x00007759 0x326 THUMB Debug/../../obj/file.o - 0x82b (size before relaxing) - .debug_str 0x00007a7f 0x368 THUMB Debug/../../obj/ff.o - 0x7b4 (size before relaxing) - .debug_str 0x00007de7 0xa6 THUMB Debug/../../obj/unicode.o - 0x189 (size before relaxing) - .debug_str 0x00007e8d 0x3dd THUMB Debug/../../obj/uip.o - 0x5db (size before relaxing) - .debug_str 0x0000826a 0x18f THUMB Debug/../../obj/uip_arp.o - 0x3a7 (size before relaxing) - .debug_str 0x000083f9 0xce THUMB Debug/../../obj/net.o - 0x440 (size before relaxing) - .debug_str 0x000084c7 0x56f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - 0x655 (size before relaxing) - .debug_str 0x00008a36 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - 0x3fc (size before relaxing) - .debug_str 0x00008de9 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - 0x11b (size before relaxing) - -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e THUMB Debug/../../obj/mmc.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f THUMB Debug/../../obj/system_stm32f4xx.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_flash.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_gpio.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_rcc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_sdio.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_syscfg.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_usart.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32_eth.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/netdev.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usbd_core.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usbd_ioreq.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usbd_req.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_core.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_dcd.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_dcd_int.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/hooks.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/main.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb_bsp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usbd_bulk.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usbd_desc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usbd_usr.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/cpu_comp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/vectors.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/can.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/cpu.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/flash.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/nvm.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/timer.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uart.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/usb.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/assert.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/backdoor.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/boot.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/com.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/cop.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/xcp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/file.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/ff.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/unicode.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uip.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uip_arp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/net.o - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.ARM.attributes - 0x00000000 0x37 - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/mmc.o - .ARM.attributes - 0x00000033 0x33 THUMB Debug/../../obj/system_stm32f4xx.o - .ARM.attributes - 0x00000066 0x33 THUMB Debug/../../obj/stm32f4xx_flash.o - .ARM.attributes - 0x00000099 0x33 THUMB Debug/../../obj/stm32f4xx_gpio.o - .ARM.attributes - 0x000000cc 0x33 THUMB Debug/../../obj/stm32f4xx_rcc.o - .ARM.attributes - 0x000000ff 0x33 THUMB Debug/../../obj/stm32f4xx_sdio.o - .ARM.attributes - 0x00000132 0x33 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .ARM.attributes - 0x00000165 0x33 THUMB Debug/../../obj/stm32f4xx_usart.o - .ARM.attributes - 0x00000198 0x33 THUMB Debug/../../obj/stm32_eth.o - .ARM.attributes - 0x000001cb 0x33 THUMB Debug/../../obj/netdev.o - .ARM.attributes - 0x000001fe 0x33 THUMB Debug/../../obj/usbd_core.o - .ARM.attributes - 0x00000231 0x33 THUMB Debug/../../obj/usbd_ioreq.o - .ARM.attributes - 0x00000264 0x33 THUMB Debug/../../obj/usbd_req.o - .ARM.attributes - 0x00000297 0x33 THUMB Debug/../../obj/usb_core.o - .ARM.attributes - 0x000002ca 0x33 THUMB Debug/../../obj/usb_dcd.o - .ARM.attributes - 0x000002fd 0x33 THUMB Debug/../../obj/usb_dcd_int.o - .ARM.attributes - 0x00000330 0x33 THUMB Debug/../../obj/hooks.o - .ARM.attributes - 0x00000363 0x33 THUMB Debug/../../obj/main.o - .ARM.attributes - 0x00000396 0x33 THUMB Debug/../../obj/usb_bsp.o - .ARM.attributes - 0x000003c9 0x33 THUMB Debug/../../obj/usbd_bulk.o - .ARM.attributes - 0x000003fc 0x33 THUMB Debug/../../obj/usbd_desc.o - .ARM.attributes - 0x0000042f 0x33 THUMB Debug/../../obj/usbd_usr.o - .ARM.attributes - 0x00000462 0x33 THUMB Debug/../../obj/cpu_comp.o - .ARM.attributes - 0x00000495 0x27 THUMB Debug/../../obj/cstart.o - .ARM.attributes - 0x000004bc 0x33 THUMB Debug/../../obj/vectors.o - .ARM.attributes - 0x000004ef 0x33 THUMB Debug/../../obj/can.o - .ARM.attributes - 0x00000522 0x33 THUMB Debug/../../obj/cpu.o - .ARM.attributes - 0x00000555 0x33 THUMB Debug/../../obj/flash.o - .ARM.attributes - 0x00000588 0x33 THUMB Debug/../../obj/nvm.o - .ARM.attributes - 0x000005bb 0x33 THUMB Debug/../../obj/timer.o - .ARM.attributes - 0x000005ee 0x33 THUMB Debug/../../obj/uart.o - .ARM.attributes - 0x00000621 0x33 THUMB Debug/../../obj/usb.o - .ARM.attributes - 0x00000654 0x33 THUMB Debug/../../obj/assert.o - .ARM.attributes - 0x00000687 0x33 THUMB Debug/../../obj/backdoor.o - .ARM.attributes - 0x000006ba 0x33 THUMB Debug/../../obj/boot.o - .ARM.attributes - 0x000006ed 0x33 THUMB Debug/../../obj/com.o - .ARM.attributes - 0x00000720 0x33 THUMB Debug/../../obj/cop.o - .ARM.attributes - 0x00000753 0x33 THUMB Debug/../../obj/xcp.o - .ARM.attributes - 0x00000786 0x33 THUMB Debug/../../obj/file.o - .ARM.attributes - 0x000007b9 0x33 THUMB Debug/../../obj/ff.o - .ARM.attributes - 0x000007ec 0x33 THUMB Debug/../../obj/unicode.o - .ARM.attributes - 0x0000081f 0x33 THUMB Debug/../../obj/uip.o - .ARM.attributes - 0x00000852 0x33 THUMB Debug/../../obj/uip_arp.o - .ARM.attributes - 0x00000885 0x33 THUMB Debug/../../obj/net.o - .ARM.attributes - 0x000008b8 0x2e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .ARM.attributes - 0x000008e6 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .ARM.attributes - 0x00000904 0x2e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .ARM.attributes - 0x00000932 0x2e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.srec b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.srec deleted file mode 100644 index 59884f41..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.srec +++ /dev/null @@ -1,2811 +0,0 @@ -S02B0000433A2F55736572732F766F6F72627572672F4465736B746F702F426C74546573742F546172676574E1 -S31508000000003F0020890100083143000831430008F9 -S3150800001031430008314300083143000831430008E2 -S3150800002031430008314300083143000831430008D2 -S3150800003031430008314300083143000831430008C2 -S3150800004031430008314300083143000831430008B2 -S3150800005031430008314300083143000831430008A2 -S315080000603143000831430008314300083143000892 -S315080000703143000831430008314300083143000882 -S315080000803143000831430008314300083143000872 -S315080000903143000831430008314300083143000862 -S315080000A03143000831430008314300083143000852 -S315080000B03143000831430008314300083143000842 -S315080000C03143000831430008314300083143000832 -S315080000D03143000831430008314300083143000822 -S315080000E03143000831430008314300083143000812 -S315080000F03143000831430008314300083143000802 -S3150800010031430008314300083143000831430008F1 -S3150800011031430008314300083143000831430008E1 -S3150800012031430008314300083143000831430008D1 -S3150800013031430008314300083143000831430008C1 -S3150800014031430008314300083143000831430008B1 -S3150800015031430008314300083143000831430008A1 -S315080001603143000831430008314300083143000891 -S315080001703143000831430008314300083143000881 -S30D08000180314300083143000871 -S315080001882949072291438D4628482949294A00F0D2 -S3150800019839F8294829492A4A00F034F829482A49C1 -S315080001A82A4A00F02FF82A482A492B4A00F02AF842 -S315080001B82A482B492B4A00F025F82B482B492C4A64 -S315080001C800F020F82B482C49002200F026F82B4886 -S315080001D82B49091A082903DB00220260043001604A -S315080001E81C481D49884205D00268043003B4904764 -S315080001F803BCF7E700208646EC4600200021214A82 -S315080002089047FEE7884207D0521A05D0037801308E -S315080002180B700131013AF9D17047884202D0027051 -S315080002280130FAE770470000003F00207CAE00085E -S3150800023800000020E500002090020008900200084F -S31508000248F8A300087CAE0008000000200000002083 -S31508000258F8A30008F8A30008F8A30008F8A30008FC -S31508000268F8A30008F8A30008F8A30008F8A30008EC -S315080002787CAE0008E8000020002F0020002F002090 -S30D0800028800370020593F000869 -S3150800029010B54FF43053C4F20103586B10F0450FF4 -S315080002A0FBD043070DD410F0010405D140F2FF50EE -S315080002B001F03AFC204610BD012001F035FC012072 -S315080002C010BD042001F030FC032010BD4FF430525D -S315080002D038B5C4F201020446536B13F0450FFBD040 -S315080002E059070DD413F0010505D101F0D5FBA0423D -S315080002F00BD0102038BD012001F016FC012038BDB6 -S31508000300042001F011FC032038BD40F2FF5001F033 -S315080003100BFC284601F0C8FB4EF20801CFF6FF5148 -S31508000320014029B1002805DB420005D5092038BD62 -S31508000330084638BD1C2038BD830001D50A2038BDC3 -S31508000340C10001D50B2038BD020101D50C2038BDEE -S31508000350430101D50D2038BDC10101D50E2038BD98 -S31508000360020201D50F2038BD4302C2D4810201D54D -S31508000370112038BDC20201D5122038BD030301D5AC -S31508000380132038BD410301D5142038BD820301D599 -S31508000390152038BDC30301D5162038BD010401D583 -S315080003A0172038BD420401D5182038BD830401D56D -S315080003B0192038BD10F0080F0CBF00201A2038BDD0 -S315080003C02DE9F04F054685B0002001F06DFB10F0D1 -S315080003D0007303D00E2005B0BDE8F08F854C02935C -S315080003E04FF0100920464FF0080840274FF4806662 -S315080003F00393E36084E80003A760266101F034FBF9 -S315080004004846FFF763FF01460029E4D1DFF8EC917F -S31508000410E160D9F80020A76012044FF0370A204699 -S3150800042084E80404266101F01FFB5046FFF74EFFDF -S315080004300346002BCFD1704A4FF0FF3182E8020104 -S3150800044030219160104602214FF0010A1361D160F4 -S31508000450C2F814A0019301F035FB019BA7604FF089 -S31508000460330B204684E80808E360266101F0FCFAAD -S315080004705846FFF72BFF0028ADD14FF43056C4F28B -S31508000480010640F22A63776B3B4007469BBB4FF455 -S31508000490001001F03FFBB8BB42F210780EE0716B1A -S315080004A040F22A630B404FF4001008F1FF3813BBE3 -S315080004B001F030FBB0B9B8F1010833D0726B40F2E5 -S315080004C02A6111404FF40010A9B901F023FB002856 -S315080004D0E5D001F00FFB04AB03EB8702013742F8C6 -S315080004E0080CDCE701F006FB04A901EB87030137DA -S315080004F043F8080CDFE7082001F00CFB48B1082098 -S3150800050001F012FB042066E701F0F4FA5746029060 -S31508000510C2E7022001F0FEFA30B1022001F004FB26 -S31508000520022058E7042056E7202001F0F3FA20B10C -S31508000530202001F0F9FA06204DE74FF4007001F08B -S31508000540E9FA064628B14FF4007001F0EDFA0720E3 -S3150800055041E740F2FF5001F0E7FA0298012D02BA8E -S315080005602AD0D00301D4252035E7D9F80070214DCB -S31508000570E6603B04372628464FF040084FF480676C -S3150800058084E84801276101F06FFA3046FFF79EFEBE -S31508000590014600297FF41FAF0624284629606C60AF -S315080005A0C5F80880E9602F6101F05EFA204605B0BB -S315080005B0BDE8F04FFFF78ABE5303D4D5D9F800300B -S315080005C00C4DE6601B04372628464FF040084FF4CA -S315080005D0806784E84801276101F046FA3046FFF74C -S315080005E075FE014600297FF4F6AE02220624284647 -S315080005F02A60D4E7A0010020EC0000204401002076 -S3150800060000B54FF4006083B00123C4F202004FF432 -S3150800061000618DF8073001F01DF908B98DF807005B -S315080006209DF8070003B000BD2DE9F04F834B844DBC -S3150800063085B00024184676221C605C609C60DC60ED -S315080006401C611A758DF80F4001F0DEF9032001F0E0 -S31508000650FDF9012001F0F4F94FF4806128462C6079 -S315080006606C60AC60EC6029614FF4803401F0FCF9F1 -S3150800067006E0802001F04EFA40B9013C00F0C08047 -S31508000680802001F047FA013C0028F2D040F2FF50E2 -S3150800069001F04AFA00208DF80F009DF80F3023B1BB -S315080006A09DF80F0005B0BDE8F08F082240244FF4EE -S315080006B0D57185E816004FF43054C4F20104604839 -S315080006C0EB604FF480672F6101F0CEF9626B12F090 -S315080006D0450F0ED14FF4803105E0626B013912F0F7 -S315080006E0450F05D141B1626B013912F0450FF4D0BF -S315080006F011B112F0040775D0042001F015FA032091 -S315080007008DF80F009DF80F30002B7BD14D4F01243B -S315080007103C604FF0804400234FF037094022484898 -S31508000720EB6085E808024FF48063AA602B6101F04C -S315080007309BF94846FFF7CAFD8DF80F009DF80F7024 -S31508000740002FADD144F0004A4AF480104FF43054DB -S315080007503B4E0190B846C4F201043948C5F80080FA -S315080007604FF0400A4FF4806BC5F80490C5F808A00E -S31508000770C5F80C80C5F810B001F076F93720FFF7F8 -S31508000780A5FD8DF80F009DF80F30002B88D1019933 -S315080007902B48316029227260C6F808A0F360C6F8B3 -S315080007A010B001F061F9606B10F0450FFBD010F046 -S315080007B0040B1FD0042001F0B7F903238DF80F307E -S315080007C09DF80F0000287FF46BAF01F06DF9013733 -S315080007D000284FF6FF7128DB8F42BED11B238DF808 -S315080007E00F305DE712F040008AD0402001F09CF9F6 -S315080007F0384685E740F2FF5001F096F95B46DDE79B -S31508000800032048E740224FF48061002437260C482D -S31508000810AA60296185E85000EC6001F025F93046A8 -S31508000820FFF754FD8DF80F0075E78F42D6D04200CA -S315080008307FF536AF03480222026031E72C0100201B -S31508000840A001002014010020F8B501F005F910B93F -S3150800085025242046F8BD4E4E3368042B52D04D4D04 -S31508000860002102224FF480632846C02429606A606A -S31508000870AC60E9602B6101F0F7F8FFF709FD044663 -S315080008800028E6D101F010F9434F3860042001F042 -S315080008900BF97860082001F007F9B8600C2001F020 -S315080008A003F93368F860012B2FD9062B2DD0022BBC -S315080008B02BD00121042BCCD0384C364821600A04B1 -S315080008C0C02309212A6000244FF480626960AB6066 -S315080008D0EC602A6101F0C8F8FFF7DAFC0446002844 -S315080008E0B7D101F0E1F82E4D2860042001F0DCF8BC -S315080008F06860082001F0D8F8A8600C2001F0D4F848 -S31508000900E860A6E700242046F8BD002121482960B2 -S3150800091003224023E9604FF480616A60AB60296175 -S3150800092001F0A2F84FF43050C4F20100426B12F005 -S31508000930450FFBD0500708D412F001070AD101F081 -S31508000940ABF803280BD0102483E7042001F0ECF859 -S3150800095003247EE7012001F0E7F8012479E740F255 -S31508000960FF5001F0E1F8384601F09EF810F4604FA8 -S3150800097003D0810404D513246BE7010C336899E787 -S315080009804204E0D4030401D50F2462E70121F5E708 -S3150800099014010020A00100201801002044010020B5 -S315080009A0040100202DE9F00FBB4FBC4B3A6879686B -S315080009B01C68BB4D03460E0E100E4FEA901AC0F384 -S315080009C08309C2F30748C2F3072C360100F0030077 -S315080009D0D2B283F800A083F80190987083F8038058 -S315080009E083F804C05A71DE80B3F806B02D6883F820 -S315080009F05640C1F30722C1F307401FFA8BF65FFA88 -S31508000A0082FC46EA101B4FEADC1A00F00F00C2F31C -S31508000A108019C2F34018C2F30016A3F854500025F3 -S31508000A20012CA3F806B086B0187283F809A083F8DB -S31508000A300A9083F80B801E735D7340F2ED80022CDA -S31508000A4000F0C880BE680CF03F04FF689549620054 -S31508000A50CCF3801983F819909A7693F81A800C6863 -S31508000A604A68380EC6F3C01C00F0030548EA0C0BAA -S31508000A704FEAD01AC0F34119AD0006F07F06C0F35D -S31508000A80820083F81AB0DE7683F81CA083F81D90DE -S31508000A909877DD7793F81FB0C7F3074C01250CEA62 -S31508000AA00509C7F30728CDF804904BEA9C1BCCF33D -S31508000AB0401A83F81FB04FEAD81C83F820A0DDF847 -S31508000AC004A0CDF808C0002083F82100C8F38019D7 -S31508000AD083F822A0DDF808A0CDF80C9083F823A0AF -S31508000AE0C8F3401CDDF80CA0CDF810C083F824A08C -S31508000AF0C8F30019DDF810A0CDF8149083F825A0E6 -S31508000B00C4F30746DDF814A0C8F38109C7F3460CF9 -S31508000B103602270E08F0030883F826A083F82790E4 -S31508000B2083F8288083F829C083F82A5083F82C7024 -S31508000B30DE85DE8DC4F30727B6B23E432406DE857E -S31508000B401C631F6B160E47EA06441C631F6BC2F331 -S31508000B50074647EA06241C638C681F6BC968C2F3FC -S31508000B60072CC4F307464CEA070C3606270ED2B202 -S31508000B70C3F830C083F8342083F835709E639A6BC7 -S31508000B80C4F3072642EA06429A639E6BE4B246EA33 -S31508000B9004229A639E6B46EA11649C6393F83C6050 -S31508000BA0C1F3074202F00F04240246EA121283F840 -S31508000BB03C20DC87DA8FC1F3072492B22243C1F3C3 -S31508000BC04601DA8783F8401083F8415006B0BDE83D -S31508000BD0F00F704701F03F010C041C61BE681A69EA -S31508000BE0300E42EA00251D611C69C6F3074141EA39 -S31508000BF004021A611D6901200024451944F1000107 -S31508000C00CA0442EA5534E8044FF40075C6F3072CC3 -S31508000C10DC6498641D6516E702F00306B2021A61E1 -S31508000C201C69BE68C9B244EA810018611D69C6F329 -S31508000C300742340E02F0030045EA941B04F007014C -S31508000C40C4F3C20540005409C2F38202C3F810B0C7 -S31508000C501D7559759C75DA7518761D7EC6F3072CB1 -S31508000C6045EADC1119761C69187E1D7A0122811C59 -S31508000C7002FA01F002FA05F204F1010AC517A0FB0F -S31508000C80020102FB0511A0FB0A450AFB01551A657C -S31508000C90C3E91245D7E600BF04010020140100206D -S31508000CA0440100201801002038B51A4B1968032999 -S31508000CB0054617D0022918D8B0F5805F12D0B0F5CE -S31508000CC0006F15D00020FFF77BFB044658B9124A7F -S31508000CD010461475146054609460D460146100F072 -S31508000CE093FE00E02724204638BD0024204638BD60 -S31508000CF00120FFF765FB04460028F4D1064B184689 -S31508000D001C751C605C609C60DD601C6100F07CFEEC -S31508000D10E9E700BF140100202C01002040F2A013CF -S31508000D20C2F2000310B54022072418609A601846DC -S31508000D3000214FF480625C60D9601A6100F094FE6D -S31508000D402046BDE81040FFF7C1BA00BFF0B585B030 -S31508000D5000240C2001218DF8074000F0F3FD4FF424 -S31508000D600060C4F2020008210C2200F079FD4FF45D -S31508000D700060C4F2020009210C2200F071FD4FF454 -S31508000D800060C4F202000A210C2200F069FD4FF44B -S31508000D900060C4F202000B210C2200F061FD0C2158 -S31508000DA04FF400600A46C4F2020000F059FD4FF401 -S31508000DB040600C22C4F20200022100F051FD4FF4FB -S31508000DC000604FF4706301250227C4F2020002A9ED -S31508000DD002938DF80D508DF80C708DF80E408DF835 -S31508000DE00F5000F08FFC4FF440600422C4F202005A -S31508000DF002A9029200F086FC4FF40060C4F20200D9 -S31508000E0002A94FF4805602968DF80F4000F07AFC3E -S31508000E104FF40060064602A9C4F2020002968DF855 -S31508000E200C708DF80F4000F06DFC3046294600F036 -S31508000E30B3FD4FF48000294600F084FD00F0D6FD8E -S31508000E40FFF7F2FB8DF807009DF8070018B19DF82B -S31508000E50070005B0F0BDFFF7F7FC8DF807009DF811 -S31508000E600730002BF3D1134A134C13751046136041 -S31508000E7053609360D360136100F0C6FD2046FFF708 -S31508000E8091FD8DF807009DF8071051B19DF80730C0 -S31508000E90002BDCD14FF40060FFF706FF8DF8070042 -S31508000EA0D5E7B4F854000004FFF738FF8DF80700BB -S31508000EB0ECE700BF2C010020480100202DE9F8438B -S31508000EC0714D724E00214FF430542970C4F201045A -S31508000ED06F4D31602960E1626E4C6F4D21680229C1 -S31508000EE018BFBDF82070914602BF4FEA52294FF449 -S31508000EF0007749EAC35980461023402200264FF45A -S31508000F00806428462C612F606B60AA60EE604FF4FF -S31508000F10803400F0A9FD05E0802000F0FBFD38B91B -S31508000F20013C05D0802000F0F5FD013C0028F3D0F7 -S31508000F301020FFF7CBF9064610B13046BDE8F88316 -S31508000F4056494FF0FF329023084681E884008B60AB -S31508000F5002220123CA604B610E61112400F0B2FD22 -S31508000F604FF480614C48EE604026AE602961C5F8B2 -S31508000F7000906C6000F078FD2046FFF7A7F906465A -S31508000F800028DAD14FF430554446C4F201056A6B9D -S31508000F9040F22A6313404FF4004023BB00F0BAFD29 -S31508000FA00028F4D000F0A6FD206000F0A3FD6060E4 -S31508000FB000F0A0FDA06000F09DFDE06000F09AFD45 -S31508000FC0206100F097FD606100F094FDA06100F0DB -S31508000FD091FDE0616A6B40F22A63134020344FF4B6 -S31508000FE00040002BDAD0082000F094FD30B108202C -S31508000FF0042600F099FD3046BDE8F883022000F08B -S3150800100089FD20B1022000F08FFD022695E72020F9 -S3150800101000F080FD20B1202000F086FD06268CE732 -S315080010204FF4007000F076FD40BB4FF0FF3516E038 -S31508001030E5B100F05FFD47F8040B4FF4001000F02F -S3150800104069FD98B100F056FD60604FF4001000F09D -S3150800105061FD58B100F04EFD0C347860033D4FF445 -S315080010600010274600F056FD0028E1D140F2FF5057 -S3150800107000F05AFD0A49002008605EE74FF4007048 -S3150800108000F052FD072658E7E80000202801002056 -S31508001090B401002014010020A0010020EC0000206B -S315080010A0000000202DE9F84F4FF43054C4F2010433 -S315080010B0704D714E714F0021297031603960E162BF -S315080010C06F4C21686F4C022918BFBDF828909246CC -S315080010D002BF4FEA522A4FF400794AEAC35A8046B9 -S315080010E010250023204640274FF480666560E3609C -S315080010F0C4F80090A760266100F0B6FC2846FFF702 -S31508001100E5F8054610B12846BDE8F88F4FF0180BEC -S315080011102046E56084E8000CA760266100F0A4FC80 -S315080011205846FFF7D3F805460028ECD156494FF044 -S31508001130FF3281E804020123902208468A60CD60C6 -S315080011400D614B6100F0BEFC4FF43057A946C4F25E -S315080011500107786B40F21A61014000293AD14FF431 -S31508001160804000F0D7FC0028F3D0C9F5007BBBF11E -S315080011701F0F3AD85FEA9B0BEBD046460BF1FF33BD -S31508001180012456F8040B03EA040A00F0BBFC5C458C -S3150800119016D0BAF1000F06D056F8040B022400F058 -S315080011A0B1FC5C450CD0B24602345AF8040B00F088 -S315080011B0A9FC706800F0A6FC5C450AF10406F2D1A9 -S315080011C0786B40F21A61014008EB840809EB840940 -S315080011D00029C4D0082000F09DFC58B30820042537 -S315080011E000F0A2FC2846BDE8F88FD8F8000000F009 -S315080011F089FCD8F8040000F085FCD8F8080000F04F -S3150800120081FCD8F80C0000F07DFCD8F8100000F03E -S3150800121079FCD8F8140000F075FCD8F8180000F02E -S3150800122071FCD8F81C0000F06DFC08F1200809F1E3 -S3150800123020098EE7022000F06DFC20B1022000F0A4 -S3150800124073FC02255FE7102000F064FC20B1102033 -S3150800125000F06AFC052556E74FF4007000F05AFCCA -S3150800126010B90A4A10604EE74FF4007000F05CFCB3 -S31508001270072548E7E800002028010020B4010020DF -S3150800128014010020A0010020EC000020000000202E -S3150800129038B50446E0B1104A104B10680D25020413 -S315080012A0402183E824001846996000224FF48061A3 -S315080012B0DA60196100F0D8FB2846FFF707F80546FB -S315080012C008B1284638BD00F0EFFB2060284638BD37 -S315080012D02625284638BD00BF44010020A00100206D -S315080012E000B583B000230193FFF78AF9012802D0DD -S315080012F0FF2003B000BD01A8FFF7CAFF0028F7D1F9 -S315080013000198C0F34320F4E708B5FFF7E9FF04287E -S3150800131004D0FF2814BF0120022008BD002008BD04 -S3150800132010B596B0FFF712FD044628B1074B012207 -S315080013301A70032016B010BD04490A78684602F0F0 -S31508001340FE030B70FFF72EFB2046F3E70400002090 -S3150800135010B5084C0123237008B1207810BDFFF79B -S31508001360D3FF0028F9D1207800F0FE0121702078FB -S3150800137010BD00BF04000020F0B5ADF5037D10BB1D -S315080013805D1E03B34FF6FF74C0F27F04181901EB14 -S315080013904024C1EB42274FF40076009602A8E219D2 -S315080013A00023FFF78BFD70B9FFF7AEFF0128FBD0CE -S315080013B0204602A94FF4007208F0A0FFA4F50074B5 -S315080013C02DB1013DE9E701200DF5037DF0BD284665 -S315080013D0FAE700BFF0B5ADF5037D20BB5D1E13B37C -S315080013E04FF6FF74C0F27F04181901EB4024C1EBD5 -S315080013F042274FF400764FF40072214602A808F0FF -S315080014007DFF009602A8E2190023FFF74BFE08B1FC -S31508001410052808D1FFF778FF0128FBD0A4F500744A -S315080014202DB1013DE7E701200DF5037DF0BD284606 -S31508001430FAE700BF10B5164B1B78DB0798B00446D1 -S3150800144002D5032018B010BD032906D8DFE801F03D -S3150800145003020D0770B10020F4E70420F2E7002824 -S31508001460F9D1202010602046ECE74FF40071118076 -S315080014700020E7E702A80192FFF794FA149A159B51 -S31508001480500A019A40EAC35111602046DAE700BFC4 -S31508001490040000204FF46053C4F2020300221968C6 -S315080014A041F0010018609A60186843F2100120F0B4 -S315080014B0847020F48030C2F20041186059601968BF -S315080014C082B021F480201860DA60009201921A68CE -S315080014D042F480311960184603E00099B1F5A06F0F -S315080014E009D0036803F40032019200994B1C00935B -S315080014F0019A002AF1D04FF46050C4F20200036842 -S3150800150013F400320DD001210191019801280CD065 -S315080015104FF46D43CEF200034FF00061996002B0BC -S315080015207047019201980128F2D14FF46053C4F232 -S3150800153002034FF4E042196CC4F2000241F08050F5 -S315080015401864116841F4404010609A689A60996876 -S3150800155041F400409860996845F20C4241F4A05065 -S31508001560C0F2407298605A60196841F080721A6039 -S31508001570184601684FF460538A01C4F20203F8D58D -S315080015804FF47052C4F2020240F205601060996886 -S3150800159021F003029A60986840F0020199609A68FF -S315080015A002F00C000828FAD1B2E700BF4FF47053D6 -S315080015B0C4F202031A69002A09DA40F2231148F62E -S315080015C0AB10C4F26751CCF6EF50596058607047BB -S315080015D04FF47053C4F202031A6942F000401861CE -S315080015E0704700BF4FF47053C4F20203D8607047C7 -S315080015F04FF47053C4F20203DA68D0030AD4D868E9 -S31508001600C10601D505207047D96811F0EF0F03D040 -S315080016100620704701207047DB6813F0020F0CBFE5 -S3150800162008200720704700BF00B583B008238DF84F -S315080016300730FFF7DDFF8DF807009DF80700012842 -S31508001640F7D09DF8070003B000BD00BF70B505468A -S315080016500E46FFF7E9FF082800D070BD4FF4705416 -S31508001660C4F20204236923F440702061216941F41D -S3150800167000722261236943F0010020612E60FFF7A2 -S31508001680D3FF216921F00102226170BD70B50546BC -S3150800169000292ED0012932D0022914BF4FF44076F2 -S315080016A04FF40076FFF7C0FF082827D14FF470548F -S315080016B0C4F20204236923F44070206121690E43B1 -S315080016C02661226922F0F8032361206940F00201AD -S315080016D00D432561226942F480332361FFF7A4FF95 -S315080016E0216921F002022261236923F0F8012161B0 -S315080016F070BD0E46FFF798FF0828D7D070BD4FF487 -S315080017008076F7E72DE9F00F0E6884B00022884648 -S3150800171013464FF0010B00968A4607E0DDF8049061 -S31508001720A14539D04B1CAA1C102B54D0009E0BFA8D -S3150800173003F5591C05EA060C0BFA01F42640AC45DC -S31508001740019602F10205E9D1032606FA02F90768AD -S315080017509AF804806FEA09094E463E400660076813 -S31508001760CDF80C9008FA02F908F1FF3849EA07099A -S31508001770B8F1010FC0F8009031D9C368039F9AF8F1 -S3150800178007C0DDF804903B40C360C3680CFA02F258 -S315080017901A43A145C260C5D1032304689AF80420F8 -S315080017A0AB40DB431C400460046802FA05FC013ABE -S315080017B04CEA0404012A046033D9C2689AF807403F -S315080017C01340C360C26804FA05F31343C3604B1C95 -S315080017D0AA1C102BAAD104B0BDE8F00F7047D0F8A8 -S315080017E00880039E9AF806709AF8059006EA080893 -S315080017F0C0F80880D0F8088009FA02F949EA08080A -S31508001800C0F80880D0F8048028EA0C0CC0F804C098 -S31508001810D0F8049007FA03F39FB247EA0903436036 -S31508001820ABE786689AF805709AF806201E40866027 -S31508001830846807FA05FC4CEA040686604768019E38 -S3150800184027EA06074760446802FA01F292B2224381 -S315080018504260B2E7036919420CBF002001207047B5 -S31508001860CB08083301F0070130B4890050F823503B -S315080018700F2404FA01F425EA040440F8234050F83A -S31508001880234002FA01F2144340F8234030BC704763 -S315080018904FF46053C4F2020310B49A6802F00C01C4 -S315080018A0042922D0082926D04FF41052C0F2F40297 -S315080018B002604FF46053C4F2020321499C68C4F3E2 -S315080018C003140C5D22FA04F242609C68C4F3822475 -S315080018D00C5D22FA04F484609B68C3F34233C95C46 -S315080018E022FA01F2C26010BC70474FF4D852C0F217 -S315080018F0B7020260DDE75C68596814F4800F5C681B -S3150800190001F03F0214BF4FF4D8534FF41053C4F3F9 -S3150800191088114FF4605414BFC0F2B703C0F2F40341 -S31508001920C4F20204B3FBF2F303FB01F26168C1F3EC -S3150800193001435C1C6100B2FBF1F20260B9E700BF2B -S31508001940080000204FF46053C4F202031A6B19B959 -S3150800195022EA00001863704710431863704700BFF7 -S315080019604FF46053C4F202035A6B19B922EA000015 -S315080019705863704710435863704700BF4FF460536D -S31508001980C4F202031A6C19B922EA000018647047F7 -S3150800199010431864704700BF4FF46053C4F2020343 -S315080019A05A6C19B922EA0000586470471043586403 -S315080019B0704700BF4FF46053C4F202031A6919B99D -S315080019C022EA00001861704710431861704700BF8B -S315080019D04FF46053C4F202035A6A19B922EA0000A6 -S315080019E05862704710435862704700BF08B5012116 -S315080019F04FF40060FFF7ECFF4FF400600021BDE8EC -S31508001A000840FFF7E5BF00BFF0B44FF43053D0F8F5 -S31508001A1004C08268C76806680469017DC4F20103C8 -S31508001A204CEA02025D683A43324325F4FD402243FC -S31508001A3020F07F0002430A435A60F0BC704700BF9B -S31508001A4048F2A003C4F22523186070474FF43053B8 -S31508001A50C4F20103186070474FF43053C4F201030F -S31508001A60186800F0030070474FF430530268C4F258 -S31508001A70010330B49A6085684268C468D968006909 -S31508001A802A4321F4FF61224321F0070102430A4356 -S31508001A90DA6030BC704700BF4FF43053C4F201031C -S31508001AA01869C0B2704700BF42F6144382B0C4F248 -S31508001AB00103C0180022019201900199086802B03A -S31508001AC0704700BF4FF430530268C4F2010330B4C4 -S31508001AD05A6241689962C56882680469D96A406928 -S31508001AE02A43224321F0F70102430A43DA6230BC53 -S31508001AF0704700BF4FF43053C4F20103D3F8800097 -S31508001B00704700BF4FF43053C4F20103C3F8800096 -S31508001B10704700BF4FF43053C4F20103596B0842B3 -S31508001B200CBF0020012070474FF43053C4F2010364 -S31508001B3098637047DC23C4F227231860704700BFF8 -S31508001B40028ACB8822F440521204F0B5120C0446DD -S31508001B501A4348890F898E880D4689892282A38966 -S31508001B6023F4B05222F00C033E431A040643B3B2E0 -S31508001B70100C43EA0006A681A28A22F440700304E8 -S31508001B801E0C0E4385B0A6826846FFF781FE4FF409 -S31508001B908051C4F201018C422CD04FF4A052C4F2F9 -S31508001BA00102944226D0A089029B06B2002E26DBAB -S31508001BB02D6803EB830101EB8102AB00B2FBF3F165 -S31508001BC048F21F53A089C5F2EB13A3FB015672090D -S31508001BD000B264251601002802FB151118DB0D0159 -S31508001BE03235A3FB0553C3F34312324391B2218125 -S31508001BF005B0F0BDA089039B06B2002ED8DA286886 -S31508001C0003EB830606EB86054200B5FBF2F1D7E740 -S31508001C10C8003230A3FB0013C3F342123243E5E790 -S31508001C20838929B923F400510A04130C8381704768 -S31508001C3099B241F400528281704700BFC905CA0DA6 -S31508001C40828070478088C105C80D7047038819428D -S31508001C500CBF00200120704708B501214FF0007025 -S31508001C60FFF7A8FE4FF000700021BDE80840FFF717 -S31508001C70A1BE00BF40210164202141648021416644 -S31508001C804FF0806100234FF00072C0F880104FF0CB -S31508001C908071036043608360C3600361436183614D -S31508001CA0C361036243628362C362036343638363FC -S31508001CB0C3638364C364036543658365C365036659 -S31508001CC08366C366036743678367C367C0F8842070 -S31508001CD0C0F888104FF40011C0F88C10C0F8A42082 -S31508001CE04FF480714FF40032C0F89030C0F8943049 -S31508001CF0C0F89830C0F89C30C0F8A030C0F8A830BA -S31508001D00C0F8AC20C0F8B010C0F8B430C0F8B8308D -S31508001D10704700BF4FF40042C4F2020202F5805336 -S31508001D20116841F008001060996941F480109861C3 -S31508001D30116841F0040010609A6942F400519961F3 -S31508001D40986940F002029A61704700BF82B04FF46A -S31508001D500043C4F20203002201921A69890102F0C3 -S31508001D601C02C00642EA104001F4F862104340F033 -S31508001D7001014FF6FE7019611A46C0F2040002E02E -S31508001D800199814205D8019B591C01911369DB070A -S31508001D90F6D401984FF6FF72C0F20402904207D0BB -S31508001DA04FF40043C4F20203596988B202B070477F -S31508001DB00020FBE710B44FF4004383B0C4F20203DB -S31508001DC0002401941C695A6104F01C04C0068901A8 -S31508001DD044F0030444EA104401F4F86004434FF65F -S31508001DE0FE711A461C61C0F2040102E0019888429D -S31508001DF005D8019B581C01901369D807F6D4019998 -S31508001E004FF6FF72C0F20402881A18BF012003B009 -S31508001E1010BC70472DE9F0414FF4004386B000220C -S31508001E20C4F2020300928046019202A81D690C467C -S31508001E30FFF72EFD03994FF45340CFF6CE604EF2CE -S31508001E40BF120B18C0F2E402934225F01C0500F2FB -S31508001E50358145F008054FF40043C4F202032046D5 -S31508001E601D6100214FF40042FFF7A4FF002800F08F -S31508001E7021814FF080600090009A2AB100994B1E8C -S31508001E80009300980028F9D1D8F80010002900F02E -S31508001E9031814FF6FE75C0F20405019B01215A1CDB -S31508001EA020460192FFF752FF00F0040081B211B9F3 -S31508001EB0019BAB42F1D9019A4FF6FF70C0F20400BC -S31508001EC0824200F0F7800023204619464FF48052DC -S31508001ED00193FFF76FFF002800F0EC804FF6FE75C0 -S31508001EE0C0F20405019920464A1C01210192FFF718 -S31508001EF02DFF00F0200083B213B90199A942F1D948 -S31508001F00019A4FF6FF70C0F20400824200F0D280B8 -S31508001F102046102100240194FFF718FF00F004065C -S31508001F20B5B2002D00F007814FF40067C8F820709D -S31508001F3000F0020399B2002900F0F7800020C8F8E3 -S31508001F401400074608F1180393E80700D8F8046058 -S31508001F50D8F80830D8F80C50D8F810401E43354346 -S31508001F602C432043D8F82430D8F82860D8F82C40D9 -S31508001F7001430A434FF4004CC4F2020C1A43D8F842 -S31508001F803000DCF80050D8F834303243224348F2A7 -S31508001F900F110243CFF6207129401A430A433A43E8 -S31508001FA0CCF8002008F148010FC9D8F83860D8F8ED -S31508001FB03C70D8F84050D8F84440374347EA0506FD -S31508001FC046EA0405284340EA010422431343CCF8B1 -S31508001FD00430D8F85810CCF80810D8F85C70CCF84B -S31508001FE00C70D8F86850D8F86440D8F86C00D8F85F -S31508001FF07030DCF81860D8F87410D8F8602045EA14 -S31508002000040747EA00051D434FF6417445EA0100F7 -S31508002010344040EA040343EA0246CCF81860D8F88C -S315080020207C10D8F8782041EA0207CCF81C70D8F85A -S315080020308030D8F88470D8F88850D8F88C4008F1E1 -S31508002040900007C847EA030646EA050343EA04057B -S315080020504FF4104E45EA0004C4F2020ED8F89C303C -S31508002060DEF8180021430A4343F62375D8F8A01072 -S3150800207042EA0304CFF6DE050C43054044EA0500B0 -S31508002080CEF81800D8F8A450D8F8A830D8F8AC403C -S31508002090D8F8B000D8F8B810D8F8B4202B4343F4D1 -S315080020A00003234303430B4343EA8200CEF80000B0 -S315080020B0012000E0002006B0BDE8F0814FF2401094 -S315080020C0CFF6E95047F63F020B18C0F27D1293424D -S315080020D002D845F00C05BEE64FF4F240CFF66C4048 -S315080020E04FF4B4420918C0F26222914288BF45F003 -S315080020F00405B0E6D8F82020D8F81430D00840EA0D -S31508002100530292B22046FFF755FE0028D2D06FF050 -S315080021107F440094009E2EB1009F7D1E0095009975 -S315080021200029F9D1D8F814700CE74FF48042C8F8A2 -S315080021301420174606E7C8F82050F9E64FF410436E -S31508002140C4F202031A6842F001001860704700BF23 -S315080021504FF41043C4F20203186800F001007047F8 -S315080021602DE9F0430121B3B04FF0F050FFF7EAFB39 -S3150800217047200121FFF7E6FB01214FF48040FFF7D6 -S315080021800BFC0120FFF7D6FC00208E23064602250D -S31508002190C4F2020001A901938DF80A608DF808506F -S315080021A08DF80B608DF80950FFF7ACFA304601211F -S315080021B00B22C4F20200FFF753FB30460B22C4F28F -S315080021C002002946FFF74CFB304603210B22C4F2D6 -S315080021D00200FFF745FB30460B220721C4F2020036 -S315080021E0FFF73EFB4FF4C0504FF40062C4F2020002 -S315080021F001A901928DF80A608DF808508DF80B60D8 -S315080022008DF80950FFF77EFA0B214FF4C0500A46A5 -S31508002210C4F20200FFF724FB4FF40060C4F2020088 -S3150800222001A9322701978DF80A608DF808508DF8B4 -S315080022300B608DF80950FFF765FA4FF4006001212D -S31508002240C4F202000B22FFF70BFB4FF400600421D7 -S31508002250C4F202000B22FFF703FB4FF400600B22C7 -S31508002260C4F202000521FFF7FBFA4FF4C0504FF401 -S31508002270C043C4F2020001A901938DF80A608DF8E3 -S3150800228008508DF80B608DF80950FFF73BFA4FF4AC -S31508002290C050C4F202000D210B22FFF7E1FA4FF4F9 -S315080022A0C050C4F202000E210B22FFF7D9FAFFF73D -S315080022B0D3FCFFF743FFFFF74BFF0128FBD003A82A -S315080022C0FFF7D8FC002641F219684CF2F1094FF4E1 -S315080022D000704FF0004120254FF400624FF480470C -S315080022E003960A960D900E961191149516961796C2 -S315080022F018960B920897C0F22208C0F2070913E055 -S315080023004C4523D0BDB22846FFF720FD032160F3D4 -S315080023101F442846FFF71AFD60F30F04444515D0FD -S315080023204C4513D0202E3DD0B5B202212846FFF7E2 -S315080023300DFD032160F31F442846FFF707FD60F3F0 -S315080023400F04771C022144450E44D9D103A8294617 -S31508002350FFF760FD20B9144840F2471102F094FFD8 -S315080023604FF41040114A124C124B9460C4F202000A -S31508002370002111605160D2600261402259605A7191 -S315080023809A8819604FF4C86161F30C020A499A8069 -S3150800239080229960DB60DA70C360FFF7BBFC33B05C -S315080023A0BDE8F0833546D1E7F8A300080009002008 -S315080023B080090020000200208002002042F6706397 -S315080023C0C2F200030822002027211A70587099705B -S315080023D069225B204521DA7018715971704700BF70 -S315080023E038B50E4CE37803F08000C1B211B1002570 -S315080023F0284638BD65880A490A48AA04950C2A461B -S3150800240007F07CFFE0784FF41043C4F2020340F073 -S3150800241080010122E17028469A6038BD000200203A -S315080024208002002014280020F8B5104CE57805F045 -S315080024308000C5B2C5B90E4E0E4F0F493A883046D0 -S3150800244007F05CFF3B88656019054FF41042080DDC -S31508002450C4F20202A0801023B02101202560A660E4 -S31508002460A370E1705060F8BDFEE700BF00090020C8 -S31508002470800900200828002014280020D0F8E83514 -S3150800248010B5044618698047032184F81211002004 -S3150800249010BD00BF08B590F81221D0F8E83580F8CD -S315080024A01321042180F81211D8688047002008BD3E -S315080024B008B5D0F8E435D96901B18847002008BDC8 -S315080024C008B5D0F8E435196A8847002008BD00BF6A -S315080024D008B5D0F8E435596A8847002008BD00BF1A -S315080024E0D0F8E83510B5044658698047012184F8C4 -S315080024F01511002010BD00BFD0F8E83510B5044608 -S3150800250098698047D4F8E41520464A680021904720 -S31508002510002084F8150110BD002110B50B460446AD -S31508002520402201F013F9802140220023204601F0C1 -S315080025300DF9D4F8E835A078012284F812215968F3 -S315080025408847002010BD00BF10B582B06946044612 -S3150800255000F030F99DF8001001F01F03012B0FD091 -S3150800256009D3022B11D0204601F0800101F068F949 -S31508002570002002B010BD2046694600F0D1F9F7E701 -S315080025802046694600F0B2F9F2E72046694600F0AF -S3150800259041F9EDE770B5044649B990F81131022BB7 -S315080025A019D094F8161101290CD0002070BDD0F866 -S315080025B0E4355B69002BF8D090F81221032AF4D190 -S315080025C09847F2E721482369026800215A600020EB -S315080025D084F8161170BDD0F83821D0F824319A4203 -S315080025E011D9C078D4F828110128C3EB020208BF14 -S315080025F0C918C4F8382108BFC4F82811204692B271 -S3150800260000F0A4F8CDE7D0F83C51B5FBF3F603FB90 -S3150800261016565EB9AB4209D8D0F84021954205D284 -S31508002620324600F093F8C4F84061BAE7D4F8E405F6 -S31508002630C16819B194F81231032B03D0204600F073 -S31508002640A9F8AEE720468847F8E700BFC00F002084 -S3150800265010B5044629B990F8111103290CD00020A9 -S3150800266010BDD0F8E4359B69002BF8D090F81221FC -S31508002670032AF4D19847F2E7D0F89023D0F87C33B0 -S315080026809A4214D9C078D4F880130128C3EB020201 -S3150800269008BFC918C4F8902308BFC4F880139A4223 -S315080026A028BF1A46204692B200F05AF8D7E7D0F863 -S315080026B0E4150B691BB190F81221032A03D02046B2 -S315080026C000F058F8CBE79847F9E700BF2DE9F04145 -S315080026D0069D044616461F46884601F0B9FC204664 -S315080026E04146C4F8E475C4F8E855C4F8EC6500F04A -S315080026F0DDFFD4F8E835186880472046BDE8F04184 -S3150800270001F0FEBCD0F8E43510B504461A689047C7 -S31508002710D4F8E80581688847002010BD08B5D0F8C8 -S31508002720E4355A689047002008BD00BF13460A469C -S31508002730022110B5C0F83C31C0F8383180F81111C3 -S315080027400021044601F05EF8002010BD10B50C46C5 -S3150800275013460021224601F055F8002010BD00BF9F -S3150800276010B50C4613460021224601F02BF800202E -S3150800277010BD00BF38B50021042504460A460B469D -S3150800278080F8115101F03EF8204600F071FF002054 -S3150800279038BD00BF38B50021052504460A460B4654 -S315080027A080F8115101F00EF8204600F061FF002074 -S315080027B038BD00BF90F8CC350B7090F8CD254A701F -S315080027C090F8CE3590F8CF2503EB02224A8090F890 -S315080027D0D03590F8D12503EB02228A8090F8D235BD -S315080027E090F8D32503EB022293B2CB800121C0F8DF -S315080027F0403180F81111704710B58021044601F068 -S315080028001FF82046002101F01BF82046BDE81040BD -S3150800281000F02EBF70B54B788A88012B0C4605460A -S31508002820D6B21CD003D3032B25D0002070BD90F858 -S315080028301231022B17D0032B23D1130646D406EBED -S31508002840860600EBC60696F87603002848D1264A7F -S315080028501060284624490222FFF768FFE5E790F84A -S315080028601231022B11D1002EDFD0802EDDD0314659 -S3150800287000F0E6FFD9E790F81221022AF3D0032ADE -S3150800288019D0FFF7B9FF002070BD032BF9D14A888C -S31508002890002ACAD156B1802E08D0314600F0F0FF82 -S315080028A0D5F8E41528468B68214698472846FFF749 -S315080028B061FF002070BD49880029F1D1002EEFD0B4 -S315080028C0802EEDD0314600F0BBFFE9E702F07F022B -S315080028D002EB820100EBC10393F81E010028B6D073 -S315080028E0014901200860B4E7C810002038B590F8FF -S315080028F01231032B04460D4603D0FFF77DFF002057 -S3150800290038BD0A79012AF8D8D0F8E4359A6890478C -S31508002910E8880028F3D12046FFF72CFFEFE700BF31 -S3150800292070B54B7882B00C460546092B11D8DFE8FE -S3150800293003F0374A105F107492100517E288012ACF -S3150800294007D190F81211022900F02C81032900F012 -S31508002950D28028462146FFF74FFF002002B070BDFF -S31508002960A178A54E01293170F3D890F812010228F2 -S3150800297000F01C810328ECD1002900F0318195F87C -S315080029801011012908D02846FFF7C8FE31782846D5 -S3150800299085F81011FFF7B6FE2846FFF7EBFEDCE7D1 -S315080029A090F81211881E0128D3D8944BD5F818210F -S315080029B0012119600AB10320186028468F490222AE -S315080029C0FFF7B4FEC9E790F81201831E012BC0D8A1 -S315080029D061880129C1D1D5F8E40500228368C5F8C4 -S315080029E018212846214698472846FFF7C3FEB4E72C -S315080029F06388012B00F0EE80022BAED1A18811F07E -S31508002A00FF0FAAD10269080A431E5268042B7AD816 -S31508002A10DFE803F0828A868E7600A188002998D19D -S31508002A20E088002895D1668895F8122106F07F037C -S31508002A30032A1E468DD0284685F81431194600F01B -S31508002A403FFF2846FFF796FE002E00F0BF800220C3 -S31508002A5085F8120181E76088020A531E062B3FF6A5 -S31508002A6078AF01A151F823F0D52A0008972A000863 -S31508002A70852A000853290008532900085329000805 -S31508002A8053290008C1B205293FF663AFDFE801F014 -S31508002A9081786F665D54D5F8E435A8789A6A0DF1A1 -S31508002AA006019047014602204870C5F8F015BDF8A2 -S31508002AB00630002B3FF451AFE288002A3FF44DAFB1 -S31508002AC0934228BF134628461A46ADF80630FFF744 -S31508002AD02DFE42E7D5F8EC15A8780B680DF106012E -S31508002AE09847E288402A014603D095F81201012842 -S31508002AF0DDD10823E1E700F58871FFF717FE2CE71B -S31508002B00052161F3061201233D4985F81631284649 -S31508002B100A60FFF72FFE20E7012060F30612F2E7AE -S31508002B20032363F30612EEE7022161F30612EAE7CE -S31508002B30042060F30612E6E7D5F8EC25A878936931 -S31508002B400DF1060198470146B1E7D5F8EC15A878C6 -S31508002B504A690DF1060190470146A8E7D5F8EC3514 -S31508002B60A8781A690DF10601904701469FE7D5F83E -S31508002B70EC15A878CB680DF106019847014696E74B -S31508002B80D5F8EC25A87893680DF106019847014613 -S31508002B908DE7D5F8EC15A8784A680DF10601904737 -S31508002BA0014684E71749FFF7C1FDD6E600293FF439 -S31508002BB0F3AE0121032385F8101185F81231284652 -S31508002BC0FFF7A0FD2846FFF7D5FDC6E6012185F8E3 -S31508002BD01211C2E6D0F8E425C0F81831936800E768 -S31508002BE0022285F8122185F810112846FFF796FD6E -S31508002BF02846FFF7BFFDB0E6CC100020C410002021 -S31508002C00C00F0020D010002030B4F0B10378F3B123 -S31508002C100446002314F8015F0133DBB2002DF9D115 -S31508002C205C00A31CDCB2138003220C704A70027885 -S31508002C305AB1022300255C1CE4B2CA540D5510F89B -S31508002C40012F0233DBB2002AF5D130BC70470224CB -S31508002C502346E8E730B5054683B0002303200193F1 -S31508002C6001F050FAEB681A694FF454640192C0F205 -S31508002C7003040FE001F046FAEB681A69019201991C -S31508002C80032000290CDB01F03DFAEB681969013CC9 -S31508002C90019124D001990320002904F1FF34E9DACF -S31508002CA0019840F0010201920199196118694FF4DF -S31508002CB054620190C0F2030208E018690190019974 -S31508002CC0C90709D51869013A019005D0019911F08B -S31508002CD0010F02F1FF32F0D1032001F013FA0020B0 -S31508002CE003B030BD10B4C47814BB00EB82000333C4 -S31508002CF09B10D0F8D0001BD051F8042B026001229B -S31508002D005C1E0431934204F0010411D034B151F829 -S31508002D10044C022204319342046009D051F8044C51 -S31508002D20046051F8044B0232043193420460F5D131 -S31508002D30002010BC704700BF033270B49510D0F85D -S31508002D40D0401ED00B4620686A1E43F8040B02F0DA -S31508002D50010001220433954211D030B120680222C5 -S31508002D6043F8040C0433954209D0266843F8046CEA -S31508002D70266843F8046B023204339542F5D101EB19 -S31508002D808501084670BC70472DE9F00F0023012223 -S31508002D904024012984B0C3708270848000F0BF800B -S31508002DA0002900F099800178427800914FF4006478 -S31508002DB0C3600461002A00F0D4804FF460654FF4C4 -S31508002DC088664FF480610395029601919B464FEA07 -S31508002DD0421AAAF1200220230BF510650BF530667E -S31508002DE0C2F34014021D5345856146651ED04CB199 -S31508002DF00BF512640BF53261402394615165043278 -S31508002E00534513D0814603F1200705EB030806EB6B -S31508002E10030CE8194033F719C2F81880C2F854C0F1 -S31508002E20D061976508325345EDD14846019C009913 -S31508002E304461029CC0F8CC40002945D0009D0BF5A2 -S31508002E40A06202EB4515AC1A0BF5A463203CC0F84A -S31508002E509020021DAB42C4F3401111D031B1C2F823 -S31508002E6090300BF5A8630432AB4209D003F1200475 -S31508002E70C2F890304033C2F894400832AB42F5D1DC -S31508002E80009C0BF5805202EB0435A91A0BF500538A -S31508002E90A1F58051C0F8D020021DAB42C1F3003124 -S31508002EA012D031B1C2F8D03003F580530432AB42A8 -S31508002EB00AD003F58054C2F8D03003F50053C2F89F -S31508002EC0D4400832AB42F4D10399C0F80C11002063 -S31508002ED004B0BDE8F00F70470C254FF4A066002338 -S31508002EE0C1720570C6804FF4606100954FF4806624 -S31508002EF04FF4886506224FF40064C4F20403C4F252 -S31508002F000401C4F20405C4F2040642700391029552 -S31508002F100196C4F204049B46C360046157E708257A -S31508002F200226C1724FF4A0710570C18006724FF473 -S31508002F30606100954FF480664FF4886504224FF46B -S31508002F4000644FF0A043C5F20001C5F20005C5F2C2 -S31508002F5000064270039102950196C5F200049B464D -S31508002F60DAE74FF460634FF488614FF480640393A3 -S31508002F7002910194934659E738B5037A0025012B47 -S31508002F8004461ED0C168CA6842F04003CB60FFF70A -S31508002F9061FE607AE16800280CBF4FF450224FF4B6 -S31508002FA0E8128A63142001F0BBF8E278012A06D1F8 -S31508002FB0E068816821F03E0343F02A02826000201F -S31508002FC038BDC068617A836B65F3104309B143F471 -S31508002FD080138363C2686FF386126FF396526FF39A -S31508002FE051426FF3D342C2602046FFF733FEE078C2 -S31508002FF00128E4D1052161F34405E36845F020057D -S315080030009D60D2E7C3689A6842F001009860002084 -S31508003010704700BFC3689A6822F0010098600020D4 -S31508003020704700BF00B583B000230193019A42F0B0 -S3150800303020030193019A61F38A1201920199C268E9 -S31508003040116110694FF454630190C0F2030308E05C -S31508003050106901900199880609D51069013B01900C -S3150800306005D0019911F0200F03F1FF33F0D10320A9 -S3150800307001F048F8002003B000BD00BF00B583B0DA -S3150800308000230193019941F010020192019BC06847 -S31508003090036101694FF454630191C0F2030308E028 -S315080030A001690191019AD10609D50169013B01918E -S315080030B005D0019A12F0100F03F1FF33F0D1032067 -S315080030C001F020F8002003B000BD00BFC26808B5B3 -S315080030D0D36801296FF35D736FF39E7308D009B93E -S315080030E043F080433220D36001F01AF8002008BD6F -S315080030F043F00053F6E700BFC368586900F00101C2 -S3150800310081F00100704700BFC3685A69986910408A -S31508003110704700BF30B4C3684FF4006200216FF0F7 -S315080031208044C8F200024FF0FF3599615C615D602A -S315080031305C619A61C27898698A4214BF0C46102469 -S315080031400C2244F48724C4F23802224320EA0200FF -S3150800315010439861084630BC704700BFF8B505466D -S31508003160D0F80C012A6900210160166861F3CC26A3 -S3150800317016600B46E97A012956D010212846FFF732 -S3150800318051FF2846FFF77AFF2E6900224FF0FF33DA -S3150800319032617261B361F2616878002830D02946DD -S315080031A02C469646FF27A3691868C0F3076000F007 -S315080031B08000C0B2002814BF4FF09040002018606D -S315080031C0C3F810E09F606B78013204349342EAD862 -S315080031D0B3B100221746FF244B6D1868C0F3076089 -S315080031E000F08000C0B2002814BF4FF090400020C5 -S315080031F018601F619C606B78013204319342EBD8EA -S31508003200306940F480733361EA78012A07D102F500 -S315080032108171C0F20101402060F3594131632846AB -S31508003220FFF778FF0020F8BD1668E868A027802415 -S315080032304FF4001167F30F0346F00306166064F3B4 -S315080032401F4364F30F014FF4907244628162C0F821 -S31508003250043162F30F03C0F220034FF4A071C0F8E3 -S31508003260083161F30F036FF31F43C0F80C3184E78D -S3150800327003699868C0F341014B1E022B02D8024A23 -S31508003280D05C70470320704770A400080369826900 -S3150800329098681168C0F34100022808D06FF30A0144 -S315080032A011605A6842F48071596000207047032003 -S315080032B060F30A01F4E700BF70B44B780022012BD3 -S315080032C024D00B7800EB8304012505FA03F3646D1B -S315080032D063F31F422368C3F3072505F08005EDB2A3 -S315080032E06DB98E68CD78C98866F30A0365F393438A -S315080032F061F3995343F0805343F400412160006918 -S31508003300C3691A43C261002070BC70470C7800EB91 -S31508003310840503FA04F363F30F02AC69DAE700BF26 -S3150800332030B44A780023012A1C4613D00A7800EBE9 -S315080033308201012505FA02F2496D62F31F4400690C -S315080033406FF3CF330B60C36923EA0404C46100201A -S3150800335030BC7047097800EB810502FA01F262F386 -S315080033600F04A969EBE700BFF0B44B78012B3ED0F8 -S315080033700A784D6900EB8204636D1C681A69EDB121 -S315080033808F68EE19751EB5FBF7F5AE05B60D65F334 -S31508003390DC4207FB06F666F312021A61C378012BB4 -S315080033A016D0CB78012B1CD0097800EB810044F0AD -S315080033B00444436D1C600020F0BC70478D6865F3BB -S315080033C01202012565F3DC421A61C378012BE8D1A4 -S315080033D00A780B6900EB8202526D5361CB78012B98 -S315080033E0E2D14A79002A67D044F00054DCE70E7827 -S315080033F04A6900EB8605AD692E682C69002A56D005 -S315080034008B68CF7802EB030C0CF1FF3C62F31204D5 -S31508003410BCFBF3F363F3DC44012F08BF67F35E7468 -S315080034202C61C478012C51D0CB78012B47D052B1EE -S3150800343003690C785D6B012707FA04F42C435C6377 -S31508003440CB78012B3BD00C7800EB840346F004467E -S315080034509C692660CC78012CADD1C578CB680978F3 -S31508003460002DA8D192B200EB8100D11C8A10D0F8A9 -S31508003470D000A0D053F8041B551E0433012A01605E -S3150800348005F00105214696D035B153F8044C0221C2 -S3150800349004338A4204608ED053F8044C046053F80F -S315080034A0044B023104338A420460F5D183E762F3A0 -S315080034B0120463F3DC44B3E744F0805474E7046908 -S315080034C0A368DC0509D446F00056BCE70C780B69FE -S315080034D000EB8404A4696361B2E746F08056B2E75C -S315080034E0F0B44B78012B82B02DD00C784A6900EBEA -S315080034F084056B6D1D681E690096F2B18E689DF88D -S3150800350000409DF802204E6166F30604012666F324 -S31508003510C4028DF800408DF80220009A1A61C3781B -S31508003520012B3FD0097800EB810045F00442436D3A -S315080035301A60002002B0F0BC70479DF800409DF864 -S3150800354002208E68E0E782694C691668156900955D -S31508003550002C2ED08B689C423FD99DF800404B61C9 -S3150800356063F306048DF800409DF80230012464F3E5 -S31508003570C4038DF80230009B1361C378012B25D054 -S3150800358046F004431360C278002AD2D14B69002B57 -S31508003590CFD003690A78596B012000FA02F20A4370 -S315080035A05A63C6E70A780B6900EB8202526D5361CB -S315080035B0B8E79DF800709DF8025064F3060763F3B8 -S315080035C0C4058DF800708DF80250D4E70C780B69A5 -S315080035D000EB8404A4696361D2E79DF8003064F3C4 -S315080035E006038DF80030BFE74B780978012B00EB0E -S315080035F0810006D0436D1A6842F400111960002054 -S31508003600704780690368C3F3076202F08001CAB293 -S315080036100AB143F0804343F400110160002070476B -S315080036204B78012B0B78C97800EB83000CBF8269B5 -S31508003630426D1368881E6FF35553012898BF43F0EF -S31508003640805313600020704703699A69D86910404F -S31508003650000C704700EB810102694B6D996850694F -S315080036600840704703699869D969084080B270476D -S3150800367082B00122002362F3C40300210091C02214 -S315080036808DF8023018238DF803208DF80030416D2F -S31508003690009A0A61C378012B06D100F2CC50486122 -S315080036A00A684FF080220A6002B0704770B5044677 -S315080036B0FFF76AFB62780126002384F8126184F812 -S315080036C014318AB31946402503EB830004EBC00284 -S315080036D082F81C31A2F8223182F81D6182F81F1186 -S315080036E0C2F82451C2F82811C2F8301160780133A3 -S315080036F09842E9D8C0B100231946402503EB830256 -S3150800370004EBC20080F87433A0F87A3380F8751396 -S3150800371080F87713C0F87C53C0F88013C0F8881374 -S31508003720627801339A42E9D82046FFF773FC2046AF -S31508003730FFF722FC00212046FFF7C8FC2046FFF7CA -S315080037400DFD2046BDE87040FFF75CBC38B501F0BA -S315080037507F0404EB8405090600EBC50511D405F5BD -S315080037605D7185F87443002405F55C754C708A60B4 -S31508003770CB70022B01D100230B71FFF79DFD0020B2 -S3150800378038BD05F58E7185F81C4101254D708A6096 -S31508003790CB70CC80EDE700BF08B501F07F03CAB255 -S315080037A003EB830100EBC10112F0800F14BF01F592 -S315080037B08E7101F55D71D2090B704A70FFF7B0FD85 -S315080037C0002008BD70B501F07F0404EB840500EB0A -S315080037D0C50505F55D71002685F87443CA604B6119 -S315080037E08E614E70C378012B05F55C7508BF0A61BA -S315080037F01CB1FFF7B9FD002070BDFFF771FE002070 -S3150800380070BD00BF70B501F07F0404EB840500EBC2 -S31508003810C50505F58E710126CA600A61002285F87C -S315080038201C414E7005F58C758A614B611CB1FFF71A -S315080038309BFD002070BDFFF753FE002070BD00BF42 -S31508003840CAB2130610B511D401EB810300EBC30409 -S3150800385004F55D7301F07F01D209012419709C708B -S315080038605A701946FFF7C0FE002010BD01F07F010F -S3150800387001EB810400EBC40303F58E73ECE700BF8C -S31508003880CAB210B5140611D401EB810300EBC304C8 -S3150800389004F55D7301F07F010024D20919709C704C -S315080038A05A701946FFF7BCFE204610BD01F07F018D -S315080038B001EB810400EBC40303F58E73ECE700BF4C -S315080038C003690022186861F30A1202431A607047F6 -S315080038D003695A6842F002005860032000F020BCD1 -S315080038E02DE9F04F85B00446FFF706FC10B905B080 -S315080038F0BDE8F08F2046FFF707FC83460028F6D080 -S31508003900C0F3074808F00800C0B2002840F0C48099 -S3150800391008F004085FFA88F3002B56D15FFA8BF596 -S3150800392005F00203DAB212B1E16802264E61CBF362 -S31508003930076303F08002D1B2002940F05C81CBF323 -S31508003940072606F00803D9B2002940F0228105F0BF -S315080039500802D3B2002B40F0128105F01005E9B237 -S31508003960002940F0E58006F01003D9B2002940F09E -S31508003970968106F02006F6B2002E40F07881CBF349 -S31508003980074505F01003DAB2002A40F0658105F014 -S315080039902005EDB2002D40F05481CBF3076303F008 -S315080039A04002D1B2002940F041810BF00403DAB29B -S315080039B0002A9CD0E3685D6805F00401C8B20028B7 -S315080039C040F016825D60012091E72046FFF74AFE27 -S315080039D0074600285ED026464FF00009CDF804B009 -S315080039E0A24626E003F00801CCB214B1B069082358 -S315080039F0836003F01002D5B215B1B16910238B604C -S31508003A0003F04004E0B210B1B2694023936003F0BA -S31508003A100205E9B211B1B4690223A36003F080007C -S31508003A20C2B2002A40F0908104367F0809F10109E4 -S31508003A302DD0F807F8D5DAF810205FFA89F8146956 -S31508003A40506B0AEB880120FA08F58869EB01816852 -S31508003A50DDB225430D40EBB2D907C3D540F21804B1 -S31508003A60C2F20004536B2168012404FA09F023EA20 -S31508003A7000035363B5694A68AC60504641469047AF -S31508003A809AF80350A54200F09A812346AAE7DDF882 -S31508003A9004B05446012041E72046FFF7D5FD054608 -S31508003AA0002843D0A2462646002705E001370436FB -S31508003AB06D080AF1280A39D0EA07F7D55FFA87F9B7 -S31508003AC020464946FFF7C6FDC0B2C30716D5736D33 -S31508003AD001219960E2788A4200F0818140F218005B -S31508003AE0C2F200004946036820461A68904794F8CF -S31508003AF00390B9F1010F00F06B81012000F0020379 -S31508003B00DAB212B1716D0220886000F00803DAB2E9 -S31508003B10002ACBD040F21801C2F2000120460B68F9 -S31508003B209A689047716D08208860BFE70120EFE624 -S31508003B30E3689F6927F010029A611D6A05F00F0075 -S31508003B4000EB8001C5F3434204EBC107022A07F5DF -S31508003B505D7700F0DB80062A0BD104F2CC512046B3 -S31508003B600822FFF7E9F8B869E368C5F30A154119A9 -S31508003B70B961986940F010029A610120F3E6A248FB -S31508003B8001682046CA689047E36808205861012002 -S31508003B90E3E69D4894F81221036800215B698DF8D5 -S31508003BA00F1020468DF80F2098472269E068916823 -S31508003BB04FF400634361A27ADAB1CB0719D594F8BA -S31508003BC01501012815D19DF80F10032911D1D4F834 -S31508003BD00C311A6842F00100186019684FF46D42FA -S31508003BE0CEF2000241F003001860136943F00601A3 -S31508003BF011610120ABE6A07A40B1D4F80C61D4F883 -S31508003C000C316FF341066FF300061E6020697E4A89 -S31508003C104168166821F001034360B1692046884768 -S31508003C20E0684FF000424261012088E67648036862 -S31508003C3020465A6A9047E1684FF080404861012063 -S31508003C40B3E671490B6820461A6A9047E0684FF454 -S31508003C50001141610120A0E66B4801682046CB6946 -S31508003C609847E0684FF48012426101208FE62046AB -S31508003C70FFF70CFBE5682046ED68FFF7F9FA03281D -S31508003C8059D0012040220521A070A28061F38D251C -S31508003C90E168CD604FF4005501204D616FE6256956 -S31508003CA06868002720F001026A6020463946FFF757 -S31508003CB0B9F963785BB123463A46FF2599698D6061 -S31508003CC0586D85606178013204338A42F6D301253E -S31508003CD0236965F30F070B204FF0FF3165F31F4784 -S31508003CE09961DF61586118611A686FF30A121A60E0 -S31508003CF02046FFF7BDFC4448E36802684FF480514C -S31508003D005961204613699847284632E647F6F07205 -S31508003D102A40002A3FF42DAFC5F30A152A46F9684A -S31508003D202046FFF709F8F868BA69E3684119551992 -S31508003D30F960BD611DE700234FF400700922A370E6 -S31508003D40A08062F38D25A3E709EB89050AEBC50177 -S31508003D5001F58E75B1696A69A869AC68D1F818C0A9 -S31508003D60131AA34234BF9B46A3460BF1030E1FFA50 -S31508003D708CFCBCEB9E0F1FD982421DD9E2B1E968C3 -S31508003D8004E06C699C4216D9E31AAC689C4228BFC9 -S31508003D901C46A3B242465046FEF7A4FFE968AB6943 -S31508003DA00919E318E960AB61B0698269033492B214 -S31508003DB0B2EB940FE5D8014680258D6034E6B9F15B -S31508003DC0000F03D19AF81131042B1FD02B4609E6B0 -S31508003DD01FB994F81111052911D048468EE61869BD -S31508003DE0DAF87C33C0F312015A1ACAF88C2375E63E -S31508003DF0054B1A682046916A8847E368E2E520463B -S31508003E00FFF736FCE9E700BF180000205046FFF729 -S31508003E102FFCDBE7704700BF704700BF704700BF45 -S31508003E200020012108B5C4F20200FDF713FD10F1C8 -S31508003E30FF3018BF012008BD00B5C7B0002168468D -S31508003E404FF48C7206F07EFA0848694604F016FEAE -S31508003E5048B9009828B19DF8080080F01001C1F310 -S31508003E60001047B000BD0020FBE700BF74A400089F -S31508003E704AF27440C0F60000704700BF10B5074C00 -S31508003E800749002320460A2284F8283204F04CFA0F -S31508003E9010B9012084F8280210BD00BFD4100020F4 -S31508003EA094A4000810B50F4890F82832012B16D0B4 -S31508003EB000F0BCFE00F1640403E000F0B7FE8442A3 -S31508003EC008D34FF4A0504021C4F20100FDF7BEFE0E -S31508003ED00028F2D00448BDE8104004F0FFBD04F005 -S31508003EE007FDE5E7D410002074A40008034890F8FD -S31508003EF02832012B00D0704704F0FABCD4100020F9 -S31508003F0038B5144D95F82832012B044615D021787A -S31508003F1091B14FF4A050C4F20100FDF78FFE4FF4A3 -S31508003F20A050C4F201008021FDF790FE0028F6D0CB -S31508003F3014F8011F0029ECD138BD294604F058FEB3 -S31508003F400028E4DA0021284685F8281204F0D0FC77 -S31508003F50DDE700BFD410002000B583B0FDF79AFA5C -S31508003F6001200146FDF7EEFC002001240225064645 -S31508003F706946C4F2020000948DF804608DF8076063 -S31508003F808DF80550FDF7BEFB20202146FDF704FD00 -S31508003F9004202146FDF7D6FC4FF40060C4F2020067 -S31508003FA006210822FDF75CFC4FF400600822C4F2E3 -S31508003FB002000721FDF754FC4FF400604023C4F2C9 -S31508003FC00200694600938DF806608DF807408DF863 -S31508003FD004508DF80550FDF795FB4FF400608022DC -S31508003FE0C4F20200694600928DF80450FDF78AFB78 -S31508003FF028462146FDF7A6FC4FF48060C4F202006D -S3150800400005210922FDF72CFC4FF480600922C4F231 -S3150800401002000621FDF724FC4FF480606023C4F2F9 -S315080040200200694600938DF804508DF805508DF806 -S3150800403006608DF80740FDF765FB4FF0C060214626 -S31508004040FDF79CFC01F05AF901F06AF9FCE700BF9C -S31508004050F0B50120002483B0C4F202040146FDF73E -S3150800406071FC00264FF4C8530327022269462046EE -S3150800407000938DF804208DF805708DF806608DF88C -S315080040800760FDF73FFB204608210A22FDF7E8FBFB -S3150800409020460B210A22FDF7E3FB0A2220460C21C3 -S315080040A0FDF7DEFB01254FF40073204669460093B1 -S315080040B08DF805708DF804608DF806508DF8076048 -S315080040C0FDF720FB694620464FF4806200928DF882 -S315080040D006508DF807508DF80570FDF713FB0A2179 -S315080040E00A462046FDF7BCFB29464FF48040FDF7FB -S315080040F053FC80202946FDF733FC03B0F0BD00BF12 -S31508004100704700BF10F1FF3008D31C2100BF4B1EBB -S3150800411000BF591EFAD110F1FF30F6D2704700BF22 -S315080041204FF47A7303FB00F010F1FF3008D31C221A -S3150800413000BF511E00BF4A1EFAD110F1FF30F6D259 -S31508004140704700BF202340F248000B80C2F20000EF -S31508004150704700BF08B590F81231032B01D0002034 -S3150800416008BD00F0B1FF002008BD00BF08B500F08B -S31508004170ABFF002008BD00BF084608B501F01EF8D1 -S31508004180002008BD10B581210446FFF705FB20462F -S315080041900121FFF701FB002010BD00BF10B58121EA -S315080041A0044640220223FFF7D1FA012140220223C6 -S315080041B02046FFF7CBFA41F2003220460121C2F22F -S315080041C000024023FFF7FEFA002010BD10B50A785A -S315080041D012F0600F0B46044606D14A780A2A05D023 -S315080041E00B2A14D0062A07D0002010BD0F49012239 -S315080041F0FEF79CFA002010BD4888010A21290ED036 -S315080042000B4917222046FEF791FA002010BD8B783D -S3150800421013B9064A1360E7E7FEF7EEFAE4E7DA8829 -S315080042200449172A28BF1722ECE700BF40130020CD -S31508004230510000205A00002041F20030C2F200006E -S31508004240704700BF122340F2B4000B80C2F2000090 -S31508004250704700BF042340F2B0000B80C2F2000092 -S31508004260704700BF10B540F6C474C2F200044AF2A3 -S31508004270A4400A46C0F600002146FEF7C5FC2046C3 -S3150800428010BD00BF10B540F6C474C2F200044AF26D -S31508004290BC400A46C0F600002146FEF7B5FC20469B -S315080042A010BD00BF10B540F6C474C2F200044AF24D -S315080042B0C4400A46C0F600002146FEF7A5FC204683 -S315080042C010BD00BF10B540F6C474C2F200044AF22D -S315080042D0D4400A46C0F600002146FEF795FC204663 -S315080042E010BD00BF10B540F6C474C2F200044AF20D -S315080042F0E4400A46C0F600002146FEF785FC204643 -S3150800430010BD00BF704700BF704700BF704700BFB1 -S315080043100020FFF77FBD00BF0120FFF77BBD00BF70 -S31508004320FFF77CBDFFF778BD72B6704762B6704777 -S315080043304AF2F840C0F60000382100F0A5BF00BFD9 -S315080043402DE9F04F594B83B000204FF4FA724AF228 -S31508004350104840F2FF3B1C18861C6178185C45180B -S3150800436005FB022498FBF4FC04FB0CF4C4F5244476 -S315080043700CF1FF35103403EB06091FFA85FA14B958 -S31508004380DA4540F28F80985D99F80110451805FBCB -S31508004390022498FBF4F504FB05F4C4F52444103410 -S315080043A01CB9013DACB25C457CD9B01C2428D2D1DD -S315080043B03F48EC2100F068FF4FF0FF354FF4D0443A -S315080043C0C4F2000400236361226842F400412160BC -S315080043D02068020404D501F059F823681804FAD4B1 -S315080043E04FF4D044C4F20004226822F0020121608E -S315080043F0206840F0010323606268D30704D401F003 -S3150800440045F86168CA07FAD5019C013F601E3B055D -S315080044104FF4D044C4F2000443EA00473D43E56143 -S31508004420226822F0010121606068C10704D501F005 -S315080044302DF86368DB07FAD44FF4C840C4F20000CD -S315080044400022D0F8001241F00103C0F80032D0F87B -S315080044501C1221F48043C0F81C32D0F80C1241F427 -S315080044608043C0F80C32C0F8B022C0F8B422D0F8A5 -S31508004470042222F48041C0F80412D0F8143223F43E -S315080044808042C0F81422D0F81C1241F48043C0F8C8 -S315080044901C32D0F8002222F00101C0F8001203B045 -S315080044A0BDE8F08F01900F4688E700BF20A60008F8 -S315080044B094A5000838B54FF4D043C4F20003044667 -S315080044C0986843010D463BD54FF4D043C4F2000328 -S315080044D0D3F8802102F00101C3F88011D3F88001D6 -S315080044E040F07C4242F40011C3F88011C3F88451AD -S315080044F0A278E57820786178120442EA05650543D2 -S3150800450045EA0120C3F88801A279E579207961791D -S31508004510120442EA0562024342EA0120C3F88C010A -S31508004520D3F8801141F00102C3F880219868400150 -S3150800453005D41C4600F0AAFFA3685901FAD538BD70 -S3150800454002484FF4A07100F09FFEBDE794A500084D -S315080045504FF4D043C4F20003DA6812F0030110D016 -S31508004560D3F8B01140F26762B2EB515F0BD000206E -S315080045704FF4D043C4F20003DA6842F02001D96050 -S31508004580704708467047D3F8B8110170D3F8B821B8 -S31508004590110A4170D3F8B821110C8170D3F8B821EB -S315080045A0110EC170D3F8BC210271D3F8BC110A0AE6 -S315080045B04271D3F8BC110A0C8271D3F8BC31190EBA -S315080045C0C1710120D4E700BFFFF7AEBE10B500F0F9 -S315080045D0F5FA00B910BDFFF723FC0028FAD000F061 -S315080045E005FF00F00DFB00F0EBFA4EF60853CEF28D -S315080045F0000320F0604020F07F021A6000F0E0FA25 -S315080046004468FFF793FEA04710BD00BFF8B5571ED4 -S31508004610BFB20AB30E1A441C825DC343E719F918E0 -S31508004620027001F0010500F031FFBC4215D035B12A -S31508004630A05D04F8010B00F029FFBC420ED0A25D74 -S31508004640254605F8012B00F021FFAB5D63706C1C55 -S3150800465000F01CFFBC42F2D1F8BDF8BDF8BD00BFA2 -S3150800466010B5044600F012FF4BF6FF73C0F60003C0 -S315080046709C4205D94FF6FF70C0F60000844279D9EE -S3150800468000F004FF4FF6FF71C0F600018C4205D911 -S315080046904FF6FF72C0F60102944269D900F0F6FEA1 -S315080046A04FF6FF73C0F601039C4205D94FF6FF701B -S315080046B0C0F6030084425FD900F0E8FE4FF6FF71AA -S315080046C0C0F603018C4205D94FF6FF72C0F6050203 -S315080046D0944255D900F0DAFE4FF6FF73C0F605038B -S315080046E09C4205D94FF6FF70C0F60700844245D9AB -S315080046F000F0CCFE4FF6FF71C0F607018C4205D9D3 -S315080047004FF6FF72C0F6090294423DD900F0BEFE8C -S315080047104FF6FF73C0F609039C4205D94FF6FF70A2 -S31508004720C0F60B0084422DD900F0B0FE4FF6FF719B -S31508004730C0F60B018C4205D94FF6FF72C0F60D0282 -S3150800474094420DD900F0A2FE4FF6FF73C0F60D0392 -S315080047509C4203D90820B4F1016F02D3FF2010BD93 -S3150800476007200A4A00EB400102EB8103187A10BDC4 -S315080047700120F6E70020F4E70220F2E70420F0E73C -S315080047800320EEE70620ECE70520EAE774A6000812 -S315080047902DE9F84306460068FFF762FFFF283AD07E -S315080047A0FCF704FFF320FCF71DFFFCF721FF0128A7 -S315080047B037D0002418E054F808202C1D974224D13D -S315080047C0D6F800804F6805EB080900F05FFE4846FA -S315080047D03946FCF73BFF082817D155F808008742E9 -S315080047E013D1B4F5007F1AD03319D6F800805F6864 -S315080047F004EB080900F04AFE39464846FCF726FF4E -S31508004800251D082806EB0501D5D00024FCF7E0FE97 -S315080048102046BDE8F88300242046BDE8F883012435 -S31508004820F4E7FCF7D5FE0024F2E700BF124A9042EF -S3150800483038B504460D461CD04FF44043C0F6000375 -S31508004840994208D0FFF7A4FF10B1E805C10D19B1C8 -S315080048500024204638BD14462268954207D02046D3 -S31508004860294640F8045B4FF40072FFF7CFFE204656 -S3150800487038BD024CE9E700BF441300204815002064 -S315080048802DE9F84F064600684FEA512A9946431C17 -S315080048900C4615464FEA4A2A70D0824507D030465C -S315080048A05146FFF7C3FF0646002864D00068241A5D -S315080048B031190C1D371D00F0E9FD40F2FF18E31B06 -S315080048C009F1FF3B43450BF0010B0AF5007A40D886 -S315080048D015F8012BB9F1010904F8012B2DD0BBF10C -S315080048E0000F0BD000F0D2FDE01B40453AD815F872 -S315080048F0011BB9F1010904F8011B1ED000F0C6FD21 -S31508004900E31B434509F1FF391AD815F8012B04F8BA -S31508004910012B00F0BBFDE01B4045E8D93046514667 -S31508004920FFF784FF0646071D28B33C4615F8011B0A -S31508004930B9F1010904F8011BE0D10120BDE8F88F9F -S3150800494030465146FFF772FF0646071D98B13C46AA -S31508004950DBE730465146FFF769FF064658B1071DA3 -S315080049603C46B5E730465146FFF760FF064610B1AC -S31508004970071D3C46BBE70020BDE8F88F3046514688 -S3150800498040F804AB4FF40072FFF740FE306884E746 -S3150800499041F2485241F24433C2F20002C2F2000325 -S315080049A04FF0FF3111601960704700BF70B50446BB -S315080049B00D461646FFF754FEFF2816D0601E40190E -S315080049C0FFF74EFEFF2810D04FF44043620AC0F6A8 -S315080049D00003B3EB422F0CBF054806482146324672 -S315080049E02B46BDE87040FFF74BBF002070BD00BFE7 -S315080049F04413002048150020F8B505460E46FFF773 -S31508004A002FFE0446681E8019FFF72AFEFF2C05466E -S31508004A104CD0FF284AD0844248D8022C46D90B28C5 -S31508004A2044D8FCF7C3FDF320FCF7DCFDFCF7E0FDFA -S31508004A30012837D0204E2B1B03F0010700F026FD76 -S31508004A40022136F81400FCF721FE08282AD1013481 -S31508004A50E4B2A5422CD3D7B100F018FD022136F8EE -S31508004A601400FCF713FE08281CD1611CCCB2A54221 -S31508004A700DD21DE000F00AFD36F814000221FCF7FD -S31508004A8005FE631C0828DCB20CD1A54210D300F041 -S31508004A90FDFC022136F81400FCF7F8FD621C082814 -S31508004AA0D4B2E7D0FCF794FD0020F8BD0020F8BD8D -S31508004AB0FCF78EFD0120F8BD44A60008F0B5104BA2 -S31508004AC01A68013283B019D003F114009F685E6832 -S31508004AD0DD681C6907C8BB195B191B19181841182A -S31508004AE08B1802AA584242F8040D4CF28810C0F6F8 -S31508004AF000000421FFF75AFF03B0F0BD0120FBE7D1 -S31508004B00441300204CF204004FF440414CF20803D1 -S31508004B10C0F60000C0F60001C0F600034CF20C0215 -S31508004B2070B4C0F600020D6804681E684CF21003E3 -S31508004B30C0F600034CF214016019C0F600011568AE -S31508004B401C6809684CF218028019C0F600024CF27B -S31508004B5088134019C0F60003001912681B6841182B -S31508004B608A18D018D0F1010038BF002070BC7047F1 -S31508004B700A4808B50368013302D0FFF709FE58B1A1 -S31508004B80074801684B1C05D0FFF702FE003018BF26 -S31508004B90012008BD012008BD08BD00BF4413002040 -S31508004BA0481500204FF44040C0F60000704700BF8B -S31508004BB0FFF7EEBEFFF7FABEFFF71EBFFFF7A2BF6D -S31508004BC0FFF7F0BF08B5FFF779FF00B908BDBDE8E4 -S31508004BD00840FFF7CDBF00BF4EF21003CEF2000328 -S31508004BE041F24C7249F23F000021C0F20200C2F2C3 -S31508004BF000021960586005209960186011607047B6 -S31508004C004EF21003CEF2000300221A60704700BF6E -S31508004C104EF21003CEF200031868C30303D5024907 -S31508004C200A68531C0B6070474C1700204EF210039D -S31508004C30CEF200030449186810F4803F086802D0D1 -S31508004C4001300860704770474C17002038B5054694 -S31508004C504FF4A0502021C4F20100FCF7F7FF012809 -S31508004C60044602D00024204638BD4FF4A050C4F2B2 -S31508004C700100FCF7E7FF2870204638BD10B54FF451 -S31508004C80A05484B00023C4F20104694620464FF4B8 -S31508004C906142ADF80430ADF80630ADF80830ADF82D -S31508004CA00C300C230092ADF80A30FCF749FF204679 -S31508004CB00121FCF7B5FF04B010BD00BF4029F8B5C7 -S31508004CC00E4607464AD84FF4A050C4F20100802188 -S31508004CD0FCF7BCFF002830D123487A2100F0D4FA2B -S31508004CE056B3002407E0832101341F4800F0CCFAAC -S31508004CF0A3B29E421FD900F0C9FB4FF4A050C4F2DC -S31508004D00010080213D5DFCF7A1FF0028EBD04FF4A0 -S31508004D10A050C4F201002946FCF790FF4FF4A050BA -S31508004D20C4F201008021FCF791FF0028F6D0013477 -S31508004D30A3B29E42DFD8F8BDF8BD4FF4A050C4F226 -S31508004D4001003146FCF77AFF4FF4A050C4F2010087 -S31508004D508021FCF77BFF0028F6D0C1E702487621C0 -S31508004D6000F092FAAFE700BFE0A600082DE9F0418F -S31508004D701F4C257880464DB91E4E3046FFF766FF14 -S31508004D800128074627D00020BDE8F0811A4E194FA2 -S31508004D903078411C7818FFF759FF012805460AD0D4 -S31508004DA0FFF744FF154B1A6864329042EBD900208E -S31508004DB02070BDE8F08130783A78411CCBB29A422F -S31508004DC03370E0D14046791CFFF720FC00222270A0 -S31508004DD02846BDE8F08130780028D4D0FFF726FFB2 -S31508004DE00649054B08601D7027702846BDE8F08106 -S31508004DF09817002054170020501700209C170020F1 -S31508004E00012838B504460D4604D910484FF4CD712B -S31508004E1000F03AFA0E4A04EB440002EBC003197C90 -S31508004E205C7C8C4210D0DC6825705A7CD96858683E -S31508004E30541C4A1C82425C74DA6003D91968012042 -S31508004E40D96038BD012038BD002038BD6CA70008E0 -S31508004E50A4170020012838B504460D4604D90F4882 -S31508004E604FF4DE7100F010FA0D4A04EB440402EB2D -S31508004E70C403587C80B19968087828709A685C7C65 -S31508004E805868511C013C81425C74996003D91A68C0 -S31508004E9001209A6038BD012038BD00BF6CA7000804 -S31508004EA0A41700202DE9F04F41F2D47585B0C2F25F -S31508004EB000050395039E41F2A47441F69807C2F2D1 -S31508004EC000044FF0010EC2F200074FF0400A06EB4D -S31508004ED00E0C41F2A07807EB0A0640F2C803C2F2AC -S31508004EE00008C2F200036660039E0093002541F69F -S31508004EF0E00040F2940240F2680307EB0E0904F161 -S31508004F00180BA574E56265743D70C8F8005084F8FE -S31508004F102950C2F200000CF13F057146C2F20002A8 -S31508004F20C2F2000386F800E0C4F814B084F82AE058 -S31508004F3084F810A0C4F80890C4F80C90C4F800903F -S31508004F4084F828A0C4F820C0C4F824C0C4F818C03F -S31508004F50E561FDF7BBFB05B0BDE8F08F08B541F686 -S31508004F60E000C2F20000FEF7B3FC0020BDE80840EE -S31508004F70FEF750BF3F292DE9F0418846074654D829 -S31508004F802D4E41463078FFF73BFF012803D02B48CA -S31508004F909E2100F079F9B8F1000F44D008F1FF33EB -S31508004FA003F0010500F072FA30783978FFF728FF28 -S31508004FB0012803D02148A72100F066F901244445B9 -S31508004FC031D27DB100F062FA3078395DFFF718FF0B -S31508004FD0A04203D01948A72100F056F90134A0B21F -S31508004FE0404527D200F052FA395D3078FFF708FFBE -S31508004FF0651C01284FF0A701104801D000F044F9BC -S3150800500000F044FA795D3078FFF7FAFE01284FF090 -S31508005010A7010A4801D000F037F96C1CA1B2414536 -S31508005020E0D3BDE8F081BDE8F08104489A2100F09C -S315080050302BF9A5E7BDE8F081981800206CA70008B1 -S315080050402DE9F0411B4D80461B48FEF749FC2C789C -S3150800505054B91A4E1A4831460078FFF7FBFE012864 -S315080050601ED00020BDE8F081164E154B3178134F3F -S3150800507018784A1CB918FFF7EDFE01280446F0D146 -S3150800508030783A78411CCBB29A423370E9D140461F -S31508005090791CFFF7BBFA00222A702046BDE8F0818A -S315080050A031780029DDD0074B28701C702046BDE8F2 -S315080050B0F08100BFD41E0020E018002058180020F8 -S315080050C0D4170020DC1800202DE9F041364E34783C -S315080050D0012C82B004D935484FF4EE7100F0D4F8AB -S315080050E0334B04EB440003EBC004617C002958D021 -S315080050F0402934BF88464FF0400830782D4F0DF1CF -S315080051000701FFF7A7FE08F1FF35012805F001059D -S3150800511004D026484FF4927100F0B6F89DF807209F -S315080051200124A0453A7036D995B130780DF10701BA -S31508005130FFF790FEA04204D01C484FF4927100F08D -S31508005140A3F89DF8070038550134E3B2984522D9EB -S315080051500DF107013078FFF77DFE651C01284FF435 -S315080051609271124801D000F08FF89DF80710307838 -S3150800517039550DF10701FFF76DFE01284FF49271BD -S315080051800A4801D000F080F86C1C9DF80700E2B2CE -S3150800519090457855DCD80848064A81214346FEF7EB -S315080051A031FB02B0BDE8F081981800206CA7000812 -S315080051B0A417002018180020E01800202F4B00EB39 -S315080051C0800003EBC0012DE9F041B1F88C73002F84 -S315080051D049D02B4E7A1E347802F00105FFF72CF8D9 -S315080051E001782046FFF70CFE012804D0254840F236 -S315080051F0431100F049F80124A74234D98DB1357816 -S31508005200FFF71AF8015D2846FFF7FAFDA04204D019 -S315080052101C4840F2431100F037F80134A0B2874227 -S3150800522021D996F80080FFF707F8015D4046FFF799 -S31508005230E7FD651C012840F24311124801D000F031 -S3150800524023F83478FEF7F8FF415D2046FFF7D8FDCE -S31508005250012840F243110B4801D000F015F86C1CE8 -S31508005260A3B29F42DDD8FEF7E7FF024603480121B5 -S315080052704023BDE8F041FEF7A5BA00BFE0180020BC -S31508005280D41700206CA7000808B500F0FFF8FCE763 -S3150800529010B500F0F7F8012806D000F011FB18B198 -S315080052A00B4C2378012B00D010BDFFF7BFFC094932 -S315080052B00A6802F51C5310339842F5D30020207073 -S315080052C000F008FB0028EFD1BDE81040FFF77EB9D3 -S315080052D0D51E0020D81E002008B541F6D563C2F2B7 -S315080052E0000301221A70FFF7A1FC41F6D861C2F249 -S315080052F000010860BDE80840FFF7CABF08B5FFF718 -S3150800530063F900F0C1F8FFF767FCFFF751FC00F0FE -S31508005310BFFA00F013F8BDE80840FFF7DDBF00BF8D -S3150800532008B500F0B3F8FFF773FC00F0E5FB00F0F2 -S315080053301DF8BDE80840FFF7ABBF00BF10B540F247 -S31508005340E404C2F2000400F0A3F8FEF7F9FF012313 -S315080053502370FFF793FC00202070FFF7A3FD0221BE -S31508005360217004F0B9FE0322227010BD08B51D484D -S31508005370FFF7EEF80128034617D01A48FFF7F6FCA0 -S3150800538001281CD01748FFF75BFE012822D01548D4 -S3150800539004F00EFF012800D008BD134B1148032264 -S315080053A01A70BDE8084000F093B80F4A0D4813700C -S315080053B000F08EF80B48FFF7D9FC0128E2D10A4B1A -S315080053C008480021197000F083F80648FFF738FEF0 -S315080053D00128DCD10449034802220A7000F078F853 -S315080053E0D5E700BFDC1E0020E4000020FFF7B6BDAD -S315080053F070B5134C2378012B06460D461BD03BB1DE -S31508005400022B0CD0032B11D0BDE8704000F058B821 -S315080054103046E9B2FFF752FC2378022BF2D1304628 -S31508005420E9B2FFF7A7FD2378032BEDD13046E9B2A1 -S3150800543004F08EFEE8E7C9B2FFF73CF82378DEE70A -S31508005440E4000020054B1878411ECBB2012B01D988 -S3150800545040207047024A32F813007047E4000020E3 -S31508005460F8A70008054B1878411ECBB2012B01D9C5 -S3150800547040207047024A32F813007047E4000020C3 -S31508005480FCA7000800F012B8704700BF704700BFBD -S3150800549041F61C73C2F2000300221A709A6483F85C -S315080054A04320A3F844209A705A70704741F61C733B -S315080054B0C2F200031878003018BF0120704700BFF9 -S315080054C041F61C73C2F20003002283F8432070479A -S315080054D0F8B50578FF2D064640D0AA4C2378012B4F -S315080054E000D0F8BDC93D352D00F28180DFE815F002 -S315080054F087007F007F009B007F007F00C500A30018 -S31508005500B800CD007F007F007F007F007F007F000E -S315080055107F007F007F007F007F007F007F007F0085 -S315080055207F007F007F007F007F007F007F007F0075 -S315080055307F007F007F007F007F007F007F007F0065 -S315080055407F007F00DC000A0117012B017F007F0026 -S315080055507F0033017F0042015201760000F0B0F966 -S31508005560884C08BBFE2110230220E1702371A4F8A1 -S31508005570440094F84320834B012A0DD0B3F8441015 -S3150800558008B20028ADDD89B27F48012384F843308C -S31508005590BDE8F840FFF72CBF0221FE221020DA7082 -S315080055A01871A3F84410EFE7002110230126617053 -S315080055B0237161712670E570FFF744FFA071FFF74C -S315080055C051FFE071FFF74EFF0822000A207266724B -S315080055D0A672A4F84420FFF7EBFACAE70020FF21D9 -S315080055E0012220706070E170A4F84420C1E7FE2310 -S315080055F020200222E3702071A4F84420B9E7A76CA2 -S31508005600604DFFF71FFF721C411E3846FFF7D2FA9E -S31508005610002840F0D180FE2031220221E8702A714C -S31508005620A5F84410A5E7FE2131230220E170237175 -S31508005630A4F844009DE7FFF705FF73780138984200 -S3150800564065DDFF250122E570A4F8442071784D4DEB -S31508005650002940F0BD80FFF7B5FA002889D1DAE7BE -S31508005660A06C7168474DFFF7A7FA0028D3D0FF2230 -S315080056700121EA70A5F844107BE7FEF7A7FFFF2093 -S315080056800122E070A4F8442073E70025FF20E070AB -S3150800569025716571FFF7D6FE0723A071E57125729E -S315080056A06572A4F8443064E7FF25E5704568A26C86 -S315080056B0002D00F099801346D04313F8011BAD184E -S315080056C04219AB4202F0010011D028B113F8012BA0 -S315080056D08918AB42C9B20AD01A465B7812F8010B90 -S315080056E0091853FA81F0531CAB42C1B2F4D1002316 -S315080056F0C4F807100122082122716371A371A4F866 -S31508005700441036E7FFF79EFE727890424FDCFE2281 -S3150800571022210223E2702171A4F8443029E7FFF719 -S3150800572091FE72789042F2DD1848A16CFEF76EFF82 -S31508005730FF20E0707178A36CCA18A2647078411CC7 -S31508005740A4F8441015E7FF22E27043680121A36418 -S31508005750A4F844100DE700200D4B2071FF2260715C -S31508005760A07107210820E270A364C4F80710A4F802 -S315080057704400FEE6FE2000230221E0702371A4F80F -S315080057804410F6E61C1F00201F1F0020201F0020C3 -S3150800579000A8000860780023FF210622E170237123 -S315080057A06071A371E3712372A4F84420E1E671687D -S315080057B00E48A1647278B9E7FF22AE6CEA70FFF76B -S315080057C041FE013E31180123A964A5F84430D0E60C -S315080057D0A86CB21CFFF7EEF900283FF41CAF7178ED -S315080057E0AB6CC818A864C4E6294680E7201F0020C9 -S315080057F038B50546007804F079FDC0B2A0F130044A -S31508005800E4B2162C1FD8A0F13A02062A1BD9092C95 -S3150800581088BFA0F13704687888BFE4B204F066FD53 -S31508005820C1B2A1F13003D8B216280CD8A1F13A02B8 -S31508005830062A08D9092884BFA1F13700C0B200EBAF -S315080058400414E0B238BD002038BD00BF38B505469F -S31508005850000909280C460CD905F00F053730092D23 -S3150800586020700FD905F1370000236070A370204619 -S3150800587038BD303004F03AFD05F00F05C0B2092DE9 -S315080058802070EFD805F1300004F030FDC0B2EBE728 -S3150800589008B5074B0748084900221A7002F018FD98 -S315080058A000B908BD05487721BDE80840FFF7ECBCFC -S315080058B0A81F0020B41F002008A800080CA800088C -S315080058C041F6A873C2F200031878D0F1010038BF78 -S315080058D00020704710B5FFF7D5FD012802D0054C0A -S315080058E023780BB1002010BDFEF7A6FA0128F9D1DE -S315080058F0207010BDA81F002010B50446007804F0DB -S31508005900F5FC532801D0032010BD607804F0E6FCAE -S315080059100028F8D06078312806D0322806D03328F7 -S3150800592014BF0320022010BD002010BD012010BDA9 -S31508005930F8B507460230FFF75BFF0546381DFFF747 -S3150800594057FF6C1EA4B2281805F00103BD1D012CD3 -S31508005950C6B21DD953B12846FFF74AFF611E8CB25D -S315080059603218012CD6B207F1080511D92846FFF7D7 -S315080059703FFF02353318013C2846DEB2A4B2FFF7D2 -S3150800598037FF611E8CB230180235012CC6B2EDD82D -S315080059902846FFF72DFFF243D6B2331A594251EB88 -S315080059A00300F8BD2DE9F0410F46054616460029C5 -S315080059B039D0002837D02846FFF79EFF032804462B -S315080059C02DD02846FFF7B4FF002800F08F80012C61 -S315080059D02FD022D2A81CFFF70BFF8046281DFFF701 -S315080059E007FF04023C60A81DFFF702FFA8F10303A6 -S315080059F0201899B2386008350CB28EB1002C0FDD2C -S31508005A0000272846FFF7F4FE7A1CF05597B20235B0 -S31508005A10A742F6DB2046BDE8F081022C34D00024EC -S31508005A202046BDE8F081334840F26121FFF72CFC9F -S31508005A30C1E7A81CFFF7DCFE8046281DFFF7D8FE45 -S31508005A4004043C60A81DFFF7D3FE04EB00243C6069 -S31508005A5005F10800FFF7CCFEA8F10403201899B257 -S31508005A6038600A350CB2002EDAD0002CD8DD0027B3 -S31508005A702846FFF7BDFE7A1CF05597B20235A742B5 -S31508005A80F6DB2046BDE8F081A81CFFF7B1FE80468C -S31508005A90281DFFF7ADFE04063C60A81DFFF7A8FE0B -S31508005AA004EB00443C6005F10800FFF7A1FE04EB97 -S31508005AB000243C6005F10A00FFF79AFEA8F10503E9 -S31508005AC0201899B238600C350CB2002EA8D0002CDC -S31508005AD0A6DD00272846FFF78BFE7A1CF05597B2FD -S31508005AE00235A742F6DB2046BDE8F0814FF0FF34C9 -S31508005AF096E700BF0CA800082DE9F047A94D2C78B9 -S31508005B003CB1012C00F02381022C00F09680032C76 -S31508005B1001D0BDE8F087A44FA44E4FF480713046FB -S31508005B2007F50C7203F03EF897F84192B9F1000FA9 -S31508005B3040F0838100285DD0304606F5C07106F531 -S31508005B408072FFF72FFFB0F1FF3F804600F05C81BF -S31508005B5000284FDD9648FEF7D3F94CF6CD40954B15 -S31508005B604446CCF6CC40A0FB041219460133D408AF -S31508005B70F9D14CF6CD400C700A464446CCF6CC40DA -S31508005B80A0FB0413DB0803EB8301A4EB410404F137 -S31508005B90300102F8011D1C46002BF1D18648FEF79C -S31508005BA0AFF98648FEF7ACF9834996F88301FFF703 -S31508005BB04DFE834996F88201FFF748FE814996F81B -S31508005BC08101FFF743FE804996F88001FFF73EFE04 -S31508005BD07948FEF795F97D48FEF792F9D6F88001DF -S31508005BE07B4A4146FEF7E6FF002800F042817948E5 -S31508005BF0FEF786F9D7F84402D7F83C22904288D1B6 -S31508005C007548FEF77DF9FEF7DDFF0446002800F02B -S31508005C10A2817048FEF774F97048FEF771F970486A -S31508005C2002F066FE6F48FEF76BF900232B70FEF74D -S31508005C3039F9BDE8F047FEF7C9BC5B4E5B4F4FF438 -S31508005C408071384606F50C7202F0ACFF96F8418270 -S31508005C50B8F1000F40F0FF80B8B1384607F5C071BB -S31508005C604246FFF79FFEB0F1FF3F814600F07F8175 -S31508005C7000280ADDDFF87081D8F80400002840F013 -S31508005C80D180D7F8803188E80802D6F84422D6F8B9 -S31508005C903C329A427FF43DAF5148002102F038FE6B -S31508005CA0002840F07281504E7168002948D0494852 -S31508005CB0FEF726F94D48FEF723F974683D4B4CF676 -S31508005CC0CD402246CCF6CC40A0FB02121946013341 -S31508005CD0D208F9D14CF6CD400A70CCF6CC400A462B -S31508005CE0A0FB0413DB0803EB8301A4EB410130316D -S31508005CF01C4602F8011D002BF2D12F48FEF700F9C9 -S31508005D003B48FEF7FDF82C49F078FFF79FFD2C4934 -S31508005D10B078FFF79BFD2B497078FFF797FD2A4966 -S31508005D203078FFF793FD2448FEF7EAF82748FEF790 -S31508005D30E7F896E80300FEF73FFF002800F0FF802B -S31508005D402448FEF7DDF803202870BDE8F087FEF743 -S31508005D502FFFFEF793F82748FEF7D2F82648FEF7F6 -S31508005D60CFF8FEF785F8224601461D4802F0DCFA10 -S31508005D70064638B12148FEF7C3F82046BDE8F04785 -S31508005D80FEF7B4B81348FEF7BBF81D48FEF7B8F897 -S31508005D901C48FEF7B5F8144902200E604E602870BC -S31508005DA0BDE8F087A81F0020B41F00200C2400209F -S31508005DB0A8A90008691F0020681F0020B8A90008C4 -S31508005DC06A1F00206C1F00206E1F0020E8A900082B -S31508005DD00C250020DCA80008D0A90008ECA90008BA -S31508005DE0E421002004AA0008AC1F002038A90008F6 -S31508005DF044A9000888A80008ACA80008D4A8000888 -S31508005E00E4A8000808A900086648FEF779F82046BD -S31508005E10FEF76CF807F50C7002F06AFD85F800903D -S31508005E20BDE8F087D8F80030D7F88021C1188A4233 -S31508005E302BD14844C8F8040027E75B48FEF760F80A -S31508005E400220FEF753F807F50C7002F051FD002109 -S31508005E502970BDE8F0875548FEF752F82046FEF748 -S31508005E6045F806F50C7002F043FD00232B70BDE8DB -S31508005E70F0874E48FEF744F80620FEF737F84C48F8 -S31508005E8002F036FD2C70BDE8F0874A48FEF738F870 -S31508005E904948FEF735F8D8F80440484B4CF6CD404B -S31508005EA02246CCF6CC40A0FB021219460133D20892 -S31508005EB0F9D14CF6CD400A70CCF6CC400A46A0FB88 -S31508005EC00413DB0803EB8301A4EB410404F130015E -S31508005ED002F8011D1C46002BF1D13948DFF8FCA059 -S31508005EE0FEF70EF83748FEF70BF8354998F8030021 -S31508005EF0FFF7ACFC344998F80200FFF7A7FC3349D2 -S31508005F0098F80100FFF7A2FC314998F80000FFF75E -S31508005F109DFC2B48FDF7F4FF2E48FDF7F1FF98E8A6 -S31508005F200300FEF749FE50B12248FDF7E9FF2A486B -S31508005F30FDF7E6FFD7F880318AE80802A5E61B4890 -S31508005F40FDF7DEFF0520FDF7D1FF194802F0D0FC6A -S31508005F502C70BDE8F0871548FDF7D2FF0720FDF73E -S31508005F60C5FF134802F0C4FC2C70BDE8F0870F4843 -S31508005F70FDF7C6FF0320FDF7B9FF06F50C7002F022 -S31508005F80B7FC85F80080BDE8F0870848FDF7B8FF3C -S31508005F900420FDF7ABFF064802F0AAFC00222A708F -S31508005FA0BDE8F08784A9000860A90008D4A80008FD -S31508005FB0E4210020DCA8000838A90008691F002091 -S31508005FC0681F002044A900086A1F00206C1F0020D3 -S31508005FD06E1F0020E8A9000808A90008AC1F0020C9 -S31508005FE0F0B404680646BCB125781F2D0BD93A2DA6 -S31508005FF012D0671C3B4601E03A2A07D0194613F827 -S31508006000012B1F2AF8D80020F0BC7047A5F13000F4 -S31508006010092801D88F4202D04FF0FF30F4E7002854 -S31508006020FAD102343460EFE710B5044682B018B1ED -S3150800603003680BB11A7822B900200860092002B05B -S3150800604010BDD888A2889042F6D158780191FBF7FE -S315080060507FF910F001000199EED123680B60EEE795 -S3150800606030B401230D78541E9342057004EA0304E4 -S315080060700DD024B14C7802239342447007D0CD5CEE -S315080060805C1CC55402330D5D93420555F7D130BCEF -S31508006090704700BF2DE9F843436A013306460D46AB -S315080060A030D0816A088848B3884600241EE0FF2C51 -S315080060B024D0907537F8023F01341846A146F3B14B -S315080060C002F0BAFD2A190021C0B1907537F8023FCF -S315080060D0013418469BB102F0AFFD2C1970B1A075BA -S315080060E0788809F1020408F1060840B1002102F097 -S315080060F0A3FD47462A1900210028D8D100242819CB -S3150800610000218175F269A97D1378202B00F054814E -S31508006110052B08BFE5236B72002900F03F81F26961 -S3150800612001235078202809D0EA18052808BFE52059 -S315080061305072002900F00881F2690133907820280E -S3150800614009D0EA18052808BFE5205072002900F092 -S315080061501781F2690133D078202809D0EA18052872 -S3150800616008BFE5205072002900F0D280F269013399 -S315080061701079202809D0EA18052808BFE5205072AA -S31508006180002900F0B780F26901335079202809D038 -S31508006190EA18052808BFE5205072002900F09C80FF -S315080061A0F26901339079202809D0EA18052808BF32 -S315080061B0E5205072002900F08180F2690133D07918 -S315080061C0202808D0EA18052808BFE52050720029BB -S315080061D066D0F2690133107A20281BD0052808BF3B -S315080061E0E520002953D15A1CAC18EB18A0F1410C34 -S315080061F02E27BCF1190F5F729F75607207D8F36975 -S315080062001B7B03F01003DBB20BB12030C0B2A075C4 -S31508006210531CF269507A202809D0EA18052808BFC5 -S31508006220E5205072002900F09D80F2690133927AC8 -S31508006230202A07D0E818052A08BFE5224272002955 -S3150800624074D00133E81829B98175F1690C7B002CE3 -S3150800625008BF284600224272F369D87A2872F36981 -S31508006260DC7F9A7F587F197F42EA042240EA02209F -S3150800627041EA00212960587E1A7E42EA0021A98057 -S31508006280D87D9B7D43EA0022EA80BDE8F8835A1C44 -S31508006290AC18EB182E275F726072531CF269B9E7C7 -S315080062A0A0F14104192C07D8F469247B04F00804EA -S315080062B0E4B20CB12030C0B290758AE7A0F141046F -S315080062C0192C07D8F469247B04F00804E4B20CB14D -S315080062D02030C0B2907570E7A0F14104192C07D898 -S315080062E0F469247B04F00804E4B20CB12030C0B28F -S315080062F0907555E7A0F14104192C07D8F469247B59 -S3150800630004F00804E4B20CB12030C0B290753AE744 -S31508006310A0F14104192C07D8F469247B04F0080479 -S31508006320E4B20CB12030C0B290751FE7A2F1410467 -S31508006330192C07D8F469247B04F01004E4B20CB1D4 -S315080063402032D2B282757CE7A0F14104192C07D815 -S31508006350F469247B04F00804E4B20CB12030C0B21E -S315080063609075E9E6A0F14104192C07D8F469247B55 -S3150800637004F01004E4B20CB12030C0B2907554E7B2 -S31508006380A0F14104192C07D8F469247B04F0080409 -S31508006390E4B20CB12030C0B29075DAE6A3F141023E -S315080063A0192A07D8F469207B00F00802D4B20CB188 -S315080063B02033DBB2AB75B2E60023B2E6F8B5044685 -S315080063C0C07800B9F8BDE56A607804F13006314650 -S315080063D02A460123FAF7FEFF18BB226AA369E07072 -S315080063E0A81A98421BD2A778012F18D9FA070CD5F4 -S315080063F0ED18607802E0A16960786D1801233146CE -S315080064002A46FAF7E7FFA369013FED18314601234B -S315080064102A466078013FFAF7DDFF012FEBD100200D -S31508006420F8BD0120F8BD00BF2DE9F04F83B0044642 -S31508006430FFF7C4FF50B92378032B0AD000216078F0 -S315080064400A46FAF7F7FF003018BF012003B0BDE887 -S31508006450F08F21790129F1D104F1300104F50C7589 -S315080064600E46324602F8010B7070561CAE42F8D141 -S31508006470E368D4F81080E06984F81C324FEA136B9D -S31508006480CDF804B04FEA132C4FEA134E4FF0550BD4 -S31508006490019B84F81882421C5227612041257226E6 -S315080064A04FEA182A4FEA184984F82EB24FEA1868B4 -S315080064B04FF0AA0B84F8320084F8170284F81F32CA -S315080064C084F82FB284F8307084F8317084F8335029 -S315080064D084F8146284F8156284F8165284F819A2AE -S315080064E084F81A9284F81B8284F81DC284F81EE286 -S315080064F0E26260780123FAF76DFF002121719DE7BA -S31508006500C36A8B4270B505460E4615D0FFF756FF8F -S31508006510044608B1204670BD32460123687805F165 -S315080065203001FAF729FF002818BF4FF0FF3618BFC9 -S315080065300124EE62204670BD0024204670BD00BFCF -S315080065400129F8B50C46056809D96B69994206D23E -S31508006550287802282ED0032810D0012801D001203F -S31508006560F8BD296A04EB5406284601EB5621FFF7C5 -S31508006570C7FF002831D04FF0FF30F8BD2B6A2846F8 -S3150800658003EBD111FFF7BCFF0028F4D16406E00D38 -S3150800659000F13002AB182C189978D8785A7894F804 -S315080065A0303041EA002042EA002143EA012222F083 -S315080065B07040F8BD2B6A284603EB1121FFF7A0FFB0 -S315080065C00028D8D12406E00D29180C4691F8302069 -S315080065D091F8313042EA0320F8BDF205D70D296A51 -S315080065E0EB190136284601EB562193F83070FFF770 -S315080065F087FF0028BFD1F605F60DAD19E10795F816 -S31508006600300047EA002201D51009F8BD1105080D2A -S31508006610F8BD00BFB1F5001FF8B505460C4606687B -S3150800662001D30220F8BDCB06FBD18168046129B9E4 -S315080066303378022B18D9726AB2B1114677897F026C -S31508006640BC4207D223E00129EBD973699942E8D203 -S31508006650A7421DD82846FFF773FF01460130C7EB4E -S315080066600404F0D10120F8BD3089B0EB541FD8D905 -S31508006670736AAB616961002BD3D0E105CA0D30326C -S3150800668003EB5423B618AB61EE610020F8BD7369BD -S31508006690023B8A1E9A423DBF7089B36A00FB0233E9 -S315080066A00023AB61E6E700BF38B54FF0FF320023A1 -S315080066B0C370C2620446FFF723FF08B1042038BD41 -S315080066C094F82E2294F82F124AF6552342EA01210D -S315080066D00AB2CFF6FF739A4201D0032038BD94F868 -S315080066E0695094F8682094F8671094F8663042EA7E -S315080066F0052241EA022143EA012244F2461322F026 -S315080067007F41C0F254039942E8D094F8855094F832 -S31508006710840094F8831094F8822040EA052041EA20 -S31508006720002142EA012222F07F40984214BF02204B -S31508006730002038BD2DE9F041002384B00B600D46DA -S315080067401746FFF74DFC061E19DBB14850F82640E0 -S31508006750BCB12C60217807F0FE0721B16078FAF702 -S31508006760F7FDC2070FD50022F0B222706070FAF763 -S31508006770D7FDC30712D5032004B0BDE8F0810B206E -S31508006780FAE70C20F8E7002F00F0208100F004005B -S31508006790C1B2002914BF0A200020EDE72FB100F08E -S315080067A00403D8B208B10A20E6E700212046FFF71D -S315080067B07BFF022807D00025042800F0098101285C -S315080067C064D90D20D8E794F8F251002D00F006811F -S315080067D094F8F90194F8F85194F8F72194F8F631F9 -S315080067E045EA002142EA012043EA002194F80252D0 -S315080067F00091002D00F0F08094F8090294F8081230 -S3150800680094F8075294F8063241EA002245EA022033 -S3150800681043EA002294F812120192002900F0DA8065 -S3150800682094F8190294F8181294F8172294F8163264 -S3150800683041EA002542EA052043EA002594F8221297 -S31508006840029569B194F8295294F8281294F82722E7 -S3150800685094F8263241EA052042EA002543EA052152 -S31508006860009D0391002D40F0BB80019D002D40F056 -S31508006870BF80029D002D40F0C380039D002DA0D04F -S3150800688020462946FFF710FF012895D894F83C20A2 -S3150800689094F83B3043EA0220B0F5007F91D194F892 -S315080068A0471094F8462052EA01220DD194F8561062 -S315080068B094F8570094F8552094F8543041EA00208B -S315080068C042EA002143EA012294F84000A261431EED -S315080068D0012BA0703FF675AF94F83D306381002B0D -S315080068E03FF46FAF591E19427FF46BAF94F841100D -S315080068F094F8426041EA0626B1B216F00F0F2181DC -S315080069007FF45FAF94F8447094F8436056EA07261C -S315080069100DD194F8538094F852C094F8517094F8B5 -S3150800692050604CEA082E47EA0E2746EA072694F8EE -S315080069303FC094F83E7057EA0C273FF442AF00FB7D -S3150800694002FE07EB111070448642FFF43AAF361A7E -S31508006950B6FBF3F3002B3FF434AF40F6F576B342BB -S3150800696040F2E38006F57046B34200F2BA8002268A -S315080069700233EF1940196361E5612762A0620029B5 -S315080069803FF41FAF7744022E676200F0A880032108 -S3150800699001FB03F603F0010303EB5600012600F2A0 -S315080069A0FF13B2EB532FFFF40CAF4FF0FF328020EA -S315080069B0032E2261E26020712ED0164826700188C7 -S315080069C04A1C93B20380E3800020D5E63846D3E616 -S315080069D00120D1E60D4631E72A461BE7294605E799 -S315080069E020462946FFF760FE01283FF63EAF4DE7F1 -S315080069F020462946FFF758FE01283FF63AAF45E7F5 -S31508006A0020462946FFF750FE01283FF636AF3DE7F8 -S31508006A10942700209027002094F8611094F860309D -S31508006A2043EA0122012AC8D12046691CFFF768FDFE -S31508006A300028C2D194F82F1294F82E32207143EA16 -S31508006A4001204AF6552102B2CFF6FF718A42B4D127 -S31508006A5094F8321094F8330094F8313094F83020D2 -S31508006A6041EA002043EA002145F2522342EA012284 -S31508006A70C4F261139A42A0D194F8161294F8170238 -S31508006A8094F8153294F8142241EA002043EA0021CA -S31508006A9047F2722342EA0122C6F241139A428CD186 -S31508006AA094F81B8294F81A7294F81FE294F81E520E -S31508006AB094F8190294F81D1294F8182294F81C32C6 -S31508006AC047EA082745EA0E2540EA072041EA052154 -S31508006AD042EA002243EA01232261E3606DE7580097 -S31508006AE05DE794F85BC094F85A60E5610233EF19E4 -S31508006AF0401956EA0C2663612762A0627FF461AEEC -S31508006B0000297FF45EAE94F85F7094F85E6094F89E -S31508006B105D0094F85C1046EA072640EA062041EA3A -S31508006B20002161629800032639E7012620E700BFA5 -S31508006B30F0B5012983B00C46054602D94369994246 -S31508006B4002D3022003B0F0BD0178022958D00329E8 -S31508006B5035D00129F5D1036A019204EB540603EBFB -S31508006B605621FFF7CDFC019A0028EBD1F005C10D9F -S31508006B70013614F0010459D06B18D0B293F83010CE -S31508006B8001F00F0141EA0010C0B2296A83F830000B -S31508006B900123EB70284601EB56210192FFF7B0FC62 -S31508006BA0019A0028CED1F605F10D002C41D0C2F38A -S31508006BB007126E18012386F83020EB70C2E7016AC7 -S31508006BC0019201EBD411FFF79BFC019A0028B9D179 -S31508006BD06406E70D07F13006AB1922F07042D97842 -S31508006BE00C0604F070463243EC19160C170A110EFF -S31508006BF084F830205F709E70D9700123EB70A1E78E -S31508006C00016A019201EB1421FFF77AFC019A002828 -S31508006C1098D12406E30DE918C2F3072381F830203A -S31508006C20012281F831300C46EA708BE7D0B26B1836 -S31508006C30ABE76E18C2F3032296F8303023F00F0143 -S31508006C400A43B7E72DE9F04107468846066809BBB7 -S31508006C50F5687369CDB19D4228BF01252C460134DC -S31508006C609C4202D3012D12D9022438462146FFF749 -S31508006C7067FCD0B1012825D001301FD0AC4206D020 -S31508006C80736901349C42EDD2EFE70125E6E700205F -S31508006C90BDE8F081FFF754FC012813D9411C0DD03B -S31508006CA0736998420FD34546D8E7304621464FF0D8 -S31508006CB0FF32FFF73DFF40B1012803D14FF0FF3007 -S31508006CC0BDE8F0810120BDE8F081B8F1000F0ED1D2 -S31508006CD072693069F460911E884201D2431E33619D -S31508006CE0327942F0010030712046BDE8F081304625 -S31508006CF041462246FFF71CFF0028E9D0DCE700BF23 -S31508006D002DE9F04783690568026982B004460E4694 -S31508006D101BB9042002B0BDE8F08702F12007B7F5D9 -S31508006D20001FF6D2F905CA0D1ABB41690133836102 -S31508006D3029B36B89013B13EA57231AD10192FFF74E -S31508006D40FFFB01288046019A20D9B0F1FF3F23D0E6 -S31508006D50686980451CD2A8F10206831E9E423CBF84 -S31508006D606989AB6AC4F8148034BF01FB063600266D -S31508006D70A6613032AD182761E5610020CAE72B8984 -S31508006D80B3EB571FF5D881610420C3E70220C1E79A -S31508006D9026B9A6610420BDE70120BBE76169019217 -S31508006DA02046FFF74FFF804608B90720B2E70128BB -S31508006DB0ECD0B0F1FF3FEFD02846FFF7FFFA019A73 -S31508006DC00028E9D105F1300305F50C76194601F8D6 -S31508006DD0010B58704B1CB342F8D16869A8F102063A -S31508006DE0831E9E4238BFA96A6B8934BF03FB06110E -S31508006DF00021E9624FF000094FF0010A0DE085F81D -S31508006E0003A00192FFF7DAFA019A0028C4D1E96AC9 -S31508006E106B89481C09F10109E86299452846EED3B1 -S31508006E20E96A6869C9EB0101E96296E72DE9F04F5D -S31508006E30002187B083460668FFF7ECFB002840F080 -S31508006E40CD80FF224FF0FF330292CBF8243015464F -S31508006E500EE00F2A00F0C5804FF0FF30CBF8240073 -S31508006E60FF2558460021FFF74BFF002840F0B68063 -S31508006E703046DBF81810FFF743FB002840F0AE80D9 -S31508006E80DBF81C402378002B00F0C780E17AE52B5D -S31508006E9001F03F028BF80620DED001F00801C9B2E6 -S31508006EA00029D6D10F2A00F09C80002D59D12378CD -S31508006EB094F8019094F8028094F803C027796579CC -S31508006EC0A27903954FEAC31A4AEA530303EB090E5C -S31508006ED05FFA8EF94FEAC91343EA590958FA89F84D -S31508006EE05FFA88FE4FEACE1343EA5E085CFA88FC2E -S31508006EF05FFA8CFE4FEACE1343EA5E0C57FA8CF71C -S31508006F00FFB2FB0143EA5703039F049257FA83F340 -S31508006F10DBB2DF0147EA5303049FE179257A05913D -S31508006F2057FA83F3DBB2DF0147EA5303059F617A19 -S31508006F30A27A57FA83F3DBB2DF0147EA530355FA1D -S31508006F4083F5EDB2EB0143EA550551FA85F1C9B26D -S31508006F50CB0143EA510152FA81F2029BD1B28B422C -S31508006F603CD0DBF82030DA7AD2072BD421781A788D -S31508006F70914227D161785A78914223D1A1789A789B -S31508006F8091421FD1E178DA7891421BD121791A7999 -S31508006F90914217D161795A79914213D1A1799A7997 -S31508006FA091420FD1E179DA7991420BD1217A1A7A95 -S31508006FB0914207D1617A5A7A914203D1A17A9B7A92 -S31508006FC099420BD04FF0FF37CBF824705846002172 -S31508006FD0FF25FFF795FE00283FF44AAF07B0BDE846 -S31508006FE0F08FDBF82870002F3FF43BAF03F040002A -S31508006FF0C2B272B1DBF81050617BCBF82450029113 -S3150800700003F0BF0594F80D90029B994507D0FF251C -S3150800701027E79D42F6D0FF2523E70420DEE7E07E3A -S31508007020A27E52EA002340F0D9812378A1786078BD -S3150800703003F03F02531E03EB430A03EB8A0ABAF135 -S31508007040FE0F40EA012100F2C9810846019101F0CC -S315080070501BFE024637F81A00009201F015FE009B47 -S3150800706083420AF10108019840F0B8812179E27853 -S3150800707042EA0123002840F08D804FF6FF708342D4 -S3150800708040F0AC81A179627942EA01214FF6FF729C -S31508007090914240F0A381207AE17941EA00234FF634 -S315080070A0FF718B4240F09A81A07A627A42EA002107 -S315080070B04FF6FF72914240F09181E07BA17B41EA55 -S315080070C000234FF6FF718B4240F08881607C227C5A -S315080070D042EA00214FF6FF72914240F07F81E07C40 -S315080070E0A17C41EA00234FF6FF718B4240F076817E -S315080070F0607D227D42EA00214FF6FF72914240F000 -S315080071006D81E07DA17D41EA00234FF6FF718B4238 -S3150800711040F06481607E227E42EA00214FF6FF72CB -S31508007120914240F05B81607F217F41EA00234FF660 -S31508007130FF718B4240F05281002094F81FE0A17F36 -S3150800714041EA0E2A002800F04D81B8F1FF0F00F041 -S315080071504581504601F098FD034637F8180000931C -S3150800716001F092FD0099814208F1010840F036814C -S31508007170207800F04002D3B23BB1BAF1000F04D038 -S3150800718037F81810002940F02981013DEDB2CDF8F5 -S31508007190089066E6B8F1FF0F00F0208118460093C4 -S315080071A001F072FD034637F81800019301F06CFDF3 -S315080071B0019A82420AF10208009840F00F81A179EB -S315080071C0637943EA012100283FF460AFB8F1FF0F65 -S315080071D000F004810846019101F056FD024637F891 -S315080071E01800009201F050FD009981420AF1030847 -S315080071F0019840F0F380227AE37943EA02230028D3 -S315080072003FF44DAFB8F1FF0F00F0E8801846009341 -S3150800721001F03AFD034637F81800019301F034FDF2 -S31508007220019A82420AF10408009840F0D780A17AB0 -S31508007230637A43EA012100283FF43AAFB8F1FF0F19 -S3150800724000F0CC800846019101F01EFD024637F891 -S315080072501800009201F018FD009981420AF105080C -S31508007260019840F0BB80E27BA37B43EA0223002817 -S315080072703FF427AFB8F1FF0F00F0B080184600932F -S3150800728001F002FD034637F81800019301F0FCFCF3 -S31508007290019A82420AF10608009840F09F80617CB4 -S315080072A0237C43EA012100283FF414AFB8F1FF0F0D -S315080072B000F094800846019101F0E6FC024637F892 -S315080072C01800009201F0E0FC009981420AF10708D3 -S315080072D0019840F08380E27CA37C43EA02230028DD -S315080072E03FF401AFB8F1FF0F78D01846009301F0CC -S315080072F0CBFC034637F81800019301F0C5FC019A48 -S3150800730082420AF10808009868D1617D237D43EA24 -S31508007310012100283FF4F0AEB8F1FF0F5ED0084611 -S31508007320019101F0B1FC024637F81800009201F00D -S31508007330ABFC009981420AF1090801984ED1E27D19 -S31508007340A37D43EA022300283FF4DFAEB8F1FF0F1E -S3150800735044D01846009301F097FC034637F8180006 -S31508007360019301F091FC019A82420AF10A080098F9 -S3150800737034D1617E237E43EA012100283FF4CEAE54 -S31508007380B8F1FF0F2AD00846019101F07DFC0246AC -S3150800739037F81800009201F077FC009981420AF14B -S315080073A00B0801981AD1627F237F43EA022300283B -S315080073B03FF4BDAEB8F1FF0F10D01846009301F0A8 -S315080073C063FC024637F81800019201F05DFC019B48 -S315080073D083420AF10C0800983FF4AFAECDF8089046 -S315080073E0FF253EE54FF6FF7292453FF4CEAEF5E730 -S315080073F02DE9F04FD0F800B085B007460D460131AB -S315080074002B782F2BFAD05C2BF8D00021B96028787E -S315080074101F2840F284814FF0200A1F28BE6A2FD900 -S315080074202F282DD05C282BD00121A6F10209A846C9 -S31508007430012401F001FCF8B17F2809D822281BD0C5 -S31508007440B04A01E0884217D012F8011F0029F9D185 -S3150800745029F8020F18F8010F631C1F2812D92F28C4 -S3150800746010D05C280ED0B3F5807F05D001211C46CC -S3150800747001F0E2FB0028DFD1062005B0BDE8F08F59 -S3150800748000240123E9180D4601312A782F2AFAD05B -S315080074905C2AF8D01F2894BF4FF004094FF0000962 -S315080074A02CB306EB4400631E30F8022D202A03F0A5 -S315080074B0010101D02E2A1ED1013C18D039B130F86D -S315080074C0023D202B01D02E2B15D1013C0FD030F8D0 -S315080074D0022D202A01D02E2A0DD130F8021D013C9A -S315080074E02029234601D02E2905D15C1EEFD1002084 -S315080074F0B0463080C0E73A6A002126F81410B31E59 -S3150800750006EB440182F800A082F801A082F802A0E6 -S3150800751082F803A082F804A082F805A082F806A0E3 -S3150800752082F807A082F808A082F809A082F80AA0C3 -S315080075304FF0000801E008F1010833F8020F20288F -S31508007540F9D02E28F7D0B8F1000F01D049F0030979 -S315080075500B46621E33F802EDBEF12E0F02F0010152 -S3150800756012D0144682B121B133F8022D2E2A09D140 -S315080075700AE033F8021D2E2906D033F8022D013C05 -S315080075802E2A01D0013CF4D1002221469446144605 -S3150800759008232A4635460E4608F1010878B32028FE -S315080075A01FD02E281BD09C4220D2464576D07F2855 -S315080075B07ED82B2800F09480DFF84CE102E0884260 -S315080075C000F08E801EF8011F0029F8D1A0F14101B4 -S315080075D0192900F29B804CF0020CC0B283E04645A4 -S315080075E05CD049F0030935F81800D5E70B2B00F0F5 -S315080075F0AB80464554D0B04549F0030950D91546E5 -S315080076003A6A1078E52875D0082B04BF4FEA8C0C27 -S315080076105FFA8CFC0CF00C030C2B68D00CF0030002 -S31508007620032864D009F00201C8B250B90CF0030E61 -S31508007630BEF1010F08BF49F01009042B08BF49F035 -S31508007640080982F80B903846FFF7F0FB3A6AD37AB6 -S3150800765000286FD103F00401CAB2002A7FF40DAFE7 -S31508007660B87900F01003D9B2002961D03E699BF8B9 -S315080076700040F205D00D30300BEB0003032CD97E09 -S315080076809E7E46EA012202D0BA602878C5E65C7D6D -S31508007690187D40EA042342EA0342F5E70B2B53D050 -S315080076A04FEA8C045FFA84FCB0460B2308249AE759 -S315080076B0002102920193CDF80CC001F0BDFA029A9E -S315080076C0019BDDF80CC0C8B14AF64421C0F600019A -S315080076D0081849F0020910F8800C00287FF469AFF1 -S315080076E049F003095F20396A085501347BE749F0F8 -S315080076F0020997E7052111703A6A85E749F00209F8 -S31508007700EEE700BF30AA00083CAA0008A0F1610114 -S31508007710192902D820384CF0010CC0B2E3E7386AC0 -S315080077208022C272384605B0BDE8F04FFEF772BF38 -S315080077300520A2E604287FF4A0AE03F00401CBB22C -S31508007740002B08BF052098E6154649F003090B23C8 -S3150800775056E700BF416A4B1C2DE9F041044605680F -S31508007760066906D0FEF756FF034610B11846BDE86F -S31508007770F0814FF0E5080127A1692846FEF7C0FE0B -S315080077800346014620465BB9E26982F80080EF703D -S3150800779022699642EAD9FFF7B3FA03460028EBD0E6 -S315080077A0042B08BF02231846BDE8F081012970B5ED -S315080077B006460C46056802D96B69994201D3022030 -S315080077C070BD02BB21463046FEF7BAFE0346214687 -S315080077D000220446284693B1012BF0D0013310D07D -S315080077E0FFF7A6F970B92869421C05D02A79411C09 -S315080077F042F0010329612B7168698442E2D30020B3 -S3150800780070BD012070BD114628464FF0FF32FFF7C4 -S315080078108FF90028D6D0F5E72DE9F04FFF25044665 -S31508007820076883B02E4604204FF000094FF6FF780C -S31508007830A169002900F0BF803846FEF761FEC0B98D -S31508007840E2691378002B00F0BA80D17AE52B01F0B3 -S315080078503F01A17106D02E2B04D021F0200CBCF1DB -S31508007860080F0BD1FF2620460021FFF749FA00280A -S31508007870DED00021A16103B0BDE8F08F0F2940F0EA -S31508007880A58003F04000C1B2002900F09080266967 -S31508007890557B666203F0BF03517BA942E2D1D67ECF -S315080078A0907EA56A50EA062040F08D80167892F8F8 -S315080078B002C092F801E006F03F00013800EB4006EE -S315080078C000EB8606FE2E4EEA0C2E7CD825F816E02E -S315080078D092F804A092F803C0701C4CEA0A2ABEF17A -S315080078E0000F40F0D480C2456DD192F806E0567973 -S315080078F046EA0E2CC44566D192F808C0D67946EAFF -S315080079000C2EC6455FD192F80AC0567A46EA0C2C68 -S31508007910C44558D192F80FE0967B46EA0E2EC64526 -S3150800792051D192F811C0167C46EA0C2CC4454AD1AE -S3150800793092F813E0967C46EA0E2EC64543D192F895 -S3150800794015C0167D46EA0C2CC4453CD192F817E0C2 -S31508007950967D46EA0E2EC64535D192F819C0167E92 -S3150800796046EA0C2CC4452ED192F81DE0167F46EA4D -S315080079700E2EC64527D14FF0000E92F81FC0967FEF -S3150800798046EA0C26BEF1000F1BD0FF281BD025F8AF -S3150800799010600130127802F04006F2B21AB1FF28E0 -S315080079A011D025F81090013BDEB20D465BE7B342D5 -S315080079B07FF458AF70E700283FF45DAF59E704201D -S315080079C057E74645E6D00D46FF264CE7002E5AD126 -S315080079D0137892F808B092F801A0CDF800B04FEAF3 -S315080079E0C31B4BEA53035344DBB292F8029092F856 -S315080079F0038092F804E057799679D17992F809C00C -S31508007A00927ACDF804C04FEAC31A4AEA530359FAE0 -S31508007A1083F3DBB24FEAC31949EA530358FA83F3EF -S31508007A20DBB24FEAC31848EA53035EFA83F3DBB2C4 -S31508007A304FEAC31E4EEA530357FA83F7FBB2DF0138 -S31508007A4047EA530356FA83F6F3B2DE0146EA5303CE -S31508007A5051FA83F1CBB2D90141EA53030099DDF813 -S31508007A6004B051FA83F3DBB2D90141EA53035BFA56 -S31508007A7083F1CBB2D90141EA530352FA83F2D1B268 -S31508007A80A9423FF4F8AE4FF0FF336362F3E6FF28EE -S31508007A9099D025F810A092F806C092F805E0B01C17 -S31508007AA04EEA0C2CBAF1000F3FF424AFFF288AD017 -S31508007AB025F810C092F808A092F807E0F01C4EEAE4 -S31508007AC00A2EBCF1000F3FF41CAFFF283FF47BAF32 -S31508007AD025F810E092F80AA092F809C0301D4CEA81 -S31508007AE00A2CBEF1000F3FF413AFFF283FF46BAF2B -S31508007AF025F810C092F80FA092F80EE0701D4EEA15 -S31508007B000A2EBCF1000F3FF40AAFFF283FF45BAF23 -S31508007B1025F810E092F811A092F810C0B01D4CEAB2 -S31508007B200A2CBEF1000F3FF401AFFF283FF44BAF1C -S31508007B3025F810C092F813A092F812E0F01D4EEA4C -S31508007B400A2EBCF1000F3FF4F8AEFF283FF43BAF16 -S31508007B5025F810E092F815A092F814C006F108006E -S31508007B604CEA0A2CBEF1000F3FF4EEAEFF283FF4B4 -S31508007B702AAF25F810C092F817A092F816E006F179 -S31508007B8009004EEA0A2EBCF1000F3FF4E4AEFF28C6 -S31508007B903FF419AF25F810E092F819A092F818C02A -S31508007BA006F10A004CEA0A2CBEF1000F3FF4DAAEE1 -S31508007BB0FF283FF408AF25F810C092F81DA092F8E8 -S31508007BC01CE006F10B004EEA0A2EBCF1000F3FF44A -S31508007BD0D0AEFF283FF4F7AE25F810E006F10C000A -S31508007BE0CBE600BF2DE9F04F066A0568F37AD0F8B0 -S31508007BF0289013F0A00289B0044604D0062318463C -S31508007C0009B0BDE8F08FB9F8007037B14846174695 -S31508007C1030F8021F01370029FAD105A831460C228F -S31508007C20FEF71EFA9DF81F00C10740F16881002380 -S31508007C30F3723046A36205A90B224FF0010BFEF73B -S31508007C400FFA0DF10C0A5B464FF07E08072203F087 -S31508007C500F0000F13001392988BF00F137010AF811 -S31508007C600210013A1B09F2D108A8811801F8148CF0 -S31508007C70002A00F0A0813078202815D0D007314698 -S31508007C800FD43146012311F8010F202809D10BE042 -S31508007C9011F8010F202807D011F8010F0133202809 -S31508007CA002D001339342F3D1C3F10701072A01F049 -S31508007CB0010000F2128108A98918013211F814ECA2 -S31508007CC0591C072906F803E02FD810B3072A00F233 -S31508007CD0098108A88318013213F8143C735401313A -S31508007CE0072916D921E00DF1200C0CEB020301320D -S31508007CF013F8140C4B1C072A705411D80DF1200EDA -S31508007D000EEB0201013211F8140C591C0729F05424 -S31508007D100BD8072AE7D920204B1C072A7054EDD91F -S31508007D20591C20200729F054F3D92046FFF77EF87E -S31508007D30002840F0D9800BF1010BBBF1640F00F06D -S31508007D40C2820B22304605A9FEF78AF9BBF1050F58 -S31508007D5040F2C680A9F102015B46B8E002F00100D4 -S31508007D6000EB43035008DA0348BF83F4883300F076 -S31508007D70010248BF83F0210302EB43034008DA03FC -S31508007D8048BF83F4883300F0010248BF83F021031B -S31508007D9002EB43034008DA0348BF83F4883300F054 -S31508007DA0010248BF83F0210302EB43034008DA03CC -S31508007DB048BF83F4883300F0010248BF83F02103EB -S31508007DC002EB43034008DA0348BF83F4883300F024 -S31508007DD0010248BF83F0210302EB43034008DA039C -S31508007DE048BF83F4883300F0010248BF83F02103BB -S31508007DF002EB43034008DA0348BF83F4883300F0F4 -S31508007E00010248BF83F0210302EB43034008DA036B -S31508007E1048BF83F4883300F0010248BF83F021038A -S31508007E2002EB43034008DA0348BF83F4883300F0C3 -S31508007E30010248BF83F0210302EB43034008DA033B -S31508007E4048BF83F4883300F0010248BF83F021035A -S31508007E5002EB43034008DA0348BF83F4883300F093 -S31508007E60010248BF83F0210302EB43034008DA030B -S31508007E7048BF83F4883300F0010248BF83F021032A -S31508007E8002EB43034008DA0344BF83F4883383F0E4 -S31508007E90210300F0010202EB43024308D00344BF6A -S31508007EA082F4883282F0210203F0010000EB4202DC -S31508007EB05B08D00344BF82F4883282F0210203EBC8 -S31508007EC04203DA0344BF83F4883383F0210331F88D -S31508007ED0022F002A7FF442AFB8E64FF0200EEFE6F5 -S31508007EE05B46B3E62023F9E6042803467FF487AE0B -S31508007EF09DF81F10F1729DF81F00C4F8289000F035 -S31508007F000206F2B2002A48D1012620460021D4F8FA -S31508007F100080FEF77FFB0346002848D1074605E0A8 -S31508007F201F46FEF7EDFE0346002840D1A1694046EC -S31508007F30FEF7E6FA0346013701212046002B36D123 -S31508007F40E2691278E52A01D0002AE9D1BE42E8D1D1 -S31508007F50013E32D12846A169FEF7D2FA0346002827 -S31508007F607FF44DAEE269184602F12006114601F883 -S31508007F70010B50704A1CB242F8D1E069216A00939D -S31508007F800B22FEF76DF8236AE069D97A012301F01E -S31508007F9018020273EB70009B31E64EF64F430C371E -S31508007FA0C4F6C463A3FB07018808461CADE7042B87 -S31508007FB008BF072323E6134676E623692046A3EB84 -S31508007FC04611FEF727FB034600287FF418AED4F8BF -S31508007FD020B09BF800309BF801A09BF802909BF814 -S31508007FE003809BF804C09BF805E09BF806709BF895 -S31508007FF007009BF808109BF809209BF80AB0CDF8F3 -S3150800800004B04FEAC31B4BEA53035344DBB24FEAAF -S31508008010C31A4AEA530359FA83F3DBB24FEAC31980 -S3150800802049EA530358FA83F3DBB24FEAC31848EA1E -S3150800803053035CFA83F3DBB24FEAC31C4CEA5303DF -S315080080405EFA83F3DBB24FEAC31E4EEA530357FACE -S3150800805083F7FBB2DF0147EA530350FA83F0C7B24E -S31508008060FB0143EA570051FA80F1CFB2FB0143EA1C -S31508008070570052FA80F2D1B2CF01019847EA51036C -S3150800808050FA83FA5FFA8AF94FF00F08FF274FF67E -S31508008090FF7A7DE0DF701F714FF6FF70504500F0E4 -S315080080A0AB8031F812004FEA102C0132587183F870 -S315080080B006C0002840F0A480DF711F724FF6FF70DB -S315080080C0504500F0AB8031F812004FEA102C01320F -S315080080D0587283F80AC0002840F0A4809F73DF73A3 -S315080080E04FF6FF70504500F0AB8031F812004FEAAA -S315080080F0102C0132187483F811C0002840F0A480AF -S315080081009F74DF744FF6FF70504500F0AB8031F86E -S3150800811012004FEA102C0132187583F815C0002892 -S3150800812040F0A4809F75DF754FF6FF70504500F04C -S31508008130AB8031F812004FEA102C0132187683F81A -S3150800814019C0002840F0A4801F775F774FF6FF70AC -S31508008150504500F0AB8031F812004FEA102C01327E -S31508008160987783F81FC0002840F0A48046F0400E98 -S315080081705FFA8EFE83F800E001232046EB700021AB -S31508008180FEF7BEFD002840F0A080013E3FF4E2AEB7 -S315080081902846A169FEF7B4F90246002A40F0958000 -S315080081A05FFA86FE0EF1FF30E369A16A1A7300EBE7 -S315080081B0400B00EB8B0C9A76DA7683F80D9083F8F1 -S315080081C00B8031F81C004FEA102B0CF10102587095 -S315080081D083F802B000283FF45DAF50453FF45AAF2C -S315080081E031F812004FEA102B0CF10202D87083F80E -S315080081F004B000287FF452AF5F719F714FF6FF708D -S3150800820050453FF459AF31F812004FEA102C0132AD -S31508008210D87183F808C000287FF452AF5F729F7246 -S315080082204FF6FF7050453FF459AF31F812004FEA48 -S31508008230102C0132987383F80FC000287FF452AFD0 -S315080082401F745F744FF6FF7050453FF459AF31F80D -S3150800825012004FEA102C0132987483F813C00028D4 -S315080082607FF452AF1F755F754FF6FF7050453FF4A8 -S3150800827059AF31F812004FEA102C0132987583F87D -S3150800828017C000287FF452AF1F765F764FF6FF704F -S3150800829050453FF459AF31F812004FEA102C01321D -S315080082A0187783F81DC000287FF452AF9F77DF77D1 -S315080082B04FF6FF7050453FF459AF31F812100029B8 -S315080082C03FF454AF56E7072399E4034697E400BF03 -S315080082D030B585B004AB019043F8041D18460091EB -S315080082E01546FDF77DFE002810DB0E4C54F82010CD -S315080082F009B100220A70019B53B10022012D1A70A0 -S3150800830044F8203008D0104605B030BD0B20FBE7F6 -S3150800831044F820301846F7E7684601A9FEF70AFA36 -S31508008320F2E700BF942700202DE9F04192B00546F8 -S315080083300191164670B1002302F01F07036003A9D6 -S3150800834001A83A46FEF7F6F9044628B1204612B0C7 -S31508008350BDE8F0810924F9E703985E4B079004AA63 -S3150800836001990F9207A81193FFF742F830B116F05A -S315080083701C0F01D004284BD00446E7E70F9991F962 -S315080083800B000028C0F2998016F01C0F35D19DF815 -S31508008390223003F01002D1B2002940F0908006F096 -S315080083A00200C2B20AB1D8077ED406F00806F3B2B4 -S315080083B0039E0BB147F020070E9BF06A6B6228629A -S315080083C03178D87E9A7E032942EA00226ED0AA60C6 -S315080083D093F81FC0997F5A7F187F2F74002341EAAC -S315080083E00C216B7442EA0121F2886B6140EA012094 -S315080083F0E860EB612E60AA80A8E79DF8221011F0CC -S31508008400110F51D106F00400C6B246B108249DE703 -S3150800841007A8FFF7E7FB47F008070028ACD107F0E5 -S315080084200802D6B2002E4CD00E9B039E0022612075 -S3150800843048219A73DA73597418740E9B9A75DA750B -S31508008440597618760E982022C2720E9B327893F8C7 -S315080084501B80997E032A41EA082834D000209876A2 -S31508008460D8763278032A04BF187558750E9B0022F1 -S3150800847001211A775A779A77DA77F170B8F1000FEF -S3150800848098D007A84146F66AFFF790F900287FF4C6 -S3150800849073AF31460398FEF733F8039E08F1FF32AF -S315080084A0F260002886D067E707244FE7587D197DD4 -S315080084B041EA002042EA004289E7062446E7042406 -S315080084C044E7039E78E7587D1A7D42EA002148EA88 -S315080084D00148C3E7902500202DE9F04F994685B05D -S315080084E000238B46C9F8003003A904461546FDF754 -S315080084F09BFD074628B9677C1FB9207CC10704D4B1 -S315080085000727384605B0BDE8F08F6069E1680A1AA2 -S31508008510954234BFA8469046B8F1000FF1D004F151 -S31508008520280AC505ED0D002D2ED103994B895A1E33 -S3150800853012EA502341D0A0694A690238023A9042A9 -S3150800854049D302276774DCE7E269B24218D0237C74 -S3150800855003F04000C3B25BB1487801235146F8F7EF -S3150800856039FF002858D1227C039922F04000207454 -S315080085704878324651460123F8F7FEFE00284BD1CB -S315080085806569E661EE05F50DC5F50076464528BF31 -S31508008590464605F128035846E1183246FDF760FDC0 -S315080085A06269D9F80010B0188B19B8EB0608606133 -S315080085B0B344C9F80030B4D1A3E700282FD1A06886 -S315080085C00128BED9421C27D00399A0614A690238FE -S315080085D0023A9042B5D24A898E6A02FB0066002E9C -S315080085E0AFD05FEA58251E44AED05819904288BFCE -S315080085F0C3EB02054878324659462B46F8F7BCFEC7 -S3150800860050B9227C02F04001CBB21BB1E069861B4F -S31508008610B5420BD86E02C3E70127677471E7A169F3 -S3150800862001932046FDF78CFF019BC9E70BEB46201B -S3150800863051464FF40072FDF713FD6E02B0E700BF16 -S315080086402DE9F04F994685B000238B46C9F80030CE -S3150800865003A904461746FDF7E7FC804658B994F87F -S315080086601180B8F1000F06D1217C01F00202D0B2C8 -S3150800867028B94FF00708404605B0BDE8F08F626993 -S31508008680D74228BFD743002F57D004F128010191BC -S31508008690D505ED0D002D2FD1039B5889411E11EAF2 -S315080086A052250ED1002A7FD1A068002800F08480C8 -S315080086B0012812D0431C72D0A368A061002B6BD08E -S315080086C0039B227C02F04000C1B2002957D1A06961 -S315080086D05969861E8A1E964233D34FF0020884F8DB -S315080086E01180C8E7E2696569B24202D0E06885424E -S315080086F06AD3ED05E661ED0DC5F5007605F12803AB -S31508008700BE4228BF3E4659463246E018FDF7A8FC49 -S31508008710217C41F0400222746069D9F80010E368B0 -S31508008720321893422CBFE360E2608819BF1B62616E -S31508008730B344C9F80000ABD1217C41F0200323746F -S3150800874099E75889996A06FB0016002EC5D05FEA94 -S31508008750572A2E44C6D005EB0A01814288BFC5EBCD -S31508008760000A5946587832465346F8F733FEB0B9E8 -S31508008770E069861BB24531D84FEA4A26CCE75878D5 -S31508008780E26901990123F8F725FE40B9267C039B87 -S3150800879026F0400222749AE7039BA06091E74FF007 -S315080087A0010884F8118066E72046A169FEF74AFAAF -S315080087B000287FF47DAFBFE720462946FEF742FA38 -S315080087C000287FF475AFB7E7587801993246012338 -S315080087D0F8F7D2FD0028E2D165698AE74FF40072FE -S315080087E001980BEB4621FDF73BFC237C23F0400266 -S315080087F02274C1E770B50A2982B00E4604461BD01A -S315080088006268002A08DBA318551C3C2D1E7305DC7C -S31508008810A16865604A1CA26002B070BD21462A465E -S3150800882051F80C0B01ABFFF70BFF0198854214BFFB -S315080088304FF0FF350025EBE70D21FFF7DBFFDFE7FC -S3150800884070B582B001A90446FDF7EEFB002845D1B4 -S31508008850237C03F02002D1B200293FD003F0400068 -S31508008860C3B26BB10199E2694878012304F1280182 -S31508008870F8F7B0FD002833D1227C22F0400020749E -S315080088800198216AFDF73CFE40BB636ADD7A45F034 -S315080088902006DE72A26821689A76C2F30720D87687 -S315080088A00D78032D1ED0E168019D1977080C0E0A74 -S315080088B0090E00229877D977612048219A75DA75CA -S315080088C0187659769A74DA745E7701232846EB701F -S315080088D0FDF7AAFD227C22F02001217402B070BDAA -S315080088E00120FBE7160C320A1E755A75DBE700BF36 -S315080088F010B582B00446FFF7A3FF08B102B010BD59 -S31508008900204601A9FDF790FB0028F7D12060F5E77E -S31508008910F0B583B00D4601A90446FDF785FB06466A -S31508008920002850D1667C002E4DD1E368AB4206D2B2 -S31508008930227C02F00200C1B2002908BF1D460023AE -S3150800894062696361002D3ED0019F788947023AB17A -S31508008950013A691EB1FBF7F0B2FBF7F3984260D211 -S31508008960A268002A63D0A261002A32D1636915463B -S31508008970D805C10D002965D0E269AA4262D0277CD4 -S3150800898007F04003D8B204F1280750B10199012332 -S3150800899048783946F8F71EFDC0B9227C22F0400314 -S315080089A023740198394640782A460123F8F7E4FCEF -S315080089B060B96369E168E561994204D2227CE360A3 -S315080089C042F020002074304603B0F0BD01266674DC -S315080089D0F9E7BD4213D837E0FEF734F90246002816 -S315080089E049D0511CF2D0012A18D901994869824206 -S315080089F014D26369A261F818AF42606125D2207C5F -S31508008A0000F00203DBB2ED1B20461146002BE3D132 -S31508008A1011462046FDF794FD0246E2E702266674F3 -S31508008A20D1E779420A406261AD1AA2699CE711460C -S31508008A302046FEF707F901280246EFD00130C5D0D7 -S31508008A40A26090E7E168B7E76069E9054319C80DD0 -S31508008A50636170B101994869023A02388242DDD2EF -S31508008A604889896A00FB0212002AD7D002EB5525ED -S31508008A707EE705467CE760693D46E6E730B591B096 -S31508008A8010AB0D4643F83C0D05A918460022FDF724 -S31508008A9051FE044610B1204611B030BD0E4801996A -S31508008AA00F9002AA05A80D92FEF7A2FC044600281C -S31508008AB0F1D10D9991F90B30002B0ADB002DEAD084 -S31508008AC0A8750B980028E6D005A82946FDF7E2FA0E -S31508008AD0E1E70624DFE700BF9025002030B59DB00A -S31508008AE01CAB022243F86C0D02A91846FDF722FEBC -S31508008AF002460298069012B110461DB030BD284AAB -S31508008B000199109203AB06A80E93FEF771FC024674 -S31508008B100028F1D10E9991F90B00002824DB9DF865 -S31508008B201E30DA071ED4029D0D9A2978D47E907ECF -S31508008B30032940EA042405D1507D127D42EA00212A -S31508008B4044EA014403F01003D8B278B906A8FEF740 -S31508008B5001FE02460028CFD1D4B90298FDF764FC7D -S31508008B600246C9E70722C7E70622C5E711A800217A -S31508008B7011951394FDF74EFD02460028BCD111A8A5 -S31508008B80FEF74AFE02460028ECD00428DED0B3E7FA -S31508008B9006A82146FEF70AFE02460028ACD1DCE705 -S31508008BA0902500202DE9F041804682B016464F1EDA -S31508008BB00546002411E0012201AB30466946FFF75D -S31508008BC08BFC019B012B0AD19DF800000D28F2D0E1 -S31508008BD001340A2805F8010B01D0BC42EBDB002161 -S31508008BE029708C4214BF4046084602B0BDE8F081A1 -S31508008BF010B594B0027801910023029303935AB1F9 -S31508008C000446114601A8FFF7F5FD14F8012F002ABE -S31508008C10F7D1029A002A0CDB019804A96B46FFF7E4 -S31508008C200FFD30B90098029A824202D1039814B017 -S31508008C3010BD4FF0FF30FAE77F2830B414D9A9B930 -S31508008C400F4B07E05288A9B24C1C824209D0A1B248 -S31508008C50802912D05C889A1C4D1C844202F10203BA -S31508008C60F0D101F1800080B230BC7047FF2804D8EB -S31508008C708038044931F81000F6E70020F4E700BF11 -S31508008C807EAB000880AB000870B4294E294CB0F5BD -S31508008C90805F28BF2646331D33F8042C1E468AB14A -S31508008CA090420FD333F8021CCCB21519090AA84210 -S31508008CB00ADB04330029EFD106EB4406EBE7801AFA -S31508008CC033F8100070BC70470829FBD801A454F883 -S31508008CD021F000BFBF8C0008018D00080D8D00082B -S31508008CE0138D0008198D00081F8D0008258D0008B2 -S31508008CF02B8D0008F98C0008A0F5E35080B2E1E757 -S31508008D00841A04F00102811A88B2DBE7103880B2AF -S31508008D10D8E7203880B2D5E7303880B2D2E71A389B -S31508008D2080B2CFE7083080B2CCE7503880B2C9E7C6 -S31508008D3080AC0008C4AA0008013A70B48D18A9428C -S31508008D403ED24B780A7803EB022293B2C018CA4384 -S31508008D5080B2AA188342C2F3400235D88B1C9D42C2 -S31508008D6028D96AB11C785A7802EB042292B2801884 -S31508008D7080B2824201D9421C90B202339D4219D96F -S31508008D801E785C7804EB0624A4B2001980B29A1CFB -S31508008D90844201D9441CA0B29C78537803EB04237F -S31508008DA09BB2C01880B2834201D9431C98B2931C67 -S31508008DB09D42E5D8CA43AB1823F00102931CC91893 -S31508008DC0A94204D070BC7047431C98B2C6E709781C -S31508008DD00A02101880B28242F4D9431C98B2F1E70D -S31508008DE038B50E4C657C237C143D05EB03218DB20A -S31508008DF0401904F11A01082280B2FFF79DFF04F119 -S31508008E0022012A46FFF798FF10B94FF6FF7038BDC2 -S31508008E10020A42EA002398B238BD00BF142800208F -S31508008E2070B4C478134B0A19D4B2DC7086780D0A6C -S31508008E30AA19D2B29A7046785E7000789542187070 -S31508008E4003D90136F6B25E708EB1C9B28C420CDA1D -S31508008E500132D0B20749987038B94B785A1CD0B24B -S31508008E60487010B90B785A1C0A7070BC70470130EC -S31508008E701870EAE7682E002010B5094C23680146E9 -S31508008E8003F10800FFF7CCFF064A236850781478E8 -S31508008E909178D2781C7258729972DA7210BD00BF36 -S31508008EA098270020682E002008B5002006491422BD -S31508008EB0FFF742FF10B94FF6FF7008BD030A43EAF1 -S31508008EC0002080B208BD00BF222800200620FFF738 -S31508008ED087BF00BF42F67C6042F29C71C2F2000076 -S31508008EE0C2F2000142F6786242F66C6330B4C2F20E -S31508008EF000020024C2F2000304804C7601204FF4DD -S31508008F00806125461070198030BC7047064B074AA9 -S31508008F10198810B40024147019B10120107010BCFF -S31508008F2070471880FBE700BF7C2E0020782E0020B3 -S31508008F302DE9F04FB74CB84AB84FB94BD2F8009064 -S31508008F4004F1360103288BB0396019600DD0022868 -S31508008F501AD0A07B452800F0C780B24EB24D00203B -S31508008F60288030700BB0BDE8F08F99F8195005F0DD -S31508008F700F06032EF1D1B9F81000AA4EAA4D002803 -S31508008F80EDD1DFF8B0822EE0A84DEE78711CC8B29C -S31508008F90E87060B9AA78561CF1B2A97039B9687830 -S31508008FA0421CD6B26E7016B92978481C287099F8F2 -S31508008FB019209D4DDFF87C820026072A2E80A8F806 -S31508008FC0006000F0E080052A00F0DD80002A00F04D -S31508008FD0E380B9F81010002940F0E08002F00F0095 -S31508008FE00328904EBBD108223270009301F040F955 -S31508008FF0009B327802F02001C9B2002900F06A818C -S315080090000021A8F800101420DFF82C8289F819101E -S3150800901084F82F0028222A80502784F82E7099F881 -S315080090200810B8F8007084F82A1099F80930B8F8CA -S31508009030021084F82B3099F80A00764B84F82C0035 -S3150800904099F80B2084F82D2099F80C0084F826004E -S3150800905099F80D2084F8272099F80E0084F828003E -S3150800906099F80F00062284F82900E275B9F8040079 -S315080090706084B9F806006783A084A183B9F8001054 -S31508009080E183B9F80200208499F8191001F010005C -S31508009090C1B2002900F00C81002083F8310083F862 -S315080090A030002B88402100251A0AA17522746374A2 -S315080090B084F8355084F834506586FFF707FF5C4A14 -S315080090C0E57313886575591C8BB2C043190A608607 -S315080090D045201380A0732575A174E3742583FFF7D3 -S315080090E0E3FEC24322834BE04F4D94F81090667C12 -S315080090F0298806EB092989454EDC207D1FFA89F95E -S315080091008006A5F8009047D1667D002E44D1DFF889 -S315080091102881B8F80060002E40F0D080B8F8021018 -S31508009120002940F0CB8001920093FFF7BDFE4FF671 -S31508009130FF7290428246009B01982DD1E17DDFF8AF -S31508009140D4B0062900F01A81012925D19BF82220DE -S31508009150082A21D1BBF824004FF6F671002388426D -S315080091608BF8223040F29E810930ABF82400608BE0 -S31508009170A28BB8F8023066832A4EE0832284A38342 -S3150800918000233370EEE699F81A60701CC2B2782A8A -S3150800919089F81A2000F08780224EE0E699F81A60CE -S315080091A0711E89F81A10002EF6D199F81B60082E40 -S315080091B000F0CF80501E012840F2C880042E00F22D -S315080091C0C180032101FA06F1C8B202F00F02013686 -S315080091D0511E89F81A0089F81B600729DCD801A0F6 -S315080091E050F821F09F9200086F9200083D920008FF -S315080091F005920008999100080592000899910008BF -S3150800920005920008074EDFF83080112384F82F30C6 -S3150800921000E700BF1428002098270020582E0020B9 -S31508009220802E0020642E0020082800205C2E0020B6 -S315080092300A28002010280020602E0020C24E042094 -S315080092403070009301F014F8B8F80020009B1B68F2 -S315080092503B60002A67D0B9F81000002863D0283090 -S315080092601823288084F82F30DFF8F482D4E6DFF854 -S31508009270F0820227042684F82F70022206210A2388 -S315080092802C20602784F8376084F8362084F8381054 -S3150800929084F83930288084F82E70AB4EBFE6DFF8A4 -S315080092A0C0821227E6E7002189F81910A64E56E66D -S315080092B083F830200A2283F83120F2E6E08BB042A8 -S315080092C07FF46AAFA149088CB8F8021088427FF487 -S315080092D063AF28E702F01000C0B278B1012004227B -S315080092E01127A9F8100089F8192089F81B10A8F881 -S315080092F0001084F82F70DFF868828BE6B8F8001043 -S3150800930011B3D20733D5A9F81000B9F81220914243 -S3150800931088BFA8F80020B8F80020A9F81020002176 -S3150800932089F81B1093E7327802F00201CBB2002BC2 -S315080093303FF415AE282710212F8084F82F10DFF868 -S31508009340208269E6302040E70A46E8E7052E7FF4E2 -S3150800935035AF00227C4E89F819208021317000F043 -S3150800936087FF142384F82F30DFF8F48152E6B9F822 -S315080093701020002AC9D076480280D0E700930190D1 -S31508009380FFF7A4FD5045019A009B7FF405AFDFF86F -S31508009390D4A19AF8190030B1BBF82460BAF80410C1 -S315080093A08E4200F0838094F82F3003F03F06022E99 -S315080093B05ED0654E94F82F20644B02F00400C1B2CB -S315080093C000297FF4CCAD93F82DA093F82BC093F821 -S315080093D0297083F829A04FF0140A93F8262093F8E9 -S315080093E0280093F82C9093F8271093F82AE083F82E -S315080093F02FA001374FF0280A83F827C0DFF85CC191 -S31508009400A5F800A0FFB24FF0500A83F82EA083F803 -S31508009410289083F82C0083F82B108CF8002083F80A -S3150800942026E083F82A2083F82D7067B90130C7B281 -S3150800943083F82C703FB90131C8B283F82B0010B9F4 -S31508009440013283F82A20638CB4F824E0678BB4F8D9 -S315080094501CC0B8F80010B8F802203E48A4F822E06C -S315080094600380A384E783A4F820C06183A28318E657 -S31508009470364F3949BB8C0988DFF8D890374FA9F899 -S315080094800030002699423E7003D001222E4E3A70D3 -S3150800949090E7002800F02381072800F01E810120AC -S315080094A0387079E60830ABF8240060E6BBF822602D -S315080094B0BAF806108E427FF476AFBBF81A60BAF88F -S315080094C000108E427FF46FAFBBF81C60BAF802102A -S315080094D08E427FF468AF9BF82FC01B4ECDF808C0AC -S315080094E00CF0040E00215FFA8EFCC2F800A0317061 -S315080094F0BCF1000F66D19BF82EE0DFF860B04FEAAA -S315080095001E1C4FEA8C01A9F11409C1EB090E00F0E3 -S315080095100F001FFA8EF902288BF80010A5F80090A4 -S3150800952022D0B9F1000F02D10298810722D0B4F8EF -S3150800953026E0BAF808108E4558D01027DFF8249090 -S3150800954084F82F7066E500BF642E002014280020DA -S31508009550102800206E2E00207C2E0020782E002059 -S31508009560602E00209C270020DDF808C00CF03F0183 -S315080095701229D6D1DDF808E00EF01001C8B220B1E4 -S31508009580BAF81010DFF84893C1BB9AF8191001F021 -S315080095900F00013807283FF6E2AC0FF2080C5CF81A -S315080095A020F000BFAB990008859900087598000857 -S315080095B039980008E3970008CB9700083B95000800 -S315080095C0D395000820228AF81910327000F050FE50 -S315080095D0C5E43378DB077FF5C2AC0022BA488AF8BF -S315080095E019201021017000F043FEB8E4B748B849C5 -S315080095F0B0F828C0488984459FD1BBE709F10C001B -S3150800960001920093FFF70CFCB24994F82A2091F8CE -S3150800961000C0009BCDF808C09445019AB5D142F622 -S315080096201400C2F2000091F801E090F82B00CDF882 -S315080096300CE08645A9D142F61400C2F2000091F862 -S3150800964002C090F82C00CDF814C084459DD142F68E -S315080096501400C2F20000C97890F82D00814294D116 -S31508009660DDF808E0DDF80CC089F80CE099F81B0075 -S31508009670DDF814E089F80DC089F80EE089F80F10B6 -S3150800968008BB99F818C099F81A0099F81610C0EB93 -S315080096900C00A0EBD100C0B241185FFA81FEC1B23E -S315080096A011F0800F89F816E001D04042C1B29AF84D -S315080096B01700A0EB90004118C8B200EBDE0C8AF840 -S315080096C017008AF818C09AF8181001208AF81A1094 -S315080096D000213070AAF8101057E7012139707E4E24 -S315080096E0C2F800A096F800C096F801E0B178F078C4 -S315080096F094F82960AAF80430069694F8276005902D -S315080097004FF0030B8AF81AB08AF818B008964FF08B -S31508009710040B00268AF816608AF817B08AF81B60C8 -S31508009720638C94F82800AAF80630638B0790AAF889 -S31508009730003094F82600A38B8AF80CC08AF80E101D -S31508009740DDF814C00699099001221046AAF80230DD -S315080097508AF819208AF80DE08AF80FC0AAF81020AE -S315080097608AF80B10079ADDF820E0099B8AF80A2088 -S315080097708AF809E08AF80830FFF77EFB94F82E008D -S3150800978000F0F001502940F34D8120FA0BF3534ABB -S31508009790581F800013780EE091F836307BB1012B04 -S315080097A000F04481022B2BD09EF8371001EB060EF1 -S315080097B029B15FFA8EF6A11986428E46ECDB3E7019 -S315080097C01370DFF80C91122754E53378DB077FF521 -S315080097D0C6AB072200218AF819208AF81A10FFF763 -S315080097E0BEBB288808B1FFF747FB94F82F00C207CD -S315080097F000F11F812A88002A7FF49FAEFFF7AFBBCE -S3150800980091F837C0BCF1040FCED191F8380091F821 -S315080098103910137041EA002203F5C1639A4238BF32 -S3150800982013463E70A9F80020AAF81230AAF8143098 -S31508009830DFF89C9012271DE5288808B1FFF71CFB66 -S3150800984094F82F1011F0010000F091803778F8078E -S3150800985040F18980002307228AF819208AF81A30ED -S31508009860AAF810300120FFF707FB1021317000F02D -S31508009870FFFC62E694F82F20D00731D501F01000DE -S31508009880C0B268BBBAF81030002B7FF468AB2F88DB -S31508009890791C88B2FFF7F0FA30782A8840F010036E -S315080098A033701AB1084940F012070F7000F0E0FC57 -S315080098B0012008220023DFF81890AAF810008AF879 -S315080098C019208AF81B30A0E4642E002014280020F2 -S315080098D09C270020682E00205C2E0020842E002065 -S315080098E002F02002D0B268B194F8348094F83500BA -S315080098F03A68B5F800E040EA08201218C0EB0E00F6 -S315080099003A602880288858B101F01001CAB23AB9DD -S31508009910317841F0020232700093FFF7ADFA009BEE -S3150800992094F830C094F83110BAF814006C4A01EB78 -S315080099300C2189B28142118000D801B910801088A3 -S315080099403278AAF8120091073FF409ABDFF8A08134 -S31508009950DFF8A0910020A8F80000009300F088FC2A -S31508009960009BFFF746BB06208AF819007AE733788A -S31508009970D9077FF53FAF05218AF81910AAF8100014 -S31508009980FFF7EDBA3178C90705D594F82F0000F02E -S315080099903F01122920D020233370019200F068FC81 -S315080099A0019A10680021417604E531784D4AC807C6 -S315080099B07FF5D5AA03218AF8191028884021117045 -S315080099C00021AAF810100028C0D042211170009377 -S315080099D0FFF752FA009BB9E7434991F82E2002F0A7 -S315080099E0F00050284CDD41481109A1F1050801781D -S315080099F04FEA880C002204EB020E6245F04668DA4C -S31508009A009EF83610002964D0012966D002291ED096 -S31508009A1098F837E00EEB0208BEF1000F59D05FFA4E -S31508009A2088F2E8E7DFF8CC90122723E40136F6B28D -S31508009A30C1E60023072701208AF819708AF81A3028 -S31508009A40FFF71AFA1022327000F012FC75E59EF83C -S31508009A503790B9F1040FDBD19EF838C09EF83990DB -S31508009A6001708BF8002049EA0C2001F5C1611C4AF7 -S31508009A70884238BF01461080AAF81210AAF81410B6 -S31508009A8094F8260094F827E094F8281094F82920EA -S31508009A908AF808004FF0030C8AF819C08AF809E01A -S31508009AA08AF80A108AF80B2001200093DFF8408014 -S31508009AB0DFF84090FFF7E0F900234220AAF81030BB -S31508009AC02B80A8F80030307000F0D2FB009BFFF71F -S31508009AD090BA01708BF80020D2E70132D2B28AE739 -S31508009AE06E2E0020642E002014280020842E0020CC -S31508009AF0102800209C270020030A43EA002080B291 -S31508009B00704700BF0A1E034609DD0549086805496E -S31508009B1083420A8003D0194692B200F0EFBB704721 -S31508009B20802E002010280020F8B59C4B9C4A1888E7 -S31508009B309C4E918BD48B20B15A8812B1884200F082 -S31508009B40DA809A89954822B1C58915B18A4200F00A -S31508009B50ED801A8B914822B1458B15B18A4200F0E7 -S31508009B60EC809A8C8D4822B1C58C15B18A4200F0DA -S31508009B70EB801A8E894822B1458E15B18A4200F0CB -S31508009B80EA809A8F854822B1C58F15B18A4200F0BE -S31508009B90C680B3F8482081482AB1B0F84A5015B1B2 -S31508009BA08A4200F0AE80B3F854207C482AB1B0F857 -S31508009BB0565015B18A4200F0AB801D88774C1DB906 -S31508009BC06588002D00F094809989744C19B9E2894A -S31508009BD0002A00F0D080188B704C18B9658B002DC0 -S31508009BE000F0CC80998C6D4C19B9E28C002A00F0F3 -S31508009BF0C880188E694C18B9658E002D00F0C4808F -S31508009C00998F664C19B9E28F002A00F0C080B3F824 -S31508009C104800624C20B9B4F84A50002D00F0BA80CA -S31508009C20B3F854105D4C00295CD05F4D9F7A2978B3 -S31508009C300024CF1B22462046A7429C7DC8BFFAB205 -S31508009C400C1B9442C8BFE2B293F82240C4EB01044D -S31508009C50C8BF01209442C8BFE2B293F82E40C4EBB5 -S31508009C600104C8BF02209442C8BFE2B293F83A4042 -S31508009C70C4EB0104C8BF03209442C8BFE2B293F8FC -S31508009C804640C4EB0104C8BF04209442C8BFE2B2F0 -S31508009C9093F85240C4EB0104C8BF05209442C8BFDC -S31508009CA0E2B293F85E40C4EB0101C8BF06209142B8 -S31508009CB0C8BFCAB23D49C8BF07200A703C4A3070BF -S31508009CC000EB4004107003EB84043A490422204652 -S31508009CD000F014FB201D3849062200F00FFB2B78F4 -S31508009CE0A372F8BDB4F85620002A9ED1072554342D -S31508009CF035702D4DE9E7A2427FF423AF00221C46BA -S31508009D002FE0A5427FF44FAF062200F1480428E071 -S31508009D10A5427FF452AF072200F1540421E0A54280 -S31508009D207FF437AF052200F13C041AE0A5427FF420 -S31508009D3010AF012200F10C0413E0A5427FF411AF25 -S31508009D40022200F118040CE0A5427FF412AF0322A8 -S31508009D5000F1240405E0A5427FF413AF042200F1C4 -S31508009D60300415493270201D062200F0C7FA0E4845 -S31508009D700178A172F8BD01250C34B9E7022518341B -S31508009D80B6E703252434B3E704253034B0E70525C0 -S31508009D903C34ADE706254834AAE700BF882E0020E4 -S31508009DA014280020852E0020E92E0020862E00206B -S31508009DB0E82E0020302800202A28002070B5154EED -S31508009DC0154C3278154D0023501C3070237005E071 -S31508009DD02078421CD3B2072B23701AD803EB43030F -S31508009DE005EB830035F82310428842EA010399B24D -S31508009DF00029EDD03278837AD11A7729E8DD042252 -S31508009E00002100F09FFA2078421CD3B2072B23705A -S31508009E10E4D970BDE92E0020852E0020882E00206A -S31508009E20F8B52A4C2388292B40D9294DAA8A00201F -S31508009E30B2F5807F2080074603D0B2F5007F38D080 -S31508009E40F8BD244EE98C32889142F9D1288D738861 -S31508009E509842F5D1FFF768FE022305F1160106229E -S31508009E6005F120006B752F7500F048FA1A4906228D -S31508009E7005F1160000F042FA06221749A81800F064 -S31508009E803DFA05F120010622284600F037FAA88B8C -S31508009E90E98B32887388E8842985AA8308200621F5 -S31508009EA02A22EB83287369732280F8BD0023238056 -S31508009EB0F8BD084BE98C1A889142C1D1288D5B8878 -S31508009EC09842BDD1BDE8F840FFF72EBE082800200D -S31508009ED014280020602E0020702E0020F8B56F4C44 -S31508009EE0E38B4FF6FF7293427AD06D4E6D4D3288F2 -S31508009EF0298883EA0200084267D06B496B4D0B88B4 -S31508009F0048882B8068806A4ADFF8C8E11088698823 -S31508009F1098427BD09089664F984200F08480108BD7 -S31508009F20634F984200F08F80908C614F984200F002 -S31508009F308280108E5E4F984200F08D80908F5C4F25 -S31508009F40984200F09080B2F84800594F984200F0C5 -S31508009F509B80B2F8542056489A4200F08C80082715 -S31508009F60FF2106224D488EF8007000F0EBF900211B -S31508009F700622504800F0E6F94F495048062200F0FC -S31508009F80BDF94D494E48062200F0B8F9298870886F -S31508009F90E18400230121E0830420B5F802C0E074BF -S31508009FA0062223756175A373E17363743588454981 -S31508009FB0454B46486273A2742A2227742773A4F86D -S31508009FC028C0A58319600280F8BD218C70886D8829 -S31508009FD081EA00022A4290D1344D2B80698092E7AB -S31508009FE0208C984281D120463949062200F086F90C -S31508009FF031493248062200F081F93448028808239C -S3150800A0000E320021237361730280F8BD508888429E -S3150800A01080D1002311460431062220488EF80030EC -S3150800A02000F06CF9E4E7F88988427FF478AF0123F9 -S3150800A03007F10C01EFE7F88C88427FF47AAF032327 -S3150800A04007F12401E7E7788B88427FF46DAF022396 -S3150800A05007F11801DFE7788E88427FF46FAF042393 -S3150800A06007F13001D7E7F88F88427FF46CAF0523F4 -S3150800A07007F13C01CFE7B0F856308B427FF46FAF5B -S3150800A080072300F15401C6E7B7F84A0088427FF46F -S3150800A09060AF062307F14801BDE700BF142800207A -S3150800A0A0602E0020042800200C280020EC2E00201A -S3150800A0B0882E002034280020702E00201A28002020 -S3150800A0C02A2800204A280020582E00200828002088 -S3150800A0D074AE0008852E002038B5F8F741F8FAF76F -S3150800A0E0A5FD42F6F463C2F2000300F5FA701860A3 -S3150800A0F0FAF79CFD42F6F061C2F2000100F51C5227 -S3150800A10010320A60FEF7E6FE42F66061C2F200010E -S3150800A11042F60402C2F200024FF6A96443F613752A -S3150800A1200C804D8042F60C034FF6FF71C2F2000315 -S3150800A1301180002151804EF6030040F213121C8054 -S3150800A1405A80FEF7E3FEBDE83840F8F737B900BF96 -S3150800A150F8B5164B1F68FA693A62E1B14C1EA4B20B -S3150800A160661C012307F11C020578B342157204EA3E -S3150800A170030410D02CB144780223B34287F8254053 -S3150800A18009D0C55CD41801332572C55CD4180133CF -S3150800A190B3422572F5D10431A7F8641007F12000FF -S3150800A1A0FFF7B0FCF869411CF961F8BD9827002053 -S3150800A1B070B5F8F715F9F8B9FAF738FD264B1A68A5 -S3150800A1C090420BD325482649264C086002F5FA72B8 -S3150800A1D002201A60FEF7ACFE238843BBFAF726FD79 -S3150800A1E021490A68904205D302F51C5310330B60C7 -S3150800A1F0FFF7E4FD002070BD1A4D1C4C28804FF473 -S3150800A2000060A689FFF778FC864217D040F606005C -S3150800A210A489FFF771FC8442CED1FFF701FE2B8893 -S3150800A220002BC9D0F8F700F900202880C4E7FFF70B -S3150800A23055FEF8F7F9F800202080CFE70120FEF751 -S3150800A24077FE29880029B7D0FFF748FEF8F7ECF81B -S3150800A25000222A80B0E700BFF42E00209C270020A9 -S3150800A2609827002008280020F02E00201428002017 -S3150800A27038B5174D174A2B78146803F04000C2B258 -S3150800A280CAB9D90703F00401C8B248BFA4F86420C4 -S3150800A29010B1B4F86410A1B903F00202D1B201B941 -S3150800A2A038BD0D4802680023101DA4F86430BDE8C7 -S3150800A2B03840FBF70DB901210020E161A4F86400DC -S3150800A2C038BD04F12000FFF71DFC2B78E4E700BF3A -S3150800A2D0642E002098270020582E0020A0F1300078 -S3150800A2E009288CBF00200120704700BFA0F1610338 -S3150800A2F0D9B2192998BF2038704700BF844640EA6A -S3150800A300010313F0030F40F01080242AC0F00D80DB -S3150800A3102DE9F00FB1E8F80FA0E8F80FA2F1240232 -S3150800A320242ABFF4F7AFBDE8F00F002A00F0078033 -S3150800A33011F8013B00F8013B013A7FF4F9AF60469A -S3150800A340704700BF8446002A00F0328010F0030FE1 -S3150800A35000F0078000F8011B013A00F02980FFF79A -S3150800A360F5BF282AC0F01F80A2F128022DE9F00FB8 -S3150800A37001F0FF0141EA012141EA014141EA016197 -S3150800A3800B460C460D460E460F46884689468A46B3 -S3150800A3908B46A0E8FA0F283ABFF4FBAFBDE8F00FEA -S3150800A3A0283200F0058000F8011B013A7FF4FBAF64 -S3150800A3B06046704738B504460D4600F019F842F66F -S3150800A3C0F863C2F200031D6044F0800442F6FC60A4 -S3150800A3D0C2F200000460024611680029FCD100F0B0 -S3150800A3E009F842F6F863C2F20003186838BD00BFE0 -S30D0800A3F0704700BF704700BF6B -S3150800A3F8433A2F55736572732F766F6F726275724B -S3150800A408672F4465736B746F702F426C7454657349 -S3150800A418742F5461726765742F44656D6F2F4152A6 -S3150800A4284D434D345F53544D333246345F4F6C6950 -S3150800A4386D65785F53544D3332453430375F437210 -S3150800A4486F7373776F726B732F426F6F742F6964AC -S3150800A458652F2E2E2F6C69622F7569702F6E65749D -S3150800A4686465762E63000000020102002F64656D9C -S3150800A4786F70726F675F6F6C696D65785F73746DFF -S3150800A4883332653430372E73726563002F626F6F07 -S3150800A498746C6F672E7478740000000057696E55DF -S3150800A4A853422042756C6B20496E74657266616307 -S3150800A4B86500000044656661756C7400303030309C -S3150800A4C83030303030353043000000004F70656E4C -S3150800A4D8424C5420557365720000000057696E5542 -S3150800A4E853422042756C6B204465766963650000A3 -S3150800A4F8433A2F55736572732F766F6F726275724A -S3150800A508672F4465736B746F702F426C7454657348 -S3150800A518742F5461726765742F44656D6F2F4152A5 -S3150800A5284D434D345F53544D333246345F4F6C694F -S3150800A5386D65785F53544D3332453430375F43720F -S3150800A5486F7373776F726B732F426F6F742F6964AB -S3150800A558652F2E2E2F2E2E2F2E2E2F2E2E2F536F63 -S3150800A568757263652F41524D434D345F53544D33CD -S3150800A5783246342F43726F7373776F726B732F7605 -S3150800A5886563746F72732E6300000000433A2F5593 -S3150800A598736572732F766F6F72627572672F44656B -S3150800A5A8736B746F702F426C74546573742F54618F -S3150800A5B8726765742F44656D6F2F41524D434D344C -S3150800A5C85F53544D333246345F4F6C696D65785F17 -S3150800A5D853544D3332453430375F43726F7373774C -S3150800A5E86F726B732F426F6F742F6964652F2E2EE7 -S3150800A5F82F2E2E2F2E2E2F2E2E2F536F7572636504 -S3150800A6082F41524D434D345F53544D333246342F00 -S3150800A61863616E2E6300000005020602060307033F -S3150800A6280803090309040A040B040C040C050D05A0 -S3150800A6380E050F050F06100610071008000008007B -S3150800A6481000180020002800300038004000480094 -S3150800A658500058008000880090009800A000A800C4 -S3150800A668B000B800C000C800D000D80000C0000874 -S3150800A6780040000003000000000001080000010077 -S3150800A688040000000000020800000200050000009F -S3150800A6980000040800000200060000000000060882 -S3150800A6A80000020007000000000008080000020079 -S3150800A6B80800000000000A0800000200090000005F -S3150800A6C800000C08000002000A00000000000E083E -S3150800A6D8000002000B000000433A2F557365727399 -S3150800A6E82F766F6F72627572672F4465736B746F16 -S3150800A6F8702F426C74546573742F5461726765744D -S3150800A7082F44656D6F2F41524D434D345F53544D59 -S3150800A718333246345F4F6C696D65785F53544D33F1 -S3150800A72832453430375F43726F7373776F726B7362 -S3150800A7382F426F6F742F6964652F2E2E2F2E2E2F9A -S3150800A7482E2E2F2E2E2F536F757263652F41524D5D -S3150800A758434D345F53544D333246342F7561727402 -S3150800A7682E630000433A2F55736572732F766F6F01 -S3150800A77872627572672F4465736B746F702F426CBB -S3150800A78874546573742F5461726765742F44656DC4 -S3150800A7986F2F41524D434D345F53544D333246342F -S3150800A7A85F4F6C696D65785F53544D333245343065 -S3150800A7B8375F43726F7373776F726B732F426F6F5E -S3150800A7C8742F6964652F2E2E2F2E2E2F2E2E2F2EA0 -S3150800A7D82E2F536F757263652F41524D434D345F63 -S3150800A7E853544D333246342F7573622E6300000076 -S3150800A7F808003F0008003F004F70656E424C540041 -S3150800A808303A0000433A2F55736572732F766F6F87 -S3150800A81872627572672F4465736B746F702F426C1A -S3150800A82874546573742F5461726765742F44656D23 -S3150800A8386F2F41524D434D345F53544D333246348E -S3150800A8485F4F6C696D65785F53544D3332453430C4 -S3150800A858375F43726F7373776F726B732F426F6FBD -S3150800A868742F6964652F2E2E2F2E2E2F2E2E2F2EFF -S3150800A8782E2F536F757263652F66696C652E630094 -S3150800A8884669726D776172652075706461746520B2 -S3150800A8987265717565737420646574656374656437 -S3150800A8A80A0D00004F70656E696E67206669726DDD -S3150800A8B8776172652066696C6520666F72207265B5 -S3150800A8C86164696E672E2E2E000000004552524FAD -S3150800A8D8520A0D004F4B0A0D0000000053746172AE -S3150800A8E874696E67207468652070726F6772616D27 -S3150800A8F86D696E672073657175656E63650A0D0007 -S3150800A90850617273696E67206669726D77617265E0 -S3150800A9182066696C6520746F2064657465637420A5 -S3150800A928657261736520626C6F636B732E2E2E00D9 -S3150800A93845726173696E67200000000020627974A9 -S3150800A94865732066726F6D206D656D6F727920610B -S3150800A958742030780000000052656164696E6720CB -S3150800A9686C696E652066726F6D2066696C652E2E39 -S3150800A9782E4552524F520A0D00000000496E766164 -S3150800A9886C696420636865636B73756D20666F759B -S3150800A9986E642E2E2E4552524F520A0D00000000A4 -S3150800A9A850726F6772616D6D696E672000000000EE -S3150800A9B820627974657320746F206D656D6F72797E -S3150800A9C8206174203078000057726974696E6720B0 -S3150800A9D870726F6772616D20636865636B73756DF6 -S3150800A9E82E2E2E00436C6F73696E67206669726D2A -S3150800A9F8776172652066696C650A0D004669726D2D -S3150800AA087761726520757064617465207375636310 -S3150800AA1865737366756C6C7920636F6D706C657495 -S3150800AA2865640A0D00000000222A3A3C3E3F7C7FF6 -S3150800AA38000000002B2C3B3D5B5D0000809A4541D9 -S3150800AA488E418F804545454949498E8F9092924F48 -S3150800AA58994F555559999A9B9C9D9E9F41494F5583 -S3150800AA68A5A5A6A7A8A9AAABACADAEAFB0B1B2B317 -S3150800AA78B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C308 -S3150800AA88C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3F8 -S3150800AA98D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E8 -S3150800AAA8E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3D8 -S3150800AAB8F4F5F6F7F8F9FAFBFCFDFEFF7D1D010033 -S3150800AAC8632C001E9601A01E5A01001F0806101FB7 -S3150800AAD80606201F0806301F0806401F0606511FCF -S3150800AAE80700591F521F5B1F541F5D1F561F5F1F04 -S3150800AAF8601F0806701F0E00BA1FBB1FC81FC91F94 -S3150800AB08CA1FCB1FDA1FDB1FF81FF91FEA1FEB1F27 -S3150800AB18FA1FFB1F801F0806901F0806A01F0806B5 -S3150800AB28B01F0400B81FB91FB21FBC1FCC1F0100F5 -S3150800AB38C31FD01F0206E01F0206E51F0100EC1F0F -S3150800AB48F21F0100FC1F4E2101003221702110025C -S3150800AB58842101008321D0241A05302C2F04602C67 -S3150800AB680201672C0601752C0201802C6401002D50 -S3150800AB78260841FF1A030000C700FC00E900E200A6 -S3150800AB88E400E000E500E700EA00EB00E800EF0073 -S3150800AB98EE00EC00C400C500C900E600C600F400D3 -S3150800ABA8F600F200FB00F900FF00D600DC00A20060 -S3150800ABB8A300A500A7209201E100ED00F300FA0022 -S3150800ABC8F100D100AA00BA00BF001023AC00BD00EE -S3150800ABD8BC00A100AB00BB00912592259325022550 -S3150800ABE8242561256225562555256325512557258A -S3150800ABF85D255C255B251025142534252C251C2563 -S3150800AC0800253C255E255F255A2554256925662590 -S3150800AC18602550256C2567256825642565255925E9 -S3150800AC285825522553256B256A2518250C25882568 -S3150800AC3884258C2590258025B103DF009303C0035E -S3150800AC48A303C303B500C403A6039803A903B4035F -S3150800AC581E22C603B50329226122B1006522642291 -S3150800AC6820232123F7004822B0001922B7001A2208 -S3150800AC787F20B200A025A00061001A03E000170390 -S3150800AC88F8000703FF0001007801000130013201CE -S3150800AC980601390110014A012E01790106018001D0 -S3150800ACA84D004302810182018201840184018601E3 -S3150800ACB88701870189018A018B018B018D018E0124 -S3150800ACC88F0190019101910193019401F601960172 -S3150800ACD89701980198013D029B019C019D0120025C -S3150800ACE89F01A001A001A201A201A401A401A60135 -S3150800ACF8A701A701A901AA01AB01AC01AC01AE01E4 -S3150800AD08AF01AF01B101B201B301B301B501B50194 -S3150800AD18B701B801B801BA01BB01BC01BC01BE0143 -S3150800AD28F701C001C101C201C301C401C501C401BB -S3150800AD38C701C801C701CA01CB01CA01CD01100163 -S3150800AD48DD0101008E01DE011201F3010300F101A4 -S3150800AD58F401F401F8012801220212013A02090055 -S3150800AD68652C3B023B023D02662C3F02400241022B -S3150800AD78410246020A015302400081018601550232 -S3150800AD8889018A0158028F015A0290015C025D0204 -S3150800AD985E025F029301610262029401640265021F -S3150800ADA866026702970196016A02622C6C026D02B6 -S3150800ADB86E029C01700271029D01730274029F0162 -S3150800ADC876027702780279027A027B027C02642C80 -S3150800ADD87E027F02A60181028202A90184028502F7 -S3150800ADE886028702AE014402B101B20145028D020C -S3150800ADF88E028F0290029102B7017B030300FD03BE -S3150800AE08FE03FF03AC0304008603880389038A0349 -S3150800AE18B1031103C2030200A303A303C40308036F -S3150800AE28CC0303008C038E038F03D8031801F2039F -S3150800AE380A00F903F303F403F503F603F703F70324 -S3150800AE48F903FA03FA0330042003500410076004D0 -S3150800AE5822018A043601C1040E01CF040100C00488 -S3150800AE68D00444016105260400000000FFFFFFFF27 -S3090800AE78FFFF0000CA -S3150800AE7C01000000010000000000000001020304AC -S3150800AE8C01020304060708091C00002051260008C5 -S3150800AE9C9525000849250008B1240008192500083D -S3150800AEAC952400087D240008C1240008D124000834 -S3150800AEBCE1240008F924000809022000010100C059 -S3150800AECC320904000002FF00000007058102400059 -S3150800AEDCFF070501024000FF9D4100088541000857 -S3150800AEECCD41000800000000000000006D4100087C -S3150800AEFC79410008554100080000000000000000D8 -S3150800AF0C454100084542000855420008C54200085C -S3150800AF1CE5420008A542000885420008654200087B -S3150800AF2C040309041201100100000040501DAC6016 -S3150800AF3C000101020301000005430008094300084B -S3150800AF4C0D4300082543000821430008194300084F -S30A0800AF5C114300080482 -S7050800018968 diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/blt_conf.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/blt_conf.h deleted file mode 100644 index 7392280a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/blt_conf.h +++ /dev/null @@ -1,307 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Boot\blt_conf.h -* \brief Bootloader configuration header file. -* \ingroup Boot_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef BLT_CONF_H -#define BLT_CONF_H - -/**************************************************************************************** -* C P U D R I V E R C O N F I G U R A T I O N -****************************************************************************************/ -/* To properly initialize the baudrate clocks of the communication interface, typically - * the speed of the crystal oscillator and/or the speed at which the system runs is - * needed. Set these through configurables BOOT_CPU_XTAL_SPEED_KHZ and - * BOOT_CPU_SYSTEM_SPEED_KHZ, respectively. To enable data exchange with the host that is - * not dependent on the targets architecture, the byte ordering needs to be known. - * Setting BOOT_CPU_BYTE_ORDER_MOTOROLA to 1 selects big endian mode and 0 selects - * little endian mode. - * - * Set BOOT_CPU_USER_PROGRAM_START_HOOK to 1 if you would like a hook function to be - * called the moment the user program is about to be started. This could be used to - * de-initialize application specific parts, for example to stop blinking an LED, etc. - */ -/** \brief Frequency of the external crystal oscillator. */ -#define BOOT_CPU_XTAL_SPEED_KHZ (12000) -/** \brief Desired system speed. */ -#define BOOT_CPU_SYSTEM_SPEED_KHZ (168000) -/** \brief Motorola or Intel style byte ordering. */ -#define BOOT_CPU_BYTE_ORDER_MOTOROLA (0) -/** \brief Enable/disable hook function call right before user program start. */ -#define BOOT_CPU_USER_PROGRAM_START_HOOK (1) - - -/**************************************************************************************** -* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N -****************************************************************************************/ -/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE - * configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed - * in bits/second. Two CAN messages are reserved for communication with the host. The - * message identifier for sending data from the target to the host is configured with - * BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with - * BOOT_COM_CAN_RXMSG_ID. The maximum amount of data bytes in a message for data - * transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and - * BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more - * than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the - * CAN controller channel. - * - */ -/** \brief Enable/disable CAN transport layer. */ -#define BOOT_COM_CAN_ENABLE (1) -/** \brief Configure the desired CAN baudrate. */ -#define BOOT_COM_CAN_BAUDRATE (500000) -/** \brief Configure CAN message ID target->host. */ -#define BOOT_COM_CAN_TX_MSG_ID (0x7E1) -/** \brief Configure number of bytes in the target->host CAN message. */ -#define BOOT_COM_CAN_TX_MAX_DATA (8) -/** \brief Configure CAN message ID host->target. */ -#define BOOT_COM_CAN_RX_MSG_ID (0x667) -/** \brief Configure number of bytes in the host->target CAN message. */ -#define BOOT_COM_CAN_RX_MAX_DATA (8) -/** \brief Select the desired CAN peripheral as a zero based index. */ -#define BOOT_COM_CAN_CHANNEL_INDEX (1) - -/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE - * configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed - * in bits/second. The maximum amount of data bytes in a message for data transmission - * and reception is set through BOOT_COM_UART_TX_MAX_DATA and BOOT_COM_UART_RX_MAX_DATA, - * respectively. It is common for a microcontroller to have more than 1 UART interface - * on board. The zero-based BOOT_COM_UART_CHANNEL_INDEX selects the UART interface. - * - */ -/** \brief Enable/disable UART transport layer. */ -#define BOOT_COM_UART_ENABLE (1) -/** \brief Configure the desired communication speed. */ -#define BOOT_COM_UART_BAUDRATE (57600) -/** \brief Configure number of bytes in the target->host data packet. */ -#define BOOT_COM_UART_TX_MAX_DATA (64) -/** \brief Configure number of bytes in the host->target data packet. */ -#define BOOT_COM_UART_RX_MAX_DATA (64) -/** \brief Select the desired UART peripheral as a zero based index. */ -#define BOOT_COM_UART_CHANNEL_INDEX (5) - - -/* The USB communication interface is selected by setting the BOOT_COM_USB_ENABLE - * configurable to 1. The maximum amount of data bytes in a message for data transmission - * and reception is set through BOOT_COM_USB_TX_MAX_DATA and BOOT_COM_USB_RX_MAX_DATA, - * respectively. - * - */ -/** \brief Enable/disable USB transport layer. */ -#define BOOT_COM_USB_ENABLE (1) -/** \brief Configure number of bytes in the target->host data packet. */ -#define BOOT_COM_USB_TX_MAX_DATA (63) -/** \brief Configure number of bytes in the host->target data packet. */ -#define BOOT_COM_USB_RX_MAX_DATA (63) - - -/* The NET communication interface for firmware updates via TCP/IP is selected by setting - * the BOOT_COM_NET_ENABLE configurable to 1. The maximum amount of data bytes in a - * message for data transmission and reception is set through BOOT_COM_NET_TX_MAX_DATA - * and BOOT_COM_NET_RX_MAX_DATA, respectively. The default IP address is configured - * with the macros BOOT_COM_NET_IPADDRx. The default netmask is configued with the macros - * BOOT_COM_NET_NETMASKx. The default gateway is configured with the macros - * BOOT_COM_NET_GATEWAYx. The bootloader acts and a TCP/IP server. The port the server - * listen on for connections is configured with BOOT_COM_NET_PORT. - */ -/** \brief Enable/disable the NET transport layer. */ -#define BOOT_COM_NET_ENABLE (1) -/** \brief Configure number of bytes in the target->host data packet. */ -#define BOOT_COM_NET_TX_MAX_DATA (64) -/** \brief Configure number of bytes in the host->target data packet. */ -#define BOOT_COM_NET_RX_MAX_DATA (64) -/** \brief Configure the port that the TCP/IP server listens on */ -#define BOOT_COM_NET_PORT (1000) -/** \brief Configure the 1st byte of the IP address */ -#define BOOT_COM_NET_IPADDR0 (169) -/** \brief Configure the 2nd byte of the IP address */ -#define BOOT_COM_NET_IPADDR1 (254) -/** \brief Configure the 3rd byte of the IP address */ -#define BOOT_COM_NET_IPADDR2 (19) -/** \brief Configure the 4th byte of the IP address */ -#define BOOT_COM_NET_IPADDR3 (63) -/** \brief Configure the 1st byte of the network mask */ -#define BOOT_COM_NET_NETMASK0 (255) -/** \brief Configure the 2nd byte of the network mask */ -#define BOOT_COM_NET_NETMASK1 (255) -/** \brief Configure the 3rd byte of the network mask */ -#define BOOT_COM_NET_NETMASK2 (0) -/** \brief Configure the 4th byte of the network mask */ -#define BOOT_COM_NET_NETMASK3 (0) -/** \brief Configure the 1st byte of the gateway address */ -#define BOOT_COM_NET_GATEWAY0 (169) -/** \brief Configure the 2nd byte of the gateway address */ -#define BOOT_COM_NET_GATEWAY1 (254) -/** \brief Configure the 3rd byte of the gateway address */ -#define BOOT_COM_NET_GATEWAY2 (19) -/** \brief Configure the 4th byte of the gateway address */ -#define BOOT_COM_NET_GATEWAY3 (1) -/** \brief Enable/disable a hook function that is called when the IP address is about - * to be set. This allows a dynamic override of the BOOT_COM_NET_IPADDRx values. - */ -#define BOOT_COM_NET_IPADDR_HOOK_ENABLE (0) -/** \brief Enable/disable a hook function that is called when the netmask is about - * to be set. This allows a dynamic override of the BOOT_COM_NET_NETMASKx values. - */ -#define BOOT_COM_NET_NETMASK_HOOK_ENABLE (0) -/** \brief Enable/disable a hook function that is called when the gateway address is - * about to be set. This allows a dynamic override of the BOOT_COM_NET_GATEWAYx - * values. - */ -#define BOOT_COM_NET_GATEWAY_HOOK_ENABLE (0) - - -/**************************************************************************************** -* B A C K D O O R C O N F I G U R A T I O N -****************************************************************************************/ -#if (BOOT_COM_NET_ENABLE > 0) -/* Override the default time that the backdoor is open if firmware updates via TCP/IP - * are supported. in this case a reactivation of the bootloader results in a re- - * initialization of the ethernet MAC. when directly connected to the ethernet port of - * a PC this will go relatively fast (depending on what MS Windows is being used), but - * when connected to the network via a router this can take several seconds. feel free to - * shorten/lengthen this time for finetuning. the only downside of a long backdoor open - * time is that the starting of the user program will also be delayed for this time. - */ -#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (10000) -#elif (BOOT_COM_USB_ENABLE > 0) -/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device - * to enumerate on the host PC. Therefore it needs to be set a bit longer than the - * default value, which is done here by overriding the macro. Note that this won't be - * long enough for a first time USB driver install on the host PC. In this case the - * bootloader should be started with the backup backdoor that uses a digital input to - * for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine - * the digital input to use for this. - */ -#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000) -#endif - - -/**************************************************************************************** -* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N -****************************************************************************************/ -/* The file system interface is selected by setting the BOOT_FILE_SYS_ENABLE configurable - * to 1. This enables support for firmware updates from a file stored on a locally - * attached file system such as an SD-card. Note that this interface can be enabled - * together with one of the remote communication interfaces such as UART, CAN or USB. - * - * Set BOOT_FILE_LOGGING_ENABLE to 1 if you would like log messages to be created during - * a firmware update. The hook function FileFirmwareUpdateLogHook() will be called each - * time a new string formatted log entry is available. This could be used during testing - * by outputting the string on UART or to create a log file on the file system itself. - * - * Set BOOT_FILE_ERROR_HOOK_ENABLE to 1 if you would like to be informed in case an error - * occurs during the firmware update. This could for example be used to turn on an error - * LED to inform the user that something went wrong. Inspecting the log messages provides - * additional information on the error cause. - * - * Set BOOT_FILE_STARTED_HOOK_ENABLE to 1 if you would like to be informed when a new - * firmware update is started by the bootloader. - * - * Set BOOT_FILE_COMPLETED_HOOK_ENABLE to 1 if you would like to be informed when a - * firmware update is completed by the bootloader. - */ -/** \brief Enable/disable support for firmware updates from a locally attached storage.*/ -#define BOOT_FILE_SYS_ENABLE (1) -/** \brief Enable/disable logging messages during firmware updates. */ -#define BOOT_FILE_LOGGING_ENABLE (1) -/** \brief Enable/disable a hook function that is called upon detection of an error. */ -#define BOOT_FILE_ERROR_HOOK_ENABLE (1) -/** \brief Enable/disable a hook function that is called at the start of the update. */ -#define BOOT_FILE_STARTED_HOOK_ENABLE (1) -/** \brief Enable/disable a hook function that is called at the end of the update. */ -#define BOOT_FILE_COMPLETED_HOOK_ENABLE (1) - - -/**************************************************************************************** -* B A C K D O O R E N T R Y C O N F I G U R A T I O N -****************************************************************************************/ -/* It is possible to implement an application specific method to force the bootloader to - * stay active after a reset. Such a backdoor entry into the bootloader is desired in - * situations where the user program does not run properly and therefore cannot - * reactivate the bootloader. By enabling these hook functions, the application can - * implement the backdoor, which overrides the default backdoor entry that is programmed - * into the bootloader. When desired for security purposes, these hook functions can - * also be implemented in a way that disables the backdoor entry altogether. - */ -/** \brief Enable/disable the backdoor override hook functions. */ -#define BOOT_BACKDOOR_HOOKS_ENABLE (0) - - -/**************************************************************************************** -* N O N - V O L A T I L E M E M O R Y D R I V E R C O N F I G U R A T I O N -****************************************************************************************/ -/* The NVM driver typically supports erase and program operations of the internal memory - * present on the microcontroller. Through these hook functions the NVM driver can be - * extended to support additional memory types such as external flash memory and serial - * eeproms. The size of the internal memory in kilobytes is specified with configurable - * BOOT_NVM_SIZE_KB. If desired the internal checksum writing and verification method can - * be overridden with a application specific method by enabling configuration switch - * BOOT_NVM_CHECKSUM_HOOKS_ENABLE. - */ -/** \brief Enable/disable the NVM hook function for supporting additional memory devices. */ -#define BOOT_NVM_HOOKS_ENABLE (0) -/** \brief Configure the size of the default memory device (typically flash EEPROM). */ -#define BOOT_NVM_SIZE_KB (1024) -/** \brief Enable/disable hooks functions to override the user program checksum handling. */ -#define BOOT_NVM_CHECKSUM_HOOKS_ENABLE (0) - - -/**************************************************************************************** -* W A T C H D O G D R I V E R C O N F I G U R A T I O N -****************************************************************************************/ -/* The COP driver cannot be configured internally in the bootloader, because its use - * and configuration is application specific. The bootloader does need to service the - * watchdog in case it is used. When the application requires the use of a watchdog, - * set BOOT_COP_HOOKS_ENABLE to be able to initialize and service the watchdog through - * hook functions. - */ -/** \brief Enable/disable the hook functions for controlling the watchdog. */ -#define BOOT_COP_HOOKS_ENABLE (0) - - -/**************************************************************************************** -* S E E D / K E Y S E C U R I T Y C O N F I G U R A T I O N -****************************************************************************************/ -/* A security mechanism can be enabled in the bootloader's XCP module by setting configu- - * rable BOOT_XCP_SEED_KEY_ENABLE to 1. Before any memory erase or programming - * operations can be performed, access to this resource need to be unlocked. - * In the Microboot settings on tab "XCP Protection" you need to specify a DLL that - * implements the unlocking algorithm. The demo programs are configured for the (simple) - * algorithm in "FeaserKey.dll". The source code for this DLL is available so it can be - * customized to your needs. - * During the unlock sequence, Microboot requests a seed from the bootloader, which is in - * the format of a byte array. Using this seed the unlock algorithm in the DLL computes - * a key, which is also a byte array, and sends this back to the bootloader. The - * bootloader then verifies this key to determine if programming and erase operations are - * permitted. - * After enabling this feature the hook functions XcpGetSeedHook() and XcpVerifyKeyHook() - * are called by the bootloader to obtain the seed and to verify the key, respectively. - */ -#define BOOT_XCP_SEED_KEY_ENABLE (0) - - -#endif /* BLT_CONF_H */ -/*********************************** end of blt_conf.h *********************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/boot.dox b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/boot.dox deleted file mode 100644 index 55179fdb..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/boot.dox +++ /dev/null @@ -1,7 +0,0 @@ -/** -\defgroup Boot_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks Bootloader -\brief Bootloader. -\ingroup ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -*/ - - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/hooks.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/hooks.c deleted file mode 100644 index c08b5f98..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/hooks.c +++ /dev/null @@ -1,517 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Boot\hooks.c -* \brief Bootloader callback source file. -* \ingroup Boot_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "boot.h" /* bootloader generic header */ -#if (BOOT_FILE_LOGGING_ENABLE > 0) -#include "stm32f4xx.h" /* STM32 registers */ -#include "stm32f4xx_conf.h" /* STM32 peripheral drivers */ -#endif - - -/**************************************************************************************** -* B A C K D O O R E N T R Y H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_BACKDOOR_HOOKS_ENABLE > 0) -/************************************************************************************//** -** \brief Initializes the backdoor entry option. -** \return none. -** -****************************************************************************************/ -void BackDoorInitHook(void) -{ -} /*** end of BackDoorInitHook ***/ - - -/************************************************************************************//** -** \brief Checks if a backdoor entry is requested. -** \return BLT_TRUE if the backdoor entry is requested, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool BackDoorEntryHook(void) -{ - /* default implementation always activates the bootloader after a reset */ - return BLT_TRUE; -} /*** end of BackDoorEntryHook ***/ -#endif /* BOOT_BACKDOOR_HOOKS_ENABLE > 0 */ - - -/**************************************************************************************** -* U S B C O M M U N I C A T I O N I N T E R F A C E H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_COM_USB_ENABLE > 0) -/************************************************************************************//** -** \brief Callback that gets called whenever the USB device should be connected -** to the USB bus. -** \param connect BLT_TRUE to connect and BLT_FALSE to disconnect. -** \return none. -** -****************************************************************************************/ -void UsbConnectHook(blt_bool connect) -{ -} /*** end of UsbConnect ***/ - - -/************************************************************************************//** -** \brief Callback that gets called whenever the USB host requests the device -** to enter a low power mode. -** \return none. -** -****************************************************************************************/ -void UsbEnterLowPowerModeHook(void) -{ - /* support to enter a low power mode can be implemented here */ -} /*** end of UsbEnterLowPowerMode ***/ - - -/************************************************************************************//** -** \brief Callback that gets called whenever the USB host requests the device to -** exit low power mode. -** \return none. -** -****************************************************************************************/ -void UsbLeaveLowPowerModeHook(void) -{ - /* support to leave a low power mode can be implemented here */ -} /*** end of UsbLeaveLowPowerMode ***/ -#endif /* BOOT_COM_USB_ENABLE > 0 */ - - -/**************************************************************************************** -* C P U D R I V E R H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_CPU_USER_PROGRAM_START_HOOK > 0) -/************************************************************************************//** -** \brief Callback that gets called when the bootloader is about to exit and -** hand over control to the user program. This is the last moment that -** some final checking can be performed and if necessary prevent the -** bootloader from activiting the user program. -** \return BLT_TRUE if it is okay to start the user program, BLT_FALSE to keep -** keep the bootloader active. -** -****************************************************************************************/ -blt_bool CpuUserProgramStartHook(void) -{ - /* do not start the user program is the pushbutton is pressed */ - if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_SET) - { - return BLT_FALSE; - } - return BLT_TRUE; -} /*** end of CpuUserProgramStartHook ***/ -#endif /* BOOT_CPU_USER_PROGRAM_START_HOOK > 0 */ - - -/**************************************************************************************** -* N O N - V O L A T I L E M E M O R Y D R I V E R H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_NVM_HOOKS_ENABLE > 0) -/************************************************************************************//** -** \brief Callback that gets called at the start of the internal NVM driver -** initialization routine. -** \return none. -** -****************************************************************************************/ -void NvmInitHook(void) -{ -} /*** end of NvmInitHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the start of a firmware update to reinitialize -** the NVM driver. -** \return none. -** -****************************************************************************************/ -void NvmReinitHook(void) -{ -} /*** end of NvmReinitHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the start of the NVM driver write -** routine. It allows additional memory to be operated on. If the address -** is not within the range of the additional memory, then -** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't -** been written yet. -** \param addr Start address. -** \param len Length in bytes. -** \param data Pointer to the data buffer. -** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BLT_NVM_ERROR is the write -** operation failed. -** -****************************************************************************************/ -blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) -{ - return BLT_NVM_NOT_IN_RANGE; -} /*** end of NvmWriteHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the start of the NVM driver erase -** routine. It allows additional memory to be operated on. If the address -** is not within the range of the additional memory, then -** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory -** hasn't been erased yet. -** \param addr Start address. -** \param len Length in bytes. -** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BLT_NVM_ERROR is the erase -** operation failed. -** -****************************************************************************************/ -blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len) -{ - return BLT_NVM_NOT_IN_RANGE; -} /*** end of NvmEraseHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the end of the NVM programming session. -** \return BLT_TRUE is successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool NvmDoneHook(void) -{ - return BLT_TRUE; -} /*** end of NvmDoneHook ***/ -#endif /* BOOT_NVM_HOOKS_ENABLE > 0 */ - - -#if (BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0) -/************************************************************************************//** -** \brief Verifies the checksum, which indicates that a valid user program is -** present and can be started. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool NvmVerifyChecksumHook(void) -{ - return BLT_TRUE; -} /*** end of NvmVerifyChecksum ***/ - - -/************************************************************************************//** -** \brief Writes a checksum of the user program to non-volatile memory. This is -** performed once the entire user program has been programmed. Through -** the checksum, the bootloader can check if a valid user programming is -** present and can be started. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool NvmWriteChecksumHook(void) -{ - return BLT_TRUE; -} -#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */ - - -/**************************************************************************************** -* W A T C H D O G D R I V E R H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_COP_HOOKS_ENABLE > 0) -/************************************************************************************//** -** \brief Callback that gets called at the end of the internal COP driver -** initialization routine. It can be used to configure and enable the -** watchdog. -** \return none. -** -****************************************************************************************/ -void CopInitHook(void) -{ -} /*** end of CopInitHook ***/ - - -/************************************************************************************//** -** \brief Callback that gets called at the end of the internal COP driver -** service routine. This gets called upon initialization and during -** potential long lasting loops and routine. It can be used to service -** the watchdog to prevent a watchdog reset. -** \return none. -** -****************************************************************************************/ -void CopServiceHook(void) -{ -} /*** end of CopServiceHook ***/ -#endif /* BOOT_COP_HOOKS_ENABLE > 0 */ - - -/**************************************************************************************** -* F I L E S Y S T E M I N T E R F A C E H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_FILE_SYS_ENABLE > 0) - -/**************************************************************************************** -* Constant data declarations -****************************************************************************************/ -/** \brief Firmware filename. */ -static const blt_char firmwareFilename[] = "/demoprog_olimex_stm32e407.srec"; - - -/**************************************************************************************** -* Local data declarations -****************************************************************************************/ -#if (BOOT_FILE_LOGGING_ENABLE > 0) -/** \brief Data structure for grouping log-file related information. */ -static struct -{ - FIL handle; /**< FatFS handle to the log-file. */ - blt_bool canUse; /**< Flag to indicate if the log-file can be used. */ -} logfile; -#endif - - -/************************************************************************************//** -** \brief Callback that gets called to check whether a firmware update from -** local file storage should be started. This could for example be when -** a switch is pressed, when a certain file is found on the local file -** storage, etc. -** \return BLT_TRUE if a firmware update is requested, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool FileIsFirmwareUpdateRequestedHook(void) -{ - FILINFO fileInfoObject = { 0 }; /* needs to be zeroed according to f_stat docs */; - - /* Current example implementation looks for a predetermined firmware file on the - * SD-card. If the SD-card is accessible and the firmware file was found the firmware - * update is started. When successfully completed, the firmware file is deleted. - * During the firmware update, progress information is written to a file called - * bootlog.txt and additionally outputted on UART @57600 bps for debugging purposes. - */ - /* check if firmware file is present and SD-card is accessible */ - if (f_stat(firmwareFilename, &fileInfoObject) == FR_OK) - { - /* check if the filesize is valid and that it is not a directory */ - if ( (fileInfoObject.fsize > 0) && (!(fileInfoObject.fattrib & AM_DIR)) ) - { - /* all conditions are met to start a firmware update from local file storage */ - return BLT_TRUE; - } - } - /* still here so no firmware update request is pending */ - return BLT_FALSE; -} /*** end of FileIsFirmwareUpdateRequestedHook ***/ - - -/************************************************************************************//** -** \brief Callback to obtain the filename of the firmware file that should be -** used during the firmware update from the local file storage. This -** hook function is called at the beginning of the firmware update from -** local storage sequence. -** \return valid firmware filename with full path or BLT_NULL. -** -****************************************************************************************/ -const blt_char *FileGetFirmwareFilenameHook(void) -{ - return firmwareFilename; -} /*** end of FileGetFirmwareFilenameHook ***/ - - -#if (BOOT_FILE_STARTED_HOOK_ENABLE > 0) -/************************************************************************************//** -** \brief Callback that gets called to inform the application that a firmware -** update from local storage just started. -** \return none. -** -****************************************************************************************/ -void FileFirmwareUpdateStartedHook(void) -{ - #if (BOOT_FILE_LOGGING_ENABLE > 0) - /* create/overwrite the logfile */ - logfile.canUse = BLT_FALSE; - if (f_open(&logfile.handle, "/bootlog.txt", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK) - { - logfile.canUse = BLT_TRUE; - } - #endif -} /*** end of FileFirmwareUpdateStartedHook ***/ -#endif /* BOOT_FILE_STARTED_HOOK_ENABLE > 0 */ - - -#if (BOOT_FILE_COMPLETED_HOOK_ENABLE > 0) -/************************************************************************************//** -** \brief Callback that gets called to inform the application that a firmware -** update was successfully completed. -** \return none. -** -****************************************************************************************/ -void FileFirmwareUpdateCompletedHook(void) -{ - #if (BOOT_FILE_LOGGING_ENABLE > 0) - blt_int32u timeoutTime; - - /* close the log file */ - if (logfile.canUse == BLT_TRUE) - { - f_close(&logfile.handle); - } - /* wait for all logging related transmission to complete with a maximum wait time of - * 100ms. - */ - timeoutTime = TimerGet() + 100; - while(USART_GetFlagStatus(USART6, USART_FLAG_TC) == RESET) - { - /* check for timeout */ - if (TimerGet() > timeoutTime) - { - break; - } - } - #endif - /* now delete the firmware file from the disk since the update was successful */ - f_unlink(firmwareFilename); -} /*** end of FileFirmwareUpdateCompletedHook ***/ -#endif /* BOOT_FILE_COMPLETED_HOOK_ENABLE > 0 */ - - -#if (BOOT_FILE_ERROR_HOOK_ENABLE > 0) -/************************************************************************************//** -** \brief Callback that gets called in case an error occurred during a firmware -** update. Refer to for a list of available error codes. -** \return none. -** -****************************************************************************************/ -void FileFirmwareUpdateErrorHook(blt_int8u error_code) -{ - #if (BOOT_FILE_LOGGING_ENABLE > 0) - /* error detected which stops the firmware update, so close the log file */ - if (logfile.canUse == BLT_TRUE) - { - f_close(&logfile.handle); - } - #endif -} /*** end of FileFirmwareUpdateErrorHook ***/ -#endif /* BOOT_FILE_ERROR_HOOK_ENABLE > 0 */ - - -#if (BOOT_FILE_LOGGING_ENABLE > 0) -/************************************************************************************//** -** \brief Callback that gets called each time new log information becomes -** available during a firmware update. -** \param info_string Pointer to a character array with the log entry info. -** \return none. -** -****************************************************************************************/ -void FileFirmwareUpdateLogHook(blt_char *info_string) -{ - /* write the string to the log file */ - if (logfile.canUse == BLT_TRUE) - { - if (f_puts(info_string, &logfile.handle) < 0) - { - logfile.canUse = BLT_FALSE; - f_close(&logfile.handle); - } - } - /* echo all characters in the string on UART */ - while(*info_string != '\0') - { - /* write character to transmit holding register */ - USART_SendData(USART6, *info_string); - /* wait for tx holding register to be empty */ - while(USART_GetFlagStatus(USART6, USART_FLAG_TXE) == RESET); - /* point to the next character in the string */ - info_string++; - } -} /*** end of FileFirmwareUpdateLogHook ***/ -#endif /* BOOT_FILE_LOGGING_ENABLE > 0 */ - - -#endif /* BOOT_FILE_SYS_ENABLE > 0 */ - - -/**************************************************************************************** -* S E E D / K E Y S E C U R I T Y H O O K F U N C T I O N S -****************************************************************************************/ - -#if (BOOT_XCP_SEED_KEY_ENABLE > 0) -/************************************************************************************//** -** \brief Provides a seed to the XCP master that will be used for the key -** generation when the master attempts to unlock the specified resource. -** Called by the GET_SEED command. -** \param resource Resource that the seed if requested for (XCP_RES_XXX). -** \param seed Pointer to byte buffer wher the seed will be stored. -** \return Length of the seed in bytes. -** -****************************************************************************************/ -blt_int8u XcpGetSeedHook(blt_int8u resource, blt_int8u *seed) -{ - /* request seed for unlocking ProGraMming resource */ - if ((resource & XCP_RES_PGM) != 0) - { - seed[0] = 0x55; - } - - /* return seed length */ - return 1; -} /*** end of XcpGetSeedHook ***/ - - -/************************************************************************************//** -** \brief Called by the UNLOCK command and checks if the key to unlock the -** specified resource was correct. If so, then the resource protection -** will be removed. -** \param resource resource to unlock (XCP_RES_XXX). -** \param key pointer to the byte buffer holding the key. -** \param len length of the key in bytes. -** \return 1 if the key was correct, 0 otherwise. -** -****************************************************************************************/ -blt_int8u XcpVerifyKeyHook(blt_int8u resource, blt_int8u *key, blt_int8u len) -{ - /* suppress compiler warning for unused parameter */ - len = len; - - /* the example key algorithm in "FeaserKey.dll" works as follows: - * - PGM will be unlocked if key = seed - 1 - */ - - /* check key for unlocking ProGraMming resource */ - if ((resource == XCP_RES_PGM) && (key[0] == (0x55-1))) - { - /* correct key received for unlocking PGM resource */ - return 1; - } - - /* still here so key incorrect */ - return 0; -} /*** end of XcpVerifyKeyHook ***/ -#endif /* BOOT_XCP_SEED_KEY_ENABLE > 0 */ - - -/*********************************** end of hooks.c ************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/readme.txt b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/readme.txt deleted file mode 100644 index a49767fb..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -Integrated Development Environment ----------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains -the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/stm32f407_crossworks.hzp b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/stm32f407_crossworks.hzp deleted file mode 100644 index 279bf936..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/stm32f407_crossworks.hzp +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/stm32f407_crossworks.hzs b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/stm32f407_crossworks.hzs deleted file mode 100644 index 4a5cbe21..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/ide/stm32f407_crossworks.hzs +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/ethernetlib/inc/stm32_eth.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/ethernetlib/inc/stm32_eth.h deleted file mode 100644 index 578d8baa..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/ethernetlib/inc/stm32_eth.h +++ /dev/null @@ -1,1610 +0,0 @@ -/** - ****************************************************************************** - * @file stm32_eth.h - * @author MCD Application Team - * @version V1.0.0 - * @date 06/19/2009 - * @brief This file contains all the functions prototypes for the Ethernet - * firmware library. - ****************************************************************************** - * @copy - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, 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 2009 STMicroelectronics

- */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_ETH_H -#define __STM32_ETH_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" /* STM32 registers */ - -/** @addtogroup STM32_ETH_Driver - * @{ - */ - -/** @defgroup ETH_Exported_Types - * @{ - */ - -/** - * @brief ETH MAC Init structure definition - */ -typedef struct { -/** - * @brief / * MAC - */ - uint32_t ETH_AutoNegotiation; /*!< Selects or not the AutoNegotiation with the external PHY */ - uint32_t ETH_Watchdog; /*!< Enable/disable Watchdog timer */ - uint32_t ETH_Jabber; /*!< Enable/disable Jabber timer */ - uint32_t ETH_InterFrameGap; /*!< Selects minimum IFG between frames during transmission */ - uint32_t ETH_CarrierSense; /*!< Enable/disable Carrier Sense */ - uint32_t ETH_Speed; /*!< Indicates the Ethernet speed: 10/100 Mbps */ - uint32_t ETH_ReceiveOwn; /*!< Enable/disable the reception of frames when the TX_EN signal is asserted in Half-Duplex mode */ - uint32_t ETH_LoopbackMode; /*!< Enable/disable internal MAC MII Loopback mode */ - uint32_t ETH_Mode; /*!< Selects the MAC duplex mode: Half-Duplex or Full-Duplex mode */ - uint32_t ETH_ChecksumOffload; /*!< Enable/disable the calculation of complement sum of all received Ethernet frame payloads */ - uint32_t ETH_RetryTransmission; /*!< Enable/disable the MAC attempt retries transmission, based on the settings of BL, when a colision occurs (Half-Duplex mode) */ - uint32_t ETH_AutomaticPadCRCStrip; /*!< Enable/disable Automatic MAC Pad/CRC Stripping */ - uint32_t ETH_BackOffLimit; /*!< Selects the BackOff limit value */ - uint32_t ETH_DeferralCheck; /*!< Enable/disable deferral check function (Half-Duplex mode) */ - uint32_t ETH_ReceiveAll; /*!< Enable/disable all frames reception by the MAC (No fitering)*/ - uint32_t ETH_SourceAddrFilter; /*!< Selects EnableNormal/EnableInverse/disable Source Address Filter comparison */ - uint32_t ETH_PassControlFrames; /*!< Selects None/All/FilterPass of all control frames (including unicast and multicast PAUSE frames) */ - uint32_t ETH_BroadcastFramesReception; /*!< Enable/disable reception of Broadcast Frames */ - uint32_t ETH_DestinationAddrFilter; /*!< Selects EnableNormal/EnableInverse destination filter for both unicast and multicast frames */ - uint32_t ETH_PromiscuousMode; /*!< Enable/disable Promiscuous Mode */ - uint32_t ETH_MulticastFramesFilter; /*!< Selects the Multicast Frames filter: None/HashTableFilter/PerfectFilter/PerfectHashTableFilter */ - uint32_t ETH_UnicastFramesFilter; /*!< Selects the Unicast Frames filter: HashTableFilter/PerfectFilter/PerfectHashTableFilter */ - uint32_t ETH_HashTableHigh; /*!< This field contains the higher 32 bits of Hash table. */ - uint32_t ETH_HashTableLow; /*!< This field contains the lower 32 bits of Hash table. */ - uint32_t ETH_PauseTime; /*!< This field holds the value to be used in the Pause Time field in the transmit control frame */ - uint32_t ETH_ZeroQuantaPause; /*!< Enable/disable the automatic generation of Zero-Quanta Pause Control frames */ - uint32_t ETH_PauseLowThreshold; /*!< This field configures the threshold of the PAUSE to be checked for automatic retransmission of PAUSE Frame */ - uint32_t ETH_UnicastPauseFrameDetect; /*!< Enable/disable MAC to detect the Pause frames (with MAC Address0 unicast address and unique multicast address) */ - uint32_t ETH_ReceiveFlowControl; /*!< Enable/disable the MAC to decode the received Pause frame and disable its transmitter for a specified (Pause Time) time */ - uint32_t ETH_TransmitFlowControl; /*!< Enable/disable the MAC to transmit Pause frames (Full-Duplex mode) or the MAC back-pressure operation (Half-Duplex mode) */ - uint32_t ETH_VLANTagComparison; /*!< Selects the 12-bit VLAN identifier or the complete 16-bit VLAN tag for comparison and filtering */ - uint32_t ETH_VLANTagIdentifier; /*!< VLAN tag identifier for receive frames */ - -/** - * @brief / * DMA - */ - uint32_t ETH_DropTCPIPChecksumErrorFrame; /*!< Enable/disable Dropping of TCP/IP Checksum Error Frames */ - uint32_t ETH_ReceiveStoreForward; /*!< Enable/disable Receive store and forward */ - uint32_t ETH_FlushReceivedFrame; /*!< Enable/disable flushing of received frames */ - uint32_t ETH_TransmitStoreForward; /*!< Enable/disable Transmit store and forward */ - uint32_t ETH_TransmitThresholdControl; /*!< Selects the Transmit Threshold Control */ - uint32_t ETH_ForwardErrorFrames; /*!< Enable/disable forward to DMA of all frames except runt error frames */ - uint32_t ETH_ForwardUndersizedGoodFrames; /*!< Enable/disable Rx FIFO to forward Undersized frames (frames with no Error and length less than 64 bytes) including pad-bytes and CRC) */ - uint32_t ETH_ReceiveThresholdControl; /*!< Selects the threshold level of the Receive FIFO */ - uint32_t ETH_SecondFrameOperate; /*!< Enable/disable the DMA process of a second frame of Transmit data even before status for first frame is obtained */ - uint32_t ETH_AddressAlignedBeats; /*!< Enable/disable Address Aligned Beats */ - uint32_t ETH_FixedBurst; /*!< Enable/disable the AHB Master interface fixed burst transfers */ - uint32_t ETH_RxDMABurstLength; /*!< Indicate the maximum number of beats to be transferred in one Rx DMA transaction */ - uint32_t ETH_TxDMABurstLength; /*!< Indicate the maximum number of beats to be transferred in one Tx DMA transaction */ - uint32_t ETH_DescriptorSkipLength; /*!< Specifies the number of word to skip between two unchained descriptors (Ring mode) */ - uint32_t ETH_DMAArbitration; /*!< Selects DMA Tx/Rx arbitration */ -}ETH_InitTypeDef; - -/**--------------------------------------------------------------------------**/ -/** - * @brief DMA descriptors types - */ -/**--------------------------------------------------------------------------**/ - -/** - * @brief ETH DMA Desciptors data structure definition - */ -typedef struct { - uint32_t Status; /*!< Status */ - uint32_t ControlBufferSize; /*!< Control and Buffer1, Buffer2 lengths */ - uint32_t Buffer1Addr; /*!< Buffer1 address pointer */ - uint32_t Buffer2NextDescAddr; /*!< Buffer2 or next descriptor address pointer */ -} ETH_DMADESCTypeDef; - -/** - * @} - */ - -/** @defgroup ETH_Exported_Constants - * @{ - */ -/**--------------------------------------------------------------------------**/ -/** - * @brief ETH Frames defines - */ -/**--------------------------------------------------------------------------**/ - -/** @defgroup ENET_Buffers_setting - * @{ - */ -#define ETH_MAX_PACKET_SIZE 1520 /*!< ETH_HEADER + ETH_EXTRA + MAX_ETH_PAYLOAD + ETH_CRC */ -#define ETH_HEADER 14 /*!< 6 byte Dest addr, 6 byte Src addr, 2 byte length/type */ -#define ETH_CRC 4 /*!< Ethernet CRC */ -#define ETH_EXTRA 2 /*!< Extra bytes in some cases */ -#define VLAN_TAG 4 /*!< optional 802.1q VLAN Tag */ -#define MIN_ETH_PAYLOAD 46 /*!< Minimum Ethernet payload size */ -#define MAX_ETH_PAYLOAD 1500 /*!< Maximum Ethernet payload size */ -#define JUMBO_FRAME_PAYLOAD 9000 /*!< Jumbo frame payload size */ - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet DMA descriptors registers bits definition - */ -/**--------------------------------------------------------------------------**/ - -/* DMA Tx Desciptor -----------------------------------------------------------*/ -/**---------------------------------------------------------------------------------------------- - TDES0 | OWN(31) | CTRL[30:26] | Reserved[25:24] | CTRL[23:20] | Reserved[19:17] | Status[16:0] | - ----------------------------------------------------------------------------------------------- - TDES1 | Reserved[31:29] | Buffer2 ByteCount[28:16] | Reserved[15:13] | Buffer1 ByteCount[12:0] | - ----------------------------------------------------------------------------------------------- - TDES2 | Buffer1 Address [31:0] | - ----------------------------------------------------------------------------------------------- - TDES3 | Buffer2 Address [31:0] / Next Desciptor Address [31:0] | - ---------------------------------------------------------------------------------------------**/ - -/** - * @brief Bit definition of TDES0 register: DMA Tx descriptor status register - */ -#define ETH_DMATxDesc_OWN ((uint32_t)0x80000000) /*!< OWN bit: descriptor is owned by DMA engine */ -#define ETH_DMATxDesc_IC ((uint32_t)0x40000000) /*!< Interrupt on Completion */ -#define ETH_DMATxDesc_LS ((uint32_t)0x20000000) /*!< Last Segment */ -#define ETH_DMATxDesc_FS ((uint32_t)0x10000000) /*!< First Segment */ -#define ETH_DMATxDesc_DC ((uint32_t)0x08000000) /*!< Disable CRC */ -#define ETH_DMATxDesc_DP ((uint32_t)0x04000000) /*!< Disable Padding */ -#define ETH_DMATxDesc_TTSE ((uint32_t)0x02000000) /*!< Transmit Time Stamp Enable */ -#define ETH_DMATxDesc_CIC ((uint32_t)0x00C00000) /*!< Checksum Insertion Control: 4 cases */ -#define ETH_DMATxDesc_CIC_ByPass ((uint32_t)0x00000000) /*!< Do Nothing: Checksum Engine is bypassed */ -#define ETH_DMATxDesc_CIC_IPV4Header ((uint32_t)0x00400000) /*!< IPV4 header Checksum Insertion */ -#define ETH_DMATxDesc_CIC_TCPUDPICMP_Segment ((uint32_t)0x00800000) /*!< TCP/UDP/ICMP Checksum Insertion calculated over segment only */ -#define ETH_DMATxDesc_CIC_TCPUDPICMP_Full ((uint32_t)0x00C00000) /*!< TCP/UDP/ICMP Checksum Insertion fully calculated */ -#define ETH_DMATxDesc_TER ((uint32_t)0x00200000) /*!< Transmit End of Ring */ -#define ETH_DMATxDesc_TCH ((uint32_t)0x00100000) /*!< Second Address Chained */ -#define ETH_DMATxDesc_TTSS ((uint32_t)0x00020000) /*!< Tx Time Stamp Status */ -#define ETH_DMATxDesc_IHE ((uint32_t)0x00010000) /*!< IP Header Error */ -#define ETH_DMATxDesc_ES ((uint32_t)0x00008000) /*!< Error summary: OR of the following bits: UE || ED || EC || LCO || NC || LCA || FF || JT */ -#define ETH_DMATxDesc_JT ((uint32_t)0x00004000) /*!< Jabber Timeout */ -#define ETH_DMATxDesc_FF ((uint32_t)0x00002000) /*!< Frame Flushed: DMA/MTL flushed the frame due to SW flush */ -#define ETH_DMATxDesc_PCE ((uint32_t)0x00001000) /*!< Payload Checksum Error */ -#define ETH_DMATxDesc_LCA ((uint32_t)0x00000800) /*!< Loss of Carrier: carrier lost during tramsmission */ -#define ETH_DMATxDesc_NC ((uint32_t)0x00000400) /*!< No Carrier: no carrier signal from the tranceiver */ -#define ETH_DMATxDesc_LCO ((uint32_t)0x00000200) /*!< Late Collision: transmission aborted due to collision */ -#define ETH_DMATxDesc_EC ((uint32_t)0x00000100) /*!< Excessive Collision: transmission aborted after 16 collisions */ -#define ETH_DMATxDesc_VF ((uint32_t)0x00000080) /*!< VLAN Frame */ -#define ETH_DMATxDesc_CC ((uint32_t)0x00000078) /*!< Collision Count */ -#define ETH_DMATxDesc_ED ((uint32_t)0x00000004) /*!< Excessive Deferral */ -#define ETH_DMATxDesc_UF ((uint32_t)0x00000002) /*!< Underflow Error: late data arrival from the memory */ -#define ETH_DMATxDesc_DB ((uint32_t)0x00000001) /*!< Deferred Bit */ - -/** - * @brief Bit definition of TDES1 register - */ -#define ETH_DMATxDesc_TBS2 ((uint32_t)0x1FFF0000) /*!< Transmit Buffer2 Size */ -#define ETH_DMATxDesc_TBS1 ((uint32_t)0x00001FFF) /*!< Transmit Buffer1 Size */ - -/** - * @brief Bit definition of TDES2 register - */ -#define ETH_DMATxDesc_B1AP ((uint32_t)0xFFFFFFFF) /*!< Buffer1 Address Pointer */ - -/** - * @brief Bit definition of TDES3 register - */ -#define ETH_DMATxDesc_B2AP ((uint32_t)0xFFFFFFFF) /*!< Buffer2 Address Pointer */ - -/** - * @} - */ - - -/** @defgroup DMA_Rx_descriptor - * @{ - */ - -/**-------------------------------------------------------------------------------------------------------------------- - RDES0 | OWN(31) | Status [30:0] | - --------------------------------------------------------------------------------------------------------------------- - RDES1 | CTRL(31) | Reserved[30:29] | Buffer2 ByteCount[28:16] | CTRL[15:14] | Reserved(13) | Buffer1 ByteCount[12:0] | - --------------------------------------------------------------------------------------------------------------------- - RDES2 | Buffer1 Address [31:0] | - --------------------------------------------------------------------------------------------------------------------- - RDES3 | Buffer2 Address [31:0] / Next Desciptor Address [31:0] | - -------------------------------------------------------------------------------------------------------------------**/ - -/** - * @brief Bit definition of RDES0 register: DMA Rx descriptor status register - */ -#define ETH_DMARxDesc_OWN ((uint32_t)0x80000000) /*!< OWN bit: descriptor is owned by DMA engine */ -#define ETH_DMARxDesc_AFM ((uint32_t)0x40000000) /*!< DA Filter Fail for the rx frame */ -#define ETH_DMARxDesc_FL ((uint32_t)0x3FFF0000) /*!< Receive descriptor frame length */ -#define ETH_DMARxDesc_ES ((uint32_t)0x00008000) /*!< Error summary: OR of the following bits: DE || OE || IPC || LC || RWT || RE || CE */ -#define ETH_DMARxDesc_DE ((uint32_t)0x00004000) /*!< Desciptor error: no more descriptors for receive frame */ -#define ETH_DMARxDesc_SAF ((uint32_t)0x00002000) /*!< SA Filter Fail for the received frame */ -#define ETH_DMARxDesc_LE ((uint32_t)0x00001000) /*!< Frame size not matching with length field */ -#define ETH_DMARxDesc_OE ((uint32_t)0x00000800) /*!< Overflow Error: Frame was damaged due to buffer overflow */ -#define ETH_DMARxDesc_VLAN ((uint32_t)0x00000400) /*!< VLAN Tag: received frame is a VLAN frame */ -#define ETH_DMARxDesc_FS ((uint32_t)0x00000200) /*!< First descriptor of the frame */ -#define ETH_DMARxDesc_LS ((uint32_t)0x00000100) /*!< Last descriptor of the frame */ -#define ETH_DMARxDesc_IPV4HCE ((uint32_t)0x00000080) /*!< IPC Checksum Error: Rx Ipv4 header checksum error */ -#define ETH_DMARxDesc_LC ((uint32_t)0x00000040) /*!< Late collision occurred during reception */ -#define ETH_DMARxDesc_FT ((uint32_t)0x00000020) /*!< Frame type - Ethernet, otherwise 802.3 */ -#define ETH_DMARxDesc_RWT ((uint32_t)0x00000010) /*!< Receive Watchdog Timeout: watchdog timer expired during reception */ -#define ETH_DMARxDesc_RE ((uint32_t)0x00000008) /*!< Receive error: error reported by MII interface */ -#define ETH_DMARxDesc_DBE ((uint32_t)0x00000004) /*!< Dribble bit error: frame contains non int multiple of 8 bits */ -#define ETH_DMARxDesc_CE ((uint32_t)0x00000002) /*!< CRC error */ -#define ETH_DMARxDesc_MAMPCE ((uint32_t)0x00000001) /*!< Rx MAC Address/Payload Checksum Error: Rx MAC address matched/ Rx Payload Checksum Error */ - -/** - * @brief Bit definition of RDES1 register - */ -#define ETH_DMARxDesc_DIC ((uint32_t)0x80000000) /*!< Disable Interrupt on Completion */ -#define ETH_DMARxDesc_RBS2 ((uint32_t)0x1FFF0000) /*!< Receive Buffer2 Size */ -#define ETH_DMARxDesc_RER ((uint32_t)0x00008000) /*!< Receive End of Ring */ -#define ETH_DMARxDesc_RCH ((uint32_t)0x00004000) /*!< Second Address Chained */ -#define ETH_DMARxDesc_RBS1 ((uint32_t)0x00001FFF) /*!< Receive Buffer1 Size */ - -/** - * @brief Bit definition of RDES2 register - */ -#define ETH_DMARxDesc_B1AP ((uint32_t)0xFFFFFFFF) /*!< Buffer1 Address Pointer */ - -/** - * @brief Bit definition of RDES3 register - */ -#define ETH_DMARxDesc_B2AP ((uint32_t)0xFFFFFFFF) /*!< Buffer2 Address Pointer */ - -/**--------------------------------------------------------------------------**/ -/** - * @brief Desciption of common PHY registers - */ -/**--------------------------------------------------------------------------**/ - -/** - * @} - */ - -/** @defgroup PHY_Read_write_Timeouts - * @{ - */ -#define PHY_READ_TO ((uint32_t)0x0004FFFF) -#define PHY_WRITE_TO ((uint32_t)0x0004FFFF) - -/** - * @} - */ - -/** @defgroup PHY_Reset_Delay - * @{ - */ -#define PHY_ResetDelay ((uint32_t)0x04000000) - -/** - * @} - */ - -/** @defgroup PHY_Config_Delay - * @{ - */ -#define PHY_ConfigDelay ((uint32_t)0x00FFFFFF) - -/** - * @} - */ - -/** @defgroup PHY_Register_address - * @{ - */ -#define PHY_BCR 0 /*!< Tranceiver Basic Control Register */ -#define PHY_BSR 1 /*!< Tranceiver Basic Status Register */ - -/** - * @} - */ - -/** @defgroup PHY_basic_Control_register - * @{ - */ -#define PHY_Reset ((u16)0x8000) /*!< PHY Reset */ -#define PHY_Loopback ((u16)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((u16)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((u16)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((u16)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((u16)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AutoNegotiation ((u16)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_Restart_AutoNegotiation ((u16)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_Powerdown ((u16)0x0800) /*!< Select the power down mode */ -#define PHY_Isolate ((u16)0x0400) /*!< Isolate PHY from MII */ - -/** - * @} - */ - -/** @defgroup PHY_basic_status_register - * @{ - */ -#define PHY_AutoNego_Complete ((u16)0x0020) /*!< Auto-Negotioation process completed */ -#define PHY_Linked_Status ((u16)0x0004) /*!< Valid link established */ -#define PHY_Jabber_detection ((u16)0x0002) /*!< Jabber condition detected */ - -/** - * @} - */ - -/** @defgroup PHY_status_register - * @{ - */ -/* The PHY status register value change from a PHY to another so the user have - to update this value depending on the used external PHY */ -/** - * @brief For LAN8700 - */ -//#define PHY_SR 31 /*!< Tranceiver Status Register */ -/** - * @brief For DP83848 - */ -#define PHY_SR 16 /*!< Tranceiver Status Register */ - -/* The Speed and Duplex mask values change from a PHY to another so the user have to update - this value depending on the used external PHY */ -/** - * @brief For LAN8700 - */ -//#define PHY_Speed_Status ((u16)0x0004) /*!< Configured information of Speed: 10Mbps */ -//#define PHY_Duplex_Status ((u16)0x0010) /*!< Configured information of Duplex: Full-duplex */ - -/** - * @brief For DP83848 - */ -#define PHY_Speed_Status ((u16)0x0002) /*!< Configured information of Speed: 10Mbps */ -#define PHY_Duplex_Status ((u16)0x0004) /*!< Configured information of Duplex: Full-duplex */ -#define IS_ETH_PHY_ADDRESS(ADDRESS) ((ADDRESS) <= 0x20) -#define IS_ETH_PHY_REG(REG) (((REG) == PHY_BCR) || \ - ((REG) == PHY_BSR) || \ - ((REG) == PHY_SR)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief MAC defines - */ -/**--------------------------------------------------------------------------**/ - -/** - * @} - */ - -/** @defgroup ETH_AutoNegotiation - * @{ - */ -#define ETH_AutoNegotiation_Enable ((uint32_t)0x00000001) -#define ETH_AutoNegotiation_Disable ((uint32_t)0x00000000) -#define IS_ETH_AUTONEGOTIATION(CMD) (((CMD) == ETH_AutoNegotiation_Enable) || \ - ((CMD) == ETH_AutoNegotiation_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_watchdog - * @{ - */ -#define ETH_Watchdog_Enable ((uint32_t)0x00000000) -#define ETH_Watchdog_Disable ((uint32_t)0x00800000) -#define IS_ETH_WATCHDOG(CMD) (((CMD) == ETH_Watchdog_Enable) || \ - ((CMD) == ETH_Watchdog_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Jabber - * @{ - */ -#define ETH_Jabber_Enable ((uint32_t)0x00000000) -#define ETH_Jabber_Disable ((uint32_t)0x00400000) -#define IS_ETH_JABBER(CMD) (((CMD) == ETH_Jabber_Enable) || \ - ((CMD) == ETH_Jabber_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Inter_Frame_Gap - * @{ - */ -#define ETH_InterFrameGap_96Bit ((uint32_t)0x00000000) /*!< minimum IFG between frames during transmission is 96Bit */ -#define ETH_InterFrameGap_88Bit ((uint32_t)0x00020000) /*!< minimum IFG between frames during transmission is 88Bit */ -#define ETH_InterFrameGap_80Bit ((uint32_t)0x00040000) /*!< minimum IFG between frames during transmission is 80Bit */ -#define ETH_InterFrameGap_72Bit ((uint32_t)0x00060000) /*!< minimum IFG between frames during transmission is 72Bit */ -#define ETH_InterFrameGap_64Bit ((uint32_t)0x00080000) /*!< minimum IFG between frames during transmission is 64Bit */ -#define ETH_InterFrameGap_56Bit ((uint32_t)0x000A0000) /*!< minimum IFG between frames during transmission is 56Bit */ -#define ETH_InterFrameGap_48Bit ((uint32_t)0x000C0000) /*!< minimum IFG between frames during transmission is 48Bit */ -#define ETH_InterFrameGap_40Bit ((uint32_t)0x000E0000) /*!< minimum IFG between frames during transmission is 40Bit */ -#define IS_ETH_INTER_FRAME_GAP(GAP) (((GAP) == ETH_InterFrameGap_96Bit) || \ - ((GAP) == ETH_InterFrameGap_88Bit) || \ - ((GAP) == ETH_InterFrameGap_80Bit) || \ - ((GAP) == ETH_InterFrameGap_72Bit) || \ - ((GAP) == ETH_InterFrameGap_64Bit) || \ - ((GAP) == ETH_InterFrameGap_56Bit) || \ - ((GAP) == ETH_InterFrameGap_48Bit) || \ - ((GAP) == ETH_InterFrameGap_40Bit)) - -/** - * @} - */ - -/** @defgroup ETH_Carrier_Sense - * @{ - */ -#define ETH_CarrierSense_Enable ((uint32_t)0x00000000) -#define ETH_CarrierSense_Disable ((uint32_t)0x00010000) -#define IS_ETH_CARRIER_SENSE(CMD) (((CMD) == ETH_CarrierSense_Enable) || \ - ((CMD) == ETH_CarrierSense_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Speed - * @{ - */ -#define ETH_Speed_10M ((uint32_t)0x00000000) -#define ETH_Speed_100M ((uint32_t)0x00004000) -#define IS_ETH_SPEED(SPEED) (((SPEED) == ETH_Speed_10M) || \ - ((SPEED) == ETH_Speed_100M)) - -/** - * @} - */ - -/** @defgroup ETH_Receive_Own - * @{ - */ -#define ETH_ReceiveOwn_Enable ((uint32_t)0x00000000) -#define ETH_ReceiveOwn_Disable ((uint32_t)0x00002000) -#define IS_ETH_RECEIVE_OWN(CMD) (((CMD) == ETH_ReceiveOwn_Enable) || \ - ((CMD) == ETH_ReceiveOwn_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Loop_back_Mode - * @{ - */ -#define ETH_LoopbackMode_Enable ((uint32_t)0x00001000) -#define ETH_LoopbackMode_Disable ((uint32_t)0x00000000) -#define IS_ETH_LOOPBACK_MODE(CMD) (((CMD) == ETH_LoopbackMode_Enable) || \ - ((CMD) == ETH_LoopbackMode_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Duplex_mode - * @{ - */ -#define ETH_Mode_FullDuplex ((uint32_t)0x00000800) -#define ETH_Mode_HalfDuplex ((uint32_t)0x00000000) -#define IS_ETH_DUPLEX_MODE(MODE) (((MODE) == ETH_Mode_FullDuplex) || \ - ((MODE) == ETH_Mode_HalfDuplex)) - -/** - * @} - */ - -/** @defgroup ETH_Checksum_Offload - * @{ - */ -#define ETH_ChecksumOffload_Enable ((uint32_t)0x00000400) -#define ETH_ChecksumOffload_Disable ((uint32_t)0x00000000) -#define IS_ETH_CHECKSUM_OFFLOAD(CMD) (((CMD) == ETH_ChecksumOffload_Enable) || \ - ((CMD) == ETH_ChecksumOffload_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Retry_Transmission - * @{ - */ -#define ETH_RetryTransmission_Enable ((uint32_t)0x00000000) -#define ETH_RetryTransmission_Disable ((uint32_t)0x00000200) -#define IS_ETH_RETRY_TRANSMISSION(CMD) (((CMD) == ETH_RetryTransmission_Enable) || \ - ((CMD) == ETH_RetryTransmission_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Automatic_Pad_CRC_Strip - * @{ - */ -#define ETH_AutomaticPadCRCStrip_Enable ((uint32_t)0x00000080) -#define ETH_AutomaticPadCRCStrip_Disable ((uint32_t)0x00000000) -#define IS_ETH_AUTOMATIC_PADCRC_STRIP(CMD) (((CMD) == ETH_AutomaticPadCRCStrip_Enable) || \ - ((CMD) == ETH_AutomaticPadCRCStrip_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Back-Off_limit - * @{ - */ -#define ETH_BackOffLimit_10 ((uint32_t)0x00000000) -#define ETH_BackOffLimit_8 ((uint32_t)0x00000020) -#define ETH_BackOffLimit_4 ((uint32_t)0x00000040) -#define ETH_BackOffLimit_1 ((uint32_t)0x00000060) -#define IS_ETH_BACKOFF_LIMIT(LIMIT) (((LIMIT) == ETH_BackOffLimit_10) || \ - ((LIMIT) == ETH_BackOffLimit_8) || \ - ((LIMIT) == ETH_BackOffLimit_4) || \ - ((LIMIT) == ETH_BackOffLimit_1)) - -/** - * @} - */ - -/** @defgroup ETH_Deferral_Check - * @{ - */ -#define ETH_DeferralCheck_Enable ((uint32_t)0x00000010) -#define ETH_DeferralCheck_Disable ((uint32_t)0x00000000) -#define IS_ETH_DEFERRAL_CHECK(CMD) (((CMD) == ETH_DeferralCheck_Enable) || \ - ((CMD) == ETH_DeferralCheck_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Receive_All - * @{ - */ -#define ETH_ReceiveAll_Enable ((uint32_t)0x80000000) -#define ETH_ReceiveAll_Disable ((uint32_t)0x00000000) -#define IS_ETH_RECEIVE_ALL(CMD) (((CMD) == ETH_ReceiveAll_Enable) || \ - ((CMD) == ETH_ReceiveAll_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Source_Addr_Filter - * @{ - */ -#define ETH_SourceAddrFilter_Normal_Enable ((uint32_t)0x00000200) -#define ETH_SourceAddrFilter_Inverse_Enable ((uint32_t)0x00000300) -#define ETH_SourceAddrFilter_Disable ((uint32_t)0x00000000) -#define IS_ETH_SOURCE_ADDR_FILTER(CMD) (((CMD) == ETH_SourceAddrFilter_Normal_Enable) || \ - ((CMD) == ETH_SourceAddrFilter_Inverse_Enable) || \ - ((CMD) == ETH_SourceAddrFilter_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Pass_Control_Frames - * @{ - */ -#define ETH_PassControlFrames_BlockAll ((uint32_t)0x00000040) /*!< MAC filters all control frames from reaching the application */ -#define ETH_PassControlFrames_ForwardAll ((uint32_t)0x00000080) /*!< MAC forwards all control frames to application even if they fail the Address Filter */ -#define ETH_PassControlFrames_ForwardPassedAddrFilter ((uint32_t)0x000000C0) /*!< MAC forwards control frames that pass the Address Filter. */ -#define IS_ETH_CONTROL_FRAMES(PASS) (((PASS) == ETH_PassControlFrames_BlockAll) || \ - ((PASS) == ETH_PassControlFrames_ForwardAll) || \ - ((PASS) == ETH_PassControlFrames_ForwardPassedAddrFilter)) - -/** - * @} - */ - -/** @defgroup ETH_Broadcast_Frames_Reception - * @{ - */ -#define ETH_BroadcastFramesReception_Enable ((uint32_t)0x00000000) -#define ETH_BroadcastFramesReception_Disable ((uint32_t)0x00000020) -#define IS_ETH_BROADCAST_FRAMES_RECEPTION(CMD) (((CMD) == ETH_BroadcastFramesReception_Enable) || \ - ((CMD) == ETH_BroadcastFramesReception_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Destination_Addr_Filter - * @{ - */ -#define ETH_DestinationAddrFilter_Normal ((uint32_t)0x00000000) -#define ETH_DestinationAddrFilter_Inverse ((uint32_t)0x00000008) -#define IS_ETH_DESTINATION_ADDR_FILTER(FILTER) (((FILTER) == ETH_DestinationAddrFilter_Normal) || \ - ((FILTER) == ETH_DestinationAddrFilter_Inverse)) - -/** - * @} - */ - -/** @defgroup ETH_Promiscuous_Mode - * @{ - */ -#define ETH_PromiscuousMode_Enable ((uint32_t)0x00000001) -#define ETH_PromiscuousMode_Disable ((uint32_t)0x00000000) -#define IS_ETH_PROMISCUOUS_MODE(CMD) (((CMD) == ETH_PromiscuousMode_Enable) || \ - ((CMD) == ETH_PromiscuousMode_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_multicast_frames_filter - * @{ - */ -#define ETH_MulticastFramesFilter_PerfectHashTable ((uint32_t)0x00000404) -#define ETH_MulticastFramesFilter_HashTable ((uint32_t)0x00000004) -#define ETH_MulticastFramesFilter_Perfect ((uint32_t)0x00000000) -#define ETH_MulticastFramesFilter_None ((uint32_t)0x00000010) -#define IS_ETH_MULTICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_MulticastFramesFilter_PerfectHashTable) || \ - ((FILTER) == ETH_MulticastFramesFilter_HashTable) || \ - ((FILTER) == ETH_MulticastFramesFilter_Perfect) || \ - ((FILTER) == ETH_MulticastFramesFilter_None)) - - -/** - * @} - */ - -/** @defgroup ETH_unicast_frames_filter - * @{ - */ -#define ETH_UnicastFramesFilter_PerfectHashTable ((uint32_t)0x00000402) -#define ETH_UnicastFramesFilter_HashTable ((uint32_t)0x00000002) -#define ETH_UnicastFramesFilter_Perfect ((uint32_t)0x00000000) -#define IS_ETH_UNICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_UnicastFramesFilter_PerfectHashTable) || \ - ((FILTER) == ETH_UnicastFramesFilter_HashTable) || \ - ((FILTER) == ETH_UnicastFramesFilter_Perfect)) - -/** - * @} - */ - -/** @defgroup ETH_Pause_Time - * @{ - */ -#define IS_ETH_PAUSE_TIME(TIME) ((TIME) <= 0xFFFF) - -/** - * @} - */ - -/** @defgroup ETH_Zero_Quanta_Pause - * @{ - */ -#define ETH_ZeroQuantaPause_Enable ((uint32_t)0x00000000) -#define ETH_ZeroQuantaPause_Disable ((uint32_t)0x00000080) -#define IS_ETH_ZEROQUANTA_PAUSE(CMD) (((CMD) == ETH_ZeroQuantaPause_Enable) || \ - ((CMD) == ETH_ZeroQuantaPause_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Pause_Low_Threshold - * @{ - */ -#define ETH_PauseLowThreshold_Minus4 ((uint32_t)0x00000000) /*!< Pause time minus 4 slot times */ -#define ETH_PauseLowThreshold_Minus28 ((uint32_t)0x00000010) /*!< Pause time minus 28 slot times */ -#define ETH_PauseLowThreshold_Minus144 ((uint32_t)0x00000020) /*!< Pause time minus 144 slot times */ -#define ETH_PauseLowThreshold_Minus256 ((uint32_t)0x00000030) /*!< Pause time minus 256 slot times */ -#define IS_ETH_PAUSE_LOW_THRESHOLD(THRESHOLD) (((THRESHOLD) == ETH_PauseLowThreshold_Minus4) || \ - ((THRESHOLD) == ETH_PauseLowThreshold_Minus28) || \ - ((THRESHOLD) == ETH_PauseLowThreshold_Minus144) || \ - ((THRESHOLD) == ETH_PauseLowThreshold_Minus256)) - -/** - * @} - */ - -/** @defgroup ETH_Unicast_Pause_Frame_Detect - * @{ - */ -#define ETH_UnicastPauseFrameDetect_Enable ((uint32_t)0x00000008) -#define ETH_UnicastPauseFrameDetect_Disable ((uint32_t)0x00000000) -#define IS_ETH_UNICAST_PAUSE_FRAME_DETECT(CMD) (((CMD) == ETH_UnicastPauseFrameDetect_Enable) || \ - ((CMD) == ETH_UnicastPauseFrameDetect_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Receive_Flow_Control - * @{ - */ -#define ETH_ReceiveFlowControl_Enable ((uint32_t)0x00000004) -#define ETH_ReceiveFlowControl_Disable ((uint32_t)0x00000000) -#define IS_ETH_RECEIVE_FLOWCONTROL(CMD) (((CMD) == ETH_ReceiveFlowControl_Enable) || \ - ((CMD) == ETH_ReceiveFlowControl_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Transmit_Flow_Control - * @{ - */ -#define ETH_TransmitFlowControl_Enable ((uint32_t)0x00000002) -#define ETH_TransmitFlowControl_Disable ((uint32_t)0x00000000) -#define IS_ETH_TRANSMIT_FLOWCONTROL(CMD) (((CMD) == ETH_TransmitFlowControl_Enable) || \ - ((CMD) == ETH_TransmitFlowControl_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_VLAN_Tag_Comparison - * @{ - */ -#define ETH_VLANTagComparison_12Bit ((uint32_t)0x00010000) -#define ETH_VLANTagComparison_16Bit ((uint32_t)0x00000000) -#define IS_ETH_VLAN_TAG_COMPARISON(COMPARISON) (((COMPARISON) == ETH_VLANTagComparison_12Bit) || \ - ((COMPARISON) == ETH_VLANTagComparison_16Bit)) -#define IS_ETH_VLAN_TAG_IDENTIFIER(IDENTIFIER) ((IDENTIFIER) <= 0xFFFF) - -/** - * @} - */ - -/** @defgroup ETH_MAC_Flags - * @{ - */ -#define ETH_MAC_FLAG_TST ((uint32_t)0x00000200) /*!< Time stamp trigger flag (on MAC) */ -#define ETH_MAC_FLAG_MMCT ((uint32_t)0x00000040) /*!< MMC transmit flag */ -#define ETH_MAC_FLAG_MMCR ((uint32_t)0x00000020) /*!< MMC receive flag */ -#define ETH_MAC_FLAG_MMC ((uint32_t)0x00000010) /*!< MMC flag (on MAC) */ -#define ETH_MAC_FLAG_PMT ((uint32_t)0x00000008) /*!< PMT flag (on MAC) */ -#define IS_ETH_MAC_GET_FLAG(FLAG) (((FLAG) == ETH_MAC_FLAG_TST) || ((FLAG) == ETH_MAC_FLAG_MMCT) || \ - ((FLAG) == ETH_MAC_FLAG_MMCR) || ((FLAG) == ETH_MAC_FLAG_MMC) || \ - ((FLAG) == ETH_MAC_FLAG_PMT)) -/** - * @} - */ - -/** @defgroup ETH_MAC_Interrupts - * @{ - */ -#define ETH_MAC_IT_TST ((uint32_t)0x00000200) /*!< Time stamp trigger interrupt (on MAC) */ -#define ETH_MAC_IT_MMCT ((uint32_t)0x00000040) /*!< MMC transmit interrupt */ -#define ETH_MAC_IT_MMCR ((uint32_t)0x00000020) /*!< MMC receive interrupt */ -#define ETH_MAC_IT_MMC ((uint32_t)0x00000010) /*!< MMC interrupt (on MAC) */ -#define ETH_MAC_IT_PMT ((uint32_t)0x00000008) /*!< PMT interrupt (on MAC) */ -#define IS_ETH_MAC_IT(IT) ((((IT) & (uint32_t)0xFFFFFDF7) == 0x00) && ((IT) != 0x00)) -#define IS_ETH_MAC_GET_IT(IT) (((IT) == ETH_MAC_IT_TST) || ((IT) == ETH_MAC_IT_MMCT) || \ - ((IT) == ETH_MAC_IT_MMCR) || ((IT) == ETH_MAC_IT_MMC) || \ - ((IT) == ETH_MAC_IT_PMT)) -/** - * @} - */ - -/** @defgroup ETH_MAC_addresses - * @{ - */ -#define ETH_MAC_Address0 ((uint32_t)0x00000000) -#define ETH_MAC_Address1 ((uint32_t)0x00000008) -#define ETH_MAC_Address2 ((uint32_t)0x00000010) -#define ETH_MAC_Address3 ((uint32_t)0x00000018) -#define IS_ETH_MAC_ADDRESS0123(ADDRESS) (((ADDRESS) == ETH_MAC_Address0) || \ - ((ADDRESS) == ETH_MAC_Address1) || \ - ((ADDRESS) == ETH_MAC_Address2) || \ - ((ADDRESS) == ETH_MAC_Address3)) -#define IS_ETH_MAC_ADDRESS123(ADDRESS) (((ADDRESS) == ETH_MAC_Address1) || \ - ((ADDRESS) == ETH_MAC_Address2) || \ - ((ADDRESS) == ETH_MAC_Address3)) -/** - * @} - */ - -/** @defgroup ETH_MAC_addresses_filter:_SA_DA_filed_of_received_frames - * @{ - */ -#define ETH_MAC_AddressFilter_SA ((uint32_t)0x00000000) -#define ETH_MAC_AddressFilter_DA ((uint32_t)0x00000008) -#define IS_ETH_MAC_ADDRESS_FILTER(FILTER) (((FILTER) == ETH_MAC_AddressFilter_SA) || \ - ((FILTER) == ETH_MAC_AddressFilter_DA)) -/** - * @} - */ - -/** @defgroup ETH_MAC_addresses_filter:_Mask_bytes - * @{ - */ -#define ETH_MAC_AddressMask_Byte6 ((uint32_t)0x20000000) /*!< Mask MAC Address high reg bits [15:8] */ -#define ETH_MAC_AddressMask_Byte5 ((uint32_t)0x10000000) /*!< Mask MAC Address high reg bits [7:0] */ -#define ETH_MAC_AddressMask_Byte4 ((uint32_t)0x08000000) /*!< Mask MAC Address low reg bits [31:24] */ -#define ETH_MAC_AddressMask_Byte3 ((uint32_t)0x04000000) /*!< Mask MAC Address low reg bits [23:16] */ -#define ETH_MAC_AddressMask_Byte2 ((uint32_t)0x02000000) /*!< Mask MAC Address low reg bits [15:8] */ -#define ETH_MAC_AddressMask_Byte1 ((uint32_t)0x01000000) /*!< Mask MAC Address low reg bits [70] */ -#define IS_ETH_MAC_ADDRESS_MASK(MASK) (((MASK) == ETH_MAC_AddressMask_Byte6) || \ - ((MASK) == ETH_MAC_AddressMask_Byte5) || \ - ((MASK) == ETH_MAC_AddressMask_Byte4) || \ - ((MASK) == ETH_MAC_AddressMask_Byte3) || \ - ((MASK) == ETH_MAC_AddressMask_Byte2) || \ - ((MASK) == ETH_MAC_AddressMask_Byte1)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet DMA Desciptors defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_DMA_Tx_descriptor_flags - * @{ - */ -#define IS_ETH_DMATxDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMATxDesc_OWN) || \ - ((FLAG) == ETH_DMATxDesc_IC) || \ - ((FLAG) == ETH_DMATxDesc_LS) || \ - ((FLAG) == ETH_DMATxDesc_FS) || \ - ((FLAG) == ETH_DMATxDesc_DC) || \ - ((FLAG) == ETH_DMATxDesc_DP) || \ - ((FLAG) == ETH_DMATxDesc_TTSE) || \ - ((FLAG) == ETH_DMATxDesc_TER) || \ - ((FLAG) == ETH_DMATxDesc_TCH) || \ - ((FLAG) == ETH_DMATxDesc_TTSS) || \ - ((FLAG) == ETH_DMATxDesc_IHE) || \ - ((FLAG) == ETH_DMATxDesc_ES) || \ - ((FLAG) == ETH_DMATxDesc_JT) || \ - ((FLAG) == ETH_DMATxDesc_FF) || \ - ((FLAG) == ETH_DMATxDesc_PCE) || \ - ((FLAG) == ETH_DMATxDesc_LCA) || \ - ((FLAG) == ETH_DMATxDesc_NC) || \ - ((FLAG) == ETH_DMATxDesc_LCO) || \ - ((FLAG) == ETH_DMATxDesc_EC) || \ - ((FLAG) == ETH_DMATxDesc_VF) || \ - ((FLAG) == ETH_DMATxDesc_CC) || \ - ((FLAG) == ETH_DMATxDesc_ED) || \ - ((FLAG) == ETH_DMATxDesc_UF) || \ - ((FLAG) == ETH_DMATxDesc_DB)) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Tx_descriptor_segment - * @{ - */ -#define ETH_DMATxDesc_LastSegment ((uint32_t)0x40000000) /*!< Last Segment */ -#define ETH_DMATxDesc_FirstSegment ((uint32_t)0x20000000) /*!< First Segment */ -#define IS_ETH_DMA_TXDESC_SEGMENT(SEGMENT) (((SEGMENT) == ETH_DMATxDesc_LastSegment) || \ - ((SEGMENT) == ETH_DMATxDesc_FirstSegment)) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Tx_descriptor_Checksum_Insertion_Control - * @{ - */ -#define ETH_DMATxDesc_ChecksumByPass ((uint32_t)0x00000000) /*!< Checksum engine bypass */ -#define ETH_DMATxDesc_ChecksumIPV4Header ((uint32_t)0x00400000) /*!< IPv4 header checksum insertion */ -#define ETH_DMATxDesc_ChecksumTCPUDPICMPSegment ((uint32_t)0x00800000) /*!< TCP/UDP/ICMP checksum insertion. Pseudo header checksum is assumed to be present */ -#define ETH_DMATxDesc_ChecksumTCPUDPICMPFull ((uint32_t)0x00C00000) /*!< TCP/UDP/ICMP checksum fully in hardware including pseudo header */ -#define IS_ETH_DMA_TXDESC_CHECKSUM(CHECKSUM) (((CHECKSUM) == ETH_DMATxDesc_ChecksumByPass) || \ - ((CHECKSUM) == ETH_DMATxDesc_ChecksumIPV4Header) || \ - ((CHECKSUM) == ETH_DMATxDesc_ChecksumTCPUDPICMPSegment) || \ - ((CHECKSUM) == ETH_DMATxDesc_ChecksumTCPUDPICMPFull)) -/** - * @brief ETH DMA Tx Desciptor buffer size - */ -#define IS_ETH_DMATxDESC_BUFFER_SIZE(SIZE) ((SIZE) <= 0x1FFF) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Rx_descriptor_flags - * @{ - */ -#define IS_ETH_DMARxDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMARxDesc_OWN) || \ - ((FLAG) == ETH_DMARxDesc_AFM) || \ - ((FLAG) == ETH_DMARxDesc_ES) || \ - ((FLAG) == ETH_DMARxDesc_DE) || \ - ((FLAG) == ETH_DMARxDesc_SAF) || \ - ((FLAG) == ETH_DMARxDesc_LE) || \ - ((FLAG) == ETH_DMARxDesc_OE) || \ - ((FLAG) == ETH_DMARxDesc_VLAN) || \ - ((FLAG) == ETH_DMARxDesc_FS) || \ - ((FLAG) == ETH_DMARxDesc_LS) || \ - ((FLAG) == ETH_DMARxDesc_IPV4HCE) || \ - ((FLAG) == ETH_DMARxDesc_LC) || \ - ((FLAG) == ETH_DMARxDesc_FT) || \ - ((FLAG) == ETH_DMARxDesc_RWT) || \ - ((FLAG) == ETH_DMARxDesc_RE) || \ - ((FLAG) == ETH_DMARxDesc_DBE) || \ - ((FLAG) == ETH_DMARxDesc_CE) || \ - ((FLAG) == ETH_DMARxDesc_MAMPCE)) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Rx_descriptor_buffers_ - * @{ - */ -#define ETH_DMARxDesc_Buffer1 ((uint32_t)0x00000000) /*!< DMA Rx Desc Buffer1 */ -#define ETH_DMARxDesc_Buffer2 ((uint32_t)0x00000001) /*!< DMA Rx Desc Buffer2 */ -#define IS_ETH_DMA_RXDESC_BUFFER(BUFFER) (((BUFFER) == ETH_DMARxDesc_Buffer1) || \ - ((BUFFER) == ETH_DMARxDesc_Buffer2)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet DMA defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_Drop_TCP_IP_Checksum_Error_Frame - * @{ - */ -#define ETH_DropTCPIPChecksumErrorFrame_Enable ((uint32_t)0x00000000) -#define ETH_DropTCPIPChecksumErrorFrame_Disable ((uint32_t)0x04000000) -#define IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(CMD) (((CMD) == ETH_DropTCPIPChecksumErrorFrame_Enable) || \ - ((CMD) == ETH_DropTCPIPChecksumErrorFrame_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Receive_Store_Forward - * @{ - */ -#define ETH_ReceiveStoreForward_Enable ((uint32_t)0x02000000) -#define ETH_ReceiveStoreForward_Disable ((uint32_t)0x00000000) -#define IS_ETH_RECEIVE_STORE_FORWARD(CMD) (((CMD) == ETH_ReceiveStoreForward_Enable) || \ - ((CMD) == ETH_ReceiveStoreForward_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Flush_Received_Frame - * @{ - */ -#define ETH_FlushReceivedFrame_Enable ((uint32_t)0x00000000) -#define ETH_FlushReceivedFrame_Disable ((uint32_t)0x01000000) -#define IS_ETH_FLUSH_RECEIVE_FRAME(CMD) (((CMD) == ETH_FlushReceivedFrame_Enable) || \ - ((CMD) == ETH_FlushReceivedFrame_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Transmit_Store_Forward - * @{ - */ -#define ETH_TransmitStoreForward_Enable ((uint32_t)0x00200000) -#define ETH_TransmitStoreForward_Disable ((uint32_t)0x00000000) -#define IS_ETH_TRANSMIT_STORE_FORWARD(CMD) (((CMD) == ETH_TransmitStoreForward_Enable) || \ - ((CMD) == ETH_TransmitStoreForward_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Transmit_Threshold_Control - * @{ - */ -#define ETH_TransmitThresholdControl_64Bytes ((uint32_t)0x00000000) /*!< threshold level of the MTL Transmit FIFO is 64 Bytes */ -#define ETH_TransmitThresholdControl_128Bytes ((uint32_t)0x00004000) /*!< threshold level of the MTL Transmit FIFO is 128 Bytes */ -#define ETH_TransmitThresholdControl_192Bytes ((uint32_t)0x00008000) /*!< threshold level of the MTL Transmit FIFO is 192 Bytes */ -#define ETH_TransmitThresholdControl_256Bytes ((uint32_t)0x0000C000) /*!< threshold level of the MTL Transmit FIFO is 256 Bytes */ -#define ETH_TransmitThresholdControl_40Bytes ((uint32_t)0x00010000) /*!< threshold level of the MTL Transmit FIFO is 40 Bytes */ -#define ETH_TransmitThresholdControl_32Bytes ((uint32_t)0x00014000) /*!< threshold level of the MTL Transmit FIFO is 32 Bytes */ -#define ETH_TransmitThresholdControl_24Bytes ((uint32_t)0x00018000) /*!< threshold level of the MTL Transmit FIFO is 24 Bytes */ -#define ETH_TransmitThresholdControl_16Bytes ((uint32_t)0x0001C000) /*!< threshold level of the MTL Transmit FIFO is 16 Bytes */ -#define IS_ETH_TRANSMIT_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_TransmitThresholdControl_64Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_128Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_192Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_256Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_40Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_32Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_24Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_16Bytes)) -/** - * @} - */ - -/** @defgroup ETH_Forward_Error_Frames - * @{ - */ -#define ETH_ForwardErrorFrames_Enable ((uint32_t)0x00000080) -#define ETH_ForwardErrorFrames_Disable ((uint32_t)0x00000000) -#define IS_ETH_FORWARD_ERROR_FRAMES(CMD) (((CMD) == ETH_ForwardErrorFrames_Enable) || \ - ((CMD) == ETH_ForwardErrorFrames_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Forward_Undersized_Good_Frames - * @{ - */ -#define ETH_ForwardUndersizedGoodFrames_Enable ((uint32_t)0x00000040) -#define ETH_ForwardUndersizedGoodFrames_Disable ((uint32_t)0x00000000) -#define IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(CMD) (((CMD) == ETH_ForwardUndersizedGoodFrames_Enable) || \ - ((CMD) == ETH_ForwardUndersizedGoodFrames_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Receive_Threshold_Control - * @{ - */ -#define ETH_ReceiveThresholdControl_64Bytes ((uint32_t)0x00000000) /*!< threshold level of the MTL Receive FIFO is 64 Bytes */ -#define ETH_ReceiveThresholdControl_32Bytes ((uint32_t)0x00000008) /*!< threshold level of the MTL Receive FIFO is 32 Bytes */ -#define ETH_ReceiveThresholdControl_96Bytes ((uint32_t)0x00000010) /*!< threshold level of the MTL Receive FIFO is 96 Bytes */ -#define ETH_ReceiveThresholdControl_128Bytes ((uint32_t)0x00000018) /*!< threshold level of the MTL Receive FIFO is 128 Bytes */ -#define IS_ETH_RECEIVE_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_ReceiveThresholdControl_64Bytes) || \ - ((THRESHOLD) == ETH_ReceiveThresholdControl_32Bytes) || \ - ((THRESHOLD) == ETH_ReceiveThresholdControl_96Bytes) || \ - ((THRESHOLD) == ETH_ReceiveThresholdControl_128Bytes)) -/** - * @} - */ - -/** @defgroup ETH_Second_Frame_Operate - * @{ - */ -#define ETH_SecondFrameOperate_Enable ((uint32_t)0x00000004) -#define ETH_SecondFrameOperate_Disable ((uint32_t)0x00000000) -#define IS_ETH_SECOND_FRAME_OPERATE(CMD) (((CMD) == ETH_SecondFrameOperate_Enable) || \ - ((CMD) == ETH_SecondFrameOperate_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Address_Aligned_Beats - * @{ - */ -#define ETH_AddressAlignedBeats_Enable ((uint32_t)0x02000000) -#define ETH_AddressAlignedBeats_Disable ((uint32_t)0x00000000) -#define IS_ETH_ADDRESS_ALIGNED_BEATS(CMD) (((CMD) == ETH_AddressAlignedBeats_Enable) || \ - ((CMD) == ETH_AddressAlignedBeats_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Fixed_Burst - * @{ - */ -#define ETH_FixedBurst_Enable ((uint32_t)0x00010000) -#define ETH_FixedBurst_Disable ((uint32_t)0x00000000) -#define IS_ETH_FIXED_BURST(CMD) (((CMD) == ETH_FixedBurst_Enable) || \ - ((CMD) == ETH_FixedBurst_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Rx_DMA_Burst_Length - * @{ - */ -#define ETH_RxDMABurstLength_1Beat ((uint32_t)0x00020000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 1 */ -#define ETH_RxDMABurstLength_2Beat ((uint32_t)0x00040000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 2 */ -#define ETH_RxDMABurstLength_4Beat ((uint32_t)0x00080000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */ -#define ETH_RxDMABurstLength_8Beat ((uint32_t)0x00100000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */ -#define ETH_RxDMABurstLength_16Beat ((uint32_t)0x00200000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */ -#define ETH_RxDMABurstLength_32Beat ((uint32_t)0x00400000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */ -#define ETH_RxDMABurstLength_4xPBL_4Beat ((uint32_t)0x01020000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */ -#define ETH_RxDMABurstLength_4xPBL_8Beat ((uint32_t)0x01040000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */ -#define ETH_RxDMABurstLength_4xPBL_16Beat ((uint32_t)0x01080000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */ -#define ETH_RxDMABurstLength_4xPBL_32Beat ((uint32_t)0x01100000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */ -#define ETH_RxDMABurstLength_4xPBL_64Beat ((uint32_t)0x01200000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 64 */ -#define ETH_RxDMABurstLength_4xPBL_128Beat ((uint32_t)0x01400000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 128 */ -#define IS_ETH_RXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_RxDMABurstLength_1Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_2Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_8Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_16Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_32Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_4Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_8Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_16Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_32Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_64Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_128Beat)) - -/** - * @} - */ - -/** @defgroup ETH_Tx_DMA_Burst_Length - * @{ - */ -#define ETH_TxDMABurstLength_1Beat ((uint32_t)0x00000100) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 1 */ -#define ETH_TxDMABurstLength_2Beat ((uint32_t)0x00000200) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 2 */ -#define ETH_TxDMABurstLength_4Beat ((uint32_t)0x00000400) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */ -#define ETH_TxDMABurstLength_8Beat ((uint32_t)0x00000800) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */ -#define ETH_TxDMABurstLength_16Beat ((uint32_t)0x00001000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */ -#define ETH_TxDMABurstLength_32Beat ((uint32_t)0x00002000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */ -#define ETH_TxDMABurstLength_4xPBL_4Beat ((uint32_t)0x01000100) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */ -#define ETH_TxDMABurstLength_4xPBL_8Beat ((uint32_t)0x01000200) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */ -#define ETH_TxDMABurstLength_4xPBL_16Beat ((uint32_t)0x01000400) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */ -#define ETH_TxDMABurstLength_4xPBL_32Beat ((uint32_t)0x01000800) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */ -#define ETH_TxDMABurstLength_4xPBL_64Beat ((uint32_t)0x01001000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 64 */ -#define ETH_TxDMABurstLength_4xPBL_128Beat ((uint32_t)0x01002000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 128 */ -#define IS_ETH_TXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_TxDMABurstLength_1Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_2Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_8Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_16Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_32Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_4Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_8Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_16Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_32Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_64Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_128Beat)) -/** - * @brief ETH DMA Desciptor SkipLength - */ -#define IS_ETH_DMA_DESC_SKIP_LENGTH(LENGTH) ((LENGTH) <= 0x1F) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Arbitration - * @{ - */ -#define ETH_DMAArbitration_RoundRobin_RxTx_1_1 ((uint32_t)0x00000000) -#define ETH_DMAArbitration_RoundRobin_RxTx_2_1 ((uint32_t)0x00004000) -#define ETH_DMAArbitration_RoundRobin_RxTx_3_1 ((uint32_t)0x00008000) -#define ETH_DMAArbitration_RoundRobin_RxTx_4_1 ((uint32_t)0x0000C000) -#define ETH_DMAArbitration_RxPriorTx ((uint32_t)0x00000002) -#define IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(RATIO) (((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_1_1) || \ - ((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_2_1) || \ - ((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_3_1) || \ - ((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_4_1) || \ - ((RATIO) == ETH_DMAArbitration_RxPriorTx)) -/** - * @} - */ - -/** @defgroup ETH_DMA_Flags - * @{ - */ -#define ETH_DMA_FLAG_TST ((uint32_t)0x20000000) /*!< Time-stamp trigger interrupt (on DMA) */ -#define ETH_DMA_FLAG_PMT ((uint32_t)0x10000000) /*!< PMT interrupt (on DMA) */ -#define ETH_DMA_FLAG_MMC ((uint32_t)0x08000000) /*!< MMC interrupt (on DMA) */ -#define ETH_DMA_FLAG_DataTransferError ((uint32_t)0x00800000) /*!< Error bits 0-Rx DMA, 1-Tx DMA */ -#define ETH_DMA_FLAG_ReadWriteError ((uint32_t)0x01000000) /*!< Error bits 0-write trnsf, 1-read transfr */ -#define ETH_DMA_FLAG_AccessError ((uint32_t)0x02000000) /*!< Error bits 0-data buffer, 1-desc. access */ -#define ETH_DMA_FLAG_NIS ((uint32_t)0x00010000) /*!< Normal interrupt summary flag */ -#define ETH_DMA_FLAG_AIS ((uint32_t)0x00008000) /*!< Abnormal interrupt summary flag */ -#define ETH_DMA_FLAG_ER ((uint32_t)0x00004000) /*!< Early receive flag */ -#define ETH_DMA_FLAG_FBE ((uint32_t)0x00002000) /*!< Fatal bus error flag */ -#define ETH_DMA_FLAG_ET ((uint32_t)0x00000400) /*!< Early transmit flag */ -#define ETH_DMA_FLAG_RWT ((uint32_t)0x00000200) /*!< Receive watchdog timeout flag */ -#define ETH_DMA_FLAG_RPS ((uint32_t)0x00000100) /*!< Receive process stopped flag */ -#define ETH_DMA_FLAG_RBU ((uint32_t)0x00000080) /*!< Receive buffer unavailable flag */ -#define ETH_DMA_FLAG_R ((uint32_t)0x00000040) /*!< Receive flag */ -#define ETH_DMA_FLAG_TU ((uint32_t)0x00000020) /*!< Underflow flag */ -#define ETH_DMA_FLAG_RO ((uint32_t)0x00000010) /*!< Overflow flag */ -#define ETH_DMA_FLAG_TJT ((uint32_t)0x00000008) /*!< Transmit jabber timeout flag */ -#define ETH_DMA_FLAG_TBU ((uint32_t)0x00000004) /*!< Transmit buffer unavailable flag */ -#define ETH_DMA_FLAG_TPS ((uint32_t)0x00000002) /*!< Transmit process stopped flag */ -#define ETH_DMA_FLAG_T ((uint32_t)0x00000001) /*!< Transmit flag */ - -#define IS_ETH_DMA_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFE1800) == 0x00) && ((FLAG) != 0x00)) -#define IS_ETH_DMA_GET_FLAG(FLAG) (((FLAG) == ETH_DMA_FLAG_TST) || ((FLAG) == ETH_DMA_FLAG_PMT) || \ - ((FLAG) == ETH_DMA_FLAG_MMC) || ((FLAG) == ETH_DMA_FLAG_DataTransferError) || \ - ((FLAG) == ETH_DMA_FLAG_ReadWriteError) || ((FLAG) == ETH_DMA_FLAG_AccessError) || \ - ((FLAG) == ETH_DMA_FLAG_NIS) || ((FLAG) == ETH_DMA_FLAG_AIS) || \ - ((FLAG) == ETH_DMA_FLAG_ER) || ((FLAG) == ETH_DMA_FLAG_FBE) || \ - ((FLAG) == ETH_DMA_FLAG_ET) || ((FLAG) == ETH_DMA_FLAG_RWT) || \ - ((FLAG) == ETH_DMA_FLAG_RPS) || ((FLAG) == ETH_DMA_FLAG_RBU) || \ - ((FLAG) == ETH_DMA_FLAG_R) || ((FLAG) == ETH_DMA_FLAG_TU) || \ - ((FLAG) == ETH_DMA_FLAG_RO) || ((FLAG) == ETH_DMA_FLAG_TJT) || \ - ((FLAG) == ETH_DMA_FLAG_TBU) || ((FLAG) == ETH_DMA_FLAG_TPS) || \ - ((FLAG) == ETH_DMA_FLAG_T)) -/** - * @} - */ - -/** @defgroup ETH_DMA_Interrupts - * @{ - */ -#define ETH_DMA_IT_TST ((uint32_t)0x20000000) /*!< Time-stamp trigger interrupt (on DMA) */ -#define ETH_DMA_IT_PMT ((uint32_t)0x10000000) /*!< PMT interrupt (on DMA) */ -#define ETH_DMA_IT_MMC ((uint32_t)0x08000000) /*!< MMC interrupt (on DMA) */ -#define ETH_DMA_IT_NIS ((uint32_t)0x00010000) /*!< Normal interrupt summary */ -#define ETH_DMA_IT_AIS ((uint32_t)0x00008000) /*!< Abnormal interrupt summary */ -#define ETH_DMA_IT_ER ((uint32_t)0x00004000) /*!< Early receive interrupt */ -#define ETH_DMA_IT_FBE ((uint32_t)0x00002000) /*!< Fatal bus error interrupt */ -#define ETH_DMA_IT_ET ((uint32_t)0x00000400) /*!< Early transmit interrupt */ -#define ETH_DMA_IT_RWT ((uint32_t)0x00000200) /*!< Receive watchdog timeout interrupt */ -#define ETH_DMA_IT_RPS ((uint32_t)0x00000100) /*!< Receive process stopped interrupt */ -#define ETH_DMA_IT_RBU ((uint32_t)0x00000080) /*!< Receive buffer unavailable interrupt */ -#define ETH_DMA_IT_R ((uint32_t)0x00000040) /*!< Receive interrupt */ -#define ETH_DMA_IT_TU ((uint32_t)0x00000020) /*!< Underflow interrupt */ -#define ETH_DMA_IT_RO ((uint32_t)0x00000010) /*!< Overflow interrupt */ -#define ETH_DMA_IT_TJT ((uint32_t)0x00000008) /*!< Transmit jabber timeout interrupt */ -#define ETH_DMA_IT_TBU ((uint32_t)0x00000004) /*!< Transmit buffer unavailable interrupt */ -#define ETH_DMA_IT_TPS ((uint32_t)0x00000002) /*!< Transmit process stopped interrupt */ -#define ETH_DMA_IT_T ((uint32_t)0x00000001) /*!< Transmit interrupt */ - -#define IS_ETH_DMA_IT(IT) ((((IT) & (uint32_t)0xFFFE1800) == 0x00) && ((IT) != 0x00)) -#define IS_ETH_DMA_GET_IT(IT) (((IT) == ETH_DMA_IT_TST) || ((IT) == ETH_DMA_IT_PMT) || \ - ((IT) == ETH_DMA_IT_MMC) || ((IT) == ETH_DMA_IT_NIS) || \ - ((IT) == ETH_DMA_IT_AIS) || ((IT) == ETH_DMA_IT_ER) || \ - ((IT) == ETH_DMA_IT_FBE) || ((IT) == ETH_DMA_IT_ET) || \ - ((IT) == ETH_DMA_IT_RWT) || ((IT) == ETH_DMA_IT_RPS) || \ - ((IT) == ETH_DMA_IT_RBU) || ((IT) == ETH_DMA_IT_R) || \ - ((IT) == ETH_DMA_IT_TU) || ((IT) == ETH_DMA_IT_RO) || \ - ((IT) == ETH_DMA_IT_TJT) || ((IT) == ETH_DMA_IT_TBU) || \ - ((IT) == ETH_DMA_IT_TPS) || ((IT) == ETH_DMA_IT_T)) - -/** - * @} - */ - -/** @defgroup ETH_DMA_transmit_process_state_ - * @{ - */ -#define ETH_DMA_TransmitProcess_Stopped ((uint32_t)0x00000000) /*!< Stopped - Reset or Stop Tx Command issued */ -#define ETH_DMA_TransmitProcess_Fetching ((uint32_t)0x00100000) /*!< Running - fetching the Tx descriptor */ -#define ETH_DMA_TransmitProcess_Waiting ((uint32_t)0x00200000) /*!< Running - waiting for status */ -#define ETH_DMA_TransmitProcess_Reading ((uint32_t)0x00300000) /*!< Running - reading the data from host memory */ -#define ETH_DMA_TransmitProcess_Suspended ((uint32_t)0x00600000) /*!< Suspended - Tx Desciptor unavailabe */ -#define ETH_DMA_TransmitProcess_Closing ((uint32_t)0x00700000) /*!< Running - closing Rx descriptor */ - -/** - * @} - */ - - -/** @defgroup ETH_DMA_receive_process_state_ - * @{ - */ -#define ETH_DMA_ReceiveProcess_Stopped ((uint32_t)0x00000000) /*!< Stopped - Reset or Stop Rx Command issued */ -#define ETH_DMA_ReceiveProcess_Fetching ((uint32_t)0x00020000) /*!< Running - fetching the Rx descriptor */ -#define ETH_DMA_ReceiveProcess_Waiting ((uint32_t)0x00060000) /*!< Running - waiting for packet */ -#define ETH_DMA_ReceiveProcess_Suspended ((uint32_t)0x00080000) /*!< Suspended - Rx Desciptor unavailable */ -#define ETH_DMA_ReceiveProcess_Closing ((uint32_t)0x000A0000) /*!< Running - closing descriptor */ -#define ETH_DMA_ReceiveProcess_Queuing ((uint32_t)0x000E0000) /*!< Running - queuing the recieve frame into host memory */ - -/** - * @} - */ - -/** @defgroup ETH_DMA_overflow_ - * @{ - */ -#define ETH_DMA_Overflow_RxFIFOCounter ((uint32_t)0x10000000) /*!< Overflow bit for FIFO overflow counter */ -#define ETH_DMA_Overflow_MissedFrameCounter ((uint32_t)0x00010000) /*!< Overflow bit for missed frame counter */ -#define IS_ETH_DMA_GET_OVERFLOW(OVERFLOW) (((OVERFLOW) == ETH_DMA_Overflow_RxFIFOCounter) || \ - ((OVERFLOW) == ETH_DMA_Overflow_MissedFrameCounter)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet PMT defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_PMT_Flags - * @{ - */ -#define ETH_PMT_FLAG_WUFFRPR ((uint32_t)0x80000000) /*!< Wake-Up Frame Filter Register Poniter Reset */ -#define ETH_PMT_FLAG_WUFR ((uint32_t)0x00000040) /*!< Wake-Up Frame Received */ -#define ETH_PMT_FLAG_MPR ((uint32_t)0x00000020) /*!< Magic Packet Received */ -#define IS_ETH_PMT_GET_FLAG(FLAG) (((FLAG) == ETH_PMT_FLAG_WUFR) || \ - ((FLAG) == ETH_PMT_FLAG_MPR)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet MMC defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_MMC_Tx_Interrupts - * @{ - */ -#define ETH_MMC_IT_TGF ((uint32_t)0x00200000) /*!< When Tx good frame counter reaches half the maximum value */ -#define ETH_MMC_IT_TGFMSC ((uint32_t)0x00008000) /*!< When Tx good multi col counter reaches half the maximum value */ -#define ETH_MMC_IT_TGFSC ((uint32_t)0x00004000) /*!< When Tx good single col counter reaches half the maximum value */ - -/** - * @} - */ - -/** @defgroup ETH_MMC_Rx_Interrupts - * @{ - */ -#define ETH_MMC_IT_RGUF ((uint32_t)0x10020000) /*!< When Rx good unicast frames counter reaches half the maximum value */ -#define ETH_MMC_IT_RFAE ((uint32_t)0x10000040) /*!< When Rx alignment error counter reaches half the maximum value */ -#define ETH_MMC_IT_RFCE ((uint32_t)0x10000020) /*!< When Rx crc error counter reaches half the maximum value */ -#define IS_ETH_MMC_IT(IT) (((((IT) & (uint32_t)0xFFDF3FFF) == 0x00) || (((IT) & (uint32_t)0xEFFDFF9F) == 0x00)) && \ - ((IT) != 0x00)) -#define IS_ETH_MMC_GET_IT(IT) (((IT) == ETH_MMC_IT_TGF) || ((IT) == ETH_MMC_IT_TGFMSC) || \ - ((IT) == ETH_MMC_IT_TGFSC) || ((IT) == ETH_MMC_IT_RGUF) || \ - ((IT) == ETH_MMC_IT_RFAE) || ((IT) == ETH_MMC_IT_RFCE)) -/** - * @} - */ - -/** @defgroup ETH_MMC_Registers - * @{ - */ -#define ETH_MMCCR ((uint32_t)0x00000100) /*!< MMC CR register */ -#define ETH_MMCRIR ((uint32_t)0x00000104) /*!< MMC RIR register */ -#define ETH_MMCTIR ((uint32_t)0x00000108) /*!< MMC TIR register */ -#define ETH_MMCRIMR ((uint32_t)0x0000010C) /*!< MMC RIMR register */ -#define ETH_MMCTIMR ((uint32_t)0x00000110) /*!< MMC TIMR register */ -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014C) /*!< MMC TGFSCCR register */ -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150) /*!< MMC TGFMSCCR register */ -#define ETH_MMCTGFCR ((uint32_t)0x00000168) /*!< MMC TGFCR register */ -#define ETH_MMCRFCECR ((uint32_t)0x00000194) /*!< MMC RFCECR register */ -#define ETH_MMCRFAECR ((uint32_t)0x00000198) /*!< MMC RFAECR register */ -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4) /*!< MMC RGUFCR register */ - -/** - * @brief ETH MMC registers - */ -#define IS_ETH_MMC_REGISTER(REG) (((REG) == ETH_MMCCR) || ((REG) == ETH_MMCRIR) || \ - ((REG) == ETH_MMCTIR) || ((REG) == ETH_MMCRIMR) || \ - ((REG) == ETH_MMCTIMR) || ((REG) == ETH_MMCTGFSCCR) || \ - ((REG) == ETH_MMCTGFMSCCR) || ((REG) == ETH_MMCTGFCR) || \ - ((REG) == ETH_MMCRFCECR) || ((REG) == ETH_MMCRFAECR) || \ - ((REG) == ETH_MMCRGUFCR)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet PTP defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_PTP_time_update_method - * @{ - */ -#define ETH_PTP_FineUpdate ((uint32_t)0x00000001) /*!< Fine Update method */ -#define ETH_PTP_CoarseUpdate ((uint32_t)0x00000000) /*!< Coarse Update method */ -#define IS_ETH_PTP_UPDATE(UPDATE) (((UPDATE) == ETH_PTP_FineUpdate) || \ - ((UPDATE) == ETH_PTP_CoarseUpdate)) - -/** - * @} - */ - - -/** @defgroup ETH_PTP_Flags - * @{ - */ -#define ETH_PTP_FLAG_TSARU ((uint32_t)0x00000020) /*!< Addend Register Update */ -#define ETH_PTP_FLAG_TSITE ((uint32_t)0x00000010) /*!< Time Stamp Interrupt Trigger */ -#define ETH_PTP_FLAG_TSSTU ((uint32_t)0x00000008) /*!< Time Stamp Update */ -#define ETH_PTP_FLAG_TSSTI ((uint32_t)0x00000004) /*!< Time Stamp Initialize */ -#define IS_ETH_PTP_GET_FLAG(FLAG) (((FLAG) == ETH_PTP_FLAG_TSARU) || \ - ((FLAG) == ETH_PTP_FLAG_TSITE) || \ - ((FLAG) == ETH_PTP_FLAG_TSSTU) || \ - ((FLAG) == ETH_PTP_FLAG_TSSTI)) -/** - * @brief ETH PTP subsecond increment - */ -#define IS_ETH_PTP_SUBSECOND_INCREMENT(SUBSECOND) ((SUBSECOND) <= 0xFF) - -/** - * @} - */ - - -/** @defgroup ETH_PTP_time_sign - * @{ - */ -#define ETH_PTP_PositiveTime ((uint32_t)0x00000000) /*!< Positive time value */ -#define ETH_PTP_NegativeTime ((uint32_t)0x80000000) /*!< Negative time value */ -#define IS_ETH_PTP_TIME_SIGN(SIGN) (((SIGN) == ETH_PTP_PositiveTime) || \ - ((SIGN) == ETH_PTP_NegativeTime)) - -/** - * @brief ETH PTP time stamp low update - */ -#define IS_ETH_PTP_TIME_STAMP_UPDATE_SUBSECOND(SUBSECOND) ((SUBSECOND) <= 0x7FFFFFFF) - -/** - * @brief ETH PTP registers - */ -#define ETH_PTPTSCR ((uint32_t)0x00000700) /*!< PTP TSCR register */ -#define ETH_PTPSSIR ((uint32_t)0x00000704) /*!< PTP SSIR register */ -#define ETH_PTPTSHR ((uint32_t)0x00000708) /*!< PTP TSHR register */ -#define ETH_PTPTSLR ((uint32_t)0x0000070C) /*!< PTP TSLR register */ -#define ETH_PTPTSHUR ((uint32_t)0x00000710) /*!< PTP TSHUR register */ -#define ETH_PTPTSLUR ((uint32_t)0x00000714) /*!< PTP TSLUR register */ -#define ETH_PTPTSAR ((uint32_t)0x00000718) /*!< PTP TSAR register */ -#define ETH_PTPTTHR ((uint32_t)0x0000071C) /*!< PTP TTHR register */ -#define ETH_PTPTTLR ((uint32_t)0x00000720) /* PTP TTLR register */ -#define IS_ETH_PTP_REGISTER(REG) (((REG) == ETH_PTPTSCR) || ((REG) == ETH_PTPSSIR) || \ - ((REG) == ETH_PTPTSHR) || ((REG) == ETH_PTPTSLR) || \ - ((REG) == ETH_PTPTSHUR) || ((REG) == ETH_PTPTSLUR) || \ - ((REG) == ETH_PTPTSAR) || ((REG) == ETH_PTPTTHR) || \ - ((REG) == ETH_PTPTTLR)) - -/** - * @} - */ - - -/** - * @} - */ - -/** @defgroup ETH_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup ETH_Exported_Functions - * @{ - */ -void ETH_DeInit(void); -uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, u16 PHYAddress); -void ETH_StructInit(ETH_InitTypeDef* ETH_InitStruct); -void ETH_SoftwareReset(void); -FlagStatus ETH_GetSoftwareResetStatus(void); -void ETH_Start(void); -uint32_t ETH_HandleTxPkt(u8 *ppkt, u16 FrameLength); -uint32_t ETH_HandleRxPkt(u8 *ppkt); -uint32_t ETH_GetRxPktSize(void); -void ETH_DropRxPkt(void); - -/** - * @brief PHY - */ -u16 ETH_ReadPHYRegister(u16 PHYAddress, u16 PHYReg); -uint32_t ETH_WritePHYRegister(u16 PHYAddress, u16 PHYReg, u16 PHYValue); -uint32_t ETH_PHYLoopBackCmd(u16 PHYAddress, FunctionalState NewState); - -/** - * @brief MAC - */ -void ETH_MACTransmissionCmd(FunctionalState NewState); -void ETH_MACReceptionCmd(FunctionalState NewState); -FlagStatus ETH_GetFlowControlBusyStatus(void); -void ETH_InitiatePauseControlFrame(void); -void ETH_BackPressureActivationCmd(FunctionalState NewState); -FlagStatus ETH_GetMACFlagStatus(uint32_t ETH_MAC_FLAG); -ITStatus ETH_GetMACITStatus(uint32_t ETH_MAC_IT); -void ETH_MACITConfig(uint32_t ETH_MAC_IT, FunctionalState NewState); -void ETH_MACAddressConfig(uint32_t MacAddr, u8 *Addr); -void ETH_GetMACAddress(uint32_t MacAddr, u8 *Addr); -void ETH_MACAddressPerfectFilterCmd(uint32_t MacAddr, FunctionalState NewState); -void ETH_MACAddressFilterConfig(uint32_t MacAddr, uint32_t Filter); -void ETH_MACAddressMaskBytesFilterConfig(uint32_t MacAddr, uint32_t MaskByte); - -/** - * @brief DMA Tx/Rx descriptors - */ -void ETH_DMATxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, u8 *TxBuff, uint32_t TxBuffCount); -void ETH_DMATxDescRingInit(ETH_DMADESCTypeDef *DMATxDescTab, u8 *TxBuff1, u8 *TxBuff2, uint32_t TxBuffCount); -FlagStatus ETH_GetDMATxDescFlagStatus(ETH_DMADESCTypeDef *DMATxDesc, uint32_t ETH_DMATxDescFlag); -uint32_t ETH_GetDMATxDescCollisionCount(ETH_DMADESCTypeDef *DMATxDesc); -void ETH_SetDMATxDescOwnBit(ETH_DMADESCTypeDef *DMATxDesc); -void ETH_DMATxDescTransmitITConfig(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescFrameSegmentConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_FrameSegment); -void ETH_DMATxDescChecksumInsertionConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_Checksum); -void ETH_DMATxDescCRCCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescShortFramePaddingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescTimeStampCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescBufferSizeConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t BufferSize1, uint32_t BufferSize2); -void ETH_DMARxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, u8 *RxBuff, uint32_t RxBuffCount); -void ETH_DMARxDescRingInit(ETH_DMADESCTypeDef *DMARxDescTab, u8 *RxBuff1, u8 *RxBuff2, uint32_t RxBuffCount); -FlagStatus ETH_GetDMARxDescFlagStatus(ETH_DMADESCTypeDef *DMARxDesc, uint32_t ETH_DMARxDescFlag); -void ETH_SetDMARxDescOwnBit(ETH_DMADESCTypeDef *DMARxDesc); -uint32_t ETH_GetDMARxDescFrameLength(ETH_DMADESCTypeDef *DMARxDesc); -void ETH_DMARxDescReceiveITConfig(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState); -void ETH_DMARxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState); -void ETH_DMARxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState); -uint32_t ETH_GetDMARxDescBufferSize(ETH_DMADESCTypeDef *DMARxDesc, uint32_t DMARxDesc_Buffer); - -/** - * @brief DMA - */ -FlagStatus ETH_GetDMAFlagStatus(uint32_t ETH_DMA_FLAG); -void ETH_DMAClearFlag(uint32_t ETH_DMA_FLAG); -ITStatus ETH_GetDMAITStatus(uint32_t ETH_DMA_IT); -void ETH_DMAClearITPendingBit(uint32_t ETH_DMA_IT); -uint32_t ETH_GetTransmitProcessState(void); -uint32_t ETH_GetReceiveProcessState(void); -void ETH_FlushTransmitFIFO(void); -FlagStatus ETH_GetFlushTransmitFIFOStatus(void); -void ETH_DMATransmissionCmd(FunctionalState NewState); -void ETH_DMAReceptionCmd(FunctionalState NewState); -void ETH_DMAITConfig(uint32_t ETH_DMA_IT, FunctionalState NewState); -FlagStatus ETH_GetDMAOverflowStatus(uint32_t ETH_DMA_Overflow); -uint32_t ETH_GetRxOverflowMissedFrameCounter(void); -uint32_t ETH_GetBufferUnavailableMissedFrameCounter(void); -uint32_t ETH_GetCurrentTxDescStartAddress(void); -uint32_t ETH_GetCurrentRxDescStartAddress(void); -uint32_t ETH_GetCurrentTxBufferAddress(void); -uint32_t ETH_GetCurrentRxBufferAddress(void); -void ETH_ResumeDMATransmission(void); -void ETH_ResumeDMAReception(void); - -/** - * @brief PMT - */ -void ETH_ResetWakeUpFrameFilterRegisterPointer(void); -void ETH_SetWakeUpFrameFilterRegister(uint32_t *Buffer); -void ETH_GlobalUnicastWakeUpCmd(FunctionalState NewState); -FlagStatus ETH_GetPMTFlagStatus(uint32_t ETH_PMT_FLAG); -void ETH_WakeUpFrameDetectionCmd(FunctionalState NewState); -void ETH_MagicPacketDetectionCmd(FunctionalState NewState); -void ETH_PowerDownCmd(FunctionalState NewState); - -/** - * @brief MMC - */ -void ETH_MMCCounterFreezeCmd(FunctionalState NewState); -void ETH_MMCResetOnReadCmd(FunctionalState NewState); -void ETH_MMCCounterRolloverCmd(FunctionalState NewState); -void ETH_MMCCountersReset(void); -void ETH_MMCITConfig(uint32_t ETH_MMC_IT, FunctionalState NewState); -ITStatus ETH_GetMMCITStatus(uint32_t ETH_MMC_IT); -uint32_t ETH_GetMMCRegister(uint32_t ETH_MMCReg); - -/** - * @brief PTP - */ -uint32_t ETH_HandlePTPTxPkt(u8 *ppkt, u16 FrameLength, uint32_t *PTPTxTab); -uint32_t ETH_HandlePTPRxPkt(u8 *ppkt, uint32_t *PTPRxTab); -void ETH_DMAPTPTxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, ETH_DMADESCTypeDef *DMAPTPTxDescTab, u8* TxBuff, uint32_t TxBuffCount); -void ETH_DMAPTPRxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, ETH_DMADESCTypeDef *DMAPTPRxDescTab, u8 *RxBuff, uint32_t RxBuffCount); -void ETH_EnablePTPTimeStampAddend(void); -void ETH_EnablePTPTimeStampInterruptTrigger(void); -void ETH_EnablePTPTimeStampUpdate(void); -void ETH_InitializePTPTimeStamp(void); -void ETH_PTPUpdateMethodConfig(uint32_t UpdateMethod); -void ETH_PTPTimeStampCmd(FunctionalState NewState); -FlagStatus ETH_GetPTPFlagStatus(uint32_t ETH_PTP_FLAG); -void ETH_SetPTPSubSecondIncrement(uint32_t SubSecondValue); -void ETH_SetPTPTimeStampUpdate(uint32_t Sign, uint32_t SecondValue, uint32_t SubSecondValue); -void ETH_SetPTPTimeStampAddend(uint32_t Value); -void ETH_SetPTPTargetTime(uint32_t HighValue, uint32_t LowValue); -uint32_t ETH_GetPTPRegister(uint32_t ETH_PTPReg); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32_ETH_H */ -/** - * @} - */ - - -/** - * @} - */ - -/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/ethernetlib/src/stm32_eth.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/ethernetlib/src/stm32_eth.c deleted file mode 100644 index 119b4dbf..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/ethernetlib/src/stm32_eth.c +++ /dev/null @@ -1,3056 +0,0 @@ -/** - ****************************************************************************** - * @file stm32_eth.c - * @author MCD Application Team - * @version V1.0.0 - * @date 06/19/2009 - * @brief This file provides all the ETH firmware functions. - ****************************************************************************** - * @copy - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, 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 2009 STMicroelectronics

- */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32_eth.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32_ETH_Driver - * @brief ETH driver modules - * @{ - */ - -/** @defgroup ETH_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup ETH_Private_Defines - * @{ - */ -/* Global pointers on Tx and Rx descriptor used to track transmit and receive descriptors */ -ETH_DMADESCTypeDef *DMATxDescToSet; -ETH_DMADESCTypeDef *DMARxDescToGet; -ETH_DMADESCTypeDef *DMAPTPTxDescToSet; -ETH_DMADESCTypeDef *DMAPTPRxDescToGet; - -/* ETHERNET MAC address offsets */ -#define ETH_MAC_AddrHighBase (ETH_MAC_BASE + 0x40) /* ETHERNET MAC address high offset */ -#define ETH_MAC_AddrLowBase (ETH_MAC_BASE + 0x44) /* ETHERNET MAC address low offset */ -/* ETHERNET MACMIIAR register Mask */ -#define MACMIIAR_CR_Mask ((uint32_t)0xFFFFFFE3) -/* ETHERNET MACCR register Mask */ -#define MACCR_CLEAR_Mask ((uint32_t)0xFF20810F) -/* ETHERNET MACFCR register Mask */ -#define MACFCR_CLEAR_Mask ((uint32_t)0x0000FF41) -/* ETHERNET DMAOMR register Mask */ -#define DMAOMR_CLEAR_Mask ((uint32_t)0xF8DE3F23) -/* ETHERNET Remote Wake-up frame register length */ -#define ETH_WakeupRegisterLength 8 -/* ETHERNET Missed frames counter Shift */ -#define ETH_DMA_RxOverflowMissedFramesCounterShift 17 -/* ETHERNET DMA Tx descriptors Collision Count Shift */ -#define ETH_DMATxDesc_CollisionCountShift 3 -/* ETHERNET DMA Tx descriptors Buffer2 Size Shift */ -#define ETH_DMATxDesc_BufferSize2Shift 16 -/* ETHERNET DMA Rx descriptors Frame Length Shift */ -#define ETH_DMARxDesc_FrameLengthShift 16 -/* ETHERNET DMA Rx descriptors Buffer2 Size Shift */ -#define ETH_DMARxDesc_Buffer2SizeShift 16 -/* ETHERNET errors */ -#define ETH_ERROR ((uint32_t)0) -#define ETH_SUCCESS ((uint32_t)1) -/** - * @} - */ - -/** @defgroup ETH_Private_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup ETH_Private_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup ETH_Private_FunctionPrototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup ETH_Private_Functions - * @{ - */ - -/** - * @brief Deinitializes the ETHERNET peripheral registers to their - * default reset values. - * @param None - * @retval : None - */ -void ETH_DeInit(void) -{ - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, DISABLE); -} - -/** - * @brief Initializes the ETHERNET peripheral according to the specified - * parameters in the ETH_InitStruct . - * @param ETH_InitStruct: pointer to a ETH_InitTypeDef structure - * that contains the configuration information for the - * specified ETHERNET peripheral. - * @param PHYAddress: external PHY address - * @retval : ETH_ERROR: Ethernet initialization failed - * ETH_SUCCESS: Ethernet successfully initialized - */ -uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress) -{ - uint32_t RegValue = 0, tmpreg = 0; - __IO uint32_t i = 0; - RCC_ClocksTypeDef rcc_clocks; - uint32_t hclk = 120000000; - __IO uint32_t timeout = 0; - /* Check the parameters */ - /* MAC --------------------------*/ - assert_param(IS_ETH_AUTONEGOTIATION(ETH_InitStruct->ETH_AutoNegotiation)); - assert_param(IS_ETH_WATCHDOG(ETH_InitStruct->ETH_Watchdog)); - assert_param(IS_ETH_JABBER(ETH_InitStruct->ETH_Jabber)); - assert_param(IS_ETH_INTER_FRAME_GAP(ETH_InitStruct->ETH_InterFrameGap)); - assert_param(IS_ETH_CARRIER_SENSE(ETH_InitStruct->ETH_CarrierSense)); - assert_param(IS_ETH_SPEED(ETH_InitStruct->ETH_Speed)); - assert_param(IS_ETH_RECEIVE_OWN(ETH_InitStruct->ETH_ReceiveOwn)); - assert_param(IS_ETH_LOOPBACK_MODE(ETH_InitStruct->ETH_LoopbackMode)); - assert_param(IS_ETH_DUPLEX_MODE(ETH_InitStruct->ETH_Mode)); - assert_param(IS_ETH_CHECKSUM_OFFLOAD(ETH_InitStruct->ETH_ChecksumOffload)); - assert_param(IS_ETH_RETRY_TRANSMISSION(ETH_InitStruct->ETH_RetryTransmission)); - assert_param(IS_ETH_AUTOMATIC_PADCRC_STRIP(ETH_InitStruct->ETH_AutomaticPadCRCStrip)); - assert_param(IS_ETH_BACKOFF_LIMIT(ETH_InitStruct->ETH_BackOffLimit)); - assert_param(IS_ETH_DEFERRAL_CHECK(ETH_InitStruct->ETH_DeferralCheck)); - assert_param(IS_ETH_RECEIVE_ALL(ETH_InitStruct->ETH_ReceiveAll)); - assert_param(IS_ETH_SOURCE_ADDR_FILTER(ETH_InitStruct->ETH_SourceAddrFilter)); - assert_param(IS_ETH_CONTROL_FRAMES(ETH_InitStruct->ETH_PassControlFrames)); - assert_param(IS_ETH_BROADCAST_FRAMES_RECEPTION(ETH_InitStruct->ETH_BroadcastFramesReception)); - assert_param(IS_ETH_DESTINATION_ADDR_FILTER(ETH_InitStruct->ETH_DestinationAddrFilter)); - assert_param(IS_ETH_PROMISCUOUS_MODE(ETH_InitStruct->ETH_PromiscuousMode)); - assert_param(IS_ETH_MULTICAST_FRAMES_FILTER(ETH_InitStruct->ETH_MulticastFramesFilter)); - assert_param(IS_ETH_UNICAST_FRAMES_FILTER(ETH_InitStruct->ETH_UnicastFramesFilter)); - assert_param(IS_ETH_PAUSE_TIME(ETH_InitStruct->ETH_PauseTime)); - assert_param(IS_ETH_ZEROQUANTA_PAUSE(ETH_InitStruct->ETH_ZeroQuantaPause)); - assert_param(IS_ETH_PAUSE_LOW_THRESHOLD(ETH_InitStruct->ETH_PauseLowThreshold)); - assert_param(IS_ETH_UNICAST_PAUSE_FRAME_DETECT(ETH_InitStruct->ETH_UnicastPauseFrameDetect)); - assert_param(IS_ETH_RECEIVE_FLOWCONTROL(ETH_InitStruct->ETH_ReceiveFlowControl)); - assert_param(IS_ETH_TRANSMIT_FLOWCONTROL(ETH_InitStruct->ETH_TransmitFlowControl)); - assert_param(IS_ETH_VLAN_TAG_COMPARISON(ETH_InitStruct->ETH_VLANTagComparison)); - assert_param(IS_ETH_VLAN_TAG_IDENTIFIER(ETH_InitStruct->ETH_VLANTagIdentifier)); - /* DMA --------------------------*/ - assert_param(IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame)); - assert_param(IS_ETH_RECEIVE_STORE_FORWARD(ETH_InitStruct->ETH_ReceiveStoreForward)); - assert_param(IS_ETH_FLUSH_RECEIVE_FRAME(ETH_InitStruct->ETH_FlushReceivedFrame)); - assert_param(IS_ETH_TRANSMIT_STORE_FORWARD(ETH_InitStruct->ETH_TransmitStoreForward)); - assert_param(IS_ETH_TRANSMIT_THRESHOLD_CONTROL(ETH_InitStruct->ETH_TransmitThresholdControl)); - assert_param(IS_ETH_FORWARD_ERROR_FRAMES(ETH_InitStruct->ETH_ForwardErrorFrames)); - assert_param(IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(ETH_InitStruct->ETH_ForwardUndersizedGoodFrames)); - assert_param(IS_ETH_RECEIVE_THRESHOLD_CONTROL(ETH_InitStruct->ETH_ReceiveThresholdControl)); - assert_param(IS_ETH_SECOND_FRAME_OPERATE(ETH_InitStruct->ETH_SecondFrameOperate)); - assert_param(IS_ETH_ADDRESS_ALIGNED_BEATS(ETH_InitStruct->ETH_AddressAlignedBeats)); - assert_param(IS_ETH_FIXED_BURST(ETH_InitStruct->ETH_FixedBurst)); - assert_param(IS_ETH_RXDMA_BURST_LENGTH(ETH_InitStruct->ETH_RxDMABurstLength)); - assert_param(IS_ETH_TXDMA_BURST_LENGTH(ETH_InitStruct->ETH_TxDMABurstLength)); - assert_param(IS_ETH_DMA_DESC_SKIP_LENGTH(ETH_InitStruct->ETH_DescriptorSkipLength)); - assert_param(IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(ETH_InitStruct->ETH_DMAArbitration)); - /*-------------------------------- MAC Config ------------------------------*/ - /*---------------------- ETHERNET MACMIIAR Configuration -------------------*/ - /* Get the ETHERNET MACMIIAR value */ - tmpreg = ETH->MACMIIAR; - /* Clear CSR Clock Range CR[2:0] bits */ - tmpreg &= MACMIIAR_CR_Mask; - /* Get hclk frequency value */ - RCC_GetClocksFreq(&rcc_clocks); - hclk = rcc_clocks.HCLK_Frequency; - /* Set CR bits depending on hclk value */ - if((hclk >= 20000000)&&(hclk < 35000000)) - { - /* CSR Clock Range between 20-35 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16; - } - else if((hclk >= 35000000)&&(hclk < 60000000)) - { - /* CSR Clock Range between 35-60 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26; - } - else if((hclk >= 60000000)&&(hclk <= 100000000)) - { - /* CSR Clock Range between 60-100 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42; - } - else /*if((hclk >= 100000000)&&(hclk <= 120000000)) */ - { - /* CSR Clock Range between 100-120 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62; - } - /* Write to ETHERNET MAC MIIAR: Configure the ETHERNET CSR Clock Range */ - ETH->MACMIIAR = (uint32_t)tmpreg; - /*-------------------- PHY initialization and configuration ----------------*/ - /* Put the PHY in reset mode */ - if(!(ETH_WritePHYRegister(PHYAddress, PHY_BCR, PHY_Reset))) - { - /* Return ERROR in case of write timeout */ - return ETH_ERROR; - } - - /* Delay to assure PHY reset */ - for(i = PHY_ResetDelay; i != 0; i--) - { - } - - if(ETH_InitStruct->ETH_AutoNegotiation != ETH_AutoNegotiation_Disable) - { - /* We wait for linked satus... */ - do - { - timeout++; - } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_READ_TO) - { - return ETH_ERROR; - } - /* Reset Timeout counter */ - timeout = 0; - - /* Enable Auto-Negotiation */ - if(!(ETH_WritePHYRegister(PHYAddress, PHY_BCR, PHY_AutoNegotiation))) - { - /* Return ERROR in case of write timeout */ - return ETH_ERROR; - } - - /* Wait until the autonegotiation will be completed */ - do - { - timeout++; - } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_AutoNego_Complete) && (timeout < (uint32_t)PHY_READ_TO)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_READ_TO) - { - return ETH_ERROR; - } - /* Reset Timeout counter */ - timeout = 0; - - /* Read the result of the autonegotiation */ - RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_SR); - - /* Configure the MAC with the Duplex Mode fixed by the autonegotiation process */ - if((RegValue & PHY_Duplex_Status) != (uint32_t)RESET) - { - /* Set Ethernet duplex mode to FullDuplex following the autonegotiation */ - ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex; - - } - else - { - /* Set Ethernet duplex mode to HalfDuplex following the autonegotiation */ - ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex; - } - /* Configure the MAC with the speed fixed by the autonegotiation process */ - if(RegValue & PHY_Speed_Status) - { - /* Set Ethernet speed to 10M following the autonegotiation */ - ETH_InitStruct->ETH_Speed = ETH_Speed_10M; - } - else - { - /* Set Ethernet speed to 100M following the autonegotiation */ - ETH_InitStruct->ETH_Speed = ETH_Speed_100M; - } - } - else - { - if(!ETH_WritePHYRegister(PHYAddress, PHY_BCR, ((uint16_t)(ETH_InitStruct->ETH_Mode >> 3) | - (uint16_t)(ETH_InitStruct->ETH_Speed >> 1)))) - { - /* Return ERROR in case of write timeout */ - return ETH_ERROR; - } - /* Delay to assure PHY configuration */ - for(i = PHY_ConfigDelay; i != 0; i--) - { - } - } - /*------------------------ ETHERNET MACCR Configuration --------------------*/ - /* Get the ETHERNET MACCR value */ - tmpreg = ETH->MACCR; - /* Clear WD, PCE, PS, TE and RE bits */ - tmpreg &= MACCR_CLEAR_Mask; - /* Set the WD bit according to ETH_Watchdog value */ - /* Set the JD: bit according to ETH_Jabber value */ - /* Set the IFG bit according to ETH_InterFrameGap value */ - /* Set the DCRS bit according to ETH_CarrierSense value */ - /* Set the FES bit according to ETH_Speed value */ - /* Set the DO bit according to ETH_ReceiveOwn value */ - /* Set the LM bit according to ETH_LoopbackMode value */ - /* Set the DM bit according to ETH_Mode value */ - /* Set the IPC bit according to ETH_ChecksumOffload value */ - /* Set the DR bit according to ETH_RetryTransmission value */ - /* Set the ACS bit according to ETH_AutomaticPadCRCStrip value */ - /* Set the BL bit according to ETH_BackOffLimit value */ - /* Set the DC bit according to ETH_DeferralCheck value */ - tmpreg |= (uint32_t)(ETH_InitStruct->ETH_Watchdog | - ETH_InitStruct->ETH_Jabber | - ETH_InitStruct->ETH_InterFrameGap | - ETH_InitStruct->ETH_CarrierSense | - ETH_InitStruct->ETH_Speed | - ETH_InitStruct->ETH_ReceiveOwn | - ETH_InitStruct->ETH_LoopbackMode | - ETH_InitStruct->ETH_Mode | - ETH_InitStruct->ETH_ChecksumOffload | - ETH_InitStruct->ETH_RetryTransmission | - ETH_InitStruct->ETH_AutomaticPadCRCStrip | - ETH_InitStruct->ETH_BackOffLimit | - ETH_InitStruct->ETH_DeferralCheck); - /* Write to ETHERNET MACCR */ - ETH->MACCR = (uint32_t)tmpreg; - - /*----------------------- ETHERNET MACFFR Configuration --------------------*/ - /* Set the RA bit according to ETH_ReceiveAll value */ - /* Set the SAF and SAIF bits according to ETH_SourceAddrFilter value */ - /* Set the PCF bit according to ETH_PassControlFrames value */ - /* Set the DBF bit according to ETH_BroadcastFramesReception value */ - /* Set the DAIF bit according to ETH_DestinationAddrFilter value */ - /* Set the PR bit according to ETH_PromiscuousMode value */ - /* Set the PM, HMC and HPF bits according to ETH_MulticastFramesFilter value */ - /* Set the HUC and HPF bits according to ETH_UnicastFramesFilter value */ - /* Write to ETHERNET MACFFR */ - ETH->MACFFR = (uint32_t)(ETH_InitStruct->ETH_ReceiveAll | - ETH_InitStruct->ETH_SourceAddrFilter | - ETH_InitStruct->ETH_PassControlFrames | - ETH_InitStruct->ETH_BroadcastFramesReception | - ETH_InitStruct->ETH_DestinationAddrFilter | - ETH_InitStruct->ETH_PromiscuousMode | - ETH_InitStruct->ETH_MulticastFramesFilter | - ETH_InitStruct->ETH_UnicastFramesFilter); - /*--------------- ETHERNET MACHTHR and MACHTLR Configuration ---------------*/ - /* Write to ETHERNET MACHTHR */ - ETH->MACHTHR = (uint32_t)ETH_InitStruct->ETH_HashTableHigh; - /* Write to ETHERNET MACHTLR */ - ETH->MACHTLR = (uint32_t)ETH_InitStruct->ETH_HashTableLow; - /*----------------------- ETHERNET MACFCR Configuration --------------------*/ - /* Get the ETHERNET MACFCR value */ - tmpreg = ETH->MACFCR; - /* Clear xx bits */ - tmpreg &= MACFCR_CLEAR_Mask; - - /* Set the PT bit according to ETH_PauseTime value */ - /* Set the DZPQ bit according to ETH_ZeroQuantaPause value */ - /* Set the PLT bit according to ETH_PauseLowThreshold value */ - /* Set the UP bit according to ETH_UnicastPauseFrameDetect value */ - /* Set the RFE bit according to ETH_ReceiveFlowControl value */ - /* Set the TFE bit according to ETH_TransmitFlowControl value */ - tmpreg |= (uint32_t)((ETH_InitStruct->ETH_PauseTime << 16) | - ETH_InitStruct->ETH_ZeroQuantaPause | - ETH_InitStruct->ETH_PauseLowThreshold | - ETH_InitStruct->ETH_UnicastPauseFrameDetect | - ETH_InitStruct->ETH_ReceiveFlowControl | - ETH_InitStruct->ETH_TransmitFlowControl); - /* Write to ETHERNET MACFCR */ - ETH->MACFCR = (uint32_t)tmpreg; - /*----------------------- ETHERNET MACVLANTR Configuration -----------------*/ - /* Set the ETV bit according to ETH_VLANTagComparison value */ - /* Set the VL bit according to ETH_VLANTagIdentifier value */ - ETH->MACVLANTR = (uint32_t)(ETH_InitStruct->ETH_VLANTagComparison | - ETH_InitStruct->ETH_VLANTagIdentifier); - - /*-------------------------------- DMA Config ------------------------------*/ - /*----------------------- ETHERNET DMAOMR Configuration --------------------*/ - /* Get the ETHERNET DMAOMR value */ - tmpreg = ETH->DMAOMR; - /* Clear xx bits */ - tmpreg &= DMAOMR_CLEAR_Mask; - - /* Set the DT bit according to ETH_DropTCPIPChecksumErrorFrame value */ - /* Set the RSF bit according to ETH_ReceiveStoreForward value */ - /* Set the DFF bit according to ETH_FlushReceivedFrame value */ - /* Set the TSF bit according to ETH_TransmitStoreForward value */ - /* Set the TTC bit according to ETH_TransmitThresholdControl value */ - /* Set the FEF bit according to ETH_ForwardErrorFrames value */ - /* Set the FUF bit according to ETH_ForwardUndersizedGoodFrames value */ - /* Set the RTC bit according to ETH_ReceiveThresholdControl value */ - /* Set the OSF bit according to ETH_SecondFrameOperate value */ - tmpreg |= (uint32_t)(ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame | - ETH_InitStruct->ETH_ReceiveStoreForward | - ETH_InitStruct->ETH_FlushReceivedFrame | - ETH_InitStruct->ETH_TransmitStoreForward | - ETH_InitStruct->ETH_TransmitThresholdControl | - ETH_InitStruct->ETH_ForwardErrorFrames | - ETH_InitStruct->ETH_ForwardUndersizedGoodFrames | - ETH_InitStruct->ETH_ReceiveThresholdControl | - ETH_InitStruct->ETH_SecondFrameOperate); - /* Write to ETHERNET DMAOMR */ - ETH->DMAOMR = (uint32_t)tmpreg; - - /*----------------------- ETHERNET DMABMR Configuration --------------------*/ - /* Set the AAL bit according to ETH_AddressAlignedBeats value */ - /* Set the FB bit according to ETH_FixedBurst value */ - /* Set the RPBL and 4*PBL bits according to ETH_RxDMABurstLength value */ - /* Set the PBL and 4*PBL bits according to ETH_TxDMABurstLength value */ - /* Set the DSL bit according to ETH_DesciptorSkipLength value */ - /* Set the PR and DA bits according to ETH_DMAArbitration value */ - ETH->DMABMR = (uint32_t)(ETH_InitStruct->ETH_AddressAlignedBeats | - ETH_InitStruct->ETH_FixedBurst | - ETH_InitStruct->ETH_RxDMABurstLength | /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */ - ETH_InitStruct->ETH_TxDMABurstLength | - (ETH_InitStruct->ETH_DescriptorSkipLength << 2) | - ETH_InitStruct->ETH_DMAArbitration | - ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */ - /* Return Ethernet configuration success */ - return ETH_SUCCESS; -} - -/** - * @brief Fills each ETH_InitStruct member with its default value. - * @param ETH_InitStruct: pointer to a ETH_InitTypeDef structure - * which will be initialized. - * @retval : None - */ -void ETH_StructInit(ETH_InitTypeDef* ETH_InitStruct) -{ - /* ETH_InitStruct members default value */ - /*------------------------ MAC -----------------------------------*/ - ETH_InitStruct->ETH_AutoNegotiation = ETH_AutoNegotiation_Disable; - ETH_InitStruct->ETH_Watchdog = ETH_Watchdog_Enable; - ETH_InitStruct->ETH_Jabber = ETH_Jabber_Enable; - ETH_InitStruct->ETH_InterFrameGap = ETH_InterFrameGap_96Bit; - ETH_InitStruct->ETH_CarrierSense = ETH_CarrierSense_Enable; - ETH_InitStruct->ETH_Speed = ETH_Speed_10M; - ETH_InitStruct->ETH_ReceiveOwn = ETH_ReceiveOwn_Enable; - ETH_InitStruct->ETH_LoopbackMode = ETH_LoopbackMode_Disable; - ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex; - ETH_InitStruct->ETH_ChecksumOffload = ETH_ChecksumOffload_Disable; - ETH_InitStruct->ETH_RetryTransmission = ETH_RetryTransmission_Enable; - ETH_InitStruct->ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable; - ETH_InitStruct->ETH_BackOffLimit = ETH_BackOffLimit_10; - ETH_InitStruct->ETH_DeferralCheck = ETH_DeferralCheck_Disable; - ETH_InitStruct->ETH_ReceiveAll = ETH_ReceiveAll_Disable; - ETH_InitStruct->ETH_SourceAddrFilter = ETH_SourceAddrFilter_Disable; - ETH_InitStruct->ETH_PassControlFrames = ETH_PassControlFrames_BlockAll; - ETH_InitStruct->ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Disable; - ETH_InitStruct->ETH_DestinationAddrFilter = ETH_DestinationAddrFilter_Normal; - ETH_InitStruct->ETH_PromiscuousMode = ETH_PromiscuousMode_Disable; - ETH_InitStruct->ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect; - ETH_InitStruct->ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect; - ETH_InitStruct->ETH_HashTableHigh = 0x0; - ETH_InitStruct->ETH_HashTableLow = 0x0; - ETH_InitStruct->ETH_PauseTime = 0x0; - ETH_InitStruct->ETH_ZeroQuantaPause = ETH_ZeroQuantaPause_Disable; - ETH_InitStruct->ETH_PauseLowThreshold = ETH_PauseLowThreshold_Minus4; - ETH_InitStruct->ETH_UnicastPauseFrameDetect = ETH_UnicastPauseFrameDetect_Disable; - ETH_InitStruct->ETH_ReceiveFlowControl = ETH_ReceiveFlowControl_Disable; - ETH_InitStruct->ETH_TransmitFlowControl = ETH_TransmitFlowControl_Disable; - ETH_InitStruct->ETH_VLANTagComparison = ETH_VLANTagComparison_16Bit; - ETH_InitStruct->ETH_VLANTagIdentifier = 0x0; - /*------------------------ DMA -----------------------------------*/ - ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Disable; - ETH_InitStruct->ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable; - ETH_InitStruct->ETH_FlushReceivedFrame = ETH_FlushReceivedFrame_Disable; - ETH_InitStruct->ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable; - ETH_InitStruct->ETH_TransmitThresholdControl = ETH_TransmitThresholdControl_64Bytes; - ETH_InitStruct->ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable; - ETH_InitStruct->ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable; - ETH_InitStruct->ETH_ReceiveThresholdControl = ETH_ReceiveThresholdControl_64Bytes; - ETH_InitStruct->ETH_SecondFrameOperate = ETH_SecondFrameOperate_Disable; - ETH_InitStruct->ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable; - ETH_InitStruct->ETH_FixedBurst = ETH_FixedBurst_Disable; - ETH_InitStruct->ETH_RxDMABurstLength = ETH_RxDMABurstLength_1Beat; - ETH_InitStruct->ETH_TxDMABurstLength = ETH_TxDMABurstLength_1Beat; - ETH_InitStruct->ETH_DescriptorSkipLength = 0x0; - ETH_InitStruct->ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_1_1; -} - -/** - * @brief Enables ENET MAC and DMA reception/transmission - * @param None - * @retval : None - */ -void ETH_Start(void) -{ - /* Enable transmit state machine of the MAC for transmission on the MII */ - ETH_MACTransmissionCmd(ENABLE); - /* Flush Transmit FIFO */ - ETH_FlushTransmitFIFO(); - /* Enable receive state machine of the MAC for reception from the MII */ - ETH_MACReceptionCmd(ENABLE); - - /* Start DMA transmission */ - ETH_DMATransmissionCmd(ENABLE); - /* Start DMA reception */ - ETH_DMAReceptionCmd(ENABLE); -} - -/** - * @brief Transmits a packet, from application buffer, pointed by ppkt. - * @param ppkt: pointer to application packet buffer to transmit. - * @param FrameLength: Tx Packet size. - * @retval : ETH_ERROR: in case of Tx desc owned by DMA - * ETH_SUCCESS: for correct transmission - */ -uint32_t ETH_HandleTxPkt(uint8_t *ppkt, uint16_t FrameLength) -{ - uint32_t offset = 0; - - /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */ - if((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (uint32_t)RESET) - { - /* Return ERROR: OWN bit set */ - return ETH_ERROR; - } - - /* Copy the frame to be sent into memory pointed by the current ETHERNET DMA Tx descriptor */ - for(offset=0; offsetBuffer1Addr) + offset)) = (*(ppkt + offset)); - } - - /* Setting the Frame Length: bits[12:0] */ - DMATxDescToSet->ControlBufferSize = (FrameLength & ETH_DMATxDesc_TBS1); - /* Setting the last segment and first segment bits (in this case a frame is transmitted in one descriptor) */ - DMATxDescToSet->Status |= ETH_DMATxDesc_LS | ETH_DMATxDesc_FS; - /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMATxDescToSet->Status |= ETH_DMATxDesc_OWN; - /* When Tx Buffer unavailable flag is set: clear it and resume transmission */ - if ((ETH->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET) - { - /* Clear TBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_TBUS; - /* Resume DMA transmission*/ - ETH->DMATPDR = 0; - } - - /* Update the ETHERNET DMA global Tx descriptor with next Tx decriptor */ - /* Chained Mode */ - if((DMATxDescToSet->Status & ETH_DMATxDesc_TCH) != (uint32_t)RESET) - { - /* Selects the next DMA Tx descriptor list for next buffer to send */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) (DMATxDescToSet->Buffer2NextDescAddr); - } - else /* Ring Mode */ - { - if((DMATxDescToSet->Status & ETH_DMATxDesc_TER) != (uint32_t)RESET) - { - /* Selects the first DMA Tx descriptor for next buffer to send: last Tx descriptor was used */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) (ETH->DMATDLAR); - } - else - { - /* Selects the next DMA Tx descriptor list for next buffer to send */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) ((uint32_t)DMATxDescToSet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } - /* Return SUCCESS */ - return ETH_SUCCESS; -} - -/** - * @brief Receives a packet and copies it to memory pointed by ppkt. - * @param ppkt: pointer to application packet receive buffer. - * @retval : ETH_ERROR: if there is error in reception - * framelength: received packet size if packet reception is correct - */ -uint32_t ETH_HandleRxPkt(uint8_t *ppkt) -{ - uint32_t offset = 0, framelength = 0; - /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */ - if((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) != (uint32_t)RESET) - { - /* Return error: OWN bit set */ - return ETH_ERROR; - } - - if(((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)) - { - /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */ - framelength = ((DMARxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARxDesc_FrameLengthShift) - 4; - /* Copy the received frame into buffer from memory pointed by the current ETHERNET DMA Rx descriptor */ - for(offset=0; offsetBuffer1Addr) + offset)); - } - } - else - { - /* Return ERROR */ - framelength = ETH_ERROR; - } - /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMARxDescToGet->Status = ETH_DMARxDesc_OWN; - - /* When Rx Buffer unavailable flag is set: clear it and resume reception */ - if ((ETH->DMASR & ETH_DMASR_RBUS) != (uint32_t)RESET) - { - /* Clear RBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_RBUS; - /* Resume DMA reception */ - ETH->DMARPDR = 0; - } - - /* Update the ETHERNET DMA global Rx descriptor with next Rx decriptor */ - /* Chained Mode */ - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET) - { - /* Selects the next DMA Rx descriptor list for next buffer to read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr); - } - else /* Ring Mode */ - { - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET) - { - /* Selects the first DMA Rx descriptor for next buffer to read: last Rx descriptor was used */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR); - } - else - { - /* Selects the next DMA Rx descriptor list for next buffer to read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMARxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } - - /* Return Frame Length/ERROR */ - return (framelength); -} - -/** - * @brief Get the size of received the received packet. - * @param None - * @retval : framelength: received packet size - */ -uint32_t ETH_GetRxPktSize(void) -{ - uint32_t frameLength = 0; - if(((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)) - { - /* Get the size of the packet: including 4 bytes of the CRC */ - frameLength = ETH_GetDMARxDescFrameLength(DMARxDescToGet); - } - - /* Return Frame Length */ - return frameLength; -} - -/** - * @brief Drop a Received packet (too small packet, etc...) - * @param None - * @retval : None - */ -void ETH_DropRxPkt(void) -{ - /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMARxDescToGet->Status = ETH_DMARxDesc_OWN; - /* Chained Mode */ - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET) - { - /* Selects the next DMA Rx descriptor list for next buffer read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr); - } - else /* Ring Mode */ - { - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET) - { - /* Selects the next DMA Rx descriptor list for next buffer read: this will - be the first Rx descriptor in this case */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR); - } - else - { - /* Selects the next DMA Rx descriptor list for next buffer read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMARxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } -} - -/*--------------------------------- PHY ------------------------------------*/ -/** - * @brief Read a PHY register - * @param PHYAddress: PHY device address, is the index of one of supported - * 32 PHY devices. - * This parameter can be one of the following values: 0,..,31 - * @param PHYReg: PHY register address, is the index of one of the 32 - * PHY register. - * This parameter can be one of the following values: - * @arg PHY_BCR : Tranceiver Basic Control Register - * @arg PHY_BSR : Tranceiver Basic Status Register - * @arg PHY_SR : Tranceiver Status Register - * @arg More PHY register could be read depending on the used PHY - * @retval : ETH_ERROR: in case of timeout - * MAC MIIDR register value: Data read from the selected PHY register (correct read ) - */ -uint16_t ETH_ReadPHYRegister(uint16_t PHYAddress, uint16_t PHYReg) -{ - uint32_t tmpreg = 0; -__IO uint32_t timeout = 0; - /* Check the parameters */ - assert_param(IS_ETH_PHY_ADDRESS(PHYAddress)); - assert_param(IS_ETH_PHY_REG(PHYReg)); - - /* Get the ETHERNET MACMIIAR value */ - tmpreg = ETH->MACMIIAR; - /* Keep only the CSR Clock Range CR[2:0] bits value */ - tmpreg &= ~MACMIIAR_CR_Mask; - /* Prepare the MII address register value */ - tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */ - tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */ - tmpreg &= ~ETH_MACMIIAR_MW; /* Set the read mode */ - tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ - /* Write the result value into the MII Address register */ - ETH->MACMIIAR = tmpreg; - /* Check for the Busy flag */ - do - { - timeout++; - tmpreg = ETH->MACMIIAR; - } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_READ_TO) - { - return (uint16_t)ETH_ERROR; - } - - /* Return data register value */ - return (uint16_t)(ETH->MACMIIDR); -} - -/** - * @brief Write to a PHY register - * @param PHYAddress: PHY device address, is the index of one of supported - * 32 PHY devices. - * This parameter can be one of the following values: 0,..,31 - * @param PHYReg: PHY register address, is the index of one of the 32 - * PHY register. - * This parameter can be one of the following values: - * @arg PHY_BCR : Tranceiver Control Register - * @arg More PHY register could be written depending on the used PHY - * @param PHYValue: the value to write - * @retval : ETH_ERROR: in case of timeout - * ETH_SUCCESS: for correct write - */ -uint32_t ETH_WritePHYRegister(uint16_t PHYAddress, uint16_t PHYReg, uint16_t PHYValue) -{ - uint32_t tmpreg = 0; - __IO uint32_t timeout = 0; - /* Check the parameters */ - assert_param(IS_ETH_PHY_ADDRESS(PHYAddress)); - assert_param(IS_ETH_PHY_REG(PHYReg)); - - /* Get the ETHERNET MACMIIAR value */ - tmpreg = ETH->MACMIIAR; - /* Keep only the CSR Clock Range CR[2:0] bits value */ - tmpreg &= ~MACMIIAR_CR_Mask; - /* Prepare the MII register address value */ - tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */ - tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */ - tmpreg |= ETH_MACMIIAR_MW; /* Set the write mode */ - tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ - /* Give the value to the MII data register */ - ETH->MACMIIDR = PHYValue; - /* Write the result value into the MII Address register */ - ETH->MACMIIAR = tmpreg; - /* Check for the Busy flag */ - do - { - timeout++; - tmpreg = ETH->MACMIIAR; - } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_WRITE_TO)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_WRITE_TO) - { - return ETH_ERROR; - } - - /* Return SUCCESS */ - return ETH_SUCCESS; -} - -/** - * @brief Enables or disables the PHY loopBack mode. - * @param PHYAddress: PHY device address, is the index of one of supported - * 32 PHY devices. - * This parameter can be one of the following values: - * @param NewState: new state of the PHY loopBack mode. - * This parameter can be: ENABLE or DISABLE. - * Note: Don't be confused with ETH_MACLoopBackCmd function - * which enables internal loopback at MII level - * @retval : ETH_ERROR: in case of bad PHY configuration - * ETH_SUCCESS: for correct PHY configuration - */ -uint32_t ETH_PHYLoopBackCmd(uint16_t PHYAddress, FunctionalState NewState) -{ - uint16_t tmpreg = 0; - /* Check the parameters */ - assert_param(IS_ETH_PHY_ADDRESS(PHYAddress)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Get the PHY configuration to update it */ - tmpreg = ETH_ReadPHYRegister(PHYAddress, PHY_BCR); - - if (NewState != DISABLE) - { - /* Enable the PHY loopback mode */ - tmpreg |= PHY_Loopback; - } - else - { - /* Disable the PHY loopback mode: normal mode */ - tmpreg &= (uint16_t)(~(uint16_t)PHY_Loopback); - } - /* Update the PHY control register with the new configuration */ - if(ETH_WritePHYRegister(PHYAddress, PHY_BCR, tmpreg) != (uint32_t)RESET) - { - return ETH_SUCCESS; - } - else - { - /* Return SUCCESS */ - return ETH_ERROR; - } -} - -/*--------------------------------- MAC ------------------------------------*/ -/** - * @brief Enables or disables the MAC transmission. - * @param NewState: new state of the MAC transmission. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MACTransmissionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC transmission */ - ETH->MACCR |= ETH_MACCR_TE; - } - else - { - /* Disable the MAC transmission */ - ETH->MACCR &= ~ETH_MACCR_TE; - } -} - -/** - * @brief Enables or disables the MAC reception. - * @param NewState: new state of the MAC reception. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MACReceptionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC reception */ - ETH->MACCR |= ETH_MACCR_RE; - } - else - { - /* Disable the MAC reception */ - ETH->MACCR &= ~ETH_MACCR_RE; - } -} - -/** - * @brief Checks whether the ETHERNET flow control busy bit is set or not. - * @param None - * @retval : The new state of flow control busy status bit (SET or RESET). - */ -FlagStatus ETH_GetFlowControlBusyStatus(void) -{ - FlagStatus bitstatus = RESET; - /* The Flow Control register should not be written to until this bit is cleared */ - if ((ETH->MACFCR & ETH_MACFCR_FCBBPA) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Initiate a Pause Control Frame (Full-duplex only). - * @param None - * @retval : None - */ -void ETH_InitiatePauseControlFrame(void) -{ - /* When Set In full duplex MAC initiates pause control frame */ - ETH->MACFCR |= ETH_MACFCR_FCBBPA; -} - -/** - * @brief Enables or disables the MAC BackPressure operation activation (Half-duplex only). - * @param NewState: new state of the MAC BackPressure operation activation. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_BackPressureActivationCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Activate the MAC BackPressure operation */ - /* In Half duplex: during backpressure, when the MAC receives a new frame, - the transmitter starts sending a JAM pattern resulting in a collision */ - ETH->MACFCR |= ETH_MACFCR_FCBBPA; - } - else - { - /* Desactivate the MAC BackPressure operation */ - ETH->MACFCR &= ~ETH_MACFCR_FCBBPA; - } -} - -/** - * @brief Checks whether the specified ETHERNET MAC flag is set or not. - * @param ETH_MAC_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_MAC_FLAG_TST : Time stamp trigger flag - * @arg ETH_MAC_FLAG_MMCT : MMC transmit flag - * @arg ETH_MAC_FLAG_MMCR : MMC receive flag - * @arg ETH_MAC_FLAG_MMC : MMC flag - * @arg ETH_MAC_FLAG_PMT : PMT flag - * @retval : The new state of ETHERNET MAC flag (SET or RESET). - */ -FlagStatus ETH_GetMACFlagStatus(uint32_t ETH_MAC_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_MAC_GET_FLAG(ETH_MAC_FLAG)); - if ((ETH->MACSR & ETH_MAC_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Checks whether the specified ETHERNET MAC interrupt has occurred or not. - * @param ETH_MAC_IT: specifies the interrupt source to check. - * This parameter can be one of the following values: - * @arg ETH_MAC_IT_TST : Time stamp trigger interrupt - * @arg ETH_MAC_IT_MMCT : MMC transmit interrupt - * @arg ETH_MAC_IT_MMCR : MMC receive interrupt - * @arg ETH_MAC_IT_MMC : MMC interrupt - * @arg ETH_MAC_IT_PMT : PMT interrupt - * @retval : The new state of ETHERNET MAC interrupt (SET or RESET). - */ -ITStatus ETH_GetMACITStatus(uint32_t ETH_MAC_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_MAC_GET_IT(ETH_MAC_IT)); - if ((ETH->MACSR & ETH_MAC_IT) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Enables or disables the specified ETHERNET MAC interrupts. - * @param ETH_MAC_IT: specifies the ETHERNET MAC interrupt sources to be - * enabled or disabled. - * This parameter can be any combination of the following values: - * @arg ETH_MAC_IT_TST : Time stamp trigger interrupt - * @arg ETH_MAC_IT_PMT : PMT interrupt - * @param NewState: new state of the specified ETHERNET MAC interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MACITConfig(uint32_t ETH_MAC_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ETH_MAC_IT(ETH_MAC_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET MAC interrupts */ - ETH->MACIMR &= (~(uint32_t)ETH_MAC_IT); - } - else - { - /* Disable the selected ETHERNET MAC interrupts */ - ETH->MACIMR |= ETH_MAC_IT; - } -} - -/** - * @brief Configures the selected MAC address. - * @param MacAddr: The MAC addres to configure. - * This parameter can be one of the following values: - * @arg ETH_MAC_Address0 : MAC Address0 - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param Addr: Pointer on MAC address buffer data (6 bytes). - * @retval : None - */ -void ETH_MACAddressConfig(uint32_t MacAddr, uint8_t *Addr) -{ - uint32_t tmpreg; - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS0123(MacAddr)); - - /* Calculate the selectecd MAC address high register */ - tmpreg = ((uint32_t)Addr[5] << 8) | (uint32_t)Addr[4]; - /* Load the selectecd MAC address high register */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) = tmpreg; - /* Calculate the selectecd MAC address low register */ - tmpreg = ((uint32_t)Addr[3] << 24) | ((uint32_t)Addr[2] << 16) | ((uint32_t)Addr[1] << 8) | Addr[0]; - - /* Load the selectecd MAC address low register */ - (*(__IO uint32_t *) (ETH_MAC_AddrLowBase + MacAddr)) = tmpreg; -} - -/** - * @brief Get the selected MAC address. - * @param MacAddr: The MAC addres to return. - * This parameter can be one of the following values: - * @arg ETH_MAC_Address0 : MAC Address0 - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param Addr: Pointer on MAC address buffer data (6 bytes). - * @retval : None - */ -void ETH_GetMACAddress(uint32_t MacAddr, uint8_t *Addr) -{ - uint32_t tmpreg; - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS0123(MacAddr)); - - /* Get the selectecd MAC address high register */ - tmpreg =(*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)); - - /* Calculate the selectecd MAC address buffer */ - Addr[5] = ((tmpreg >> 8) & (uint8_t)0xFF); - Addr[4] = (tmpreg & (uint8_t)0xFF); - /* Load the selectecd MAC address low register */ - tmpreg =(*(__IO uint32_t *) (ETH_MAC_AddrLowBase + MacAddr)); - /* Calculate the selectecd MAC address buffer */ - Addr[3] = ((tmpreg >> 24) & (uint8_t)0xFF); - Addr[2] = ((tmpreg >> 16) & (uint8_t)0xFF); - Addr[1] = ((tmpreg >> 8 ) & (uint8_t)0xFF); - Addr[0] = (tmpreg & (uint8_t)0xFF); -} - -/** - * @brief Enables or disables the Address filter module uses the specified - * ETHERNET MAC address for perfect filtering - * @param MacAddr: specifies the ETHERNET MAC address to be used for prfect filtering. - * This parameter can be one of the following values: - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param NewState: new state of the specified ETHERNET MAC address use. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MACAddressPerfectFilterCmd(uint32_t MacAddr, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS123(MacAddr)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET MAC address for perfect filtering */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) |= ETH_MACA1HR_AE; - } - else - { - /* Disable the selected ETHERNET MAC address for perfect filtering */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) &=(~(uint32_t)ETH_MACA1HR_AE); - } -} - -/** - * @brief Set the filter type for the specified ETHERNET MAC address - * @param MacAddr: specifies the ETHERNET MAC address - * This parameter can be one of the following values: - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param Filter: specifies the used frame received field for comparaison - * This parameter can be one of the following values: - * @arg ETH_MAC_AddressFilter_SA : MAC Address is used to compare - * with the SA fields of the received frame. - * @arg ETH_MAC_AddressFilter_DA : MAC Address is used to compare - * with the DA fields of the received frame. - * @retval : None - */ -void ETH_MACAddressFilterConfig(uint32_t MacAddr, uint32_t Filter) -{ - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS123(MacAddr)); - assert_param(IS_ETH_MAC_ADDRESS_FILTER(Filter)); - - if (Filter != ETH_MAC_AddressFilter_DA) - { - /* The selected ETHERNET MAC address is used to compare with the SA fields of the - received frame. */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) |= ETH_MACA1HR_SA; - } - else - { - /* The selected ETHERNET MAC address is used to compare with the DA fields of the - received frame. */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) &=(~(uint32_t)ETH_MACA1HR_SA); - } -} - -/** - * @brief Set the filter type for the specified ETHERNET MAC address - * @param MacAddr: specifies the ETHERNET MAC address - * This parameter can be one of the following values: - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param MaskByte: specifies the used address bytes for comparaison - * This parameter can be any combination of the following values: - * @arg ETH_MAC_AddressMask_Byte6 : Mask MAC Address high reg bits [15:8]. - * @arg ETH_MAC_AddressMask_Byte5 : Mask MAC Address high reg bits [7:0]. - * @arg ETH_MAC_AddressMask_Byte4 : Mask MAC Address low reg bits [31:24]. - * @arg ETH_MAC_AddressMask_Byte3 : Mask MAC Address low reg bits [23:16]. - * @arg ETH_MAC_AddressMask_Byte2 : Mask MAC Address low reg bits [15:8]. - * @arg ETH_MAC_AddressMask_Byte1 : Mask MAC Address low reg bits [7:0]. - * @retval : None - */ -void ETH_MACAddressMaskBytesFilterConfig(uint32_t MacAddr, uint32_t MaskByte) -{ - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS123(MacAddr)); - assert_param(IS_ETH_MAC_ADDRESS_MASK(MaskByte)); - - /* Clear MBC bits in the selected MAC address high register */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) &=(~(uint32_t)ETH_MACA1HR_MBC); - /* Set the selected Filetr mask bytes */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) |= MaskByte; -} -/*------------------------ DMA Tx/Rx Desciptors -----------------------------*/ - -/** - * @brief Initializes the DMA Tx descriptors in chain mode. - * @param DMATxDescTab: Pointer on the first Tx desc list - * @param TxBuff: Pointer on the first TxBuffer list - * @param TxBuffCount: Number of the used Tx desc in the list - * @retval : None - */ -void ETH_DMATxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMATxDesc; - - /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */ - DMATxDescToSet = DMATxDescTab; - /* Fill each DMATxDesc descriptor with the right values */ - for(i=0; i < TxBuffCount; i++) - { - /* Get the pointer on the ith member of the Tx Desc list */ - DMATxDesc = DMATxDescTab + i; - /* Set Second Address Chained bit */ - DMATxDesc->Status = ETH_DMATxDesc_TCH; - - /* Set Buffer1 address pointer */ - DMATxDesc->Buffer1Addr = (uint32_t)(&TxBuff[i*ETH_MAX_PACKET_SIZE]); - - /* Initialize the next descriptor with the Next Desciptor Polling Enable */ - if(i < (TxBuffCount-1)) - { - /* Set next descriptor address register with next descriptor base address */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t)(DMATxDescTab+i+1); - } - else - { - /* For last descriptor, set next descriptor address register equal to the first descriptor base address */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t) DMATxDescTab; - } - } - - /* Set Transmit Desciptor List Address Register */ - ETH->DMATDLAR = (uint32_t) DMATxDescTab; -} - -/** - * @brief Initializes the DMA Tx descriptors in ring mode. - * @param DMATxDescTab: Pointer on the first Tx desc list - * @param TxBuff1: Pointer on the first TxBuffer1 list - * @param TxBuff2: Pointer on the first TxBuffer2 list - * @param TxBuffCount: Number of the used Tx desc in the list - * Note: see decriptor skip length defined in ETH_DMA_InitStruct - * for the number of Words to skip between two unchained descriptors. - * @retval : None - */ -void ETH_DMATxDescRingInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t *TxBuff1, uint8_t *TxBuff2, uint32_t TxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMATxDesc; - - /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */ - DMATxDescToSet = DMATxDescTab; - /* Fill each DMATxDesc descriptor with the right values */ - for(i=0; i < TxBuffCount; i++) - { - /* Get the pointer on the ith member of the Tx Desc list */ - DMATxDesc = DMATxDescTab + i; - /* Set Buffer1 address pointer */ - DMATxDesc->Buffer1Addr = (uint32_t)(&TxBuff1[i*ETH_MAX_PACKET_SIZE]); - - /* Set Buffer2 address pointer */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t)(&TxBuff2[i*ETH_MAX_PACKET_SIZE]); - - /* Set Transmit End of Ring bit for last descriptor: The DMA returns to the base - address of the list, creating a Desciptor Ring */ - if(i == (TxBuffCount-1)) - { - /* Set Transmit End of Ring bit */ - DMATxDesc->Status = ETH_DMATxDesc_TER; - } - } - - /* Set Transmit Desciptor List Address Register */ - ETH->DMATDLAR = (uint32_t) DMATxDescTab; -} - -/** - * @brief Checks whether the specified ETHERNET DMA Tx Desc flag is set or not. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param ETH_DMATxDescFlag: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_DMATxDesc_OWN : OWN bit: descriptor is owned by DMA engine - * @arg ETH_DMATxDesc_IC : Interrupt on completetion - * @arg ETH_DMATxDesc_LS : Last Segment - * @arg ETH_DMATxDesc_FS : First Segment - * @arg ETH_DMATxDesc_DC : Disable CRC - * @arg ETH_DMATxDesc_DP : Disable Pad - * @arg ETH_DMATxDesc_TTSE: Transmit Time Stamp Enable - * @arg ETH_DMATxDesc_TER : Transmit End of Ring - * @arg ETH_DMATxDesc_TCH : Second Address Chained - * @arg ETH_DMATxDesc_TTSS: Tx Time Stamp Status - * @arg ETH_DMATxDesc_IHE : IP Header Error - * @arg ETH_DMATxDesc_ES : Error summary - * @arg ETH_DMATxDesc_JT : Jabber Timeout - * @arg ETH_DMATxDesc_FF : Frame Flushed: DMA/MTL flushed the frame due to SW flush - * @arg ETH_DMATxDesc_PCE : Payload Checksum Error - * @arg ETH_DMATxDesc_LCA : Loss of Carrier: carrier lost during tramsmission - * @arg ETH_DMATxDesc_NC : No Carrier: no carrier signal from the tranceiver - * @arg ETH_DMATxDesc_LCO : Late Collision: transmission aborted due to collision - * @arg ETH_DMATxDesc_EC : Excessive Collision: transmission aborted after 16 collisions - * @arg ETH_DMATxDesc_VF : VLAN Frame - * @arg ETH_DMATxDesc_CC : Collision Count - * @arg ETH_DMATxDesc_ED : Excessive Deferral - * @arg ETH_DMATxDesc_UF : Underflow Error: late data arrival from the memory - * @arg ETH_DMATxDesc_DB : Deferred Bit - * @retval : The new state of ETH_DMATxDescFlag (SET or RESET). - */ -FlagStatus ETH_GetDMATxDescFlagStatus(ETH_DMADESCTypeDef *DMATxDesc, uint32_t ETH_DMATxDescFlag) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMATxDESC_GET_FLAG(ETH_DMATxDescFlag)); - - if ((DMATxDesc->Status & ETH_DMATxDescFlag) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Returns the specified ETHERNET DMA Tx Desc collision count. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @retval : The Transmit descriptor collision counter value. - */ -uint32_t ETH_GetDMATxDescCollisionCount(ETH_DMADESCTypeDef *DMATxDesc) -{ - /* Return the Receive descriptor frame length */ - return ((DMATxDesc->Status & ETH_DMATxDesc_CC) >> ETH_DMATxDesc_CollisionCountShift); -} - -/** - * @brief Set the specified DMA Tx Desc Own bit. - * @param DMATxDesc: Pointer on a Tx desc - * @retval : None - */ -void ETH_SetDMATxDescOwnBit(ETH_DMADESCTypeDef *DMATxDesc) -{ - /* Set the DMA Tx Desc Own bit */ - DMATxDesc->Status |= ETH_DMATxDesc_OWN; -} - -/** - * @brief Enables or disables the specified DMA Tx Desc Transmit interrupt. - * @param DMATxDesc: Pointer on a Tx desc - * @param NewState: new state of the DMA Tx Desc transmit interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescTransmitITConfig(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA Tx Desc Transmit interrupt */ - DMATxDesc->Status |= ETH_DMATxDesc_IC; - } - else - { - /* Disable the DMA Tx Desc Transmit interrupt */ - DMATxDesc->Status &=(~(uint32_t)ETH_DMATxDesc_IC); - } -} - -/** - * @brief Enables or disables the specified DMA Tx Desc Transmit interrupt. - * @param DMATxDesc: Pointer on a Tx desc - * @param DMATxDesc_FrameSegment: specifies is the actual Tx desc contain last or first segment. - * This parameter can be one of the following values: - * @arg ETH_DMATxDesc_LastSegment : actual Tx desc contain last segment - * @arg ETH_DMATxDesc_FirstSegment : actual Tx desc contain first segment - * @retval : None - */ -void ETH_DMATxDescFrameSegmentConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_FrameSegment) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_TXDESC_SEGMENT(DMATxDesc_FrameSegment)); - - /* Selects the DMA Tx Desc Frame segment */ - DMATxDesc->Status |= DMATxDesc_FrameSegment; -} - -/** - * @brief Selects the specified ETHERNET DMA Tx Desc Checksum Insertion. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param DMATxDesc_Checksum: specifies is the DMA Tx desc checksum insertion. - * This parameter can be one of the following values: - * @arg ETH_DMATxDesc_ChecksumByPass : Checksum bypass - * @arg ETH_DMATxDesc_ChecksumIPV4Header : IPv4 header checksum - * @arg ETH_DMATxDesc_ChecksumTCPUDPICMPSegment : TCP/UDP/ICMP checksum. Pseudo header checksum is assumed to be present - * @arg ETH_DMATxDesc_ChecksumTCPUDPICMPFull : TCP/UDP/ICMP checksum fully in hardware including pseudo header - * @retval : None - */ -void ETH_DMATxDescChecksumInsertionConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_Checksum) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_TXDESC_CHECKSUM(DMATxDesc_Checksum)); - - /* Set the selected DMA Tx desc checksum insertion control */ - DMATxDesc->Status |= DMATxDesc_Checksum; -} - -/** - * @brief Enables or disables the DMA Tx Desc CRC. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc CRC. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescCRCCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc CRC */ - DMATxDesc->Status &= (~(uint32_t)ETH_DMATxDesc_DC); - } - else - { - /* Disable the selected DMA Tx Desc CRC */ - DMATxDesc->Status |= ETH_DMATxDesc_DC; - } -} - -/** - * @brief Enables or disables the DMA Tx Desc end of ring. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc end of ring. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc end of ring */ - DMATxDesc->Status |= ETH_DMATxDesc_TER; - } - else - { - /* Disable the selected DMA Tx Desc end of ring */ - DMATxDesc->Status &= (~(uint32_t)ETH_DMATxDesc_TER); - } -} - -/** - * @brief Enables or disables the DMA Tx Desc second address chained. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc second address chained. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc second address chained */ - DMATxDesc->Status |= ETH_DMATxDesc_TCH; - } - else - { - /* Disable the selected DMA Tx Desc second address chained */ - DMATxDesc->Status &=(~(uint32_t)ETH_DMATxDesc_TCH); - } -} - -/** - * @brief Enables or disables the DMA Tx Desc padding for frame shorter than 64 bytes. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc padding for - * frame shorter than 64 bytes. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescShortFramePaddingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc padding for frame shorter than 64 bytes */ - DMATxDesc->Status &= (~(uint32_t)ETH_DMATxDesc_DP); - } - else - { - /* Disable the selected DMA Tx Desc padding for frame shorter than 64 bytes*/ - DMATxDesc->Status |= ETH_DMATxDesc_DP; - } -} - -/** - * @brief Enables or disables the DMA Tx Desc time stamp. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc time stamp. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescTimeStampCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc time stamp */ - DMATxDesc->Status |= ETH_DMATxDesc_TTSE; - } - else - { - /* Disable the selected DMA Tx Desc time stamp */ - DMATxDesc->Status &=(~(uint32_t)ETH_DMATxDesc_TTSE); - } -} - -/** - * @brief Configures the specified DMA Tx Desc buffer1 and buffer2 sizes. - * @param DMATxDesc: Pointer on a Tx desc - * @param BufferSize1: specifies the Tx desc buffer1 size. - * @param BufferSize2: specifies the Tx desc buffer2 size (put "0" if not used). - * @retval : None - */ -void ETH_DMATxDescBufferSizeConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t BufferSize1, uint32_t BufferSize2) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMATxDESC_BUFFER_SIZE(BufferSize1)); - assert_param(IS_ETH_DMATxDESC_BUFFER_SIZE(BufferSize2)); - - /* Set the DMA Tx Desc buffer1 and buffer2 sizes values */ - DMATxDesc->ControlBufferSize |= (BufferSize1 | (BufferSize2 << ETH_DMATxDesc_BufferSize2Shift)); -} - -/** - * @brief Initializes the DMA Rx descriptors in chain mode. - * @param DMARxDescTab: Pointer on the first Rx desc list - * @param RxBuff: Pointer on the first RxBuffer list - * @param RxBuffCount: Number of the used Rx desc in the list - * @retval : None - */ -void ETH_DMARxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMARxDesc; - - /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */ - DMARxDescToGet = DMARxDescTab; - /* Fill each DMARxDesc descriptor with the right values */ - for(i=0; i < RxBuffCount; i++) - { - /* Get the pointer on the ith member of the Rx Desc list */ - DMARxDesc = DMARxDescTab+i; - /* Set Own bit of the Rx descriptor Status */ - DMARxDesc->Status = ETH_DMARxDesc_OWN; - - /* Set Buffer1 size and Second Address Chained bit */ - DMARxDesc->ControlBufferSize = ETH_DMARxDesc_RCH | (uint32_t)ETH_MAX_PACKET_SIZE; - /* Set Buffer1 address pointer */ - DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff[i*ETH_MAX_PACKET_SIZE]); - - /* Initialize the next descriptor with the Next Desciptor Polling Enable */ - if(i < (RxBuffCount-1)) - { - /* Set next descriptor address register with next descriptor base address */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab+i+1); - } - else - { - /* For last descriptor, set next descriptor address register equal to the first descriptor base address */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab); - } - } - - /* Set Receive Desciptor List Address Register */ - ETH->DMARDLAR = (uint32_t) DMARxDescTab; -} - -/** - * @brief Initializes the DMA Rx descriptors in ring mode. - * @param DMARxDescTab: Pointer on the first Rx desc list - * @param RxBuff1: Pointer on the first RxBuffer1 list - * @param RxBuff2: Pointer on the first RxBuffer2 list - * @param RxBuffCount: Number of the used Rx desc in the list - * Note: see decriptor skip length defined in ETH_DMA_InitStruct - * for the number of Words to skip between two unchained descriptors. - * @retval : None - */ -void ETH_DMARxDescRingInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff1, uint8_t *RxBuff2, uint32_t RxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMARxDesc; - /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */ - DMARxDescToGet = DMARxDescTab; - /* Fill each DMARxDesc descriptor with the right values */ - for(i=0; i < RxBuffCount; i++) - { - /* Get the pointer on the ith member of the Rx Desc list */ - DMARxDesc = DMARxDescTab+i; - /* Set Own bit of the Rx descriptor Status */ - DMARxDesc->Status = ETH_DMARxDesc_OWN; - /* Set Buffer1 size */ - DMARxDesc->ControlBufferSize = ETH_MAX_PACKET_SIZE; - /* Set Buffer1 address pointer */ - DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff1[i*ETH_MAX_PACKET_SIZE]); - - /* Set Buffer2 address pointer */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(&RxBuff2[i*ETH_MAX_PACKET_SIZE]); - - /* Set Receive End of Ring bit for last descriptor: The DMA returns to the base - address of the list, creating a Desciptor Ring */ - if(i == (RxBuffCount-1)) - { - /* Set Receive End of Ring bit */ - DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_RER; - } - } - - /* Set Receive Desciptor List Address Register */ - ETH->DMARDLAR = (uint32_t) DMARxDescTab; -} - -/** - * @brief Checks whether the specified ETHERNET Rx Desc flag is set or not. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @param ETH_DMARxDescFlag: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_DMARxDesc_OWN: OWN bit: descriptor is owned by DMA engine - * @arg ETH_DMARxDesc_AFM: DA Filter Fail for the rx frame - * @arg ETH_DMARxDesc_ES: Error summary - * @arg ETH_DMARxDesc_DE: Desciptor error: no more descriptors for receive frame - * @arg ETH_DMARxDesc_SAF: SA Filter Fail for the received frame - * @arg ETH_DMARxDesc_LE: Frame size not matching with length field - * @arg ETH_DMARxDesc_OE: Overflow Error: Frame was damaged due to buffer overflow - * @arg ETH_DMARxDesc_VLAN: VLAN Tag: received frame is a VLAN frame - * @arg ETH_DMARxDesc_FS: First descriptor of the frame - * @arg ETH_DMARxDesc_LS: Last descriptor of the frame - * @arg ETH_DMARxDesc_IPV4HCE: IPC Checksum Error/Giant Frame: Rx Ipv4 header checksum error - * @arg ETH_DMARxDesc_LC: Late collision occurred during reception - * @arg ETH_DMARxDesc_FT: Frame type - Ethernet, otherwise 802.3 - * @arg ETH_DMARxDesc_RWT: Receive Watchdog Timeout: watchdog timer expired during reception - * @arg ETH_DMARxDesc_RE: Receive error: error reported by MII interface - * @arg ETH_DMARxDesc_DE: Dribble bit error: frame contains non int multiple of 8 bits - * @arg ETH_DMARxDesc_CE: CRC error - * @arg ETH_DMARxDesc_MAMPCE: Rx MAC Address/Payload Checksum Error: Rx MAC address matched/ Rx Payload Checksum Error - * @retval : The new state of ETH_DMARxDescFlag (SET or RESET). - */ -FlagStatus ETH_GetDMARxDescFlagStatus(ETH_DMADESCTypeDef *DMARxDesc, uint32_t ETH_DMARxDescFlag) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMARxDESC_GET_FLAG(ETH_DMARxDescFlag)); - if ((DMARxDesc->Status & ETH_DMARxDescFlag) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Set the specified DMA Rx Desc Own bit. - * @param DMARxDesc: Pointer on a Rx desc - * @retval : None - */ -void ETH_SetDMARxDescOwnBit(ETH_DMADESCTypeDef *DMARxDesc) -{ - /* Set the DMA Rx Desc Own bit */ - DMARxDesc->Status |= ETH_DMARxDesc_OWN; -} - -/** - * @brief Returns the specified DMA Rx Desc frame length. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @retval : The Rx descriptor received frame length. - */ -uint32_t ETH_GetDMARxDescFrameLength(ETH_DMADESCTypeDef *DMARxDesc) -{ - /* Return the Receive descriptor frame length */ - return ((DMARxDesc->Status & ETH_DMARxDesc_FL) >> ETH_DMARxDesc_FrameLengthShift); -} - -/** - * @brief Enables or disables the specified DMA Rx Desc receive interrupt. - * @param DMARxDesc: Pointer on a Rx desc - * @param NewState: new state of the specified DMA Rx Desc interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMARxDescReceiveITConfig(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA Rx Desc receive interrupt */ - DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_DIC); - } - else - { - /* Disable the DMA Rx Desc receive interrupt */ - DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_DIC; - } -} - -/** - * @brief Enables or disables the DMA Rx Desc end of ring. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @param NewState: new state of the specified DMA Rx Desc end of ring. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMARxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Rx Desc end of ring */ - DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_RER; - } - else - { - /* Disable the selected DMA Rx Desc end of ring */ - DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_RER); - } -} - -/** - * @brief Enables or disables the DMA Rx Desc second address chained. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @param NewState: new state of the specified DMA Rx Desc second address chained. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMARxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Rx Desc second address chained */ - DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_RCH; - } - else - { - /* Disable the selected DMA Rx Desc second address chained */ - DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_RCH); - } -} - -/** - * @brief Returns the specified ETHERNET DMA Rx Desc buffer size. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @param DMARxDesc_Buffer: specifies the DMA Rx Desc buffer. - * This parameter can be any one of the following values: - * @arg ETH_DMARxDesc_Buffer1 : DMA Rx Desc Buffer1 - * @arg ETH_DMARxDesc_Buffer2 : DMA Rx Desc Buffer2 - * @retval : The Receive descriptor frame length. - */ -uint32_t ETH_GetDMARxDescBufferSize(ETH_DMADESCTypeDef *DMARxDesc, uint32_t DMARxDesc_Buffer) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_RXDESC_BUFFER(DMARxDesc_Buffer)); - - if(DMARxDesc_Buffer != ETH_DMARxDesc_Buffer1) - { - /* Return the DMA Rx Desc buffer2 size */ - return ((DMARxDesc->ControlBufferSize & ETH_DMARxDesc_RBS2) >> ETH_DMARxDesc_Buffer2SizeShift); - } - else - { - /* Return the DMA Rx Desc buffer1 size */ - return (DMARxDesc->ControlBufferSize & ETH_DMARxDesc_RBS1); - } -} - -/*--------------------------------- DMA ------------------------------------*/ -/** - * @brief Resets all MAC subsystem internal registers and logic. - * @param None - * @retval : None - */ -void ETH_SoftwareReset(void) -{ - /* Set the SWR bit: resets all MAC subsystem internal registers and logic */ - /* After reset all the registers holds their respective reset values */ - ETH->DMABMR |= ETH_DMABMR_SR; -} - -/** - * @brief Checks whether the ETHERNET software reset bit is set or not. - * @param None - * @retval : The new state of DMA Bus Mode register SR bit (SET or RESET). - */ -FlagStatus ETH_GetSoftwareResetStatus(void) -{ - FlagStatus bitstatus = RESET; - if((ETH->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Checks whether the specified ETHERNET DMA flag is set or not. - * @param ETH_DMA_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_DMA_FLAG_TST : Time-stamp trigger flag - * @arg ETH_DMA_FLAG_PMT : PMT flag - * @arg ETH_DMA_FLAG_MMC : MMC flag - * @arg ETH_DMA_FLAG_DataTransferError : Error bits 0-data buffer, 1-desc. access - * @arg ETH_DMA_FLAG_ReadWriteError : Error bits 0-write trnsf, 1-read transfr - * @arg ETH_DMA_FLAG_AccessError : Error bits 0-Rx DMA, 1-Tx DMA - * @arg ETH_DMA_FLAG_NIS : Normal interrupt summary flag - * @arg ETH_DMA_FLAG_AIS : Abnormal interrupt summary flag - * @arg ETH_DMA_FLAG_ER : Early receive flag - * @arg ETH_DMA_FLAG_FBE : Fatal bus error flag - * @arg ETH_DMA_FLAG_ET : Early transmit flag - * @arg ETH_DMA_FLAG_RWT : Receive watchdog timeout flag - * @arg ETH_DMA_FLAG_RPS : Receive process stopped flag - * @arg ETH_DMA_FLAG_RBU : Receive buffer unavailable flag - * @arg ETH_DMA_FLAG_R : Receive flag - * @arg ETH_DMA_FLAG_TU : Underflow flag - * @arg ETH_DMA_FLAG_RO : Overflow flag - * @arg ETH_DMA_FLAG_TJT : Transmit jabber timeout flag - * @arg ETH_DMA_FLAG_TBU : Transmit buffer unavailable flag - * @arg ETH_DMA_FLAG_TPS : Transmit process stopped flag - * @arg ETH_DMA_FLAG_T : Transmit flag - * @retval : The new state of ETH_DMA_FLAG (SET or RESET). - */ -FlagStatus ETH_GetDMAFlagStatus(uint32_t ETH_DMA_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMA_GET_IT(ETH_DMA_FLAG)); - if ((ETH->DMASR & ETH_DMA_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the ETHERNET’s DMA pending flag. - * @param ETH_DMA_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg ETH_DMA_FLAG_NIS : Normal interrupt summary flag - * @arg ETH_DMA_FLAG_AIS : Abnormal interrupt summary flag - * @arg ETH_DMA_FLAG_ER : Early receive flag - * @arg ETH_DMA_FLAG_FBE : Fatal bus error flag - * @arg ETH_DMA_FLAG_ETI : Early transmit flag - * @arg ETH_DMA_FLAG_RWT : Receive watchdog timeout flag - * @arg ETH_DMA_FLAG_RPS : Receive process stopped flag - * @arg ETH_DMA_FLAG_RBU : Receive buffer unavailable flag - * @arg ETH_DMA_FLAG_R : Receive flag - * @arg ETH_DMA_FLAG_TU : Transmit Underflow flag - * @arg ETH_DMA_FLAG_RO : Receive Overflow flag - * @arg ETH_DMA_FLAG_TJT : Transmit jabber timeout flag - * @arg ETH_DMA_FLAG_TBU : Transmit buffer unavailable flag - * @arg ETH_DMA_FLAG_TPS : Transmit process stopped flag - * @arg ETH_DMA_FLAG_T : Transmit flag - * @retval : None - */ -void ETH_DMAClearFlag(uint32_t ETH_DMA_FLAG) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_FLAG(ETH_DMA_FLAG)); - - /* Clear the selected ETHERNET DMA FLAG */ - ETH->DMASR = (uint32_t) ETH_DMA_FLAG; -} - -/** - * @brief Checks whether the specified ETHERNET DMA interrupt has occured or not. - * @param ETH_DMA_IT: specifies the interrupt source to check. - * This parameter can be one of the following values: - * @arg ETH_DMA_IT_TST : Time-stamp trigger interrupt - * @arg ETH_DMA_IT_PMT : PMT interrupt - * @arg ETH_DMA_IT_MMC : MMC interrupt - * @arg ETH_DMA_IT_NIS : Normal interrupt summary - * @arg ETH_DMA_IT_AIS : Abnormal interrupt summary - * @arg ETH_DMA_IT_ER : Early receive interrupt - * @arg ETH_DMA_IT_FBE : Fatal bus error interrupt - * @arg ETH_DMA_IT_ET : Early transmit interrupt - * @arg ETH_DMA_IT_RWT : Receive watchdog timeout interrupt - * @arg ETH_DMA_IT_RPS : Receive process stopped interrupt - * @arg ETH_DMA_IT_RBU : Receive buffer unavailable interrupt - * @arg ETH_DMA_IT_R : Receive interrupt - * @arg ETH_DMA_IT_TU : Underflow interrupt - * @arg ETH_DMA_IT_RO : Overflow interrupt - * @arg ETH_DMA_IT_TJT : Transmit jabber timeout interrupt - * @arg ETH_DMA_IT_TBU : Transmit buffer unavailable interrupt - * @arg ETH_DMA_IT_TPS : Transmit process stopped interrupt - * @arg ETH_DMA_IT_T : Transmit interrupt - * @retval : The new state of ETH_DMA_IT (SET or RESET). - */ -ITStatus ETH_GetDMAITStatus(uint32_t ETH_DMA_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMA_GET_IT(ETH_DMA_IT)); - if ((ETH->DMASR & ETH_DMA_IT) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the ETHERNET’s DMA IT pending bit. - * @param ETH_DMA_IT: specifies the interrupt pending bit to clear. - * This parameter can be any combination of the following values: - * @arg ETH_DMA_IT_NIS : Normal interrupt summary - * @arg ETH_DMA_IT_AIS : Abnormal interrupt summary - * @arg ETH_DMA_IT_ER : Early receive interrupt - * @arg ETH_DMA_IT_FBE : Fatal bus error interrupt - * @arg ETH_DMA_IT_ETI : Early transmit interrupt - * @arg ETH_DMA_IT_RWT : Receive watchdog timeout interrupt - * @arg ETH_DMA_IT_RPS : Receive process stopped interrupt - * @arg ETH_DMA_IT_RBU : Receive buffer unavailable interrupt - * @arg ETH_DMA_IT_R : Receive interrupt - * @arg ETH_DMA_IT_TU : Transmit Underflow interrupt - * @arg ETH_DMA_IT_RO : Receive Overflow interrupt - * @arg ETH_DMA_IT_TJT : Transmit jabber timeout interrupt - * @arg ETH_DMA_IT_TBU : Transmit buffer unavailable interrupt - * @arg ETH_DMA_IT_TPS : Transmit process stopped interrupt - * @arg ETH_DMA_IT_T : Transmit interrupt - * @retval : None - */ -void ETH_DMAClearITPendingBit(uint32_t ETH_DMA_IT) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_IT(ETH_DMA_IT)); - - /* Clear the selected ETHERNET DMA IT */ - ETH->DMASR = (uint32_t) ETH_DMA_IT; -} - -/** - * @brief Returns the ETHERNET DMA Transmit Process State. - * @param None - * @retval : The new ETHERNET DMA Transmit Process State: - * This can be one of the following values: - * - ETH_DMA_TransmitProcess_Stopped : Stopped - Reset or Stop Tx Command issued - * - ETH_DMA_TransmitProcess_Fetching : Running - fetching the Tx descriptor - * - ETH_DMA_TransmitProcess_Waiting : Running - waiting for status - * - ETH_DMA_TransmitProcess_Reading : unning - reading the data from host memory - * - ETH_DMA_TransmitProcess_Suspended : Suspended - Tx Desciptor unavailabe - * - ETH_DMA_TransmitProcess_Closing : Running - closing Rx descriptor - */ -uint32_t ETH_GetTransmitProcessState(void) -{ - return ((uint32_t)(ETH->DMASR & ETH_DMASR_TS)); -} - -/** - * @brief Returns the ETHERNET DMA Receive Process State. - * @param None - * @retval : The new ETHERNET DMA Receive Process State: - * This can be one of the following values: - * - ETH_DMA_ReceiveProcess_Stopped : Stopped - Reset or Stop Rx Command issued - * - ETH_DMA_ReceiveProcess_Fetching : Running - fetching the Rx descriptor - * - ETH_DMA_ReceiveProcess_Waiting : Running - waiting for packet - * - ETH_DMA_ReceiveProcess_Suspended : Suspended - Rx Desciptor unavailable - * - ETH_DMA_ReceiveProcess_Closing : Running - closing descriptor - * - ETH_DMA_ReceiveProcess_Queuing : Running - queuing the recieve frame into host memory - */ -uint32_t ETH_GetReceiveProcessState(void) -{ - return ((uint32_t)(ETH->DMASR & ETH_DMASR_RS)); -} - -/** - * @brief Clears the ETHERNET transmit FIFO. - * @param None - * @retval : None - */ -void ETH_FlushTransmitFIFO(void) -{ - /* Set the Flush Transmit FIFO bit */ - ETH->DMAOMR |= ETH_DMAOMR_FTF; -} - -/** - * @brief Checks whether the ETHERNET transmit FIFO bit is cleared or not. - * @param None - * @retval : The new state of ETHERNET flush transmit FIFO bit (SET or RESET). - */ -FlagStatus ETH_GetFlushTransmitFIFOStatus(void) -{ - FlagStatus bitstatus = RESET; - if ((ETH->DMAOMR & ETH_DMAOMR_FTF) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Enables or disables the DMA transmission. - * @param NewState: new state of the DMA transmission. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATransmissionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA transmission */ - ETH->DMAOMR |= ETH_DMAOMR_ST; - } - else - { - /* Disable the DMA transmission */ - ETH->DMAOMR &= ~ETH_DMAOMR_ST; - } -} - -/** - * @brief Enables or disables the DMA reception. - * @param NewState: new state of the DMA reception. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMAReceptionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA reception */ - ETH->DMAOMR |= ETH_DMAOMR_SR; - } - else - { - /* Disable the DMA reception */ - ETH->DMAOMR &= ~ETH_DMAOMR_SR; - } -} - -/** - * @brief Enables or disables the specified ETHERNET DMA interrupts. - * @param ETH_DMA_IT: specifies the ETHERNET DMA interrupt sources to be - * enabled or disabled. - * This parameter can be any combination of the following values: - * @arg ETH_DMA_IT_NIS : Normal interrupt summary - * @arg ETH_DMA_IT_AIS : Abnormal interrupt summary - * @arg ETH_DMA_IT_ER : Early receive interrupt - * @arg ETH_DMA_IT_FBE : Fatal bus error interrupt - * @arg ETH_DMA_IT_ET : Early transmit interrupt - * @arg ETH_DMA_IT_RWT : Receive watchdog timeout interrupt - * @arg ETH_DMA_IT_RPS : Receive process stopped interrupt - * @arg ETH_DMA_IT_RBU : Receive buffer unavailable interrupt - * @arg ETH_DMA_IT_R : Receive interrupt - * @arg ETH_DMA_IT_TU : Underflow interrupt - * @arg ETH_DMA_IT_RO : Overflow interrupt - * @arg ETH_DMA_IT_TJT : Transmit jabber timeout interrupt - * @arg ETH_DMA_IT_TBU : Transmit buffer unavailable interrupt - * @arg ETH_DMA_IT_TPS : Transmit process stopped interrupt - * @arg ETH_DMA_IT_T : Transmit interrupt - * @param NewState: new state of the specified ETHERNET DMA interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMAITConfig(uint32_t ETH_DMA_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_IT(ETH_DMA_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET DMA interrupts */ - ETH->DMAIER |= ETH_DMA_IT; - } - else - { - /* Disable the selected ETHERNET DMA interrupts */ - ETH->DMAIER &=(~(uint32_t)ETH_DMA_IT); - } -} - -/** - * @brief Checks whether the specified ETHERNET DMA overflow flag is set or not. - * @param ETH_DMA_Overflow: specifies the DMA overflow flag to check. - * This parameter can be one of the following values: - * @arg ETH_DMA_Overflow_RxFIFOCounter : Overflow for FIFO Overflow Counter - * @arg ETH_DMA_Overflow_MissedFrameCounter : Overflow for Missed Frame Counter - * @retval : The new state of ETHERNET DMA overflow Flag (SET or RESET). - */ -FlagStatus ETH_GetDMAOverflowStatus(uint32_t ETH_DMA_Overflow) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMA_GET_OVERFLOW(ETH_DMA_Overflow)); - - if ((ETH->DMAMFBOCR & ETH_DMA_Overflow) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Get the ETHERNET DMA Rx Overflow Missed Frame Counter value. - * @param None - * @retval : The value of Rx overflow Missed Frame Counter. - */ -uint32_t ETH_GetRxOverflowMissedFrameCounter(void) -{ - return ((uint32_t)((ETH->DMAMFBOCR & ETH_DMAMFBOCR_MFA)>>ETH_DMA_RxOverflowMissedFramesCounterShift)); -} - -/** - * @brief Get the ETHERNET DMA Buffer Unavailable Missed Frame Counter value. - * @param None - * @retval : The value of Buffer unavailable Missed Frame Counter. - */ -uint32_t ETH_GetBufferUnavailableMissedFrameCounter(void) -{ - return ((uint32_t)(ETH->DMAMFBOCR) & ETH_DMAMFBOCR_MFC); -} - -/** - * @brief Get the ETHERNET DMA DMACHTDR register value. - * @param None - * @retval : The value of the current Tx desc start address. - */ -uint32_t ETH_GetCurrentTxDescStartAddress(void) -{ - return ((uint32_t)(ETH->DMACHTDR)); -} - -/** - * @brief Get the ETHERNET DMA DMACHRDR register value. - * @param None - * @retval : The value of the current Rx desc start address. - */ -uint32_t ETH_GetCurrentRxDescStartAddress(void) -{ - return ((uint32_t)(ETH->DMACHRDR)); -} - -/** - * @brief Get the ETHERNET DMA DMACHTBAR register value. - * @param None - * @retval : The value of the current Tx desc buffer address. - */ -uint32_t ETH_GetCurrentTxBufferAddress(void) -{ - return ((uint32_t)(ETH->DMACHTBAR)); -} - -/** - * @brief Get the ETHERNET DMA DMACHRBAR register value. - * @param None - * @retval : The value of the current Rx desc buffer address. - */ -uint32_t ETH_GetCurrentRxBufferAddress(void) -{ - return ((uint32_t)(ETH->DMACHRBAR)); -} - -/** - * @brief Resumes the DMA Transmission by writing to the DmaTxPollDemand - * register: (the data written could be anything). This forces - * the DMA to resume transmission. - * @param None - * @retval : None. - */ -void ETH_ResumeDMATransmission(void) -{ - ETH->DMATPDR = 0; -} - -/** - * @brief Resumes the DMA Transmission by writing to the DmaRxPollDemand - * register: (the data written could be anything). This forces - * the DMA to resume reception. - * @param None - * @retval : None. - */ -void ETH_ResumeDMAReception(void) -{ - ETH->DMARPDR = 0; -} - -/*--------------------------------- PMT ------------------------------------*/ -/** - * @brief Reset Wakeup frame filter register pointer. - * @param None - * @retval : None - */ -void ETH_ResetWakeUpFrameFilterRegisterPointer(void) -{ - /* Resets the Remote Wake-up Frame Filter register pointer to 0x0000 */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_WFFRPR; -} - -/** - * @brief Populates the remote wakeup frame registers. - * @param Buffer: Pointer on remote WakeUp Frame Filter Register buffer - * data (8 words). - * @retval : None - */ -void ETH_SetWakeUpFrameFilterRegister(uint32_t *Buffer) -{ - uint32_t i = 0; - - /* Fill Remote Wake-up Frame Filter register with Buffer data */ - for(i =0; iMACRWUFFR = Buffer[i]; - } -} - -/** - * @brief Enables or disables any unicast packet filtered by the MAC - * (DAF) address recognition to be a wake-up frame. - * @param NewState: new state of the MAC Global Unicast Wake-Up. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_GlobalUnicastWakeUpCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC Global Unicast Wake-Up */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_GU; - } - else - { - /* Disable the MAC Global Unicast Wake-Up */ - ETH->MACPMTCSR &= ~ETH_MACPMTCSR_GU; - } -} - -/** - * @brief Checks whether the specified ETHERNET PMT flag is set or not. - * @param ETH_PMT_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_PMT_FLAG_WUFFRPR : Wake-Up Frame Filter Register Poniter Reset - * @arg ETH_PMT_FLAG_WUFR : Wake-Up Frame Received - * @arg ETH_PMT_FLAG_MPR : Magic Packet Received - * @retval : The new state of ETHERNET PMT Flag (SET or RESET). - */ -FlagStatus ETH_GetPMTFlagStatus(uint32_t ETH_PMT_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_PMT_GET_FLAG(ETH_PMT_FLAG)); - - if ((ETH->MACPMTCSR & ETH_PMT_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Enables or disables the MAC Wake-Up Frame Detection. - * @param NewState: new state of the MAC Wake-Up Frame Detection. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_WakeUpFrameDetectionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC Wake-Up Frame Detection */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_WFE; - } - else - { - /* Disable the MAC Wake-Up Frame Detection */ - ETH->MACPMTCSR &= ~ETH_MACPMTCSR_WFE; - } -} - -/** - * @brief Enables or disables the MAC Magic Packet Detection. - * @param NewState: new state of the MAC Magic Packet Detection. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MagicPacketDetectionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC Magic Packet Detection */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_MPE; - } - else - { - /* Disable the MAC Magic Packet Detection */ - ETH->MACPMTCSR &= ~ETH_MACPMTCSR_MPE; - } -} - -/** - * @brief Enables or disables the MAC Power Down. - * @param NewState: new state of the MAC Power Down. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_PowerDownCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC Power Down */ - /* This puts the MAC in power down mode */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_PD; - } - else - { - /* Disable the MAC Power Down */ - ETH->MACPMTCSR &= ~ETH_MACPMTCSR_PD; - } -} - -/*--------------------------------- MMC ------------------------------------*/ -/** - * @brief Enables or disables the MMC Counter Freeze. - * @param NewState: new state of the MMC Counter Freeze. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MMCCounterFreezeCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MMC Counter Freeze */ - ETH->MMCCR |= ETH_MMCCR_MCF; - } - else - { - /* Disable the MMC Counter Freeze */ - ETH->MMCCR &= ~ETH_MMCCR_MCF; - } -} - -/** - * @brief Enables or disables the MMC Reset On Read. - * @param NewState: new state of the MMC Reset On Read. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MMCResetOnReadCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MMC Counter reset on read */ - ETH->MMCCR |= ETH_MMCCR_ROR; - } - else - { - /* Disable the MMC Counter reset on read */ - ETH->MMCCR &= ~ETH_MMCCR_ROR; - } -} - -/** - * @brief Enables or disables the MMC Counter Stop Rollover. - * @param NewState: new state of the MMC Counter Stop Rollover. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MMCCounterRolloverCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Disable the MMC Counter Stop Rollover */ - ETH->MMCCR &= ~ETH_MMCCR_CSR; - } - else - { - /* Enable the MMC Counter Stop Rollover */ - ETH->MMCCR |= ETH_MMCCR_CSR; - } -} - -/** - * @brief Resets the MMC Counters. - * @param None - * @retval : None - */ -void ETH_MMCCountersReset(void) -{ - /* Resets the MMC Counters */ - ETH->MMCCR |= ETH_MMCCR_CR; -} - -/** - * @brief Enables or disables the specified ETHERNET MMC interrupts. - * @param ETH_MMC_IT: specifies the ETHERNET MMC interrupt - * sources to be enabled or disabled. - * This parameter can be any combination of Tx interrupt or - * any combination of Rx interrupt (but not both)of the following values: - * @arg ETH_MMC_IT_TGF : When Tx good frame counter reaches half the maximum value - * @arg ETH_MMC_IT_TGFMSC: When Tx good multi col counter reaches half the maximum value - * @arg ETH_MMC_IT_TGFSC : When Tx good single col counter reaches half the maximum value - * @arg ETH_MMC_IT_RGUF : When Rx good unicast frames counter reaches half the maximum value - * @arg ETH_MMC_IT_RFAE : When Rx alignment error counter reaches half the maximum value - * @arg ETH_MMC_IT_RFCE : When Rx crc error counter reaches half the maximum value - * @param NewState: new state of the specified ETHERNET MMC interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MMCITConfig(uint32_t ETH_MMC_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ETH_MMC_IT(ETH_MMC_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if ((ETH_MMC_IT & (uint32_t)0x10000000) != (uint32_t)RESET) - { - /* Remove egister mak from IT */ - ETH_MMC_IT &= 0xEFFFFFFF; - - /* ETHERNET MMC Rx interrupts selected */ - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET MMC interrupts */ - ETH->MMCRIMR &=(~(uint32_t)ETH_MMC_IT); - } - else - { - /* Disable the selected ETHERNET MMC interrupts */ - ETH->MMCRIMR |= ETH_MMC_IT; - } - } - else - { - /* ETHERNET MMC Tx interrupts selected */ - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET MMC interrupts */ - ETH->MMCTIMR &=(~(uint32_t)ETH_MMC_IT); - } - else - { - /* Disable the selected ETHERNET MMC interrupts */ - ETH->MMCTIMR |= ETH_MMC_IT; - } - } -} - -/** - * @brief Checks whether the specified ETHERNET MMC IT is set or not. - * @param ETH_MMC_IT: specifies the ETHERNET MMC interrupt. - * This parameter can be one of the following values: - * @arg ETH_MMC_IT_TxFCGC: When Tx good frame counter reaches half the maximum value - * @arg ETH_MMC_IT_TxMCGC: When Tx good multi col counter reaches half the maximum value - * @arg ETH_MMC_IT_TxSCGC: When Tx good single col counter reaches half the maximum value - * @arg ETH_MMC_IT_RxUGFC: When Rx good unicast frames counter reaches half the maximum value - * @arg ETH_MMC_IT_RxAEC : When Rx alignment error counter reaches half the maximum value - * @arg ETH_MMC_IT_RxCEC : When Rx crc error counter reaches half the maximum value - * @retval : The value of ETHERNET MMC IT (SET or RESET). - */ -ITStatus ETH_GetMMCITStatus(uint32_t ETH_MMC_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_MMC_GET_IT(ETH_MMC_IT)); - - if ((ETH_MMC_IT & (uint32_t)0x10000000) != (uint32_t)RESET) - { - /* ETHERNET MMC Rx interrupts selected */ - /* Check if the ETHERNET MMC Rx selected interrupt is enabled and occured */ - if ((((ETH->MMCRIR & ETH_MMC_IT) != (uint32_t)RESET)) && ((ETH->MMCRIMR & ETH_MMC_IT) != (uint32_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - else - { - /* ETHERNET MMC Tx interrupts selected */ - /* Check if the ETHERNET MMC Tx selected interrupt is enabled and occured */ - if ((((ETH->MMCTIR & ETH_MMC_IT) != (uint32_t)RESET)) && ((ETH->MMCRIMR & ETH_MMC_IT) != (uint32_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - - return bitstatus; -} - -/** - * @brief Get the specified ETHERNET MMC register value. - * @param ETH_MMCReg: specifies the ETHERNET MMC register. - * This parameter can be one of the following values: - * @arg ETH_MMCCR : MMC CR register - * @arg ETH_MMCRIR : MMC RIR register - * @arg ETH_MMCTIR : MMC TIR register - * @arg ETH_MMCRIMR : MMC RIMR register - * @arg ETH_MMCTIMR : MMC TIMR register - * @arg ETH_MMCTGFSCCR : MMC TGFSCCR register - * @arg ETH_MMCTGFMSCCR: MMC TGFMSCCR register - * @arg ETH_MMCTGFCR : MMC TGFCR register - * @arg ETH_MMCRFCECR : MMC RFCECR register - * @arg ETH_MMCRFAECR : MMC RFAECR register - * @arg ETH_MMCRGUFCR : MMC RGUFCRregister - * @retval : The value of ETHERNET MMC Register value. - */ -uint32_t ETH_GetMMCRegister(uint32_t ETH_MMCReg) -{ - /* Check the parameters */ - assert_param(IS_ETH_MMC_REGISTER(ETH_MMCReg)); - - /* Return the selected register value */ - return (*(__IO uint32_t *)(ETH_MAC_BASE + ETH_MMCReg)); -} -/*--------------------------------- PTP ------------------------------------*/ - -/** - * @brief Updated the PTP block for fine correction with the Time Stamp - * Addend register value. - * @param None - * @retval : None - */ -void ETH_EnablePTPTimeStampAddend(void) -{ - /* Enable the PTP block update with the Time Stamp Addend register value */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSARU; -} - -/** - * @brief Enable the PTP Time Stamp interrupt trigger - * @param None - * @retval : None - */ -void ETH_EnablePTPTimeStampInterruptTrigger(void) -{ - /* Enable the PTP target time interrupt */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSITE; -} - -/** - * @brief Updated the PTP system time with the Time Stamp Update register - * value. - * @param None - * @retval : None - */ -void ETH_EnablePTPTimeStampUpdate(void) -{ - /* Enable the PTP system time update with the Time Stamp Update register value */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSSTU; -} - -/** - * @brief Initialize the PTP Time Stamp - * @param None - * @retval : None - */ -void ETH_InitializePTPTimeStamp(void) -{ - /* Initialize the PTP Time Stamp */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSSTI; -} - -/** - * @brief Selects the PTP Update method - * @param UpdateMethod: the PTP Update method - * This parameter can be one of the following values: - * @arg ETH_PTP_FineUpdate : Fine Update method - * @arg ETH_PTP_CoarseUpdate : Coarse Update method - * @retval : None - */ -void ETH_PTPUpdateMethodConfig(uint32_t UpdateMethod) -{ - /* Check the parameters */ - assert_param(IS_ETH_PTP_UPDATE(UpdateMethod)); - - if (UpdateMethod != ETH_PTP_CoarseUpdate) - { - /* Enable the PTP Fine Update method */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSFCU; - } - else - { - /* Disable the PTP Coarse Update method */ - ETH->PTPTSCR &= (~(uint32_t)ETH_PTPTSCR_TSFCU); - } -} - -/** - * @brief Enables or disables the PTP time stamp for transmit and receive frames. - * @param NewState: new state of the PTP time stamp for transmit and receive frames - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_PTPTimeStampCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the PTP time stamp for transmit and receive frames */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSE; - } - else - { - /* Disable the PTP time stamp for transmit and receive frames */ - ETH->PTPTSCR &= (~(uint32_t)ETH_PTPTSCR_TSE); - } -} - -/** - * @brief Checks whether the specified ETHERNET PTP flag is set or not. - * @param ETH_PTP_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_PTP_FLAG_TSARU : Addend Register Update - * @arg ETH_PTP_FLAG_TSITE : Time Stamp Interrupt Trigger Enable - * @arg ETH_PTP_FLAG_TSSTU : Time Stamp Update - * @arg ETH_PTP_FLAG_TSSTI : Time Stamp Initialize - * @retval : The new state of ETHERNET PTP Flag (SET or RESET). - */ -FlagStatus ETH_GetPTPFlagStatus(uint32_t ETH_PTP_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_PTP_GET_FLAG(ETH_PTP_FLAG)); - - if ((ETH->PTPTSCR & ETH_PTP_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Sets the system time Sub-Second Increment value. - * @param SubSecondValue: specifies the PTP Sub-Second Increment Register value. - * @retval : None - */ -void ETH_SetPTPSubSecondIncrement(uint32_t SubSecondValue) -{ - /* Check the parameters */ - assert_param(IS_ETH_PTP_SUBSECOND_INCREMENT(SubSecondValue)); - /* Set the PTP Sub-Second Increment Register */ - ETH->PTPSSIR = SubSecondValue; -} - -/** - * @brief Sets the Time Stamp update sign and values. - * @param Sign: specifies the PTP Time update value sign. - * This parameter can be one of the following values: - * @arg ETH_PTP_PositiveTime : positive time value. - * @arg ETH_PTP_NegativeTime : negative time value. - * @param SecondValue: specifies the PTP Time update second value. - * @param SubSecondValue: specifies the PTP Time update sub-second value. - * this is a 31 bit value. bit32 correspond to the sign. - * @retval : None - */ -void ETH_SetPTPTimeStampUpdate(uint32_t Sign, uint32_t SecondValue, uint32_t SubSecondValue) -{ - /* Check the parameters */ - assert_param(IS_ETH_PTP_TIME_SIGN(Sign)); - assert_param(IS_ETH_PTP_TIME_STAMP_UPDATE_SUBSECOND(SubSecondValue)); - /* Set the PTP Time Update High Register */ - ETH->PTPTSHUR = SecondValue; - - /* Set the PTP Time Update Low Register with sign */ - ETH->PTPTSLUR = Sign | SubSecondValue; -} - -/** - * @brief Sets the Time Stamp Addend value. - * @param Value: specifies the PTP Time Stamp Addend Register value. - * @retval : None - */ -void ETH_SetPTPTimeStampAddend(uint32_t Value) -{ - /* Set the PTP Time Stamp Addend Register */ - ETH->PTPTSAR = Value; -} - -/** - * @brief Sets the Target Time registers values. - * @param HighValue: specifies the PTP Target Time High Register value. - * @param LowValue: specifies the PTP Target Time Low Register value. - * @retval : None - */ -void ETH_SetPTPTargetTime(uint32_t HighValue, uint32_t LowValue) -{ - /* Set the PTP Target Time High Register */ - ETH->PTPTTHR = HighValue; - /* Set the PTP Target Time Low Register */ - ETH->PTPTTLR = LowValue; -} - -/** - * @brief Get the specified ETHERNET PTP register value. - * @param ETH_PTPReg: specifies the ETHERNET PTP register. - * This parameter can be one of the following values: - * @arg ETH_PTPTSCR : Sub-Second Increment Register - * @arg ETH_PTPSSIR : Sub-Second Increment Register - * @arg ETH_PTPTSHR : Time Stamp High Register - * @arg ETH_PTPTSLR : Time Stamp Low Register - * @arg ETH_PTPTSHUR : Time Stamp High Update Register - * @arg ETH_PTPTSLUR : Time Stamp Low Update Register - * @arg ETH_PTPTSAR : Time Stamp Addend Register - * @arg ETH_PTPTTHR : Target Time High Register - * @arg ETH_PTPTTLR : Target Time Low Register - * @retval : The value of ETHERNET PTP Register value. - */ -uint32_t ETH_GetPTPRegister(uint32_t ETH_PTPReg) -{ - /* Check the parameters */ - assert_param(IS_ETH_PTP_REGISTER(ETH_PTPReg)); - - /* Return the selected register value */ - return (*(__IO uint32_t *)(ETH_MAC_BASE + ETH_PTPReg)); -} - -/** - * @brief Initializes the DMA Tx descriptors in chain mode with PTP. - * @param DMATxDescTab: Pointer on the first Tx desc list - * @param DMAPTPTxDescTab: Pointer on the first PTP Tx desc list - * @param TxBuff: Pointer on the first TxBuffer list - * @param TxBuffCount: Number of the used Tx desc in the list - * @retval : None - */ -void ETH_DMAPTPTxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, ETH_DMADESCTypeDef *DMAPTPTxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMATxDesc; - - /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */ - DMATxDescToSet = DMATxDescTab; - DMAPTPTxDescToSet = DMAPTPTxDescTab; - /* Fill each DMATxDesc descriptor with the right values */ - for(i=0; i < TxBuffCount; i++) - { - /* Get the pointer on the ith member of the Tx Desc list */ - DMATxDesc = DMATxDescTab+i; - /* Set Second Address Chained bit and enable PTP */ - DMATxDesc->Status = ETH_DMATxDesc_TCH | ETH_DMATxDesc_TTSE; - - /* Set Buffer1 address pointer */ - DMATxDesc->Buffer1Addr =(uint32_t)(&TxBuff[i*ETH_MAX_PACKET_SIZE]); - - /* Initialize the next descriptor with the Next Desciptor Polling Enable */ - if(i < (TxBuffCount-1)) - { - /* Set next descriptor address register with next descriptor base address */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t)(DMATxDescTab+i+1); - } - else - { - /* For last descriptor, set next descriptor address register equal to the first descriptor base address */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t) DMATxDescTab; - } - /* make DMAPTPTxDescTab points to the same addresses as DMATxDescTab */ - (&DMAPTPTxDescTab[i])->Buffer1Addr = DMATxDesc->Buffer1Addr; - (&DMAPTPTxDescTab[i])->Buffer2NextDescAddr = DMATxDesc->Buffer2NextDescAddr; - } - /* Store on the last DMAPTPTxDescTab desc status record the first list address */ - (&DMAPTPTxDescTab[i-1])->Status = (uint32_t) DMAPTPTxDescTab; - - /* Set Transmit Desciptor List Address Register */ - ETH->DMATDLAR = (uint32_t) DMATxDescTab; -} - -/** - * @brief Initializes the DMA Rx descriptors in chain mode. - * @param DMARxDescTab: Pointer on the first Rx desc list - * @param DMAPTPRxDescTab: Pointer on the first PTP Rx desc list - * @param RxBuff: Pointer on the first RxBuffer list - * @param RxBuffCount: Number of the used Rx desc in the list - * @retval : None - */ -void ETH_DMAPTPRxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, ETH_DMADESCTypeDef *DMAPTPRxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMARxDesc; - - /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */ - DMARxDescToGet = DMARxDescTab; - DMAPTPRxDescToGet = DMAPTPRxDescTab; - /* Fill each DMARxDesc descriptor with the right values */ - for(i=0; i < RxBuffCount; i++) - { - /* Get the pointer on the ith member of the Rx Desc list */ - DMARxDesc = DMARxDescTab+i; - /* Set Own bit of the Rx descriptor Status */ - DMARxDesc->Status = ETH_DMARxDesc_OWN; - - /* Set Buffer1 size and Second Address Chained bit */ - DMARxDesc->ControlBufferSize = ETH_DMARxDesc_RCH | (uint32_t)ETH_MAX_PACKET_SIZE; - /* Set Buffer1 address pointer */ - DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff[i*ETH_MAX_PACKET_SIZE]); - - /* Initialize the next descriptor with the Next Desciptor Polling Enable */ - if(i < (RxBuffCount-1)) - { - /* Set next descriptor address register with next descriptor base address */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab+i+1); - } - else - { - /* For last descriptor, set next descriptor address register equal to the first descriptor base address */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab); - } - /* Make DMAPTPRxDescTab points to the same addresses as DMARxDescTab */ - (&DMAPTPRxDescTab[i])->Buffer1Addr = DMARxDesc->Buffer1Addr; - (&DMAPTPRxDescTab[i])->Buffer2NextDescAddr = DMARxDesc->Buffer2NextDescAddr; - } - /* Store on the last DMAPTPRxDescTab desc status record the first list address */ - (&DMAPTPRxDescTab[i-1])->Status = (uint32_t) DMAPTPRxDescTab; - - /* Set Receive Desciptor List Address Register */ - ETH->DMARDLAR = (uint32_t) DMARxDescTab; -} - -/** - * @brief Transmits a packet, from application buffer, pointed by ppkt with - * Time Stamp values. - * @param ppkt: pointer to application packet buffer to transmit. - * @param FrameLength: Tx Packet size. - * @param PTPTxTab: Pointer on the first PTP Tx table to store Time stamp values. - * @retval : ETH_ERROR: in case of Tx desc owned by DMA - * ETH_SUCCESS: for correct transmission - */ -uint32_t ETH_HandlePTPTxPkt(uint8_t *ppkt, uint16_t FrameLength, uint32_t *PTPTxTab) -{ - uint32_t offset = 0, timeout = 0; - /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */ - if((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (uint32_t)RESET) - { - /* Return ERROR: OWN bit set */ - return ETH_ERROR; - } - /* Copy the frame to be sent into memory pointed by the current ETHERNET DMA Tx descriptor */ - for(offset=0; offsetBuffer1Addr) + offset)) = (*(ppkt + offset)); - } - /* Setting the Frame Length: bits[12:0] */ - DMATxDescToSet->ControlBufferSize = (FrameLength & (uint32_t)0x1FFF); - /* Setting the last segment and first segment bits (in this case a frame is transmitted in one descriptor) */ - DMATxDescToSet->Status |= ETH_DMATxDesc_LS | ETH_DMATxDesc_FS; - /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMATxDescToSet->Status |= ETH_DMATxDesc_OWN; - /* When Tx Buffer unavailable flag is set: clear it and resume transmission */ - if ((ETH->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET) - { - /* Clear TBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_TBUS; - /* Resume DMA transmission*/ - ETH->DMATPDR = 0; - } - /* Wait for ETH_DMATxDesc_TTSS flag to be set */ - do - { - timeout++; - } while (!(DMATxDescToSet->Status & ETH_DMATxDesc_TTSS) && (timeout < 0xFFFF)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_READ_TO) - { - return ETH_ERROR; - } - /* Clear the DMATxDescToSet status register TTSS flag */ - DMATxDescToSet->Status &= ~ETH_DMATxDesc_TTSS; - *PTPTxTab++ = DMATxDescToSet->Buffer1Addr; - *PTPTxTab = DMATxDescToSet->Buffer2NextDescAddr; - /* Update the ENET DMA current descriptor */ - /* Chained Mode */ - if((DMATxDescToSet->Status & ETH_DMATxDesc_TCH) != (uint32_t)RESET) - { - /* Selects the next DMA Tx descriptor list for next buffer read */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) (DMAPTPTxDescToSet->Buffer2NextDescAddr); - if(DMAPTPTxDescToSet->Status != 0) - { - DMAPTPTxDescToSet = (ETH_DMADESCTypeDef*) (DMAPTPTxDescToSet->Status); - } - else - { - DMAPTPTxDescToSet++; - } - } - else /* Ring Mode */ - { - if((DMATxDescToSet->Status & ETH_DMATxDesc_TER) != (uint32_t)RESET) - { - /* Selects the next DMA Tx descriptor list for next buffer read: this will - be the first Tx descriptor in this case */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) (ETH->DMATDLAR); - DMAPTPTxDescToSet = (ETH_DMADESCTypeDef*) (ETH->DMATDLAR); - } - else - { - /* Selects the next DMA Tx descriptor list for next buffer read */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) ((uint32_t)DMATxDescToSet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - DMAPTPTxDescToSet = (ETH_DMADESCTypeDef*) ((uint32_t)DMAPTPTxDescToSet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } - /* Return SUCCESS */ - return ETH_SUCCESS; -} - -/** - * @brief Receives a packet and copies it to memory pointed by ppkt with - * Time Stamp values. - * @param ppkt: pointer to application packet receive buffer. - * @param PTPRxTab: Pointer on the first PTP Rx table to store Time stamp values. - * @retval : ETH_ERROR: if there is error in reception - * framelength: received packet size if packet reception is correct - */ -uint32_t ETH_HandlePTPRxPkt(uint8_t *ppkt, uint32_t *PTPRxTab) -{ - uint32_t offset = 0, framelength = 0; - /* Check if the descriptor is owned by the ENET or CPU */ - if((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) != (uint32_t)RESET) - { - /* Return error: OWN bit set */ - return ETH_ERROR; - } - if(((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)) - { - /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */ - framelength = ((DMARxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARxDesc_FrameLengthShift) - 4; - /* Copy the received frame into buffer from memory pointed by the current ETHERNET DMA Rx descriptor */ - for(offset=0; offsetBuffer1Addr) + offset)); - } - } - else - { - /* Return ERROR */ - framelength = ETH_ERROR; - } - /* When Rx Buffer unavailable flag is set: clear it and resume reception */ - if ((ETH->DMASR & ETH_DMASR_RBUS) != (uint32_t)RESET) - { - /* Clear RBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_RBUS; - /* Resume DMA reception */ - ETH->DMARPDR = 0; - } - *PTPRxTab++ = DMARxDescToGet->Buffer1Addr; - *PTPRxTab = DMARxDescToGet->Buffer2NextDescAddr; - /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMARxDescToGet->Status |= ETH_DMARxDesc_OWN; - /* Update the ETHERNET DMA global Rx descriptor with next Rx decriptor */ - /* Chained Mode */ - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET) - { - /* Selects the next DMA Rx descriptor list for next buffer read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMAPTPRxDescToGet->Buffer2NextDescAddr); - if(DMAPTPRxDescToGet->Status != 0) - { - DMAPTPRxDescToGet = (ETH_DMADESCTypeDef*) (DMAPTPRxDescToGet->Status); - } - else - { - DMAPTPRxDescToGet++; - } - } - else /* Ring Mode */ - { - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET) - { - /* Selects the first DMA Rx descriptor for next buffer to read: last Rx descriptor was used */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR); - } - else - { - /* Selects the next DMA Rx descriptor list for next buffer to read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMARxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } - /* Return Frame Length/ERROR */ - return (framelength); -} -/** - * @} - */ - -/** - * @} - */ - -/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/fatfs/ffconf.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/fatfs/ffconf.h deleted file mode 100644 index c51b9383..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/fatfs/ffconf.h +++ /dev/null @@ -1,266 +0,0 @@ -/*---------------------------------------------------------------------------/ -/ FatFs - FAT file system module configuration file R0.12 (C)ChaN, 2016 -/---------------------------------------------------------------------------*/ - -#define _FFCONF 88100 /* Revision ID */ - -/*---------------------------------------------------------------------------/ -/ Function Configurations -/---------------------------------------------------------------------------*/ - -#define _FS_READONLY 0 -/* This option switches read-only configuration. (0:Read/Write or 1:Read-only) -/ Read-only configuration removes writing API functions, f_write(), f_sync(), -/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree() -/ and optional writing functions as well. */ - - -#define _FS_MINIMIZE 0 -/* This option defines minimization level to remove some basic API functions. -/ -/ 0: All basic functions are enabled. -/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename() -/ are removed. -/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1. -/ 3: f_lseek() function is removed in addition to 2. */ - - -#define _USE_STRFUNC 2 /* 0:Disable or 1-2:Enable */ -/* This option switches string functions, f_gets(), f_putc(), f_puts() and -/ f_printf(). -/ -/ 0: Disable string functions. -/ 1: Enable without LF-CRLF conversion. -/ 2: Enable with LF-CRLF conversion. */ - - -#define _USE_FIND 0 -/* This option switches filtered directory read functions, f_findfirst() and -/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */ - - -#define _USE_MKFS 0 -/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */ - - -#define _USE_FASTSEEK 0 -/* This option switches fast seek function. (0:Disable or 1:Enable) */ - - -#define _USE_EXPAND 0 -/* This option switches f_expand function. (0:Disable or 1:Enable) */ - - -#define _USE_CHMOD 0 -/* This option switches attribute manipulation functions, f_chmod() and f_utime(). -/ (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. */ - - -#define _USE_LABEL 0 -/* This option switches volume label functions, f_getlabel() and f_setlabel(). -/ (0:Disable or 1:Enable) */ - - -#define _USE_FORWARD 0 -/* This option switches f_forward() function. (0:Disable or 1:Enable) -/ To enable it, also _FS_TINY need to be 1. */ - - -/*---------------------------------------------------------------------------/ -/ Locale and Namespace Configurations -/---------------------------------------------------------------------------*/ - -#define _CODE_PAGE 437 -/* This option specifies the OEM code page to be used on the target system. -/ Incorrect setting of the code page can cause a file open failure. -/ -/ 1 - ASCII (No extended character. Non-LFN cfg. only) -/ 437 - U.S. -/ 720 - Arabic -/ 737 - Greek -/ 771 - KBL -/ 775 - Baltic -/ 850 - Latin 1 -/ 852 - Latin 2 -/ 855 - Cyrillic -/ 857 - Turkish -/ 860 - Portuguese -/ 861 - Icelandic -/ 862 - Hebrew -/ 863 - Canadian French -/ 864 - Arabic -/ 865 - Nordic -/ 866 - Russian -/ 869 - Greek 2 -/ 932 - Japanese (DBCS) -/ 936 - Simplified Chinese (DBCS) -/ 949 - Korean (DBCS) -/ 950 - Traditional Chinese (DBCS) -*/ - - -#define _USE_LFN 1 /* 0 to 3 */ -#define _MAX_LFN 255 -/* The _USE_LFN switches the support of long file name (LFN). -/ -/ 0: Disable support of LFN. _MAX_LFN has no effect. -/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe. -/ 2: Enable LFN with dynamic working buffer on the STACK. -/ 3: Enable LFN with dynamic working buffer on the HEAP. -/ -/ To enable the LFN, Unicode handling functions (option/unicode.c) must be added -/ to the project. The working buffer occupies (_MAX_LFN + 1) * 2 bytes and -/ additional 608 bytes at exFAT enabled. _MAX_LFN can be in range from 12 to 255. -/ It should be set 255 to support full featured LFN operations. -/ When use stack for the working buffer, take care on stack overflow. When use heap -/ memory for the working buffer, memory management functions, ff_memalloc() and -/ ff_memfree(), must be added to the project. */ - - -#define _LFN_UNICODE 0 -/* This option switches character encoding on the API. (0:ANSI/OEM or 1:Unicode) -/ To use Unicode string for the path name, enable LFN and set _LFN_UNICODE = 1. -/ This option also affects behavior of string I/O functions. */ - - -#define _STRF_ENCODE 3 -/* When _LFN_UNICODE == 1, this option selects the character encoding on the file to -/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf(). -/ -/ 0: ANSI/OEM -/ 1: UTF-16LE -/ 2: UTF-16BE -/ 3: UTF-8 -/ -/ This option has no effect when _LFN_UNICODE == 0. */ - - -#define _FS_RPATH 0 -/* This option configures support of relative path. -/ -/ 0: Disable relative path and remove related functions. -/ 1: Enable relative path. f_chdir() and f_chdrive() are available. -/ 2: f_getcwd() function is available in addition to 1. -*/ - - -/*---------------------------------------------------------------------------/ -/ Drive/Volume Configurations -/---------------------------------------------------------------------------*/ - -#define _VOLUMES 1 -/* Number of volumes (logical drives) to be used. */ - - -#define _STR_VOLUME_ID 0 -#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3" -/* _STR_VOLUME_ID switches string support of volume ID. -/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive -/ number in the path name. _VOLUME_STRS defines the drive ID strings for each -/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for -/ the drive ID strings are: A-Z and 0-9. */ - - -#define _MULTI_PARTITION 0 -/* This option switches support of multi-partition on a physical drive. -/ By default (0), each logical drive number is bound to the same physical drive -/ number and only an FAT volume found on the physical drive will be mounted. -/ When multi-partition is enabled (1), each logical drive number can be bound to -/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk() -/ funciton will be available. */ - - -#define _MIN_SS 512 -#define _MAX_SS 512 -/* These options configure the range of sector size to be supported. (512, 1024, -/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and -/ harddisk. But a larger value may be required for on-board flash memory and some -/ type of optical media. When _MAX_SS is larger than _MIN_SS, FatFs is configured -/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the -/ disk_ioctl() function. */ - - -#define _USE_TRIM 0 -/* This option switches support of ATA-TRIM. (0:Disable or 1:Enable) -/ To enable Trim function, also CTRL_TRIM command should be implemented to the -/ disk_ioctl() function. */ - - -#define _FS_NOFSINFO 0 -/* If you need to know correct free space on the FAT32 volume, set bit 0 of this -/ option, and f_getfree() function at first time after volume mount will force -/ a full FAT scan. Bit 1 controls the use of last allocated cluster number. -/ -/ bit0=0: Use free cluster count in the FSINFO if available. -/ bit0=1: Do not trust free cluster count in the FSINFO. -/ bit1=0: Use last allocated cluster number in the FSINFO if available. -/ bit1=1: Do not trust last allocated cluster number in the FSINFO. -*/ - - - -/*---------------------------------------------------------------------------/ -/ System Configurations -/---------------------------------------------------------------------------*/ - -#define _FS_TINY 0 -/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny) -/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS bytes. -/ Instead of private sector buffer eliminated from the file object, common sector -/ buffer in the file system object (FATFS) is used for the file data transfer. */ - - -#define _FS_EXFAT 0 -/* This option switches support of exFAT file system in addition to the traditional -/ FAT file system. (0:Disable or 1:Enable) To enable exFAT, also LFN must be enabled. -/ Note that enabling exFAT discards C89 compatibility. */ - - -#define _FS_NORTC 1 -#define _NORTC_MON 3 -#define _NORTC_MDAY 1 -#define _NORTC_YEAR 2016 -/* The option _FS_NORTC switches timestamp functiton. If the system does not have -/ any RTC function or valid timestamp is not needed, set _FS_NORTC = 1 to disable -/ the timestamp function. All objects modified by FatFs will have a fixed timestamp -/ defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR in local time. -/ To enable timestamp function (_FS_NORTC = 0), get_fattime() function need to be -/ added to the project to get current time form real-time clock. _NORTC_MON, -/ _NORTC_MDAY and _NORTC_YEAR have no effect. -/ These options have no effect at read-only configuration (_FS_READONLY = 1). */ - - -#define _FS_LOCK 0 -/* The option _FS_LOCK switches file lock function to control duplicated file open -/ and illegal operation to open objects. This option must be 0 when _FS_READONLY -/ is 1. -/ -/ 0: Disable file lock function. To avoid volume corruption, application program -/ should avoid illegal open, remove and rename to the open objects. -/ >0: Enable file lock function. The value defines how many files/sub-directories -/ can be opened simultaneously under file lock control. Note that the file -/ lock control is independent of re-entrancy. */ - - -#define _FS_REENTRANT 0 -#define _FS_TIMEOUT 1000 -#define _SYNC_t HANDLE -/* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs -/ module itself. Note that regardless of this option, file access to different -/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs() -/ and f_fdisk() function, are always not re-entrant. Only file/directory access -/ to the same volume is under control of this function. -/ -/ 0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect. -/ 1: Enable re-entrancy. Also user provided synchronization handlers, -/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj() -/ function, must be added to the project. Samples are available in -/ option/syscall.c. -/ -/ The _FS_TIMEOUT defines timeout period in unit of time tick. -/ The _SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*, -/ SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be -/ included somewhere in the scope of ff.c. */ - - -/*--- End of configuration options ---*/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/fatfs/mmc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/fatfs/mmc.c deleted file mode 100644 index 05f06ef1..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/fatfs/mmc.c +++ /dev/null @@ -1,3421 +0,0 @@ -/**************************************************************************************** -| Project Name: Application Development using the Olimex STM32-E407 board -| Description: Disk I/O source file for FatFS configured for an MMC card on SDIO. -| File Name: mmc.c -| Notes: The SDIO interface was derived from the SDCARD example that comes with -| the Standard Peripheral Library from STMicroelectronics as falls under -| their copyright and license. By using this file you agree to: -| -| COPYRIGHT 2013 STMicroelectronics -| -| Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); -| You may not use this file except in compliance with the License. -| You may obtain a copy of the License at: -| -| http://www.st.com/software_license_agreement_liberty_v2 -| -| Unless required by applicable law or agreed to in writing, software -| distributed under the License is distributed on an "AS IS" BASIS, -| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -| See the License for the specific language governing permissions and -| limitations under the License. -| -|****************************************************************************************/ - - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include -#include "diskio.h" -#include "stm32f4xx.h" - -/**************************************************************************************** -* Type definitions -****************************************************************************************/ -/** - * @brief SDIO specific error defines - */ -typedef enum -{ - SD_CMD_CRC_FAIL = (1), /*!< Command response received (but CRC check failed) */ - SD_DATA_CRC_FAIL = (2), /*!< Data bock sent/received (CRC check Failed) */ - SD_CMD_RSP_TIMEOUT = (3), /*!< Command response timeout */ - SD_DATA_TIMEOUT = (4), /*!< Data time out */ - SD_TX_UNDERRUN = (5), /*!< Transmit FIFO under-run */ - SD_RX_OVERRUN = (6), /*!< Receive FIFO over-run */ - SD_START_BIT_ERR = (7), /*!< Start bit not detected on all data signals in widE bus mode */ - SD_CMD_OUT_OF_RANGE = (8), /*!< CMD's argument was out of range.*/ - SD_ADDR_MISALIGNED = (9), /*!< Misaligned address */ - SD_BLOCK_LEN_ERR = (10), /*!< Transferred block length is not allowed for the card or the number of transferred bytes does not match the block length */ - SD_ERASE_SEQ_ERR = (11), /*!< An error in the sequence of erase command occurs.*/ - SD_BAD_ERASE_PARAM = (12), /*!< An Invalid selection for erase groups */ - SD_WRITE_PROT_VIOLATION = (13), /*!< Attempt to program a write protect block */ - SD_LOCK_UNLOCK_FAILED = (14), /*!< Sequence or password error has been detected in unlock command or if there was an attempt to access a locked card */ - SD_COM_CRC_FAILED = (15), /*!< CRC check of the previous command failed */ - SD_ILLEGAL_CMD = (16), /*!< Command is not legal for the card state */ - SD_CARD_ECC_FAILED = (17), /*!< Card internal ECC was applied but failed to correct the data */ - SD_CC_ERROR = (18), /*!< Internal card controller error */ - SD_GENERAL_UNKNOWN_ERROR = (19), /*!< General or Unknown error */ - SD_STREAM_READ_UNDERRUN = (20), /*!< The card could not sustain data transfer in stream read operation. */ - SD_STREAM_WRITE_OVERRUN = (21), /*!< The card could not sustain data programming in stream mode */ - SD_CID_CSD_OVERWRITE = (22), /*!< CID/CSD overwrite error */ - SD_WP_ERASE_SKIP = (23), /*!< only partial address space was erased */ - SD_CARD_ECC_DISABLED = (24), /*!< Command has been executed without using internal ECC */ - SD_ERASE_RESET = (25), /*!< Erase sequence was cleared before executing because an out of erase sequence command was received */ - SD_AKE_SEQ_ERROR = (26), /*!< Error in sequence of authentication. */ - SD_INVALID_VOLTRANGE = (27), - SD_ADDR_OUT_OF_RANGE = (28), - SD_SWITCH_ERROR = (29), - SD_SDIO_DISABLED = (30), - SD_SDIO_FUNCTION_BUSY = (31), - SD_SDIO_FUNCTION_FAILED = (32), - SD_SDIO_UNKNOWN_FUNCTION = (33), - -/** - * @brief Standard error defines - */ - SD_INTERNAL_ERROR, - SD_NOT_CONFIGURED, - SD_REQUEST_PENDING, - SD_REQUEST_NOT_APPLICABLE, - SD_INVALID_PARAMETER, - SD_UNSUPPORTED_FEATURE, - SD_UNSUPPORTED_HW, - SD_ERROR, - SD_OK = 0 -} SD_Error; - -/** - * @brief SDIO Transfer state - */ -typedef enum -{ - SD_TRANSFER_OK = 0, - SD_TRANSFER_BUSY = 1, - SD_TRANSFER_ERROR -} SDTransferState; - -/** - * @brief SD Card States - */ -typedef enum -{ - SD_CARD_READY = ((uint32_t)0x00000001), - SD_CARD_IDENTIFICATION = ((uint32_t)0x00000002), - SD_CARD_STANDBY = ((uint32_t)0x00000003), - SD_CARD_TRANSFER = ((uint32_t)0x00000004), - SD_CARD_SENDING = ((uint32_t)0x00000005), - SD_CARD_RECEIVING = ((uint32_t)0x00000006), - SD_CARD_PROGRAMMING = ((uint32_t)0x00000007), - SD_CARD_DISCONNECTED = ((uint32_t)0x00000008), - SD_CARD_ERROR = ((uint32_t)0x000000FF) -}SDCardState; - - -/** - * @brief Card Specific Data: CSD Register - */ -typedef struct -{ - __IO uint8_t CSDStruct; /*!< CSD structure */ - __IO uint8_t SysSpecVersion; /*!< System specification version */ - __IO uint8_t Reserved1; /*!< Reserved */ - __IO uint8_t TAAC; /*!< Data read access-time 1 */ - __IO uint8_t NSAC; /*!< Data read access-time 2 in CLK cycles */ - __IO uint8_t MaxBusClkFrec; /*!< Max. bus clock frequency */ - __IO uint16_t CardComdClasses; /*!< Card command classes */ - __IO uint8_t RdBlockLen; /*!< Max. read data block length */ - __IO uint8_t PartBlockRead; /*!< Partial blocks for read allowed */ - __IO uint8_t WrBlockMisalign; /*!< Write block misalignment */ - __IO uint8_t RdBlockMisalign; /*!< Read block misalignment */ - __IO uint8_t DSRImpl; /*!< DSR implemented */ - __IO uint8_t Reserved2; /*!< Reserved */ - __IO uint32_t DeviceSize; /*!< Device Size */ - __IO uint8_t MaxRdCurrentVDDMin; /*!< Max. read current @ VDD min */ - __IO uint8_t MaxRdCurrentVDDMax; /*!< Max. read current @ VDD max */ - __IO uint8_t MaxWrCurrentVDDMin; /*!< Max. write current @ VDD min */ - __IO uint8_t MaxWrCurrentVDDMax; /*!< Max. write current @ VDD max */ - __IO uint8_t DeviceSizeMul; /*!< Device size multiplier */ - __IO uint8_t EraseGrSize; /*!< Erase group size */ - __IO uint8_t EraseGrMul; /*!< Erase group size multiplier */ - __IO uint8_t WrProtectGrSize; /*!< Write protect group size */ - __IO uint8_t WrProtectGrEnable; /*!< Write protect group enable */ - __IO uint8_t ManDeflECC; /*!< Manufacturer default ECC */ - __IO uint8_t WrSpeedFact; /*!< Write speed factor */ - __IO uint8_t MaxWrBlockLen; /*!< Max. write data block length */ - __IO uint8_t WriteBlockPaPartial; /*!< Partial blocks for write allowed */ - __IO uint8_t Reserved3; /*!< Reserded */ - __IO uint8_t ContentProtectAppli; /*!< Content protection application */ - __IO uint8_t FileFormatGrouop; /*!< File format group */ - __IO uint8_t CopyFlag; /*!< Copy flag (OTP) */ - __IO uint8_t PermWrProtect; /*!< Permanent write protection */ - __IO uint8_t TempWrProtect; /*!< Temporary write protection */ - __IO uint8_t FileFormat; /*!< File Format */ - __IO uint8_t ECC; /*!< ECC code */ - __IO uint8_t CSD_CRC; /*!< CSD CRC */ - __IO uint8_t Reserved4; /*!< always 1*/ -} SD_CSD; - -/** - * @brief Card Identification Data: CID Register - */ -typedef struct -{ - __IO uint8_t ManufacturerID; /*!< ManufacturerID */ - __IO uint16_t OEM_AppliID; /*!< OEM/Application ID */ - __IO uint32_t ProdName1; /*!< Product Name part1 */ - __IO uint8_t ProdName2; /*!< Product Name part2*/ - __IO uint8_t ProdRev; /*!< Product Revision */ - __IO uint32_t ProdSN; /*!< Product Serial Number */ - __IO uint8_t Reserved1; /*!< Reserved1 */ - __IO uint16_t ManufactDate; /*!< Manufacturing Date */ - __IO uint8_t CID_CRC; /*!< CID CRC */ - __IO uint8_t Reserved2; /*!< always 1 */ -} SD_CID; - -/** - * @brief SD Card Status - */ -typedef struct -{ - __IO uint8_t DAT_BUS_WIDTH; - __IO uint8_t SECURED_MODE; - __IO uint16_t SD_CARD_TYPE; - __IO uint32_t SIZE_OF_PROTECTED_AREA; - __IO uint8_t SPEED_CLASS; - __IO uint8_t PERFORMANCE_MOVE; - __IO uint8_t AU_SIZE; - __IO uint16_t ERASE_SIZE; - __IO uint8_t ERASE_TIMEOUT; - __IO uint8_t ERASE_OFFSET; -} SD_CardStatus; - - -/** - * @brief SD Card information - */ -typedef struct -{ - SD_CSD SD_csd; - SD_CID SD_cid; - uint64_t CardCapacity; /*!< Card Capacity */ - uint32_t CardBlockSize; /*!< Card Block Size */ - uint16_t RCA; - uint8_t CardType; -} SD_CardInfo; - - -/**************************************************************************************** -* Defines -****************************************************************************************/ -/** - * @brief SDIO Commands Index - */ -#define SD_CMD_GO_IDLE_STATE ((uint8_t)0) -#define SD_CMD_SEND_OP_COND ((uint8_t)1) -#define SD_CMD_ALL_SEND_CID ((uint8_t)2) -#define SD_CMD_SET_REL_ADDR ((uint8_t)3) /*!< SDIO_SEND_REL_ADDR for SD Card */ -#define SD_CMD_SET_DSR ((uint8_t)4) -#define SD_CMD_SDIO_SEN_OP_COND ((uint8_t)5) -#define SD_CMD_HS_SWITCH ((uint8_t)6) -#define SD_CMD_SEL_DESEL_CARD ((uint8_t)7) -#define SD_CMD_HS_SEND_EXT_CSD ((uint8_t)8) -#define SD_CMD_SEND_CSD ((uint8_t)9) -#define SD_CMD_SEND_CID ((uint8_t)10) -#define SD_CMD_READ_DAT_UNTIL_STOP ((uint8_t)11) /*!< SD Card doesn't support it */ -#define SD_CMD_STOP_TRANSMISSION ((uint8_t)12) -#define SD_CMD_SEND_STATUS ((uint8_t)13) -#define SD_CMD_HS_BUSTEST_READ ((uint8_t)14) -#define SD_CMD_GO_INACTIVE_STATE ((uint8_t)15) -#define SD_CMD_SET_BLOCKLEN ((uint8_t)16) -#define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17) -#define SD_CMD_READ_MULT_BLOCK ((uint8_t)18) -#define SD_CMD_HS_BUSTEST_WRITE ((uint8_t)19) -#define SD_CMD_WRITE_DAT_UNTIL_STOP ((uint8_t)20) /*!< SD Card doesn't support it */ -#define SD_CMD_SET_BLOCK_COUNT ((uint8_t)23) /*!< SD Card doesn't support it */ -#define SD_CMD_WRITE_SINGLE_BLOCK ((uint8_t)24) -#define SD_CMD_WRITE_MULT_BLOCK ((uint8_t)25) -#define SD_CMD_PROG_CID ((uint8_t)26) /*!< reserved for manufacturers */ -#define SD_CMD_PROG_CSD ((uint8_t)27) -#define SD_CMD_SET_WRITE_PROT ((uint8_t)28) -#define SD_CMD_CLR_WRITE_PROT ((uint8_t)29) -#define SD_CMD_SEND_WRITE_PROT ((uint8_t)30) -#define SD_CMD_SD_ERASE_GRP_START ((uint8_t)32) /*!< To set the address of the first write - block to be erased. (For SD card only) */ -#define SD_CMD_SD_ERASE_GRP_END ((uint8_t)33) /*!< To set the address of the last write block of the - continuous range to be erased. (For SD card only) */ -#define SD_CMD_ERASE_GRP_START ((uint8_t)35) /*!< To set the address of the first write block to be erased. - (For MMC card only spec 3.31) */ - -#define SD_CMD_ERASE_GRP_END ((uint8_t)36) /*!< To set the address of the last write block of the - continuous range to be erased. (For MMC card only spec 3.31) */ - -#define SD_CMD_ERASE ((uint8_t)38) -#define SD_CMD_FAST_IO ((uint8_t)39) /*!< SD Card doesn't support it */ -#define SD_CMD_GO_IRQ_STATE ((uint8_t)40) /*!< SD Card doesn't support it */ -#define SD_CMD_LOCK_UNLOCK ((uint8_t)42) -#define SD_CMD_APP_CMD ((uint8_t)55) -#define SD_CMD_GEN_CMD ((uint8_t)56) -#define SD_CMD_NO_CMD ((uint8_t)64) - -/** - * @brief Following commands are SD Card Specific commands. - * SDIO_APP_CMD should be sent before sending these commands. - */ -#define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6) /*!< For SD Card only */ -#define SD_CMD_SD_APP_STAUS ((uint8_t)13) /*!< For SD Card only */ -#define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22) /*!< For SD Card only */ -#define SD_CMD_SD_APP_OP_COND ((uint8_t)41) /*!< For SD Card only */ -#define SD_CMD_SD_APP_SET_CLR_CARD_DETECT ((uint8_t)42) /*!< For SD Card only */ -#define SD_CMD_SD_APP_SEND_SCR ((uint8_t)51) /*!< For SD Card only */ -#define SD_CMD_SDIO_RW_DIRECT ((uint8_t)52) /*!< For SD I/O Card only */ -#define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53) /*!< For SD I/O Card only */ - -/** - * @brief Following commands are SD Card Specific security commands. - * SDIO_APP_CMD should be sent before sending these commands. - */ -#define SD_CMD_SD_APP_GET_MKB ((uint8_t)43) /*!< For SD Card only */ -#define SD_CMD_SD_APP_GET_MID ((uint8_t)44) /*!< For SD Card only */ -#define SD_CMD_SD_APP_SET_CER_RN1 ((uint8_t)45) /*!< For SD Card only */ -#define SD_CMD_SD_APP_GET_CER_RN2 ((uint8_t)46) /*!< For SD Card only */ -#define SD_CMD_SD_APP_SET_CER_RES2 ((uint8_t)47) /*!< For SD Card only */ -#define SD_CMD_SD_APP_GET_CER_RES1 ((uint8_t)48) /*!< For SD Card only */ -#define SD_CMD_SD_APP_SECURE_READ_MULTIPLE_BLOCK ((uint8_t)18) /*!< For SD Card only */ -#define SD_CMD_SD_APP_SECURE_WRITE_MULTIPLE_BLOCK ((uint8_t)25) /*!< For SD Card only */ -#define SD_CMD_SD_APP_SECURE_ERASE ((uint8_t)38) /*!< For SD Card only */ -#define SD_CMD_SD_APP_CHANGE_SECURE_AREA ((uint8_t)49) /*!< For SD Card only */ -#define SD_CMD_SD_APP_SECURE_WRITE_MKB ((uint8_t)48) /*!< For SD Card only */ - -/* Uncomment the following line to select the SDIO Data transfer mode */ -#define SD_POLLING_MODE ((uint32_t)0x00000002) - -#if defined (SD_POLLING_MODE) - /* do not use DMA mode if configured for polling */ - #if defined (SD_DMA_MODE) - #undef SD_DMA_MODE - #endif -#else - /* always use DMA mode if configured for interrupt mode */ - #define SD_DMA_MODE ((uint32_t)0x00000000) -#endif - -/** - * @brief SD detection on its memory slot - */ -#define SD_PRESENT ((uint8_t)0x01) -#define SD_NOT_PRESENT ((uint8_t)0x00) - -/** - * @brief Supported SD Memory Cards - */ -#define SDIO_STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000) -#define SDIO_STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001) -#define SDIO_HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002) -#define SDIO_MULTIMEDIA_CARD ((uint32_t)0x00000003) -#define SDIO_SECURE_DIGITAL_IO_CARD ((uint32_t)0x00000004) -#define SDIO_HIGH_SPEED_MULTIMEDIA_CARD ((uint32_t)0x00000005) -#define SDIO_SECURE_DIGITAL_IO_COMBO_CARD ((uint32_t)0x00000006) -#define SDIO_HIGH_CAPACITY_MMC_CARD ((uint32_t)0x00000007) - -/** - * @brief SDIO Static flags, TimeOut, FIFO Address - */ -#ifndef NULL -#define NULL ((void*)0) -#endif - -#define SDIO_STATIC_FLAGS ((uint32_t)0x000005FF) -#define SDIO_CMD0TIMEOUT ((uint32_t)0x00010000) - -/** - * @brief Mask for errors Card Status R1 (OCR Register) - */ -#define SD_OCR_ADDR_OUT_OF_RANGE ((uint32_t)0x80000000) -#define SD_OCR_ADDR_MISALIGNED ((uint32_t)0x40000000) -#define SD_OCR_BLOCK_LEN_ERR ((uint32_t)0x20000000) -#define SD_OCR_ERASE_SEQ_ERR ((uint32_t)0x10000000) -#define SD_OCR_BAD_ERASE_PARAM ((uint32_t)0x08000000) -#define SD_OCR_WRITE_PROT_VIOLATION ((uint32_t)0x04000000) -#define SD_OCR_LOCK_UNLOCK_FAILED ((uint32_t)0x01000000) -#define SD_OCR_COM_CRC_FAILED ((uint32_t)0x00800000) -#define SD_OCR_ILLEGAL_CMD ((uint32_t)0x00400000) -#define SD_OCR_CARD_ECC_FAILED ((uint32_t)0x00200000) -#define SD_OCR_CC_ERROR ((uint32_t)0x00100000) -#define SD_OCR_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00080000) -#define SD_OCR_STREAM_READ_UNDERRUN ((uint32_t)0x00040000) -#define SD_OCR_STREAM_WRITE_OVERRUN ((uint32_t)0x00020000) -#define SD_OCR_CID_CSD_OVERWRIETE ((uint32_t)0x00010000) -#define SD_OCR_WP_ERASE_SKIP ((uint32_t)0x00008000) -#define SD_OCR_CARD_ECC_DISABLED ((uint32_t)0x00004000) -#define SD_OCR_ERASE_RESET ((uint32_t)0x00002000) -#define SD_OCR_AKE_SEQ_ERROR ((uint32_t)0x00000008) -#define SD_OCR_ERRORBITS ((uint32_t)0xFDFFE008) - -/** - * @brief Masks for R6 Response - */ -#define SD_R6_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00002000) -#define SD_R6_ILLEGAL_CMD ((uint32_t)0x00004000) -#define SD_R6_COM_CRC_FAILED ((uint32_t)0x00008000) - -#define SD_VOLTAGE_WINDOW_SD ((uint32_t)0x80100000) -#define SD_HIGH_CAPACITY ((uint32_t)0x40000000) -#define SD_STD_CAPACITY ((uint32_t)0x00000000) -#define SD_CHECK_PATTERN ((uint32_t)0x000001AA) - -#define SD_MAX_VOLT_TRIAL ((uint32_t)0x0000FFFF) -#define SD_ALLZERO ((uint32_t)0x00000000) - -#define SD_WIDE_BUS_SUPPORT ((uint32_t)0x00040000) -#define SD_SINGLE_BUS_SUPPORT ((uint32_t)0x00010000) -#define SD_CARD_LOCKED ((uint32_t)0x02000000) - - -#define SD_DATATIMEOUT ((uint32_t)0xFFFFFFFF) -#define SD_0TO7BITS ((uint32_t)0x000000FF) -#define SD_8TO15BITS ((uint32_t)0x0000FF00) -#define SD_16TO23BITS ((uint32_t)0x00FF0000) -#define SD_24TO31BITS ((uint32_t)0xFF000000) -#define SD_MAX_DATA_LENGTH ((uint32_t)0x01FFFFFF) - -#define SD_HALFFIFO ((uint32_t)0x00000008) -#define SD_HALFFIFOBYTES ((uint32_t)0x00000020) - -/** - * @brief Command Class Supported - */ -#define SD_CCCC_LOCK_UNLOCK ((uint32_t)0x00000080) -#define SD_CCCC_WRITE_PROT ((uint32_t)0x00000040) -#define SD_CCCC_ERASE ((uint32_t)0x00000020) - -/** - * @brief Following commands are SD Card Specific commands. - * SDIO_APP_CMD should be sent before sending these commands. - */ -#define SDIO_SEND_IF_COND ((uint32_t)0x00000008) - -/** - * @brief SD FLASH SDIO Interface - */ -#define SD_DETECT_PIN GPIO_Pin_11 /* PC.11 */ -#define SD_DETECT_GPIO_PORT GPIOC /* GPIOC */ -#define SD_DETECT_GPIO_CLK RCC_AHB1Periph_GPIOC - -#define SDIO_FIFO_ADDRESS ((uint32_t)0x40012C80) -/** - * @brief SDIO Intialization Frequency (400KHz max) - */ -#define SDIO_INIT_CLK_DIV ((uint8_t)0x76) -/** - * @brief SDIO Data Transfer Frequency (25MHz max) - */ -#define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x0) - -#define SD_SDIO_DMA DMA2 -#define SD_SDIO_DMA_CLK RCC_AHB1Periph_DMA2 - -#define SD_SDIO_DMA_STREAM DMA2_Stream3 -#define SD_SDIO_DMA_CHANNEL DMA_Channel_4 -#define SD_SDIO_DMA_FLAG_FEIF DMA_FLAG_FEIF3 -#define SD_SDIO_DMA_FLAG_DMEIF DMA_FLAG_DMEIF3 -#define SD_SDIO_DMA_FLAG_TEIF DMA_FLAG_TEIF3 -#define SD_SDIO_DMA_FLAG_HTIF DMA_FLAG_HTIF3 -#define SD_SDIO_DMA_FLAG_TCIF DMA_FLAG_TCIF3 -#define SD_SDIO_DMA_IRQn DMA2_Stream3_IRQn -#define SD_SDIO_DMA_IRQHANDLER DMA2_Stream3_IRQHandler - -#define SD_BLOCKSIZE (512) - - -/**************************************************************************************** -* Local data declarations -****************************************************************************************/ -static uint32_t CardType = SDIO_STD_CAPACITY_SD_CARD_V1_1; -static uint32_t CSD_Tab[4], CID_Tab[4], RCA = 0; -static uint8_t SDSTATUS_Tab[64]; -static __IO uint32_t StopCondition = 0; -static __IO SD_Error TransferError = SD_OK; -static __IO uint32_t TransferEnd = 0, DMAEndOfTransfer = 1; -static SD_CardInfo SDCardInfo; -static SDIO_InitTypeDef SDIO_InitStructure; -static SDIO_CmdInitTypeDef SDIO_CmdInitStructure; -static SDIO_DataInitTypeDef SDIO_DataInitStructure; -static volatile DSTATUS Stat = STA_NOINIT; /* Disk status */ - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void SD_DeInit(void); -SD_Error SD_Init(void); -SDTransferState SD_GetStatus(void); -SDCardState SD_GetState(void); -uint8_t SD_Detect(void); -SD_Error SD_PowerON(void); -SD_Error SD_PowerOFF(void); -SD_Error SD_InitializeCards(void); -SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo); -SD_Error SD_GetCardStatus(SD_CardStatus *cardstatus); -SD_Error SD_EnableWideBusOperation(uint32_t WideMode); -SD_Error SD_SelectDeselect(uint64_t addr); -SD_Error SD_ReadBlock(uint8_t *readbuff, uint64_t ReadAddr, uint16_t BlockSize); -SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint64_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks); -SD_Error SD_WriteBlock(uint8_t *writebuff, uint64_t WriteAddr, uint16_t BlockSize); -SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint64_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks); -SDTransferState SD_GetTransferState(void); -SD_Error SD_StopTransfer(void); -SD_Error SD_Erase(uint64_t startaddr, uint64_t endaddr); -SD_Error SD_SendStatus(uint32_t *pcardstatus); -SD_Error SD_SendSDStatus(uint32_t *psdstatus); -SD_Error SD_ProcessIRQSrc(void); -void SD_ProcessDMAIRQ(void); -SD_Error SD_WaitReadOperation(void); -SD_Error SD_WaitWriteOperation(void); -static SD_Error CmdError(void); -static SD_Error CmdResp1Error(uint8_t cmd); -static SD_Error CmdResp7Error(void); -static SD_Error CmdResp3Error(void); -static SD_Error CmdResp2Error(void); -static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca); -static SD_Error SDEnWideBus(FunctionalState NewState); -static SD_Error IsCardProgramming(uint8_t *pstatus); -static SD_Error FindSCR(uint16_t rca, uint32_t *pscr); -static void SD_LowLevel_DeInit(void); -static void SD_LowLevel_Init(void); -static void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize); -static void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize); - - -/** - * @brief DeInitializes the SDIO interface. - * @param None - * @retval None - */ -void SD_DeInit(void) -{ - SD_LowLevel_DeInit(); -} - -/** - * @brief Initializes the SD Card and put it into StandBy State (Ready for data - * transfer). - * @param None - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_Init(void) -{ - __IO SD_Error errorstatus = SD_OK; - - /* SDIO Peripheral Low Level Init */ - SD_LowLevel_Init(); - - SDIO_DeInit(); - - errorstatus = SD_PowerON(); - - if (errorstatus != SD_OK) - { - /*!< CMD Response TimeOut (wait for CMDSENT flag) */ - return(errorstatus); - } - - errorstatus = SD_InitializeCards(); - - if (errorstatus != SD_OK) - { - /*!< CMD Response TimeOut (wait for CMDSENT flag) */ - return(errorstatus); - } - - /*!< Configure the SDIO peripheral */ - /*!< SDIO_CK = SDIOCLK / (SDIO_TRANSFER_CLK_DIV + 2) */ - /*!< on STM32F4xx devices, SDIOCLK is fixed to 48MHz */ - SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV; - SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; - SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable; - SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; - SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b; - SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; - SDIO_Init(&SDIO_InitStructure); - - /*----------------- Read CSD/CID MSD registers ------------------*/ - errorstatus = SD_GetCardInfo(&SDCardInfo); - - if (errorstatus == SD_OK) - { - /*----------------- Select Card --------------------------------*/ - errorstatus = SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16)); - } - - if (errorstatus == SD_OK) - { - errorstatus = SD_EnableWideBusOperation(SDIO_BusWide_4b); - } - - return(errorstatus); -} - -/** - * @brief Gets the cuurent sd card data transfer status. - * @param None - * @retval SDTransferState: Data Transfer state. - * This value can be: - * - SD_TRANSFER_OK: No data transfer is acting - * - SD_TRANSFER_BUSY: Data transfer is acting - */ -SDTransferState SD_GetStatus(void) -{ - SDCardState cardstate = SD_CARD_TRANSFER; - - cardstate = SD_GetState(); - - if (cardstate == SD_CARD_TRANSFER) - { - return(SD_TRANSFER_OK); - } - else if(cardstate == SD_CARD_ERROR) - { - return (SD_TRANSFER_ERROR); - } - else - { - return(SD_TRANSFER_BUSY); - } -} - -/** - * @brief Returns the current card's state. - * @param None - * @retval SDCardState: SD Card Error or SD Card Current State. - */ -SDCardState SD_GetState(void) -{ - uint32_t resp1 = 0; - - if(SD_Detect()== SD_PRESENT) - { - if (SD_SendStatus(&resp1) != SD_OK) - { - return SD_CARD_ERROR; - } - else - { - return (SDCardState)((resp1 >> 9) & 0x0F); - } - } - else - { - return SD_CARD_ERROR; - } -} - -/** - * @brief Detect if SD card is correctly plugged in the memory slot. - * @param None - * @retval Return if SD is detected or not - */ -uint8_t SD_Detect(void) -{ - __IO uint8_t status = SD_PRESENT; - - /*!< Check GPIO to detect SD */ - if (GPIO_ReadInputDataBit(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) == Bit_RESET) - { - status = SD_NOT_PRESENT; - } - return status; -} - -/** - * @brief Enquires cards about their operating voltage and configures - * clock controls. - * @param None - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_PowerON(void) -{ - __IO SD_Error errorstatus = SD_OK; - uint32_t response = 0, count = 0, validvoltage = 0; - uint32_t SDType = SD_STD_CAPACITY; - - /*!< Power ON Sequence -----------------------------------------------------*/ - /*!< Configure the SDIO peripheral */ - /*!< SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) */ - /*!< on STM32F4xx devices, SDIOCLK is fixed to 48MHz */ - /*!< SDIO_CK for initialization should not exceed 400 KHz */ - SDIO_InitStructure.SDIO_ClockDiv = SDIO_INIT_CLK_DIV; - SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; - SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable; - SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; - SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b; - SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; - SDIO_Init(&SDIO_InitStructure); - - /*!< Set Power State to ON */ - SDIO_SetPowerState(SDIO_PowerState_ON); - - /*!< Enable SDIO Clock */ - SDIO_ClockCmd(ENABLE); - - /*!< CMD0: GO_IDLE_STATE ---------------------------------------------------*/ - /*!< No CMD response required */ - SDIO_CmdInitStructure.SDIO_Argument = 0x0; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_GO_IDLE_STATE; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_No; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdError(); - - if (errorstatus != SD_OK) - { - /*!< CMD Response TimeOut (wait for CMDSENT flag) */ - return(errorstatus); - } - - /*!< CMD8: SEND_IF_COND ----------------------------------------------------*/ - /*!< Send CMD8 to verify SD card interface operating condition */ - /*!< Argument: - [31:12]: Reserved (shall be set to '0') - - [11:8]: Supply Voltage (VHS) 0x1 (Range: 2.7-3.6 V) - - [7:0]: Check Pattern (recommended 0xAA) */ - /*!< CMD Response: R7 */ - SDIO_CmdInitStructure.SDIO_Argument = SD_CHECK_PATTERN; - SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SEND_IF_COND; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp7Error(); - - if (errorstatus == SD_OK) - { - CardType = SDIO_STD_CAPACITY_SD_CARD_V2_0; /*!< SD Card 2.0 */ - SDType = SD_HIGH_CAPACITY; - } - else - { - /*!< CMD55 */ - SDIO_CmdInitStructure.SDIO_Argument = 0x00; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - } - /*!< CMD55 */ - SDIO_CmdInitStructure.SDIO_Argument = 0x00; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - - /*!< If errorstatus is Command TimeOut, it is a MMC card */ - /*!< If errorstatus is SD_OK it is a SD card: SD card 2.0 (voltage range mismatch) - or SD card 1.x */ - if (errorstatus == SD_OK) - { - /*!< SD CARD */ - /*!< Send ACMD41 SD_APP_OP_COND with Argument 0x80100000 */ - while ((!validvoltage) && (count < SD_MAX_VOLT_TRIAL)) - { - - /*!< SEND CMD55 APP_CMD with RCA as 0 */ - SDIO_CmdInitStructure.SDIO_Argument = 0x00; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SDType; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_OP_COND; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp3Error(); - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - response = SDIO_GetResponse(SDIO_RESP1); - validvoltage = (((response >> 31) == 1) ? 1 : 0); - count++; - } - if (count >= SD_MAX_VOLT_TRIAL) - { - errorstatus = SD_INVALID_VOLTRANGE; - return(errorstatus); - } - - if (response &= SD_HIGH_CAPACITY) - { - CardType = SDIO_HIGH_CAPACITY_SD_CARD; - } - - }/*!< else MMC Card */ - - return(errorstatus); -} - -/** - * @brief Turns the SDIO output signals off. - * @param None - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_PowerOFF(void) -{ - SD_Error errorstatus = SD_OK; - - /*!< Set Power State to OFF */ - SDIO_SetPowerState(SDIO_PowerState_OFF); - - return(errorstatus); -} - -/** - * @brief Intialises all cards or single card as the case may be Card(s) come - * into standby state. - * @param None - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_InitializeCards(void) -{ - SD_Error errorstatus = SD_OK; - uint16_t rca = 0x01; - - if (SDIO_GetPowerState() == SDIO_PowerState_OFF) - { - errorstatus = SD_REQUEST_NOT_APPLICABLE; - return(errorstatus); - } - - if (SDIO_SECURE_DIGITAL_IO_CARD != CardType) - { - /*!< Send CMD2 ALL_SEND_CID */ - SDIO_CmdInitStructure.SDIO_Argument = 0x0; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_ALL_SEND_CID; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Long; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp2Error(); - - if (SD_OK != errorstatus) - { - return(errorstatus); - } - - CID_Tab[0] = SDIO_GetResponse(SDIO_RESP1); - CID_Tab[1] = SDIO_GetResponse(SDIO_RESP2); - CID_Tab[2] = SDIO_GetResponse(SDIO_RESP3); - CID_Tab[3] = SDIO_GetResponse(SDIO_RESP4); - } - if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_SECURE_DIGITAL_IO_COMBO_CARD == CardType) - || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) - { - /*!< Send CMD3 SET_REL_ADDR with argument 0 */ - /*!< SD Card publishes its RCA. */ - SDIO_CmdInitStructure.SDIO_Argument = 0x00; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_REL_ADDR; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp6Error(SD_CMD_SET_REL_ADDR, &rca); - - if (SD_OK != errorstatus) - { - return(errorstatus); - } - } - - if (SDIO_SECURE_DIGITAL_IO_CARD != CardType) - { - RCA = rca; - - /*!< Send CMD9 SEND_CSD with argument as card's RCA */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)(rca << 16); - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_CSD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Long; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp2Error(); - - if (SD_OK != errorstatus) - { - return(errorstatus); - } - - CSD_Tab[0] = SDIO_GetResponse(SDIO_RESP1); - CSD_Tab[1] = SDIO_GetResponse(SDIO_RESP2); - CSD_Tab[2] = SDIO_GetResponse(SDIO_RESP3); - CSD_Tab[3] = SDIO_GetResponse(SDIO_RESP4); - } - - errorstatus = SD_OK; /*!< All cards get intialized */ - - return(errorstatus); -} - -/** - * @brief Returns information about specific card. - * @param cardinfo: pointer to a SD_CardInfo structure that contains all SD card - * information. - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo) -{ - SD_Error errorstatus = SD_OK; - uint8_t tmp = 0; - - cardinfo->CardType = (uint8_t)CardType; - cardinfo->RCA = (uint16_t)RCA; - - /*!< Byte 0 */ - tmp = (uint8_t)((CSD_Tab[0] & 0xFF000000) >> 24); - cardinfo->SD_csd.CSDStruct = (tmp & 0xC0) >> 6; - cardinfo->SD_csd.SysSpecVersion = (tmp & 0x3C) >> 2; - cardinfo->SD_csd.Reserved1 = tmp & 0x03; - - /*!< Byte 1 */ - tmp = (uint8_t)((CSD_Tab[0] & 0x00FF0000) >> 16); - cardinfo->SD_csd.TAAC = tmp; - - /*!< Byte 2 */ - tmp = (uint8_t)((CSD_Tab[0] & 0x0000FF00) >> 8); - cardinfo->SD_csd.NSAC = tmp; - - /*!< Byte 3 */ - tmp = (uint8_t)(CSD_Tab[0] & 0x000000FF); - cardinfo->SD_csd.MaxBusClkFrec = tmp; - - /*!< Byte 4 */ - tmp = (uint8_t)((CSD_Tab[1] & 0xFF000000) >> 24); - cardinfo->SD_csd.CardComdClasses = tmp << 4; - - /*!< Byte 5 */ - tmp = (uint8_t)((CSD_Tab[1] & 0x00FF0000) >> 16); - cardinfo->SD_csd.CardComdClasses |= (tmp & 0xF0) >> 4; - cardinfo->SD_csd.RdBlockLen = tmp & 0x0F; - - /*!< Byte 6 */ - tmp = (uint8_t)((CSD_Tab[1] & 0x0000FF00) >> 8); - cardinfo->SD_csd.PartBlockRead = (tmp & 0x80) >> 7; - cardinfo->SD_csd.WrBlockMisalign = (tmp & 0x40) >> 6; - cardinfo->SD_csd.RdBlockMisalign = (tmp & 0x20) >> 5; - cardinfo->SD_csd.DSRImpl = (tmp & 0x10) >> 4; - cardinfo->SD_csd.Reserved2 = 0; /*!< Reserved */ - - if ((CardType == SDIO_STD_CAPACITY_SD_CARD_V1_1) || (CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0)) - { - cardinfo->SD_csd.DeviceSize = (tmp & 0x03) << 10; - - /*!< Byte 7 */ - tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF); - cardinfo->SD_csd.DeviceSize |= (tmp) << 2; - - /*!< Byte 8 */ - tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24); - cardinfo->SD_csd.DeviceSize |= (tmp & 0xC0) >> 6; - - cardinfo->SD_csd.MaxRdCurrentVDDMin = (tmp & 0x38) >> 3; - cardinfo->SD_csd.MaxRdCurrentVDDMax = (tmp & 0x07); - - /*!< Byte 9 */ - tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16); - cardinfo->SD_csd.MaxWrCurrentVDDMin = (tmp & 0xE0) >> 5; - cardinfo->SD_csd.MaxWrCurrentVDDMax = (tmp & 0x1C) >> 2; - cardinfo->SD_csd.DeviceSizeMul = (tmp & 0x03) << 1; - /*!< Byte 10 */ - tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8); - cardinfo->SD_csd.DeviceSizeMul |= (tmp & 0x80) >> 7; - - cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) ; - cardinfo->CardCapacity *= (1 << (cardinfo->SD_csd.DeviceSizeMul + 2)); - cardinfo->CardBlockSize = 1 << (cardinfo->SD_csd.RdBlockLen); - cardinfo->CardCapacity *= cardinfo->CardBlockSize; - } - else if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) - { - /*!< Byte 7 */ - tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF); - cardinfo->SD_csd.DeviceSize = (tmp & 0x3F) << 16; - - /*!< Byte 8 */ - tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24); - - cardinfo->SD_csd.DeviceSize |= (tmp << 8); - - /*!< Byte 9 */ - tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16); - - cardinfo->SD_csd.DeviceSize |= (tmp); - - /*!< Byte 10 */ - tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8); - - cardinfo->CardCapacity = ((uint64_t)cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024; - cardinfo->CardBlockSize = 512; - } - - - cardinfo->SD_csd.EraseGrSize = (tmp & 0x40) >> 6; - cardinfo->SD_csd.EraseGrMul = (tmp & 0x3F) << 1; - - /*!< Byte 11 */ - tmp = (uint8_t)(CSD_Tab[2] & 0x000000FF); - cardinfo->SD_csd.EraseGrMul |= (tmp & 0x80) >> 7; - cardinfo->SD_csd.WrProtectGrSize = (tmp & 0x7F); - - /*!< Byte 12 */ - tmp = (uint8_t)((CSD_Tab[3] & 0xFF000000) >> 24); - cardinfo->SD_csd.WrProtectGrEnable = (tmp & 0x80) >> 7; - cardinfo->SD_csd.ManDeflECC = (tmp & 0x60) >> 5; - cardinfo->SD_csd.WrSpeedFact = (tmp & 0x1C) >> 2; - cardinfo->SD_csd.MaxWrBlockLen = (tmp & 0x03) << 2; - - /*!< Byte 13 */ - tmp = (uint8_t)((CSD_Tab[3] & 0x00FF0000) >> 16); - cardinfo->SD_csd.MaxWrBlockLen |= (tmp & 0xC0) >> 6; - cardinfo->SD_csd.WriteBlockPaPartial = (tmp & 0x20) >> 5; - cardinfo->SD_csd.Reserved3 = 0; - cardinfo->SD_csd.ContentProtectAppli = (tmp & 0x01); - - /*!< Byte 14 */ - tmp = (uint8_t)((CSD_Tab[3] & 0x0000FF00) >> 8); - cardinfo->SD_csd.FileFormatGrouop = (tmp & 0x80) >> 7; - cardinfo->SD_csd.CopyFlag = (tmp & 0x40) >> 6; - cardinfo->SD_csd.PermWrProtect = (tmp & 0x20) >> 5; - cardinfo->SD_csd.TempWrProtect = (tmp & 0x10) >> 4; - cardinfo->SD_csd.FileFormat = (tmp & 0x0C) >> 2; - cardinfo->SD_csd.ECC = (tmp & 0x03); - - /*!< Byte 15 */ - tmp = (uint8_t)(CSD_Tab[3] & 0x000000FF); - cardinfo->SD_csd.CSD_CRC = (tmp & 0xFE) >> 1; - cardinfo->SD_csd.Reserved4 = 1; - - - /*!< Byte 0 */ - tmp = (uint8_t)((CID_Tab[0] & 0xFF000000) >> 24); - cardinfo->SD_cid.ManufacturerID = tmp; - - /*!< Byte 1 */ - tmp = (uint8_t)((CID_Tab[0] & 0x00FF0000) >> 16); - cardinfo->SD_cid.OEM_AppliID = tmp << 8; - - /*!< Byte 2 */ - tmp = (uint8_t)((CID_Tab[0] & 0x000000FF00) >> 8); - cardinfo->SD_cid.OEM_AppliID |= tmp; - - /*!< Byte 3 */ - tmp = (uint8_t)(CID_Tab[0] & 0x000000FF); - cardinfo->SD_cid.ProdName1 = tmp << 24; - - /*!< Byte 4 */ - tmp = (uint8_t)((CID_Tab[1] & 0xFF000000) >> 24); - cardinfo->SD_cid.ProdName1 |= tmp << 16; - - /*!< Byte 5 */ - tmp = (uint8_t)((CID_Tab[1] & 0x00FF0000) >> 16); - cardinfo->SD_cid.ProdName1 |= tmp << 8; - - /*!< Byte 6 */ - tmp = (uint8_t)((CID_Tab[1] & 0x0000FF00) >> 8); - cardinfo->SD_cid.ProdName1 |= tmp; - - /*!< Byte 7 */ - tmp = (uint8_t)(CID_Tab[1] & 0x000000FF); - cardinfo->SD_cid.ProdName2 = tmp; - - /*!< Byte 8 */ - tmp = (uint8_t)((CID_Tab[2] & 0xFF000000) >> 24); - cardinfo->SD_cid.ProdRev = tmp; - - /*!< Byte 9 */ - tmp = (uint8_t)((CID_Tab[2] & 0x00FF0000) >> 16); - cardinfo->SD_cid.ProdSN = tmp << 24; - - /*!< Byte 10 */ - tmp = (uint8_t)((CID_Tab[2] & 0x0000FF00) >> 8); - cardinfo->SD_cid.ProdSN |= tmp << 16; - - /*!< Byte 11 */ - tmp = (uint8_t)(CID_Tab[2] & 0x000000FF); - cardinfo->SD_cid.ProdSN |= tmp << 8; - - /*!< Byte 12 */ - tmp = (uint8_t)((CID_Tab[3] & 0xFF000000) >> 24); - cardinfo->SD_cid.ProdSN |= tmp; - - /*!< Byte 13 */ - tmp = (uint8_t)((CID_Tab[3] & 0x00FF0000) >> 16); - cardinfo->SD_cid.Reserved1 |= (tmp & 0xF0) >> 4; - cardinfo->SD_cid.ManufactDate = (tmp & 0x0F) << 8; - - /*!< Byte 14 */ - tmp = (uint8_t)((CID_Tab[3] & 0x0000FF00) >> 8); - cardinfo->SD_cid.ManufactDate |= tmp; - - /*!< Byte 15 */ - tmp = (uint8_t)(CID_Tab[3] & 0x000000FF); - cardinfo->SD_cid.CID_CRC = (tmp & 0xFE) >> 1; - cardinfo->SD_cid.Reserved2 = 1; - - return(errorstatus); -} - -/** - * @brief Enables wide bus opeartion for the requeseted card if supported by - * card. - * @param WideMode: Specifies the SD card wide bus mode. - * This parameter can be one of the following values: - * @arg SDIO_BusWide_8b: 8-bit data transfer (Only for MMC) - * @arg SDIO_BusWide_4b: 4-bit data transfer - * @arg SDIO_BusWide_1b: 1-bit data transfer - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_GetCardStatus(SD_CardStatus *cardstatus) -{ - SD_Error errorstatus = SD_OK; - uint8_t tmp = 0; - - errorstatus = SD_SendSDStatus((uint32_t *)SDSTATUS_Tab); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - /*!< Byte 0 */ - tmp = (uint8_t)((SDSTATUS_Tab[0] & 0xC0) >> 6); - cardstatus->DAT_BUS_WIDTH = tmp; - - /*!< Byte 0 */ - tmp = (uint8_t)((SDSTATUS_Tab[0] & 0x20) >> 5); - cardstatus->SECURED_MODE = tmp; - - /*!< Byte 2 */ - tmp = (uint8_t)((SDSTATUS_Tab[2] & 0xFF)); - cardstatus->SD_CARD_TYPE = tmp << 8; - - /*!< Byte 3 */ - tmp = (uint8_t)((SDSTATUS_Tab[3] & 0xFF)); - cardstatus->SD_CARD_TYPE |= tmp; - - /*!< Byte 4 */ - tmp = (uint8_t)(SDSTATUS_Tab[4] & 0xFF); - cardstatus->SIZE_OF_PROTECTED_AREA = tmp << 24; - - /*!< Byte 5 */ - tmp = (uint8_t)(SDSTATUS_Tab[5] & 0xFF); - cardstatus->SIZE_OF_PROTECTED_AREA |= tmp << 16; - - /*!< Byte 6 */ - tmp = (uint8_t)(SDSTATUS_Tab[6] & 0xFF); - cardstatus->SIZE_OF_PROTECTED_AREA |= tmp << 8; - - /*!< Byte 7 */ - tmp = (uint8_t)(SDSTATUS_Tab[7] & 0xFF); - cardstatus->SIZE_OF_PROTECTED_AREA |= tmp; - - /*!< Byte 8 */ - tmp = (uint8_t)((SDSTATUS_Tab[8] & 0xFF)); - cardstatus->SPEED_CLASS = tmp; - - /*!< Byte 9 */ - tmp = (uint8_t)((SDSTATUS_Tab[9] & 0xFF)); - cardstatus->PERFORMANCE_MOVE = tmp; - - /*!< Byte 10 */ - tmp = (uint8_t)((SDSTATUS_Tab[10] & 0xF0) >> 4); - cardstatus->AU_SIZE = tmp; - - /*!< Byte 11 */ - tmp = (uint8_t)(SDSTATUS_Tab[11] & 0xFF); - cardstatus->ERASE_SIZE = tmp << 8; - - /*!< Byte 12 */ - tmp = (uint8_t)(SDSTATUS_Tab[12] & 0xFF); - cardstatus->ERASE_SIZE |= tmp; - - /*!< Byte 13 */ - tmp = (uint8_t)((SDSTATUS_Tab[13] & 0xFC) >> 2); - cardstatus->ERASE_TIMEOUT = tmp; - - /*!< Byte 13 */ - tmp = (uint8_t)((SDSTATUS_Tab[13] & 0x3)); - cardstatus->ERASE_OFFSET = tmp; - - return(errorstatus); -} - -/** - * @brief Enables wide bus opeartion for the requeseted card if supported by - * card. - * @param WideMode: Specifies the SD card wide bus mode. - * This parameter can be one of the following values: - * @arg SDIO_BusWide_8b: 8-bit data transfer (Only for MMC) - * @arg SDIO_BusWide_4b: 4-bit data transfer - * @arg SDIO_BusWide_1b: 1-bit data transfer - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_EnableWideBusOperation(uint32_t WideMode) -{ - SD_Error errorstatus = SD_OK; - - /*!< MMC Card doesn't support this feature */ - if (SDIO_MULTIMEDIA_CARD == CardType) - { - errorstatus = SD_UNSUPPORTED_FEATURE; - return(errorstatus); - } - else if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) - { - if (SDIO_BusWide_8b == WideMode) - { - errorstatus = SD_UNSUPPORTED_FEATURE; - return(errorstatus); - } - else if (SDIO_BusWide_4b == WideMode) - { - errorstatus = SDEnWideBus(ENABLE); - - if (SD_OK == errorstatus) - { - /*!< Configure the SDIO peripheral */ - SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV; - SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; - SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable; - SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; - SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_4b; - SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; - SDIO_Init(&SDIO_InitStructure); - } - } - else - { - errorstatus = SDEnWideBus(DISABLE); - - if (SD_OK == errorstatus) - { - /*!< Configure the SDIO peripheral */ - SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV; - SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; - SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable; - SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; - SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b; - SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; - SDIO_Init(&SDIO_InitStructure); - } - } - } - - return(errorstatus); -} - -/** - * @brief Selects od Deselects the corresponding card. - * @param addr: Address of the Card to be selected. - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_SelectDeselect(uint64_t addr) -{ - SD_Error errorstatus = SD_OK; - - /*!< Send CMD7 SDIO_SEL_DESEL_CARD */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)addr; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEL_DESEL_CARD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SEL_DESEL_CARD); - - return(errorstatus); -} - -/** - * @brief Allows to read one block from a specified address in a card. The Data - * transfer can be managed by DMA mode or Polling mode. - * @note This operation should be followed by two functions to check if the - * DMA Controller and SD Card status. - * - SD_ReadWaitOperation(): this function insure that the DMA - * controller has finished all data transfer. - * - SD_GetStatus(): to check that the SD Card has finished the - * data transfer and it is ready for data. - * @param readbuff: pointer to the buffer that will contain the received data - * @param ReadAddr: Address from where data are to be read. - * @param BlockSize: the SD card Data block size. The Block size should be 512. - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_ReadBlock(uint8_t *readbuff, uint64_t ReadAddr, uint16_t BlockSize) -{ - SD_Error errorstatus = SD_OK; -#if defined (SD_POLLING_MODE) - uint32_t count = 0, *tempbuff = (uint32_t *)readbuff; -#endif - - TransferError = SD_OK; - TransferEnd = 0; - StopCondition = 0; - - SDIO->DCTRL = 0x0; - -#if defined (SD_DMA_MODE) - SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_STBITERR, ENABLE); - SDIO_DMACmd(ENABLE); - SD_LowLevel_DMA_RxConfig((uint32_t *)readbuff, BlockSize); -#endif - - if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) - { - BlockSize = 512; - ReadAddr /= 512; - } - - /* Set Block Size for Card */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - uint32_t timeout = SDIO_CMD0TIMEOUT; /*!< 10000 */ - - while ((timeout > 0) && (SDIO_GetFlagStatus(SDIO_FLAG_CMDSENT) == RESET)) - { - timeout--; - } - - errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - - if (SD_OK != errorstatus) - { - return(errorstatus); - } - - SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; - SDIO_DataInitStructure.SDIO_DataLength = BlockSize; - SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; - SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; - SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; - SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; - SDIO_DataConfig(&SDIO_DataInitStructure); - - /*!< Send CMD17 READ_SINGLE_BLOCK */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)ReadAddr; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_READ_SINGLE_BLOCK; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_READ_SINGLE_BLOCK); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - -#if defined (SD_POLLING_MODE) - /*!< In case of single block transfer, no need of stop transfer at all.*/ - /*!< Polling mode */ - while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))) - { - if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET) - { - for (count = 0; count < 8; count++) - { - *(tempbuff + count) = SDIO_ReadData(); - } - tempbuff += 8; - } - } - - if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); - errorstatus = SD_DATA_TIMEOUT; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); - errorstatus = SD_DATA_CRC_FAIL; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_RXOVERR); - errorstatus = SD_RX_OVERRUN; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_STBITERR); - errorstatus = SD_START_BIT_ERR; - return(errorstatus); - } - count = SD_DATATIMEOUT; - while ((SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET) && (count > 0)) - { - *tempbuff = SDIO_ReadData(); - tempbuff++; - count--; - } - - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - -#endif - DMAEndOfTransfer = 0; - - return(errorstatus); -} - -/** - * @brief Allows to read blocks from a specified address in a card. The Data - * transfer can be managed by DMA mode or Polling mode. - * @note This operation should be followed by two functions to check if the - * DMA Controller and SD Card status. - * - SD_ReadWaitOperation(): this function insure that the DMA - * controller has finished all data transfer. - * - SD_GetStatus(): to check that the SD Card has finished the - * data transfer and it is ready for data. - * @param readbuff: pointer to the buffer that will contain the received data. - * @param ReadAddr: Address from where data are to be read. - * @param BlockSize: the SD card Data block size. The Block size should be 512. - * @param NumberOfBlocks: number of blocks to be read. - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint64_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks) -{ - SD_Error errorstatus = SD_OK; - TransferError = SD_OK; - TransferEnd = 0; - StopCondition = 1; - - SDIO->DCTRL = 0x0; - - SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_STBITERR, ENABLE); - SD_LowLevel_DMA_RxConfig((uint32_t *)readbuff, (NumberOfBlocks * BlockSize)); - SDIO_DMACmd(ENABLE); - - if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) - { - BlockSize = 512; - ReadAddr /= 512; - } - - /*!< Set Block Size for Card */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - uint32_t timeout = SDIO_CMD0TIMEOUT; /*!< 10000 */ - - while ((timeout > 0) && (SDIO_GetFlagStatus(SDIO_FLAG_CMDSENT) == RESET)) - { - timeout--; - } - - errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - - if (SD_OK != errorstatus) - { - return(errorstatus); - } - - SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; - SDIO_DataInitStructure.SDIO_DataLength = NumberOfBlocks * BlockSize; - SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; - SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; - SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; - SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; - SDIO_DataConfig(&SDIO_DataInitStructure); - - /*!< Send CMD18 READ_MULT_BLOCK with argument data address */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)ReadAddr; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_READ_MULT_BLOCK; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_READ_MULT_BLOCK); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - DMAEndOfTransfer = 0; - - return(errorstatus); -} - -/** - * @brief This function waits until the SDIO DMA data transfer is finished. - * This function should be called after SDIO_ReadMultiBlocks() function - * to insure that all data sent by the card are already transferred by - * the DMA controller. - * @param None. - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_WaitReadOperation(void) -{ - SD_Error errorstatus = SD_OK; - uint32_t timeout; - - timeout = SD_DATATIMEOUT; - - while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0)) - { - timeout--; - } - - DMAEndOfTransfer = 0x00; - - timeout = SD_DATATIMEOUT; - - while(((SDIO->STA & SDIO_FLAG_RXACT)) && (timeout > 0)) - { - timeout--; - } - - if (StopCondition == 1) - { - errorstatus = SD_StopTransfer(); - StopCondition = 0; - } - - if ((timeout == 0) && (errorstatus == SD_OK)) - { - errorstatus = SD_DATA_TIMEOUT; - } - - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - if (TransferError != SD_OK) - { - return(TransferError); - } - else - { - return(errorstatus); - } -} - -/** - * @brief Allows to write one block starting from a specified address in a card. - * The Data transfer can be managed by DMA mode or Polling mode. - * @note This operation should be followed by two functions to check if the - * DMA Controller and SD Card status. - * - SD_ReadWaitOperation(): this function insure that the DMA - * controller has finished all data transfer. - * - SD_GetStatus(): to check that the SD Card has finished the - * data transfer and it is ready for data. - * @param writebuff: pointer to the buffer that contain the data to be transferred. - * @param WriteAddr: Address from where data are to be read. - * @param BlockSize: the SD card Data block size. The Block size should be 512. - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_WriteBlock(uint8_t *writebuff, uint64_t WriteAddr, uint16_t BlockSize) -{ - SD_Error errorstatus = SD_OK; - -#if defined (SD_POLLING_MODE) - uint32_t bytestransferred = 0, count = 0, restwords = 0; - uint32_t *tempbuff = (uint32_t *)writebuff; -#endif - - TransferError = SD_OK; - TransferEnd = 0; - StopCondition = 0; - - SDIO->DCTRL = 0x0; - -#if defined (SD_DMA_MODE) - SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_STBITERR, ENABLE); - SD_LowLevel_DMA_TxConfig((uint32_t *)writebuff, BlockSize); - SDIO_DMACmd(ENABLE); -#endif - - if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) - { - BlockSize = 512; - WriteAddr /= 512; - } - - /* Set Block Size for Card */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - - if (SD_OK != errorstatus) - { - return(errorstatus); - } - - /*!< Send CMD24 WRITE_SINGLE_BLOCK */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)WriteAddr; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_WRITE_SINGLE_BLOCK; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_WRITE_SINGLE_BLOCK); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; - SDIO_DataInitStructure.SDIO_DataLength = BlockSize; - SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; - SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToCard; - SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; - SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; - SDIO_DataConfig(&SDIO_DataInitStructure); - - /*!< In case of single data block transfer no need of stop command at all */ -#if defined (SD_POLLING_MODE) - while (!(SDIO->STA & (SDIO_FLAG_DBCKEND | SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_STBITERR))) - { - if (SDIO_GetFlagStatus(SDIO_FLAG_TXFIFOHE) != RESET) - { - if ((512 - bytestransferred) < 32) - { - restwords = ((512 - bytestransferred) % 4 == 0) ? ((512 - bytestransferred) / 4) : (( 512 - bytestransferred) / 4 + 1); - for (count = 0; count < restwords; count++, tempbuff++, bytestransferred += 4) - { - SDIO_WriteData(*tempbuff); - } - } - else - { - for (count = 0; count < 8; count++) - { - SDIO_WriteData(*(tempbuff + count)); - } - tempbuff += 8; - bytestransferred += 32; - } - } - } - if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); - errorstatus = SD_DATA_TIMEOUT; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); - errorstatus = SD_DATA_CRC_FAIL; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_TXUNDERR) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_TXUNDERR); - errorstatus = SD_TX_UNDERRUN; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_STBITERR); - errorstatus = SD_START_BIT_ERR; - return(errorstatus); - } - -#endif - - DMAEndOfTransfer = 0; - return(errorstatus); -} - -/** - * @brief Allows to write blocks starting from a specified address in a card. - * The Data transfer can be managed by DMA mode only. - * @note This operation should be followed by two functions to check if the - * DMA Controller and SD Card status. - * - SD_ReadWaitOperation(): this function insure that the DMA - * controller has finished all data transfer. - * - SD_GetStatus(): to check that the SD Card has finished the - * data transfer and it is ready for data. - * @param WriteAddr: Address from where data are to be read. - * @param writebuff: pointer to the buffer that contain the data to be transferred. - * @param BlockSize: the SD card Data block size. The Block size should be 512. - * @param NumberOfBlocks: number of blocks to be written. - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint64_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks) -{ - SD_Error errorstatus = SD_OK; - - TransferError = SD_OK; - TransferEnd = 0; - StopCondition = 1; - SDIO->DCTRL = 0x0; - - SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_STBITERR, ENABLE); - SD_LowLevel_DMA_TxConfig((uint32_t *)writebuff, (NumberOfBlocks * BlockSize)); - SDIO_DMACmd(ENABLE); - - if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) - { - BlockSize = 512; - WriteAddr /= 512; - } - - /* Set Block Size for Card */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - - if (SD_OK != errorstatus) - { - return(errorstatus); - } - - /*!< To improve performance */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) (RCA << 16); - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - - errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - /*!< To improve performance */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)NumberOfBlocks; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCK_COUNT; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SET_BLOCK_COUNT); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - - /*!< Send CMD25 WRITE_MULT_BLOCK with argument data address */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)WriteAddr; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_WRITE_MULT_BLOCK; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_WRITE_MULT_BLOCK); - - if (SD_OK != errorstatus) - { - return(errorstatus); - } - - SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; - SDIO_DataInitStructure.SDIO_DataLength = NumberOfBlocks * BlockSize; - SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; - SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToCard; - SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; - SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; - SDIO_DataConfig(&SDIO_DataInitStructure); - - DMAEndOfTransfer = 0; - return(errorstatus); -} - -/** - * @brief This function waits until the SDIO DMA data transfer is finished. - * This function should be called after SDIO_WriteBlock() and - * SDIO_WriteMultiBlocks() function to insure that all data sent by the - * card are already transferred by the DMA controller. - * @param None. - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_WaitWriteOperation(void) -{ - SD_Error errorstatus = SD_OK; - uint32_t timeout; - - timeout = SD_DATATIMEOUT; - - while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0)) - { - if (DMA_GetITStatus(DMA2_Stream3, DMA_IT_TCIF3) == 1) - { - DMAEndOfTransfer = 1; - /// clear the interrupt bits - DMA_ClearITPendingBit(DMA2_Stream3, DMA_IT_TCIF3); - } - timeout--; - } - - timeout = SD_DATATIMEOUT; - - while((SDIO->DCOUNT != 0) && (timeout > 0)) - { - timeout--; - } - - if (StopCondition == 1) - { - errorstatus = SD_StopTransfer(); - StopCondition = 0; - } - - if ((timeout == 0) && (errorstatus == SD_OK)) - { - errorstatus = SD_DATA_TIMEOUT; - } - - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - if (TransferError != SD_OK) - { - return(TransferError); - } - else - { - return(errorstatus); - } -} - -/** - * @brief Gets the cuurent data transfer state. - * @param None - * @retval SDTransferState: Data Transfer state. - * This value can be: - * - SD_TRANSFER_OK: No data transfer is acting - * - SD_TRANSFER_BUSY: Data transfer is acting - */ -SDTransferState SD_GetTransferState(void) -{ - if (SDIO->STA & (SDIO_FLAG_TXACT | SDIO_FLAG_RXACT)) - { - return(SD_TRANSFER_BUSY); - } - else - { - return(SD_TRANSFER_OK); - } -} - -/** - * @brief Aborts an ongoing data transfer. - * @param None - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_StopTransfer(void) -{ - SD_Error errorstatus = SD_OK; - - /*!< Send CMD12 STOP_TRANSMISSION */ - SDIO_CmdInitStructure.SDIO_Argument = 0x0; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_STOP_TRANSMISSION; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_STOP_TRANSMISSION); - - return(errorstatus); -} - -/** - * @brief Allows to erase memory area specified for the given card. - * @param startaddr: the start address. - * @param endaddr: the end address. - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_Erase(uint64_t startaddr, uint64_t endaddr) -{ - SD_Error errorstatus = SD_OK; - uint32_t delay = 0; - __IO uint32_t maxdelay = 0; - uint8_t cardstate = 0; - - /*!< Check if the card coomnd class supports erase command */ - if (((CSD_Tab[1] >> 20) & SD_CCCC_ERASE) == 0) - { - errorstatus = SD_REQUEST_NOT_APPLICABLE; - return(errorstatus); - } - - maxdelay = 120000 / ((SDIO->CLKCR & 0xFF) + 2); - - if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) - { - errorstatus = SD_LOCK_UNLOCK_FAILED; - return(errorstatus); - } - - if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) - { - startaddr /= 512; - endaddr /= 512; - } - - /*!< According to sd-card spec 1.0 ERASE_GROUP_START (CMD32) and erase_group_end(CMD33) */ - if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) - { - /*!< Send CMD32 SD_ERASE_GRP_START with argument as addr */ - SDIO_CmdInitStructure.SDIO_Argument =(uint32_t)startaddr; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_START; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_START); - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - /*!< Send CMD33 SD_ERASE_GRP_END with argument as addr */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)endaddr; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_END; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_END); - if (errorstatus != SD_OK) - { - return(errorstatus); - } - } - - /*!< Send CMD38 ERASE */ - SDIO_CmdInitStructure.SDIO_Argument = 0; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_ERASE; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_ERASE); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - for (delay = 0; delay < maxdelay; delay++) - {} - - /*!< Wait till the card is in programming state */ - errorstatus = IsCardProgramming(&cardstate); - delay = SD_DATATIMEOUT; - while ((delay > 0) && (errorstatus == SD_OK) && ((SD_CARD_PROGRAMMING == cardstate) || (SD_CARD_RECEIVING == cardstate))) - { - errorstatus = IsCardProgramming(&cardstate); - delay--; - } - - return(errorstatus); -} - -/** - * @brief Returns the current card's status. - * @param pcardstatus: pointer to the buffer that will contain the SD card - * status (Card Status register). - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_SendStatus(uint32_t *pcardstatus) -{ - SD_Error errorstatus = SD_OK; - - if (pcardstatus == NULL) - { - errorstatus = SD_INVALID_PARAMETER; - return(errorstatus); - } - - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_STATUS; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SEND_STATUS); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - *pcardstatus = SDIO_GetResponse(SDIO_RESP1); - - return(errorstatus); -} - -/** - * @brief Returns the current SD card's status. - * @param psdstatus: pointer to the buffer that will contain the SD card status - * (SD Status register). - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_SendSDStatus(uint32_t *psdstatus) -{ - SD_Error errorstatus = SD_OK; - uint32_t count = 0; - - if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) - { - errorstatus = SD_LOCK_UNLOCK_FAILED; - return(errorstatus); - } - - /*!< Set block size for card if it is not equal to current block size for card. */ - SDIO_CmdInitStructure.SDIO_Argument = 64; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - /*!< CMD55 */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; - SDIO_DataInitStructure.SDIO_DataLength = 64; - SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_64b; - SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; - SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; - SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; - SDIO_DataConfig(&SDIO_DataInitStructure); - - /*!< Send ACMD13 SD_APP_STAUS with argument as card's RCA.*/ - SDIO_CmdInitStructure.SDIO_Argument = 0; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_STAUS; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - errorstatus = CmdResp1Error(SD_CMD_SD_APP_STAUS); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))) - { - if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET) - { - for (count = 0; count < 8; count++) - { - *(psdstatus + count) = SDIO_ReadData(); - } - psdstatus += 8; - } - } - - if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); - errorstatus = SD_DATA_TIMEOUT; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); - errorstatus = SD_DATA_CRC_FAIL; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_RXOVERR); - errorstatus = SD_RX_OVERRUN; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_STBITERR); - errorstatus = SD_START_BIT_ERR; - return(errorstatus); - } - - count = SD_DATATIMEOUT; - while ((SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET) && (count > 0)) - { - *psdstatus = SDIO_ReadData(); - psdstatus++; - count--; - } - /*!< Clear all the static status flags*/ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - return(errorstatus); -} - -/** - * @brief Allows to process all the interrupts that are high. - * @param None - * @retval SD_Error: SD Card Error code. - */ -SD_Error SD_ProcessIRQSrc(void) -{ - if (SDIO_GetITStatus(SDIO_IT_DATAEND) != RESET) - { - TransferError = SD_OK; - SDIO_ClearITPendingBit(SDIO_IT_DATAEND); - TransferEnd = 1; - } - else if (SDIO_GetITStatus(SDIO_IT_DCRCFAIL) != RESET) - { - SDIO_ClearITPendingBit(SDIO_IT_DCRCFAIL); - TransferError = SD_DATA_CRC_FAIL; - } - else if (SDIO_GetITStatus(SDIO_IT_DTIMEOUT) != RESET) - { - SDIO_ClearITPendingBit(SDIO_IT_DTIMEOUT); - TransferError = SD_DATA_TIMEOUT; - } - else if (SDIO_GetITStatus(SDIO_IT_RXOVERR) != RESET) - { - SDIO_ClearITPendingBit(SDIO_IT_RXOVERR); - TransferError = SD_RX_OVERRUN; - } - else if (SDIO_GetITStatus(SDIO_IT_TXUNDERR) != RESET) - { - SDIO_ClearITPendingBit(SDIO_IT_TXUNDERR); - TransferError = SD_TX_UNDERRUN; - } - else if (SDIO_GetITStatus(SDIO_IT_STBITERR) != RESET) - { - SDIO_ClearITPendingBit(SDIO_IT_STBITERR); - TransferError = SD_START_BIT_ERR; - } - - SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | - SDIO_IT_TXFIFOHE | SDIO_IT_RXFIFOHF | SDIO_IT_TXUNDERR | - SDIO_IT_RXOVERR | SDIO_IT_STBITERR, DISABLE); - return(TransferError); -} - -/** - * @brief This function waits until the SDIO DMA data transfer is finished. - * @param None. - * @retval None. - */ -void SD_ProcessDMAIRQ(void) -{ - if(DMA2->LISR & SD_SDIO_DMA_FLAG_TCIF) - { - DMAEndOfTransfer = 0x01; - DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_TCIF|SD_SDIO_DMA_FLAG_FEIF); - } -} - -/** - * @brief Checks for error conditions for CMD0. - * @param None - * @retval SD_Error: SD Card Error code. - */ -static SD_Error CmdError(void) -{ - SD_Error errorstatus = SD_OK; - uint32_t timeout; - - timeout = SDIO_CMD0TIMEOUT; /*!< 10000 */ - - while ((timeout > 0) && (SDIO_GetFlagStatus(SDIO_FLAG_CMDSENT) == RESET)) - { - timeout--; - } - - if (timeout == 0) - { - errorstatus = SD_CMD_RSP_TIMEOUT; - return(errorstatus); - } - - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - return(errorstatus); -} - -/** - * @brief Checks for error conditions for R7 response. - * @param None - * @retval SD_Error: SD Card Error code. - */ -static SD_Error CmdResp7Error(void) -{ - SD_Error errorstatus = SD_OK; - uint32_t status; - uint32_t timeout = SDIO_CMD0TIMEOUT; - - status = SDIO->STA; - - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)) && (timeout > 0)) - { - timeout--; - status = SDIO->STA; - } - - if ((timeout == 0) || (status & SDIO_FLAG_CTIMEOUT)) - { - /*!< Card is not V2.0 complient or card does not support the set voltage range */ - errorstatus = SD_CMD_RSP_TIMEOUT; - SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); - } - - if (status & SDIO_FLAG_CMDREND) - { - /*!< Card is SD V2.0 compliant */ - errorstatus = SD_OK; - SDIO_ClearFlag(SDIO_FLAG_CMDREND); - return(errorstatus); - } - return(errorstatus); -} - -/** - * @brief Checks for error conditions for R1 response. - * @param cmd: The sent command index. - * @retval SD_Error: SD Card Error code. - */ -static SD_Error CmdResp1Error(uint8_t cmd) -{ - SD_Error errorstatus = SD_OK; - uint32_t status; - uint32_t response_r1; - - status = SDIO->STA; - - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) - { - status = SDIO->STA; - } - - if (status & SDIO_FLAG_CTIMEOUT) - { - errorstatus = SD_CMD_RSP_TIMEOUT; - SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); - } - else if (status & SDIO_FLAG_CCRCFAIL) - { - errorstatus = SD_CMD_CRC_FAIL; - SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); - return(errorstatus); - } - - /*!< Check response received is of desired command */ - if (SDIO_GetCommandResponse() != cmd) - { - errorstatus = SD_ILLEGAL_CMD; - return(errorstatus); - } - - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - /*!< We have received response, retrieve it for analysis */ - response_r1 = SDIO_GetResponse(SDIO_RESP1); - - if ((response_r1 & SD_OCR_ERRORBITS) == SD_ALLZERO) - { - return(errorstatus); - } - - if (response_r1 & SD_OCR_ADDR_OUT_OF_RANGE) - { - return(SD_ADDR_OUT_OF_RANGE); - } - - if (response_r1 & SD_OCR_ADDR_MISALIGNED) - { - return(SD_ADDR_MISALIGNED); - } - - if (response_r1 & SD_OCR_BLOCK_LEN_ERR) - { - return(SD_BLOCK_LEN_ERR); - } - - if (response_r1 & SD_OCR_ERASE_SEQ_ERR) - { - return(SD_ERASE_SEQ_ERR); - } - - if (response_r1 & SD_OCR_BAD_ERASE_PARAM) - { - return(SD_BAD_ERASE_PARAM); - } - - if (response_r1 & SD_OCR_WRITE_PROT_VIOLATION) - { - return(SD_WRITE_PROT_VIOLATION); - } - - if (response_r1 & SD_OCR_LOCK_UNLOCK_FAILED) - { - return(SD_LOCK_UNLOCK_FAILED); - } - - if (response_r1 & SD_OCR_COM_CRC_FAILED) - { - return(SD_COM_CRC_FAILED); - } - - if (response_r1 & SD_OCR_ILLEGAL_CMD) - { - return(SD_ILLEGAL_CMD); - } - - if (response_r1 & SD_OCR_CARD_ECC_FAILED) - { - return(SD_CARD_ECC_FAILED); - } - - if (response_r1 & SD_OCR_CC_ERROR) - { - return(SD_CC_ERROR); - } - - if (response_r1 & SD_OCR_GENERAL_UNKNOWN_ERROR) - { - return(SD_GENERAL_UNKNOWN_ERROR); - } - - if (response_r1 & SD_OCR_STREAM_READ_UNDERRUN) - { - return(SD_STREAM_READ_UNDERRUN); - } - - if (response_r1 & SD_OCR_STREAM_WRITE_OVERRUN) - { - return(SD_STREAM_WRITE_OVERRUN); - } - - if (response_r1 & SD_OCR_CID_CSD_OVERWRIETE) - { - return(SD_CID_CSD_OVERWRITE); - } - - if (response_r1 & SD_OCR_WP_ERASE_SKIP) - { - return(SD_WP_ERASE_SKIP); - } - - if (response_r1 & SD_OCR_CARD_ECC_DISABLED) - { - return(SD_CARD_ECC_DISABLED); - } - - if (response_r1 & SD_OCR_ERASE_RESET) - { - return(SD_ERASE_RESET); - } - - if (response_r1 & SD_OCR_AKE_SEQ_ERROR) - { - return(SD_AKE_SEQ_ERROR); - } - return(errorstatus); -} - -/** - * @brief Checks for error conditions for R3 (OCR) response. - * @param None - * @retval SD_Error: SD Card Error code. - */ -static SD_Error CmdResp3Error(void) -{ - SD_Error errorstatus = SD_OK; - uint32_t status; - - status = SDIO->STA; - - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) - { - status = SDIO->STA; - } - - if (status & SDIO_FLAG_CTIMEOUT) - { - errorstatus = SD_CMD_RSP_TIMEOUT; - SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); - } - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - return(errorstatus); -} - -/** - * @brief Checks for error conditions for R2 (CID or CSD) response. - * @param None - * @retval SD_Error: SD Card Error code. - */ -static SD_Error CmdResp2Error(void) -{ - SD_Error errorstatus = SD_OK; - uint32_t status; - - status = SDIO->STA; - - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND))) - { - status = SDIO->STA; - } - - if (status & SDIO_FLAG_CTIMEOUT) - { - errorstatus = SD_CMD_RSP_TIMEOUT; - SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); - } - else if (status & SDIO_FLAG_CCRCFAIL) - { - errorstatus = SD_CMD_CRC_FAIL; - SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); - return(errorstatus); - } - - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - return(errorstatus); -} - -/** - * @brief Checks for error conditions for R6 (RCA) response. - * @param cmd: The sent command index. - * @param prca: pointer to the variable that will contain the SD card relative - * address RCA. - * @retval SD_Error: SD Card Error code. - */ -static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca) -{ - SD_Error errorstatus = SD_OK; - uint32_t status; - uint32_t response_r1; - - status = SDIO->STA; - - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND))) - { - status = SDIO->STA; - } - - if (status & SDIO_FLAG_CTIMEOUT) - { - errorstatus = SD_CMD_RSP_TIMEOUT; - SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); - } - else if (status & SDIO_FLAG_CCRCFAIL) - { - errorstatus = SD_CMD_CRC_FAIL; - SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); - return(errorstatus); - } - - /*!< Check response received is of desired command */ - if (SDIO_GetCommandResponse() != cmd) - { - errorstatus = SD_ILLEGAL_CMD; - return(errorstatus); - } - - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - /*!< We have received response, retrieve it. */ - response_r1 = SDIO_GetResponse(SDIO_RESP1); - - if (SD_ALLZERO == (response_r1 & (SD_R6_GENERAL_UNKNOWN_ERROR | SD_R6_ILLEGAL_CMD | SD_R6_COM_CRC_FAILED))) - { - *prca = (uint16_t) (response_r1 >> 16); - return(errorstatus); - } - - if (response_r1 & SD_R6_GENERAL_UNKNOWN_ERROR) - { - return(SD_GENERAL_UNKNOWN_ERROR); - } - - if (response_r1 & SD_R6_ILLEGAL_CMD) - { - return(SD_ILLEGAL_CMD); - } - - if (response_r1 & SD_R6_COM_CRC_FAILED) - { - return(SD_COM_CRC_FAILED); - } - - return(errorstatus); -} - -/** - * @brief Enables or disables the SDIO wide bus mode. - * @param NewState: new state of the SDIO wide bus mode. - * This parameter can be: ENABLE or DISABLE. - * @retval SD_Error: SD Card Error code. - */ -static SD_Error SDEnWideBus(FunctionalState NewState) -{ - SD_Error errorstatus = SD_OK; - - uint32_t scr[2] = {0, 0}; - - if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) - { - errorstatus = SD_LOCK_UNLOCK_FAILED; - return(errorstatus); - } - - /*!< Get SCR Register */ - errorstatus = FindSCR(RCA, scr); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - /*!< If wide bus operation to be enabled */ - if (NewState == ENABLE) - { - /*!< If requested card supports wide bus operation */ - if ((scr[1] & SD_WIDE_BUS_SUPPORT) != SD_ALLZERO) - { - /*!< Send CMD55 APP_CMD with argument as card's RCA.*/ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - /*!< Send ACMD6 APP_CMD with argument as 2 for wide bus mode */ - SDIO_CmdInitStructure.SDIO_Argument = 0x2; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_SD_SET_BUSWIDTH; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_APP_SD_SET_BUSWIDTH); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - return(errorstatus); - } - else - { - errorstatus = SD_REQUEST_NOT_APPLICABLE; - return(errorstatus); - } - } /*!< If wide bus operation to be disabled */ - else - { - /*!< If requested card supports 1 bit mode operation */ - if ((scr[1] & SD_SINGLE_BUS_SUPPORT) != SD_ALLZERO) - { - /*!< Send CMD55 APP_CMD with argument as card's RCA.*/ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - - errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - /*!< Send ACMD6 APP_CMD with argument as 2 for wide bus mode */ - SDIO_CmdInitStructure.SDIO_Argument = 0x00; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_SD_SET_BUSWIDTH; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_APP_SD_SET_BUSWIDTH); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - return(errorstatus); - } - else - { - errorstatus = SD_REQUEST_NOT_APPLICABLE; - return(errorstatus); - } - } -} - -/** - * @brief Checks if the SD card is in programming state. - * @param pstatus: pointer to the variable that will contain the SD card state. - * @retval SD_Error: SD Card Error code. - */ -static SD_Error IsCardProgramming(uint8_t *pstatus) -{ - SD_Error errorstatus = SD_OK; - __IO uint32_t respR1 = 0, status = 0; - - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_STATUS; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - status = SDIO->STA; - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) - { - status = SDIO->STA; - } - - if (status & SDIO_FLAG_CTIMEOUT) - { - errorstatus = SD_CMD_RSP_TIMEOUT; - SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); - } - else if (status & SDIO_FLAG_CCRCFAIL) - { - errorstatus = SD_CMD_CRC_FAIL; - SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); - return(errorstatus); - } - - status = (uint32_t)SDIO_GetCommandResponse(); - - /*!< Check response received is of desired command */ - if (status != SD_CMD_SEND_STATUS) - { - errorstatus = SD_ILLEGAL_CMD; - return(errorstatus); - } - - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - - /*!< We have received response, retrieve it for analysis */ - respR1 = SDIO_GetResponse(SDIO_RESP1); - - /*!< Find out card status */ - *pstatus = (uint8_t) ((respR1 >> 9) & 0x0000000F); - - if ((respR1 & SD_OCR_ERRORBITS) == SD_ALLZERO) - { - return(errorstatus); - } - - if (respR1 & SD_OCR_ADDR_OUT_OF_RANGE) - { - return(SD_ADDR_OUT_OF_RANGE); - } - - if (respR1 & SD_OCR_ADDR_MISALIGNED) - { - return(SD_ADDR_MISALIGNED); - } - - if (respR1 & SD_OCR_BLOCK_LEN_ERR) - { - return(SD_BLOCK_LEN_ERR); - } - - if (respR1 & SD_OCR_ERASE_SEQ_ERR) - { - return(SD_ERASE_SEQ_ERR); - } - - if (respR1 & SD_OCR_BAD_ERASE_PARAM) - { - return(SD_BAD_ERASE_PARAM); - } - - if (respR1 & SD_OCR_WRITE_PROT_VIOLATION) - { - return(SD_WRITE_PROT_VIOLATION); - } - - if (respR1 & SD_OCR_LOCK_UNLOCK_FAILED) - { - return(SD_LOCK_UNLOCK_FAILED); - } - - if (respR1 & SD_OCR_COM_CRC_FAILED) - { - return(SD_COM_CRC_FAILED); - } - - if (respR1 & SD_OCR_ILLEGAL_CMD) - { - return(SD_ILLEGAL_CMD); - } - - if (respR1 & SD_OCR_CARD_ECC_FAILED) - { - return(SD_CARD_ECC_FAILED); - } - - if (respR1 & SD_OCR_CC_ERROR) - { - return(SD_CC_ERROR); - } - - if (respR1 & SD_OCR_GENERAL_UNKNOWN_ERROR) - { - return(SD_GENERAL_UNKNOWN_ERROR); - } - - if (respR1 & SD_OCR_STREAM_READ_UNDERRUN) - { - return(SD_STREAM_READ_UNDERRUN); - } - - if (respR1 & SD_OCR_STREAM_WRITE_OVERRUN) - { - return(SD_STREAM_WRITE_OVERRUN); - } - - if (respR1 & SD_OCR_CID_CSD_OVERWRIETE) - { - return(SD_CID_CSD_OVERWRITE); - } - - if (respR1 & SD_OCR_WP_ERASE_SKIP) - { - return(SD_WP_ERASE_SKIP); - } - - if (respR1 & SD_OCR_CARD_ECC_DISABLED) - { - return(SD_CARD_ECC_DISABLED); - } - - if (respR1 & SD_OCR_ERASE_RESET) - { - return(SD_ERASE_RESET); - } - - if (respR1 & SD_OCR_AKE_SEQ_ERROR) - { - return(SD_AKE_SEQ_ERROR); - } - - return(errorstatus); -} - -/** - * @brief Find the SD card SCR register value. - * @param rca: selected card address. - * @param pscr: pointer to the buffer that will contain the SCR value. - * @retval SD_Error: SD Card Error code. - */ -static SD_Error FindSCR(uint16_t rca, uint32_t *pscr) -{ - uint32_t index = 0; - SD_Error errorstatus = SD_OK; - uint32_t tempscr[2] = {0, 0}; - uint32_t timeout = 0; - - /*!< Set Block Size To 8 Bytes */ - /*!< Send CMD55 APP_CMD with argument as card's RCA */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)8; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - /*!< Send CMD55 APP_CMD with argument as card's RCA */ - SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; - SDIO_DataInitStructure.SDIO_DataLength = 8; - SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_8b; - SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; - SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; - SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; - SDIO_DataConfig(&SDIO_DataInitStructure); - - - /*!< Send ACMD51 SD_APP_SEND_SCR with argument as 0 */ - SDIO_CmdInitStructure.SDIO_Argument = 0x0; - SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_SEND_SCR; - SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; - SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; - SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; - SDIO_SendCommand(&SDIO_CmdInitStructure); - - errorstatus = CmdResp1Error(SD_CMD_SD_APP_SEND_SCR); - - if (errorstatus != SD_OK) - { - return(errorstatus); - } - - while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))) - { - if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET) - { - *(tempscr + index) = SDIO_ReadData(); - index++; - } - - timeout++; - - if (timeout > 10000) - { - return SD_DATA_TIMEOUT; - } - } - - if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); - errorstatus = SD_DATA_TIMEOUT; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); - errorstatus = SD_DATA_CRC_FAIL; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_RXOVERR); - errorstatus = SD_RX_OVERRUN; - return(errorstatus); - } - else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) - { - SDIO_ClearFlag(SDIO_FLAG_STBITERR); - errorstatus = SD_START_BIT_ERR; - return(errorstatus); - } - - /*!< Clear all the static flags */ - SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - *(pscr + 1) = ((tempscr[0] & SD_0TO7BITS) << 24) | ((tempscr[0] & SD_8TO15BITS) << 8) | ((tempscr[0] & SD_16TO23BITS) >> 8) | ((tempscr[0] & SD_24TO31BITS) >> 24); - - *(pscr) = ((tempscr[1] & SD_0TO7BITS) << 24) | ((tempscr[1] & SD_8TO15BITS) << 8) | ((tempscr[1] & SD_16TO23BITS) >> 8) | ((tempscr[1] & SD_24TO31BITS) >> 24); - - return(errorstatus); -} - -/** - * @brief DeInitializes the SDIO interface. - * @param None - * @retval None - */ -static void SD_LowLevel_DeInit(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - /*!< Disable SDIO Clock */ - SDIO_ClockCmd(DISABLE); - - /*!< Set Power State to OFF */ - SDIO_SetPowerState(SDIO_PowerState_OFF); - - /*!< DeInitializes the SDIO peripheral */ - SDIO_DeInit(); - - /* Disable the SDIO APB2 Clock */ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, DISABLE); - - GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_MCO); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_MCO); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_MCO); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_MCO); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_MCO); - GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_MCO); - - /* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(GPIOC, &GPIO_InitStructure); - - /* Configure PD.02 CMD line */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; - GPIO_Init(GPIOD, &GPIO_InitStructure); - - /* Configure PC.12 pin: CLK pin */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; - GPIO_Init(GPIOC, &GPIO_InitStructure); -} - -/** - * @brief Initializes the SD Card and put it into StandBy State (Ready for - * data transfer). - * @param None - * @retval None - */ -static void SD_LowLevel_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; -#if !defined (SD_POLLING_MODE) - NVIC_InitTypeDef NVIC_InitStructure; -#endif - - /* GPIOC and GPIOD Periph clock enable */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | SD_DETECT_GPIO_CLK, ENABLE); - - GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_SDIO); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SDIO); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SDIO); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SDIO); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SDIO); - GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_SDIO); - - /* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(GPIOC, &GPIO_InitStructure); - - /* Configure PD.02 CMD line */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; - GPIO_Init(GPIOD, &GPIO_InitStructure); - - /* Configure PC.12 pin: CLK pin */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(GPIOC, &GPIO_InitStructure); - - /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */ - GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure); - - /* Enable the SDIO APB2 Clock */ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE); - - /* Enable the DMA2 Clock */ - RCC_AHB1PeriphClockCmd(SD_SDIO_DMA_CLK, ENABLE); - -#if !defined (SD_POLLING_MODE) - /* SDIO Interrupt ENABLE */ - NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_Init(&NVIC_InitStructure); - - /* DMA2 STREAMx Interrupt ENABLE */ - NVIC_InitStructure.NVIC_IRQChannel = SD_SDIO_DMA_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; - NVIC_Init(&NVIC_InitStructure); -#endif -} - -/** - * @brief Configures the DMA2 Channel4 for SDIO Tx request. - * @param BufferSRC: pointer to the source buffer - * @param BufferSize: buffer size - * @retval None - */ -static void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize) -{ - DMA_InitTypeDef SDDMA_InitStructure; - - DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_FEIF | SD_SDIO_DMA_FLAG_DMEIF | SD_SDIO_DMA_FLAG_TEIF | SD_SDIO_DMA_FLAG_HTIF | SD_SDIO_DMA_FLAG_TCIF); - - /* DMA2 Stream3 or Stream6 disable */ - DMA_Cmd(SD_SDIO_DMA_STREAM, DISABLE); - - /* DMA2 Stream3 or Stream6 Config */ - DMA_DeInit(SD_SDIO_DMA_STREAM); - - SDDMA_InitStructure.DMA_Channel = SD_SDIO_DMA_CHANNEL; - SDDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS; - SDDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)BufferSRC; - SDDMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; - SDDMA_InitStructure.DMA_BufferSize = BufferSize; - SDDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; - SDDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; - SDDMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; - SDDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; - SDDMA_InitStructure.DMA_Mode = DMA_Mode_Normal; - SDDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; - SDDMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; - SDDMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; - SDDMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_INC4; - SDDMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_INC4; - DMA_Init(SD_SDIO_DMA_STREAM, &SDDMA_InitStructure); - DMA_ITConfig(SD_SDIO_DMA_STREAM, DMA_IT_TC, ENABLE); - DMA_FlowControllerConfig(SD_SDIO_DMA_STREAM, DMA_FlowCtrl_Peripheral); - - /* DMA2 Stream3 or Stream6 enable */ - DMA_Cmd(SD_SDIO_DMA_STREAM, ENABLE); -} - -/** - * @brief Configures the DMA2 Channel4 for SDIO Rx request. - * @param BufferDST: pointer to the destination buffer - * @param BufferSize: buffer size - * @retval None - */ -static void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize) -{ - DMA_InitTypeDef SDDMA_InitStructure; - - DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_FEIF | SD_SDIO_DMA_FLAG_DMEIF | SD_SDIO_DMA_FLAG_TEIF | SD_SDIO_DMA_FLAG_HTIF | SD_SDIO_DMA_FLAG_TCIF); - - /* DMA2 Stream3 or Stream6 disable */ - DMA_Cmd(SD_SDIO_DMA_STREAM, DISABLE); - - /* DMA2 Stream3 or Stream6 Config */ - DMA_DeInit(SD_SDIO_DMA_STREAM); - - SDDMA_InitStructure.DMA_Channel = SD_SDIO_DMA_CHANNEL; - SDDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS; - SDDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)BufferDST; - SDDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; - SDDMA_InitStructure.DMA_BufferSize = BufferSize; - SDDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; - SDDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; - SDDMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; - SDDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; - SDDMA_InitStructure.DMA_Mode = DMA_Mode_Normal; - SDDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; - SDDMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; - SDDMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; - SDDMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_INC4; - SDDMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_INC4; - DMA_Init(SD_SDIO_DMA_STREAM, &SDDMA_InitStructure); - DMA_ITConfig(SD_SDIO_DMA_STREAM, DMA_IT_TC, ENABLE); - DMA_FlowControllerConfig(SD_SDIO_DMA_STREAM, DMA_FlowCtrl_Peripheral); - - /* DMA2 Stream3 or Stream6 enable */ - DMA_Cmd(SD_SDIO_DMA_STREAM, ENABLE); -} - - -/** - * @brief This function handles SDIO global interrupt request. - * @param None - * @retval None - */ -void SDIO_IRQHandler(void) -{ -#if !defined (SD_POLLING_MODE) - /* Process All SDIO Interrupt Sources */ - SD_ProcessIRQSrc(); -#endif -} - -/** - * @brief This function handles DMA2 Stream3 or DMA2 Stream6 global interrupts - * requests. - * @param None - * @retval None - */ -void SD_SDIO_DMA_IRQHANDLER(void) -{ -#if !defined (SD_POLLING_MODE) - /* Process DMA2 Stream3 or DMA2 Stream6 Interrupt Sources */ - SD_ProcessDMAIRQ(); -#endif -} - -/*! - * \brief initializes the sd card - * \param the disk number - * \return disk status - */ -DSTATUS disk_initialize (BYTE drv) -{ - SD_Error result = SD_Init(); - if (result == SD_OK) - { - SD_CardInfo card; - Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */ - SD_GetCardInfo (&card); - return RES_OK; - } - else - { - Stat = STA_NOINIT; /* Set STA_NOINIT */ - return RES_NOTRDY; - } -} - -/*! - * \brief get the sd cards Status - * \param the disk number - * \return disk status - * \note Supports only single drive - */ -DSTATUS disk_status (BYTE drv) -{ - Stat = STA_NOINIT; - - if ((drv == 0) && (SD_GetStatus() == 0)) - { - Stat &= ~STA_NOINIT; - } - - return Stat; -} - -/*! - * \brief reads multiple sectors from the sd Card - * \param drv: disk number - * \param buff: pointer to the data buffer to store read data - * \param sector: start sector number (LBA) - * \param count: sector count - */ -DRESULT disk_read (BYTE drv, BYTE *buff, DWORD sector, UINT count) -{ - DWORD scratch [SD_BLOCKSIZE / 4]; /* Alignment ensured, need enough stack */ - SD_Error sdstatus = SD_OK; - - if (drv != 0) - { - return RES_ERROR; - } - -#if defined (SD_POLLING_MODE) - while (count--) - { - sdstatus = SD_ReadBlock((BYTE *)scratch, (uint32_t )((sector + count) * SD_BLOCKSIZE), SD_BLOCKSIZE); - if (sdstatus != SD_OK) - { - return RES_ERROR; - } - - while(SD_GetStatus() == SD_TRANSFER_BUSY); - - memcpy (&buff[count * SD_BLOCKSIZE], scratch, SD_BLOCKSIZE); - - if (count == 0) - { - return RES_OK; - } - } -#else - if ((DWORD)buff & 3) /* DMA Alignment issue, do single up to aligned buffer */ - { - while (count--) - { - sdstatus = SD_ReadBlock((BYTE *)scratch, (uint32_t )((sector + count) * SD_BLOCKSIZE), SD_BLOCKSIZE); - if (sdstatus != SD_OK) - { - return RES_ERROR; - } - - /* Check if the Transfer is finished */ - sdstatus = SD_WaitReadOperation(); - - while(SD_GetStatus() == SD_TRANSFER_BUSY); - - memcpy (&buff[count * SD_BLOCKSIZE], scratch, SD_BLOCKSIZE); - - if ((sdstatus == SD_OK) && (count == 0)) - { - return RES_OK; - } - else if (sdstatus != SD_OK) - { - return RES_ERROR; - } - - } - } - else - { - sdstatus = SD_ReadMultiBlocks((BYTE *)buff, (uint32_t )(sector * SD_BLOCKSIZE), SD_BLOCKSIZE, count); - if (sdstatus != SD_OK) - { - return RES_ERROR; - } - - /* Check if the Transfer is finished */ - sdstatus = SD_WaitReadOperation(); - - while(SD_GetStatus() == SD_TRANSFER_BUSY); - - if (sdstatus == SD_OK) - { - return RES_OK; - } - } -#endif /* defined (SD_POLLING_MODE) */ - - return RES_ERROR; -} - -/*! - * \brief write multiple sectors to the sd Card - * \param drv: Physical drive nmuber (0) - * \param buff: Pointer to the data to be written - * \param sector: Start sector number (LBA) - * \param count: Sector count (1..255) - * \note this function needs DMA access and is disabled if _READONLY is set - */ -DRESULT disk_write(BYTE drv, const BYTE *buff, DWORD sector, UINT count) -{ - DWORD scratch [SD_BLOCKSIZE / 4]; /* Alignment ensured, need enough stack */ - SD_Error sdstatus = SD_OK; - - if (drv != 0) - { - return RES_ERROR; - } - -#if defined (SD_POLLING_MODE) - while (count--) - { - memcpy (scratch, &buff[count * SD_BLOCKSIZE], SD_BLOCKSIZE); - - sdstatus = SD_WriteBlock((BYTE *)scratch, (uint32_t )((sector + count) * SD_BLOCKSIZE), SD_BLOCKSIZE); - - /* note that the SD_TX_UNDERRUN is sometimes triggered when the SDIO is configured - * for polling mode (SD_POLLING_MODE), but testing shows, the block was correctly - * written so no need to flag this event as an error. note that when running in - * interrupt driven mode, the SD_TX_UNDERRUN interrupt is not used, which explains - * why it only happens in polling mode. - */ - if ( (sdstatus != SD_OK) && (sdstatus != SD_TX_UNDERRUN) ) - { - return RES_ERROR; - } - - while(SD_GetStatus() == SD_TRANSFER_BUSY); - - if (count == 0) - { - return RES_OK; - } - } -#else - if ((DWORD)buff & 3) /* DMA Alignment issue, do single up to aligned buffer */ - { - while (count--) - { - memcpy (scratch, &buff[count * SD_BLOCKSIZE], SD_BLOCKSIZE); - sdstatus = SD_WriteBlock((BYTE *)scratch, (uint32_t )((sector + count) * SD_BLOCKSIZE), SD_BLOCKSIZE); - if (sdstatus != SD_OK) - { - return RES_ERROR; - } - - /* Check if the Transfer is finished */ - sdstatus = SD_WaitWriteOperation(); - - while(SD_GetStatus() == SD_TRANSFER_BUSY); - - if ((sdstatus == SD_OK) && (count == 0)) - { - return RES_OK; - } - else if (sdstatus != SD_OK) - { - return RES_ERROR; - } - } - } - else - { - sdstatus = SD_WriteMultiBlocks((BYTE *)buff, (uint32_t )(sector * SD_BLOCKSIZE), SD_BLOCKSIZE, count); - if (sdstatus != SD_OK) - { - return RES_ERROR; - } - - /* Check if the Transfer is finished */ - sdstatus = SD_WaitWriteOperation(); - - while(SD_GetStatus() == SD_TRANSFER_BUSY); - - if (sdstatus == SD_OK) - { - return RES_OK; - } - } -#endif - - return RES_ERROR; -} - -/*! - * \brief ioctl implementation - * \param drv: Physical drive nmuber (0) - * \param ctrl: Control code - * \param buff: Buffer to send/receive control data - * \return operation result - * \note some ioctl's are not implemented because there is no need for them - * or the API's differes - */ -DRESULT disk_ioctl(BYTE drv, BYTE ctrl, void *buff) -{ - DRESULT res; - SD_CardInfo SDCardInfo; - - res = RES_ERROR; - - if (Stat & STA_NOINIT) - { - return RES_NOTRDY; - } - - switch (ctrl) - { - case CTRL_SYNC : /* Make sure that no pending write process */ - res = RES_OK; - break; - - case GET_SECTOR_COUNT : /* Get number of sectors on the disk (DWORD) */ - if(drv == 0) - { - SD_GetCardInfo(&SDCardInfo); - *(DWORD*)buff = SDCardInfo.CardCapacity / SD_BLOCKSIZE; - } - res = RES_OK; - break; - - case GET_SECTOR_SIZE : /* Get R/W sector size (WORD) */ - *(WORD*)buff = SD_BLOCKSIZE; - res = RES_OK; - break; - - case GET_BLOCK_SIZE : /* Get erase block size in unit of sector (DWORD) */ - if(drv == 0) - { - * (DWORD*)buff = 32; - } - res = RES_OK; - break; - - default: - res = RES_PARERR; - } - return res; -} - - - - -/********************************* end of mmc.c ****************************************/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf deleted file mode 100644 index c8feab483c7aee07b235b93666803151e052e8c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46999 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 QQc9AHn2Sr@P=oA$0ObL?h5!Hn diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h deleted file mode 100644 index 082a18e7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h +++ /dev/null @@ -1,7155 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief CMSIS Cortex-M4 Device Peripheral Access Layer Header File. - * This file contains all the peripheral register's definitions, bits - * definitions and memory mapping for STM32F4xx 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 peripheral’s drivers in application code(i.e. - * code will be based on direct access to peripheral’s 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 peripheral’s registers hardware - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f4xx - * @{ - */ - -#ifndef __STM32F4xx_H -#define __STM32F4xx_H - -#ifdef __cplusplus - extern "C" { -#endif /* __cplusplus */ - -/** @addtogroup Library_configuration_section - * @{ - */ - -/* Uncomment the line below according to the target STM32 device used in your - application - */ - -#if !defined (STM32F4XX) && !defined (STM32F40XX) && !defined (STM32F427X) - /* #define STM32F40XX */ /*!< STM32F40xx/41xx Devices */ - /* #define STM32F427X */ /*!< STM32F427x/437x 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. - */ - -#if !defined (STM32F4XX) && !defined (STM32F40XX) && !defined (STM32F427X) - #error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.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 /* USE_STDPERIPH_DRIVER */ - -/** - * @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) - #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */ -#endif /* HSE_STARTUP_TIMEOUT */ - -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief STM32F4XX Standard Peripherals Library version number V1.1.0 - */ -#define __STM32F4XX_STDPERIPH_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __STM32F4XX_STDPERIPH_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ -#define __STM32F4XX_STDPERIPH_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ -#define __STM32F4XX_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F4XX_STDPERIPH_VERSION ((__STM32F4XX_STDPERIPH_VERSION_MAIN << 24)\ - |(__STM32F4XX_STDPERIPH_VERSION_SUB1 << 16)\ - |(__STM32F4XX_STDPERIPH_VERSION_SUB2 << 8)\ - |(__STM32F4XX_STDPERIPH_VERSION_RC)) - -/** - * @} - */ - -/** @addtogroup Configuration_section_for_CMSIS - * @{ - */ - -/** - * @brief Configuration of the Cortex-M4 Processor and Core Peripherals - */ -#define __CM4_REV 0x0001 /*!< Core revision r0p1 */ -#define __MPU_PRESENT 1 /*!< STM32F4XX provides an MPU */ -#define __NVIC_PRIO_BITS 4 /*!< STM32F4XX uses 4 Bits for the Priority Levels */ -#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ -#define __FPU_PRESENT 1 /*!< FPU present */ - -/** - * @brief STM32F4XX Interrupt Number Definition, according to the selected device - * in @ref Library_configuration_section - */ -typedef enum IRQn -{ -/****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ -/****** STM32 specific Interrupt Numbers **********************************************************************/ - WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ - PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ - TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */ - RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */ - FLASH_IRQn = 4, /*!< FLASH global Interrupt */ - RCC_IRQn = 5, /*!< RCC global Interrupt */ - EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ - EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ - EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ - EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ - EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ - DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */ - DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */ - DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */ - DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */ - DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */ - DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */ - DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */ - ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */ - CAN1_TX_IRQn = 19, /*!< CAN1 TX Interrupt */ - CAN1_RX0_IRQn = 20, /*!< CAN1 RX0 Interrupt */ - 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 */ - RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */ - OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */ - 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 */ - DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 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_DAC_IRQn = 54, /*!< TIM6 global and DAC1&2 underrun error interrupts */ - TIM7_IRQn = 55, /*!< TIM7 global interrupt */ - DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt */ - DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt */ - DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt */ - DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt */ - DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt */ - 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 */ - DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt */ - DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt */ - DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt */ - USART6_IRQn = 71, /*!< USART6 global interrupt */ - I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */ - I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */ - OTG_HS_EP1_OUT_IRQn = 74, /*!< USB OTG HS End Point 1 Out global interrupt */ - OTG_HS_EP1_IN_IRQn = 75, /*!< USB OTG HS End Point 1 In global interrupt */ - OTG_HS_WKUP_IRQn = 76, /*!< USB OTG HS Wakeup through EXTI interrupt */ - OTG_HS_IRQn = 77, /*!< USB OTG HS global interrupt */ - DCMI_IRQn = 78, /*!< DCMI global interrupt */ - CRYP_IRQn = 79, /*!< CRYP crypto global interrupt */ - HASH_RNG_IRQn = 80, /*!< Hash and Rng global interrupt */ - -#ifdef STM32F40XX - FPU_IRQn = 81 /*!< FPU global interrupt */ -#endif /* STM32F40XX */ - -#ifdef STM32F427X - FPU_IRQn = 81, /*!< FPU global interrupt */ - UART7_IRQn = 82, /*!< UART7 global interrupt */ - UART8_IRQn = 83, /*!< UART8 global interrupt */ - SPI4_IRQn = 84, /*!< SPI4 global Interrupt */ - SPI5_IRQn = 85, /*!< SPI5 global Interrupt */ - SPI6_IRQn = 86 /*!< SPI6 global Interrupt */ -#endif /* STM32F427X */ - -} IRQn_Type; - -/** - * @} - */ - -#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */ -#include "system_stm32f4xx.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; - -/** - * @} - */ - -/** @addtogroup Peripheral_registers_structures - * @{ - */ - -/** - * @brief Analog to Digital Converter - */ - -typedef struct -{ - __IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */ - __IO uint32_t CR1; /*!< ADC control register 1, Address offset: 0x04 */ - __IO uint32_t CR2; /*!< ADC control register 2, Address offset: 0x08 */ - __IO uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x0C */ - __IO uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x10 */ - __IO uint32_t JOFR1; /*!< ADC injected channel data offset register 1, Address offset: 0x14 */ - __IO uint32_t JOFR2; /*!< ADC injected channel data offset register 2, Address offset: 0x18 */ - __IO uint32_t JOFR3; /*!< ADC injected channel data offset register 3, Address offset: 0x1C */ - __IO uint32_t JOFR4; /*!< ADC injected channel data offset register 4, Address offset: 0x20 */ - __IO uint32_t HTR; /*!< ADC watchdog higher threshold register, Address offset: 0x24 */ - __IO uint32_t LTR; /*!< ADC watchdog lower threshold register, Address offset: 0x28 */ - __IO uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x2C */ - __IO uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x30 */ - __IO uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x34 */ - __IO uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x38*/ - __IO uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x3C */ - __IO uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x40 */ - __IO uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x44 */ - __IO uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x48 */ - __IO uint32_t DR; /*!< ADC regular data register, Address offset: 0x4C */ -} ADC_TypeDef; - -typedef struct -{ - __IO uint32_t CSR; /*!< ADC Common status register, Address offset: ADC1 base address + 0x300 */ - __IO uint32_t CCR; /*!< ADC common control register, Address offset: ADC1 base address + 0x304 */ - __IO uint32_t CDR; /*!< ADC common regular data register for dual - AND triple modes, Address offset: ADC1 base address + 0x308 */ -} ADC_Common_TypeDef; - - -/** - * @brief Controller Area Network TxMailBox - */ - -typedef struct -{ - __IO uint32_t TIR; /*!< CAN TX mailbox identifier register */ - __IO uint32_t TDTR; /*!< CAN mailbox data length control and time stamp register */ - __IO uint32_t TDLR; /*!< CAN mailbox data low register */ - __IO uint32_t TDHR; /*!< CAN mailbox data high register */ -} CAN_TxMailBox_TypeDef; - -/** - * @brief Controller Area Network FIFOMailBox - */ - -typedef struct -{ - __IO uint32_t RIR; /*!< CAN receive FIFO mailbox identifier register */ - __IO uint32_t RDTR; /*!< CAN receive FIFO mailbox data length control and time stamp register */ - __IO uint32_t RDLR; /*!< CAN receive FIFO mailbox data low register */ - __IO uint32_t RDHR; /*!< CAN receive FIFO mailbox data high register */ -} CAN_FIFOMailBox_TypeDef; - -/** - * @brief Controller Area Network FilterRegister - */ - -typedef struct -{ - __IO uint32_t FR1; /*!< CAN Filter bank register 1 */ - __IO uint32_t FR2; /*!< CAN Filter bank register 1 */ -} CAN_FilterRegister_TypeDef; - -/** - * @brief Controller Area Network - */ - -typedef struct -{ - __IO uint32_t MCR; /*!< CAN master control register, Address offset: 0x00 */ - __IO uint32_t MSR; /*!< CAN master status register, Address offset: 0x04 */ - __IO uint32_t TSR; /*!< CAN transmit status register, Address offset: 0x08 */ - __IO uint32_t RF0R; /*!< CAN receive FIFO 0 register, Address offset: 0x0C */ - __IO uint32_t RF1R; /*!< CAN receive FIFO 1 register, Address offset: 0x10 */ - __IO uint32_t IER; /*!< CAN interrupt enable register, Address offset: 0x14 */ - __IO uint32_t ESR; /*!< CAN error status register, Address offset: 0x18 */ - __IO uint32_t BTR; /*!< CAN bit timing register, Address offset: 0x1C */ - uint32_t RESERVED0[88]; /*!< Reserved, 0x020 - 0x17F */ - CAN_TxMailBox_TypeDef sTxMailBox[3]; /*!< CAN Tx MailBox, Address offset: 0x180 - 0x1AC */ - CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; /*!< CAN FIFO MailBox, Address offset: 0x1B0 - 0x1CC */ - uint32_t RESERVED1[12]; /*!< Reserved, 0x1D0 - 0x1FF */ - __IO uint32_t FMR; /*!< CAN filter master register, Address offset: 0x200 */ - __IO uint32_t FM1R; /*!< CAN filter mode register, Address offset: 0x204 */ - uint32_t RESERVED2; /*!< Reserved, 0x208 */ - __IO uint32_t FS1R; /*!< CAN filter scale register, Address offset: 0x20C */ - uint32_t RESERVED3; /*!< Reserved, 0x210 */ - __IO uint32_t FFA1R; /*!< CAN filter FIFO assignment register, Address offset: 0x214 */ - uint32_t RESERVED4; /*!< Reserved, 0x218 */ - __IO uint32_t FA1R; /*!< CAN filter activation register, Address offset: 0x21C */ - uint32_t RESERVED5[8]; /*!< Reserved, 0x220-0x23F */ - CAN_FilterRegister_TypeDef sFilterRegister[28]; /*!< CAN Filter Register, Address offset: 0x240-0x31C */ -} CAN_TypeDef; - -/** - * @brief CRC calculation unit - */ - -typedef struct -{ - __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ - __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ - uint8_t RESERVED0; /*!< Reserved, 0x05 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ -} CRC_TypeDef; - -/** - * @brief Digital to Analog Converter - */ - -typedef struct -{ - __IO uint32_t CR; /*!< DAC control register, Address offset: 0x00 */ - __IO uint32_t SWTRIGR; /*!< DAC software trigger register, Address offset: 0x04 */ - __IO uint32_t DHR12R1; /*!< DAC channel1 12-bit right-aligned data holding register, Address offset: 0x08 */ - __IO uint32_t DHR12L1; /*!< DAC channel1 12-bit left aligned data holding register, Address offset: 0x0C */ - __IO uint32_t DHR8R1; /*!< DAC channel1 8-bit right aligned data holding register, Address offset: 0x10 */ - __IO uint32_t DHR12R2; /*!< DAC channel2 12-bit right aligned data holding register, Address offset: 0x14 */ - __IO uint32_t DHR12L2; /*!< DAC channel2 12-bit left aligned data holding register, Address offset: 0x18 */ - __IO uint32_t DHR8R2; /*!< DAC channel2 8-bit right-aligned data holding register, Address offset: 0x1C */ - __IO uint32_t DHR12RD; /*!< Dual DAC 12-bit right-aligned data holding register, Address offset: 0x20 */ - __IO uint32_t DHR12LD; /*!< DUAL DAC 12-bit left aligned data holding register, Address offset: 0x24 */ - __IO uint32_t DHR8RD; /*!< DUAL DAC 8-bit right aligned data holding register, Address offset: 0x28 */ - __IO uint32_t DOR1; /*!< DAC channel1 data output register, Address offset: 0x2C */ - __IO uint32_t DOR2; /*!< DAC channel2 data output register, Address offset: 0x30 */ - __IO uint32_t SR; /*!< DAC status register, Address offset: 0x34 */ -} DAC_TypeDef; - -/** - * @brief Debug MCU - */ - -typedef struct -{ - __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ - __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ - __IO uint32_t APB1FZ; /*!< Debug MCU APB1 freeze register, Address offset: 0x08 */ - __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x0C */ -}DBGMCU_TypeDef; - -/** - * @brief DCMI - */ - -typedef struct -{ - __IO uint32_t CR; /*!< DCMI control register 1, Address offset: 0x00 */ - __IO uint32_t SR; /*!< DCMI status register, Address offset: 0x04 */ - __IO uint32_t RISR; /*!< DCMI raw interrupt status register, Address offset: 0x08 */ - __IO uint32_t IER; /*!< DCMI interrupt enable register, Address offset: 0x0C */ - __IO uint32_t MISR; /*!< DCMI masked interrupt status register, Address offset: 0x10 */ - __IO uint32_t ICR; /*!< DCMI interrupt clear register, Address offset: 0x14 */ - __IO uint32_t ESCR; /*!< DCMI embedded synchronization code register, Address offset: 0x18 */ - __IO uint32_t ESUR; /*!< DCMI embedded synchronization unmask register, Address offset: 0x1C */ - __IO uint32_t CWSTRTR; /*!< DCMI crop window start, Address offset: 0x20 */ - __IO uint32_t CWSIZER; /*!< DCMI crop window size, Address offset: 0x24 */ - __IO uint32_t DR; /*!< DCMI data register, Address offset: 0x28 */ -} DCMI_TypeDef; - -/** - * @brief DMA Controller - */ - -typedef struct -{ - __IO uint32_t CR; /*!< DMA stream x configuration register */ - __IO uint32_t NDTR; /*!< DMA stream x number of data register */ - __IO uint32_t PAR; /*!< DMA stream x peripheral address register */ - __IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */ - __IO uint32_t M1AR; /*!< DMA stream x memory 1 address register */ - __IO uint32_t FCR; /*!< DMA stream x FIFO control register */ -} DMA_Stream_TypeDef; - -typedef struct -{ - __IO uint32_t LISR; /*!< DMA low interrupt status register, Address offset: 0x00 */ - __IO uint32_t HISR; /*!< DMA high interrupt status register, Address offset: 0x04 */ - __IO uint32_t LIFCR; /*!< DMA low interrupt flag clear register, Address offset: 0x08 */ - __IO uint32_t HIFCR; /*!< DMA high interrupt flag clear register, Address offset: 0x0C */ -} DMA_TypeDef; - -/** - * @brief 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; - __IO uint32_t RESERVED8; - __IO uint32_t PTPTSSR; - uint32_t RESERVED9[565]; - __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; - __IO uint32_t DMARSWTR; - uint32_t RESERVED10[8]; - __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; /*!< EXTI Interrupt mask register, Address offset: 0x00 */ - __IO uint32_t EMR; /*!< EXTI Event mask register, Address offset: 0x04 */ - __IO uint32_t RTSR; /*!< EXTI Rising trigger selection register, Address offset: 0x08 */ - __IO uint32_t FTSR; /*!< EXTI Falling trigger selection register, Address offset: 0x0C */ - __IO uint32_t SWIER; /*!< EXTI Software interrupt event register, Address offset: 0x10 */ - __IO uint32_t PR; /*!< EXTI Pending register, Address offset: 0x14 */ -} EXTI_TypeDef; - -/** - * @brief FLASH Registers - */ - -typedef struct -{ - __IO uint32_t ACR; /*!< FLASH access control register, Address offset: 0x00 */ - __IO uint32_t KEYR; /*!< FLASH key register, Address offset: 0x04 */ - __IO uint32_t OPTKEYR; /*!< FLASH option key register, Address offset: 0x08 */ - __IO uint32_t SR; /*!< FLASH status register, Address offset: 0x0C */ - __IO uint32_t CR; /*!< FLASH control register, Address offset: 0x10 */ - __IO uint32_t OPTCR; /*!< FLASH option control register , Address offset: 0x14 */ - __IO uint32_t OPTCR1; /*!< FLASH option control register 1, Address offset: 0x18 */ -} FLASH_TypeDef; - -/** - * @brief Flexible Static Memory Controller - */ - -typedef struct -{ - __IO uint32_t BTCR[8]; /*!< NOR/PSRAM chip-select control register(BCR) and chip-select timing register(BTR), Address offset: 0x00-1C */ -} FSMC_Bank1_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank1E - */ - -typedef struct -{ - __IO uint32_t BWTR[7]; /*!< NOR/PSRAM write timing registers, Address offset: 0x104-0x11C */ -} FSMC_Bank1E_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank2 - */ - -typedef struct -{ - __IO uint32_t PCR2; /*!< NAND Flash control register 2, Address offset: 0x60 */ - __IO uint32_t SR2; /*!< NAND Flash FIFO status and interrupt register 2, Address offset: 0x64 */ - __IO uint32_t PMEM2; /*!< NAND Flash Common memory space timing register 2, Address offset: 0x68 */ - __IO uint32_t PATT2; /*!< NAND Flash Attribute memory space timing register 2, Address offset: 0x6C */ - uint32_t RESERVED0; /*!< Reserved, 0x70 */ - __IO uint32_t ECCR2; /*!< NAND Flash ECC result registers 2, Address offset: 0x74 */ -} FSMC_Bank2_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank3 - */ - -typedef struct -{ - __IO uint32_t PCR3; /*!< NAND Flash control register 3, Address offset: 0x80 */ - __IO uint32_t SR3; /*!< NAND Flash FIFO status and interrupt register 3, Address offset: 0x84 */ - __IO uint32_t PMEM3; /*!< NAND Flash Common memory space timing register 3, Address offset: 0x88 */ - __IO uint32_t PATT3; /*!< NAND Flash Attribute memory space timing register 3, Address offset: 0x8C */ - uint32_t RESERVED0; /*!< Reserved, 0x90 */ - __IO uint32_t ECCR3; /*!< NAND Flash ECC result registers 3, Address offset: 0x94 */ -} FSMC_Bank3_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank4 - */ - -typedef struct -{ - __IO uint32_t PCR4; /*!< PC Card control register 4, Address offset: 0xA0 */ - __IO uint32_t SR4; /*!< PC Card FIFO status and interrupt register 4, Address offset: 0xA4 */ - __IO uint32_t PMEM4; /*!< PC Card Common memory space timing register 4, Address offset: 0xA8 */ - __IO uint32_t PATT4; /*!< PC Card Attribute memory space timing register 4, Address offset: 0xAC */ - __IO uint32_t PIO4; /*!< PC Card I/O space timing register 4, Address offset: 0xB0 */ -} FSMC_Bank4_TypeDef; - -/** - * @brief General Purpose I/O - */ - -typedef struct -{ - __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */ - __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */ - __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */ - __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */ - __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */ - __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */ - __IO uint16_t BSRRL; /*!< GPIO port bit set/reset low register, Address offset: 0x18 */ - __IO uint16_t BSRRH; /*!< GPIO port bit set/reset high register, Address offset: 0x1A */ - __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */ - __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ -} GPIO_TypeDef; - -/** - * @brief System configuration controller - */ - -typedef struct -{ - __IO uint32_t MEMRMP; /*!< SYSCFG memory remap register, Address offset: 0x00 */ - __IO uint32_t PMC; /*!< SYSCFG peripheral mode configuration register, Address offset: 0x04 */ - __IO uint32_t EXTICR[4]; /*!< SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */ - uint32_t RESERVED[2]; /*!< Reserved, 0x18-0x1C */ - __IO uint32_t CMPCR; /*!< SYSCFG Compensation cell control register, Address offset: 0x20 */ -} SYSCFG_TypeDef; - -/** - * @brief Inter-integrated Circuit Interface - */ - -typedef struct -{ - __IO uint16_t CR1; /*!< I2C Control register 1, Address offset: 0x00 */ - uint16_t RESERVED0; /*!< Reserved, 0x02 */ - __IO uint16_t CR2; /*!< I2C Control register 2, Address offset: 0x04 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint16_t OAR1; /*!< I2C Own address register 1, Address offset: 0x08 */ - uint16_t RESERVED2; /*!< Reserved, 0x0A */ - __IO uint16_t OAR2; /*!< I2C Own address register 2, Address offset: 0x0C */ - uint16_t RESERVED3; /*!< Reserved, 0x0E */ - __IO uint16_t DR; /*!< I2C Data register, Address offset: 0x10 */ - uint16_t RESERVED4; /*!< Reserved, 0x12 */ - __IO uint16_t SR1; /*!< I2C Status register 1, Address offset: 0x14 */ - uint16_t RESERVED5; /*!< Reserved, 0x16 */ - __IO uint16_t SR2; /*!< I2C Status register 2, Address offset: 0x18 */ - uint16_t RESERVED6; /*!< Reserved, 0x1A */ - __IO uint16_t CCR; /*!< I2C Clock control register, Address offset: 0x1C */ - uint16_t RESERVED7; /*!< Reserved, 0x1E */ - __IO uint16_t TRISE; /*!< I2C TRISE register, Address offset: 0x20 */ - uint16_t RESERVED8; /*!< Reserved, 0x22 */ - __IO uint16_t FLTR; /*!< I2C FLTR register, Address offset: 0x24 */ - uint16_t RESERVED9; /*!< Reserved, 0x26 */ -} I2C_TypeDef; - -/** - * @brief Independent WATCHDOG - */ - -typedef struct -{ - __IO uint32_t KR; /*!< IWDG Key register, Address offset: 0x00 */ - __IO uint32_t PR; /*!< IWDG Prescaler register, Address offset: 0x04 */ - __IO uint32_t RLR; /*!< IWDG Reload register, Address offset: 0x08 */ - __IO uint32_t SR; /*!< IWDG Status register, Address offset: 0x0C */ -} IWDG_TypeDef; - -/** - * @brief Power Control - */ - -typedef struct -{ - __IO uint32_t CR; /*!< PWR power control register, Address offset: 0x00 */ - __IO uint32_t CSR; /*!< PWR power control/status register, Address offset: 0x04 */ -} PWR_TypeDef; - -/** - * @brief Reset and Clock Control - */ - -typedef struct -{ - __IO uint32_t CR; /*!< RCC clock control register, Address offset: 0x00 */ - __IO uint32_t PLLCFGR; /*!< RCC PLL configuration register, Address offset: 0x04 */ - __IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x08 */ - __IO uint32_t CIR; /*!< RCC clock interrupt register, Address offset: 0x0C */ - __IO uint32_t AHB1RSTR; /*!< RCC AHB1 peripheral reset register, Address offset: 0x10 */ - __IO uint32_t AHB2RSTR; /*!< RCC AHB2 peripheral reset register, Address offset: 0x14 */ - __IO uint32_t AHB3RSTR; /*!< RCC AHB3 peripheral reset register, Address offset: 0x18 */ - uint32_t RESERVED0; /*!< Reserved, 0x1C */ - __IO uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x20 */ - __IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x24 */ - uint32_t RESERVED1[2]; /*!< Reserved, 0x28-0x2C */ - __IO uint32_t AHB1ENR; /*!< RCC AHB1 peripheral clock register, Address offset: 0x30 */ - __IO uint32_t AHB2ENR; /*!< RCC AHB2 peripheral clock register, Address offset: 0x34 */ - __IO uint32_t AHB3ENR; /*!< RCC AHB3 peripheral clock register, Address offset: 0x38 */ - uint32_t RESERVED2; /*!< Reserved, 0x3C */ - __IO uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x40 */ - __IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x44 */ - uint32_t RESERVED3[2]; /*!< Reserved, 0x48-0x4C */ - __IO uint32_t AHB1LPENR; /*!< RCC AHB1 peripheral clock enable in low power mode register, Address offset: 0x50 */ - __IO uint32_t AHB2LPENR; /*!< RCC AHB2 peripheral clock enable in low power mode register, Address offset: 0x54 */ - __IO uint32_t AHB3LPENR; /*!< RCC AHB3 peripheral clock enable in low power mode register, Address offset: 0x58 */ - uint32_t RESERVED4; /*!< Reserved, 0x5C */ - __IO uint32_t APB1LPENR; /*!< RCC APB1 peripheral clock enable in low power mode register, Address offset: 0x60 */ - __IO uint32_t APB2LPENR; /*!< RCC APB2 peripheral clock enable in low power mode register, Address offset: 0x64 */ - uint32_t RESERVED5[2]; /*!< Reserved, 0x68-0x6C */ - __IO uint32_t BDCR; /*!< RCC Backup domain control register, Address offset: 0x70 */ - __IO uint32_t CSR; /*!< RCC clock control & status register, Address offset: 0x74 */ - uint32_t RESERVED6[2]; /*!< Reserved, 0x78-0x7C */ - __IO uint32_t SSCGR; /*!< RCC spread spectrum clock generation register, Address offset: 0x80 */ - __IO uint32_t PLLI2SCFGR; /*!< RCC PLLI2S configuration register, Address offset: 0x84 */ - -#ifdef STM32F427X - uint32_t RESERVED7; /*!< Reserved, 0x88 */ - __IO uint32_t DCKCFGR; /*!< RCC Dedicated Clocks configuration register, Address offset: 0x8C */ -#endif /* STM32F427X */ - -} RCC_TypeDef; - -/** - * @brief Real-Time Clock - */ - -typedef struct -{ - __IO uint32_t TR; /*!< RTC time register, Address offset: 0x00 */ - __IO uint32_t DR; /*!< RTC date register, Address offset: 0x04 */ - __IO uint32_t CR; /*!< RTC control register, Address offset: 0x08 */ - __IO uint32_t ISR; /*!< RTC initialization and status register, Address offset: 0x0C */ - __IO uint32_t PRER; /*!< RTC prescaler register, Address offset: 0x10 */ - __IO uint32_t WUTR; /*!< RTC wakeup timer register, Address offset: 0x14 */ - __IO uint32_t CALIBR; /*!< RTC calibration register, Address offset: 0x18 */ - __IO uint32_t ALRMAR; /*!< RTC alarm A register, Address offset: 0x1C */ - __IO uint32_t ALRMBR; /*!< RTC alarm B register, Address offset: 0x20 */ - __IO uint32_t WPR; /*!< RTC write protection register, Address offset: 0x24 */ - __IO uint32_t SSR; /*!< RTC sub second register, Address offset: 0x28 */ - __IO uint32_t SHIFTR; /*!< RTC shift control register, Address offset: 0x2C */ - __IO uint32_t TSTR; /*!< RTC time stamp time register, Address offset: 0x30 */ - __IO uint32_t TSDR; /*!< RTC time stamp date register, Address offset: 0x34 */ - __IO uint32_t TSSSR; /*!< RTC time-stamp sub second register, Address offset: 0x38 */ - __IO uint32_t CALR; /*!< RTC calibration register, Address offset: 0x3C */ - __IO uint32_t TAFCR; /*!< RTC tamper and alternate function configuration register, Address offset: 0x40 */ - __IO uint32_t ALRMASSR;/*!< RTC alarm A sub second register, Address offset: 0x44 */ - __IO uint32_t ALRMBSSR;/*!< RTC alarm B sub second register, Address offset: 0x48 */ - uint32_t RESERVED7; /*!< Reserved, 0x4C */ - __IO uint32_t BKP0R; /*!< RTC backup register 1, Address offset: 0x50 */ - __IO uint32_t BKP1R; /*!< RTC backup register 1, Address offset: 0x54 */ - __IO uint32_t BKP2R; /*!< RTC backup register 2, Address offset: 0x58 */ - __IO uint32_t BKP3R; /*!< RTC backup register 3, Address offset: 0x5C */ - __IO uint32_t BKP4R; /*!< RTC backup register 4, Address offset: 0x60 */ - __IO uint32_t BKP5R; /*!< RTC backup register 5, Address offset: 0x64 */ - __IO uint32_t BKP6R; /*!< RTC backup register 6, Address offset: 0x68 */ - __IO uint32_t BKP7R; /*!< RTC backup register 7, Address offset: 0x6C */ - __IO uint32_t BKP8R; /*!< RTC backup register 8, Address offset: 0x70 */ - __IO uint32_t BKP9R; /*!< RTC backup register 9, Address offset: 0x74 */ - __IO uint32_t BKP10R; /*!< RTC backup register 10, Address offset: 0x78 */ - __IO uint32_t BKP11R; /*!< RTC backup register 11, Address offset: 0x7C */ - __IO uint32_t BKP12R; /*!< RTC backup register 12, Address offset: 0x80 */ - __IO uint32_t BKP13R; /*!< RTC backup register 13, Address offset: 0x84 */ - __IO uint32_t BKP14R; /*!< RTC backup register 14, Address offset: 0x88 */ - __IO uint32_t BKP15R; /*!< RTC backup register 15, Address offset: 0x8C */ - __IO uint32_t BKP16R; /*!< RTC backup register 16, Address offset: 0x90 */ - __IO uint32_t BKP17R; /*!< RTC backup register 17, Address offset: 0x94 */ - __IO uint32_t BKP18R; /*!< RTC backup register 18, Address offset: 0x98 */ - __IO uint32_t BKP19R; /*!< RTC backup register 19, Address offset: 0x9C */ -} RTC_TypeDef; - -/** - * @brief SD host Interface - */ - -typedef struct -{ - __IO uint32_t POWER; /*!< SDIO power control register, Address offset: 0x00 */ - __IO uint32_t CLKCR; /*!< SDI clock control register, Address offset: 0x04 */ - __IO uint32_t ARG; /*!< SDIO argument register, Address offset: 0x08 */ - __IO uint32_t CMD; /*!< SDIO command register, Address offset: 0x0C */ - __I uint32_t RESPCMD; /*!< SDIO command response register, Address offset: 0x10 */ - __I uint32_t RESP1; /*!< SDIO response 1 register, Address offset: 0x14 */ - __I uint32_t RESP2; /*!< SDIO response 2 register, Address offset: 0x18 */ - __I uint32_t RESP3; /*!< SDIO response 3 register, Address offset: 0x1C */ - __I uint32_t RESP4; /*!< SDIO response 4 register, Address offset: 0x20 */ - __IO uint32_t DTIMER; /*!< SDIO data timer register, Address offset: 0x24 */ - __IO uint32_t DLEN; /*!< SDIO data length register, Address offset: 0x28 */ - __IO uint32_t DCTRL; /*!< SDIO data control register, Address offset: 0x2C */ - __I uint32_t DCOUNT; /*!< SDIO data counter register, Address offset: 0x30 */ - __I uint32_t STA; /*!< SDIO status register, Address offset: 0x34 */ - __IO uint32_t ICR; /*!< SDIO interrupt clear register, Address offset: 0x38 */ - __IO uint32_t MASK; /*!< SDIO mask register, Address offset: 0x3C */ - uint32_t RESERVED0[2]; /*!< Reserved, 0x40-0x44 */ - __I uint32_t FIFOCNT; /*!< SDIO FIFO counter register, Address offset: 0x48 */ - uint32_t RESERVED1[13]; /*!< Reserved, 0x4C-0x7C */ - __IO uint32_t FIFO; /*!< SDIO data FIFO register, Address offset: 0x80 */ -} SDIO_TypeDef; - -/** - * @brief Serial Peripheral Interface - */ - -typedef struct -{ - __IO uint16_t CR1; /*!< SPI control register 1 (not used in I2S mode), Address offset: 0x00 */ - uint16_t RESERVED0; /*!< Reserved, 0x02 */ - __IO uint16_t CR2; /*!< SPI control register 2, Address offset: 0x04 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint16_t SR; /*!< SPI status register, Address offset: 0x08 */ - uint16_t RESERVED2; /*!< Reserved, 0x0A */ - __IO uint16_t DR; /*!< SPI data register, Address offset: 0x0C */ - uint16_t RESERVED3; /*!< Reserved, 0x0E */ - __IO uint16_t CRCPR; /*!< SPI CRC polynomial register (not used in I2S mode), Address offset: 0x10 */ - uint16_t RESERVED4; /*!< Reserved, 0x12 */ - __IO uint16_t RXCRCR; /*!< SPI RX CRC register (not used in I2S mode), Address offset: 0x14 */ - uint16_t RESERVED5; /*!< Reserved, 0x16 */ - __IO uint16_t TXCRCR; /*!< SPI TX CRC register (not used in I2S mode), Address offset: 0x18 */ - uint16_t RESERVED6; /*!< Reserved, 0x1A */ - __IO uint16_t I2SCFGR; /*!< SPI_I2S configuration register, Address offset: 0x1C */ - uint16_t RESERVED7; /*!< Reserved, 0x1E */ - __IO uint16_t I2SPR; /*!< SPI_I2S prescaler register, Address offset: 0x20 */ - uint16_t RESERVED8; /*!< Reserved, 0x22 */ -} SPI_TypeDef; - -/** - * @brief TIM - */ - -typedef struct -{ - __IO uint16_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ - uint16_t RESERVED0; /*!< Reserved, 0x02 */ - __IO uint16_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint16_t SMCR; /*!< TIM slave mode control register, Address offset: 0x08 */ - uint16_t RESERVED2; /*!< Reserved, 0x0A */ - __IO uint16_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ - uint16_t RESERVED3; /*!< Reserved, 0x0E */ - __IO uint16_t SR; /*!< TIM status register, Address offset: 0x10 */ - uint16_t RESERVED4; /*!< Reserved, 0x12 */ - __IO uint16_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ - uint16_t RESERVED5; /*!< Reserved, 0x16 */ - __IO uint16_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ - uint16_t RESERVED6; /*!< Reserved, 0x1A */ - __IO uint16_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ - uint16_t RESERVED7; /*!< Reserved, 0x1E */ - __IO uint16_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ - uint16_t RESERVED8; /*!< Reserved, 0x22 */ - __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ - __IO uint16_t PSC; /*!< TIM prescaler, Address offset: 0x28 */ - uint16_t RESERVED9; /*!< Reserved, 0x2A */ - __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ - __IO uint16_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ - uint16_t RESERVED10; /*!< Reserved, 0x32 */ - __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ - __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ - __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ - __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ - __IO uint16_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ - uint16_t RESERVED11; /*!< Reserved, 0x46 */ - __IO uint16_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ - uint16_t RESERVED12; /*!< Reserved, 0x4A */ - __IO uint16_t DMAR; /*!< TIM DMA address for full transfer, Address offset: 0x4C */ - uint16_t RESERVED13; /*!< Reserved, 0x4E */ - __IO uint16_t OR; /*!< TIM option register, Address offset: 0x50 */ - uint16_t RESERVED14; /*!< Reserved, 0x52 */ -} TIM_TypeDef; - -/** - * @brief Universal Synchronous Asynchronous Receiver Transmitter - */ - -typedef struct -{ - __IO uint16_t SR; /*!< USART Status register, Address offset: 0x00 */ - uint16_t RESERVED0; /*!< Reserved, 0x02 */ - __IO uint16_t DR; /*!< USART Data register, Address offset: 0x04 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint16_t BRR; /*!< USART Baud rate register, Address offset: 0x08 */ - uint16_t RESERVED2; /*!< Reserved, 0x0A */ - __IO uint16_t CR1; /*!< USART Control register 1, Address offset: 0x0C */ - uint16_t RESERVED3; /*!< Reserved, 0x0E */ - __IO uint16_t CR2; /*!< USART Control register 2, Address offset: 0x10 */ - uint16_t RESERVED4; /*!< Reserved, 0x12 */ - __IO uint16_t CR3; /*!< USART Control register 3, Address offset: 0x14 */ - uint16_t RESERVED5; /*!< Reserved, 0x16 */ - __IO uint16_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */ - uint16_t RESERVED6; /*!< Reserved, 0x1A */ -} USART_TypeDef; - -/** - * @brief Window WATCHDOG - */ - -typedef struct -{ - __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ - __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ - __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ -} WWDG_TypeDef; - -/** - * @brief Crypto Processor - */ - -typedef struct -{ - __IO uint32_t CR; /*!< CRYP control register, Address offset: 0x00 */ - __IO uint32_t SR; /*!< CRYP status register, Address offset: 0x04 */ - __IO uint32_t DR; /*!< CRYP data input register, Address offset: 0x08 */ - __IO uint32_t DOUT; /*!< CRYP data output register, Address offset: 0x0C */ - __IO uint32_t DMACR; /*!< CRYP DMA control register, Address offset: 0x10 */ - __IO uint32_t IMSCR; /*!< CRYP interrupt mask set/clear register, Address offset: 0x14 */ - __IO uint32_t RISR; /*!< CRYP raw interrupt status register, Address offset: 0x18 */ - __IO uint32_t MISR; /*!< CRYP masked interrupt status register, Address offset: 0x1C */ - __IO uint32_t K0LR; /*!< CRYP key left register 0, Address offset: 0x20 */ - __IO uint32_t K0RR; /*!< CRYP key right register 0, Address offset: 0x24 */ - __IO uint32_t K1LR; /*!< CRYP key left register 1, Address offset: 0x28 */ - __IO uint32_t K1RR; /*!< CRYP key right register 1, Address offset: 0x2C */ - __IO uint32_t K2LR; /*!< CRYP key left register 2, Address offset: 0x30 */ - __IO uint32_t K2RR; /*!< CRYP key right register 2, Address offset: 0x34 */ - __IO uint32_t K3LR; /*!< CRYP key left register 3, Address offset: 0x38 */ - __IO uint32_t K3RR; /*!< CRYP key right register 3, Address offset: 0x3C */ - __IO uint32_t IV0LR; /*!< CRYP initialization vector left-word register 0, Address offset: 0x40 */ - __IO uint32_t IV0RR; /*!< CRYP initialization vector right-word register 0, Address offset: 0x44 */ - __IO uint32_t IV1LR; /*!< CRYP initialization vector left-word register 1, Address offset: 0x48 */ - __IO uint32_t IV1RR; /*!< CRYP initialization vector right-word register 1, Address offset: 0x4C */ - __IO uint32_t CSGCMCCM0R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 0, Address offset: 0x50 */ - __IO uint32_t CSGCMCCM1R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 1, Address offset: 0x54 */ - __IO uint32_t CSGCMCCM2R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 2, Address offset: 0x58 */ - __IO uint32_t CSGCMCCM3R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 3, Address offset: 0x5C */ - __IO uint32_t CSGCMCCM4R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 4, Address offset: 0x60 */ - __IO uint32_t CSGCMCCM5R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 5, Address offset: 0x64 */ - __IO uint32_t CSGCMCCM6R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 6, Address offset: 0x68 */ - __IO uint32_t CSGCMCCM7R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 7, Address offset: 0x6C */ - __IO uint32_t CSGCM0R; /*!< CRYP GCM/GMAC context swap register 0, Address offset: 0x70 */ - __IO uint32_t CSGCM1R; /*!< CRYP GCM/GMAC context swap register 1, Address offset: 0x74 */ - __IO uint32_t CSGCM2R; /*!< CRYP GCM/GMAC context swap register 2, Address offset: 0x78 */ - __IO uint32_t CSGCM3R; /*!< CRYP GCM/GMAC context swap register 3, Address offset: 0x7C */ - __IO uint32_t CSGCM4R; /*!< CRYP GCM/GMAC context swap register 4, Address offset: 0x80 */ - __IO uint32_t CSGCM5R; /*!< CRYP GCM/GMAC context swap register 5, Address offset: 0x84 */ - __IO uint32_t CSGCM6R; /*!< CRYP GCM/GMAC context swap register 6, Address offset: 0x88 */ - __IO uint32_t CSGCM7R; /*!< CRYP GCM/GMAC context swap register 7, Address offset: 0x8C */ -} CRYP_TypeDef; - -/** - * @brief HASH - */ - -typedef struct -{ - __IO uint32_t CR; /*!< HASH control register, Address offset: 0x00 */ - __IO uint32_t DIN; /*!< HASH data input register, Address offset: 0x04 */ - __IO uint32_t STR; /*!< HASH start register, Address offset: 0x08 */ - __IO uint32_t HR[5]; /*!< HASH digest registers, Address offset: 0x0C-0x1C */ - __IO uint32_t IMR; /*!< HASH interrupt enable register, Address offset: 0x20 */ - __IO uint32_t SR; /*!< HASH status register, Address offset: 0x24 */ - uint32_t RESERVED[52]; /*!< Reserved, 0x28-0xF4 */ - __IO uint32_t CSR[54]; /*!< HASH context swap registers, Address offset: 0x0F8-0x1CC */ -} HASH_TypeDef; - -/** - * @brief HASH_DIGEST - */ - -typedef struct -{ - __IO uint32_t HR[8]; /*!< HASH digest registers, Address offset: 0x310-0x32C */ -} HASH_DIGEST_TypeDef; - -/** - * @brief RNG - */ - -typedef struct -{ - __IO uint32_t CR; /*!< RNG control register, Address offset: 0x00 */ - __IO uint32_t SR; /*!< RNG status register, Address offset: 0x04 */ - __IO uint32_t DR; /*!< RNG data register, Address offset: 0x08 */ -} RNG_TypeDef; - -/** - * @} - */ - -/** @addtogroup Peripheral_memory_map - * @{ - */ -#define FLASH_BASE ((uint32_t)0x08000000) /*!< FLASH(up to 1 MB) base address in the alias region */ -#define CCMDATARAM_BASE ((uint32_t)0x10000000) /*!< CCM(core coupled memory) data RAM(64 KB) base address in the alias region */ -#define SRAM1_BASE ((uint32_t)0x20000000) /*!< SRAM1(112 KB) base address in the alias region */ -#define SRAM2_BASE ((uint32_t)0x2001C000) /*!< SRAM2(16 KB) base address in the alias region */ -#define SRAM3_BASE ((uint32_t)0x20020000) /*!< SRAM3(64 KB) base address in the alias region */ -#define PERIPH_BASE ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */ -#define BKPSRAM_BASE ((uint32_t)0x40024000) /*!< Backup SRAM(4 KB) base address in the alias region */ -#define FSMC_R_BASE ((uint32_t)0xA0000000) /*!< FSMC registers base address */ - -#define CCMDATARAM_BB_BASE ((uint32_t)0x12000000) /*!< CCM(core coupled memory) data RAM(64 KB) base address in the bit-band region */ -#define SRAM1_BB_BASE ((uint32_t)0x22000000) /*!< SRAM1(112 KB) base address in the bit-band region */ -#define SRAM2_BB_BASE ((uint32_t)0x2201C000) /*!< SRAM2(16 KB) base address in the bit-band region */ -#define SRAM3_BB_BASE ((uint32_t)0x22020000) /*!< SRAM3(64 KB) base address in the bit-band region */ -#define PERIPH_BB_BASE ((uint32_t)0x42000000) /*!< Peripheral base address in the bit-band region */ -#define BKPSRAM_BB_BASE ((uint32_t)0x42024000) /*!< Backup SRAM(4 KB) base address in the bit-band region */ - -/* Legacy defines */ -#define SRAM_BASE SRAM1_BASE -#define SRAM_BB_BASE SRAM1_BB_BASE - -/*!< Peripheral memory map */ -#define APB1PERIPH_BASE PERIPH_BASE -#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) -#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000) -#define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000) - -/*!< APB1 peripherals */ -#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 I2S2ext_BASE (APB1PERIPH_BASE + 0x3400) -#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) -#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00) -#define I2S3ext_BASE (APB1PERIPH_BASE + 0x4000) -#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 I2C3_BASE (APB1PERIPH_BASE + 0x5C00) -#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) -#define CAN2_BASE (APB1PERIPH_BASE + 0x6800) -#define PWR_BASE (APB1PERIPH_BASE + 0x7000) -#define DAC_BASE (APB1PERIPH_BASE + 0x7400) -#define UART7_BASE (APB1PERIPH_BASE + 0x7800) -#define UART8_BASE (APB1PERIPH_BASE + 0x7C00) - -/*!< APB2 peripherals */ -#define TIM1_BASE (APB2PERIPH_BASE + 0x0000) -#define TIM8_BASE (APB2PERIPH_BASE + 0x0400) -#define USART1_BASE (APB2PERIPH_BASE + 0x1000) -#define USART6_BASE (APB2PERIPH_BASE + 0x1400) -#define ADC1_BASE (APB2PERIPH_BASE + 0x2000) -#define ADC2_BASE (APB2PERIPH_BASE + 0x2100) -#define ADC3_BASE (APB2PERIPH_BASE + 0x2200) -#define ADC_BASE (APB2PERIPH_BASE + 0x2300) -#define SDIO_BASE (APB2PERIPH_BASE + 0x2C00) -#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) -#define SPI4_BASE (APB2PERIPH_BASE + 0x3400) -#define SYSCFG_BASE (APB2PERIPH_BASE + 0x3800) -#define EXTI_BASE (APB2PERIPH_BASE + 0x3C00) -#define TIM9_BASE (APB2PERIPH_BASE + 0x4000) -#define TIM10_BASE (APB2PERIPH_BASE + 0x4400) -#define TIM11_BASE (APB2PERIPH_BASE + 0x4800) -#define SPI5_BASE (APB2PERIPH_BASE + 0x5000) -#define SPI6_BASE (APB2PERIPH_BASE + 0x5400) - -/*!< AHB1 peripherals */ -#define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000) -#define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400) -#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800) -#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00) -#define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000) -#define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400) -#define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800) -#define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00) -#define GPIOI_BASE (AHB1PERIPH_BASE + 0x2000) - -#define CRC_BASE (AHB1PERIPH_BASE + 0x3000) -#define RCC_BASE (AHB1PERIPH_BASE + 0x3800) -#define FLASH_R_BASE (AHB1PERIPH_BASE + 0x3C00) -#define DMA1_BASE (AHB1PERIPH_BASE + 0x6000) -#define DMA1_Stream0_BASE (DMA1_BASE + 0x010) -#define DMA1_Stream1_BASE (DMA1_BASE + 0x028) -#define DMA1_Stream2_BASE (DMA1_BASE + 0x040) -#define DMA1_Stream3_BASE (DMA1_BASE + 0x058) -#define DMA1_Stream4_BASE (DMA1_BASE + 0x070) -#define DMA1_Stream5_BASE (DMA1_BASE + 0x088) -#define DMA1_Stream6_BASE (DMA1_BASE + 0x0A0) -#define DMA1_Stream7_BASE (DMA1_BASE + 0x0B8) -#define DMA2_BASE (AHB1PERIPH_BASE + 0x6400) -#define DMA2_Stream0_BASE (DMA2_BASE + 0x010) -#define DMA2_Stream1_BASE (DMA2_BASE + 0x028) -#define DMA2_Stream2_BASE (DMA2_BASE + 0x040) -#define DMA2_Stream3_BASE (DMA2_BASE + 0x058) -#define DMA2_Stream4_BASE (DMA2_BASE + 0x070) -#define DMA2_Stream5_BASE (DMA2_BASE + 0x088) -#define DMA2_Stream6_BASE (DMA2_BASE + 0x0A0) -#define DMA2_Stream7_BASE (DMA2_BASE + 0x0B8) -#define ETH_BASE (AHB1PERIPH_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) - -/*!< AHB2 peripherals */ -#define DCMI_BASE (AHB2PERIPH_BASE + 0x50000) -#define CRYP_BASE (AHB2PERIPH_BASE + 0x60000) -#define HASH_BASE (AHB2PERIPH_BASE + 0x60400) -#define HASH_DIGEST_BASE (AHB2PERIPH_BASE + 0x60710) -#define RNG_BASE (AHB2PERIPH_BASE + 0x60800) - -/*!< FSMC Bankx registers base address */ -#define FSMC_Bank1_R_BASE (FSMC_R_BASE + 0x0000) -#define FSMC_Bank1E_R_BASE (FSMC_R_BASE + 0x0104) -#define FSMC_Bank2_R_BASE (FSMC_R_BASE + 0x0060) -#define FSMC_Bank3_R_BASE (FSMC_R_BASE + 0x0080) -#define FSMC_Bank4_R_BASE (FSMC_R_BASE + 0x00A0) - -/* Debug MCU registers base address */ -#define DBGMCU_BASE ((uint32_t )0xE0042000) - -/** - * @} - */ - -/** @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 I2S2ext ((SPI_TypeDef *) I2S2ext_BASE) -#define SPI2 ((SPI_TypeDef *) SPI2_BASE) -#define SPI3 ((SPI_TypeDef *) SPI3_BASE) -#define I2S3ext ((SPI_TypeDef *) I2S3ext_BASE) -#define USART2 ((USART_TypeDef *) USART2_BASE) -#define 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 I2C3 ((I2C_TypeDef *) I2C3_BASE) -#define CAN1 ((CAN_TypeDef *) CAN1_BASE) -#define CAN2 ((CAN_TypeDef *) CAN2_BASE) -#define PWR ((PWR_TypeDef *) PWR_BASE) -#define DAC ((DAC_TypeDef *) DAC_BASE) -#define UART7 ((USART_TypeDef *) UART7_BASE) -#define UART8 ((USART_TypeDef *) UART8_BASE) -#define TIM1 ((TIM_TypeDef *) TIM1_BASE) -#define TIM8 ((TIM_TypeDef *) TIM8_BASE) -#define USART1 ((USART_TypeDef *) USART1_BASE) -#define USART6 ((USART_TypeDef *) USART6_BASE) -#define ADC ((ADC_Common_TypeDef *) ADC_BASE) -#define ADC1 ((ADC_TypeDef *) ADC1_BASE) -#define ADC2 ((ADC_TypeDef *) ADC2_BASE) -#define ADC3 ((ADC_TypeDef *) ADC3_BASE) -#define SDIO ((SDIO_TypeDef *) SDIO_BASE) -#define SPI1 ((SPI_TypeDef *) SPI1_BASE) -#define SPI4 ((SPI_TypeDef *) SPI4_BASE) -#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) -#define EXTI ((EXTI_TypeDef *) EXTI_BASE) -#define TIM9 ((TIM_TypeDef *) TIM9_BASE) -#define TIM10 ((TIM_TypeDef *) TIM10_BASE) -#define TIM11 ((TIM_TypeDef *) TIM11_BASE) -#define SPI5 ((SPI_TypeDef *) SPI5_BASE) -#define SPI6 ((SPI_TypeDef *) SPI6_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 GPIOH ((GPIO_TypeDef *) GPIOH_BASE) -#define GPIOI ((GPIO_TypeDef *) GPIOI_BASE) - -#define CRC ((CRC_TypeDef *) CRC_BASE) -#define RCC ((RCC_TypeDef *) RCC_BASE) -#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) -#define DMA1 ((DMA_TypeDef *) DMA1_BASE) -#define DMA1_Stream0 ((DMA_Stream_TypeDef *) DMA1_Stream0_BASE) -#define DMA1_Stream1 ((DMA_Stream_TypeDef *) DMA1_Stream1_BASE) -#define DMA1_Stream2 ((DMA_Stream_TypeDef *) DMA1_Stream2_BASE) -#define DMA1_Stream3 ((DMA_Stream_TypeDef *) DMA1_Stream3_BASE) -#define DMA1_Stream4 ((DMA_Stream_TypeDef *) DMA1_Stream4_BASE) -#define DMA1_Stream5 ((DMA_Stream_TypeDef *) DMA1_Stream5_BASE) -#define DMA1_Stream6 ((DMA_Stream_TypeDef *) DMA1_Stream6_BASE) -#define DMA1_Stream7 ((DMA_Stream_TypeDef *) DMA1_Stream7_BASE) -#define DMA2 ((DMA_TypeDef *) DMA2_BASE) -#define DMA2_Stream0 ((DMA_Stream_TypeDef *) DMA2_Stream0_BASE) -#define DMA2_Stream1 ((DMA_Stream_TypeDef *) DMA2_Stream1_BASE) -#define DMA2_Stream2 ((DMA_Stream_TypeDef *) DMA2_Stream2_BASE) -#define DMA2_Stream3 ((DMA_Stream_TypeDef *) DMA2_Stream3_BASE) -#define DMA2_Stream4 ((DMA_Stream_TypeDef *) DMA2_Stream4_BASE) -#define DMA2_Stream5 ((DMA_Stream_TypeDef *) DMA2_Stream5_BASE) -#define DMA2_Stream6 ((DMA_Stream_TypeDef *) DMA2_Stream6_BASE) -#define DMA2_Stream7 ((DMA_Stream_TypeDef *) DMA2_Stream7_BASE) -#define ETH ((ETH_TypeDef *) ETH_BASE) -#define DCMI ((DCMI_TypeDef *) DCMI_BASE) -#define CRYP ((CRYP_TypeDef *) CRYP_BASE) -#define HASH ((HASH_TypeDef *) HASH_BASE) -#define HASH_DIGEST ((HASH_DIGEST_TypeDef *) HASH_DIGEST_BASE) -#define RNG ((RNG_TypeDef *) RNG_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 */ -/******************************************************************************/ - -/******************************************************************************/ -/* */ -/* Analog to Digital Converter */ -/* */ -/******************************************************************************/ -/******************** Bit definition for ADC_SR register ********************/ -#define ADC_SR_AWD ((uint8_t)0x01) /*!
© COPYRIGHT 2013 STMicroelectronics
- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f4xx_system - * @{ - */ - -/** - * @brief Define to prevent recursive inclusion - */ -#ifndef __SYSTEM_STM32F4XX_H -#define __SYSTEM_STM32F4XX_H - -#ifdef __cplusplus - extern "C" { -#endif - -/** @addtogroup STM32F4xx_System_Includes - * @{ - */ - -/** - * @} - */ - - -/** @addtogroup STM32F4xx_System_Exported_types - * @{ - */ - -extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ - - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Exported_Constants - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Exported_Functions - * @{ - */ - -extern void SystemInit(void); -extern void SystemCoreClockUpdate(void); -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /*__SYSTEM_STM32F4XX_H */ - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Release_Notes.html b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Release_Notes.html deleted file mode 100644 index f9a7a6c6..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Release_Notes.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Release Notes for STM32F4xx CMSIS - - - - - -
-


-

-
- - - - - - -
- - - - - - - - - -
Back to Release page
-

Release -Notes for STM32F4xx CMSIS

-

Copyright 2013 STMicroelectronics

-

-
-

 

- - - - - - -
-

Contents

-
    -
  1. STM32F4xx CMSIS -update History
  2. -
  3. License
  4. -
- -

STM32F4xx CMSIS -update History

- -

V1.1.0 / 11-January-2013

Main -Changes

- -
  • Official release for STM32F427x/437x devices.
  • stm32f4xx.h
    -
    • Update product define: replace "#define STM32F4XX" by "#define -STM32F40XX" for STM32F40x/41x devices
    •  Add new product define: "#define -STM32F427X" for STM32F427x/437x devices.
  • Add new startup files "startup_stm32f427x.s" for -all toolchains
  • rename startup files "startup_stm32f4xx.s" by "startup_stm32f40xx.s" for -all toolchains -
  • system_stm32f4xx.c
    • Prefetch Buffer enabled
    • Add reference to STM32F427x/437x devices and STM324x7I_EVAL board
    • SystemInit_ExtMemCtl() function
      -
      • Add configuration of missing FSMC address and data lines
        -
      • Change memory type to SRAM instead of PSRAM (PSRAM is available only on STM324xG-EVAL RevA) and update timing values

V1.0.2 / 05-March-2012

-

Main -Changes

- -
  • All source files: license disclaimer text update and add link to the License file on ST Internet.

V1.0.1 / 28-December-2011

Main -Changes

-
  • All source files: update disclaimer to add reference to the new license agreement
  • stm32f4xx.h
    • Correct bit definition: RCC_AHB2RSTR_HSAHRST changed to RCC_AHB2RSTR_HASHRST

V1.0.0 / 30-September-2011

Main -Changes

-
  • First official release for STM32F40x/41x devices
  • Add startup file for TASKING toolchain
  • system_stm32f4xx.c: driver's comments update

V1.0.0RC2 / 26-September-2011

Main -Changes

-
  • Official version (V1.0.0) Release Candidate2 for STM32F40x/41x devices
  • stm32f4xx.h
    • Add define for Cortex-M4 revision __CM4_REV
    • Correct RCC_CFGR_PPRE2_DIV16 bit (in RCC_CFGR register) value to 0x0000E000
    • Correct some bits definition to be in line with naming used in the Reference Manual (RM0090)
      • GPIO_OTYPER_IDR_x changed to GPIO_IDR_IDR_x
      • GPIO_OTYPER_ODR_x changed to GPIO_ODR_ODR_x
      • SYSCFG_PMC_MII_RMII changed to SYSCFG_PMC_MII_RMII_SEL
      • RCC_APB2RSTR_SPI1 changed to RCC_APB2RSTR_SPI1RST
      • DBGMCU_APB1_FZ_DBG_IWDEG_STOP changed to DBGMCU_APB1_FZ_DBG_IWDG_STOP
      • PWR_CR_PMODE changed to PWR_CR_VOS
      • PWR_CSR_REGRDY changed to PWR_CSR_VOSRDY
      • Add new define RCC_AHB1ENR_CCMDATARAMEN
      • Add new defines SRAM2_BASE, CCMDATARAM_BASE and BKPSRAM_BASE
    • GPIO_TypeDef structure: in the comment change AFR[2] address mapping to 0x20-0x24 instead of 0x24-0x28
  • system_stm32f4xx.c
    • SystemInit(): add code to enable the FPU
    • SetSysClock(): change PWR_CR_PMODE by PWR_CR_VOS
    • SystemInit_ExtMemCtl(): remove commented values
  • startup (for all compilers)
    • Delete code used to enable the FPU (moved to system_stm32f4xx.c file)
    • File’s header updated

V1.0.0RC1 / 25-August-2011

Main -Changes

-
  • Official version (V1.0.0) Release Candidate1 for STM32F4xx devices
- -
    -
-

License

- - -

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless -required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See -the License for the specific language governing permissions and -limitations under the License.
-
-
-

For -complete documentation on STM32 Microcontrollers -visit www.st.com/STM32

-
-

-
-
-

 

-
- \ No newline at end of file diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Source/system_stm32f4xx.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Source/system_stm32f4xx.c deleted file mode 100644 index 1be82e03..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Source/system_stm32f4xx.c +++ /dev/null @@ -1,561 +0,0 @@ -/** - ****************************************************************************** - * @file system_stm32f4xx.c - * @author MCD Application Team - * @version V1.1.0 - * @date 24-May-2013 - * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. - * This file contains the system clock configuration for STM32F4xx devices, - * and is generated by the clock configuration tool - * stm32f4xx_Clock_Configuration_V1.1.0.xls - * - * 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 - * and Divider factors, AHB/APBx prescalers and Flash settings), - * depending on the configuration made in the clock xls tool. - * This function is called at startup just after reset and - * before branch to main program. This call is made inside - * the "startup_stm32f4xx.s" file. - * - * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used - * by the user application to setup the SysTick - * timer or configure other parameters. - * - * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must - * be called whenever the core clock is changed - * during program execution. - * - * 2. After each device reset the HSI (16 MHz) is used as system clock source. - * Then SystemInit() function is called, in "startup_stm32f4xx.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 25MHz, refer to "HSE_VALUE" define - * in "stm32f4xx.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. - * - * 5. This file configures the system clock as follows: - *============================================================================= - *============================================================================= - * Supported STM32F40xx/41xx/427x/437x devices - *----------------------------------------------------------------------------- - * System Clock source | PLL (HSE) - *----------------------------------------------------------------------------- - * SYSCLK(Hz) | 168000000 - *----------------------------------------------------------------------------- - * HCLK(Hz) | 168000000 - *----------------------------------------------------------------------------- - * AHB Prescaler | 1 - *----------------------------------------------------------------------------- - * APB1 Prescaler | 4 - *----------------------------------------------------------------------------- - * APB2 Prescaler | 2 - *----------------------------------------------------------------------------- - * HSE Frequency(Hz) | 12000000 - *----------------------------------------------------------------------------- - * PLL_M | 12 - *----------------------------------------------------------------------------- - * PLL_N | 336 - *----------------------------------------------------------------------------- - * PLL_P | 2 - *----------------------------------------------------------------------------- - * PLL_Q | 7 - *----------------------------------------------------------------------------- - * PLLI2S_N | NA - *----------------------------------------------------------------------------- - * PLLI2S_R | NA - *----------------------------------------------------------------------------- - * I2S input clock | NA - *----------------------------------------------------------------------------- - * VDD(V) | 3,3 - *----------------------------------------------------------------------------- - * Main regulator output voltage | Scale1 mode - *----------------------------------------------------------------------------- - * Flash Latency(WS) | 5 - *----------------------------------------------------------------------------- - * Prefetch Buffer | OFF - *----------------------------------------------------------------------------- - * Instruction cache | ON - *----------------------------------------------------------------------------- - * Data cache | ON - *----------------------------------------------------------------------------- - * Require 48MHz for USB OTG FS, | Enabled - * SDIO and RNG clock | - *----------------------------------------------------------------------------- - *============================================================================= - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f4xx_system - * @{ - */ - -/** @addtogroup STM32F4xx_System_Private_Includes - * @{ - */ - -#include "stm32f4xx.h" - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Defines - * @{ - */ - -/************************* Miscellaneous Configuration ************************/ -/*!< Uncomment the following line if you need to use external SRAM mounted - on STM324xG_EVAL/STM324x7I_EVAL board as data memory */ -/* #define DATA_IN_ExtSRAM */ - -/*!< Uncomment the following line if you need to relocate your vector Table in - Internal SRAM. */ -/* #define VECT_TAB_SRAM */ -#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ -/******************************************************************************/ - -/************************* PLL Parameters *************************************/ -/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ -#define PLL_M 12 -#define PLL_N 336 - -/* SYSCLK = PLL_VCO / PLL_P */ -#define PLL_P 2 - -/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ -#define PLL_Q 7 - -/******************************************************************************/ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Variables - * @{ - */ - - uint32_t SystemCoreClock = 168000000; - - __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes - * @{ - */ - -static void SetSysClock(void); -#ifdef DATA_IN_ExtSRAM - static void SystemInit_ExtMemCtl(void); -#endif /* DATA_IN_ExtSRAM */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Functions - * @{ - */ - -/** - * @brief Setup the microcontroller system - * Initialize the Embedded Flash Interface, the PLL and update the - * SystemFrequency variable. - * @param None - * @retval None - */ -void SystemInit(void) -{ - /* FPU settings ------------------------------------------------------------*/ - #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ - #endif - /* Reset the RCC clock configuration to the default reset state ------------*/ - /* Set HSION bit */ - RCC->CR |= (uint32_t)0x00000001; - - /* Reset CFGR register */ - RCC->CFGR = 0x00000000; - - /* Reset HSEON, CSSON and PLLON bits */ - RCC->CR &= (uint32_t)0xFEF6FFFF; - - /* Reset PLLCFGR register */ - RCC->PLLCFGR = 0x24003010; - - /* Reset HSEBYP bit */ - RCC->CR &= (uint32_t)0xFFFBFFFF; - - /* Disable all interrupts */ - RCC->CIR = 0x00000000; - -#ifdef DATA_IN_ExtSRAM - SystemInit_ExtMemCtl(); -#endif /* DATA_IN_ExtSRAM */ - - /* Configure the System clock source, PLL Multiplier and Divider factors, - AHB/APBx prescalers and Flash settings ----------------------------------*/ - SetSysClock(); - - /* Configure the Vector Table location add offset address ------------------*/ -#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/divided by the PLL factors. - * - * (*) HSI_VALUE is a constant defined in stm32f4xx.h file (default value - * 16 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * - * (**) HSE_VALUE is a constant defined in stm32f4xx.h file (default value - * 25 MHz), user has to ensure that HSE_VALUE is same as the real - * frequency of the crystal used. Otherwise, this function may - * have wrong result. - * - * - The result of this function could be not correct when using fractional - * value for HSE crystal. - * - * @param None - * @retval None - */ -void SystemCoreClockUpdate(void) -{ - uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFGR & RCC_CFGR_SWS; - - switch (tmp) - { - case 0x00: /* HSI used as system clock source */ - SystemCoreClock = HSI_VALUE; - break; - case 0x04: /* HSE used as system clock source */ - SystemCoreClock = HSE_VALUE; - break; - case 0x08: /* PLL used as system clock source */ - - /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N - SYSCLK = PLL_VCO / PLL_P - */ - pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; - pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; - - if (pllsource != 0) - { - /* HSE used as PLL clock source */ - pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - else - { - /* HSI used as PLL clock source */ - pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - - pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; - SystemCoreClock = pllvco/pllp; - break; - default: - SystemCoreClock = HSI_VALUE; - break; - } - /* Compute HCLK frequency --------------------------------------------------*/ - /* Get HCLK prescaler */ - tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; - /* HCLK frequency */ - SystemCoreClock >>= tmp; -} - -/** - * @brief Configures the System clock source, PLL Multiplier and Divider factors, - * AHB/APBx prescalers and Flash settings - * @Note This function should be called only once the RCC clock configuration - * is reset to the default reset state (done in SystemInit() function). - * @param None - * @retval None - */ -static void SetSysClock(void) -{ -/******************************************************************************/ -/* PLL (clocked by HSE) used as System clock source */ -/******************************************************************************/ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* 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) - { - /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */ - RCC->APB1ENR |= RCC_APB1ENR_PWREN; - PWR->CR |= PWR_CR_VOS; - - /* HCLK = SYSCLK / 1*/ - RCC->CFGR |= RCC_CFGR_HPRE_DIV1; - - /* PCLK2 = HCLK / 2*/ - RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; - - /* PCLK1 = HCLK / 4*/ - RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; - - /* Configure the main PLL */ - RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | - (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); - - /* Enable the main PLL */ - RCC->CR |= RCC_CR_PLLON; - - /* Wait till the main PLL is ready */ - while((RCC->CR & RCC_CR_PLLRDY) == 0) - { - } - - /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ - FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; - - /* Select the main PLL as system clock source */ - RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); - RCC->CFGR |= RCC_CFGR_SW_PLL; - - /* Wait till the main PLL is used as system clock source */ - while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); - { - } - } - 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 */ - } - -} - -/** - * @brief Setup the external memory controller. Called in startup_stm32f4xx.s - * before jump to __main - * @param None - * @retval None - */ -#ifdef DATA_IN_ExtSRAM -/** - * @brief Setup the external memory controller. - * Called in startup_stm32f4xx.s before jump to main. - * This function configures the external SRAM mounted on STM324xG_EVAL/STM324x7I_EVAL board - * This SRAM will be used as program data memory (including heap and stack). - * @param None - * @retval None - */ -void SystemInit_ExtMemCtl(void) -{ -/*-- GPIOs Configuration -----------------------------------------------------*/ -/* - +-------------------+--------------------+------------------+------------------+ - + SRAM pins assignment + - +-------------------+--------------------+------------------+------------------+ - | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | - | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | - | PD4 <-> FSMC_NOE | PE2 <-> FSMC_A23 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | - | PD5 <-> FSMC_NWE | PE3 <-> FSMC_A19 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | - | PD8 <-> FSMC_D13 | PE4 <-> FSMC_A20 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | - | PD9 <-> FSMC_D14 | PE5 <-> FSMC_A21 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | - | PD10 <-> FSMC_D15 | PE6 <-> FSMC_A22 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | - | PD11 <-> FSMC_A16 | PE7 <-> FSMC_D4 | PF13 <-> FSMC_A7 |------------------+ - | PD12 <-> FSMC_A17 | PE8 <-> FSMC_D5 | PF14 <-> FSMC_A8 | - | PD13 <-> FSMC_A18 | PE9 <-> FSMC_D6 | PF15 <-> FSMC_A9 | - | PD14 <-> FSMC_D0 | PE10 <-> FSMC_D7 |------------------+ - | PD15 <-> FSMC_D1 | PE11 <-> FSMC_D8 | - +-------------------| PE12 <-> FSMC_D9 | - | PE13 <-> FSMC_D10 | - | PE14 <-> FSMC_D11 | - | PE15 <-> FSMC_D12 | - +--------------------+ -*/ - /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ - RCC->AHB1ENR |= 0x00000078; - - /* Connect PDx pins to FSMC Alternate function */ - GPIOD->AFR[0] = 0x00cc00cc; - GPIOD->AFR[1] = 0xcccccccc; - /* Configure PDx pins in Alternate function mode */ - GPIOD->MODER = 0xaaaa0a0a; - /* Configure PDx pins speed to 100 MHz */ - GPIOD->OSPEEDR = 0xffff0f0f; - /* Configure PDx pins Output type to push-pull */ - GPIOD->OTYPER = 0x00000000; - /* No pull-up, pull-down for PDx pins */ - GPIOD->PUPDR = 0x00000000; - - /* Connect PEx pins to FSMC Alternate function */ - GPIOE->AFR[0] = 0xcccccccc; - GPIOE->AFR[1] = 0xcccccccc; - /* Configure PEx pins in Alternate function mode */ - GPIOE->MODER = 0xaaaaaaaa; - /* Configure PEx pins speed to 100 MHz */ - GPIOE->OSPEEDR = 0xffffffff; - /* Configure PEx pins Output type to push-pull */ - GPIOE->OTYPER = 0x00000000; - /* No pull-up, pull-down for PEx pins */ - GPIOE->PUPDR = 0x00000000; - - /* Connect PFx pins to FSMC Alternate function */ - GPIOF->AFR[0] = 0x00cccccc; - GPIOF->AFR[1] = 0xcccc0000; - /* Configure PFx pins in Alternate function mode */ - GPIOF->MODER = 0xaa000aaa; - /* Configure PFx pins speed to 100 MHz */ - GPIOF->OSPEEDR = 0xff000fff; - /* Configure PFx pins Output type to push-pull */ - GPIOF->OTYPER = 0x00000000; - /* No pull-up, pull-down for PFx pins */ - GPIOF->PUPDR = 0x00000000; - - /* Connect PGx pins to FSMC Alternate function */ - GPIOG->AFR[0] = 0x00cccccc; - GPIOG->AFR[1] = 0x000000c0; - /* Configure PGx pins in Alternate function mode */ - GPIOG->MODER = 0x00080aaa; - /* Configure PGx pins speed to 100 MHz */ - GPIOG->OSPEEDR = 0x000c0fff; - /* Configure PGx pins Output type to push-pull */ - GPIOG->OTYPER = 0x00000000; - /* No pull-up, pull-down for PGx pins */ - GPIOG->PUPDR = 0x00000000; - -/*-- FSMC Configuration ------------------------------------------------------*/ - /* Enable the FSMC interface clock */ - RCC->AHB3ENR |= 0x00000001; - - /* Configure and enable Bank1_SRAM2 */ - FSMC_Bank1->BTCR[2] = 0x00001011; - FSMC_Bank1->BTCR[3] = 0x00000201; - FSMC_Bank1E->BWTR[2] = 0x0fffffff; -/* - Bank1_SRAM2 is configured as follow: - - p.FSMC_AddressSetupTime = 1; - p.FSMC_AddressHoldTime = 0; - p.FSMC_DataSetupTime = 2; - p.FSMC_BusTurnAroundDuration = 0; - p.FSMC_CLKDivision = 0; - p.FSMC_DataLatency = 0; - p.FSMC_AccessMode = FSMC_AccessMode_A; - - FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; - FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; - FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; - FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; - FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; - FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; - FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; - FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; - FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; - FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; - FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; - FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; - FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; - FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; - FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; -*/ -} -#endif /* DATA_IN_ExtSRAM */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cm4.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cm4.h deleted file mode 100644 index 024302e4..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cm4.h +++ /dev/null @@ -1,1757 +0,0 @@ -/**************************************************************************//** - * @file core_cm4.h - * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File - * @version V3.01 - * @date 22. March 2012 - * - * @note - * Copyright (C) 2009-2012 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#endif - -#ifdef __cplusplus - extern "C" { -#endif - -#ifndef __CORE_CM4_H_GENERIC -#define __CORE_CM4_H_GENERIC - -/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** \ingroup Cortex_M4 - @{ - */ - -/* CMSIS CM4 definitions */ -#define __CM4_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ -#define __CM4_CMSIS_VERSION_SUB (0x01) /*!< [15:0] CMSIS HAL sub version */ -#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16) | \ - __CM4_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ - -#define __CORTEX_M (0x04) /*!< Cortex-M Core */ - - -#if defined ( __CC_ARM ) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - #define __STATIC_INLINE static __inline - -#elif defined ( __ICCARM__ ) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ - #define __STATIC_INLINE static inline - -#elif defined ( __TMS470__ ) - #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ - #define __STATIC_INLINE static inline - -#elif defined ( __GNUC__ ) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - #define __STATIC_INLINE static inline - -#elif defined ( __TASKING__ ) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - #define __STATIC_INLINE static inline - -#endif - -/** __FPU_USED indicates whether an FPU is used or not. For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. -*/ -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __TMS470__ ) - #if defined __TI_VFP_SUPPORT__ - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif -#endif - -#include /* standard types definitions */ -#include /* Core Instruction Access */ -#include /* Core Function Access */ -#include /* Compiler specific SIMD Intrinsics */ - -#endif /* __CORE_CM4_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM4_H_DEPENDANT -#define __CORE_CM4_H_DEPENDANT - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM4_REV - #define __CM4_REV 0x0000 - #warning "__CM4_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0 - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0 - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0 - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#ifdef __cplusplus - #define __I volatile /*!< Defines 'read only' permissions */ -#else - #define __I volatile const /*!< Defines 'read only' permissions */ -#endif -#define __O volatile /*!< Defines 'write only' permissions */ -#define __IO volatile /*!< Defines 'read / write' permissions */ - -/*@} end of group Cortex_M4 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core FPU Register - ******************************************************************************/ -/** \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ -#else - uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ -#endif - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - - -/** \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - - -/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ -#else - uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ -#endif - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - - -/** \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ - uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/*@} end of group CMSIS_CORE */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[24]; - __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[24]; - __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[24]; - __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[24]; - __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[56]; - __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644]; - __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[5]; - __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ -#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ -#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Registers Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* SCB Hard Fault Status Registers Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1]; - __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ - -/* Auxiliary Control Register Definitions */ -#define SCnSCB_ACTLR_DISOOFP_Pos 9 /*!< ACTLR: DISOOFP Position */ -#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ - -#define SCnSCB_ACTLR_DISFPCA_Pos 8 /*!< ACTLR: DISFPCA Position */ -#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ - -#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ -#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ - -#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ -#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ - -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ -#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __O union - { - __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864]; - __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15]; - __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15]; - __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[29]; - __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ - __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ - __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ - uint32_t RESERVED4[43]; - __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[6]; - __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Integration Write Register Definitions */ -#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ -#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ - -/* ITM Integration Read Register Definitions */ -#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ -#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ - -/* ITM Integration Mode Control Register Definitions */ -#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ -#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1]; - __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1]; - __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1]; - __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Mask Register Definitions */ -#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ -#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ -#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ - -#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ -#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ -#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ - -#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ -#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ - -#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ -#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ - -#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ -#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ - -#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ -#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2]; - __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55]; - __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131]; - __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759]; - __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ - __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1]; - __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39]; - __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8]; - __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration ETM Data Register Definitions (FIFO0) */ -#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ -#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ - -#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ -#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ - -#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ -#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ - -#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ -#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ - -#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ - -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ - -/* TPI Integration ITM Data Register Definitions (FIFO1) */ -#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ -#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ - -#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ -#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ - -#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ -#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ - -#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ -#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ - -#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ - -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if (__MPU_PRESENT == 1) -/** \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ - __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ - __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ - __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ - __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ - __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ - __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -/* MPU Type Register */ -#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register */ -#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register */ -#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register */ -#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register */ -#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ -#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ - -#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ -#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ - -#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ -#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ - -#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ -#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ - -#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ -#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ - -#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ -#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ - -#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ -#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ - -#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -#if (__FPU_PRESENT == 1) -/** \ingroup CMSIS_core_register - \defgroup CMSIS_FPU Floating Point Unit (FPU) - \brief Type definitions for the Floating Point Unit (FPU) - @{ - */ - -/** \brief Structure type to access the Floating Point Unit (FPU). - */ -typedef struct -{ - uint32_t RESERVED0[1]; - __IO uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ - __IO uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ - __IO uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ - __I uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ - __I uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ -} FPU_Type; - -/* Floating-Point Context Control Register */ -#define FPU_FPCCR_ASPEN_Pos 31 /*!< FPCCR: ASPEN bit Position */ -#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ - -#define FPU_FPCCR_LSPEN_Pos 30 /*!< FPCCR: LSPEN Position */ -#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ - -#define FPU_FPCCR_MONRDY_Pos 8 /*!< FPCCR: MONRDY Position */ -#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ - -#define FPU_FPCCR_BFRDY_Pos 6 /*!< FPCCR: BFRDY Position */ -#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ - -#define FPU_FPCCR_MMRDY_Pos 5 /*!< FPCCR: MMRDY Position */ -#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ - -#define FPU_FPCCR_HFRDY_Pos 4 /*!< FPCCR: HFRDY Position */ -#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ - -#define FPU_FPCCR_THREAD_Pos 3 /*!< FPCCR: processor mode bit Position */ -#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ - -#define FPU_FPCCR_USER_Pos 1 /*!< FPCCR: privilege level bit Position */ -#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ - -#define FPU_FPCCR_LSPACT_Pos 0 /*!< FPCCR: Lazy state preservation active bit Position */ -#define FPU_FPCCR_LSPACT_Msk (1UL << FPU_FPCCR_LSPACT_Pos) /*!< FPCCR: Lazy state preservation active bit Mask */ - -/* Floating-Point Context Address Register */ -#define FPU_FPCAR_ADDRESS_Pos 3 /*!< FPCAR: ADDRESS bit Position */ -#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ - -/* Floating-Point Default Status Control Register */ -#define FPU_FPDSCR_AHP_Pos 26 /*!< FPDSCR: AHP bit Position */ -#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ - -#define FPU_FPDSCR_DN_Pos 25 /*!< FPDSCR: DN bit Position */ -#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ - -#define FPU_FPDSCR_FZ_Pos 24 /*!< FPDSCR: FZ bit Position */ -#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ - -#define FPU_FPDSCR_RMode_Pos 22 /*!< FPDSCR: RMode bit Position */ -#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ - -/* Media and FP Feature Register 0 */ -#define FPU_MVFR0_FP_rounding_modes_Pos 28 /*!< MVFR0: FP rounding modes bits Position */ -#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ - -#define FPU_MVFR0_Short_vectors_Pos 24 /*!< MVFR0: Short vectors bits Position */ -#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ - -#define FPU_MVFR0_Square_root_Pos 20 /*!< MVFR0: Square root bits Position */ -#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ - -#define FPU_MVFR0_Divide_Pos 16 /*!< MVFR0: Divide bits Position */ -#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ - -#define FPU_MVFR0_FP_excep_trapping_Pos 12 /*!< MVFR0: FP exception trapping bits Position */ -#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ - -#define FPU_MVFR0_Double_precision_Pos 8 /*!< MVFR0: Double-precision bits Position */ -#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ - -#define FPU_MVFR0_Single_precision_Pos 4 /*!< MVFR0: Single-precision bits Position */ -#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ - -#define FPU_MVFR0_A_SIMD_registers_Pos 0 /*!< MVFR0: A_SIMD registers bits Position */ -#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL << FPU_MVFR0_A_SIMD_registers_Pos) /*!< MVFR0: A_SIMD registers bits Mask */ - -/* Media and FP Feature Register 1 */ -#define FPU_MVFR1_FP_fused_MAC_Pos 28 /*!< MVFR1: FP fused MAC bits Position */ -#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ - -#define FPU_MVFR1_FP_HPFP_Pos 24 /*!< MVFR1: FP HPFP bits Position */ -#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ - -#define FPU_MVFR1_D_NaN_mode_Pos 4 /*!< MVFR1: D_NaN mode bits Position */ -#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ - -#define FPU_MVFR1_FtZ_mode_Pos 0 /*!< MVFR1: FtZ mode bits Position */ -#define FPU_MVFR1_FtZ_mode_Msk (0xFUL << FPU_MVFR1_FtZ_mode_Pos) /*!< MVFR1: FtZ mode bits Mask */ - -/*@} end of group CMSIS_FPU */ -#endif - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register */ -#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register */ -#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Cortex-M4 Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ -#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ -#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ -#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ -#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ -#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ -#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -#if (__MPU_PRESENT == 1) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -#if (__FPU_PRESENT == 1) - #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ - #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ -#endif - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -/** \brief Set Priority Grouping - - The function sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ - SCB->AIRCR = reg_value; -} - - -/** \brief Get Priority Grouping - - The function reads the priority grouping field from the NVIC Interrupt Controller. - - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) -{ - return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ -} - - -/** \brief Enable External Interrupt - - The function enables a device-specific interrupt in the NVIC interrupt controller. - - \param [in] IRQn External interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) -{ -/* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */ - NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */ -} - - -/** \brief Disable External Interrupt - - The function disables a device-specific interrupt in the NVIC interrupt controller. - - \param [in] IRQn External interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) -{ - NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ -} - - -/** \brief Get Pending Interrupt - - The function reads the pending register in the NVIC and returns the pending bit - for the specified interrupt. - - \param [in] IRQn Interrupt number. - - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - */ -__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ -} - - -/** \brief Set Pending Interrupt - - The function sets the pending bit of an external interrupt. - - \param [in] IRQn Interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ -} - - -/** \brief Clear Pending Interrupt - - The function clears the pending bit of an external interrupt. - - \param [in] IRQn External interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ -} - - -/** \brief Get Active Interrupt - - The function reads the active register in NVIC and returns the active bit. - - \param [in] IRQn Interrupt number. - - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - */ -__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) -{ - return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ -} - - -/** \brief Set Interrupt Priority - - The function sets the priority of an interrupt. - - \note The priority cannot be set for every core interrupt. - - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - */ -__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if(IRQn < 0) { - SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ - else { - NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ -} - - -/** \brief Get Interrupt Priority - - The function reads the priority of an interrupt. The interrupt - number can be positive to specify an external (device specific) - interrupt, or negative to specify an internal (core) interrupt. - - - \param [in] IRQn Interrupt number. - \return Interrupt Priority. Value is aligned automatically to the implemented - priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) -{ - - if(IRQn < 0) { - return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ - else { - return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ -} - - -/** \brief Encode Priority - - The function encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. - - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - return ( - ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | - ((SubPriority & ((1 << (SubPriorityBits )) - 1))) - ); -} - - -/** \brief Decode Priority - - The function decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. - - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); - *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); -} - - -/** \brief System Reset - - The function initiates a system reset request to reset the MCU. - */ -__STATIC_INLINE void NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - while(1); /* wait until reset */ -} - -/*@} end of CMSIS_Core_NVICFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if (__Vendor_SysTickConfig == 0) - -/** \brief System Tick Configuration - - The function initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - - \param [in] ticks Number of ticks between two interrupts. - - \return 0 Function succeeded. - \return 1 Function failed. - - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if (ticks > 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 Systick Interrupt */ - SysTick->VAL = 0; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** \brief ITM Send Character - - The function transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - - \param [in] ch Character to transmit. - - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ - (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0].u32 == 0); - ITM->PORT[0].u8 = (uint8_t) ch; - } - return (ch); -} - - -/** \brief ITM Receive Character - - The function inputs a character via the external variable \ref ITM_RxBuffer. - - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) { - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** \brief ITM Check Character - - The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) { - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { - return (0); /* no character available */ - } else { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - -#endif /* __CORE_CM4_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ - -#ifdef __cplusplus -} -#endif diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cm4_simd.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cm4_simd.h deleted file mode 100644 index b5140073..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/Include/core_cm4_simd.h +++ /dev/null @@ -1,649 +0,0 @@ -/**************************************************************************//** - * @file core_cm4_simd.h - * @brief CMSIS Cortex-M4 SIMD Header File - * @version V3.01 - * @date 06. March 2012 - * - * @note - * Copyright (C) 2010-2012 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#ifdef __cplusplus - extern "C" { -#endif - -#ifndef __CORE_CM4_SIMD_H -#define __CORE_CM4_SIMD_H - - -/******************************************************************************* - * Hardware Abstraction Layer - ******************************************************************************/ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -#define __SADD8 __sadd8 -#define __QADD8 __qadd8 -#define __SHADD8 __shadd8 -#define __UADD8 __uadd8 -#define __UQADD8 __uqadd8 -#define __UHADD8 __uhadd8 -#define __SSUB8 __ssub8 -#define __QSUB8 __qsub8 -#define __SHSUB8 __shsub8 -#define __USUB8 __usub8 -#define __UQSUB8 __uqsub8 -#define __UHSUB8 __uhsub8 -#define __SADD16 __sadd16 -#define __QADD16 __qadd16 -#define __SHADD16 __shadd16 -#define __UADD16 __uadd16 -#define __UQADD16 __uqadd16 -#define __UHADD16 __uhadd16 -#define __SSUB16 __ssub16 -#define __QSUB16 __qsub16 -#define __SHSUB16 __shsub16 -#define __USUB16 __usub16 -#define __UQSUB16 __uqsub16 -#define __UHSUB16 __uhsub16 -#define __SASX __sasx -#define __QASX __qasx -#define __SHASX __shasx -#define __UASX __uasx -#define __UQASX __uqasx -#define __UHASX __uhasx -#define __SSAX __ssax -#define __QSAX __qsax -#define __SHSAX __shsax -#define __USAX __usax -#define __UQSAX __uqsax -#define __UHSAX __uhsax -#define __USAD8 __usad8 -#define __USADA8 __usada8 -#define __SSAT16 __ssat16 -#define __USAT16 __usat16 -#define __UXTB16 __uxtb16 -#define __UXTAB16 __uxtab16 -#define __SXTB16 __sxtb16 -#define __SXTAB16 __sxtab16 -#define __SMUAD __smuad -#define __SMUADX __smuadx -#define __SMLAD __smlad -#define __SMLADX __smladx -#define __SMLALD __smlald -#define __SMLALDX __smlaldx -#define __SMUSD __smusd -#define __SMUSDX __smusdx -#define __SMLSD __smlsd -#define __SMLSDX __smlsdx -#define __SMLSLD __smlsld -#define __SMLSLDX __smlsldx -#define __SEL __sel -#define __QADD __qadd -#define __QSUB __qsub - -#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) - -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) - - -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - - -#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -#include - -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - - -#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ -/* TI CCS specific functions */ - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -#include - -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - - -#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#define __SSAT16(ARG1,ARG2) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - -#define __USAT16(ARG1,ARG2) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#define __SMLALD(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ - __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ - (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ - }) - -#define __SMLALDX(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ - __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ - (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ - }) - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#define __SMLSLD(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ - __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ - (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ - }) - -#define __SMLSLDX(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ - __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ - (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ - }) - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SEL (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -#define __PKHBT(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ - __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ - __RES; \ - }) - -#define __PKHTB(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ - if (ARG3 == 0) \ - __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ - else \ - __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ - __RES; \ - }) - -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - - -#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ -/* TASKING carm specific functions */ - - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -/* not yet supported */ -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - -#endif - -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CORE_CM4_SIMD_H */ - -#ifdef __cplusplus -} -#endif diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/Release_Notes.html b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/Release_Notes.html deleted file mode 100644 index 79cb078b..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/Release_Notes.html +++ /dev/null @@ -1,978 +0,0 @@ - - - - - - - - -Release Notes for STM32F4xx Standard Peripherals Drivers - - - - - -
- -

 

- -
- - - - - -
- - - - - - - -
-

Back to Release page

-
-

Release Notes for STM32F4xx Standard - Peripherals  Drivers

-

Copyright - 2013 STMicroelectronics

-

-
-

 

- - - - -
-

Contents

-
    -
  1. STM32F4xx Standard Peripherals Drivers - update History
  2. -
  3. License
  4. -
-

STM32F4xx - Standard Peripherals Drivers  update History

V1.1.0 / 11-Janury-2013

Main -Changes

- -
  • Official release for STM32F427x/437x devices.
  • stm32f4xx_cryp.c/.h
    • Update CRYP_Init() function : add the support for new algorithms (GCM/CCM).
    • Add new function : CRYP_PhaseConfig() used for new AES-GCM and AES-CCM algorithms.
    • CRYP_InitTypeDef structure : update all structure fields from uint16_t to uint32_t and update all driver functions  parameters and the correpondant define to be declared with uint32_t type.
    • Replace the "CRYP_ContextSave->CR_bits9to2" by "CRYP_ContextSave->CurrentConfig".
  • stm32f4xx_flash.c/.h
    • Update FLASH sectors numbers "FLASH_Sector_x" with x = 0..23.
    • Update FLASH_EraseAllSectors() function to support mass erase for STM32F427x/437x devices.
  • stm32f4xx_gpio.c/.h
    • Add Alternate functions for new peripherals: SPI4, SPI5, SPI6, UART7, UART8.
    • Update all functions header -comment.
  • stm32f4xx_hash.c/.h
    • Update HASH_GetDigest() function : add the HASH_DIGEST structure.
    • Add new function HASH_AutoStartDigest().
    • Update HASH_MsgDigest structure: to support SHA-224 and SHA-256 modes.
    •  Update HASH_Context structure.
    • Update some define using bit definitions already declared in stm32f4xx.h.
  • stm32f'xx_i2c.c/.h
    • Add new functions:
      • I2C_AnalogFilterCmd(): enable/disable the analog I2C filters.
      • I2C_DigitalFilterConfig(): configure the digital I2C filters.
  • stm32f4xx_pwr.c/.h -
    • Add new argument "PWR_Regulator_Voltage_Scale3" -  to PWR_MainRegulatorModeConfig() function to be in line with - Reference Manual description.
  • stm32f4xx_rcc.c/.h
    • Add new definitions for new -peripherals: SPI4, SPI5, SPI6, SAI1, UART7, UART8.
    • Add a new parameter in RCC_PLLI2SConfig() function : PLLI2SQ to specifies the division factor for SAI1 clock.
    • Add RCC_TIMCLKPresConfig() function : TIMER Prescaler selection. 
  • stm32l1xx_spi.c/.h
    • Update to support SPI4, SPI5, SPI6. -
    • Update all functions header -comment.
  • stm32l1xx_usart.c/.h
    • Update to support UART7 and -UART8. -
    • Update all functions header -comment.

V1.0.2 / 05-March-2012

-

Main -Changes

- -
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • stm32f4xx_dcmi.c
    • DCMI_GetFlagStatus() function: fix test condition on RISR register, use if (dcmireg == 0x00) instead of if (dcmireg == 0x01)
  • stm32f4xx_pwr.c
    • PWR_PVDLevelConfig() -function: remove value of the voltage threshold corresponding to each -PVD detection level, user should refer to the electrical -characteristics of the STM32 device datasheet to have the correct -value

V1.0.1 / 28-December-2011

Main -Changes

-
  • All source files: update disclaimer to add reference to the new license agreement
  • stm32f4xx_rtc.c: 
    • In “RTC_FLAGS_MASK” define: add RTC_FLAG_RECALPF and RTC_FLAG_SHPF
    • RTC_DeInit() function: add reset of the following registers: SHIFTRCALRALRMASSR and ALRMBSSR
    • RTC_SetTime() and RTC_SetDate() functions: add test condition on BYPSHAD flag before to test RSF flag (when Bypass mode is enabled, the RSF bit is never set).

V1.0.0 / 30-September-2011

Main -Changes

-
  • First official release for STM32F40x/41x devices
  • stm32f4xx_rtc.c: remove useless code from RTC_GetDate() function
  • stm32f4xx_rcc.c, stm32f4xx_spi.c, stm32f4xx_wwdg.c and stm32f4xx_syscfg.c: driver's comments update

V1.0.0RC2 / 26-September-2011

Main -Changes

-
  • Official version (V1.0.0) Release Candidate1 for STM32F40x/STM32F41x devices
  • stm32f4xx_usart.h/.c
    • Update procedure to check on overrun error interrupt pending bit, defines for the following flag are added:
      • USART_IT_ORE_RX: this flag is set if overrun error interrupt occurs and RXNEIE bit is set
      • USART_IT_ORE_ER: this flag is set if overrun error interrupt occurs and EIE bit is set
  • stm32f4xx_tim.c
    • TIM_UpdateRequestConfig(): correct function header's comment 
    • TIM_ICInit(): add assert macros to test if the passed TIM parameter has channel 2, 3 or 4
  • stm32f4xx_pwr.h/.c
    • Rename PWR_FLAG_REGRDY constant to PWR_CSR_REGRDY
    • Rename PWR_FLAG_VOSRDY constant to PWR_CSR_VOSRDY
    • Rename PWR_HighPerformanceModeCmd(FunctionalState NewState) function to PWR_MainRegulatorModeConfig(uint32_t PWR_Regulator_Voltage)
  • stm32f4xx_rcc.h/.c
    • RCC_AHB1PeriphClockCmd(): add new constant RCC_AHB1Periph_CCMDATARAMEN as value for RCC_AHB1Periph parameter
  • stm32f4xx_spi.h
    • IS_I2S_EXT_PERIPH(): add check on I2S3ext peripheral

V1.0.0RC1 / 25-August-2011

Main -Changes

-
  • Official version (V1.0.0) Release Candidate1 for STM32F4xx devices
-

License

- - -

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless -required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See -the License for the specific language governing permissions and -limitations under the License.
-
-
-
-

For - complete documentation on STM32 - Microcontrollers visit www.st.com/STM32

-
-

-
- -
- -

 

- -
- - \ No newline at end of file diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/misc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/misc.h deleted file mode 100644 index dec96ec2..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/misc.h +++ /dev/null @@ -1,178 +0,0 @@ -/** - ****************************************************************************** - * @file misc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the miscellaneous - * firmware library functions (add-on to CMSIS functions). - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MISC_H -#define __MISC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 an enumerator of @ref IRQn_Type - enumeration (For the complete STM32 Devices IRQ Channels - list, please refer to stm32f4xx.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 MISC_NVIC_Priority_Table - A lower priority value indicates a higher priority */ - - 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 MISC_NVIC_Priority_Table - A lower priority value indicates a higher priority */ - - 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup MISC_Exported_Constants - * @{ - */ - -/** @defgroup MISC_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 MISC_System_Low_Power - * @{ - */ - -#define NVIC_LP_SEVONPEND ((uint8_t)0x10) -#define NVIC_LP_SLEEPDEEP ((uint8_t)0x04) -#define NVIC_LP_SLEEPONEXIT ((uint8_t)0x02) -#define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \ - ((LP) == NVIC_LP_SLEEPDEEP) || \ - ((LP) == NVIC_LP_SLEEPONEXIT)) -/** - * @} - */ - -/** @defgroup MISC_Preemption_Priority_Group - * @{ - */ - -#define 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 MISC_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)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_adc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_adc.h deleted file mode 100644 index bfeb4eca..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_adc.h +++ /dev/null @@ -1,649 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_adc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the ADC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_ADC_H -#define __STM32F4xx_ADC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup ADC - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief ADC Init structure definition - */ -typedef struct -{ - uint32_t ADC_Resolution; /*!< Configures the ADC resolution dual mode. - This parameter can be a value of @ref ADC_resolution */ - 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_ExternalTrigConvEdge; /*!< Select the external trigger edge and - enable the trigger of a regular group. - This parameter can be a value of - @ref ADC_external_trigger_edge_for_regular_channels_conversion */ - uint32_t ADC_ExternalTrigConv; /*!< Select the external event used to trigger - the start of conversion of a regular group. - This parameter can be a value of - @ref ADC_extrenal_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_NbrOfConversion; /*!< Specifies the number of ADC conversions - that will be done using the sequencer for - regular channel group. - This parameter must range from 1 to 16. */ -}ADC_InitTypeDef; - -/** - * @brief ADC Common Init structure definition - */ -typedef struct -{ - uint32_t ADC_Mode; /*!< Configures the ADC to operate in - independent or multi mode. - This parameter can be a value of @ref ADC_Common_mode */ - uint32_t ADC_Prescaler; /*!< Select the frequency of the clock - to the ADC. The clock is common for all the ADCs. - This parameter can be a value of @ref ADC_Prescaler */ - uint32_t ADC_DMAAccessMode; /*!< Configures the Direct memory access - mode for multi ADC mode. - This parameter can be a value of - @ref ADC_Direct_memory_access_mode_for_multi_mode */ - uint32_t ADC_TwoSamplingDelay; /*!< Configures the Delay between 2 sampling phases. - This parameter can be a value of - @ref ADC_delay_between_2_sampling_phases */ - -}ADC_CommonInitTypeDef; - - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup ADC_Exported_Constants - * @{ - */ -#define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC1) || \ - ((PERIPH) == ADC2) || \ - ((PERIPH) == ADC3)) - -/** @defgroup ADC_Common_mode - * @{ - */ -#define ADC_Mode_Independent ((uint32_t)0x00000000) -#define ADC_DualMode_RegSimult_InjecSimult ((uint32_t)0x00000001) -#define ADC_DualMode_RegSimult_AlterTrig ((uint32_t)0x00000002) -#define ADC_DualMode_InjecSimult ((uint32_t)0x00000005) -#define ADC_DualMode_RegSimult ((uint32_t)0x00000006) -#define ADC_DualMode_Interl ((uint32_t)0x00000007) -#define ADC_DualMode_AlterTrig ((uint32_t)0x00000009) -#define ADC_TripleMode_RegSimult_InjecSimult ((uint32_t)0x00000011) -#define ADC_TripleMode_RegSimult_AlterTrig ((uint32_t)0x00000012) -#define ADC_TripleMode_InjecSimult ((uint32_t)0x00000015) -#define ADC_TripleMode_RegSimult ((uint32_t)0x00000016) -#define ADC_TripleMode_Interl ((uint32_t)0x00000017) -#define ADC_TripleMode_AlterTrig ((uint32_t)0x00000019) -#define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Independent) || \ - ((MODE) == ADC_DualMode_RegSimult_InjecSimult) || \ - ((MODE) == ADC_DualMode_RegSimult_AlterTrig) || \ - ((MODE) == ADC_DualMode_InjecSimult) || \ - ((MODE) == ADC_DualMode_RegSimult) || \ - ((MODE) == ADC_DualMode_Interl) || \ - ((MODE) == ADC_DualMode_AlterTrig) || \ - ((MODE) == ADC_TripleMode_RegSimult_InjecSimult) || \ - ((MODE) == ADC_TripleMode_RegSimult_AlterTrig) || \ - ((MODE) == ADC_TripleMode_InjecSimult) || \ - ((MODE) == ADC_TripleMode_RegSimult) || \ - ((MODE) == ADC_TripleMode_Interl) || \ - ((MODE) == ADC_TripleMode_AlterTrig)) -/** - * @} - */ - - -/** @defgroup ADC_Prescaler - * @{ - */ -#define ADC_Prescaler_Div2 ((uint32_t)0x00000000) -#define ADC_Prescaler_Div4 ((uint32_t)0x00010000) -#define ADC_Prescaler_Div6 ((uint32_t)0x00020000) -#define ADC_Prescaler_Div8 ((uint32_t)0x00030000) -#define IS_ADC_PRESCALER(PRESCALER) (((PRESCALER) == ADC_Prescaler_Div2) || \ - ((PRESCALER) == ADC_Prescaler_Div4) || \ - ((PRESCALER) == ADC_Prescaler_Div6) || \ - ((PRESCALER) == ADC_Prescaler_Div8)) -/** - * @} - */ - - -/** @defgroup ADC_Direct_memory_access_mode_for_multi_mode - * @{ - */ -#define ADC_DMAAccessMode_Disabled ((uint32_t)0x00000000) /* DMA mode disabled */ -#define ADC_DMAAccessMode_1 ((uint32_t)0x00004000) /* DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)*/ -#define ADC_DMAAccessMode_2 ((uint32_t)0x00008000) /* DMA mode 2 enabled (2 / 3 half-words by pairs - 2&1 then 1&3 then 3&2)*/ -#define ADC_DMAAccessMode_3 ((uint32_t)0x0000C000) /* DMA mode 3 enabled (2 / 3 bytes by pairs - 2&1 then 1&3 then 3&2) */ -#define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAAccessMode_Disabled) || \ - ((MODE) == ADC_DMAAccessMode_1) || \ - ((MODE) == ADC_DMAAccessMode_2) || \ - ((MODE) == ADC_DMAAccessMode_3)) - -/** - * @} - */ - - -/** @defgroup ADC_delay_between_2_sampling_phases - * @{ - */ -#define ADC_TwoSamplingDelay_5Cycles ((uint32_t)0x00000000) -#define ADC_TwoSamplingDelay_6Cycles ((uint32_t)0x00000100) -#define ADC_TwoSamplingDelay_7Cycles ((uint32_t)0x00000200) -#define ADC_TwoSamplingDelay_8Cycles ((uint32_t)0x00000300) -#define ADC_TwoSamplingDelay_9Cycles ((uint32_t)0x00000400) -#define ADC_TwoSamplingDelay_10Cycles ((uint32_t)0x00000500) -#define ADC_TwoSamplingDelay_11Cycles ((uint32_t)0x00000600) -#define ADC_TwoSamplingDelay_12Cycles ((uint32_t)0x00000700) -#define ADC_TwoSamplingDelay_13Cycles ((uint32_t)0x00000800) -#define ADC_TwoSamplingDelay_14Cycles ((uint32_t)0x00000900) -#define ADC_TwoSamplingDelay_15Cycles ((uint32_t)0x00000A00) -#define ADC_TwoSamplingDelay_16Cycles ((uint32_t)0x00000B00) -#define ADC_TwoSamplingDelay_17Cycles ((uint32_t)0x00000C00) -#define ADC_TwoSamplingDelay_18Cycles ((uint32_t)0x00000D00) -#define ADC_TwoSamplingDelay_19Cycles ((uint32_t)0x00000E00) -#define ADC_TwoSamplingDelay_20Cycles ((uint32_t)0x00000F00) -#define IS_ADC_SAMPLING_DELAY(DELAY) (((DELAY) == ADC_TwoSamplingDelay_5Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_6Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_7Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_8Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_9Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_10Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_11Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_12Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_13Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_14Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_15Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_16Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_17Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_18Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_19Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_20Cycles)) - -/** - * @} - */ - - -/** @defgroup ADC_resolution - * @{ - */ -#define ADC_Resolution_12b ((uint32_t)0x00000000) -#define ADC_Resolution_10b ((uint32_t)0x01000000) -#define ADC_Resolution_8b ((uint32_t)0x02000000) -#define ADC_Resolution_6b ((uint32_t)0x03000000) -#define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_Resolution_12b) || \ - ((RESOLUTION) == ADC_Resolution_10b) || \ - ((RESOLUTION) == ADC_Resolution_8b) || \ - ((RESOLUTION) == ADC_Resolution_6b)) - -/** - * @} - */ - - -/** @defgroup ADC_external_trigger_edge_for_regular_channels_conversion - * @{ - */ -#define ADC_ExternalTrigConvEdge_None ((uint32_t)0x00000000) -#define ADC_ExternalTrigConvEdge_Rising ((uint32_t)0x10000000) -#define ADC_ExternalTrigConvEdge_Falling ((uint32_t)0x20000000) -#define ADC_ExternalTrigConvEdge_RisingFalling ((uint32_t)0x30000000) -#define IS_ADC_EXT_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigConvEdge_None) || \ - ((EDGE) == ADC_ExternalTrigConvEdge_Rising) || \ - ((EDGE) == ADC_ExternalTrigConvEdge_Falling) || \ - ((EDGE) == ADC_ExternalTrigConvEdge_RisingFalling)) -/** - * @} - */ - - -/** @defgroup ADC_extrenal_trigger_sources_for_regular_channels_conversion - * @{ - */ -#define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000) -#define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x01000000) -#define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x02000000) -#define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x03000000) -#define ADC_ExternalTrigConv_T2_CC3 ((uint32_t)0x04000000) -#define ADC_ExternalTrigConv_T2_CC4 ((uint32_t)0x05000000) -#define ADC_ExternalTrigConv_T2_TRGO ((uint32_t)0x06000000) -#define ADC_ExternalTrigConv_T3_CC1 ((uint32_t)0x07000000) -#define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x08000000) -#define ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x09000000) -#define ADC_ExternalTrigConv_T5_CC1 ((uint32_t)0x0A000000) -#define ADC_ExternalTrigConv_T5_CC2 ((uint32_t)0x0B000000) -#define ADC_ExternalTrigConv_T5_CC3 ((uint32_t)0x0C000000) -#define ADC_ExternalTrigConv_T8_CC1 ((uint32_t)0x0D000000) -#define ADC_ExternalTrigConv_T8_TRGO ((uint32_t)0x0E000000) -#define ADC_ExternalTrigConv_Ext_IT11 ((uint32_t)0x0F000000) -#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_T2_CC3) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T2_CC4) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T2_TRGO) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T5_CC1) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T5_CC2) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T5_CC3) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T8_CC1) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T8_TRGO) || \ - ((REGTRIG) == ADC_ExternalTrigConv_Ext_IT11)) -/** - * @} - */ - - -/** @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_18 ((uint8_t)0x12) - -#define ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16) -#define ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17) -#define ADC_Channel_Vbat ((uint8_t)ADC_Channel_18) - -#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) || \ - ((CHANNEL) == ADC_Channel_18)) -/** - * @} - */ - - -/** @defgroup ADC_sampling_times - * @{ - */ -#define ADC_SampleTime_3Cycles ((uint8_t)0x00) -#define ADC_SampleTime_15Cycles ((uint8_t)0x01) -#define ADC_SampleTime_28Cycles ((uint8_t)0x02) -#define ADC_SampleTime_56Cycles ((uint8_t)0x03) -#define ADC_SampleTime_84Cycles ((uint8_t)0x04) -#define ADC_SampleTime_112Cycles ((uint8_t)0x05) -#define ADC_SampleTime_144Cycles ((uint8_t)0x06) -#define ADC_SampleTime_480Cycles ((uint8_t)0x07) -#define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_3Cycles) || \ - ((TIME) == ADC_SampleTime_15Cycles) || \ - ((TIME) == ADC_SampleTime_28Cycles) || \ - ((TIME) == ADC_SampleTime_56Cycles) || \ - ((TIME) == ADC_SampleTime_84Cycles) || \ - ((TIME) == ADC_SampleTime_112Cycles) || \ - ((TIME) == ADC_SampleTime_144Cycles) || \ - ((TIME) == ADC_SampleTime_480Cycles)) -/** - * @} - */ - - -/** @defgroup ADC_external_trigger_edge_for_injected_channels_conversion - * @{ - */ -#define ADC_ExternalTrigInjecConvEdge_None ((uint32_t)0x00000000) -#define ADC_ExternalTrigInjecConvEdge_Rising ((uint32_t)0x00100000) -#define ADC_ExternalTrigInjecConvEdge_Falling ((uint32_t)0x00200000) -#define ADC_ExternalTrigInjecConvEdge_RisingFalling ((uint32_t)0x00300000) -#define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigInjecConvEdge_None) || \ - ((EDGE) == ADC_ExternalTrigInjecConvEdge_Rising) || \ - ((EDGE) == ADC_ExternalTrigInjecConvEdge_Falling) || \ - ((EDGE) == ADC_ExternalTrigInjecConvEdge_RisingFalling)) - -/** - * @} - */ - - -/** @defgroup ADC_extrenal_trigger_sources_for_injected_channels_conversion - * @{ - */ -#define ADC_ExternalTrigInjecConv_T1_CC4 ((uint32_t)0x00000000) -#define ADC_ExternalTrigInjecConv_T1_TRGO ((uint32_t)0x00010000) -#define ADC_ExternalTrigInjecConv_T2_CC1 ((uint32_t)0x00020000) -#define ADC_ExternalTrigInjecConv_T2_TRGO ((uint32_t)0x00030000) -#define ADC_ExternalTrigInjecConv_T3_CC2 ((uint32_t)0x00040000) -#define ADC_ExternalTrigInjecConv_T3_CC4 ((uint32_t)0x00050000) -#define ADC_ExternalTrigInjecConv_T4_CC1 ((uint32_t)0x00060000) -#define ADC_ExternalTrigInjecConv_T4_CC2 ((uint32_t)0x00070000) -#define ADC_ExternalTrigInjecConv_T4_CC3 ((uint32_t)0x00080000) -#define ADC_ExternalTrigInjecConv_T4_TRGO ((uint32_t)0x00090000) -#define ADC_ExternalTrigInjecConv_T5_CC4 ((uint32_t)0x000A0000) -#define ADC_ExternalTrigInjecConv_T5_TRGO ((uint32_t)0x000B0000) -#define ADC_ExternalTrigInjecConv_T8_CC2 ((uint32_t)0x000C0000) -#define ADC_ExternalTrigInjecConv_T8_CC3 ((uint32_t)0x000D0000) -#define ADC_ExternalTrigInjecConv_T8_CC4 ((uint32_t)0x000E0000) -#define ADC_ExternalTrigInjecConv_Ext_IT15 ((uint32_t)0x000F0000) -#define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_ExternalTrigInjecConv_T1_CC4) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T1_TRGO) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_CC1) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_TRGO) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC2) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC4) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC1) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC2) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC3) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_TRGO) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_CC4) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_TRGO) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC2) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC3) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC4) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_Ext_IT15)) -/** - * @} - */ - - -/** @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)0x0205) -#define ADC_IT_AWD ((uint16_t)0x0106) -#define ADC_IT_JEOC ((uint16_t)0x0407) -#define ADC_IT_OVR ((uint16_t)0x201A) -#define IS_ADC_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD) || \ - ((IT) == ADC_IT_JEOC)|| ((IT) == ADC_IT_OVR)) -/** - * @} - */ - - -/** @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 ADC_FLAG_OVR ((uint8_t)0x20) - -#define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xC0) == 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) || \ - ((FLAG)== ADC_FLAG_OVR)) -/** - * @} - */ - - -/** @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)) -/** - * @} - */ - - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the ADC configuration to the default reset state *****/ -void ADC_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); -void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct); -void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); -void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); -void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState); - -/* Analog Watchdog configuration functions ************************************/ -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); - -/* Temperature Sensor, Vrefint and VBAT management functions ******************/ -void ADC_TempSensorVrefintCmd(FunctionalState NewState); -void ADC_VBATCmd(FunctionalState NewState); - -/* Regular Channels Configuration functions ***********************************/ -void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); -void ADC_SoftwareStartConv(ADC_TypeDef* ADCx); -FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx); -void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number); -void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); -uint32_t ADC_GetMultiModeConversionValue(void); - -/* Regular Channels DMA Configuration functions *******************************/ -void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState); - -/* Injected channels Configuration functions **********************************/ -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); -void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv); -void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge); -void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx); -FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx); -void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel); - -/* Interrupts and flags management functions **********************************/ -void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, 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 /*__STM32F4xx_ADC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_can.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_can.h deleted file mode 100644 index 938cd414..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_can.h +++ /dev/null @@ -1,644 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_can.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the CAN firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_CAN_H -#define __STM32F4xx_CAN_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 non-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; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup CAN_Exported_Constants - * @{ - */ - -/** @defgroup CAN_InitStatus - * @{ - */ - -#define CAN_InitStatus_Failed ((uint8_t)0x00) /*!< CAN initialization failed */ -#define CAN_InitStatus_Success ((uint8_t)0x01) /*!< CAN initialization OK */ - - -/* Legacy defines */ -#define CANINITFAILED CAN_InitStatus_Failed -#define CANINITOK CAN_InitStatus_Success -/** - * @} - */ - -/** @defgroup CAN_operating_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_operating_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 - * @{ - */ -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27) -/** - * @} - */ - -/** @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)) - -/* Legacy defines */ -#define CAN_FilterFIFO0 CAN_Filter_FIFO0 -#define CAN_FilterFIFO1 CAN_Filter_FIFO1 -/** - * @} - */ - -/** @defgroup CAN_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)) - -/* Legacy defines */ -#define CAN_ID_STD CAN_Id_Standard -#define CAN_ID_EXT 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)) - -/* Legacy defines */ -#define CAN_RTR_DATA CAN_RTR_Data -#define CAN_RTR_REMOTE 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 */ -/* Legacy defines */ -#define CANTXFAILED CAN_TxStatus_Failed -#define CANTXOK CAN_TxStatus_Ok -#define CANTXPENDING CAN_TxStatus_Pending -#define CAN_NO_MB CAN_TxStatus_NoMailBox -/** - * @} - */ - -/** @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 */ - -/* Legacy defines */ -#define CANSLEEPFAILED CAN_Sleep_Failed -#define CANSLEEPOK CAN_Sleep_Ok -/** - * @} - */ - -/** @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 */ - -/* Legacy defines */ -#define CANWAKEUPFAILED CAN_WakeUp_Failed -#define CANWAKEUPOK CAN_WakeUp_Ok -/** - * @} - */ - -/** - * @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 interrupt 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)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* 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); - -/* CAN Frames Transmission 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); - -/* CAN Frames Reception 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); - -/* CAN Bus 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 /* __STM32F4xx_CAN_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_crc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_crc.h deleted file mode 100644 index 38d29a3f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_crc.h +++ /dev/null @@ -1,83 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_crc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the CRC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_CRC_H -#define __STM32F4xx_CRC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup CRC - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup CRC_Exported_Constants - * @{ - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* 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 /* __STM32F4xx_CRC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h deleted file mode 100644 index 189744f5..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h +++ /dev/null @@ -1,384 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_cryp.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the Cryptographic - * processor(CRYP) firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_CRYP_H -#define __STM32F4xx_CRYP_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup CRYP - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief CRYP Init structure definition - */ -typedef struct -{ - uint32_t CRYP_AlgoDir; /*!< Encrypt or Decrypt. This parameter can be a - value of @ref CRYP_Algorithm_Direction */ - uint32_t CRYP_AlgoMode; /*!< TDES-ECB, TDES-CBC, DES-ECB, DES-CBC, AES-ECB, - AES-CBC, AES-CTR, AES-Key, AES-GCM and AES-CCM. - This parameter can be a value of @ref CRYP_Algorithm_Mode */ - uint32_t CRYP_DataType; /*!< 32-bit data, 16-bit data, bit data or bit string. - This parameter can be a value of @ref CRYP_Data_Type */ - uint32_t CRYP_KeySize; /*!< Used only in AES mode only : 128, 192 or 256 bit - key length. This parameter can be a value of - @ref CRYP_Key_Size_for_AES_only */ -}CRYP_InitTypeDef; - -/** - * @brief CRYP Key(s) structure definition - */ -typedef struct -{ - uint32_t CRYP_Key0Left; /*!< Key 0 Left */ - uint32_t CRYP_Key0Right; /*!< Key 0 Right */ - uint32_t CRYP_Key1Left; /*!< Key 1 left */ - uint32_t CRYP_Key1Right; /*!< Key 1 Right */ - uint32_t CRYP_Key2Left; /*!< Key 2 left */ - uint32_t CRYP_Key2Right; /*!< Key 2 Right */ - uint32_t CRYP_Key3Left; /*!< Key 3 left */ - uint32_t CRYP_Key3Right; /*!< Key 3 Right */ -}CRYP_KeyInitTypeDef; -/** - * @brief CRYP Initialization Vectors (IV) structure definition - */ -typedef struct -{ - uint32_t CRYP_IV0Left; /*!< Init Vector 0 Left */ - uint32_t CRYP_IV0Right; /*!< Init Vector 0 Right */ - uint32_t CRYP_IV1Left; /*!< Init Vector 1 left */ - uint32_t CRYP_IV1Right; /*!< Init Vector 1 Right */ -}CRYP_IVInitTypeDef; - -/** - * @brief CRYP context swapping structure definition - */ -typedef struct -{ - /*!< Current Configuration */ - uint32_t CR_CurrentConfig; - /*!< IV */ - uint32_t CRYP_IV0LR; - uint32_t CRYP_IV0RR; - uint32_t CRYP_IV1LR; - uint32_t CRYP_IV1RR; - /*!< KEY */ - uint32_t CRYP_K0LR; - uint32_t CRYP_K0RR; - uint32_t CRYP_K1LR; - uint32_t CRYP_K1RR; - uint32_t CRYP_K2LR; - uint32_t CRYP_K2RR; - uint32_t CRYP_K3LR; - uint32_t CRYP_K3RR; - uint32_t CRYP_CSGCMCCMR[8]; - uint32_t CRYP_CSGCMR[8]; -}CRYP_Context; - - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup CRYP_Exported_Constants - * @{ - */ - -/** @defgroup CRYP_Algorithm_Direction - * @{ - */ -#define CRYP_AlgoDir_Encrypt ((uint16_t)0x0000) -#define CRYP_AlgoDir_Decrypt ((uint16_t)0x0004) -#define IS_CRYP_ALGODIR(ALGODIR) (((ALGODIR) == CRYP_AlgoDir_Encrypt) || \ - ((ALGODIR) == CRYP_AlgoDir_Decrypt)) - -/** - * @} - */ - -/** @defgroup CRYP_Algorithm_Mode - * @{ - */ - -/*!< TDES Modes */ -#define CRYP_AlgoMode_TDES_ECB ((uint32_t)0x00000000) -#define CRYP_AlgoMode_TDES_CBC ((uint32_t)0x00000008) - -/*!< DES Modes */ -#define CRYP_AlgoMode_DES_ECB ((uint32_t)0x00000010) -#define CRYP_AlgoMode_DES_CBC ((uint32_t)0x00000018) - -/*!< AES Modes */ -#define CRYP_AlgoMode_AES_ECB ((uint32_t)0x00000020) -#define CRYP_AlgoMode_AES_CBC ((uint32_t)0x00000028) -#define CRYP_AlgoMode_AES_CTR ((uint32_t)0x00000030) -#define CRYP_AlgoMode_AES_Key ((uint32_t)0x00000038) -#define CRYP_AlgoMode_AES_GCM ((uint32_t)0x00080000) -#define CRYP_AlgoMode_AES_CCM ((uint32_t)0x00080008) - -#define IS_CRYP_ALGOMODE(ALGOMODE) (((ALGOMODE) == CRYP_AlgoMode_TDES_ECB) || \ - ((ALGOMODE) == CRYP_AlgoMode_TDES_CBC)|| \ - ((ALGOMODE) == CRYP_AlgoMode_DES_ECB) || \ - ((ALGOMODE) == CRYP_AlgoMode_DES_CBC) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_ECB) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_CBC) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_CTR) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_Key) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_GCM) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_CCM)) -/** - * @} - */ - -/** @defgroup CRYP_Phase - * @{ - */ - -/*!< The phases are valid only for AES-GCM and AES-CCM modes */ -#define CRYP_Phase_Init ((uint32_t)0x00000000) -#define CRYP_Phase_Header CRYP_CR_GCM_CCMPH_0 -#define CRYP_Phase_Payload CRYP_CR_GCM_CCMPH_1 -#define CRYP_Phase_Final CRYP_CR_GCM_CCMPH - -#define IS_CRYP_PHASE(PHASE) (((PHASE) == CRYP_Phase_Init) || \ - ((PHASE) == CRYP_Phase_Header) || \ - ((PHASE) == CRYP_Phase_Payload) || \ - ((PHASE) == CRYP_Phase_Final)) - -/** - * @} - */ - -/** @defgroup CRYP_Data_Type - * @{ - */ -#define CRYP_DataType_32b ((uint16_t)0x0000) -#define CRYP_DataType_16b ((uint16_t)0x0040) -#define CRYP_DataType_8b ((uint16_t)0x0080) -#define CRYP_DataType_1b ((uint16_t)0x00C0) -#define IS_CRYP_DATATYPE(DATATYPE) (((DATATYPE) == CRYP_DataType_32b) || \ - ((DATATYPE) == CRYP_DataType_16b)|| \ - ((DATATYPE) == CRYP_DataType_8b)|| \ - ((DATATYPE) == CRYP_DataType_1b)) -/** - * @} - */ - -/** @defgroup CRYP_Key_Size_for_AES_only - * @{ - */ -#define CRYP_KeySize_128b ((uint16_t)0x0000) -#define CRYP_KeySize_192b ((uint16_t)0x0100) -#define CRYP_KeySize_256b ((uint16_t)0x0200) -#define IS_CRYP_KEYSIZE(KEYSIZE) (((KEYSIZE) == CRYP_KeySize_128b)|| \ - ((KEYSIZE) == CRYP_KeySize_192b)|| \ - ((KEYSIZE) == CRYP_KeySize_256b)) -/** - * @} - */ - -/** @defgroup CRYP_flags_definition - * @{ - */ -#define CRYP_FLAG_BUSY ((uint8_t)0x10) /*!< The CRYP core is currently - processing a block of data - or a key preparation (for - AES decryption). */ -#define CRYP_FLAG_IFEM ((uint8_t)0x01) /*!< Input Fifo Empty */ -#define CRYP_FLAG_IFNF ((uint8_t)0x02) /*!< Input Fifo is Not Full */ -#define CRYP_FLAG_INRIS ((uint8_t)0x22) /*!< Raw interrupt pending */ -#define CRYP_FLAG_OFNE ((uint8_t)0x04) /*!< Input Fifo service raw - interrupt status */ -#define CRYP_FLAG_OFFU ((uint8_t)0x08) /*!< Output Fifo is Full */ -#define CRYP_FLAG_OUTRIS ((uint8_t)0x21) /*!< Output Fifo service raw - interrupt status */ - -#define IS_CRYP_GET_FLAG(FLAG) (((FLAG) == CRYP_FLAG_IFEM) || \ - ((FLAG) == CRYP_FLAG_IFNF) || \ - ((FLAG) == CRYP_FLAG_OFNE) || \ - ((FLAG) == CRYP_FLAG_OFFU) || \ - ((FLAG) == CRYP_FLAG_BUSY) || \ - ((FLAG) == CRYP_FLAG_OUTRIS)|| \ - ((FLAG) == CRYP_FLAG_INRIS)) -/** - * @} - */ - -/** @defgroup CRYP_interrupts_definition - * @{ - */ -#define CRYP_IT_INI ((uint8_t)0x01) /*!< IN Fifo Interrupt */ -#define CRYP_IT_OUTI ((uint8_t)0x02) /*!< OUT Fifo Interrupt */ -#define IS_CRYP_CONFIG_IT(IT) ((((IT) & (uint8_t)0xFC) == 0x00) && ((IT) != 0x00)) -#define IS_CRYP_GET_IT(IT) (((IT) == CRYP_IT_INI) || ((IT) == CRYP_IT_OUTI)) - -/** - * @} - */ - -/** @defgroup CRYP_Encryption_Decryption_modes_definition - * @{ - */ -#define MODE_ENCRYPT ((uint8_t)0x01) -#define MODE_DECRYPT ((uint8_t)0x00) - -/** - * @} - */ - -/** @defgroup CRYP_DMA_transfer_requests - * @{ - */ -#define CRYP_DMAReq_DataIN ((uint8_t)0x01) -#define CRYP_DMAReq_DataOUT ((uint8_t)0x02) -#define IS_CRYP_DMAREQ(DMAREQ) ((((DMAREQ) & (uint8_t)0xFC) == 0x00) && ((DMAREQ) != 0x00)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the CRYP configuration to the default reset state ****/ -void CRYP_DeInit(void); - -/* CRYP Initialization and Configuration functions ****************************/ -void CRYP_Init(CRYP_InitTypeDef* CRYP_InitStruct); -void CRYP_StructInit(CRYP_InitTypeDef* CRYP_InitStruct); -void CRYP_KeyInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); -void CRYP_KeyStructInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); -void CRYP_IVInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct); -void CRYP_IVStructInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct); -void CRYP_Cmd(FunctionalState NewState); -void CRYP_PhaseConfig(uint32_t CRYP_Phase); -void CRYP_FIFOFlush(void); -/* CRYP Data processing functions *********************************************/ -void CRYP_DataIn(uint32_t Data); -uint32_t CRYP_DataOut(void); - -/* CRYP Context swapping functions ********************************************/ -ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave, - CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); -void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore); - -/* CRYP DMA interface function ************************************************/ -void CRYP_DMACmd(uint8_t CRYP_DMAReq, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void CRYP_ITConfig(uint8_t CRYP_IT, FunctionalState NewState); -ITStatus CRYP_GetITStatus(uint8_t CRYP_IT); -FunctionalState CRYP_GetCmdStatus(void); -FlagStatus CRYP_GetFlagStatus(uint8_t CRYP_FLAG); - -/* High Level AES functions **************************************************/ -ErrorStatus CRYP_AES_ECB(uint8_t Mode, - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_AES_CBC(uint8_t Mode, - uint8_t InitVectors[16], - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_AES_CTR(uint8_t Mode, - uint8_t InitVectors[16], - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_AES_GCM(uint8_t Mode, uint8_t InitVectors[16], - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t ILength, - uint8_t *Header, uint32_t HLength, - uint8_t *Output, uint8_t *AuthTAG); - -ErrorStatus CRYP_AES_CCM(uint8_t Mode, - uint8_t* Nonce, uint32_t NonceSize, - uint8_t* Key, uint16_t Keysize, - uint8_t* Input, uint32_t ILength, - uint8_t* Header, uint32_t HLength, uint8_t *HBuffer, - uint8_t* Output, - uint8_t* AuthTAG, uint32_t TAGSize); - -/* High Level TDES functions **************************************************/ -ErrorStatus CRYP_TDES_ECB(uint8_t Mode, - uint8_t Key[24], - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_TDES_CBC(uint8_t Mode, - uint8_t Key[24], - uint8_t InitVectors[8], - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -/* High Level DES functions **************************************************/ -ErrorStatus CRYP_DES_ECB(uint8_t Mode, - uint8_t Key[8], - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_DES_CBC(uint8_t Mode, - uint8_t Key[8], - uint8_t InitVectors[8], - uint8_t *Input,uint32_t Ilength, - uint8_t *Output); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_CRYP_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dac.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dac.h deleted file mode 100644 index 62c0c872..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dac.h +++ /dev/null @@ -1,304 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dac.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the DAC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_DAC_H -#define __STM32F4xx_DAC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @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_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_T5_TRGO ((uint32_t)0x0000001C) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_T6_TRGO ((uint32_t)0x00000004) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_T7_TRGO ((uint32_t)0x00000014) /*!< TIM7 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 */ - -#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_alignement - * @{ - */ - -#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) -/** - * @} - */ - -/** @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)) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the DAC configuration to the default reset state *****/ -void DAC_DeInit(void); - -/* DAC channels configuration: trigger, output buffer, data format functions */ -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); -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); - -/* DMA management functions ***************************************************/ -void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState); -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); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_DAC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dbgmcu.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dbgmcu.h deleted file mode 100644 index e041e32a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dbgmcu.h +++ /dev/null @@ -1,109 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dbgmcu.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the DBGMCU firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_DBGMCU_H -#define __STM32F4xx_DBGMCU_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup DBGMCU - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup DBGMCU_Exported_Constants - * @{ - */ -#define DBGMCU_SLEEP ((uint32_t)0x00000001) -#define DBGMCU_STOP ((uint32_t)0x00000002) -#define DBGMCU_STANDBY ((uint32_t)0x00000004) -#define IS_DBGMCU_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFFF8) == 0x00) && ((PERIPH) != 0x00)) - -#define DBGMCU_TIM2_STOP ((uint32_t)0x00000001) -#define DBGMCU_TIM3_STOP ((uint32_t)0x00000002) -#define DBGMCU_TIM4_STOP ((uint32_t)0x00000004) -#define DBGMCU_TIM5_STOP ((uint32_t)0x00000008) -#define DBGMCU_TIM6_STOP ((uint32_t)0x00000010) -#define DBGMCU_TIM7_STOP ((uint32_t)0x00000020) -#define DBGMCU_TIM12_STOP ((uint32_t)0x00000040) -#define DBGMCU_TIM13_STOP ((uint32_t)0x00000080) -#define DBGMCU_TIM14_STOP ((uint32_t)0x00000100) -#define DBGMCU_RTC_STOP ((uint32_t)0x00000400) -#define DBGMCU_WWDG_STOP ((uint32_t)0x00000800) -#define DBGMCU_IWDG_STOP ((uint32_t)0x00001000) -#define DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00200000) -#define DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00400000) -#define DBGMCU_I2C3_SMBUS_TIMEOUT ((uint32_t)0x00800000) -#define DBGMCU_CAN1_STOP ((uint32_t)0x02000000) -#define DBGMCU_CAN2_STOP ((uint32_t)0x04000000) -#define IS_DBGMCU_APB1PERIPH(PERIPH) ((((PERIPH) & 0xF91FE200) == 0x00) && ((PERIPH) != 0x00)) - -#define DBGMCU_TIM1_STOP ((uint32_t)0x00000001) -#define DBGMCU_TIM8_STOP ((uint32_t)0x00000002) -#define DBGMCU_TIM9_STOP ((uint32_t)0x00010000) -#define DBGMCU_TIM10_STOP ((uint32_t)0x00020000) -#define DBGMCU_TIM11_STOP ((uint32_t)0x00040000) -#define IS_DBGMCU_APB2PERIPH(PERIPH) ((((PERIPH) & 0xFFF8FFFC) == 0x00) && ((PERIPH) != 0x00)) -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ -uint32_t DBGMCU_GetREVID(void); -uint32_t DBGMCU_GetDEVID(void); -void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState); -void DBGMCU_APB1PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState); -void DBGMCU_APB2PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_DBGMCU_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dcmi.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dcmi.h deleted file mode 100644 index 518a5761..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dcmi.h +++ /dev/null @@ -1,312 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dcmi.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the DCMI firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_DCMI_H -#define __STM32F4xx_DCMI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup DCMI - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/** - * @brief DCMI Init structure definition - */ -typedef struct -{ - uint16_t DCMI_CaptureMode; /*!< Specifies the Capture Mode: Continuous or Snapshot. - This parameter can be a value of @ref DCMI_Capture_Mode */ - - uint16_t DCMI_SynchroMode; /*!< Specifies the Synchronization Mode: Hardware or Embedded. - This parameter can be a value of @ref DCMI_Synchronization_Mode */ - - uint16_t DCMI_PCKPolarity; /*!< Specifies the Pixel clock polarity: Falling or Rising. - This parameter can be a value of @ref DCMI_PIXCK_Polarity */ - - uint16_t DCMI_VSPolarity; /*!< Specifies the Vertical synchronization polarity: High or Low. - This parameter can be a value of @ref DCMI_VSYNC_Polarity */ - - uint16_t DCMI_HSPolarity; /*!< Specifies the Horizontal synchronization polarity: High or Low. - This parameter can be a value of @ref DCMI_HSYNC_Polarity */ - - uint16_t DCMI_CaptureRate; /*!< Specifies the frequency of frame capture: All, 1/2 or 1/4. - This parameter can be a value of @ref DCMI_Capture_Rate */ - - uint16_t DCMI_ExtendedDataMode; /*!< Specifies the data width: 8-bit, 10-bit, 12-bit or 14-bit. - This parameter can be a value of @ref DCMI_Extended_Data_Mode */ -} DCMI_InitTypeDef; - -/** - * @brief DCMI CROP Init structure definition - */ -typedef struct -{ - uint16_t DCMI_VerticalStartLine; /*!< Specifies the Vertical start line count from which the image capture - will start. This parameter can be a value between 0x00 and 0x1FFF */ - - uint16_t DCMI_HorizontalOffsetCount; /*!< Specifies the number of pixel clocks to count before starting a capture. - This parameter can be a value between 0x00 and 0x3FFF */ - - uint16_t DCMI_VerticalLineCount; /*!< Specifies the number of lines to be captured from the starting point. - This parameter can be a value between 0x00 and 0x3FFF */ - - uint16_t DCMI_CaptureCount; /*!< Specifies the number of pixel clocks to be captured from the starting - point on the same line. - This parameter can be a value between 0x00 and 0x3FFF */ -} DCMI_CROPInitTypeDef; - -/** - * @brief DCMI Embedded Synchronisation CODE Init structure definition - */ -typedef struct -{ - uint8_t DCMI_FrameStartCode; /*!< Specifies the code of the frame start delimiter. */ - uint8_t DCMI_LineStartCode; /*!< Specifies the code of the line start delimiter. */ - uint8_t DCMI_LineEndCode; /*!< Specifies the code of the line end delimiter. */ - uint8_t DCMI_FrameEndCode; /*!< Specifies the code of the frame end delimiter. */ -} DCMI_CodesInitTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup DCMI_Exported_Constants - * @{ - */ - -/** @defgroup DCMI_Capture_Mode - * @{ - */ -#define DCMI_CaptureMode_Continuous ((uint16_t)0x0000) /*!< The received data are transferred continuously - into the destination memory through the DMA */ -#define DCMI_CaptureMode_SnapShot ((uint16_t)0x0002) /*!< Once activated, the interface waits for the start of - frame and then transfers a single frame through the DMA */ -#define IS_DCMI_CAPTURE_MODE(MODE)(((MODE) == DCMI_CaptureMode_Continuous) || \ - ((MODE) == DCMI_CaptureMode_SnapShot)) -/** - * @} - */ - - -/** @defgroup DCMI_Synchronization_Mode - * @{ - */ -#define DCMI_SynchroMode_Hardware ((uint16_t)0x0000) /*!< Hardware synchronization data capture (frame/line start/stop) - is synchronized with the HSYNC/VSYNC signals */ -#define DCMI_SynchroMode_Embedded ((uint16_t)0x0010) /*!< Embedded synchronization data capture is synchronized with - synchronization codes embedded in the data flow */ -#define IS_DCMI_SYNCHRO(MODE)(((MODE) == DCMI_SynchroMode_Hardware) || \ - ((MODE) == DCMI_SynchroMode_Embedded)) -/** - * @} - */ - - -/** @defgroup DCMI_PIXCK_Polarity - * @{ - */ -#define DCMI_PCKPolarity_Falling ((uint16_t)0x0000) /*!< Pixel clock active on Falling edge */ -#define DCMI_PCKPolarity_Rising ((uint16_t)0x0020) /*!< Pixel clock active on Rising edge */ -#define IS_DCMI_PCKPOLARITY(POLARITY)(((POLARITY) == DCMI_PCKPolarity_Falling) || \ - ((POLARITY) == DCMI_PCKPolarity_Rising)) -/** - * @} - */ - - -/** @defgroup DCMI_VSYNC_Polarity - * @{ - */ -#define DCMI_VSPolarity_Low ((uint16_t)0x0000) /*!< Vertical synchronization active Low */ -#define DCMI_VSPolarity_High ((uint16_t)0x0080) /*!< Vertical synchronization active High */ -#define IS_DCMI_VSPOLARITY(POLARITY)(((POLARITY) == DCMI_VSPolarity_Low) || \ - ((POLARITY) == DCMI_VSPolarity_High)) -/** - * @} - */ - - -/** @defgroup DCMI_HSYNC_Polarity - * @{ - */ -#define DCMI_HSPolarity_Low ((uint16_t)0x0000) /*!< Horizontal synchronization active Low */ -#define DCMI_HSPolarity_High ((uint16_t)0x0040) /*!< Horizontal synchronization active High */ -#define IS_DCMI_HSPOLARITY(POLARITY)(((POLARITY) == DCMI_HSPolarity_Low) || \ - ((POLARITY) == DCMI_HSPolarity_High)) -/** - * @} - */ - - -/** @defgroup DCMI_Capture_Rate - * @{ - */ -#define DCMI_CaptureRate_All_Frame ((uint16_t)0x0000) /*!< All frames are captured */ -#define DCMI_CaptureRate_1of2_Frame ((uint16_t)0x0100) /*!< Every alternate frame captured */ -#define DCMI_CaptureRate_1of4_Frame ((uint16_t)0x0200) /*!< One frame in 4 frames captured */ -#define IS_DCMI_CAPTURE_RATE(RATE) (((RATE) == DCMI_CaptureRate_All_Frame) || \ - ((RATE) == DCMI_CaptureRate_1of2_Frame) ||\ - ((RATE) == DCMI_CaptureRate_1of4_Frame)) -/** - * @} - */ - - -/** @defgroup DCMI_Extended_Data_Mode - * @{ - */ -#define DCMI_ExtendedDataMode_8b ((uint16_t)0x0000) /*!< Interface captures 8-bit data on every pixel clock */ -#define DCMI_ExtendedDataMode_10b ((uint16_t)0x0400) /*!< Interface captures 10-bit data on every pixel clock */ -#define DCMI_ExtendedDataMode_12b ((uint16_t)0x0800) /*!< Interface captures 12-bit data on every pixel clock */ -#define DCMI_ExtendedDataMode_14b ((uint16_t)0x0C00) /*!< Interface captures 14-bit data on every pixel clock */ -#define IS_DCMI_EXTENDED_DATA(DATA)(((DATA) == DCMI_ExtendedDataMode_8b) || \ - ((DATA) == DCMI_ExtendedDataMode_10b) ||\ - ((DATA) == DCMI_ExtendedDataMode_12b) ||\ - ((DATA) == DCMI_ExtendedDataMode_14b)) -/** - * @} - */ - - -/** @defgroup DCMI_interrupt_sources - * @{ - */ -#define DCMI_IT_FRAME ((uint16_t)0x0001) -#define DCMI_IT_OVF ((uint16_t)0x0002) -#define DCMI_IT_ERR ((uint16_t)0x0004) -#define DCMI_IT_VSYNC ((uint16_t)0x0008) -#define DCMI_IT_LINE ((uint16_t)0x0010) -#define IS_DCMI_CONFIG_IT(IT) ((((IT) & (uint16_t)0xFFE0) == 0x0000) && ((IT) != 0x0000)) -#define IS_DCMI_GET_IT(IT) (((IT) == DCMI_IT_FRAME) || \ - ((IT) == DCMI_IT_OVF) || \ - ((IT) == DCMI_IT_ERR) || \ - ((IT) == DCMI_IT_VSYNC) || \ - ((IT) == DCMI_IT_LINE)) -/** - * @} - */ - - -/** @defgroup DCMI_Flags - * @{ - */ -/** - * @brief DCMI SR register - */ -#define DCMI_FLAG_HSYNC ((uint16_t)0x2001) -#define DCMI_FLAG_VSYNC ((uint16_t)0x2002) -#define DCMI_FLAG_FNE ((uint16_t)0x2004) -/** - * @brief DCMI RISR register - */ -#define DCMI_FLAG_FRAMERI ((uint16_t)0x0001) -#define DCMI_FLAG_OVFRI ((uint16_t)0x0002) -#define DCMI_FLAG_ERRRI ((uint16_t)0x0004) -#define DCMI_FLAG_VSYNCRI ((uint16_t)0x0008) -#define DCMI_FLAG_LINERI ((uint16_t)0x0010) -/** - * @brief DCMI MISR register - */ -#define DCMI_FLAG_FRAMEMI ((uint16_t)0x1001) -#define DCMI_FLAG_OVFMI ((uint16_t)0x1002) -#define DCMI_FLAG_ERRMI ((uint16_t)0x1004) -#define DCMI_FLAG_VSYNCMI ((uint16_t)0x1008) -#define DCMI_FLAG_LINEMI ((uint16_t)0x1010) -#define IS_DCMI_GET_FLAG(FLAG) (((FLAG) == DCMI_FLAG_HSYNC) || \ - ((FLAG) == DCMI_FLAG_VSYNC) || \ - ((FLAG) == DCMI_FLAG_FNE) || \ - ((FLAG) == DCMI_FLAG_FRAMERI) || \ - ((FLAG) == DCMI_FLAG_OVFRI) || \ - ((FLAG) == DCMI_FLAG_ERRRI) || \ - ((FLAG) == DCMI_FLAG_VSYNCRI) || \ - ((FLAG) == DCMI_FLAG_LINERI) || \ - ((FLAG) == DCMI_FLAG_FRAMEMI) || \ - ((FLAG) == DCMI_FLAG_OVFMI) || \ - ((FLAG) == DCMI_FLAG_ERRMI) || \ - ((FLAG) == DCMI_FLAG_VSYNCMI) || \ - ((FLAG) == DCMI_FLAG_LINEMI)) - -#define IS_DCMI_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFFE0) == 0x0000) && ((FLAG) != 0x0000)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the DCMI configuration to the default reset state ****/ -void DCMI_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -void DCMI_Init(DCMI_InitTypeDef* DCMI_InitStruct); -void DCMI_StructInit(DCMI_InitTypeDef* DCMI_InitStruct); -void DCMI_CROPConfig(DCMI_CROPInitTypeDef* DCMI_CROPInitStruct); -void DCMI_CROPCmd(FunctionalState NewState); -void DCMI_SetEmbeddedSynchroCodes(DCMI_CodesInitTypeDef* DCMI_CodesInitStruct); -void DCMI_JPEGCmd(FunctionalState NewState); - -/* Image capture functions ****************************************************/ -void DCMI_Cmd(FunctionalState NewState); -void DCMI_CaptureCmd(FunctionalState NewState); -uint32_t DCMI_ReadData(void); - -/* Interrupts and flags management functions **********************************/ -void DCMI_ITConfig(uint16_t DCMI_IT, FunctionalState NewState); -FlagStatus DCMI_GetFlagStatus(uint16_t DCMI_FLAG); -void DCMI_ClearFlag(uint16_t DCMI_FLAG); -ITStatus DCMI_GetITStatus(uint16_t DCMI_IT); -void DCMI_ClearITPendingBit(uint16_t DCMI_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_DCMI_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dma.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dma.h deleted file mode 100644 index d7e987e4..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dma.h +++ /dev/null @@ -1,609 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dma.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the DMA firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_DMA_H -#define __STM32F4xx_DMA_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup DMA - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief DMA Init structure definition - */ - -typedef struct -{ - uint32_t DMA_Channel; /*!< Specifies the channel used for the specified stream. - This parameter can be a value of @ref DMA_channel */ - - uint32_t DMA_PeripheralBaseAddr; /*!< Specifies the peripheral base address for DMAy Streamx. */ - - uint32_t DMA_Memory0BaseAddr; /*!< Specifies the memory 0 base address for DMAy Streamx. - This memory is the default memory used when double buffer mode is - not enabled. */ - - uint32_t DMA_DIR; /*!< Specifies if the data will be transferred from memory to peripheral, - from memory to memory or from peripheral to memory. - This parameter can be a value of @ref DMA_data_transfer_direction */ - - uint32_t DMA_BufferSize; /*!< Specifies the buffer size, in data unit, of the specified Stream. - 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 should be 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 should be 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 Streamx. - 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 Stream */ - - uint32_t DMA_Priority; /*!< Specifies the software priority for the DMAy Streamx. - This parameter can be a value of @ref DMA_priority_level */ - - uint32_t DMA_FIFOMode; /*!< Specifies if the FIFO mode or Direct mode will be used for the specified Stream. - This parameter can be a value of @ref DMA_fifo_direct_mode - @note The Direct mode (FIFO mode disabled) cannot be used if the - memory-to-memory data transfer is configured on the selected Stream */ - - uint32_t DMA_FIFOThreshold; /*!< Specifies the FIFO threshold level. - This parameter can be a value of @ref DMA_fifo_threshold_level */ - - uint32_t DMA_MemoryBurst; /*!< Specifies the Burst transfer configuration for the memory transfers. - It specifies the amount of data to be transferred in a single non interruptable - transaction. This parameter can be a value of @ref DMA_memory_burst - @note The burst mode is possible only if the address Increment mode is enabled. */ - - uint32_t DMA_PeripheralBurst; /*!< Specifies the Burst transfer configuration for the peripheral transfers. - It specifies the amount of data to be transferred in a single non interruptable - transaction. This parameter can be a value of @ref DMA_peripheral_burst - @note The burst mode is possible only if the address Increment mode is enabled. */ -}DMA_InitTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup DMA_Exported_Constants - * @{ - */ - -#define IS_DMA_ALL_PERIPH(PERIPH) (((PERIPH) == DMA1_Stream0) || \ - ((PERIPH) == DMA1_Stream1) || \ - ((PERIPH) == DMA1_Stream2) || \ - ((PERIPH) == DMA1_Stream3) || \ - ((PERIPH) == DMA1_Stream4) || \ - ((PERIPH) == DMA1_Stream5) || \ - ((PERIPH) == DMA1_Stream6) || \ - ((PERIPH) == DMA1_Stream7) || \ - ((PERIPH) == DMA2_Stream0) || \ - ((PERIPH) == DMA2_Stream1) || \ - ((PERIPH) == DMA2_Stream2) || \ - ((PERIPH) == DMA2_Stream3) || \ - ((PERIPH) == DMA2_Stream4) || \ - ((PERIPH) == DMA2_Stream5) || \ - ((PERIPH) == DMA2_Stream6) || \ - ((PERIPH) == DMA2_Stream7)) - -#define IS_DMA_ALL_CONTROLLER(CONTROLLER) (((CONTROLLER) == DMA1) || \ - ((CONTROLLER) == DMA2)) - -/** @defgroup DMA_channel - * @{ - */ -#define DMA_Channel_0 ((uint32_t)0x00000000) -#define DMA_Channel_1 ((uint32_t)0x02000000) -#define DMA_Channel_2 ((uint32_t)0x04000000) -#define DMA_Channel_3 ((uint32_t)0x06000000) -#define DMA_Channel_4 ((uint32_t)0x08000000) -#define DMA_Channel_5 ((uint32_t)0x0A000000) -#define DMA_Channel_6 ((uint32_t)0x0C000000) -#define DMA_Channel_7 ((uint32_t)0x0E000000) - -#define IS_DMA_CHANNEL(CHANNEL) (((CHANNEL) == DMA_Channel_0) || \ - ((CHANNEL) == DMA_Channel_1) || \ - ((CHANNEL) == DMA_Channel_2) || \ - ((CHANNEL) == DMA_Channel_3) || \ - ((CHANNEL) == DMA_Channel_4) || \ - ((CHANNEL) == DMA_Channel_5) || \ - ((CHANNEL) == DMA_Channel_6) || \ - ((CHANNEL) == DMA_Channel_7)) -/** - * @} - */ - - -/** @defgroup DMA_data_transfer_direction - * @{ - */ -#define DMA_DIR_PeripheralToMemory ((uint32_t)0x00000000) -#define DMA_DIR_MemoryToPeripheral ((uint32_t)0x00000040) -#define DMA_DIR_MemoryToMemory ((uint32_t)0x00000080) - -#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_DIR_PeripheralToMemory ) || \ - ((DIRECTION) == DMA_DIR_MemoryToPeripheral) || \ - ((DIRECTION) == DMA_DIR_MemoryToMemory)) -/** - * @} - */ - - -/** @defgroup DMA_data_buffer_size - * @{ - */ -#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000)) -/** - * @} - */ - - -/** @defgroup DMA_peripheral_incremented_mode - * @{ - */ -#define DMA_PeripheralInc_Enable ((uint32_t)0x00000200) -#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)0x00000400) -#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)0x00000800) -#define DMA_PeripheralDataSize_Word ((uint32_t)0x00001000) - -#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)0x00002000) -#define DMA_MemoryDataSize_Word ((uint32_t)0x00004000) - -#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_Normal ((uint32_t)0x00000000) -#define DMA_Mode_Circular ((uint32_t)0x00000100) - -#define IS_DMA_MODE(MODE) (((MODE) == DMA_Mode_Normal ) || \ - ((MODE) == DMA_Mode_Circular)) -/** - * @} - */ - - -/** @defgroup DMA_priority_level - * @{ - */ -#define DMA_Priority_Low ((uint32_t)0x00000000) -#define DMA_Priority_Medium ((uint32_t)0x00010000) -#define DMA_Priority_High ((uint32_t)0x00020000) -#define DMA_Priority_VeryHigh ((uint32_t)0x00030000) - -#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_Priority_Low ) || \ - ((PRIORITY) == DMA_Priority_Medium) || \ - ((PRIORITY) == DMA_Priority_High) || \ - ((PRIORITY) == DMA_Priority_VeryHigh)) -/** - * @} - */ - - -/** @defgroup DMA_fifo_direct_mode - * @{ - */ -#define DMA_FIFOMode_Disable ((uint32_t)0x00000000) -#define DMA_FIFOMode_Enable ((uint32_t)0x00000004) - -#define IS_DMA_FIFO_MODE_STATE(STATE) (((STATE) == DMA_FIFOMode_Disable ) || \ - ((STATE) == DMA_FIFOMode_Enable)) -/** - * @} - */ - - -/** @defgroup DMA_fifo_threshold_level - * @{ - */ -#define DMA_FIFOThreshold_1QuarterFull ((uint32_t)0x00000000) -#define DMA_FIFOThreshold_HalfFull ((uint32_t)0x00000001) -#define DMA_FIFOThreshold_3QuartersFull ((uint32_t)0x00000002) -#define DMA_FIFOThreshold_Full ((uint32_t)0x00000003) - -#define IS_DMA_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == DMA_FIFOThreshold_1QuarterFull ) || \ - ((THRESHOLD) == DMA_FIFOThreshold_HalfFull) || \ - ((THRESHOLD) == DMA_FIFOThreshold_3QuartersFull) || \ - ((THRESHOLD) == DMA_FIFOThreshold_Full)) -/** - * @} - */ - - -/** @defgroup DMA_memory_burst - * @{ - */ -#define DMA_MemoryBurst_Single ((uint32_t)0x00000000) -#define DMA_MemoryBurst_INC4 ((uint32_t)0x00800000) -#define DMA_MemoryBurst_INC8 ((uint32_t)0x01000000) -#define DMA_MemoryBurst_INC16 ((uint32_t)0x01800000) - -#define IS_DMA_MEMORY_BURST(BURST) (((BURST) == DMA_MemoryBurst_Single) || \ - ((BURST) == DMA_MemoryBurst_INC4) || \ - ((BURST) == DMA_MemoryBurst_INC8) || \ - ((BURST) == DMA_MemoryBurst_INC16)) -/** - * @} - */ - - -/** @defgroup DMA_peripheral_burst - * @{ - */ -#define DMA_PeripheralBurst_Single ((uint32_t)0x00000000) -#define DMA_PeripheralBurst_INC4 ((uint32_t)0x00200000) -#define DMA_PeripheralBurst_INC8 ((uint32_t)0x00400000) -#define DMA_PeripheralBurst_INC16 ((uint32_t)0x00600000) - -#define IS_DMA_PERIPHERAL_BURST(BURST) (((BURST) == DMA_PeripheralBurst_Single) || \ - ((BURST) == DMA_PeripheralBurst_INC4) || \ - ((BURST) == DMA_PeripheralBurst_INC8) || \ - ((BURST) == DMA_PeripheralBurst_INC16)) -/** - * @} - */ - - -/** @defgroup DMA_fifo_status_level - * @{ - */ -#define DMA_FIFOStatus_Less1QuarterFull ((uint32_t)0x00000000 << 3) -#define DMA_FIFOStatus_1QuarterFull ((uint32_t)0x00000001 << 3) -#define DMA_FIFOStatus_HalfFull ((uint32_t)0x00000002 << 3) -#define DMA_FIFOStatus_3QuartersFull ((uint32_t)0x00000003 << 3) -#define DMA_FIFOStatus_Empty ((uint32_t)0x00000004 << 3) -#define DMA_FIFOStatus_Full ((uint32_t)0x00000005 << 3) - -#define IS_DMA_FIFO_STATUS(STATUS) (((STATUS) == DMA_FIFOStatus_Less1QuarterFull ) || \ - ((STATUS) == DMA_FIFOStatus_HalfFull) || \ - ((STATUS) == DMA_FIFOStatus_1QuarterFull) || \ - ((STATUS) == DMA_FIFOStatus_3QuartersFull) || \ - ((STATUS) == DMA_FIFOStatus_Full) || \ - ((STATUS) == DMA_FIFOStatus_Empty)) -/** - * @} - */ - -/** @defgroup DMA_flags_definition - * @{ - */ -#define DMA_FLAG_FEIF0 ((uint32_t)0x10800001) -#define DMA_FLAG_DMEIF0 ((uint32_t)0x10800004) -#define DMA_FLAG_TEIF0 ((uint32_t)0x10000008) -#define DMA_FLAG_HTIF0 ((uint32_t)0x10000010) -#define DMA_FLAG_TCIF0 ((uint32_t)0x10000020) -#define DMA_FLAG_FEIF1 ((uint32_t)0x10000040) -#define DMA_FLAG_DMEIF1 ((uint32_t)0x10000100) -#define DMA_FLAG_TEIF1 ((uint32_t)0x10000200) -#define DMA_FLAG_HTIF1 ((uint32_t)0x10000400) -#define DMA_FLAG_TCIF1 ((uint32_t)0x10000800) -#define DMA_FLAG_FEIF2 ((uint32_t)0x10010000) -#define DMA_FLAG_DMEIF2 ((uint32_t)0x10040000) -#define DMA_FLAG_TEIF2 ((uint32_t)0x10080000) -#define DMA_FLAG_HTIF2 ((uint32_t)0x10100000) -#define DMA_FLAG_TCIF2 ((uint32_t)0x10200000) -#define DMA_FLAG_FEIF3 ((uint32_t)0x10400000) -#define DMA_FLAG_DMEIF3 ((uint32_t)0x11000000) -#define DMA_FLAG_TEIF3 ((uint32_t)0x12000000) -#define DMA_FLAG_HTIF3 ((uint32_t)0x14000000) -#define DMA_FLAG_TCIF3 ((uint32_t)0x18000000) -#define DMA_FLAG_FEIF4 ((uint32_t)0x20000001) -#define DMA_FLAG_DMEIF4 ((uint32_t)0x20000004) -#define DMA_FLAG_TEIF4 ((uint32_t)0x20000008) -#define DMA_FLAG_HTIF4 ((uint32_t)0x20000010) -#define DMA_FLAG_TCIF4 ((uint32_t)0x20000020) -#define DMA_FLAG_FEIF5 ((uint32_t)0x20000040) -#define DMA_FLAG_DMEIF5 ((uint32_t)0x20000100) -#define DMA_FLAG_TEIF5 ((uint32_t)0x20000200) -#define DMA_FLAG_HTIF5 ((uint32_t)0x20000400) -#define DMA_FLAG_TCIF5 ((uint32_t)0x20000800) -#define DMA_FLAG_FEIF6 ((uint32_t)0x20010000) -#define DMA_FLAG_DMEIF6 ((uint32_t)0x20040000) -#define DMA_FLAG_TEIF6 ((uint32_t)0x20080000) -#define DMA_FLAG_HTIF6 ((uint32_t)0x20100000) -#define DMA_FLAG_TCIF6 ((uint32_t)0x20200000) -#define DMA_FLAG_FEIF7 ((uint32_t)0x20400000) -#define DMA_FLAG_DMEIF7 ((uint32_t)0x21000000) -#define DMA_FLAG_TEIF7 ((uint32_t)0x22000000) -#define DMA_FLAG_HTIF7 ((uint32_t)0x24000000) -#define DMA_FLAG_TCIF7 ((uint32_t)0x28000000) - -#define IS_DMA_CLEAR_FLAG(FLAG) ((((FLAG) & 0x30000000) != 0x30000000) && (((FLAG) & 0x30000000) != 0) && \ - (((FLAG) & 0xC002F082) == 0x00) && ((FLAG) != 0x00)) - -#define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA_FLAG_TCIF0) || ((FLAG) == DMA_FLAG_HTIF0) || \ - ((FLAG) == DMA_FLAG_TEIF0) || ((FLAG) == DMA_FLAG_DMEIF0) || \ - ((FLAG) == DMA_FLAG_FEIF0) || ((FLAG) == DMA_FLAG_TCIF1) || \ - ((FLAG) == DMA_FLAG_HTIF1) || ((FLAG) == DMA_FLAG_TEIF1) || \ - ((FLAG) == DMA_FLAG_DMEIF1) || ((FLAG) == DMA_FLAG_FEIF1) || \ - ((FLAG) == DMA_FLAG_TCIF2) || ((FLAG) == DMA_FLAG_HTIF2) || \ - ((FLAG) == DMA_FLAG_TEIF2) || ((FLAG) == DMA_FLAG_DMEIF2) || \ - ((FLAG) == DMA_FLAG_FEIF2) || ((FLAG) == DMA_FLAG_TCIF3) || \ - ((FLAG) == DMA_FLAG_HTIF3) || ((FLAG) == DMA_FLAG_TEIF3) || \ - ((FLAG) == DMA_FLAG_DMEIF3) || ((FLAG) == DMA_FLAG_FEIF3) || \ - ((FLAG) == DMA_FLAG_TCIF4) || ((FLAG) == DMA_FLAG_HTIF4) || \ - ((FLAG) == DMA_FLAG_TEIF4) || ((FLAG) == DMA_FLAG_DMEIF4) || \ - ((FLAG) == DMA_FLAG_FEIF4) || ((FLAG) == DMA_FLAG_TCIF5) || \ - ((FLAG) == DMA_FLAG_HTIF5) || ((FLAG) == DMA_FLAG_TEIF5) || \ - ((FLAG) == DMA_FLAG_DMEIF5) || ((FLAG) == DMA_FLAG_FEIF5) || \ - ((FLAG) == DMA_FLAG_TCIF6) || ((FLAG) == DMA_FLAG_HTIF6) || \ - ((FLAG) == DMA_FLAG_TEIF6) || ((FLAG) == DMA_FLAG_DMEIF6) || \ - ((FLAG) == DMA_FLAG_FEIF6) || ((FLAG) == DMA_FLAG_TCIF7) || \ - ((FLAG) == DMA_FLAG_HTIF7) || ((FLAG) == DMA_FLAG_TEIF7) || \ - ((FLAG) == DMA_FLAG_DMEIF7) || ((FLAG) == DMA_FLAG_FEIF7)) -/** - * @} - */ - - -/** @defgroup DMA_interrupt_enable_definitions - * @{ - */ -#define DMA_IT_TC ((uint32_t)0x00000010) -#define DMA_IT_HT ((uint32_t)0x00000008) -#define DMA_IT_TE ((uint32_t)0x00000004) -#define DMA_IT_DME ((uint32_t)0x00000002) -#define DMA_IT_FE ((uint32_t)0x00000080) - -#define IS_DMA_CONFIG_IT(IT) ((((IT) & 0xFFFFFF61) == 0x00) && ((IT) != 0x00)) -/** - * @} - */ - - -/** @defgroup DMA_interrupts_definitions - * @{ - */ -#define DMA_IT_FEIF0 ((uint32_t)0x90000001) -#define DMA_IT_DMEIF0 ((uint32_t)0x10001004) -#define DMA_IT_TEIF0 ((uint32_t)0x10002008) -#define DMA_IT_HTIF0 ((uint32_t)0x10004010) -#define DMA_IT_TCIF0 ((uint32_t)0x10008020) -#define DMA_IT_FEIF1 ((uint32_t)0x90000040) -#define DMA_IT_DMEIF1 ((uint32_t)0x10001100) -#define DMA_IT_TEIF1 ((uint32_t)0x10002200) -#define DMA_IT_HTIF1 ((uint32_t)0x10004400) -#define DMA_IT_TCIF1 ((uint32_t)0x10008800) -#define DMA_IT_FEIF2 ((uint32_t)0x90010000) -#define DMA_IT_DMEIF2 ((uint32_t)0x10041000) -#define DMA_IT_TEIF2 ((uint32_t)0x10082000) -#define DMA_IT_HTIF2 ((uint32_t)0x10104000) -#define DMA_IT_TCIF2 ((uint32_t)0x10208000) -#define DMA_IT_FEIF3 ((uint32_t)0x90400000) -#define DMA_IT_DMEIF3 ((uint32_t)0x11001000) -#define DMA_IT_TEIF3 ((uint32_t)0x12002000) -#define DMA_IT_HTIF3 ((uint32_t)0x14004000) -#define DMA_IT_TCIF3 ((uint32_t)0x18008000) -#define DMA_IT_FEIF4 ((uint32_t)0xA0000001) -#define DMA_IT_DMEIF4 ((uint32_t)0x20001004) -#define DMA_IT_TEIF4 ((uint32_t)0x20002008) -#define DMA_IT_HTIF4 ((uint32_t)0x20004010) -#define DMA_IT_TCIF4 ((uint32_t)0x20008020) -#define DMA_IT_FEIF5 ((uint32_t)0xA0000040) -#define DMA_IT_DMEIF5 ((uint32_t)0x20001100) -#define DMA_IT_TEIF5 ((uint32_t)0x20002200) -#define DMA_IT_HTIF5 ((uint32_t)0x20004400) -#define DMA_IT_TCIF5 ((uint32_t)0x20008800) -#define DMA_IT_FEIF6 ((uint32_t)0xA0010000) -#define DMA_IT_DMEIF6 ((uint32_t)0x20041000) -#define DMA_IT_TEIF6 ((uint32_t)0x20082000) -#define DMA_IT_HTIF6 ((uint32_t)0x20104000) -#define DMA_IT_TCIF6 ((uint32_t)0x20208000) -#define DMA_IT_FEIF7 ((uint32_t)0xA0400000) -#define DMA_IT_DMEIF7 ((uint32_t)0x21001000) -#define DMA_IT_TEIF7 ((uint32_t)0x22002000) -#define DMA_IT_HTIF7 ((uint32_t)0x24004000) -#define DMA_IT_TCIF7 ((uint32_t)0x28008000) - -#define IS_DMA_CLEAR_IT(IT) ((((IT) & 0x30000000) != 0x30000000) && \ - (((IT) & 0x30000000) != 0) && ((IT) != 0x00) && \ - (((IT) & 0x40820082) == 0x00)) - -#define IS_DMA_GET_IT(IT) (((IT) == DMA_IT_TCIF0) || ((IT) == DMA_IT_HTIF0) || \ - ((IT) == DMA_IT_TEIF0) || ((IT) == DMA_IT_DMEIF0) || \ - ((IT) == DMA_IT_FEIF0) || ((IT) == DMA_IT_TCIF1) || \ - ((IT) == DMA_IT_HTIF1) || ((IT) == DMA_IT_TEIF1) || \ - ((IT) == DMA_IT_DMEIF1)|| ((IT) == DMA_IT_FEIF1) || \ - ((IT) == DMA_IT_TCIF2) || ((IT) == DMA_IT_HTIF2) || \ - ((IT) == DMA_IT_TEIF2) || ((IT) == DMA_IT_DMEIF2) || \ - ((IT) == DMA_IT_FEIF2) || ((IT) == DMA_IT_TCIF3) || \ - ((IT) == DMA_IT_HTIF3) || ((IT) == DMA_IT_TEIF3) || \ - ((IT) == DMA_IT_DMEIF3)|| ((IT) == DMA_IT_FEIF3) || \ - ((IT) == DMA_IT_TCIF4) || ((IT) == DMA_IT_HTIF4) || \ - ((IT) == DMA_IT_TEIF4) || ((IT) == DMA_IT_DMEIF4) || \ - ((IT) == DMA_IT_FEIF4) || ((IT) == DMA_IT_TCIF5) || \ - ((IT) == DMA_IT_HTIF5) || ((IT) == DMA_IT_TEIF5) || \ - ((IT) == DMA_IT_DMEIF5)|| ((IT) == DMA_IT_FEIF5) || \ - ((IT) == DMA_IT_TCIF6) || ((IT) == DMA_IT_HTIF6) || \ - ((IT) == DMA_IT_TEIF6) || ((IT) == DMA_IT_DMEIF6) || \ - ((IT) == DMA_IT_FEIF6) || ((IT) == DMA_IT_TCIF7) || \ - ((IT) == DMA_IT_HTIF7) || ((IT) == DMA_IT_TEIF7) || \ - ((IT) == DMA_IT_DMEIF7)|| ((IT) == DMA_IT_FEIF7)) -/** - * @} - */ - - -/** @defgroup DMA_peripheral_increment_offset - * @{ - */ -#define DMA_PINCOS_Psize ((uint32_t)0x00000000) -#define DMA_PINCOS_WordAligned ((uint32_t)0x00008000) - -#define IS_DMA_PINCOS_SIZE(SIZE) (((SIZE) == DMA_PINCOS_Psize) || \ - ((SIZE) == DMA_PINCOS_WordAligned)) -/** - * @} - */ - - -/** @defgroup DMA_flow_controller_definitions - * @{ - */ -#define DMA_FlowCtrl_Memory ((uint32_t)0x00000000) -#define DMA_FlowCtrl_Peripheral ((uint32_t)0x00000020) - -#define IS_DMA_FLOW_CTRL(CTRL) (((CTRL) == DMA_FlowCtrl_Memory) || \ - ((CTRL) == DMA_FlowCtrl_Peripheral)) -/** - * @} - */ - - -/** @defgroup DMA_memory_targets_definitions - * @{ - */ -#define DMA_Memory_0 ((uint32_t)0x00000000) -#define DMA_Memory_1 ((uint32_t)0x00080000) - -#define IS_DMA_CURRENT_MEM(MEM) (((MEM) == DMA_Memory_0) || ((MEM) == DMA_Memory_1)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the DMA configuration to the default reset state *****/ -void DMA_DeInit(DMA_Stream_TypeDef* DMAy_Streamx); - -/* Initialization and Configuration functions *********************************/ -void DMA_Init(DMA_Stream_TypeDef* DMAy_Streamx, DMA_InitTypeDef* DMA_InitStruct); -void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct); -void DMA_Cmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); - -/* Optional Configuration functions *******************************************/ -void DMA_PeriphIncOffsetSizeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_Pincos); -void DMA_FlowControllerConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FlowCtrl); - -/* Data Counter functions *****************************************************/ -void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter); -uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx); - -/* Double Buffer mode functions ***********************************************/ -void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t Memory1BaseAddr, - uint32_t DMA_CurrentMemory); -void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); -void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t MemoryBaseAddr, - uint32_t DMA_MemoryTarget); -uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx); - -/* Interrupts and flags management functions **********************************/ -FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx); -uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx); -FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); -void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); -void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState); -ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); -void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_DMA_H */ - -/** - * @} - */ - -/** - * @} - */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_exti.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_exti.h deleted file mode 100644 index b6eb8539..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_exti.h +++ /dev/null @@ -1,183 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_exti.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the EXTI firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_EXTI_H -#define __STM32F4xx_EXTI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 value 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 EXTITrigger_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; - -/* Exported constants --------------------------------------------------------*/ - -/** @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 OTG FS Wakeup from suspend event */ -#define EXTI_Line19 ((uint32_t)0x80000) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */ -#define EXTI_Line20 ((uint32_t)0x00100000) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */ -#define EXTI_Line21 ((uint32_t)0x00200000) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */ -#define EXTI_Line22 ((uint32_t)0x00400000) /*!< External interrupt line 22 Connected to the RTC Wakeup event */ - -#define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFF800000) == 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) || \ - ((LINE) == EXTI_Line20) || ((LINE) == EXTI_Line21) ||\ - ((LINE) == EXTI_Line22)) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the EXTI configuration to the default reset state *****/ -void EXTI_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); -void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct); -void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); - -/* Interrupts and flags management functions **********************************/ -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 /* __STM32F4xx_EXTI_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_flash.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_flash.h deleted file mode 100644 index 55380b7a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_flash.h +++ /dev/null @@ -1,390 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_flash.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the FLASH - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_FLASH_H -#define __STM32F4xx_FLASH_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup FLASH - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/** - * @brief FLASH Status - */ -typedef enum -{ - FLASH_BUSY = 1, - FLASH_ERROR_PGS, - FLASH_ERROR_PGP, - FLASH_ERROR_PGA, - FLASH_ERROR_WRP, - FLASH_ERROR_PROGRAM, - FLASH_ERROR_OPERATION, - FLASH_COMPLETE -}FLASH_Status; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup FLASH_Exported_Constants - * @{ - */ - -/** @defgroup Flash_Latency - * @{ - */ -#define FLASH_Latency_0 ((uint8_t)0x0000) /*!< FLASH Zero Latency cycle */ -#define FLASH_Latency_1 ((uint8_t)0x0001) /*!< FLASH One Latency cycle */ -#define FLASH_Latency_2 ((uint8_t)0x0002) /*!< FLASH Two Latency cycles */ -#define FLASH_Latency_3 ((uint8_t)0x0003) /*!< FLASH Three Latency cycles */ -#define FLASH_Latency_4 ((uint8_t)0x0004) /*!< FLASH Four Latency cycles */ -#define FLASH_Latency_5 ((uint8_t)0x0005) /*!< FLASH Five Latency cycles */ -#define FLASH_Latency_6 ((uint8_t)0x0006) /*!< FLASH Six Latency cycles */ -#define FLASH_Latency_7 ((uint8_t)0x0007) /*!< FLASH Seven Latency cycles */ - -#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_Latency_0) || \ - ((LATENCY) == FLASH_Latency_1) || \ - ((LATENCY) == FLASH_Latency_2) || \ - ((LATENCY) == FLASH_Latency_3) || \ - ((LATENCY) == FLASH_Latency_4) || \ - ((LATENCY) == FLASH_Latency_5) || \ - ((LATENCY) == FLASH_Latency_6) || \ - ((LATENCY) == FLASH_Latency_7)) - -/** - * @} - */ - -/** @defgroup FLASH_Voltage_Range - * @{ - */ -#define VoltageRange_1 ((uint8_t)0x00) /*!< Device operating range: 1.8V to 2.1V */ -#define VoltageRange_2 ((uint8_t)0x01) /*!= 0x08000000) && ((ADDRESS) < 0x081FFFFF)) ||\ - (((ADDRESS) >= 0x1FFF7800) && ((ADDRESS) < 0x1FFF7A0F))) -/** - * @} - */ - -/** @defgroup Option_Bytes_Write_Protection - * @{ - */ -#define OB_WRP_Sector_0 ((uint32_t)0x00000001) /*!< Write protection of Sector0 */ -#define OB_WRP_Sector_1 ((uint32_t)0x00000002) /*!< Write protection of Sector1 */ -#define OB_WRP_Sector_2 ((uint32_t)0x00000004) /*!< Write protection of Sector2 */ -#define OB_WRP_Sector_3 ((uint32_t)0x00000008) /*!< Write protection of Sector3 */ -#define OB_WRP_Sector_4 ((uint32_t)0x00000010) /*!< Write protection of Sector4 */ -#define OB_WRP_Sector_5 ((uint32_t)0x00000020) /*!< Write protection of Sector5 */ -#define OB_WRP_Sector_6 ((uint32_t)0x00000040) /*!< Write protection of Sector6 */ -#define OB_WRP_Sector_7 ((uint32_t)0x00000080) /*!< Write protection of Sector7 */ -#define OB_WRP_Sector_8 ((uint32_t)0x00000100) /*!< Write protection of Sector8 */ -#define OB_WRP_Sector_9 ((uint32_t)0x00000200) /*!< Write protection of Sector9 */ -#define OB_WRP_Sector_10 ((uint32_t)0x00000400) /*!< Write protection of Sector10 */ -#define OB_WRP_Sector_11 ((uint32_t)0x00000800) /*!< Write protection of Sector11 */ -#define OB_WRP_Sector_12 ((uint32_t)0x00000001) /*!< Write protection of Sector12 */ -#define OB_WRP_Sector_13 ((uint32_t)0x00000002) /*!< Write protection of Sector13 */ -#define OB_WRP_Sector_14 ((uint32_t)0x00000004) /*!< Write protection of Sector14 */ -#define OB_WRP_Sector_15 ((uint32_t)0x00000008) /*!< Write protection of Sector15 */ -#define OB_WRP_Sector_16 ((uint32_t)0x00000010) /*!< Write protection of Sector16 */ -#define OB_WRP_Sector_17 ((uint32_t)0x00000020) /*!< Write protection of Sector17 */ -#define OB_WRP_Sector_18 ((uint32_t)0x00000040) /*!< Write protection of Sector18 */ -#define OB_WRP_Sector_19 ((uint32_t)0x00000080) /*!< Write protection of Sector19 */ -#define OB_WRP_Sector_20 ((uint32_t)0x00000100) /*!< Write protection of Sector20 */ -#define OB_WRP_Sector_21 ((uint32_t)0x00000200) /*!< Write protection of Sector21 */ -#define OB_WRP_Sector_22 ((uint32_t)0x00000400) /*!< Write protection of Sector22 */ -#define OB_WRP_Sector_23 ((uint32_t)0x00000800) /*!< Write protection of Sector23 */ -#define OB_WRP_Sector_All ((uint32_t)0x00000FFF) /*!< Write protection of all Sectors */ - -#define IS_OB_WRP(SECTOR)((((SECTOR) & (uint32_t)0xFFFFF000) == 0x00000000) && ((SECTOR) != 0x00000000)) -/** - * @} - */ - -/** @defgroup FLASH_Option_Bytes_Read_Protection - * @{ - */ -#define OB_RDP_Level_0 ((uint8_t)0xAA) -#define OB_RDP_Level_1 ((uint8_t)0x55) -/*#define OB_RDP_Level_2 ((uint8_t)0xCC)*/ /*!< Warning: When enabling read protection level 2 - it's no more possible to go back to level 1 or 0 */ -#define IS_OB_RDP(LEVEL) (((LEVEL) == OB_RDP_Level_0)||\ - ((LEVEL) == OB_RDP_Level_1))/*||\ - ((LEVEL) == OB_RDP_Level_2))*/ -/** - * @} - */ - -/** @defgroup FLASH_Option_Bytes_IWatchdog - * @{ - */ -#define OB_IWDG_SW ((uint8_t)0x20) /*!< Software IWDG selected */ -#define OB_IWDG_HW ((uint8_t)0x00) /*!< Hardware IWDG selected */ -#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) -/** - * @} - */ - -/** @defgroup FLASH_Option_Bytes_nRST_STOP - * @{ - */ -#define OB_STOP_NoRST ((uint8_t)0x40) /*!< No reset generated when entering in STOP */ -#define OB_STOP_RST ((uint8_t)0x00) /*!< Reset generated when entering in STOP */ -#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NoRST) || ((SOURCE) == OB_STOP_RST)) -/** - * @} - */ - - -/** @defgroup FLASH_Option_Bytes_nRST_STDBY - * @{ - */ -#define OB_STDBY_NoRST ((uint8_t)0x80) /*!< No reset generated when entering in STANDBY */ -#define OB_STDBY_RST ((uint8_t)0x00) /*!< Reset generated when entering in STANDBY */ -#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NoRST) || ((SOURCE) == OB_STDBY_RST)) -/** - * @} - */ - -/** @defgroup FLASH_BOR_Reset_Level - * @{ - */ -#define OB_BOR_LEVEL3 ((uint8_t)0x00) /*!< Supply voltage ranges from 2.70 to 3.60 V */ -#define OB_BOR_LEVEL2 ((uint8_t)0x04) /*!< Supply voltage ranges from 2.40 to 2.70 V */ -#define OB_BOR_LEVEL1 ((uint8_t)0x08) /*!< Supply voltage ranges from 2.10 to 2.40 V */ -#define OB_BOR_OFF ((uint8_t)0x0C) /*!< Supply voltage ranges from 1.62 to 2.10 V */ -#define IS_OB_BOR(LEVEL) (((LEVEL) == OB_BOR_LEVEL1) || ((LEVEL) == OB_BOR_LEVEL2) ||\ - ((LEVEL) == OB_BOR_LEVEL3) || ((LEVEL) == OB_BOR_OFF)) -/** - * @} - */ - -/** @defgroup FLASH_Interrupts - * @{ - */ -#define FLASH_IT_EOP ((uint32_t)0x01000000) /*!< End of FLASH Operation Interrupt source */ -#define FLASH_IT_ERR ((uint32_t)0x02000000) /*!< Error Interrupt source */ -#define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0xFCFFFFFF) == 0x00000000) && ((IT) != 0x00000000)) -/** - * @} - */ - -/** @defgroup FLASH_Flags - * @{ - */ -#define FLASH_FLAG_EOP ((uint32_t)0x00000001) /*!< FLASH End of Operation flag */ -#define FLASH_FLAG_OPERR ((uint32_t)0x00000002) /*!< FLASH operation Error flag */ -#define FLASH_FLAG_WRPERR ((uint32_t)0x00000010) /*!< FLASH Write protected error flag */ -#define FLASH_FLAG_PGAERR ((uint32_t)0x00000020) /*!< FLASH Programming Alignment error flag */ -#define FLASH_FLAG_PGPERR ((uint32_t)0x00000040) /*!< FLASH Programming Parallelism error flag */ -#define FLASH_FLAG_PGSERR ((uint32_t)0x00000080) /*!< FLASH Programming Sequence error flag */ -#define FLASH_FLAG_BSY ((uint32_t)0x00010000) /*!< FLASH Busy flag */ -#define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFE0C) == 0x00000000) && ((FLAG) != 0x00000000)) -#define IS_FLASH_GET_FLAG(FLAG) (((FLAG) == FLASH_FLAG_EOP) || ((FLAG) == FLASH_FLAG_OPERR) || \ - ((FLAG) == FLASH_FLAG_WRPERR) || ((FLAG) == FLASH_FLAG_PGAERR) || \ - ((FLAG) == FLASH_FLAG_PGPERR) || ((FLAG) == FLASH_FLAG_PGSERR) || \ - ((FLAG) == FLASH_FLAG_BSY)) -/** - * @} - */ - -/** @defgroup FLASH_Program_Parallelism - * @{ - */ -#define FLASH_PSIZE_BYTE ((uint32_t)0x00000000) -#define FLASH_PSIZE_HALF_WORD ((uint32_t)0x00000100) -#define FLASH_PSIZE_WORD ((uint32_t)0x00000200) -#define FLASH_PSIZE_DOUBLE_WORD ((uint32_t)0x00000300) -#define CR_PSIZE_MASK ((uint32_t)0xFFFFFCFF) -/** - * @} - */ - -/** @defgroup FLASH_Keys - * @{ - */ -#define RDP_KEY ((uint16_t)0x00A5) -#define FLASH_KEY1 ((uint32_t)0x45670123) -#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) -#define FLASH_OPT_KEY1 ((uint32_t)0x08192A3B) -#define FLASH_OPT_KEY2 ((uint32_t)0x4C5D6E7F) -/** - * @} - */ - -/** - * @brief ACR register byte 0 (Bits[7:0]) base address - */ -#define ACR_BYTE0_ADDRESS ((uint32_t)0x40023C00) -/** - * @brief OPTCR register byte 0 (Bits[7:0]) base address - */ -#define OPTCR_BYTE0_ADDRESS ((uint32_t)0x40023C14) -/** - * @brief OPTCR register byte 1 (Bits[15:8]) base address - */ -#define OPTCR_BYTE1_ADDRESS ((uint32_t)0x40023C15) -/** - * @brief OPTCR register byte 2 (Bits[23:16]) base address - */ -#define OPTCR_BYTE2_ADDRESS ((uint32_t)0x40023C16) -/** - * @brief OPTCR register byte 3 (Bits[31:24]) base address - */ -#define OPTCR_BYTE3_ADDRESS ((uint32_t)0x40023C17) - -/** - * @brief OPTCR1 register byte 0 (Bits[7:0]) base address - */ -#define OPTCR1_BYTE2_ADDRESS ((uint32_t)0x40023C1A) - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* FLASH Interface configuration functions ************************************/ -void FLASH_SetLatency(uint32_t FLASH_Latency); -void FLASH_PrefetchBufferCmd(FunctionalState NewState); -void FLASH_InstructionCacheCmd(FunctionalState NewState); -void FLASH_DataCacheCmd(FunctionalState NewState); -void FLASH_InstructionCacheReset(void); -void FLASH_DataCacheReset(void); - -/* FLASH Memory Programming functions *****************************************/ -void FLASH_Unlock(void); -void FLASH_Lock(void); -FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange); -FLASH_Status FLASH_EraseAllSectors(uint8_t VoltageRange); -FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data); -FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); -FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data); -FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data); - -/* Option Bytes Programming functions *****************************************/ -void FLASH_OB_Unlock(void); -void FLASH_OB_Lock(void); -void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState); -void FLASH_OB_WRP1Config(uint32_t OB_WRP, FunctionalState NewState); -void FLASH_OB_RDPConfig(uint8_t OB_RDP); -void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY); -void FLASH_OB_BORConfig(uint8_t OB_BOR); -FLASH_Status FLASH_OB_Launch(void); -uint8_t FLASH_OB_GetUser(void); -uint16_t FLASH_OB_GetWRP(void); -uint16_t FLASH_OB_GetWRP1(void); -FlagStatus FLASH_OB_GetRDP(void); -uint8_t FLASH_OB_GetBOR(void); - -/* Interrupts and flags management functions **********************************/ -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(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_FLASH_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_fsmc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_fsmc.h deleted file mode 100644 index bd89a4b0..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_fsmc.h +++ /dev/null @@ -1,675 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_fsmc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the FSMC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_FSMC_H -#define __STM32F4xx_FSMC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 This parameter 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 This parameter 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 This parameter 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 This parameter 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 parameter value 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 data bus 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 Extended Mode is not used*/ - - FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct; /*!< Timing Parameters for write access if the Extended Mode 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 de-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 number between 0x00 and 0xFF */ - - uint32_t FSMC_HiZSetupTime; /*!< Defines the number of HCLK clock cycles during which the - data bus 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @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 FSMC_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 FSMC_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)) -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* NOR/SRAM Controller functions **********************************************/ -void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank); -void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); -void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); -void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState); - -/* NAND Controller functions **************************************************/ -void FSMC_NANDDeInit(uint32_t FSMC_Bank); -void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct); -void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct); -void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState); -void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState); -uint32_t FSMC_GetECC(uint32_t FSMC_Bank); - -/* PCCARD Controller functions ************************************************/ -void FSMC_PCCARDDeInit(void); -void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct); -void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct); -void FSMC_PCCARDCmd(FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -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 /*__STM32F4xx_FSMC_H */ -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h deleted file mode 100644 index 0cf96c5b..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h +++ /dev/null @@ -1,423 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_gpio.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the GPIO firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_GPIO_H -#define __STM32F4xx_GPIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup GPIO - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \ - ((PERIPH) == GPIOB) || \ - ((PERIPH) == GPIOC) || \ - ((PERIPH) == GPIOD) || \ - ((PERIPH) == GPIOE) || \ - ((PERIPH) == GPIOF) || \ - ((PERIPH) == GPIOG) || \ - ((PERIPH) == GPIOH) || \ - ((PERIPH) == GPIOI)) - - -/** - * @brief GPIO Configuration Mode enumeration - */ -typedef enum -{ - GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */ - GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */ - GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */ - GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */ -}GPIOMode_TypeDef; -#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN) || ((MODE) == GPIO_Mode_OUT) || \ - ((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN)) - -/** - * @brief GPIO Output type enumeration - */ -typedef enum -{ - GPIO_OType_PP = 0x00, - GPIO_OType_OD = 0x01 -}GPIOOType_TypeDef; -#define IS_GPIO_OTYPE(OTYPE) (((OTYPE) == GPIO_OType_PP) || ((OTYPE) == GPIO_OType_OD)) - - -/** - * @brief GPIO Output Maximum frequency enumeration - */ -typedef enum -{ - GPIO_Speed_2MHz = 0x00, /*!< Low speed */ - GPIO_Speed_25MHz = 0x01, /*!< Medium speed */ - GPIO_Speed_50MHz = 0x02, /*!< Fast speed */ - GPIO_Speed_100MHz = 0x03 /*!< High speed on 30 pF (80 MHz Output max speed on 15 pF) */ -}GPIOSpeed_TypeDef; -#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_2MHz) || ((SPEED) == GPIO_Speed_25MHz) || \ - ((SPEED) == GPIO_Speed_50MHz)|| ((SPEED) == GPIO_Speed_100MHz)) - -/** - * @brief GPIO Configuration PullUp PullDown enumeration - */ -typedef enum -{ - GPIO_PuPd_NOPULL = 0x00, - GPIO_PuPd_UP = 0x01, - GPIO_PuPd_DOWN = 0x02 -}GPIOPuPd_TypeDef; -#define IS_GPIO_PUPD(PUPD) (((PUPD) == GPIO_PuPd_NOPULL) || ((PUPD) == GPIO_PuPd_UP) || \ - ((PUPD) == GPIO_PuPd_DOWN)) - -/** - * @brief GPIO 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)) - - -/** - * @brief GPIO Init structure definition - */ -typedef struct -{ - uint32_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured. - This parameter can be any value of @ref GPIO_pins_define */ - - GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins. - This parameter can be a value of @ref GPIOMode_TypeDef */ - - GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins. - This parameter can be a value of @ref GPIOSpeed_TypeDef */ - - GPIOOType_TypeDef GPIO_OType; /*!< Specifies the operating output type for the selected pins. - This parameter can be a value of @ref GPIOOType_TypeDef */ - - GPIOPuPd_TypeDef GPIO_PuPd; /*!< Specifies the operating Pull-up/Pull down for the selected pins. - This parameter can be a value of @ref GPIOPuPd_TypeDef */ -}GPIO_InitTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @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_Pin_sources - * @{ - */ -#define GPIO_PinSource0 ((uint8_t)0x00) -#define GPIO_PinSource1 ((uint8_t)0x01) -#define GPIO_PinSource2 ((uint8_t)0x02) -#define GPIO_PinSource3 ((uint8_t)0x03) -#define GPIO_PinSource4 ((uint8_t)0x04) -#define GPIO_PinSource5 ((uint8_t)0x05) -#define GPIO_PinSource6 ((uint8_t)0x06) -#define GPIO_PinSource7 ((uint8_t)0x07) -#define GPIO_PinSource8 ((uint8_t)0x08) -#define GPIO_PinSource9 ((uint8_t)0x09) -#define GPIO_PinSource10 ((uint8_t)0x0A) -#define GPIO_PinSource11 ((uint8_t)0x0B) -#define GPIO_PinSource12 ((uint8_t)0x0C) -#define GPIO_PinSource13 ((uint8_t)0x0D) -#define GPIO_PinSource14 ((uint8_t)0x0E) -#define GPIO_PinSource15 ((uint8_t)0x0F) - -#define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \ - ((PINSOURCE) == GPIO_PinSource1) || \ - ((PINSOURCE) == GPIO_PinSource2) || \ - ((PINSOURCE) == GPIO_PinSource3) || \ - ((PINSOURCE) == GPIO_PinSource4) || \ - ((PINSOURCE) == GPIO_PinSource5) || \ - ((PINSOURCE) == GPIO_PinSource6) || \ - ((PINSOURCE) == GPIO_PinSource7) || \ - ((PINSOURCE) == GPIO_PinSource8) || \ - ((PINSOURCE) == GPIO_PinSource9) || \ - ((PINSOURCE) == GPIO_PinSource10) || \ - ((PINSOURCE) == GPIO_PinSource11) || \ - ((PINSOURCE) == GPIO_PinSource12) || \ - ((PINSOURCE) == GPIO_PinSource13) || \ - ((PINSOURCE) == GPIO_PinSource14) || \ - ((PINSOURCE) == GPIO_PinSource15)) -/** - * @} - */ - -/** @defgroup GPIO_Alternat_function_selection_define - * @{ - */ -/** - * @brief AF 0 selection - */ -#define GPIO_AF_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ -#define GPIO_AF_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ -#define GPIO_AF_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ -#define GPIO_AF_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ -#define GPIO_AF_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ - -/** - * @brief AF 1 selection - */ -#define GPIO_AF_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ -#define GPIO_AF_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ - -/** - * @brief AF 2 selection - */ -#define GPIO_AF_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ -#define GPIO_AF_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ -#define GPIO_AF_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ - -/** - * @brief AF 3 selection - */ -#define GPIO_AF_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ -#define GPIO_AF_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ -#define GPIO_AF_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ -#define GPIO_AF_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ - -/** - * @brief AF 4 selection - */ -#define GPIO_AF_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ -#define GPIO_AF_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ -#define GPIO_AF_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ - -/** - * @brief AF 5 selection - */ -#define GPIO_AF_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ -#define GPIO_AF_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ -#define GPIO_AF_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ -#define GPIO_AF_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */ -#define GPIO_AF_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */ - -/** - * @brief AF 6 selection - */ -#define GPIO_AF_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ - -/** - * @brief AF 7 selection - */ -#define GPIO_AF_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ -#define GPIO_AF_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ -#define GPIO_AF_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ -#define GPIO_AF_I2S3ext ((uint8_t)0x07) /* I2S3ext Alternate Function mapping */ - -/** - * @brief AF 8 selection - */ -#define GPIO_AF_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ -#define GPIO_AF_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ -#define GPIO_AF_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ -#define GPIO_AF_UART7 ((uint8_t)0x08) /* UART7 Alternate Function mapping */ -#define GPIO_AF_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ - -/** - * @brief AF 9 selection - */ -#define GPIO_AF_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ -#define GPIO_AF_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ -#define GPIO_AF_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ -#define GPIO_AF_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ -#define GPIO_AF_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ - -/** - * @brief AF 10 selection - */ -#define GPIO_AF_OTG_FS ((uint8_t)0xA) /* OTG_FS Alternate Function mapping */ -#define GPIO_AF_OTG_HS ((uint8_t)0xA) /* OTG_HS Alternate Function mapping */ - -/** - * @brief AF 11 selection - */ -#define GPIO_AF_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ - -/** - * @brief AF 12 selection - */ -#define GPIO_AF_FSMC ((uint8_t)0xC) /* FSMC Alternate Function mapping */ - -#define GPIO_AF_OTG_HS_FS ((uint8_t)0xC) /* OTG HS configured in FS, Alternate Function mapping */ -#define GPIO_AF_SDIO ((uint8_t)0xC) /* SDIO Alternate Function mapping */ - -/** - * @brief AF 13 selection - */ -#define GPIO_AF_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ - -/** - * @brief AF 15 selection - */ -#define GPIO_AF_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ - -#define IS_GPIO_AF(AF) (((AF) == GPIO_AF_RTC_50Hz) || ((AF) == GPIO_AF_TIM14) || \ - ((AF) == GPIO_AF_MCO) || ((AF) == GPIO_AF_TAMPER) || \ - ((AF) == GPIO_AF_SWJ) || ((AF) == GPIO_AF_TRACE) || \ - ((AF) == GPIO_AF_TIM1) || ((AF) == GPIO_AF_TIM2) || \ - ((AF) == GPIO_AF_TIM3) || ((AF) == GPIO_AF_TIM4) || \ - ((AF) == GPIO_AF_TIM5) || ((AF) == GPIO_AF_TIM8) || \ - ((AF) == GPIO_AF_I2C1) || ((AF) == GPIO_AF_I2C2) || \ - ((AF) == GPIO_AF_I2C3) || ((AF) == GPIO_AF_SPI1) || \ - ((AF) == GPIO_AF_SPI2) || ((AF) == GPIO_AF_TIM13) || \ - ((AF) == GPIO_AF_SPI3) || ((AF) == GPIO_AF_TIM14) || \ - ((AF) == GPIO_AF_USART1) || ((AF) == GPIO_AF_USART2) || \ - ((AF) == GPIO_AF_USART3) || ((AF) == GPIO_AF_UART4) || \ - ((AF) == GPIO_AF_UART5) || ((AF) == GPIO_AF_USART6) || \ - ((AF) == GPIO_AF_CAN1) || ((AF) == GPIO_AF_CAN2) || \ - ((AF) == GPIO_AF_OTG_FS) || ((AF) == GPIO_AF_OTG_HS) || \ - ((AF) == GPIO_AF_ETH) || ((AF) == GPIO_AF_OTG_HS_FS) || \ - ((AF) == GPIO_AF_SDIO) || ((AF) == GPIO_AF_DCMI) || \ - ((AF) == GPIO_AF_EVENTOUT) || ((AF) == GPIO_AF_SPI4) || \ - ((AF) == GPIO_AF_SPI5) || ((AF) == GPIO_AF_SPI6) || \ - ((AF) == GPIO_AF_UART7) || ((AF) == GPIO_AF_UART8) || \ - ((AF) == GPIO_AF_FSMC)) - -/** - * @} - */ - -/** @defgroup GPIO_Legacy - * @{ - */ - -#define GPIO_Mode_AIN GPIO_Mode_AN - -#define GPIO_AF_OTG1_FS GPIO_AF_OTG_FS -#define GPIO_AF_OTG2_HS GPIO_AF_OTG_HS -#define GPIO_AF_OTG2_FS GPIO_AF_OTG_HS_FS - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the GPIO configuration to the default reset state ****/ -void GPIO_DeInit(GPIO_TypeDef* GPIOx); - -/* Initialization and Configuration functions *********************************/ -void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); -void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); -void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); - -/* GPIO Read and Write functions **********************************************/ -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_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); - -/* GPIO Alternate functions configuration function ****************************/ -void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_GPIO_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_hash.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_hash.h deleted file mode 100644 index 8a05ed5d..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_hash.h +++ /dev/null @@ -1,257 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hash.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the HASH - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HASH_H -#define __STM32F4xx_HASH_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup HASH - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief HASH Init structure definition - */ -typedef struct -{ - uint32_t HASH_AlgoSelection; /*!< SHA-1, SHA-224, SHA-256 or MD5. This parameter - can be a value of @ref HASH_Algo_Selection */ - uint32_t HASH_AlgoMode; /*!< HASH or HMAC. This parameter can be a value - of @ref HASH_processor_Algorithm_Mode */ - uint32_t HASH_DataType; /*!< 32-bit data, 16-bit data, 8-bit data or - bit string. This parameter can be a value of - @ref HASH_Data_Type */ - uint32_t HASH_HMACKeyType; /*!< HMAC Short key or HMAC Long Key. This parameter - can be a value of @ref HASH_HMAC_Long_key_only_for_HMAC_mode */ -}HASH_InitTypeDef; - -/** - * @brief HASH message digest result structure definition - */ -typedef struct -{ - uint32_t Data[8]; /*!< Message digest result : 8x 32bit wors for SHA-256, - 7x 32bit wors for SHA-224, - 5x 32bit words for SHA-1 or - 4x 32bit words for MD5 */ -} HASH_MsgDigest; - -/** - * @brief HASH context swapping structure definition - */ -typedef struct -{ - uint32_t HASH_IMR; - uint32_t HASH_STR; - uint32_t HASH_CR; - uint32_t HASH_CSR[54]; -}HASH_Context; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup HASH_Exported_Constants - * @{ - */ - -/** @defgroup HASH_Algo_Selection - * @{ - */ -#define HASH_AlgoSelection_SHA1 ((uint32_t)0x0000) /*!< HASH function is SHA1 */ -#define HASH_AlgoSelection_SHA224 HASH_CR_ALGO_1 /*!< HASH function is SHA224 */ -#define HASH_AlgoSelection_SHA256 HASH_CR_ALGO /*!< HASH function is SHA256 */ -#define HASH_AlgoSelection_MD5 HASH_CR_ALGO_0 /*!< HASH function is MD5 */ - -#define IS_HASH_ALGOSELECTION(ALGOSELECTION) (((ALGOSELECTION) == HASH_AlgoSelection_SHA1) || \ - ((ALGOSELECTION) == HASH_AlgoSelection_SHA224) || \ - ((ALGOSELECTION) == HASH_AlgoSelection_SHA256) || \ - ((ALGOSELECTION) == HASH_AlgoSelection_MD5)) -/** - * @} - */ - -/** @defgroup HASH_processor_Algorithm_Mode - * @{ - */ -#define HASH_AlgoMode_HASH ((uint32_t)0x00000000) /*!< Algorithm is HASH */ -#define HASH_AlgoMode_HMAC HASH_CR_MODE /*!< Algorithm is HMAC */ - -#define IS_HASH_ALGOMODE(ALGOMODE) (((ALGOMODE) == HASH_AlgoMode_HASH) || \ - ((ALGOMODE) == HASH_AlgoMode_HMAC)) -/** - * @} - */ - -/** @defgroup HASH_Data_Type - * @{ - */ -#define HASH_DataType_32b ((uint32_t)0x0000) /*!< 32-bit data. No swapping */ -#define HASH_DataType_16b HASH_CR_DATATYPE_0 /*!< 16-bit data. Each half word is swapped */ -#define HASH_DataType_8b HASH_CR_DATATYPE_1 /*!< 8-bit data. All bytes are swapped */ -#define HASH_DataType_1b HASH_CR_DATATYPE /*!< 1-bit data. In the word all bits are swapped */ - -#define IS_HASH_DATATYPE(DATATYPE) (((DATATYPE) == HASH_DataType_32b)|| \ - ((DATATYPE) == HASH_DataType_16b)|| \ - ((DATATYPE) == HASH_DataType_8b) || \ - ((DATATYPE) == HASH_DataType_1b)) -/** - * @} - */ - -/** @defgroup HASH_HMAC_Long_key_only_for_HMAC_mode - * @{ - */ -#define HASH_HMACKeyType_ShortKey ((uint32_t)0x00000000) /*!< HMAC Key is <= 64 bytes */ -#define HASH_HMACKeyType_LongKey HASH_CR_LKEY /*!< HMAC Key is > 64 bytes */ - -#define IS_HASH_HMAC_KEYTYPE(KEYTYPE) (((KEYTYPE) == HASH_HMACKeyType_ShortKey) || \ - ((KEYTYPE) == HASH_HMACKeyType_LongKey)) -/** - * @} - */ - -/** @defgroup Number_of_valid_bits_in_last_word_of_the_message - * @{ - */ -#define IS_HASH_VALIDBITSNUMBER(VALIDBITS) ((VALIDBITS) <= 0x1F) - -/** - * @} - */ - -/** @defgroup HASH_interrupts_definition - * @{ - */ -#define HASH_IT_DINI HASH_IMR_DINIM /*!< A new block can be entered into the input buffer (DIN) */ -#define HASH_IT_DCI HASH_IMR_DCIM /*!< Digest calculation complete */ - -#define IS_HASH_IT(IT) ((((IT) & (uint32_t)0xFFFFFFFC) == 0x00000000) && ((IT) != 0x00000000)) -#define IS_HASH_GET_IT(IT) (((IT) == HASH_IT_DINI) || ((IT) == HASH_IT_DCI)) - -/** - * @} - */ - -/** @defgroup HASH_flags_definition - * @{ - */ -#define HASH_FLAG_DINIS HASH_SR_DINIS /*!< 16 locations are free in the DIN : A new block can be entered into the input buffer */ -#define HASH_FLAG_DCIS HASH_SR_DCIS /*!< Digest calculation complete */ -#define HASH_FLAG_DMAS HASH_SR_DMAS /*!< DMA interface is enabled (DMAE=1) or a transfer is ongoing */ -#define HASH_FLAG_BUSY HASH_SR_BUSY /*!< The hash core is Busy : processing a block of data */ -#define HASH_FLAG_DINNE HASH_CR_DINNE /*!< DIN not empty : The input buffer contains at least one word of data */ - -#define IS_HASH_GET_FLAG(FLAG) (((FLAG) == HASH_FLAG_DINIS) || \ - ((FLAG) == HASH_FLAG_DCIS) || \ - ((FLAG) == HASH_FLAG_DMAS) || \ - ((FLAG) == HASH_FLAG_BUSY) || \ - ((FLAG) == HASH_FLAG_DINNE)) - -#define IS_HASH_CLEAR_FLAG(FLAG)(((FLAG) == HASH_FLAG_DINIS) || \ - ((FLAG) == HASH_FLAG_DCIS)) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the HASH configuration to the default reset state ****/ -void HASH_DeInit(void); - -/* HASH Configuration function ************************************************/ -void HASH_Init(HASH_InitTypeDef* HASH_InitStruct); -void HASH_StructInit(HASH_InitTypeDef* HASH_InitStruct); -void HASH_Reset(void); - -/* HASH Message Digest generation functions ***********************************/ -void HASH_DataIn(uint32_t Data); -uint8_t HASH_GetInFIFOWordsNbr(void); -void HASH_SetLastWordValidBitsNbr(uint16_t ValidNumber); -void HASH_StartDigest(void); -void HASH_AutoStartDigest(FunctionalState NewState); -void HASH_GetDigest(HASH_MsgDigest* HASH_MessageDigest); - -/* HASH Context swapping functions ********************************************/ -void HASH_SaveContext(HASH_Context* HASH_ContextSave); -void HASH_RestoreContext(HASH_Context* HASH_ContextRestore); - -/* HASH DMA interface function ************************************************/ -void HASH_DMACmd(FunctionalState NewState); - -/* HASH Interrupts and flags management functions *****************************/ -void HASH_ITConfig(uint32_t HASH_IT, FunctionalState NewState); -FlagStatus HASH_GetFlagStatus(uint32_t HASH_FLAG); -void HASH_ClearFlag(uint32_t HASH_FLAG); -ITStatus HASH_GetITStatus(uint32_t HASH_IT); -void HASH_ClearITPendingBit(uint32_t HASH_IT); - -/* High Level SHA1 functions **************************************************/ -ErrorStatus HASH_SHA1(uint8_t *Input, uint32_t Ilen, uint8_t Output[20]); -ErrorStatus HMAC_SHA1(uint8_t *Key, uint32_t Keylen, - uint8_t *Input, uint32_t Ilen, - uint8_t Output[20]); - -/* High Level MD5 functions ***************************************************/ -ErrorStatus HASH_MD5(uint8_t *Input, uint32_t Ilen, uint8_t Output[16]); -ErrorStatus HMAC_MD5(uint8_t *Key, uint32_t Keylen, - uint8_t *Input, uint32_t Ilen, - uint8_t Output[16]); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_HASH_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h deleted file mode 100644 index 26f836d7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h +++ /dev/null @@ -1,711 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_i2c.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the I2C firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_I2C_H -#define __STM32F4xx_I2C_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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; - -/* Exported constants --------------------------------------------------------*/ - - -/** @defgroup I2C_Exported_Constants - * @{ - */ - -#define IS_I2C_ALL_PERIPH(PERIPH) (((PERIPH) == I2C1) || \ - ((PERIPH) == I2C2) || \ - ((PERIPH) == I2C3)) - -/** @defgroup I2C_Digital_Filter - * @{ - */ - -#define IS_I2C_DIGITAL_FILTER(FILTER) ((FILTER) <= 0x0000000F) -/** - * @} - */ - - -/** @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_NACK_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_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_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)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the I2C configuration to the default reset state *****/ -void I2C_DeInit(I2C_TypeDef* I2Cx); - -/* Initialization and Configuration functions *********************************/ -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_DigitalFilterConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DigitalFilter); -void I2C_AnalogFilterCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction); -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_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle); -void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition); -void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert); -void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); - -/* Data transfers functions ***************************************************/ -void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data); -uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx); - -/* PEC management functions ***************************************************/ -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); - -/* DMA transfers management functions *****************************************/ -void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); - -/* Interrupts, events and flags management functions **************************/ -uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register); -void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState); - -/* - =============================================================================== - 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 (RM0090). - - 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 the - I2Cx_ER_IRQHandler() function 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()) - -------------------------------------------------------------------- - 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 - this file 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()) - ----------------------------------------------------------------------- - - 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 /*__STM32F4xx_I2C_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_iwdg.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_iwdg.h deleted file mode 100644 index e0e69661..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_iwdg.h +++ /dev/null @@ -1,131 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_iwdg.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the IWDG - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_IWDG_H -#define __STM32F4xx_IWDG_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup IWDG - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @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) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Prescaler and Counter configuration 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); - -/* IWDG activation function ***************************************************/ -void IWDG_Enable(void); - -/* Flag management function ***************************************************/ -FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_IWDG_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_pwr.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_pwr.h deleted file mode 100644 index 0212501f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_pwr.h +++ /dev/null @@ -1,188 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_pwr.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the PWR firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_PWR_H -#define __STM32F4xx_PWR_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup PWR - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup PWR_Exported_Constants - * @{ - */ - -/** @defgroup PWR_PVD_detection_level - * @{ - */ - -#define PWR_PVDLevel_0 PWR_CR_PLS_LEV0 -#define PWR_PVDLevel_1 PWR_CR_PLS_LEV1 -#define PWR_PVDLevel_2 PWR_CR_PLS_LEV2 -#define PWR_PVDLevel_3 PWR_CR_PLS_LEV3 -#define PWR_PVDLevel_4 PWR_CR_PLS_LEV4 -#define PWR_PVDLevel_5 PWR_CR_PLS_LEV5 -#define PWR_PVDLevel_6 PWR_CR_PLS_LEV6 -#define PWR_PVDLevel_7 PWR_CR_PLS_LEV7 - -#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLevel_0) || ((LEVEL) == PWR_PVDLevel_1)|| \ - ((LEVEL) == PWR_PVDLevel_2) || ((LEVEL) == PWR_PVDLevel_3)|| \ - ((LEVEL) == PWR_PVDLevel_4) || ((LEVEL) == PWR_PVDLevel_5)|| \ - ((LEVEL) == PWR_PVDLevel_6) || ((LEVEL) == PWR_PVDLevel_7)) -/** - * @} - */ - - -/** @defgroup PWR_Regulator_state_in_STOP_mode - * @{ - */ - -#define PWR_Regulator_ON ((uint32_t)0x00000000) -#define PWR_Regulator_LowPower PWR_CR_LPDS -#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_Regulator_ON) || \ - ((REGULATOR) == PWR_Regulator_LowPower)) -/** - * @} - */ - -/** @defgroup PWR_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_Regulator_Voltage_Scale - * @{ - */ - -#define PWR_Regulator_Voltage_Scale1 ((uint32_t)0x0000C000) -#define PWR_Regulator_Voltage_Scale2 ((uint32_t)0x00008000) -#define PWR_Regulator_Voltage_Scale3 ((uint32_t)0x00004000) -#define IS_PWR_REGULATOR_VOLTAGE(VOLTAGE) (((VOLTAGE) == PWR_Regulator_Voltage_Scale1) || \ - ((VOLTAGE) == PWR_Regulator_Voltage_Scale2) || \ - ((VOLTAGE) == PWR_Regulator_Voltage_Scale3)) - -/** - * @} - */ - -/** @defgroup PWR_Flag - * @{ - */ - -#define PWR_FLAG_WU PWR_CSR_WUF -#define PWR_FLAG_SB PWR_CSR_SBF -#define PWR_FLAG_PVDO PWR_CSR_PVDO -#define PWR_FLAG_BRR PWR_CSR_BRR -#define PWR_FLAG_VOSRDY PWR_CSR_VOSRDY - -/** @defgroup PWR_Flag_Legacy - * @{ - */ -#define PWR_FLAG_REGRDY PWR_FLAG_VOSRDY -/** - * @} - */ - -#define IS_PWR_GET_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB) || \ - ((FLAG) == PWR_FLAG_PVDO) || ((FLAG) == PWR_FLAG_BRR) || \ - ((FLAG) == PWR_FLAG_VOSRDY)) - -#define IS_PWR_CLEAR_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the PWR configuration to the default reset state ******/ -void PWR_DeInit(void); - -/* Backup Domain Access function **********************************************/ -void PWR_BackupAccessCmd(FunctionalState NewState); - -/* PVD configuration functions ************************************************/ -void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); -void PWR_PVDCmd(FunctionalState NewState); - -/* WakeUp pins configuration functions ****************************************/ -void PWR_WakeUpPinCmd(FunctionalState NewState); - -/* Main and Backup Regulators configuration functions *************************/ -void PWR_BackupRegulatorCmd(FunctionalState NewState); -void PWR_MainRegulatorModeConfig(uint32_t PWR_Regulator_Voltage); - -/* FLASH Power Down configuration functions ***********************************/ -void PWR_FlashPowerDownCmd(FunctionalState NewState); - -/* Low Power modes configuration functions ************************************/ -void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); -void PWR_EnterSTANDBYMode(void); - -/* Flags management functions *************************************************/ -FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); -void PWR_ClearFlag(uint32_t PWR_FLAG); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_PWR_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h deleted file mode 100644 index 0cbeab2f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h +++ /dev/null @@ -1,545 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rcc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the RCC firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_RCC_H -#define __STM32F4xx_RCC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup RCC - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -typedef struct -{ - uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency expressed in Hz */ - uint32_t HCLK_Frequency; /*!< HCLK clock frequency expressed in Hz */ - uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency expressed in Hz */ - uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency expressed in Hz */ -}RCC_ClocksTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup RCC_Exported_Constants - * @{ - */ - -/** @defgroup RCC_HSE_configuration - * @{ - */ -#define RCC_HSE_OFF ((uint8_t)0x00) -#define RCC_HSE_ON ((uint8_t)0x01) -#define RCC_HSE_Bypass ((uint8_t)0x05) -#define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \ - ((HSE) == RCC_HSE_Bypass)) -/** - * @} - */ - -/** @defgroup RCC_PLL_Clock_Source - * @{ - */ -#define RCC_PLLSource_HSI ((uint32_t)0x00000000) -#define RCC_PLLSource_HSE ((uint32_t)0x00400000) -#define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI) || \ - ((SOURCE) == RCC_PLLSource_HSE)) -#define IS_RCC_PLLM_VALUE(VALUE) ((VALUE) <= 63) -#define IS_RCC_PLLN_VALUE(VALUE) ((192 <= (VALUE)) && ((VALUE) <= 432)) -#define IS_RCC_PLLP_VALUE(VALUE) (((VALUE) == 2) || ((VALUE) == 4) || ((VALUE) == 6) || ((VALUE) == 8)) -#define IS_RCC_PLLQ_VALUE(VALUE) ((4 <= (VALUE)) && ((VALUE) <= 15)) - -#define IS_RCC_PLLI2SN_VALUE(VALUE) ((192 <= (VALUE)) && ((VALUE) <= 432)) -#define IS_RCC_PLLI2SR_VALUE(VALUE) ((2 <= (VALUE)) && ((VALUE) <= 7)) - -/** - * @} - */ - -/** @defgroup RCC_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 RCC_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 RCC_APB1_APB2_Clock_Source - * @{ - */ -#define RCC_HCLK_Div1 ((uint32_t)0x00000000) -#define RCC_HCLK_Div2 ((uint32_t)0x00001000) -#define RCC_HCLK_Div4 ((uint32_t)0x00001400) -#define RCC_HCLK_Div8 ((uint32_t)0x00001800) -#define RCC_HCLK_Div16 ((uint32_t)0x00001C00) -#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_PLLI2SRDY ((uint8_t)0x20) -#define RCC_IT_CSS ((uint8_t)0x80) - -#define IS_RCC_IT(IT) ((((IT) & (uint8_t)0xC0) == 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_PLLI2SRDY)) -#define IS_RCC_CLEAR_IT(IT) ((((IT) & (uint8_t)0x40) == 0x00) && ((IT) != 0x00)) - -/** - * @} - */ - -/** @defgroup RCC_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 RCC_RTC_Clock_Source - * @{ - */ -#define RCC_RTCCLKSource_LSE ((uint32_t)0x00000100) -#define RCC_RTCCLKSource_LSI ((uint32_t)0x00000200) -#define RCC_RTCCLKSource_HSE_Div2 ((uint32_t)0x00020300) -#define RCC_RTCCLKSource_HSE_Div3 ((uint32_t)0x00030300) -#define RCC_RTCCLKSource_HSE_Div4 ((uint32_t)0x00040300) -#define RCC_RTCCLKSource_HSE_Div5 ((uint32_t)0x00050300) -#define RCC_RTCCLKSource_HSE_Div6 ((uint32_t)0x00060300) -#define RCC_RTCCLKSource_HSE_Div7 ((uint32_t)0x00070300) -#define RCC_RTCCLKSource_HSE_Div8 ((uint32_t)0x00080300) -#define RCC_RTCCLKSource_HSE_Div9 ((uint32_t)0x00090300) -#define RCC_RTCCLKSource_HSE_Div10 ((uint32_t)0x000A0300) -#define RCC_RTCCLKSource_HSE_Div11 ((uint32_t)0x000B0300) -#define RCC_RTCCLKSource_HSE_Div12 ((uint32_t)0x000C0300) -#define RCC_RTCCLKSource_HSE_Div13 ((uint32_t)0x000D0300) -#define RCC_RTCCLKSource_HSE_Div14 ((uint32_t)0x000E0300) -#define RCC_RTCCLKSource_HSE_Div15 ((uint32_t)0x000F0300) -#define RCC_RTCCLKSource_HSE_Div16 ((uint32_t)0x00100300) -#define RCC_RTCCLKSource_HSE_Div17 ((uint32_t)0x00110300) -#define RCC_RTCCLKSource_HSE_Div18 ((uint32_t)0x00120300) -#define RCC_RTCCLKSource_HSE_Div19 ((uint32_t)0x00130300) -#define RCC_RTCCLKSource_HSE_Div20 ((uint32_t)0x00140300) -#define RCC_RTCCLKSource_HSE_Div21 ((uint32_t)0x00150300) -#define RCC_RTCCLKSource_HSE_Div22 ((uint32_t)0x00160300) -#define RCC_RTCCLKSource_HSE_Div23 ((uint32_t)0x00170300) -#define RCC_RTCCLKSource_HSE_Div24 ((uint32_t)0x00180300) -#define RCC_RTCCLKSource_HSE_Div25 ((uint32_t)0x00190300) -#define RCC_RTCCLKSource_HSE_Div26 ((uint32_t)0x001A0300) -#define RCC_RTCCLKSource_HSE_Div27 ((uint32_t)0x001B0300) -#define RCC_RTCCLKSource_HSE_Div28 ((uint32_t)0x001C0300) -#define RCC_RTCCLKSource_HSE_Div29 ((uint32_t)0x001D0300) -#define RCC_RTCCLKSource_HSE_Div30 ((uint32_t)0x001E0300) -#define RCC_RTCCLKSource_HSE_Div31 ((uint32_t)0x001F0300) -#define IS_RCC_RTCCLK_SOURCE(SOURCE) (((SOURCE) == RCC_RTCCLKSource_LSE) || \ - ((SOURCE) == RCC_RTCCLKSource_LSI) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div2) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div3) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div4) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div5) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div6) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div7) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div8) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div9) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div10) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div11) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div12) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div13) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div14) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div15) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div16) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div17) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div18) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div19) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div20) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div21) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div22) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div23) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div24) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div25) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div26) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div27) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div28) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div29) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div30) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div31)) -/** - * @} - */ - -/** @defgroup RCC_I2S_Clock_Source - * @{ - */ -#define RCC_I2S2CLKSource_PLLI2S ((uint8_t)0x00) -#define RCC_I2S2CLKSource_Ext ((uint8_t)0x01) - -#define IS_RCC_I2SCLK_SOURCE(SOURCE) (((SOURCE) == RCC_I2S2CLKSource_PLLI2S) || ((SOURCE) == RCC_I2S2CLKSource_Ext)) -/** - * @} - */ - -/** @defgroup RCC_TIM_PRescaler_Selection - * @{ - */ -#define RCC_TIMPrescDesactivated ((uint8_t)0x00) -#define RCC_TIMPrescActivated ((uint8_t)0x01) - -#define IS_RCC_TIMCLK_PRESCALER(VALUE) (((VALUE) == RCC_TIMPrescDesactivated) || ((VALUE) == RCC_TIMPrescActivated)) -/** - * @} - */ - -/** @defgroup RCC_AHB1_Peripherals - * @{ - */ -#define RCC_AHB1Periph_GPIOA ((uint32_t)0x00000001) -#define RCC_AHB1Periph_GPIOB ((uint32_t)0x00000002) -#define RCC_AHB1Periph_GPIOC ((uint32_t)0x00000004) -#define RCC_AHB1Periph_GPIOD ((uint32_t)0x00000008) -#define RCC_AHB1Periph_GPIOE ((uint32_t)0x00000010) -#define RCC_AHB1Periph_GPIOF ((uint32_t)0x00000020) -#define RCC_AHB1Periph_GPIOG ((uint32_t)0x00000040) -#define RCC_AHB1Periph_GPIOH ((uint32_t)0x00000080) -#define RCC_AHB1Periph_GPIOI ((uint32_t)0x00000100) -#define RCC_AHB1Periph_CRC ((uint32_t)0x00001000) -#define RCC_AHB1Periph_FLITF ((uint32_t)0x00008000) -#define RCC_AHB1Periph_SRAM1 ((uint32_t)0x00010000) -#define RCC_AHB1Periph_SRAM2 ((uint32_t)0x00020000) -#define RCC_AHB1Periph_BKPSRAM ((uint32_t)0x00040000) -#define RCC_AHB1Periph_SRAM3 ((uint32_t)0x00080000) -#define RCC_AHB1Periph_CCMDATARAMEN ((uint32_t)0x00100000) -#define RCC_AHB1Periph_DMA1 ((uint32_t)0x00200000) -#define RCC_AHB1Periph_DMA2 ((uint32_t)0x00400000) -#define RCC_AHB1Periph_ETH_MAC ((uint32_t)0x02000000) -#define RCC_AHB1Periph_ETH_MAC_Tx ((uint32_t)0x04000000) -#define RCC_AHB1Periph_ETH_MAC_Rx ((uint32_t)0x08000000) -#define RCC_AHB1Periph_ETH_MAC_PTP ((uint32_t)0x10000000) -#define RCC_AHB1Periph_OTG_HS ((uint32_t)0x20000000) -#define RCC_AHB1Periph_OTG_HS_ULPI ((uint32_t)0x40000000) - -#define IS_RCC_AHB1_CLOCK_PERIPH(PERIPH) ((((PERIPH) & 0x818BEE00) == 0x00) && ((PERIPH) != 0x00)) -#define IS_RCC_AHB1_RESET_PERIPH(PERIPH) ((((PERIPH) & 0xDD9FEE00) == 0x00) && ((PERIPH) != 0x00)) -#define IS_RCC_AHB1_LPMODE_PERIPH(PERIPH) ((((PERIPH) & 0x81906E00) == 0x00) && ((PERIPH) != 0x00)) - - -/** - * @} - */ - -/** @defgroup RCC_AHB2_Peripherals - * @{ - */ -#define RCC_AHB2Periph_DCMI ((uint32_t)0x00000001) -#define RCC_AHB2Periph_CRYP ((uint32_t)0x00000010) -#define RCC_AHB2Periph_HASH ((uint32_t)0x00000020) -#define RCC_AHB2Periph_RNG ((uint32_t)0x00000040) -#define RCC_AHB2Periph_OTG_FS ((uint32_t)0x00000080) -#define IS_RCC_AHB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFF0E) == 0x00) && ((PERIPH) != 0x00)) -/** - * @} - */ - -/** @defgroup RCC_AHB3_Peripherals - * @{ - */ -#define RCC_AHB3Periph_FSMC ((uint32_t)0x00000001) - -#define IS_RCC_AHB3_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFFFE) == 0x00) && ((PERIPH) != 0x00)) -/** - * @} - */ - -/** @defgroup RCC_APB1_Peripherals - * @{ - */ -#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_I2C3 ((uint32_t)0x00800000) -#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000) -#define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000) -#define RCC_APB1Periph_PWR ((uint32_t)0x10000000) -#define RCC_APB1Periph_DAC ((uint32_t)0x20000000) -#define RCC_APB1Periph_UART7 ((uint32_t)0x40000000) -#define RCC_APB1Periph_UART8 ((uint32_t)0x80000000) -#define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x09013600) == 0x00) && ((PERIPH) != 0x00)) -/** - * @} - */ - -/** @defgroup RCC_APB2_Peripherals - * @{ - */ -#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000001) -#define RCC_APB2Periph_TIM8 ((uint32_t)0x00000002) -#define RCC_APB2Periph_USART1 ((uint32_t)0x00000010) -#define RCC_APB2Periph_USART6 ((uint32_t)0x00000020) -#define RCC_APB2Periph_ADC ((uint32_t)0x00000100) -#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000100) -#define RCC_APB2Periph_ADC2 ((uint32_t)0x00000200) -#define RCC_APB2Periph_ADC3 ((uint32_t)0x00000400) -#define RCC_APB2Periph_SDIO ((uint32_t)0x00000800) -#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000) -#define RCC_APB2Periph_SPI4 ((uint32_t)0x00002000) -#define RCC_APB2Periph_SYSCFG ((uint32_t)0x00004000) -#define RCC_APB2Periph_TIM9 ((uint32_t)0x00010000) -#define RCC_APB2Periph_TIM10 ((uint32_t)0x00020000) -#define RCC_APB2Periph_TIM11 ((uint32_t)0x00040000) -#define RCC_APB2Periph_SPI5 ((uint32_t)0x00100000) -#define RCC_APB2Periph_SPI6 ((uint32_t)0x00200000) - -#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC880CC) == 0x00) && ((PERIPH) != 0x00)) -#define IS_RCC_APB2_RESET_PERIPH(PERIPH) ((((PERIPH) & 0xFFC886CC) == 0x00) && ((PERIPH) != 0x00)) - - -/** - * @} - */ - -/** @defgroup RCC_MCO1_Clock_Source_Prescaler - * @{ - */ -#define RCC_MCO1Source_HSI ((uint32_t)0x00000000) -#define RCC_MCO1Source_LSE ((uint32_t)0x00200000) -#define RCC_MCO1Source_HSE ((uint32_t)0x00400000) -#define RCC_MCO1Source_PLLCLK ((uint32_t)0x00600000) -#define RCC_MCO1Div_1 ((uint32_t)0x00000000) -#define RCC_MCO1Div_2 ((uint32_t)0x04000000) -#define RCC_MCO1Div_3 ((uint32_t)0x05000000) -#define RCC_MCO1Div_4 ((uint32_t)0x06000000) -#define RCC_MCO1Div_5 ((uint32_t)0x07000000) -#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1Source_HSI) || ((SOURCE) == RCC_MCO1Source_LSE) || \ - ((SOURCE) == RCC_MCO1Source_HSE) || ((SOURCE) == RCC_MCO1Source_PLLCLK)) - -#define IS_RCC_MCO1DIV(DIV) (((DIV) == RCC_MCO1Div_1) || ((DIV) == RCC_MCO1Div_2) || \ - ((DIV) == RCC_MCO1Div_3) || ((DIV) == RCC_MCO1Div_4) || \ - ((DIV) == RCC_MCO1Div_5)) -/** - * @} - */ - -/** @defgroup RCC_MCO2_Clock_Source_Prescaler - * @{ - */ -#define RCC_MCO2Source_SYSCLK ((uint32_t)0x00000000) -#define RCC_MCO2Source_PLLI2SCLK ((uint32_t)0x40000000) -#define RCC_MCO2Source_HSE ((uint32_t)0x80000000) -#define RCC_MCO2Source_PLLCLK ((uint32_t)0xC0000000) -#define RCC_MCO2Div_1 ((uint32_t)0x00000000) -#define RCC_MCO2Div_2 ((uint32_t)0x20000000) -#define RCC_MCO2Div_3 ((uint32_t)0x28000000) -#define RCC_MCO2Div_4 ((uint32_t)0x30000000) -#define RCC_MCO2Div_5 ((uint32_t)0x38000000) -#define IS_RCC_MCO2SOURCE(SOURCE) (((SOURCE) == RCC_MCO2Source_SYSCLK) || ((SOURCE) == RCC_MCO2Source_PLLI2SCLK)|| \ - ((SOURCE) == RCC_MCO2Source_HSE) || ((SOURCE) == RCC_MCO2Source_PLLCLK)) - -#define IS_RCC_MCO2DIV(DIV) (((DIV) == RCC_MCO2Div_1) || ((DIV) == RCC_MCO2Div_2) || \ - ((DIV) == RCC_MCO2Div_3) || ((DIV) == RCC_MCO2Div_4) || \ - ((DIV) == RCC_MCO2Div_5)) -/** - * @} - */ - -/** @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_PLLI2SRDY ((uint8_t)0x3B) -#define RCC_FLAG_LSERDY ((uint8_t)0x41) -#define RCC_FLAG_LSIRDY ((uint8_t)0x61) -#define RCC_FLAG_BORRST ((uint8_t)0x79) -#define RCC_FLAG_PINRST ((uint8_t)0x7A) -#define RCC_FLAG_PORRST ((uint8_t)0x7B) -#define RCC_FLAG_SFTRST ((uint8_t)0x7C) -#define RCC_FLAG_IWDGRST ((uint8_t)0x7D) -#define RCC_FLAG_WWDGRST ((uint8_t)0x7E) -#define RCC_FLAG_LPWRRST ((uint8_t)0x7F) - -#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_BORRST) || \ - ((FLAG) == RCC_FLAG_PINRST) || ((FLAG) == RCC_FLAG_PORRST) || \ - ((FLAG) == RCC_FLAG_SFTRST) || ((FLAG) == RCC_FLAG_IWDGRST)|| \ - ((FLAG) == RCC_FLAG_WWDGRST)|| ((FLAG) == RCC_FLAG_LPWRRST)|| \ - ((FLAG) == RCC_FLAG_PLLI2SRDY)) - -#define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1F) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the RCC clock configuration to the default reset state */ -void RCC_DeInit(void); - -/* Internal/external clocks, PLL, CSS and MCO configuration functions *********/ -void RCC_HSEConfig(uint8_t RCC_HSE); -ErrorStatus RCC_WaitForHSEStartUp(void); -void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue); -void RCC_HSICmd(FunctionalState NewState); -void RCC_LSEConfig(uint8_t RCC_LSE); -void RCC_LSICmd(FunctionalState NewState); - -void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ); -void RCC_PLLCmd(FunctionalState NewState); -void RCC_PLLI2SConfig(uint32_t PLLI2SN, uint32_t PLLI2SR); -void RCC_PLLI2SCmd(FunctionalState NewState); -void RCC_ClockSecuritySystemCmd(FunctionalState NewState); -void RCC_MCO1Config(uint32_t RCC_MCO1Source, uint32_t RCC_MCO1Div); -void RCC_MCO2Config(uint32_t RCC_MCO2Source, uint32_t RCC_MCO2Div); - -/* System, AHB and APB busses clocks configuration functions ******************/ -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_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks); - -/* Peripheral clocks configuration functions **********************************/ -void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource); -void RCC_RTCCLKCmd(FunctionalState NewState); -void RCC_BackupResetCmd(FunctionalState NewState); -void RCC_I2SCLKConfig(uint32_t RCC_I2SCLKSource); -void RCC_TIMCLKPresConfig(uint32_t RCC_TIMCLKPrescaler); - -void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState); -void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState); -void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState); -void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); - -void RCC_AHB1PeriphResetCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState); -void RCC_AHB2PeriphResetCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState); -void RCC_AHB3PeriphResetCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState); -void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); - -void RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState); -void RCC_AHB2PeriphClockLPModeCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState); -void RCC_AHB3PeriphClockLPModeCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState); -void RCC_APB1PeriphClockLPModeCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_APB2PeriphClockLPModeCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState); -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 /* __STM32F4xx_RCC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rng.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rng.h deleted file mode 100644 index 6de413c8..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rng.h +++ /dev/null @@ -1,120 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rng.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the Random - * Number Generator(RNG) firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_RNG_H -#define __STM32F4xx_RNG_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup RNG - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup RNG_Exported_Constants - * @{ - */ - -/** @defgroup RNG_flags_definition - * @{ - */ -#define RNG_FLAG_DRDY ((uint8_t)0x0001) /*!< Data ready */ -#define RNG_FLAG_CECS ((uint8_t)0x0002) /*!< Clock error current status */ -#define RNG_FLAG_SECS ((uint8_t)0x0004) /*!< Seed error current status */ - -#define IS_RNG_GET_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_DRDY) || \ - ((RNG_FLAG) == RNG_FLAG_CECS) || \ - ((RNG_FLAG) == RNG_FLAG_SECS)) -#define IS_RNG_CLEAR_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_CECS) || \ - ((RNG_FLAG) == RNG_FLAG_SECS)) -/** - * @} - */ - -/** @defgroup RNG_interrupts_definition - * @{ - */ -#define RNG_IT_CEI ((uint8_t)0x20) /*!< Clock error interrupt */ -#define RNG_IT_SEI ((uint8_t)0x40) /*!< Seed error interrupt */ - -#define IS_RNG_IT(IT) ((((IT) & (uint8_t)0x9F) == 0x00) && ((IT) != 0x00)) -#define IS_RNG_GET_IT(RNG_IT) (((RNG_IT) == RNG_IT_CEI) || ((RNG_IT) == RNG_IT_SEI)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the RNG configuration to the default reset state *****/ -void RNG_DeInit(void); - -/* Configuration function *****************************************************/ -void RNG_Cmd(FunctionalState NewState); - -/* Get 32 bit Random number function ******************************************/ -uint32_t RNG_GetRandomNumber(void); - -/* Interrupts and flags management functions **********************************/ -void RNG_ITConfig(FunctionalState NewState); -FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG); -void RNG_ClearFlag(uint8_t RNG_FLAG); -ITStatus RNG_GetITStatus(uint8_t RNG_IT); -void RNG_ClearITPendingBit(uint8_t RNG_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_RNG_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rtc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rtc.h deleted file mode 100644 index 51e2cfd6..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rtc.h +++ /dev/null @@ -1,881 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rtc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the RTC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_RTC_H -#define __STM32F4xx_RTC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup RTC - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief RTC Init structures definition - */ -typedef struct -{ - uint32_t RTC_HourFormat; /*!< Specifies the RTC Hour Format. - This parameter can be a value of @ref RTC_Hour_Formats */ - - uint32_t RTC_AsynchPrediv; /*!< Specifies the RTC Asynchronous Predivider value. - This parameter must be set to a value lower than 0x7F */ - - uint32_t RTC_SynchPrediv; /*!< Specifies the RTC Synchronous Predivider value. - This parameter must be set to a value lower than 0x7FFF */ -}RTC_InitTypeDef; - -/** - * @brief RTC Time structure definition - */ -typedef struct -{ - uint8_t RTC_Hours; /*!< Specifies the RTC Time Hour. - This parameter must be set to a value in the 0-12 range - if the RTC_HourFormat_12 is selected or 0-23 range if - the RTC_HourFormat_24 is selected. */ - - uint8_t RTC_Minutes; /*!< Specifies the RTC Time Minutes. - This parameter must be set to a value in the 0-59 range. */ - - uint8_t RTC_Seconds; /*!< Specifies the RTC Time Seconds. - This parameter must be set to a value in the 0-59 range. */ - - uint8_t RTC_H12; /*!< Specifies the RTC AM/PM Time. - This parameter can be a value of @ref RTC_AM_PM_Definitions */ -}RTC_TimeTypeDef; - -/** - * @brief RTC Date structure definition - */ -typedef struct -{ - uint8_t RTC_WeekDay; /*!< Specifies the RTC Date WeekDay. - This parameter can be a value of @ref RTC_WeekDay_Definitions */ - - uint8_t RTC_Month; /*!< Specifies the RTC Date Month (in BCD format). - This parameter can be a value of @ref RTC_Month_Date_Definitions */ - - uint8_t RTC_Date; /*!< Specifies the RTC Date. - This parameter must be set to a value in the 1-31 range. */ - - uint8_t RTC_Year; /*!< Specifies the RTC Date Year. - This parameter must be set to a value in the 0-99 range. */ -}RTC_DateTypeDef; - -/** - * @brief RTC Alarm structure definition - */ -typedef struct -{ - RTC_TimeTypeDef RTC_AlarmTime; /*!< Specifies the RTC Alarm Time members. */ - - uint32_t RTC_AlarmMask; /*!< Specifies the RTC Alarm Masks. - This parameter can be a value of @ref RTC_AlarmMask_Definitions */ - - uint32_t RTC_AlarmDateWeekDaySel; /*!< Specifies the RTC Alarm is on Date or WeekDay. - This parameter can be a value of @ref RTC_AlarmDateWeekDay_Definitions */ - - uint8_t RTC_AlarmDateWeekDay; /*!< Specifies the RTC Alarm Date/WeekDay. - If the Alarm Date is selected, this parameter - must be set to a value in the 1-31 range. - If the Alarm WeekDay is selected, this - parameter can be a value of @ref RTC_WeekDay_Definitions */ -}RTC_AlarmTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup RTC_Exported_Constants - * @{ - */ - - -/** @defgroup RTC_Hour_Formats - * @{ - */ -#define RTC_HourFormat_24 ((uint32_t)0x00000000) -#define RTC_HourFormat_12 ((uint32_t)0x00000040) -#define IS_RTC_HOUR_FORMAT(FORMAT) (((FORMAT) == RTC_HourFormat_12) || \ - ((FORMAT) == RTC_HourFormat_24)) -/** - * @} - */ - -/** @defgroup RTC_Asynchronous_Predivider - * @{ - */ -#define IS_RTC_ASYNCH_PREDIV(PREDIV) ((PREDIV) <= 0x7F) - -/** - * @} - */ - - -/** @defgroup RTC_Synchronous_Predivider - * @{ - */ -#define IS_RTC_SYNCH_PREDIV(PREDIV) ((PREDIV) <= 0x7FFF) - -/** - * @} - */ - -/** @defgroup RTC_Time_Definitions - * @{ - */ -#define IS_RTC_HOUR12(HOUR) (((HOUR) > 0) && ((HOUR) <= 12)) -#define IS_RTC_HOUR24(HOUR) ((HOUR) <= 23) -#define IS_RTC_MINUTES(MINUTES) ((MINUTES) <= 59) -#define IS_RTC_SECONDS(SECONDS) ((SECONDS) <= 59) - -/** - * @} - */ - -/** @defgroup RTC_AM_PM_Definitions - * @{ - */ -#define RTC_H12_AM ((uint8_t)0x00) -#define RTC_H12_PM ((uint8_t)0x40) -#define IS_RTC_H12(PM) (((PM) == RTC_H12_AM) || ((PM) == RTC_H12_PM)) - -/** - * @} - */ - -/** @defgroup RTC_Year_Date_Definitions - * @{ - */ -#define IS_RTC_YEAR(YEAR) ((YEAR) <= 99) - -/** - * @} - */ - -/** @defgroup RTC_Month_Date_Definitions - * @{ - */ - -/* Coded in BCD format */ -#define RTC_Month_January ((uint8_t)0x01) -#define RTC_Month_February ((uint8_t)0x02) -#define RTC_Month_March ((uint8_t)0x03) -#define RTC_Month_April ((uint8_t)0x04) -#define RTC_Month_May ((uint8_t)0x05) -#define RTC_Month_June ((uint8_t)0x06) -#define RTC_Month_July ((uint8_t)0x07) -#define RTC_Month_August ((uint8_t)0x08) -#define RTC_Month_September ((uint8_t)0x09) -#define RTC_Month_October ((uint8_t)0x10) -#define RTC_Month_November ((uint8_t)0x11) -#define RTC_Month_December ((uint8_t)0x12) -#define IS_RTC_MONTH(MONTH) (((MONTH) >= 1) && ((MONTH) <= 12)) -#define IS_RTC_DATE(DATE) (((DATE) >= 1) && ((DATE) <= 31)) - -/** - * @} - */ - -/** @defgroup RTC_WeekDay_Definitions - * @{ - */ - -#define RTC_Weekday_Monday ((uint8_t)0x01) -#define RTC_Weekday_Tuesday ((uint8_t)0x02) -#define RTC_Weekday_Wednesday ((uint8_t)0x03) -#define RTC_Weekday_Thursday ((uint8_t)0x04) -#define RTC_Weekday_Friday ((uint8_t)0x05) -#define RTC_Weekday_Saturday ((uint8_t)0x06) -#define RTC_Weekday_Sunday ((uint8_t)0x07) -#define IS_RTC_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_Weekday_Monday) || \ - ((WEEKDAY) == RTC_Weekday_Tuesday) || \ - ((WEEKDAY) == RTC_Weekday_Wednesday) || \ - ((WEEKDAY) == RTC_Weekday_Thursday) || \ - ((WEEKDAY) == RTC_Weekday_Friday) || \ - ((WEEKDAY) == RTC_Weekday_Saturday) || \ - ((WEEKDAY) == RTC_Weekday_Sunday)) -/** - * @} - */ - - -/** @defgroup RTC_Alarm_Definitions - * @{ - */ -#define IS_RTC_ALARM_DATE_WEEKDAY_DATE(DATE) (((DATE) > 0) && ((DATE) <= 31)) -#define IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_Weekday_Monday) || \ - ((WEEKDAY) == RTC_Weekday_Tuesday) || \ - ((WEEKDAY) == RTC_Weekday_Wednesday) || \ - ((WEEKDAY) == RTC_Weekday_Thursday) || \ - ((WEEKDAY) == RTC_Weekday_Friday) || \ - ((WEEKDAY) == RTC_Weekday_Saturday) || \ - ((WEEKDAY) == RTC_Weekday_Sunday)) - -/** - * @} - */ - - -/** @defgroup RTC_AlarmDateWeekDay_Definitions - * @{ - */ -#define RTC_AlarmDateWeekDaySel_Date ((uint32_t)0x00000000) -#define RTC_AlarmDateWeekDaySel_WeekDay ((uint32_t)0x40000000) - -#define IS_RTC_ALARM_DATE_WEEKDAY_SEL(SEL) (((SEL) == RTC_AlarmDateWeekDaySel_Date) || \ - ((SEL) == RTC_AlarmDateWeekDaySel_WeekDay)) - -/** - * @} - */ - - -/** @defgroup RTC_AlarmMask_Definitions - * @{ - */ -#define RTC_AlarmMask_None ((uint32_t)0x00000000) -#define RTC_AlarmMask_DateWeekDay ((uint32_t)0x80000000) -#define RTC_AlarmMask_Hours ((uint32_t)0x00800000) -#define RTC_AlarmMask_Minutes ((uint32_t)0x00008000) -#define RTC_AlarmMask_Seconds ((uint32_t)0x00000080) -#define RTC_AlarmMask_All ((uint32_t)0x80808080) -#define IS_ALARM_MASK(MASK) (((MASK) & 0x7F7F7F7F) == (uint32_t)RESET) - -/** - * @} - */ - -/** @defgroup RTC_Alarms_Definitions - * @{ - */ -#define RTC_Alarm_A ((uint32_t)0x00000100) -#define RTC_Alarm_B ((uint32_t)0x00000200) -#define IS_RTC_ALARM(ALARM) (((ALARM) == RTC_Alarm_A) || ((ALARM) == RTC_Alarm_B)) -#define IS_RTC_CMD_ALARM(ALARM) (((ALARM) & (RTC_Alarm_A | RTC_Alarm_B)) != (uint32_t)RESET) - -/** - * @} - */ - - /** @defgroup RTC_Alarm_Sub_Seconds_Masks_Definitions - * @{ - */ -#define RTC_AlarmSubSecondMask_All ((uint32_t)0x00000000) /*!< All Alarm SS fields are masked. - There is no comparison on sub seconds - for Alarm */ -#define RTC_AlarmSubSecondMask_SS14_1 ((uint32_t)0x01000000) /*!< SS[14:1] are don't care in Alarm - comparison. Only SS[0] is compared. */ -#define RTC_AlarmSubSecondMask_SS14_2 ((uint32_t)0x02000000) /*!< SS[14:2] are don't care in Alarm - comparison. Only SS[1:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_3 ((uint32_t)0x03000000) /*!< SS[14:3] are don't care in Alarm - comparison. Only SS[2:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_4 ((uint32_t)0x04000000) /*!< SS[14:4] are don't care in Alarm - comparison. Only SS[3:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_5 ((uint32_t)0x05000000) /*!< SS[14:5] are don't care in Alarm - comparison. Only SS[4:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_6 ((uint32_t)0x06000000) /*!< SS[14:6] are don't care in Alarm - comparison. Only SS[5:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_7 ((uint32_t)0x07000000) /*!< SS[14:7] are don't care in Alarm - comparison. Only SS[6:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_8 ((uint32_t)0x08000000) /*!< SS[14:8] are don't care in Alarm - comparison. Only SS[7:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_9 ((uint32_t)0x09000000) /*!< SS[14:9] are don't care in Alarm - comparison. Only SS[8:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_10 ((uint32_t)0x0A000000) /*!< SS[14:10] are don't care in Alarm - comparison. Only SS[9:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_11 ((uint32_t)0x0B000000) /*!< SS[14:11] are don't care in Alarm - comparison. Only SS[10:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_12 ((uint32_t)0x0C000000) /*!< SS[14:12] are don't care in Alarm - comparison.Only SS[11:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_13 ((uint32_t)0x0D000000) /*!< SS[14:13] are don't care in Alarm - comparison. Only SS[12:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14 ((uint32_t)0x0E000000) /*!< SS[14] is don't care in Alarm - comparison.Only SS[13:0] are compared */ -#define RTC_AlarmSubSecondMask_None ((uint32_t)0x0F000000) /*!< SS[14:0] are compared and must match - to activate alarm. */ -#define IS_RTC_ALARM_SUB_SECOND_MASK(MASK) (((MASK) == RTC_AlarmSubSecondMask_All) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_1) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_2) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_3) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_4) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_5) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_6) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_7) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_8) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_9) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_10) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_11) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_12) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_13) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14) || \ - ((MASK) == RTC_AlarmSubSecondMask_None)) -/** - * @} - */ - -/** @defgroup RTC_Alarm_Sub_Seconds_Value - * @{ - */ - -#define IS_RTC_ALARM_SUB_SECOND_VALUE(VALUE) ((VALUE) <= 0x00007FFF) - -/** - * @} - */ - -/** @defgroup RTC_Wakeup_Timer_Definitions - * @{ - */ -#define RTC_WakeUpClock_RTCCLK_Div16 ((uint32_t)0x00000000) -#define RTC_WakeUpClock_RTCCLK_Div8 ((uint32_t)0x00000001) -#define RTC_WakeUpClock_RTCCLK_Div4 ((uint32_t)0x00000002) -#define RTC_WakeUpClock_RTCCLK_Div2 ((uint32_t)0x00000003) -#define RTC_WakeUpClock_CK_SPRE_16bits ((uint32_t)0x00000004) -#define RTC_WakeUpClock_CK_SPRE_17bits ((uint32_t)0x00000006) -#define IS_RTC_WAKEUP_CLOCK(CLOCK) (((CLOCK) == RTC_WakeUpClock_RTCCLK_Div16) || \ - ((CLOCK) == RTC_WakeUpClock_RTCCLK_Div8) || \ - ((CLOCK) == RTC_WakeUpClock_RTCCLK_Div4) || \ - ((CLOCK) == RTC_WakeUpClock_RTCCLK_Div2) || \ - ((CLOCK) == RTC_WakeUpClock_CK_SPRE_16bits) || \ - ((CLOCK) == RTC_WakeUpClock_CK_SPRE_17bits)) -#define IS_RTC_WAKEUP_COUNTER(COUNTER) ((COUNTER) <= 0xFFFF) -/** - * @} - */ - -/** @defgroup RTC_Time_Stamp_Edges_definitions - * @{ - */ -#define RTC_TimeStampEdge_Rising ((uint32_t)0x00000000) -#define RTC_TimeStampEdge_Falling ((uint32_t)0x00000008) -#define IS_RTC_TIMESTAMP_EDGE(EDGE) (((EDGE) == RTC_TimeStampEdge_Rising) || \ - ((EDGE) == RTC_TimeStampEdge_Falling)) -/** - * @} - */ - -/** @defgroup RTC_Output_selection_Definitions - * @{ - */ -#define RTC_Output_Disable ((uint32_t)0x00000000) -#define RTC_Output_AlarmA ((uint32_t)0x00200000) -#define RTC_Output_AlarmB ((uint32_t)0x00400000) -#define RTC_Output_WakeUp ((uint32_t)0x00600000) - -#define IS_RTC_OUTPUT(OUTPUT) (((OUTPUT) == RTC_Output_Disable) || \ - ((OUTPUT) == RTC_Output_AlarmA) || \ - ((OUTPUT) == RTC_Output_AlarmB) || \ - ((OUTPUT) == RTC_Output_WakeUp)) - -/** - * @} - */ - -/** @defgroup RTC_Output_Polarity_Definitions - * @{ - */ -#define RTC_OutputPolarity_High ((uint32_t)0x00000000) -#define RTC_OutputPolarity_Low ((uint32_t)0x00100000) -#define IS_RTC_OUTPUT_POL(POL) (((POL) == RTC_OutputPolarity_High) || \ - ((POL) == RTC_OutputPolarity_Low)) -/** - * @} - */ - - -/** @defgroup RTC_Digital_Calibration_Definitions - * @{ - */ -#define RTC_CalibSign_Positive ((uint32_t)0x00000000) -#define RTC_CalibSign_Negative ((uint32_t)0x00000080) -#define IS_RTC_CALIB_SIGN(SIGN) (((SIGN) == RTC_CalibSign_Positive) || \ - ((SIGN) == RTC_CalibSign_Negative)) -#define IS_RTC_CALIB_VALUE(VALUE) ((VALUE) < 0x20) - -/** - * @} - */ - - /** @defgroup RTC_Calib_Output_selection_Definitions - * @{ - */ -#define RTC_CalibOutput_512Hz ((uint32_t)0x00000000) -#define RTC_CalibOutput_1Hz ((uint32_t)0x00080000) -#define IS_RTC_CALIB_OUTPUT(OUTPUT) (((OUTPUT) == RTC_CalibOutput_512Hz) || \ - ((OUTPUT) == RTC_CalibOutput_1Hz)) -/** - * @} - */ - -/** @defgroup RTC_Smooth_calib_period_Definitions - * @{ - */ -#define RTC_SmoothCalibPeriod_32sec ((uint32_t)0x00000000) /*!< if RTCCLK = 32768 Hz, Smooth calibation - period is 32s, else 2exp20 RTCCLK seconds */ -#define RTC_SmoothCalibPeriod_16sec ((uint32_t)0x00002000) /*!< if RTCCLK = 32768 Hz, Smooth calibation - period is 16s, else 2exp19 RTCCLK seconds */ -#define RTC_SmoothCalibPeriod_8sec ((uint32_t)0x00004000) /*!< if RTCCLK = 32768 Hz, Smooth calibation - period is 8s, else 2exp18 RTCCLK seconds */ -#define IS_RTC_SMOOTH_CALIB_PERIOD(PERIOD) (((PERIOD) == RTC_SmoothCalibPeriod_32sec) || \ - ((PERIOD) == RTC_SmoothCalibPeriod_16sec) || \ - ((PERIOD) == RTC_SmoothCalibPeriod_8sec)) - -/** - * @} - */ - -/** @defgroup RTC_Smooth_calib_Plus_pulses_Definitions - * @{ - */ -#define RTC_SmoothCalibPlusPulses_Set ((uint32_t)0x00008000) /*!< The number of RTCCLK pulses added - during a X -second window = Y - CALM[8:0]. - with Y = 512, 256, 128 when X = 32, 16, 8 */ -#define RTC_SmoothCalibPlusPulses_Reset ((uint32_t)0x00000000) /*!< The number of RTCCLK pulses subbstited - during a 32-second window = CALM[8:0]. */ -#define IS_RTC_SMOOTH_CALIB_PLUS(PLUS) (((PLUS) == RTC_SmoothCalibPlusPulses_Set) || \ - ((PLUS) == RTC_SmoothCalibPlusPulses_Reset)) - -/** - * @} - */ - -/** @defgroup RTC_Smooth_calib_Minus_pulses_Definitions - * @{ - */ -#define IS_RTC_SMOOTH_CALIB_MINUS(VALUE) ((VALUE) <= 0x000001FF) - -/** - * @} - */ - -/** @defgroup RTC_DayLightSaving_Definitions - * @{ - */ -#define RTC_DayLightSaving_SUB1H ((uint32_t)0x00020000) -#define RTC_DayLightSaving_ADD1H ((uint32_t)0x00010000) -#define IS_RTC_DAYLIGHT_SAVING(SAVE) (((SAVE) == RTC_DayLightSaving_SUB1H) || \ - ((SAVE) == RTC_DayLightSaving_ADD1H)) - -#define RTC_StoreOperation_Reset ((uint32_t)0x00000000) -#define RTC_StoreOperation_Set ((uint32_t)0x00040000) -#define IS_RTC_STORE_OPERATION(OPERATION) (((OPERATION) == RTC_StoreOperation_Reset) || \ - ((OPERATION) == RTC_StoreOperation_Set)) -/** - * @} - */ - -/** @defgroup RTC_Tamper_Trigger_Definitions - * @{ - */ -#define RTC_TamperTrigger_RisingEdge ((uint32_t)0x00000000) -#define RTC_TamperTrigger_FallingEdge ((uint32_t)0x00000001) -#define RTC_TamperTrigger_LowLevel ((uint32_t)0x00000000) -#define RTC_TamperTrigger_HighLevel ((uint32_t)0x00000001) -#define IS_RTC_TAMPER_TRIGGER(TRIGGER) (((TRIGGER) == RTC_TamperTrigger_RisingEdge) || \ - ((TRIGGER) == RTC_TamperTrigger_FallingEdge) || \ - ((TRIGGER) == RTC_TamperTrigger_LowLevel) || \ - ((TRIGGER) == RTC_TamperTrigger_HighLevel)) - -/** - * @} - */ - -/** @defgroup RTC_Tamper_Filter_Definitions - * @{ - */ -#define RTC_TamperFilter_Disable ((uint32_t)0x00000000) /*!< Tamper filter is disabled */ - -#define RTC_TamperFilter_2Sample ((uint32_t)0x00000800) /*!< Tamper is activated after 2 - consecutive samples at the active level */ -#define RTC_TamperFilter_4Sample ((uint32_t)0x00001000) /*!< Tamper is activated after 4 - consecutive samples at the active level */ -#define RTC_TamperFilter_8Sample ((uint32_t)0x00001800) /*!< Tamper is activated after 8 - consecutive samples at the active leve. */ -#define IS_RTC_TAMPER_FILTER(FILTER) (((FILTER) == RTC_TamperFilter_Disable) || \ - ((FILTER) == RTC_TamperFilter_2Sample) || \ - ((FILTER) == RTC_TamperFilter_4Sample) || \ - ((FILTER) == RTC_TamperFilter_8Sample)) -/** - * @} - */ - -/** @defgroup RTC_Tamper_Sampling_Frequencies_Definitions - * @{ - */ -#define RTC_TamperSamplingFreq_RTCCLK_Div32768 ((uint32_t)0x00000000) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 32768 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div16384 ((uint32_t)0x000000100) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 16384 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div8192 ((uint32_t)0x00000200) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 8192 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div4096 ((uint32_t)0x00000300) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 4096 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div2048 ((uint32_t)0x00000400) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 2048 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div1024 ((uint32_t)0x00000500) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 1024 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div512 ((uint32_t)0x00000600) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 512 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div256 ((uint32_t)0x00000700) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 256 */ -#define IS_RTC_TAMPER_SAMPLING_FREQ(FREQ) (((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div32768) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div16384) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div8192) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div4096) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div2048) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div1024) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div512) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div256)) - -/** - * @} - */ - - /** @defgroup RTC_Tamper_Pin_Precharge_Duration_Definitions - * @{ - */ -#define RTC_TamperPrechargeDuration_1RTCCLK ((uint32_t)0x00000000) /*!< Tamper pins are pre-charged before - sampling during 1 RTCCLK cycle */ -#define RTC_TamperPrechargeDuration_2RTCCLK ((uint32_t)0x00002000) /*!< Tamper pins are pre-charged before - sampling during 2 RTCCLK cycles */ -#define RTC_TamperPrechargeDuration_4RTCCLK ((uint32_t)0x00004000) /*!< Tamper pins are pre-charged before - sampling during 4 RTCCLK cycles */ -#define RTC_TamperPrechargeDuration_8RTCCLK ((uint32_t)0x00006000) /*!< Tamper pins are pre-charged before - sampling during 8 RTCCLK cycles */ - -#define IS_RTC_TAMPER_PRECHARGE_DURATION(DURATION) (((DURATION) == RTC_TamperPrechargeDuration_1RTCCLK) || \ - ((DURATION) == RTC_TamperPrechargeDuration_2RTCCLK) || \ - ((DURATION) == RTC_TamperPrechargeDuration_4RTCCLK) || \ - ((DURATION) == RTC_TamperPrechargeDuration_8RTCCLK)) -/** - * @} - */ - -/** @defgroup RTC_Tamper_Pins_Definitions - * @{ - */ -#define RTC_Tamper_1 RTC_TAFCR_TAMP1E -#define IS_RTC_TAMPER(TAMPER) (((TAMPER) == RTC_Tamper_1)) - -/** - * @} - */ - -/** @defgroup RTC_Tamper_Pin_Selection - * @{ - */ -#define RTC_TamperPin_PC13 ((uint32_t)0x00000000) -#define RTC_TamperPin_PI8 ((uint32_t)0x00010000) -#define IS_RTC_TAMPER_PIN(PIN) (((PIN) == RTC_TamperPin_PC13) || \ - ((PIN) == RTC_TamperPin_PI8)) -/** - * @} - */ - -/** @defgroup RTC_TimeStamp_Pin_Selection - * @{ - */ -#define RTC_TimeStampPin_PC13 ((uint32_t)0x00000000) -#define RTC_TimeStampPin_PI8 ((uint32_t)0x00020000) -#define IS_RTC_TIMESTAMP_PIN(PIN) (((PIN) == RTC_TimeStampPin_PC13) || \ - ((PIN) == RTC_TimeStampPin_PI8)) -/** - * @} - */ - -/** @defgroup RTC_Output_Type_ALARM_OUT - * @{ - */ -#define RTC_OutputType_OpenDrain ((uint32_t)0x00000000) -#define RTC_OutputType_PushPull ((uint32_t)0x00040000) -#define IS_RTC_OUTPUT_TYPE(TYPE) (((TYPE) == RTC_OutputType_OpenDrain) || \ - ((TYPE) == RTC_OutputType_PushPull)) - -/** - * @} - */ - -/** @defgroup RTC_Add_1_Second_Parameter_Definitions - * @{ - */ -#define RTC_ShiftAdd1S_Reset ((uint32_t)0x00000000) -#define RTC_ShiftAdd1S_Set ((uint32_t)0x80000000) -#define IS_RTC_SHIFT_ADD1S(SEL) (((SEL) == RTC_ShiftAdd1S_Reset) || \ - ((SEL) == RTC_ShiftAdd1S_Set)) -/** - * @} - */ - -/** @defgroup RTC_Substract_Fraction_Of_Second_Value - * @{ - */ -#define IS_RTC_SHIFT_SUBFS(FS) ((FS) <= 0x00007FFF) - -/** - * @} - */ - -/** @defgroup RTC_Backup_Registers_Definitions - * @{ - */ - -#define RTC_BKP_DR0 ((uint32_t)0x00000000) -#define RTC_BKP_DR1 ((uint32_t)0x00000001) -#define RTC_BKP_DR2 ((uint32_t)0x00000002) -#define RTC_BKP_DR3 ((uint32_t)0x00000003) -#define RTC_BKP_DR4 ((uint32_t)0x00000004) -#define RTC_BKP_DR5 ((uint32_t)0x00000005) -#define RTC_BKP_DR6 ((uint32_t)0x00000006) -#define RTC_BKP_DR7 ((uint32_t)0x00000007) -#define RTC_BKP_DR8 ((uint32_t)0x00000008) -#define RTC_BKP_DR9 ((uint32_t)0x00000009) -#define RTC_BKP_DR10 ((uint32_t)0x0000000A) -#define RTC_BKP_DR11 ((uint32_t)0x0000000B) -#define RTC_BKP_DR12 ((uint32_t)0x0000000C) -#define RTC_BKP_DR13 ((uint32_t)0x0000000D) -#define RTC_BKP_DR14 ((uint32_t)0x0000000E) -#define RTC_BKP_DR15 ((uint32_t)0x0000000F) -#define RTC_BKP_DR16 ((uint32_t)0x00000010) -#define RTC_BKP_DR17 ((uint32_t)0x00000011) -#define RTC_BKP_DR18 ((uint32_t)0x00000012) -#define RTC_BKP_DR19 ((uint32_t)0x00000013) -#define IS_RTC_BKP(BKP) (((BKP) == RTC_BKP_DR0) || \ - ((BKP) == RTC_BKP_DR1) || \ - ((BKP) == RTC_BKP_DR2) || \ - ((BKP) == RTC_BKP_DR3) || \ - ((BKP) == RTC_BKP_DR4) || \ - ((BKP) == RTC_BKP_DR5) || \ - ((BKP) == RTC_BKP_DR6) || \ - ((BKP) == RTC_BKP_DR7) || \ - ((BKP) == RTC_BKP_DR8) || \ - ((BKP) == RTC_BKP_DR9) || \ - ((BKP) == RTC_BKP_DR10) || \ - ((BKP) == RTC_BKP_DR11) || \ - ((BKP) == RTC_BKP_DR12) || \ - ((BKP) == RTC_BKP_DR13) || \ - ((BKP) == RTC_BKP_DR14) || \ - ((BKP) == RTC_BKP_DR15) || \ - ((BKP) == RTC_BKP_DR16) || \ - ((BKP) == RTC_BKP_DR17) || \ - ((BKP) == RTC_BKP_DR18) || \ - ((BKP) == RTC_BKP_DR19)) -/** - * @} - */ - -/** @defgroup RTC_Input_parameter_format_definitions - * @{ - */ -#define RTC_Format_BIN ((uint32_t)0x000000000) -#define RTC_Format_BCD ((uint32_t)0x000000001) -#define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_Format_BIN) || ((FORMAT) == RTC_Format_BCD)) - -/** - * @} - */ - -/** @defgroup RTC_Flags_Definitions - * @{ - */ -#define RTC_FLAG_RECALPF ((uint32_t)0x00010000) -#define RTC_FLAG_TAMP1F ((uint32_t)0x00002000) -#define RTC_FLAG_TSOVF ((uint32_t)0x00001000) -#define RTC_FLAG_TSF ((uint32_t)0x00000800) -#define RTC_FLAG_WUTF ((uint32_t)0x00000400) -#define RTC_FLAG_ALRBF ((uint32_t)0x00000200) -#define RTC_FLAG_ALRAF ((uint32_t)0x00000100) -#define RTC_FLAG_INITF ((uint32_t)0x00000040) -#define RTC_FLAG_RSF ((uint32_t)0x00000020) -#define RTC_FLAG_INITS ((uint32_t)0x00000010) -#define RTC_FLAG_SHPF ((uint32_t)0x00000008) -#define RTC_FLAG_WUTWF ((uint32_t)0x00000004) -#define RTC_FLAG_ALRBWF ((uint32_t)0x00000002) -#define RTC_FLAG_ALRAWF ((uint32_t)0x00000001) -#define IS_RTC_GET_FLAG(FLAG) (((FLAG) == RTC_FLAG_TSOVF) || ((FLAG) == RTC_FLAG_TSF) || \ - ((FLAG) == RTC_FLAG_WUTF) || ((FLAG) == RTC_FLAG_ALRBF) || \ - ((FLAG) == RTC_FLAG_ALRAF) || ((FLAG) == RTC_FLAG_INITF) || \ - ((FLAG) == RTC_FLAG_RSF) || ((FLAG) == RTC_FLAG_WUTWF) || \ - ((FLAG) == RTC_FLAG_ALRBWF) || ((FLAG) == RTC_FLAG_ALRAWF) || \ - ((FLAG) == RTC_FLAG_TAMP1F) || ((FLAG) == RTC_FLAG_RECALPF) || \ - ((FLAG) == RTC_FLAG_SHPF)) -#define IS_RTC_CLEAR_FLAG(FLAG) (((FLAG) != (uint32_t)RESET) && (((FLAG) & 0xFFFF00DF) == (uint32_t)RESET)) -/** - * @} - */ - -/** @defgroup RTC_Interrupts_Definitions - * @{ - */ -#define RTC_IT_TS ((uint32_t)0x00008000) -#define RTC_IT_WUT ((uint32_t)0x00004000) -#define RTC_IT_ALRB ((uint32_t)0x00002000) -#define RTC_IT_ALRA ((uint32_t)0x00001000) -#define RTC_IT_TAMP ((uint32_t)0x00000004) /* Used only to Enable the Tamper Interrupt */ -#define RTC_IT_TAMP1 ((uint32_t)0x00020000) - -#define IS_RTC_CONFIG_IT(IT) (((IT) != (uint32_t)RESET) && (((IT) & 0xFFFF0FFB) == (uint32_t)RESET)) -#define IS_RTC_GET_IT(IT) (((IT) == RTC_IT_TS) || ((IT) == RTC_IT_WUT) || \ - ((IT) == RTC_IT_ALRB) || ((IT) == RTC_IT_ALRA) || \ - ((IT) == RTC_IT_TAMP1)) -#define IS_RTC_CLEAR_IT(IT) (((IT) != (uint32_t)RESET) && (((IT) & 0xFFFD0FFF) == (uint32_t)RESET)) - -/** - * @} - */ - -/** @defgroup RTC_Legacy - * @{ - */ -#define RTC_DigitalCalibConfig RTC_CoarseCalibConfig -#define RTC_DigitalCalibCmd RTC_CoarseCalibCmd - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the RTC configuration to the default reset state *****/ -ErrorStatus RTC_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct); -void RTC_StructInit(RTC_InitTypeDef* RTC_InitStruct); -void RTC_WriteProtectionCmd(FunctionalState NewState); -ErrorStatus RTC_EnterInitMode(void); -void RTC_ExitInitMode(void); -ErrorStatus RTC_WaitForSynchro(void); -ErrorStatus RTC_RefClockCmd(FunctionalState NewState); -void RTC_BypassShadowCmd(FunctionalState NewState); - -/* Time and Date configuration functions **************************************/ -ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct); -void RTC_TimeStructInit(RTC_TimeTypeDef* RTC_TimeStruct); -void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct); -uint32_t RTC_GetSubSecond(void); -ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct); -void RTC_DateStructInit(RTC_DateTypeDef* RTC_DateStruct); -void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct); - -/* Alarms (Alarm A and Alarm B) configuration functions **********************/ -void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct); -void RTC_AlarmStructInit(RTC_AlarmTypeDef* RTC_AlarmStruct); -void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct); -ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm, FunctionalState NewState); -void RTC_AlarmSubSecondConfig(uint32_t RTC_Alarm, uint32_t RTC_AlarmSubSecondValue, uint32_t RTC_AlarmSubSecondMask); -uint32_t RTC_GetAlarmSubSecond(uint32_t RTC_Alarm); - -/* WakeUp Timer configuration functions ***************************************/ -void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock); -void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter); -uint32_t RTC_GetWakeUpCounter(void); -ErrorStatus RTC_WakeUpCmd(FunctionalState NewState); - -/* Daylight Saving configuration functions ************************************/ -void RTC_DayLightSavingConfig(uint32_t RTC_DayLightSaving, uint32_t RTC_StoreOperation); -uint32_t RTC_GetStoreOperation(void); - -/* Output pin Configuration function ******************************************/ -void RTC_OutputConfig(uint32_t RTC_Output, uint32_t RTC_OutputPolarity); - -/* Digital Calibration configuration functions *********************************/ -ErrorStatus RTC_CoarseCalibConfig(uint32_t RTC_CalibSign, uint32_t Value); -ErrorStatus RTC_CoarseCalibCmd(FunctionalState NewState); -void RTC_CalibOutputCmd(FunctionalState NewState); -void RTC_CalibOutputConfig(uint32_t RTC_CalibOutput); -ErrorStatus RTC_SmoothCalibConfig(uint32_t RTC_SmoothCalibPeriod, - uint32_t RTC_SmoothCalibPlusPulses, - uint32_t RTC_SmouthCalibMinusPulsesValue); - -/* TimeStamp configuration functions ******************************************/ -void RTC_TimeStampCmd(uint32_t RTC_TimeStampEdge, FunctionalState NewState); -void RTC_GetTimeStamp(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_StampTimeStruct, - RTC_DateTypeDef* RTC_StampDateStruct); -uint32_t RTC_GetTimeStampSubSecond(void); - -/* Tampers configuration functions ********************************************/ -void RTC_TamperTriggerConfig(uint32_t RTC_Tamper, uint32_t RTC_TamperTrigger); -void RTC_TamperCmd(uint32_t RTC_Tamper, FunctionalState NewState); -void RTC_TamperFilterConfig(uint32_t RTC_TamperFilter); -void RTC_TamperSamplingFreqConfig(uint32_t RTC_TamperSamplingFreq); -void RTC_TamperPinsPrechargeDuration(uint32_t RTC_TamperPrechargeDuration); -void RTC_TimeStampOnTamperDetectionCmd(FunctionalState NewState); -void RTC_TamperPullUpCmd(FunctionalState NewState); - -/* Backup Data Registers configuration functions ******************************/ -void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data); -uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR); - -/* RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration - functions ******************************************************************/ -void RTC_TamperPinSelection(uint32_t RTC_TamperPin); -void RTC_TimeStampPinSelection(uint32_t RTC_TimeStampPin); -void RTC_OutputTypeConfig(uint32_t RTC_OutputType); - -/* RTC_Shift_control_synchonisation_functions *********************************/ -ErrorStatus RTC_SynchroShiftConfig(uint32_t RTC_ShiftAdd1S, uint32_t RTC_ShiftSubFS); - -/* Interrupts and flags management functions **********************************/ -void RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState); -FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG); -void RTC_ClearFlag(uint32_t RTC_FLAG); -ITStatus RTC_GetITStatus(uint32_t RTC_IT); -void RTC_ClearITPendingBit(uint32_t RTC_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_RTC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_sdio.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_sdio.h deleted file mode 100644 index 0765a09c..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_sdio.h +++ /dev/null @@ -1,536 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_sdio.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the SDIO firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_SDIO_H -#define __STM32F4xx_SDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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; - - -/* Exported constants --------------------------------------------------------*/ - -/** @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)0x00000000) -#define SDIO_ReadWaitMode_DATA2 ((uint32_t)0x00000001) -#define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_ReadWaitMode_CLK) || \ - ((MODE) == SDIO_ReadWaitMode_DATA2)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ -/* Function used to set the SDIO configuration to the default reset state ****/ -void SDIO_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -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); - -/* Command path state machine (CPSM) management functions *********************/ -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); - -/* Data path state machine (DPSM) management functions ************************/ -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); - -/* SDIO IO Cards mode management functions ************************************/ -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); - -/* CE-ATA mode management functions *******************************************/ -void SDIO_CommandCompletionCmd(FunctionalState NewState); -void SDIO_CEATAITCmd(FunctionalState NewState); -void SDIO_SendCEATACmd(FunctionalState NewState); - -/* DMA transfers management functions *****************************************/ -void SDIO_DMACmd(FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void SDIO_ITConfig(uint32_t SDIO_IT, 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 /* __STM32F4xx_SDIO_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_spi.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_spi.h deleted file mode 100644 index e7e2fc8f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_spi.h +++ /dev/null @@ -1,549 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_spi.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the SPI - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_SPI_H -#define __STM32F4xx_SPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup SPI_Exported_Constants - * @{ - */ - -#define IS_SPI_ALL_PERIPH(PERIPH) (((PERIPH) == SPI1) || \ - ((PERIPH) == SPI2) || \ - ((PERIPH) == SPI3) || \ - ((PERIPH) == SPI4) || \ - ((PERIPH) == SPI5) || \ - ((PERIPH) == SPI6)) - -#define IS_SPI_ALL_PERIPH_EXT(PERIPH) (((PERIPH) == SPI1) || \ - ((PERIPH) == SPI2) || \ - ((PERIPH) == SPI3) || \ - ((PERIPH) == SPI4) || \ - ((PERIPH) == SPI5) || \ - ((PERIPH) == SPI6) || \ - ((PERIPH) == I2S2ext) || \ - ((PERIPH) == I2S3ext)) - -#define IS_SPI_23_PERIPH(PERIPH) (((PERIPH) == SPI2) || \ - ((PERIPH) == SPI3)) - -#define IS_SPI_23_PERIPH_EXT(PERIPH) (((PERIPH) == SPI2) || \ - ((PERIPH) == SPI3) || \ - ((PERIPH) == I2S2ext) || \ - ((PERIPH) == I2S3ext)) - -#define IS_I2S_EXT_PERIPH(PERIPH) (((PERIPH) == I2S2ext) || \ - ((PERIPH) == I2S3ext)) - - -/** @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 SPI_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 SPI_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 SPI_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 SPI_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 SPI_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 SPI_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 I2S_IT_UDR ((uint8_t)0x53) -#define SPI_I2S_IT_TIFRFE ((uint8_t)0x58) - -#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 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) == SPI_IT_CRCERR) || ((IT) == SPI_IT_MODF) || \ - ((IT) == SPI_I2S_IT_OVR) || ((IT) == I2S_IT_UDR) ||\ - ((IT) == SPI_I2S_IT_TIFRFE)) -/** - * @} - */ - -/** @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 SPI_I2S_FLAG_TIFRFE ((uint16_t)0x0100) - -#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)|| \ - ((FLAG) == SPI_I2S_FLAG_TIFRFE)) -/** - * @} - */ - -/** @defgroup SPI_CRC_polynomial - * @{ - */ - -#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1) -/** - * @} - */ - -/** @defgroup SPI_I2S_Legacy - * @{ - */ - -#define SPI_DMAReq_Tx SPI_I2S_DMAReq_Tx -#define SPI_DMAReq_Rx SPI_I2S_DMAReq_Rx -#define SPI_IT_TXE SPI_I2S_IT_TXE -#define SPI_IT_RXNE SPI_I2S_IT_RXNE -#define SPI_IT_ERR SPI_I2S_IT_ERR -#define SPI_IT_OVR SPI_I2S_IT_OVR -#define SPI_FLAG_RXNE SPI_I2S_FLAG_RXNE -#define SPI_FLAG_TXE SPI_I2S_FLAG_TXE -#define SPI_FLAG_OVR SPI_I2S_FLAG_OVR -#define SPI_FLAG_BSY SPI_I2S_FLAG_BSY -#define SPI_DeInit SPI_I2S_DeInit -#define SPI_ITConfig SPI_I2S_ITConfig -#define SPI_DMACmd SPI_I2S_DMACmd -#define SPI_SendData SPI_I2S_SendData -#define SPI_ReceiveData SPI_I2S_ReceiveData -#define SPI_GetFlagStatus SPI_I2S_GetFlagStatus -#define SPI_ClearFlag SPI_I2S_ClearFlag -#define SPI_GetITStatus SPI_I2S_GetITStatus -#define SPI_ClearITPendingBit SPI_I2S_ClearITPendingBit -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the SPI configuration to the default reset state *****/ -void SPI_I2S_DeInit(SPI_TypeDef* SPIx); - -/* Initialization and Configuration functions *********************************/ -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_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize); -void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction); -void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft); -void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState); -void SPI_TIModeCmd(SPI_TypeDef* SPIx, FunctionalState NewState); - -void I2S_FullDuplexConfig(SPI_TypeDef* I2Sxext, I2S_InitTypeDef* I2S_InitStruct); - -/* Data transfers functions ***************************************************/ -void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data); -uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx); - -/* Hardware CRC Calculation functions *****************************************/ -void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState); -void SPI_TransmitCRC(SPI_TypeDef* SPIx); -uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC); -uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx); - -/* DMA transfers management functions *****************************************/ -void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); -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 /*__STM32F4xx_SPI_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_syscfg.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_syscfg.h deleted file mode 100644 index 604c337a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_syscfg.h +++ /dev/null @@ -1,181 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_syscfg.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the SYSCFG firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_SYSCFG_H -#define __STM32F4xx_SYSCFG_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup SYSCFG - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup SYSCFG_Exported_Constants - * @{ - */ - -/** @defgroup SYSCFG_EXTI_Port_Sources - * @{ - */ -#define EXTI_PortSourceGPIOA ((uint8_t)0x00) -#define EXTI_PortSourceGPIOB ((uint8_t)0x01) -#define EXTI_PortSourceGPIOC ((uint8_t)0x02) -#define EXTI_PortSourceGPIOD ((uint8_t)0x03) -#define EXTI_PortSourceGPIOE ((uint8_t)0x04) -#define EXTI_PortSourceGPIOF ((uint8_t)0x05) -#define EXTI_PortSourceGPIOG ((uint8_t)0x06) -#define EXTI_PortSourceGPIOH ((uint8_t)0x07) -#define EXTI_PortSourceGPIOI ((uint8_t)0x08) - -#define IS_EXTI_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == EXTI_PortSourceGPIOA) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOB) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOC) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOD) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOE) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOF) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOG) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOH) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOI)) - -/** - * @} - */ - - -/** @defgroup SYSCFG_EXTI_Pin_Sources - * @{ - */ -#define EXTI_PinSource0 ((uint8_t)0x00) -#define EXTI_PinSource1 ((uint8_t)0x01) -#define EXTI_PinSource2 ((uint8_t)0x02) -#define EXTI_PinSource3 ((uint8_t)0x03) -#define EXTI_PinSource4 ((uint8_t)0x04) -#define EXTI_PinSource5 ((uint8_t)0x05) -#define EXTI_PinSource6 ((uint8_t)0x06) -#define EXTI_PinSource7 ((uint8_t)0x07) -#define EXTI_PinSource8 ((uint8_t)0x08) -#define EXTI_PinSource9 ((uint8_t)0x09) -#define EXTI_PinSource10 ((uint8_t)0x0A) -#define EXTI_PinSource11 ((uint8_t)0x0B) -#define EXTI_PinSource12 ((uint8_t)0x0C) -#define EXTI_PinSource13 ((uint8_t)0x0D) -#define EXTI_PinSource14 ((uint8_t)0x0E) -#define EXTI_PinSource15 ((uint8_t)0x0F) -#define IS_EXTI_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == EXTI_PinSource0) || \ - ((PINSOURCE) == EXTI_PinSource1) || \ - ((PINSOURCE) == EXTI_PinSource2) || \ - ((PINSOURCE) == EXTI_PinSource3) || \ - ((PINSOURCE) == EXTI_PinSource4) || \ - ((PINSOURCE) == EXTI_PinSource5) || \ - ((PINSOURCE) == EXTI_PinSource6) || \ - ((PINSOURCE) == EXTI_PinSource7) || \ - ((PINSOURCE) == EXTI_PinSource8) || \ - ((PINSOURCE) == EXTI_PinSource9) || \ - ((PINSOURCE) == EXTI_PinSource10) || \ - ((PINSOURCE) == EXTI_PinSource11) || \ - ((PINSOURCE) == EXTI_PinSource12) || \ - ((PINSOURCE) == EXTI_PinSource13) || \ - ((PINSOURCE) == EXTI_PinSource14) || \ - ((PINSOURCE) == EXTI_PinSource15)) -/** - * @} - */ - - -/** @defgroup SYSCFG_Memory_Remap_Config - * @{ - */ -#define SYSCFG_MemoryRemap_Flash ((uint8_t)0x00) -#define SYSCFG_MemoryRemap_SystemFlash ((uint8_t)0x01) -#define SYSCFG_MemoryRemap_SRAM ((uint8_t)0x03) -#define SYSCFG_MemoryRemap_FSMC ((uint8_t)0x02) - -#define IS_SYSCFG_MEMORY_REMAP_CONFING(REMAP) (((REMAP) == SYSCFG_MemoryRemap_Flash) || \ - ((REMAP) == SYSCFG_MemoryRemap_SystemFlash) || \ - ((REMAP) == SYSCFG_MemoryRemap_SRAM) || \ - ((REMAP) == SYSCFG_MemoryRemap_FSMC)) - -/** - * @} - */ - - -/** @defgroup SYSCFG_ETHERNET_Media_Interface - * @{ - */ -#define SYSCFG_ETH_MediaInterface_MII ((uint32_t)0x00000000) -#define SYSCFG_ETH_MediaInterface_RMII ((uint32_t)0x00000001) - -#define IS_SYSCFG_ETH_MEDIA_INTERFACE(INTERFACE) (((INTERFACE) == SYSCFG_ETH_MediaInterface_MII) || \ - ((INTERFACE) == SYSCFG_ETH_MediaInterface_RMII)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -void SYSCFG_DeInit(void); -void SYSCFG_MemoryRemapConfig(uint8_t SYSCFG_MemoryRemap); -void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex); -void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface); -void SYSCFG_CompensationCellCmd(FunctionalState NewState); -FlagStatus SYSCFG_GetCompensationCellStatus(void); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_SYSCFG_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_tim.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_tim.h deleted file mode 100644 index 94c22561..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_tim.h +++ /dev/null @@ -1,1150 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_tim.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the TIM firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_TIM_H -#define __STM32F4xx_TIM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 */ - - uint32_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. */ - - uint32_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 TIM_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 TIM_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 TIM_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 TIM_Break_Input_enable_disable */ - - uint16_t TIM_BreakPolarity; /*!< Specifies the TIM Break Input pin polarity. - This parameter can be a value of @ref TIM_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; - -/* Exported constants --------------------------------------------------------*/ - -/** @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))) -/* LIST1: TIM1, TIM2, TIM3, TIM4, TIM5, TIM8, TIM9, TIM10, TIM11, TIM12, TIM13 and TIM14 */ -#define IS_TIM_LIST1_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)) - -/* LIST2: TIM1, TIM2, TIM3, TIM4, TIM5, TIM8, TIM9 and TIM12 */ -#define IS_TIM_LIST2_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ - ((PERIPH) == TIM2) || \ - ((PERIPH) == TIM3) || \ - ((PERIPH) == TIM4) || \ - ((PERIPH) == TIM5) || \ - ((PERIPH) == TIM8) || \ - ((PERIPH) == TIM9) || \ - ((PERIPH) == TIM12)) -/* LIST3: TIM1, TIM2, TIM3, TIM4, TIM5 and TIM8 */ -#define IS_TIM_LIST3_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ - ((PERIPH) == TIM2) || \ - ((PERIPH) == TIM3) || \ - ((PERIPH) == TIM4) || \ - ((PERIPH) == TIM5) || \ - ((PERIPH) == TIM8)) -/* LIST4: TIM1 and TIM8 */ -#define IS_TIM_LIST4_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ - ((PERIPH) == TIM8)) -/* LIST5: TIM1, TIM2, TIM3, TIM4, TIM5, TIM6, TIM7 and TIM8 */ -#define IS_TIM_LIST5_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ - ((PERIPH) == TIM2) || \ - ((PERIPH) == TIM3) || \ - ((PERIPH) == TIM4) || \ - ((PERIPH) == TIM5) || \ - ((PERIPH) == TIM6) || \ - ((PERIPH) == TIM7) || \ - ((PERIPH) == TIM8)) -/* LIST6: TIM2, TIM5 and TIM11 */ -#define IS_TIM_LIST6_PERIPH(TIMx)(((TIMx) == TIM2) || \ - ((TIMx) == TIM5) || \ - ((TIMx) == TIM11)) - -/** @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 TIM_Break_Input_enable_disable - * @{ - */ - -#define TIM_Break_Enable ((uint16_t)0x1000) -#define TIM_Break_Disable ((uint16_t)0x0000) -#define IS_TIM_BREAK_STATE(STATE) (((STATE) == TIM_Break_Enable) || \ - ((STATE) == TIM_Break_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Break_Polarity - * @{ - */ - -#define TIM_BreakPolarity_Low ((uint16_t)0x0000) -#define TIM_BreakPolarity_High ((uint16_t)0x2000) -#define IS_TIM_BREAK_POLARITY(POLARITY) (((POLARITY) == TIM_BreakPolarity_Low) || \ - ((POLARITY) == TIM_BreakPolarity_High)) -/** - * @} - */ - -/** @defgroup TIM_AOE_Bit_Set_Reset - * @{ - */ - -#define TIM_AutomaticOutput_Enable ((uint16_t)0x4000) -#define TIM_AutomaticOutput_Disable ((uint16_t)0x0000) -#define IS_TIM_AUTOMATIC_OUTPUT_STATE(STATE) (((STATE) == TIM_AutomaticOutput_Enable) || \ - ((STATE) == TIM_AutomaticOutput_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Lock_level - * @{ - */ - -#define TIM_LOCKLevel_OFF ((uint16_t)0x0000) -#define TIM_LOCKLevel_1 ((uint16_t)0x0100) -#define TIM_LOCKLevel_2 ((uint16_t)0x0200) -#define TIM_LOCKLevel_3 ((uint16_t)0x0300) -#define IS_TIM_LOCK_LEVEL(LEVEL) (((LEVEL) == TIM_LOCKLevel_OFF) || \ - ((LEVEL) == TIM_LOCKLevel_1) || \ - ((LEVEL) == TIM_LOCKLevel_2) || \ - ((LEVEL) == TIM_LOCKLevel_3)) -/** - * @} - */ - -/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state - * @{ - */ - -#define TIM_OSSIState_Enable ((uint16_t)0x0400) -#define TIM_OSSIState_Disable ((uint16_t)0x0000) -#define IS_TIM_OSSI_STATE(STATE) (((STATE) == TIM_OSSIState_Enable) || \ - ((STATE) == TIM_OSSIState_Disable)) -/** - * @} - */ - -/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state - * @{ - */ - -#define TIM_OSSRState_Enable ((uint16_t)0x0800) -#define TIM_OSSRState_Disable ((uint16_t)0x0000) -#define IS_TIM_OSSR_STATE(STATE) (((STATE) == TIM_OSSRState_Enable) || \ - ((STATE) == TIM_OSSRState_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Idle_State - * @{ - */ - -#define TIM_OCIdleState_Set ((uint16_t)0x0100) -#define TIM_OCIdleState_Reset ((uint16_t)0x0000) -#define IS_TIM_OCIDLE_STATE(STATE) (((STATE) == TIM_OCIdleState_Set) || \ - ((STATE) == TIM_OCIdleState_Reset)) -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_N_Idle_State - * @{ - */ - -#define TIM_OCNIdleState_Set ((uint16_t)0x0200) -#define TIM_OCNIdleState_Reset ((uint16_t)0x0000) -#define IS_TIM_OCNIDLE_STATE(STATE) (((STATE) == TIM_OCNIdleState_Set) || \ - ((STATE) == TIM_OCNIdleState_Reset)) -/** - * @} - */ - -/** @defgroup TIM_Input_Capture_Polarity - * @{ - */ - -#define TIM_ICPolarity_Rising ((uint16_t)0x0000) -#define TIM_ICPolarity_Falling ((uint16_t)0x0002) -#define TIM_ICPolarity_BothEdge ((uint16_t)0x000A) -#define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \ - ((POLARITY) == TIM_ICPolarity_Falling)|| \ - ((POLARITY) == TIM_ICPolarity_BothEdge)) -/** - * @} - */ - -/** @defgroup TIM_Input_Capture_Selection - * @{ - */ - -#define TIM_ICSelection_DirectTI ((uint16_t)0x0001) /*!< TIM Input 1, 2, 3 or 4 is selected to be - connected to IC1, IC2, IC3 or IC4, respectively */ -#define TIM_ICSelection_IndirectTI ((uint16_t)0x0002) /*!< TIM Input 1, 2, 3 or 4 is selected to be - connected to IC2, IC1, IC4 or IC3, respectively. */ -#define TIM_ICSelection_TRC ((uint16_t)0x0003) /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */ -#define IS_TIM_IC_SELECTION(SELECTION) (((SELECTION) == TIM_ICSelection_DirectTI) || \ - ((SELECTION) == TIM_ICSelection_IndirectTI) || \ - ((SELECTION) == TIM_ICSelection_TRC)) -/** - * @} - */ - -/** @defgroup TIM_Input_Capture_Prescaler - * @{ - */ - -#define TIM_ICPSC_DIV1 ((uint16_t)0x0000) /*!< Capture performed each time an edge is detected on the capture input. */ -#define TIM_ICPSC_DIV2 ((uint16_t)0x0004) /*!< Capture performed once every 2 events. */ -#define TIM_ICPSC_DIV4 ((uint16_t)0x0008) /*!< Capture performed once every 4 events. */ -#define TIM_ICPSC_DIV8 ((uint16_t)0x000C) /*!< Capture performed once every 8 events. */ -#define IS_TIM_IC_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ICPSC_DIV1) || \ - ((PRESCALER) == TIM_ICPSC_DIV2) || \ - ((PRESCALER) == TIM_ICPSC_DIV4) || \ - ((PRESCALER) == TIM_ICPSC_DIV8)) -/** - * @} - */ - -/** @defgroup TIM_interrupt_sources - * @{ - */ - -#define TIM_IT_Update ((uint16_t)0x0001) -#define TIM_IT_CC1 ((uint16_t)0x0002) -#define TIM_IT_CC2 ((uint16_t)0x0004) -#define TIM_IT_CC3 ((uint16_t)0x0008) -#define TIM_IT_CC4 ((uint16_t)0x0010) -#define TIM_IT_COM ((uint16_t)0x0020) -#define TIM_IT_Trigger ((uint16_t)0x0040) -#define TIM_IT_Break ((uint16_t)0x0080) -#define IS_TIM_IT(IT) ((((IT) & (uint16_t)0xFF00) == 0x0000) && ((IT) != 0x0000)) - -#define IS_TIM_GET_IT(IT) (((IT) == TIM_IT_Update) || \ - ((IT) == TIM_IT_CC1) || \ - ((IT) == TIM_IT_CC2) || \ - ((IT) == TIM_IT_CC3) || \ - ((IT) == TIM_IT_CC4) || \ - ((IT) == TIM_IT_COM) || \ - ((IT) == TIM_IT_Trigger) || \ - ((IT) == TIM_IT_Break)) -/** - * @} - */ - -/** @defgroup TIM_DMA_Base_address - * @{ - */ - -#define TIM_DMABase_CR1 ((uint16_t)0x0000) -#define TIM_DMABase_CR2 ((uint16_t)0x0001) -#define TIM_DMABase_SMCR ((uint16_t)0x0002) -#define TIM_DMABase_DIER ((uint16_t)0x0003) -#define TIM_DMABase_SR ((uint16_t)0x0004) -#define TIM_DMABase_EGR ((uint16_t)0x0005) -#define TIM_DMABase_CCMR1 ((uint16_t)0x0006) -#define TIM_DMABase_CCMR2 ((uint16_t)0x0007) -#define TIM_DMABase_CCER ((uint16_t)0x0008) -#define TIM_DMABase_CNT ((uint16_t)0x0009) -#define TIM_DMABase_PSC ((uint16_t)0x000A) -#define TIM_DMABase_ARR ((uint16_t)0x000B) -#define TIM_DMABase_RCR ((uint16_t)0x000C) -#define TIM_DMABase_CCR1 ((uint16_t)0x000D) -#define TIM_DMABase_CCR2 ((uint16_t)0x000E) -#define TIM_DMABase_CCR3 ((uint16_t)0x000F) -#define TIM_DMABase_CCR4 ((uint16_t)0x0010) -#define TIM_DMABase_BDTR ((uint16_t)0x0011) -#define TIM_DMABase_DCR ((uint16_t)0x0012) -#define TIM_DMABase_OR ((uint16_t)0x0013) -#define IS_TIM_DMA_BASE(BASE) (((BASE) == TIM_DMABase_CR1) || \ - ((BASE) == TIM_DMABase_CR2) || \ - ((BASE) == TIM_DMABase_SMCR) || \ - ((BASE) == TIM_DMABase_DIER) || \ - ((BASE) == TIM_DMABase_SR) || \ - ((BASE) == TIM_DMABase_EGR) || \ - ((BASE) == TIM_DMABase_CCMR1) || \ - ((BASE) == TIM_DMABase_CCMR2) || \ - ((BASE) == TIM_DMABase_CCER) || \ - ((BASE) == TIM_DMABase_CNT) || \ - ((BASE) == TIM_DMABase_PSC) || \ - ((BASE) == TIM_DMABase_ARR) || \ - ((BASE) == TIM_DMABase_RCR) || \ - ((BASE) == TIM_DMABase_CCR1) || \ - ((BASE) == TIM_DMABase_CCR2) || \ - ((BASE) == TIM_DMABase_CCR3) || \ - ((BASE) == TIM_DMABase_CCR4) || \ - ((BASE) == TIM_DMABase_BDTR) || \ - ((BASE) == TIM_DMABase_DCR) || \ - ((BASE) == TIM_DMABase_OR)) -/** - * @} - */ - -/** @defgroup TIM_DMA_Burst_Length - * @{ - */ - -#define TIM_DMABurstLength_1Transfer ((uint16_t)0x0000) -#define TIM_DMABurstLength_2Transfers ((uint16_t)0x0100) -#define TIM_DMABurstLength_3Transfers ((uint16_t)0x0200) -#define TIM_DMABurstLength_4Transfers ((uint16_t)0x0300) -#define TIM_DMABurstLength_5Transfers ((uint16_t)0x0400) -#define TIM_DMABurstLength_6Transfers ((uint16_t)0x0500) -#define TIM_DMABurstLength_7Transfers ((uint16_t)0x0600) -#define TIM_DMABurstLength_8Transfers ((uint16_t)0x0700) -#define TIM_DMABurstLength_9Transfers ((uint16_t)0x0800) -#define TIM_DMABurstLength_10Transfers ((uint16_t)0x0900) -#define TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00) -#define TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00) -#define TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00) -#define TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00) -#define TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00) -#define TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00) -#define TIM_DMABurstLength_17Transfers ((uint16_t)0x1000) -#define TIM_DMABurstLength_18Transfers ((uint16_t)0x1100) -#define IS_TIM_DMA_LENGTH(LENGTH) (((LENGTH) == TIM_DMABurstLength_1Transfer) || \ - ((LENGTH) == TIM_DMABurstLength_2Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_3Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_4Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_5Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_6Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_7Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_8Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_9Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_10Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_11Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_12Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_13Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_14Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_15Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_16Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_17Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_18Transfers)) -/** - * @} - */ - -/** @defgroup TIM_DMA_sources - * @{ - */ - -#define TIM_DMA_Update ((uint16_t)0x0100) -#define TIM_DMA_CC1 ((uint16_t)0x0200) -#define TIM_DMA_CC2 ((uint16_t)0x0400) -#define TIM_DMA_CC3 ((uint16_t)0x0800) -#define TIM_DMA_CC4 ((uint16_t)0x1000) -#define TIM_DMA_COM ((uint16_t)0x2000) -#define TIM_DMA_Trigger ((uint16_t)0x4000) -#define IS_TIM_DMA_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0x80FF) == 0x0000) && ((SOURCE) != 0x0000)) - -/** - * @} - */ - -/** @defgroup TIM_External_Trigger_Prescaler - * @{ - */ - -#define TIM_ExtTRGPSC_OFF ((uint16_t)0x0000) -#define TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000) -#define TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000) -#define TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000) -#define IS_TIM_EXT_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ExtTRGPSC_OFF) || \ - ((PRESCALER) == TIM_ExtTRGPSC_DIV2) || \ - ((PRESCALER) == TIM_ExtTRGPSC_DIV4) || \ - ((PRESCALER) == TIM_ExtTRGPSC_DIV8)) -/** - * @} - */ - -/** @defgroup TIM_Internal_Trigger_Selection - * @{ - */ - -#define TIM_TS_ITR0 ((uint16_t)0x0000) -#define TIM_TS_ITR1 ((uint16_t)0x0010) -#define TIM_TS_ITR2 ((uint16_t)0x0020) -#define TIM_TS_ITR3 ((uint16_t)0x0030) -#define TIM_TS_TI1F_ED ((uint16_t)0x0040) -#define TIM_TS_TI1FP1 ((uint16_t)0x0050) -#define TIM_TS_TI2FP2 ((uint16_t)0x0060) -#define TIM_TS_ETRF ((uint16_t)0x0070) -#define IS_TIM_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ - ((SELECTION) == TIM_TS_ITR1) || \ - ((SELECTION) == TIM_TS_ITR2) || \ - ((SELECTION) == TIM_TS_ITR3) || \ - ((SELECTION) == TIM_TS_TI1F_ED) || \ - ((SELECTION) == TIM_TS_TI1FP1) || \ - ((SELECTION) == TIM_TS_TI2FP2) || \ - ((SELECTION) == TIM_TS_ETRF)) -#define IS_TIM_INTERNAL_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ - ((SELECTION) == TIM_TS_ITR1) || \ - ((SELECTION) == TIM_TS_ITR2) || \ - ((SELECTION) == TIM_TS_ITR3)) -/** - * @} - */ - -/** @defgroup TIM_TIx_External_Clock_Source - * @{ - */ - -#define TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050) -#define TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060) -#define TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040) - -/** - * @} - */ - -/** @defgroup TIM_External_Trigger_Polarity - * @{ - */ -#define TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000) -#define TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000) -#define IS_TIM_EXT_POLARITY(POLARITY) (((POLARITY) == TIM_ExtTRGPolarity_Inverted) || \ - ((POLARITY) == TIM_ExtTRGPolarity_NonInverted)) -/** - * @} - */ - -/** @defgroup TIM_Prescaler_Reload_Mode - * @{ - */ - -#define TIM_PSCReloadMode_Update ((uint16_t)0x0000) -#define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001) -#define IS_TIM_PRESCALER_RELOAD(RELOAD) (((RELOAD) == TIM_PSCReloadMode_Update) || \ - ((RELOAD) == TIM_PSCReloadMode_Immediate)) -/** - * @} - */ - -/** @defgroup TIM_Forced_Action - * @{ - */ - -#define TIM_ForcedAction_Active ((uint16_t)0x0050) -#define TIM_ForcedAction_InActive ((uint16_t)0x0040) -#define IS_TIM_FORCED_ACTION(ACTION) (((ACTION) == TIM_ForcedAction_Active) || \ - ((ACTION) == TIM_ForcedAction_InActive)) -/** - * @} - */ - -/** @defgroup TIM_Encoder_Mode - * @{ - */ - -#define TIM_EncoderMode_TI1 ((uint16_t)0x0001) -#define TIM_EncoderMode_TI2 ((uint16_t)0x0002) -#define TIM_EncoderMode_TI12 ((uint16_t)0x0003) -#define IS_TIM_ENCODER_MODE(MODE) (((MODE) == TIM_EncoderMode_TI1) || \ - ((MODE) == TIM_EncoderMode_TI2) || \ - ((MODE) == TIM_EncoderMode_TI12)) -/** - * @} - */ - - -/** @defgroup TIM_Event_Source - * @{ - */ - -#define TIM_EventSource_Update ((uint16_t)0x0001) -#define TIM_EventSource_CC1 ((uint16_t)0x0002) -#define TIM_EventSource_CC2 ((uint16_t)0x0004) -#define TIM_EventSource_CC3 ((uint16_t)0x0008) -#define TIM_EventSource_CC4 ((uint16_t)0x0010) -#define TIM_EventSource_COM ((uint16_t)0x0020) -#define TIM_EventSource_Trigger ((uint16_t)0x0040) -#define TIM_EventSource_Break ((uint16_t)0x0080) -#define IS_TIM_EVENT_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0xFF00) == 0x0000) && ((SOURCE) != 0x0000)) - -/** - * @} - */ - -/** @defgroup TIM_Update_Source - * @{ - */ - -#define TIM_UpdateSource_Global ((uint16_t)0x0000) /*!< Source of update is the counter overflow/underflow - or the setting of UG bit, or an update generation - through the slave mode controller. */ -#define TIM_UpdateSource_Regular ((uint16_t)0x0001) /*!< Source of update is counter overflow/underflow. */ -#define IS_TIM_UPDATE_SOURCE(SOURCE) (((SOURCE) == TIM_UpdateSource_Global) || \ - ((SOURCE) == TIM_UpdateSource_Regular)) -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Preload_State - * @{ - */ - -#define TIM_OCPreload_Enable ((uint16_t)0x0008) -#define TIM_OCPreload_Disable ((uint16_t)0x0000) -#define IS_TIM_OCPRELOAD_STATE(STATE) (((STATE) == TIM_OCPreload_Enable) || \ - ((STATE) == TIM_OCPreload_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Fast_State - * @{ - */ - -#define TIM_OCFast_Enable ((uint16_t)0x0004) -#define TIM_OCFast_Disable ((uint16_t)0x0000) -#define IS_TIM_OCFAST_STATE(STATE) (((STATE) == TIM_OCFast_Enable) || \ - ((STATE) == TIM_OCFast_Disable)) - -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Clear_State - * @{ - */ - -#define TIM_OCClear_Enable ((uint16_t)0x0080) -#define TIM_OCClear_Disable ((uint16_t)0x0000) -#define IS_TIM_OCCLEAR_STATE(STATE) (((STATE) == TIM_OCClear_Enable) || \ - ((STATE) == TIM_OCClear_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Trigger_Output_Source - * @{ - */ - -#define TIM_TRGOSource_Reset ((uint16_t)0x0000) -#define TIM_TRGOSource_Enable ((uint16_t)0x0010) -#define TIM_TRGOSource_Update ((uint16_t)0x0020) -#define TIM_TRGOSource_OC1 ((uint16_t)0x0030) -#define TIM_TRGOSource_OC1Ref ((uint16_t)0x0040) -#define TIM_TRGOSource_OC2Ref ((uint16_t)0x0050) -#define TIM_TRGOSource_OC3Ref ((uint16_t)0x0060) -#define TIM_TRGOSource_OC4Ref ((uint16_t)0x0070) -#define IS_TIM_TRGO_SOURCE(SOURCE) (((SOURCE) == TIM_TRGOSource_Reset) || \ - ((SOURCE) == TIM_TRGOSource_Enable) || \ - ((SOURCE) == TIM_TRGOSource_Update) || \ - ((SOURCE) == TIM_TRGOSource_OC1) || \ - ((SOURCE) == TIM_TRGOSource_OC1Ref) || \ - ((SOURCE) == TIM_TRGOSource_OC2Ref) || \ - ((SOURCE) == TIM_TRGOSource_OC3Ref) || \ - ((SOURCE) == TIM_TRGOSource_OC4Ref)) -/** - * @} - */ - -/** @defgroup TIM_Slave_Mode - * @{ - */ - -#define TIM_SlaveMode_Reset ((uint16_t)0x0004) -#define TIM_SlaveMode_Gated ((uint16_t)0x0005) -#define TIM_SlaveMode_Trigger ((uint16_t)0x0006) -#define TIM_SlaveMode_External1 ((uint16_t)0x0007) -#define IS_TIM_SLAVE_MODE(MODE) (((MODE) == TIM_SlaveMode_Reset) || \ - ((MODE) == TIM_SlaveMode_Gated) || \ - ((MODE) == TIM_SlaveMode_Trigger) || \ - ((MODE) == TIM_SlaveMode_External1)) -/** - * @} - */ - -/** @defgroup TIM_Master_Slave_Mode - * @{ - */ - -#define TIM_MasterSlaveMode_Enable ((uint16_t)0x0080) -#define TIM_MasterSlaveMode_Disable ((uint16_t)0x0000) -#define IS_TIM_MSM_STATE(STATE) (((STATE) == TIM_MasterSlaveMode_Enable) || \ - ((STATE) == TIM_MasterSlaveMode_Disable)) -/** - * @} - */ -/** @defgroup TIM_Remap - * @{ - */ - -#define TIM2_TIM8_TRGO ((uint16_t)0x0000) -#define TIM2_ETH_PTP ((uint16_t)0x0400) -#define TIM2_USBFS_SOF ((uint16_t)0x0800) -#define TIM2_USBHS_SOF ((uint16_t)0x0C00) - -#define TIM5_GPIO ((uint16_t)0x0000) -#define TIM5_LSI ((uint16_t)0x0040) -#define TIM5_LSE ((uint16_t)0x0080) -#define TIM5_RTC ((uint16_t)0x00C0) - -#define TIM11_GPIO ((uint16_t)0x0000) -#define TIM11_HSE ((uint16_t)0x0002) - -#define IS_TIM_REMAP(TIM_REMAP) (((TIM_REMAP) == TIM2_TIM8_TRGO)||\ - ((TIM_REMAP) == TIM2_ETH_PTP)||\ - ((TIM_REMAP) == TIM2_USBFS_SOF)||\ - ((TIM_REMAP) == TIM2_USBHS_SOF)||\ - ((TIM_REMAP) == TIM5_GPIO)||\ - ((TIM_REMAP) == TIM5_LSI)||\ - ((TIM_REMAP) == TIM5_LSE)||\ - ((TIM_REMAP) == TIM5_RTC)||\ - ((TIM_REMAP) == TIM11_GPIO)||\ - ((TIM_REMAP) == TIM11_HSE)) - -/** - * @} - */ -/** @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)) - -/** - * @} - */ - -/** @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 -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* TimeBase management ********************************************************/ -void TIM_DeInit(TIM_TypeDef* TIMx); -void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); -void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); -void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode); -void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode); -void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter); -void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload); -uint32_t TIM_GetCounter(TIM_TypeDef* TIMx); -uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx); -void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource); -void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode); -void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD); -void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); - -/* Output Compare management **************************************************/ -void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode); -void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1); -void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2); -void TIM_SetCompare3(TIM_TypeDef* TIMx, uint32_t Compare3); -void TIM_SetCompare4(TIM_TypeDef* TIMx, uint32_t Compare4); -void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_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); - -/* Input Capture management ***************************************************/ -void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); -void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct); -void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); -uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx); -uint32_t TIM_GetCapture2(TIM_TypeDef* TIMx); -uint32_t TIM_GetCapture3(TIM_TypeDef* TIMx); -uint32_t TIM_GetCapture4(TIM_TypeDef* TIMx); -void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); - -/* Advanced-control timers (TIM1 and TIM8) specific features ******************/ -void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct); -void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct); -void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState); - -/* Interrupts, DMA and flags management ***************************************/ -void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); -void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource); -FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); -void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); -ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT); -void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT); -void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength); -void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState); -void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState); - -/* Clocks management **********************************************************/ -void TIM_InternalClockConfig(TIM_TypeDef* TIMx); -void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); -void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, - uint16_t TIM_ICPolarity, uint16_t ICFilter); -void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); -void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, - uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter); - -/* Synchronization management *************************************************/ -void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); -void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource); -void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); -void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode); -void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); - -/* Specific interface management **********************************************/ -void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, - uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity); -void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState); - -/* Specific remapping management **********************************************/ -void TIM_RemapConfig(TIM_TypeDef* TIMx, uint16_t TIM_Remap); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_TIM_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h deleted file mode 100644 index 391fe769..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h +++ /dev/null @@ -1,431 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_usart.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the USART - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_USART_H -#define __STM32F4xx_USART_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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) / (8 * (OVR8+1) * (USART_InitStruct->USART_BaudRate))) - - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 8 * (OVR8+1)) + 0.5 - Where OVR8 is the "oversampling by 8 mode" configuration bit in the CR1 register. */ - - 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 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup USART_Exported_Constants - * @{ - */ - -#define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == USART1) || \ - ((PERIPH) == USART2) || \ - ((PERIPH) == USART3) || \ - ((PERIPH) == UART4) || \ - ((PERIPH) == UART5) || \ - ((PERIPH) == USART6) || \ - ((PERIPH) == UART7) || \ - ((PERIPH) == UART8)) - -#define IS_USART_1236_PERIPH(PERIPH) (((PERIPH) == USART1) || \ - ((PERIPH) == USART2) || \ - ((PERIPH) == USART3) || \ - ((PERIPH) == USART6)) - -/** @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_ORE_RX ((uint16_t)0x0325) /* In case interrupt is generated if the RXNEIE bit is set */ -#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_ER ((uint16_t)0x0360) /* In case interrupt is generated if the EIE bit is set */ -#define USART_IT_NE ((uint16_t)0x0260) -#define USART_IT_FE ((uint16_t)0x0160) - -/** @defgroup USART_Legacy - * @{ - */ -#define USART_IT_ORE USART_IT_ORE_ER -/** - * @} - */ - -#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_ORE_RX) || ((IT) == USART_IT_ORE_ER) || \ - ((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_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) < 7500001)) -#define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF) -#define IS_USART_DATA(DATA) ((DATA) <= 0x1FF) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the USART configuration to the default reset state ***/ -void USART_DeInit(USART_TypeDef* USARTx); - -/* Initialization and Configuration functions *********************************/ -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_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler); -void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState); - -/* Data transfers functions ***************************************************/ -void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); -uint16_t USART_ReceiveData(USART_TypeDef* USARTx); - -/* Multi-Processor Communication functions ************************************/ -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); - -/* LIN mode functions *********************************************************/ -void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength); -void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_SendBreak(USART_TypeDef* USARTx); - -/* Half-duplex mode function **************************************************/ -void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState); - -/* Smartcard mode functions ***************************************************/ -void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime); - -/* IrDA mode functions ********************************************************/ -void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode); -void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState); - -/* DMA transfers management functions *****************************************/ -void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, 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 /* __STM32F4xx_USART_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h deleted file mode 100644 index d98e6cc8..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h +++ /dev/null @@ -1,111 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_wwdg.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the WWDG firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_WWDG_H -#define __STM32F4xx_WWDG_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup WWDG - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @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)) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the WWDG configuration to the default reset state ****/ -void WWDG_DeInit(void); - -/* Prescaler, Refresh window and Counter configuration functions **************/ -void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); -void WWDG_SetWindowValue(uint8_t WindowValue); -void WWDG_EnableIT(void); -void WWDG_SetCounter(uint8_t Counter); - -/* WWDG activation function ***************************************************/ -void WWDG_Enable(uint8_t Counter); - -/* Interrupts and flags management functions **********************************/ -FlagStatus WWDG_GetFlagStatus(void); -void WWDG_ClearFlag(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_WWDG_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/misc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/misc.c deleted file mode 100644 index f569997e..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/misc.c +++ /dev/null @@ -1,249 +0,0 @@ -/** - ****************************************************************************** - * @file misc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides all the miscellaneous firmware functions (add-on - * to CMSIS functions). - * - * @verbatim - * - * =================================================================== - * How to configure Interrupts using driver - * =================================================================== - * - * This section provide functions allowing to configure the NVIC interrupts (IRQ). - * The Cortex-M4 exceptions are managed by CMSIS functions. - * - * 1. Configure the NVIC Priority Grouping using NVIC_PriorityGroupConfig() - * function according to the following table. - - * 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 - * ========================================================================================================================== - * - * 2. Enable and Configure the priority of the selected IRQ Channels using NVIC_Init() - * - * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. - * The pending IRQ priority will be managed only by the subpriority. - * - * @note IRQ priority order (sorted by highest to lowest priority): - * - Lowest pre-emption priority - * - Lowest subpriority - * - Lowest hardware priority (IRQ number) - * - * @endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "misc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup MISC - * @brief MISC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @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 - * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. - * The pending IRQ priority will be managed only by the 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. - * @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig() - * function should be called before. - * @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) -{ - uint8_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 = NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre; - tmppriority |= (uint8_t)(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: Vector Table in internal SRAM. - * @arg NVIC_VectTab_FLASH: Vector Table in internal 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: Low Power SEV on Pend. - * @arg NVIC_LP_SLEEPDEEP: Low Power DEEPSLEEP request. - * @arg NVIC_LP_SLEEPONEXIT: Low Power Sleep on Exit. - * @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c deleted file mode 100644 index 8f6a492d..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c +++ /dev/null @@ -1,1741 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_adc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Analog to Digital Convertor (ADC) peripheral: - * + Initialization and Configuration (in addition to ADC multi mode - * selection) - * + Analog Watchdog configuration - * + Temperature Sensor & Vrefint (Voltage Reference internal) & VBAT - * management - * + Regular Channels Configuration - * + Regular Channels DMA Configuration - * + Injected channels Configuration - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable the ADC interface clock using - RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADCx, ENABLE); - - (#) ADC pins configuration - (++) Enable the clock for the ADC GPIOs using the following function: - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - (++) Configure these ADC pins in analog mode using GPIO_Init(); - - (#) Configure the ADC Prescaler, conversion resolution and data - alignment using the ADC_Init() function. - (#) Activate the ADC peripheral using ADC_Cmd() function. - - *** Regular channels group configuration *** - ============================================ - [..] - (+) To configure the ADC regular channels group features, use - ADC_Init() and ADC_RegularChannelConfig() functions. - (+) To activate the continuous mode, use the ADC_continuousModeCmd() - function. - (+) To configurate and activate the Discontinuous mode, use the - ADC_DiscModeChannelCountConfig() and ADC_DiscModeCmd() functions. - (+) To read the ADC converted values, use the ADC_GetConversionValue() - function. - - *** Multi mode ADCs Regular channels configuration *** - ====================================================== - [..] - (+) Refer to "Regular channels group configuration" description to - configure the ADC1, ADC2 and ADC3 regular channels. - (+) Select the Multi mode ADC regular channels features (dual or - triple mode) using ADC_CommonInit() function and configure - the DMA mode using ADC_MultiModeDMARequestAfterLastTransferCmd() - functions. - (+) Read the ADCs converted values using the - ADC_GetMultiModeConversionValue() function. - - *** DMA for Regular channels group features configuration *** - ============================================================= - [..] - (+) To enable the DMA mode for regular channels group, use the - ADC_DMACmd() function. - (+) To enable the generation of DMA requests continuously at the end - of the last DMA transfer, use the ADC_DMARequestAfterLastTransferCmd() - function. - - *** Injected channels group configuration *** - ============================================= - [..] - (+) To configure the ADC Injected channels group features, use - ADC_InjectedChannelConfig() and ADC_InjectedSequencerLengthConfig() - functions. - (+) To activate the continuous mode, use the ADC_continuousModeCmd() - function. - (+) To activate the Injected Discontinuous mode, use the - ADC_InjectedDiscModeCmd() function. - (+) To activate the AutoInjected mode, use the ADC_AutoInjectedConvCmd() - function. - (+) To read the ADC converted values, use the ADC_GetInjectedConversionValue() - function. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_adc.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup ADC - * @brief ADC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* ADC DISCNUM mask */ -#define CR1_DISCNUM_RESET ((uint32_t)0xFFFF1FFF) - -/* 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)0xFCFFFEFF) - -/* ADC EXTEN mask */ -#define CR2_EXTEN_RESET ((uint32_t)0xCFFFFFFF) - -/* ADC JEXTEN mask */ -#define CR2_JEXTEN_RESET ((uint32_t)0xFFCFFFFF) - -/* ADC JEXTSEL mask */ -#define CR2_JEXTSEL_RESET ((uint32_t)0xFFF0FFFF) - -/* CR2 register Mask */ -#define CR2_CLEAR_MASK ((uint32_t)0xC0FFF7FD) - -/* ADC SQx mask */ -#define SQR3_SQ_SET ((uint32_t)0x0000001F) -#define SQR2_SQ_SET ((uint32_t)0x0000001F) -#define SQR1_SQ_SET ((uint32_t)0x0000001F) - -/* ADC L Mask */ -#define SQR1_L_RESET ((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) - -/* ADC CDR register base address */ -#define CDR_ADDRESS ((uint32_t)0x40012308) - -/* ADC CCR register Mask */ -#define CR_CLEAR_MASK ((uint32_t)0xFFFC30E0) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup ADC_Private_Functions - * @{ - */ - -/** @defgroup ADC_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to: - (+) Initialize and configure the ADC Prescaler - (+) ADC Conversion Resolution (12bit..6bit) - (+) Scan Conversion Mode (multichannel or one channel) for regular group - (+) ADC Continuous Conversion Mode (Continuous or Single conversion) for - regular group - (+) External trigger Edge and source of regular group, - (+) Converted data alignment (left or right) - (+) The number of ADC conversions that will be done using the sequencer for - regular channel group - (+) Multi ADC mode selection - (+) Direct memory access mode selection for multi ADC mode - (+) Delay between 2 sampling phases (used in dual or triple interleaved modes) - (+) Enable or disable the ADC peripheral -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes all ADCs peripherals registers to their default reset - * values. - * @param None - * @retval None - */ -void ADC_DeInit(void) -{ - /* Enable all ADCs reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC, ENABLE); - - /* Release all ADCs from reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC, DISABLE); -} - -/** - * @brief Initializes the ADCx peripheral according to the specified parameters - * in the ADC_InitStruct. - * @note This function is used to configure the global features of the ADC ( - * Resolution and Data Alignment), however, the rest of the configuration - * parameters are specific to the regular channels group (scan mode - * activation, continuous mode activation, External trigger source and - * edge, number of conversion in the regular channels group sequencer). - * @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_RESOLUTION(ADC_InitStruct->ADC_Resolution)); - assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ScanConvMode)); - assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ContinuousConvMode)); - assert_param(IS_ADC_EXT_TRIG_EDGE(ADC_InitStruct->ADC_ExternalTrigConvEdge)); - 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_NbrOfConversion)); - - /*---------------------------- ADCx CR1 Configuration -----------------*/ - /* Get the ADCx CR1 value */ - tmpreg1 = ADCx->CR1; - - /* Clear RES and SCAN bits */ - tmpreg1 &= CR1_CLEAR_MASK; - - /* Configure ADCx: scan conversion mode and resolution */ - /* Set SCAN bit according to ADC_ScanConvMode value */ - /* Set RES bit according to ADC_Resolution value */ - tmpreg1 |= (uint32_t)(((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8) | \ - ADC_InitStruct->ADC_Resolution); - /* Write to ADCx CR1 */ - ADCx->CR1 = tmpreg1; - /*---------------------------- ADCx CR2 Configuration -----------------*/ - /* Get the ADCx CR2 value */ - tmpreg1 = ADCx->CR2; - - /* Clear CONT, ALIGN, EXTEN and EXTSEL bits */ - tmpreg1 &= CR2_CLEAR_MASK; - - /* Configure ADCx: external trigger event and edge, data alignment and - continuous conversion mode */ - /* Set ALIGN bit according to ADC_DataAlign value */ - /* Set EXTEN bits according to ADC_ExternalTrigConvEdge 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 | - ADC_InitStruct->ADC_ExternalTrigConvEdge | \ - ((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_L_RESET; - - /* Configure ADCx: regular channel sequence length */ - /* Set L bits according to ADC_NbrOfConversion value */ - tmpreg2 |= (uint8_t)(ADC_InitStruct->ADC_NbrOfConversion - (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. - * @note This function is used to initialize the global features of the ADC ( - * Resolution and Data Alignment), however, the rest of the configuration - * parameters are specific to the regular channels group (scan mode - * activation, continuous mode activation, External trigger source and - * edge, number of conversion in the regular channels group sequencer). - * @param ADC_InitStruct: pointer to an ADC_InitTypeDef structure which will - * be initialized. - * @retval None - */ -void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct) -{ - /* Initialize the ADC_Mode member */ - ADC_InitStruct->ADC_Resolution = ADC_Resolution_12b; - - /* initialize the ADC_ScanConvMode member */ - ADC_InitStruct->ADC_ScanConvMode = DISABLE; - - /* Initialize the ADC_ContinuousConvMode member */ - ADC_InitStruct->ADC_ContinuousConvMode = DISABLE; - - /* Initialize the ADC_ExternalTrigConvEdge member */ - ADC_InitStruct->ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; - - /* 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_NbrOfConversion member */ - ADC_InitStruct->ADC_NbrOfConversion = 1; -} - -/** - * @brief Initializes the ADCs peripherals according to the specified parameters - * in the ADC_CommonInitStruct. - * @param ADC_CommonInitStruct: pointer to an ADC_CommonInitTypeDef structure - * that contains the configuration information for All ADCs peripherals. - * @retval None - */ -void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct) -{ - uint32_t tmpreg1 = 0; - /* Check the parameters */ - assert_param(IS_ADC_MODE(ADC_CommonInitStruct->ADC_Mode)); - assert_param(IS_ADC_PRESCALER(ADC_CommonInitStruct->ADC_Prescaler)); - assert_param(IS_ADC_DMA_ACCESS_MODE(ADC_CommonInitStruct->ADC_DMAAccessMode)); - assert_param(IS_ADC_SAMPLING_DELAY(ADC_CommonInitStruct->ADC_TwoSamplingDelay)); - /*---------------------------- ADC CCR Configuration -----------------*/ - /* Get the ADC CCR value */ - tmpreg1 = ADC->CCR; - - /* Clear MULTI, DELAY, DMA and ADCPRE bits */ - tmpreg1 &= CR_CLEAR_MASK; - - /* Configure ADCx: Multi mode, Delay between two sampling time, ADC prescaler, - and DMA access mode for multimode */ - /* Set MULTI bits according to ADC_Mode value */ - /* Set ADCPRE bits according to ADC_Prescaler value */ - /* Set DMA bits according to ADC_DMAAccessMode value */ - /* Set DELAY bits according to ADC_TwoSamplingDelay value */ - tmpreg1 |= (uint32_t)(ADC_CommonInitStruct->ADC_Mode | - ADC_CommonInitStruct->ADC_Prescaler | - ADC_CommonInitStruct->ADC_DMAAccessMode | - ADC_CommonInitStruct->ADC_TwoSamplingDelay); - - /* Write to ADC CCR */ - ADC->CCR = tmpreg1; -} - -/** - * @brief Fills each ADC_CommonInitStruct member with its default value. - * @param ADC_CommonInitStruct: pointer to an ADC_CommonInitTypeDef structure - * which will be initialized. - * @retval None - */ -void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct) -{ - /* Initialize the ADC_Mode member */ - ADC_CommonInitStruct->ADC_Mode = ADC_Mode_Independent; - - /* initialize the ADC_Prescaler member */ - ADC_CommonInitStruct->ADC_Prescaler = ADC_Prescaler_Div2; - - /* Initialize the ADC_DMAAccessMode member */ - ADC_CommonInitStruct->ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; - - /* Initialize the ADC_TwoSamplingDelay member */ - ADC_CommonInitStruct->ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; -} - -/** - * @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 |= (uint32_t)ADC_CR2_ADON; - } - else - { - /* Disable the selected ADC peripheral */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_ADON); - } -} -/** - * @} - */ - -/** @defgroup ADC_Group2 Analog Watchdog configuration functions - * @brief Analog Watchdog configuration functions - * -@verbatim - =============================================================================== - ##### Analog Watchdog configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to configure the Analog Watchdog - (AWD) feature in the ADC. - - [..] A typical configuration Analog Watchdog is done following these steps : - (#) the ADC guarded channel(s) is (are) selected using the - ADC_AnalogWatchdogSingleChannelConfig() function. - (#) The Analog watchdog lower and higher threshold are configured using the - ADC_AnalogWatchdogThresholdsConfig() function. - (#) The Analog watchdog is enabled and configured to enable the check, on one - or more channels, using the ADC_AnalogWatchdogCmd() function. -@endverbatim - * @{ - */ - -/** - * @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, JAWDEN 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 12-bit value. - * @param LowThreshold: the ADC analog watchdog Low threshold value. - * This parameter must be a 12-bit 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 - * @arg ADC_Channel_18: ADC Channel18 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; -} -/** - * @} - */ - -/** @defgroup ADC_Group3 Temperature Sensor, Vrefint (Voltage Reference internal) - * and VBAT (Voltage BATtery) management functions - * @brief Temperature Sensor, Vrefint and VBAT management functions - * -@verbatim - =============================================================================== - ##### Temperature Sensor, Vrefint and VBAT management functions ##### - =============================================================================== - [..] This section provides functions allowing to enable/ disable the internal - connections between the ADC and the Temperature Sensor, the Vrefint and - the Vbat sources. - - [..] A typical configuration to get the Temperature sensor and Vrefint channels - voltages is done following these steps : - (#) Enable the internal connection of Temperature sensor and Vrefint sources - with the ADC channels using ADC_TempSensorVrefintCmd() function. - (#) Select the ADC_Channel_TempSensor and/or ADC_Channel_Vrefint using - ADC_RegularChannelConfig() or ADC_InjectedChannelConfig() functions - (#) Get the voltage values, using ADC_GetConversionValue() or - ADC_GetInjectedConversionValue(). - - [..] A typical configuration to get the VBAT channel voltage is done following - these steps : - (#) Enable the internal connection of VBAT source with the ADC channel using - ADC_VBATCmd() function. - (#) Select the ADC_Channel_Vbat using ADC_RegularChannelConfig() or - ADC_InjectedChannelConfig() functions - (#) Get the voltage value, using ADC_GetConversionValue() or - ADC_GetInjectedConversionValue(). - -@endverbatim - * @{ - */ - - -/** - * @brief Enables or disables the temperature sensor and Vrefint channels. - * @param NewState: new state of the temperature sensor and Vrefint channels. - * 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*/ - ADC->CCR |= (uint32_t)ADC_CCR_TSVREFE; - } - else - { - /* Disable the temperature sensor and Vrefint channel*/ - ADC->CCR &= (uint32_t)(~ADC_CCR_TSVREFE); - } -} - -/** - * @brief Enables or disables the VBAT (Voltage Battery) channel. - * @param NewState: new state of the VBAT channel. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_VBATCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - /* Enable the VBAT channel*/ - ADC->CCR |= (uint32_t)ADC_CCR_VBATE; - } - else - { - /* Disable the VBAT channel*/ - ADC->CCR &= (uint32_t)(~ADC_CCR_VBATE); - } -} - -/** - * @} - */ - -/** @defgroup ADC_Group4 Regular Channels Configuration functions - * @brief Regular Channels Configuration functions - * -@verbatim - =============================================================================== - ##### Regular Channels Configuration functions ##### - =============================================================================== - - [..] This section provides functions allowing to manage the ADC's regular channels, - it is composed of 2 sub sections : - - (#) Configuration and management functions for regular channels: This subsection - provides functions allowing to configure the ADC regular channels : - (++) Configure the rank in the regular group sequencer for each channel - (++) Configure the sampling time for each channel - (++) select the conversion Trigger for regular channels - (++) select the desired EOC event behavior configuration - (++) Activate the continuous Mode (*) - (++) Activate the Discontinuous Mode - -@@- Please Note that the following features for regular channels - are configurated using the ADC_Init() function : - (+@@) scan mode activation - (+@@) continuous mode activation (**) - (+@@) External trigger source - (+@@) External trigger edge - (+@@) number of conversion in the regular channels group sequencer. - - -@@- (*) and (**) are performing the same configuration - - (#) Get the conversion data: This subsection provides an important function in - the ADC peripheral since it returns the converted data of the current - regular channel. When the Conversion value is read, the EOC Flag is - automatically cleared. - - -@- For multi ADC mode, the last ADC1, ADC2 and ADC3 regular conversions - results data (in the selected multi mode) can be returned in the same - time using ADC_GetMultiModeConversionValue() function. - -@endverbatim - * @{ - */ -/** - * @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 - * @arg ADC_Channel_18: ADC Channel18 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_3Cycles: Sample time equal to 3 cycles - * @arg ADC_SampleTime_15Cycles: Sample time equal to 15 cycles - * @arg ADC_SampleTime_28Cycles: Sample time equal to 28 cycles - * @arg ADC_SampleTime_56Cycles: Sample time equal to 56 cycles - * @arg ADC_SampleTime_84Cycles: Sample time equal to 84 cycles - * @arg ADC_SampleTime_112Cycles: Sample time equal to 112 cycles - * @arg ADC_SampleTime_144Cycles: Sample time equal to 144 cycles - * @arg ADC_SampleTime_480Cycles: Sample time equal to 480 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_18 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 sample time */ - tmpreg1 &= ~tmpreg2; - - /* Calculate the mask to set */ - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10)); - - /* Set the new 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 sample time */ - tmpreg1 &= ~tmpreg2; - - /* Calculate the mask to set */ - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); - - /* Set the new 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 the selected ADC software start conversion of the regular channels. - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @retval None - */ -void ADC_SoftwareStartConv(ADC_TypeDef* ADCx) -{ - /* Check the parameters */ - assert_param(IS_ADC_ALL_PERIPH(ADCx)); - - /* Enable the selected ADC conversion for regular group */ - ADCx->CR2 |= (uint32_t)ADC_CR2_SWSTART; -} - -/** - * @brief Gets the selected ADC Software start regular 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 & ADC_CR2_JSWSTART) != (uint32_t)RESET) - { - /* SWSTART bit is set */ - bitstatus = SET; - } - else - { - /* SWSTART bit is reset */ - bitstatus = RESET; - } - - /* Return the SWSTART bit status */ - return bitstatus; -} - - -/** - * @brief Enables or disables the EOC on each regular channel conversion - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param NewState: new state of the selected ADC EOC flag rising - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_EOCOnEachRegularChannelCmd(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 EOC rising on each regular channel conversion */ - ADCx->CR2 |= (uint32_t)ADC_CR2_EOCS; - } - else - { - /* Disable the selected ADC EOC rising on each regular channel conversion */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_EOCS); - } -} - -/** - * @brief Enables or disables the ADC continuous conversion mode - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param NewState: new state of the selected ADC continuous conversion mode - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_ContinuousModeCmd(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 continuous conversion mode */ - ADCx->CR2 |= (uint32_t)ADC_CR2_CONT; - } - else - { - /* Disable the selected ADC continuous conversion mode */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_CONT); - } -} - -/** - * @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 |= (uint32_t)ADC_CR1_DISCEN; - } - else - { - /* Disable the selected ADC regular discontinuous mode */ - ADCx->CR1 &= (uint32_t)(~ADC_CR1_DISCEN); - } -} - -/** - * @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, ADC2 and ADC3 regular conversions results - * data in the selected multi mode. - * @param None - * @retval The Data conversion value. - * @note In dual mode, the value returned by this function is as following - * Data[15:0] : these bits contain the regular data of ADC1. - * Data[31:16]: these bits contain the regular data of ADC2. - * @note In triple mode, the value returned by this function is as following - * Data[15:0] : these bits contain alternatively the regular data of ADC1, ADC3 and ADC2. - * Data[31:16]: these bits contain alternatively the regular data of ADC2, ADC1 and ADC3. - */ -uint32_t ADC_GetMultiModeConversionValue(void) -{ - /* Return the multi mode conversion value */ - return (*(__IO uint32_t *) CDR_ADDRESS); -} -/** - * @} - */ - -/** @defgroup ADC_Group5 Regular Channels DMA Configuration functions - * @brief Regular Channels DMA Configuration functions - * -@verbatim - =============================================================================== - ##### Regular Channels DMA Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to configure the DMA for ADC - regular channels. - Since converted regular channel values are stored into a unique data - register, it is useful to use DMA for conversion of more than one regular - channel. This avoids the loss of the data already stored in the ADC - Data register. - When the DMA mode is enabled (using the ADC_DMACmd() function), after each - conversion of a regular channel, a DMA request is generated. - [..] Depending on the "DMA disable selection for Independent ADC mode" - configuration (using the ADC_DMARequestAfterLastTransferCmd() function), - at the end of the last DMA transfer, two possibilities are allowed: - (+) No new DMA request is issued to the DMA controller (feature DISABLED) - (+) Requests can continue to be generated (feature ENABLED). - [..] Depending on the "DMA disable selection for multi ADC mode" configuration - (using the void ADC_MultiModeDMARequestAfterLastTransferCmd() function), - at the end of the last DMA transfer, two possibilities are allowed: - (+) No new DMA request is issued to the DMA controller (feature DISABLED) - (+) Requests can continue to be generated (feature ENABLED). - -@endverbatim - * @{ - */ - - /** - * @brief Enables or disables the specified ADC DMA request. - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param NewState: new state of the selected ADC DMA transfer. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ADC_ALL_PERIPH(ADCx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - /* Enable the selected ADC DMA request */ - ADCx->CR2 |= (uint32_t)ADC_CR2_DMA; - } - else - { - /* Disable the selected ADC DMA request */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_DMA); - } -} - -/** - * @brief Enables or disables the ADC DMA request after last transfer (Single-ADC mode) - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param NewState: new state of the selected ADC DMA request after last transfer. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_DMARequestAfterLastTransferCmd(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 DMA request after last transfer */ - ADCx->CR2 |= (uint32_t)ADC_CR2_DDS; - } - else - { - /* Disable the selected ADC DMA request after last transfer */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_DDS); - } -} - -/** - * @brief Enables or disables the ADC DMA request after last transfer in multi ADC mode - * @param NewState: new state of the selected ADC DMA request after last transfer. - * This parameter can be: ENABLE or DISABLE. - * @note if Enabled, DMA requests are issued as long as data are converted and - * DMA mode for multi ADC mode (selected using ADC_CommonInit() function - * by ADC_CommonInitStruct.ADC_DMAAccessMode structure member) is - * ADC_DMAAccessMode_1, ADC_DMAAccessMode_2 or ADC_DMAAccessMode_3. - * @retval None - */ -void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - /* Enable the selected ADC DMA request after last transfer */ - ADC->CCR |= (uint32_t)ADC_CCR_DDS; - } - else - { - /* Disable the selected ADC DMA request after last transfer */ - ADC->CCR &= (uint32_t)(~ADC_CCR_DDS); - } -} -/** - * @} - */ - -/** @defgroup ADC_Group6 Injected channels Configuration functions - * @brief Injected channels Configuration functions - * -@verbatim - =============================================================================== - ##### Injected channels Configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to configure the ADC Injected channels, - it is composed of 2 sub sections : - - (#) Configuration functions for Injected channels: This subsection provides - functions allowing to configure the ADC injected channels : - (++) Configure the rank in the injected group sequencer for each channel - (++) Configure the sampling time for each channel - (++) Activate the Auto injected Mode - (++) Activate the Discontinuous Mode - (++) scan mode activation - (++) External/software trigger source - (++) External trigger edge - (++) injected channels sequencer. - - (#) Get the Specified Injected channel conversion data: This subsection - provides an important function in the ADC peripheral since it returns the - converted data of the specific injected channel. - -@endverbatim - * @{ - */ -/** - * @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 - * @arg ADC_Channel_18: ADC Channel18 selected - * @param Rank: The rank in the injected group sequencer. - * This parameter must be between 1 to 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_3Cycles: Sample time equal to 3 cycles - * @arg ADC_SampleTime_15Cycles: Sample time equal to 15 cycles - * @arg ADC_SampleTime_28Cycles: Sample time equal to 28 cycles - * @arg ADC_SampleTime_56Cycles: Sample time equal to 56 cycles - * @arg ADC_SampleTime_84Cycles: Sample time equal to 84 cycles - * @arg ADC_SampleTime_112Cycles: Sample time equal to 112 cycles - * @arg ADC_SampleTime_144Cycles: Sample time equal to 144 cycles - * @arg ADC_SampleTime_480Cycles: Sample time equal to 480 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_18 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 sample time */ - tmpreg1 &= ~tmpreg2; - /* Calculate the mask to set */ - tmpreg2 = (uint32_t)ADC_SampleTime << (3*(ADC_Channel - 10)); - /* Set the new 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 sample time */ - tmpreg1 &= ~tmpreg2; - /* Calculate the mask to set */ - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); - /* Set the new 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 sequence length JL bits */ - tmpreg1 &= JSQR_JL_RESET; - - /* Set the injected sequence length 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 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_CC4: Timer1 capture compare4 selected - * @arg ADC_ExternalTrigInjecConv_T1_TRGO: Timer1 TRGO event selected - * @arg ADC_ExternalTrigInjecConv_T2_CC1: Timer2 capture compare1 selected - * @arg ADC_ExternalTrigInjecConv_T2_TRGO: Timer2 TRGO event selected - * @arg ADC_ExternalTrigInjecConv_T3_CC2: Timer3 capture compare2 selected - * @arg ADC_ExternalTrigInjecConv_T3_CC4: Timer3 capture compare4 selected - * @arg ADC_ExternalTrigInjecConv_T4_CC1: Timer4 capture compare1 selected - * @arg ADC_ExternalTrigInjecConv_T4_CC2: Timer4 capture compare2 selected - * @arg ADC_ExternalTrigInjecConv_T4_CC3: Timer4 capture compare3 selected - * @arg ADC_ExternalTrigInjecConv_T4_TRGO: Timer4 TRGO event selected - * @arg ADC_ExternalTrigInjecConv_T5_CC4: Timer5 capture compare4 selected - * @arg ADC_ExternalTrigInjecConv_T5_TRGO: Timer5 TRGO event selected - * @arg ADC_ExternalTrigInjecConv_T8_CC2: Timer8 capture compare2 selected - * @arg ADC_ExternalTrigInjecConv_T8_CC3: Timer8 capture compare3 selected - * @arg ADC_ExternalTrigInjecConv_T8_CC4: Timer8 capture compare4 selected - * @arg ADC_ExternalTrigInjecConv_Ext_IT15: External interrupt line 15 event selected - * @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 Configures the ADCx external trigger edge for injected channels conversion. - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param ADC_ExternalTrigInjecConvEdge: specifies the ADC external trigger edge - * to start injected conversion. - * This parameter can be one of the following values: - * @arg ADC_ExternalTrigInjecConvEdge_None: external trigger disabled for - * injected conversion - * @arg ADC_ExternalTrigInjecConvEdge_Rising: detection on rising edge - * @arg ADC_ExternalTrigInjecConvEdge_Falling: detection on falling edge - * @arg ADC_ExternalTrigInjecConvEdge_RisingFalling: detection on both rising - * and falling edge - * @retval None - */ -void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge) -{ - uint32_t tmpreg = 0; - /* Check the parameters */ - assert_param(IS_ADC_ALL_PERIPH(ADCx)); - assert_param(IS_ADC_EXT_INJEC_TRIG_EDGE(ADC_ExternalTrigInjecConvEdge)); - /* Get the old register value */ - tmpreg = ADCx->CR2; - /* Clear the old external trigger edge for injected group */ - tmpreg &= CR2_JEXTEN_RESET; - /* Set the new external trigger edge for injected group */ - tmpreg |= ADC_ExternalTrigInjecConvEdge; - /* Store the new register value */ - ADCx->CR2 = tmpreg; -} - -/** - * @brief Enables the selected ADC software start conversion of the injected channels. - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @retval None - */ -void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx) -{ - /* Check the parameters */ - assert_param(IS_ADC_ALL_PERIPH(ADCx)); - /* Enable the selected ADC conversion for injected group */ - ADCx->CR2 |= (uint32_t)ADC_CR2_JSWSTART; -} - -/** - * @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 & ADC_CR2_JSWSTART) != (uint32_t)RESET) - { - /* JSWSTART bit is set */ - bitstatus = SET; - } - else - { - /* JSWSTART bit is reset */ - bitstatus = RESET; - } - /* Return the JSWSTART bit status */ - return bitstatus; -} - -/** - * @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 |= (uint32_t)ADC_CR1_JAUTO; - } - else - { - /* Disable the selected ADC automatic injected group conversion */ - ADCx->CR1 &= (uint32_t)(~ADC_CR1_JAUTO); - } -} - -/** - * @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 |= (uint32_t)ADC_CR1_JDISCEN; - } - else - { - /* Disable the selected ADC injected discontinuous mode */ - ADCx->CR1 &= (uint32_t)(~ADC_CR1_JDISCEN); - } -} - -/** - * @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); -} -/** - * @} - */ - -/** @defgroup ADC_Group7 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the ADC Interrupts - and to get the status and clear flags and Interrupts pending bits. - - [..] Each ADC provides 4 Interrupts sources and 6 Flags which can be divided - into 3 groups: - - *** Flags and Interrupts for ADC regular channels *** - ===================================================== - [..] - (+) Flags : - (##) ADC_FLAG_OVR : Overrun detection when regular converted data are lost - - (##) ADC_FLAG_EOC : Regular channel end of conversion ==> to indicate - (depending on EOCS bit, managed by ADC_EOCOnEachRegularChannelCmd() ) - the end of: - (+++) a regular CHANNEL conversion - (+++) sequence of regular GROUP conversions . - - (##) ADC_FLAG_STRT: Regular channel start ==> to indicate when regular - CHANNEL conversion starts. - [..] - (+) Interrupts : - (##) ADC_IT_OVR : specifies the interrupt source for Overrun detection - event. - (##) ADC_IT_EOC : specifies the interrupt source for Regular channel end - of conversion event. - - - *** Flags and Interrupts for ADC Injected channels *** - ====================================================== - [..] - (+) Flags : - (##) ADC_FLAG_JEOC : Injected channel end of conversion ==> to indicate - at the end of injected GROUP conversion - - (##) ADC_FLAG_JSTRT: Injected channel start ==> to indicate hardware when - injected GROUP conversion starts. - [..] - (+) Interrupts : - (##) ADC_IT_JEOC : specifies the interrupt source for Injected channel - end of conversion event. - - *** General Flags and Interrupts for the ADC *** - ================================================ - [..] - (+)Flags : - (##) ADC_FLAG_AWD: Analog watchdog ==> to indicate if the converted voltage - crosses the programmed thresholds values. - [..] - (+) Interrupts : - (##) ADC_IT_AWD : specifies the interrupt source for Analog watchdog event. - - - [..] The user should identify which mode will be used in his application to - manage the ADC controller events: Polling mode or Interrupt mode. - - [..] In the Polling Mode it is advised to use the following functions: - (+) ADC_GetFlagStatus() : to check if flags events occur. - (+) ADC_ClearFlag() : to clear the flags events. - - [..] In the Interrupt Mode it is advised to use the following functions: - (+) ADC_ITConfig() : to enable or disable the interrupt source. - (+) ADC_GetITStatus() : to check if Interrupt occurs. - (+) ADC_ClearITPendingBit() : to clear the Interrupt pending Bit - (corresponding Flag). -@endverbatim - * @{ - */ -/** - * @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 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 - * @arg ADC_IT_OVR: Overrun interrupt enable - * @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) -{ - uint32_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; - itmask = (uint32_t)0x01 << itmask; - - if (NewState != DISABLE) - { - /* Enable the selected ADC interrupts */ - ADCx->CR1 |= itmask; - } - else - { - /* Disable the selected ADC interrupts */ - ADCx->CR1 &= (~(uint32_t)itmask); - } -} - -/** - * @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 - * @arg ADC_FLAG_OVR: Overrun 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 - * @arg ADC_FLAG_OVR: Overrun 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 - * @arg ADC_IT_OVR: Overrun 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_IT(ADC_IT)); - - /* Get the ADC IT index */ - itmask = ADC_IT >> 8; - - /* Get the ADC_IT enable bit status */ - enablestatus = (ADCx->CR1 & ((uint32_t)0x01 << (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 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 - * @arg ADC_IT_OVR: Overrun 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c deleted file mode 100644 index a54466b6..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c +++ /dev/null @@ -1,1701 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_can.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Controller area network (CAN) peripheral: - * + Initialization and Configuration - * + CAN Frames Transmission - * + CAN Frames Reception - * + Operation modes switch - * + Error management - * + Interrupts and flags - * -@verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable the CAN controller interface clock using - RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); for CAN1 - and RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE); for CAN2 - -@- In case you are using CAN2 only, you have to enable the CAN1 clock. - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - (++) Connect the involved CAN pins to AF9 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_CANx); - (++) Configure these CAN pins in alternate function mode by calling - the function GPIO_Init(); - - (#) Initialise and configure the CAN using CAN_Init() and - CAN_FilterInit() functions. - - (#) Transmit the desired CAN frame using CAN_Transmit() function. - - (#) Check the transmission of a CAN frame using CAN_TransmitStatus() - function. - - (#) Cancel the transmission of a CAN frame using CAN_CancelTransmit() - function. - - (#) Receive a CAN frame using CAN_Recieve() function. - - (#) Release the receive FIFOs using CAN_FIFORelease() function. - - (#) Return the number of pending received frames using - CAN_MessagePending() function. - - (#) To control CAN events you can use one of the following two methods: - (++) Check on CAN flags using the CAN_GetFlagStatus() function. - (++) Use CAN interrupts through the function CAN_ITConfig() at - initialization phase and CAN_GetITStatus() function into - interrupt routines to check if the event has occurred or not. - After checking on a flag you should clear it using CAN_ClearFlag() - function. And after checking on an interrupt event you should - clear it using CAN_ClearITPendingBit() function. - - -@endverbatim - - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_can.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CAN - * @brief CAN driver modules - * @{ - */ -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* 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) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ -static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit); - -/** @defgroup CAN_Private_Functions - * @{ - */ - -/** @defgroup CAN_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initialize the CAN peripherals : Prescaler, operating mode, the maximum - number of time quanta to perform resynchronization, the number of time - quanta in Bit Segment 1 and 2 and many other modes. - Refer to @ref CAN_InitTypeDef for more details. - (+) Configures the CAN reception filter. - (+) Select the start bank filter for slave CAN. - (+) Enables or disables the Debug Freeze mode for CAN - (+)Enables or disables the CAN Time Trigger Operation communication mode - -@endverbatim - * @{ - */ - -/** - * @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 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 Configures the CAN reception filter 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 ill 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. - * @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 (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @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 disables the CAN Time TriggerOperation communication mode. - * @note DLC must be programmed as 8 in order Time Stamp (2 bytes) to be - * sent over the CAN bus. - * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. - * @param NewState: Mode new state. This parameter can be: ENABLE or DISABLE. - * 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. - * @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); - } -} -/** - * @} - */ - - -/** @defgroup CAN_Group2 CAN Frames Transmission functions - * @brief CAN Frames Transmission functions - * -@verbatim - =============================================================================== - ##### CAN Frames Transmission functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initiate and transmit a CAN frame message (if there is an empty mailbox). - (+) Check the transmission status of a CAN Frame - (+) Cancel a transmit request - -@endverbatim - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame 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 status of a CAN Frame. - * @param CANx: where x can be 1 or 2 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 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; - } -} -/** - * @} - */ - - -/** @defgroup CAN_Group3 CAN Frames Reception functions - * @brief CAN Frames Reception functions - * -@verbatim - =============================================================================== - ##### CAN Frames Reception functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Receive a correct CAN frame - (+) Release a specified receive FIFO (2 FIFOs are available) - (+) Return the number of the pending received CAN frames - -@endverbatim - * @{ - */ - -/** - * @brief Receives a correct CAN frame. - * @param CANx: where x can be 1 or 2 to select the CAN peripheral. - * @param FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @param RxMessage: pointer to a structure receive frame which contains CAN Id, - * CAN DLC, CAN data and FMI number. - * @retval None - */ -void CAN_Receive(CAN_TypeDef* CANx, 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 receive FIFO. - * @param CANx: where x can be 1 or 2 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 received messages. - * @param CANx: where x can be 1 or 2 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; -} -/** - * @} - */ - - -/** @defgroup CAN_Group4 CAN Operation modes functions - * @brief CAN Operation modes functions - * -@verbatim - =============================================================================== - ##### CAN Operation modes functions ##### - =============================================================================== - [..] This section provides functions allowing to select the CAN Operation modes - (+) sleep mode - (+) normal mode - (+) initialization mode - -@endverbatim - * @{ - */ - - -/** - * @brief Selects 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 Sleep (low power) mode. - * @param CANx: where x can be 1 or 2 to select the CAN peripheral. - * @retval CAN_Sleep_Ok if sleep entered, CAN_Sleep_Failed otherwise. - */ -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 up the CAN peripheral from sleep mode . - * @param CANx: where x can be 1 or 2 to select the CAN peripheral. - * @retval CAN_WakeUp_Ok if sleep mode left, CAN_WakeUp_Failed otherwise. - */ -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; -} -/** - * @} - */ - - -/** @defgroup CAN_Group5 CAN Bus Error management functions - * @brief CAN Bus Error management functions - * -@verbatim - =============================================================================== - ##### CAN Bus Error management functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Return the CANx's last error code (LEC) - (+) Return the CANx Receive Error Counter (REC) - (+) Return the LSB of the 9-bit CANx Transmit Error Counter(TEC). - - -@- If TEC is greater than 255, The CAN is in bus-off state. - -@- if REC or TEC are greater than 96, an Error warning flag occurs. - -@- if REC or TEC are greater than 127, an Error Passive Flag occurs. - -@endverbatim - * @{ - */ - -/** - * @brief Returns the CANx's last error code (LEC). - * @param CANx: where x can be 1 or 2 to select the CAN peripheral. - * @retval Error code: - * - CAN_ERRORCODE_NoErr: No Error - * - CAN_ERRORCODE_StuffErr: Stuff Error - * - CAN_ERRORCODE_FormErr: Form Error - * - CAN_ERRORCODE_ACKErr : Acknowledgment Error - * - CAN_ERRORCODE_BitRecessiveErr: Bit Recessive Error - * - CAN_ERRORCODE_BitDominantErr: Bit Dominant Error - * - CAN_ERRORCODE_CRCErr: CRC Error - * - CAN_ERRORCODE_SoftwareSetErr: Software Set Error - */ -uint8_t CAN_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; -} -/** - * @} - */ - -/** @defgroup CAN_Group6 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the CAN Interrupts - and to get the status and clear flags and Interrupts pending bits. - - The CAN provides 14 Interrupts sources and 15 Flags: - - - *** Flags *** - ============= - [..] The 15 flags can be divided on 4 groups: - - (+) Transmit Flags - (++) CAN_FLAG_RQCP0, - (++) CAN_FLAG_RQCP1, - (++) CAN_FLAG_RQCP2 : Request completed MailBoxes 0, 1 and 2 Flags - Set when when the last request (transmit or abort) - has been performed. - - (+) Receive Flags - - - (++) CAN_FLAG_FMP0, - (++) CAN_FLAG_FMP1 : FIFO 0 and 1 Message Pending Flags - set to signal that messages are pending in the receive - FIFO. - These Flags are cleared only by hardware. - - (++) CAN_FLAG_FF0, - (++) CAN_FLAG_FF1 : FIFO 0 and 1 Full Flags - set when three messages are stored in the selected - FIFO. - - (++) CAN_FLAG_FOV0 - (++) CAN_FLAG_FOV1 : FIFO 0 and 1 Overrun Flags - set when a new message has been received and passed - the filter while the FIFO was full. - - (+) Operating Mode Flags - - (++) CAN_FLAG_WKU : Wake up Flag - set to signal that a SOF bit has been detected while - the CAN hardware was in Sleep mode. - - (++) CAN_FLAG_SLAK : Sleep acknowledge Flag - Set to signal that the CAN has entered Sleep Mode. - - (+) Error Flags - - (++) CAN_FLAG_EWG : Error Warning Flag - Set when the warning limit has been reached (Receive - Error Counter or Transmit Error Counter greater than 96). - This Flag is cleared only by hardware. - - (++) CAN_FLAG_EPV : Error Passive Flag - Set when the Error Passive limit has been reached - (Receive Error Counter or Transmit Error Counter - greater than 127). - This Flag is cleared only by hardware. - - (++) CAN_FLAG_BOF : Bus-Off Flag - set when CAN enters the bus-off state. The bus-off - state is entered on TEC overflow, greater than 255. - This Flag is cleared only by hardware. - - (++) CAN_FLAG_LEC : Last error code Flag - set If a message has been transferred (reception or - transmission) with error, and the error code is hold. - - *** Interrupts *** - ================== - [..] The 14 interrupts can be divided on 4 groups: - - (+) Transmit interrupt - - (++) CAN_IT_TME : Transmit mailbox empty Interrupt - if enabled, this interrupt source is pending when - no transmit request are pending for Tx mailboxes. - - (+) Receive Interrupts - - (++) CAN_IT_FMP0, - (++) CAN_IT_FMP1 : FIFO 0 and FIFO1 message pending Interrupts - if enabled, these interrupt sources are pending - when messages are pending in the receive FIFO. - The corresponding interrupt pending bits are cleared - only by hardware. - - (++) CAN_IT_FF0, - (++) CAN_IT_FF1 : FIFO 0 and FIFO1 full Interrupts - if enabled, these interrupt sources are pending - when three messages are stored in the selected FIFO. - - (++) CAN_IT_FOV0, - (++) CAN_IT_FOV1 : FIFO 0 and FIFO1 overrun Interrupts - if enabled, these interrupt sources are pending - when a new message has been received and passed - the filter while the FIFO was full. - - (+) Operating Mode Interrupts - - (++) CAN_IT_WKU : Wake-up Interrupt - if enabled, this interrupt source is pending when - a SOF bit has been detected while the CAN hardware - was in Sleep mode. - - (++) CAN_IT_SLK : Sleep acknowledge Interrupt - if enabled, this interrupt source is pending when - the CAN has entered Sleep Mode. - - (+) Error Interrupts - - (++) CAN_IT_EWG : Error warning Interrupt - if enabled, this interrupt source is pending when - the warning limit has been reached (Receive Error - Counter or Transmit Error Counter=96). - - (++) CAN_IT_EPV : Error passive Interrupt - if enabled, this interrupt source is pending when - the Error Passive limit has been reached (Receive - Error Counter or Transmit Error Counter>127). - - (++) CAN_IT_BOF : Bus-off Interrupt - if enabled, this interrupt source is pending when - CAN enters the bus-off state. The bus-off state is - entered on TEC overflow, greater than 255. - This Flag is cleared only by hardware. - - (++) CAN_IT_LEC : Last error code Interrupt - if enabled, this interrupt source is pending when - a message has been transferred (reception or - transmission) with error, and the error code is hold. - - (++) CAN_IT_ERR : Error Interrupt - if enabled, this interrupt source is pending when - an error condition is pending. - - [..] Managing the CAN controller events : - - The user should identify which mode will be used in his application to - manage the CAN controller events: Polling mode or Interrupt mode. - - (#) In the Polling Mode it is advised to use the following functions: - (++) CAN_GetFlagStatus() : to check if flags events occur. - (++) CAN_ClearFlag() : to clear the flags events. - - - - (#) In the Interrupt Mode it is advised to use the following functions: - (++) CAN_ITConfig() : to enable or disable the interrupt source. - (++) CAN_GetITStatus() : to check if Interrupt occurs. - (++) CAN_ClearITPendingBit() : to clear the Interrupt pending Bit - (corresponding Flag). - -@@- This function has no impact on CAN_IT_FMP0 and CAN_IT_FMP1 Interrupts - pending bits since there are cleared only by hardware. - -@endverbatim - * @{ - */ -/** - * @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: - * @arg CAN_IT_TME: Transmit mailbox empty Interrupt - * @arg CAN_IT_FMP0: FIFO 0 message pending Interrupt - * @arg CAN_IT_FF0: FIFO 0 full Interrupt - * @arg CAN_IT_FOV0: FIFO 0 overrun Interrupt - * @arg CAN_IT_FMP1: FIFO 1 message pending Interrupt - * @arg CAN_IT_FF1: FIFO 1 full Interrupt - * @arg CAN_IT_FOV1: FIFO 1 overrun Interrupt - * @arg CAN_IT_WKU: Wake-up Interrupt - * @arg CAN_IT_SLK: Sleep acknowledge Interrupt - * @arg CAN_IT_EWG: Error warning Interrupt - * @arg CAN_IT_EPV: Error passive Interrupt - * @arg CAN_IT_BOF: Bus-off Interrupt - * @arg CAN_IT_LEC: Last error code Interrupt - * @arg CAN_IT_ERR: Error Interrupt - * @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 values: - * @arg CAN_FLAG_RQCP0: Request MailBox0 Flag - * @arg CAN_FLAG_RQCP1: Request MailBox1 Flag - * @arg CAN_FLAG_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @arg CAN_FLAG_LEC: Last error code Flag - * @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 values: - * @arg CAN_FLAG_RQCP0: Request MailBox0 Flag - * @arg CAN_FLAG_RQCP1: Request MailBox1 Flag - * @arg CAN_FLAG_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_LEC: Last error code Flag - * @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 values: - * @arg CAN_IT_TME: Transmit mailbox empty Interrupt - * @arg CAN_IT_FMP0: FIFO 0 message pending Interrupt - * @arg CAN_IT_FF0: FIFO 0 full Interrupt - * @arg CAN_IT_FOV0: FIFO 0 overrun Interrupt - * @arg CAN_IT_FMP1: FIFO 1 message pending Interrupt - * @arg CAN_IT_FF1: FIFO 1 full Interrupt - * @arg CAN_IT_FOV1: FIFO 1 overrun Interrupt - * @arg CAN_IT_WKU: Wake-up Interrupt - * @arg CAN_IT_SLK: Sleep acknowledge Interrupt - * @arg CAN_IT_EWG: Error warning Interrupt - * @arg CAN_IT_EPV: Error passive Interrupt - * @arg CAN_IT_BOF: Bus-off Interrupt - * @arg CAN_IT_LEC: Last error code Interrupt - * @arg CAN_IT_ERR: Error Interrupt - * @retval The current state of CAN_IT (SET or RESET). - */ -ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT) -{ - ITStatus itstatus = RESET; - /* Check the parameters */ - assert_param(IS_CAN_ALL_PERIPH(CANx)); - assert_param(IS_CAN_IT(CAN_IT)); - - /* check the interrupt enable bit */ - if((CANx->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. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty Interrupt - * @arg CAN_IT_FF0: FIFO 0 full Interrupt - * @arg CAN_IT_FOV0: FIFO 0 overrun Interrupt - * @arg CAN_IT_FF1: FIFO 1 full Interrupt - * @arg CAN_IT_FOV1: FIFO 1 overrun Interrupt - * @arg CAN_IT_WKU: Wake-up Interrupt - * @arg CAN_IT_SLK: Sleep acknowledge Interrupt - * @arg CAN_IT_EWG: Error warning Interrupt - * @arg CAN_IT_EPV: Error passive Interrupt - * @arg CAN_IT_BOF: Bus-off Interrupt - * @arg CAN_IT_LEC: Last error code Interrupt - * @arg CAN_IT_ERR: Error Interrupt - * @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 on 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 on 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 on 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 on 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c deleted file mode 100644 index d268184a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c +++ /dev/null @@ -1,133 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_crc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides all the CRC firmware functions. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_crc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRC - * @brief CRC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c deleted file mode 100644 index 824ccfbb..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c +++ /dev/null @@ -1,934 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_cryp.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Cryptographic processor (CRYP) peripheral: - * + Initialization and Configuration functions - * + Data treatment functions - * + Context swapping functions - * + DMA interface function - * + Interrupts and flags management - * -@verbatim - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable the CRYP controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); function. - - (#) Initialise the CRYP using CRYP_Init(), CRYP_KeyInit() and if needed - CRYP_IVInit(). - - (#) Flush the IN and OUT FIFOs by using CRYP_FIFOFlush() function. - - (#) Enable the CRYP controller using the CRYP_Cmd() function. - - (#) If using DMA for Data input and output transfer, activate the needed DMA - Requests using CRYP_DMACmd() function - - (#) If DMA is not used for data transfer, use CRYP_DataIn() and CRYP_DataOut() - functions to enter data to IN FIFO and get result from OUT FIFO. - - (#) To control CRYP events you can use one of the following two methods: - (++) Check on CRYP flags using the CRYP_GetFlagStatus() function. - (++) Use CRYP interrupts through the function CRYP_ITConfig() at - initialization phase and CRYP_GetITStatus() function into interrupt - routines in processing phase. - - (#) Save and restore Cryptographic processor context using CRYP_SaveContext() - and CRYP_RestoreContext() functions. - - - *** Procedure to perform an encryption or a decryption *** - ========================================================== - - *** Initialization *** - ====================== - [..] - (#) Initialize the peripheral using CRYP_Init(), CRYP_KeyInit() and CRYP_IVInit - functions: - (++) Configure the key size (128-, 192- or 256-bit, in the AES only) - (++) Enter the symmetric key - (++) Configure the data type - (++) In case of decryption in AES-ECB or AES-CBC, you must prepare - the key: configure the key preparation mode. Then Enable the CRYP - peripheral using CRYP_Cmd() function: the BUSY flag is set. - Wait until BUSY flag is reset : the key is prepared for decryption - (++) Configure the algorithm and chaining (the DES/TDES in ECB/CBC, the - AES in ECB/CBC/CTR) - (++) Configure the direction (encryption/decryption). - (++) Write the initialization vectors (in CBC or CTR modes only) - - (#) Flush the IN and OUT FIFOs using the CRYP_FIFOFlush() function - - - *** Basic Processing mode (polling mode) *** - ============================================ - [..] - (#) Enable the cryptographic processor using CRYP_Cmd() function. - - (#) Write the first blocks in the input FIFO (2 to 8 words) using - CRYP_DataIn() function. - - (#) Repeat the following sequence until the complete message has been - processed: - - (++) Wait for flag CRYP_FLAG_OFNE occurs (using CRYP_GetFlagStatus() - function), then read the OUT-FIFO using CRYP_DataOut() function - (1 block or until the FIFO is empty) - - (++) Wait for flag CRYP_FLAG_IFNF occurs, (using CRYP_GetFlagStatus() - function then write the IN FIFO using CRYP_DataIn() function - (1 block or until the FIFO is full) - - (#) At the end of the processing, CRYP_FLAG_BUSY flag will be reset and - both FIFOs are empty (CRYP_FLAG_IFEM is set and CRYP_FLAG_OFNE is - reset). You can disable the peripheral using CRYP_Cmd() function. - - *** Interrupts Processing mode *** - ================================== - [..] In this mode, Processing is done when the data are transferred by the - CPU during interrupts. - - (#) Enable the interrupts CRYP_IT_INI and CRYP_IT_OUTI using CRYP_ITConfig() - function. - - (#) Enable the cryptographic processor using CRYP_Cmd() function. - - (#) In the CRYP_IT_INI interrupt handler : load the input message into the - IN FIFO using CRYP_DataIn() function . You can load 2 or 4 words at a - time, or load data until the IN FIFO is full. When the last word of - the message has been entered into the IN FIFO, disable the CRYP_IT_INI - interrupt (using CRYP_ITConfig() function). - - (#) In the CRYP_IT_OUTI interrupt handler : read the output message from - the OUT FIFO using CRYP_DataOut() function. You can read 1 block (2 or - 4 words) at a time or read data until the FIFO is empty. - When the last word has been read, INIM=0, BUSY=0 and both FIFOs are - empty (CRYP_FLAG_IFEM is set and CRYP_FLAG_OFNE is reset). - You can disable the CRYP_IT_OUTI interrupt (using CRYP_ITConfig() - function) and you can disable the peripheral using CRYP_Cmd() function. - - *** DMA Processing mode *** - =========================== - [..] In this mode, Processing is done when the DMA is used to transfer the - data from/to the memory. - - (#) Configure the DMA controller to transfer the input data from the - memory using DMA_Init() function. - The transfer length is the length of the message. - As message padding is not managed by the peripheral, the message - length must be an entire number of blocks. The data are transferred - in burst mode. The burst length is 4 words in the AES and 2 or 4 - words in the DES/TDES. The DMA should be configured to set an - interrupt on transfer completion of the output data to indicate that - the processing is finished. - Refer to DMA peripheral driver for more details. - - (#) Enable the cryptographic processor using CRYP_Cmd() function. - Enable the DMA requests CRYP_DMAReq_DataIN and CRYP_DMAReq_DataOUT - using CRYP_DMACmd() function. - - (#) All the transfers and processing are managed by the DMA and the - cryptographic processor. The DMA transfer complete interrupt indicates - that the processing is complete. Both FIFOs are normally empty and - CRYP_FLAG_BUSY flag is reset. - - @endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_cryp.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRYP - * @brief CRYP driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define FLAG_MASK ((uint8_t)0x20) -#define MAX_TIMEOUT ((uint16_t)0xFFFF) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup CRYP_Private_Functions - * @{ - */ - -/** @defgroup CRYP_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initialize the cryptographic Processor using CRYP_Init() function - (++) Encrypt or Decrypt - (++) mode : TDES-ECB, TDES-CBC, - DES-ECB, DES-CBC, - AES-ECB, AES-CBC, AES-CTR, AES-Key, AES-GCM, AES-CCM - (++) DataType : 32-bit data, 16-bit data, bit data or bit-string - (++) Key Size (only in AES modes) - (+) Configure the Encrypt or Decrypt Key using CRYP_KeyInit() function - (+) Configure the Initialization Vectors(IV) for CBC and CTR modes using - CRYP_IVInit() function. - (+) Flushes the IN and OUT FIFOs : using CRYP_FIFOFlush() function. - (+) Enable or disable the CRYP Processor using CRYP_Cmd() function - -@endverbatim - * @{ - */ -/** - * @brief Deinitializes the CRYP peripheral registers to their default reset values - * @param None - * @retval None - */ -void CRYP_DeInit(void) -{ - /* Enable CRYP reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_CRYP, ENABLE); - - /* Release CRYP from reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_CRYP, DISABLE); -} - -/** - * @brief Initializes the CRYP peripheral according to the specified parameters - * in the CRYP_InitStruct. - * @param CRYP_InitStruct: pointer to a CRYP_InitTypeDef structure that contains - * the configuration information for the CRYP peripheral. - * @retval None - */ -void CRYP_Init(CRYP_InitTypeDef* CRYP_InitStruct) -{ - /* Check the parameters */ - assert_param(IS_CRYP_ALGOMODE(CRYP_InitStruct->CRYP_AlgoMode)); - assert_param(IS_CRYP_DATATYPE(CRYP_InitStruct->CRYP_DataType)); - assert_param(IS_CRYP_ALGODIR(CRYP_InitStruct->CRYP_AlgoDir)); - - /* Select Algorithm mode*/ - CRYP->CR &= ~CRYP_CR_ALGOMODE; - CRYP->CR |= CRYP_InitStruct->CRYP_AlgoMode; - - /* Select dataType */ - CRYP->CR &= ~CRYP_CR_DATATYPE; - CRYP->CR |= CRYP_InitStruct->CRYP_DataType; - - /* select Key size (used only with AES algorithm) */ - if ((CRYP_InitStruct->CRYP_AlgoMode != CRYP_AlgoMode_TDES_ECB) && - (CRYP_InitStruct->CRYP_AlgoMode != CRYP_AlgoMode_TDES_CBC) && - (CRYP_InitStruct->CRYP_AlgoMode != CRYP_AlgoMode_DES_ECB) && - (CRYP_InitStruct->CRYP_AlgoMode != CRYP_AlgoMode_DES_CBC)) - { - assert_param(IS_CRYP_KEYSIZE(CRYP_InitStruct->CRYP_KeySize)); - CRYP->CR &= ~CRYP_CR_KEYSIZE; - CRYP->CR |= CRYP_InitStruct->CRYP_KeySize; /* Key size and value must be - configured once the key has - been prepared */ - } - - /* Select data Direction */ - CRYP->CR &= ~CRYP_CR_ALGODIR; - CRYP->CR |= CRYP_InitStruct->CRYP_AlgoDir; -} - -/** - * @brief Fills each CRYP_InitStruct member with its default value. - * @param CRYP_InitStruct: pointer to a CRYP_InitTypeDef structure which will - * be initialized. - * @retval None - */ -void CRYP_StructInit(CRYP_InitTypeDef* CRYP_InitStruct) -{ - /* Initialize the CRYP_AlgoDir member */ - CRYP_InitStruct->CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - - /* initialize the CRYP_AlgoMode member */ - CRYP_InitStruct->CRYP_AlgoMode = CRYP_AlgoMode_TDES_ECB; - - /* initialize the CRYP_DataType member */ - CRYP_InitStruct->CRYP_DataType = CRYP_DataType_32b; - - /* Initialize the CRYP_KeySize member */ - CRYP_InitStruct->CRYP_KeySize = CRYP_KeySize_128b; -} - -/** - * @brief Initializes the CRYP Keys according to the specified parameters in - * the CRYP_KeyInitStruct. - * @param CRYP_KeyInitStruct: pointer to a CRYP_KeyInitTypeDef structure that - * contains the configuration information for the CRYP Keys. - * @retval None - */ -void CRYP_KeyInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct) -{ - /* Key Initialisation */ - CRYP->K0LR = CRYP_KeyInitStruct->CRYP_Key0Left; - CRYP->K0RR = CRYP_KeyInitStruct->CRYP_Key0Right; - CRYP->K1LR = CRYP_KeyInitStruct->CRYP_Key1Left; - CRYP->K1RR = CRYP_KeyInitStruct->CRYP_Key1Right; - CRYP->K2LR = CRYP_KeyInitStruct->CRYP_Key2Left; - CRYP->K2RR = CRYP_KeyInitStruct->CRYP_Key2Right; - CRYP->K3LR = CRYP_KeyInitStruct->CRYP_Key3Left; - CRYP->K3RR = CRYP_KeyInitStruct->CRYP_Key3Right; -} - -/** - * @brief Fills each CRYP_KeyInitStruct member with its default value. - * @param CRYP_KeyInitStruct: pointer to a CRYP_KeyInitTypeDef structure - * which will be initialized. - * @retval None - */ -void CRYP_KeyStructInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct) -{ - CRYP_KeyInitStruct->CRYP_Key0Left = 0; - CRYP_KeyInitStruct->CRYP_Key0Right = 0; - CRYP_KeyInitStruct->CRYP_Key1Left = 0; - CRYP_KeyInitStruct->CRYP_Key1Right = 0; - CRYP_KeyInitStruct->CRYP_Key2Left = 0; - CRYP_KeyInitStruct->CRYP_Key2Right = 0; - CRYP_KeyInitStruct->CRYP_Key3Left = 0; - CRYP_KeyInitStruct->CRYP_Key3Right = 0; -} -/** - * @brief Initializes the CRYP Initialization Vectors(IV) according to the - * specified parameters in the CRYP_IVInitStruct. - * @param CRYP_IVInitStruct: pointer to a CRYP_IVInitTypeDef structure that contains - * the configuration information for the CRYP Initialization Vectors(IV). - * @retval None - */ -void CRYP_IVInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct) -{ - CRYP->IV0LR = CRYP_IVInitStruct->CRYP_IV0Left; - CRYP->IV0RR = CRYP_IVInitStruct->CRYP_IV0Right; - CRYP->IV1LR = CRYP_IVInitStruct->CRYP_IV1Left; - CRYP->IV1RR = CRYP_IVInitStruct->CRYP_IV1Right; -} - -/** - * @brief Fills each CRYP_IVInitStruct member with its default value. - * @param CRYP_IVInitStruct: pointer to a CRYP_IVInitTypeDef Initialization - * Vectors(IV) structure which will be initialized. - * @retval None - */ -void CRYP_IVStructInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct) -{ - CRYP_IVInitStruct->CRYP_IV0Left = 0; - CRYP_IVInitStruct->CRYP_IV0Right = 0; - CRYP_IVInitStruct->CRYP_IV1Left = 0; - CRYP_IVInitStruct->CRYP_IV1Right = 0; -} - -/** - * @brief Configures the AES-CCM and AES-GCM phases - * @note This function is used only with AES-CCM or AES-GCM Algorithms - * @param CRYP_Phase: specifies the CRYP AES-CCM and AES-GCM phase to be configured. - * This parameter can be one of the following values: - * @arg CRYP_Phase_Init: Initialization phase - * @arg CRYP_Phase_Header: Header phase - * @arg CRYP_Phase_Payload: Payload phase - * @arg CRYP_Phase_Final: Final phase - * @retval None - */ -void CRYP_PhaseConfig(uint32_t CRYP_Phase) -{ uint32_t tempcr = 0; - - /* Check the parameter */ - assert_param(IS_CRYP_PHASE(CRYP_Phase)); - - /* Get the CR register */ - tempcr = CRYP->CR; - - /* Reset the phase configuration bits: GCMP_CCMPH */ - tempcr &= (uint32_t)(~CRYP_CR_GCM_CCMPH); - /* Set the selected phase */ - tempcr |= (uint32_t)CRYP_Phase; - - /* Set the CR register */ - CRYP->CR = tempcr; -} - -/** - * @brief Flushes the IN and OUT FIFOs (that is read and write pointers of the - * FIFOs are reset) - * @note The FIFOs must be flushed only when BUSY flag is reset. - * @param None - * @retval None - */ -void CRYP_FIFOFlush(void) -{ - /* Reset the read and write pointers of the FIFOs */ - CRYP->CR |= CRYP_CR_FFLUSH; -} - -/** - * @brief Enables or disables the CRYP peripheral. - * @param NewState: new state of the CRYP peripheral. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void CRYP_Cmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the Cryptographic processor */ - CRYP->CR |= CRYP_CR_CRYPEN; - } - else - { - /* Disable the Cryptographic processor */ - CRYP->CR &= ~CRYP_CR_CRYPEN; - } -} -/** - * @} - */ - -/** @defgroup CRYP_Group2 CRYP Data processing functions - * @brief CRYP Data processing functions - * -@verbatim - =============================================================================== - ##### CRYP Data processing functions ##### - =============================================================================== - [..] This section provides functions allowing the encryption and decryption - operations: - (+) Enter data to be treated in the IN FIFO : using CRYP_DataIn() function. - (+) Get the data result from the OUT FIFO : using CRYP_DataOut() function. - -@endverbatim - * @{ - */ - -/** - * @brief Writes data in the Data Input register (DIN). - * @note After the DIN register has been read once or several times, - * the FIFO must be flushed (using CRYP_FIFOFlush() function). - * @param Data: data to write in Data Input register - * @retval None - */ -void CRYP_DataIn(uint32_t Data) -{ - CRYP->DR = Data; -} - -/** - * @brief Returns the last data entered into the output FIFO. - * @param None - * @retval Last data entered into the output FIFO. - */ -uint32_t CRYP_DataOut(void) -{ - return CRYP->DOUT; -} -/** - * @} - */ - -/** @defgroup CRYP_Group3 Context swapping functions - * @brief Context swapping functions - * -@verbatim - =============================================================================== - ##### Context swapping functions ##### - =============================================================================== - [..] This section provides functions allowing to save and store CRYP Context - - [..] It is possible to interrupt an encryption/ decryption/ key generation process - to perform another processing with a higher priority, and to complete the - interrupted process later on, when the higher-priority task is complete. To do - so, the context of the interrupted task must be saved from the CRYP registers - to memory, and then be restored from memory to the CRYP registers. - - (#) To save the current context, use CRYP_SaveContext() function - (#) To restore the saved context, use CRYP_RestoreContext() function - -@endverbatim - * @{ - */ - -/** - * @brief Saves the CRYP peripheral Context. - * @note This function stops DMA transfer before to save the context. After - * restoring the context, you have to enable the DMA again (if the DMA - * was previously used). - * @param CRYP_ContextSave: pointer to a CRYP_Context structure that contains - * the repository for current context. - * @param CRYP_KeyInitStruct: pointer to a CRYP_KeyInitTypeDef structure that - * contains the configuration information for the CRYP Keys. - * @retval None - */ -ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave, - CRYP_KeyInitTypeDef* CRYP_KeyInitStruct) -{ - __IO uint32_t timeout = 0; - uint32_t ckeckmask = 0, bitstatus; - ErrorStatus status = ERROR; - - /* Stop DMA transfers on the IN FIFO by clearing the DIEN bit in the CRYP_DMACR */ - CRYP->DMACR &= ~(uint32_t)CRYP_DMACR_DIEN; - - /* Wait until both the IN and OUT FIFOs are empty - (IFEM=1 and OFNE=0 in the CRYP_SR register) and the - BUSY bit is cleared. */ - - if ((CRYP->CR & (uint32_t)(CRYP_CR_ALGOMODE_TDES_ECB | CRYP_CR_ALGOMODE_TDES_CBC)) != (uint32_t)0 )/* TDES */ - { - ckeckmask = CRYP_SR_IFEM | CRYP_SR_BUSY ; - } - else /* AES or DES */ - { - ckeckmask = CRYP_SR_IFEM | CRYP_SR_BUSY | CRYP_SR_OFNE; - } - - do - { - bitstatus = CRYP->SR & ckeckmask; - timeout++; - } - while ((timeout != MAX_TIMEOUT) && (bitstatus != CRYP_SR_IFEM)); - - if ((CRYP->SR & ckeckmask) != CRYP_SR_IFEM) - { - status = ERROR; - } - else - { - /* Stop DMA transfers on the OUT FIFO by - - writing the DOEN bit to 0 in the CRYP_DMACR register - - and clear the CRYPEN bit. */ - - CRYP->DMACR &= ~(uint32_t)CRYP_DMACR_DOEN; - CRYP->CR &= ~(uint32_t)CRYP_CR_CRYPEN; - - /* Save the current configuration (bit 19, bit[17:16] and bits [9:2] in the CRYP_CR register) */ - CRYP_ContextSave->CR_CurrentConfig = CRYP->CR & (CRYP_CR_GCM_CCMPH | - CRYP_CR_KEYSIZE | - CRYP_CR_DATATYPE | - CRYP_CR_ALGOMODE | - CRYP_CR_ALGODIR); - - /* and, if not in ECB mode, the initialization vectors. */ - CRYP_ContextSave->CRYP_IV0LR = CRYP->IV0LR; - CRYP_ContextSave->CRYP_IV0RR = CRYP->IV0RR; - CRYP_ContextSave->CRYP_IV1LR = CRYP->IV1LR; - CRYP_ContextSave->CRYP_IV1RR = CRYP->IV1RR; - - /* save The key value */ - CRYP_ContextSave->CRYP_K0LR = CRYP_KeyInitStruct->CRYP_Key0Left; - CRYP_ContextSave->CRYP_K0RR = CRYP_KeyInitStruct->CRYP_Key0Right; - CRYP_ContextSave->CRYP_K1LR = CRYP_KeyInitStruct->CRYP_Key1Left; - CRYP_ContextSave->CRYP_K1RR = CRYP_KeyInitStruct->CRYP_Key1Right; - CRYP_ContextSave->CRYP_K2LR = CRYP_KeyInitStruct->CRYP_Key2Left; - CRYP_ContextSave->CRYP_K2RR = CRYP_KeyInitStruct->CRYP_Key2Right; - CRYP_ContextSave->CRYP_K3LR = CRYP_KeyInitStruct->CRYP_Key3Left; - CRYP_ContextSave->CRYP_K3RR = CRYP_KeyInitStruct->CRYP_Key3Right; - - /* Save the content of context swap registers */ - CRYP_ContextSave->CRYP_CSGCMCCMR[0] = CRYP->CSGCMCCM0R; - CRYP_ContextSave->CRYP_CSGCMCCMR[1] = CRYP->CSGCMCCM1R; - CRYP_ContextSave->CRYP_CSGCMCCMR[2] = CRYP->CSGCMCCM2R; - CRYP_ContextSave->CRYP_CSGCMCCMR[3] = CRYP->CSGCMCCM3R; - CRYP_ContextSave->CRYP_CSGCMCCMR[4] = CRYP->CSGCMCCM4R; - CRYP_ContextSave->CRYP_CSGCMCCMR[5] = CRYP->CSGCMCCM5R; - CRYP_ContextSave->CRYP_CSGCMCCMR[6] = CRYP->CSGCMCCM6R; - CRYP_ContextSave->CRYP_CSGCMCCMR[7] = CRYP->CSGCMCCM7R; - - CRYP_ContextSave->CRYP_CSGCMR[0] = CRYP->CSGCM0R; - CRYP_ContextSave->CRYP_CSGCMR[1] = CRYP->CSGCM1R; - CRYP_ContextSave->CRYP_CSGCMR[2] = CRYP->CSGCM2R; - CRYP_ContextSave->CRYP_CSGCMR[3] = CRYP->CSGCM3R; - CRYP_ContextSave->CRYP_CSGCMR[4] = CRYP->CSGCM4R; - CRYP_ContextSave->CRYP_CSGCMR[5] = CRYP->CSGCM5R; - CRYP_ContextSave->CRYP_CSGCMR[6] = CRYP->CSGCM6R; - CRYP_ContextSave->CRYP_CSGCMR[7] = CRYP->CSGCM7R; - - /* When needed, save the DMA status (pointers for IN and OUT messages, - number of remaining bytes, etc.) */ - - status = SUCCESS; - } - - return status; -} - -/** - * @brief Restores the CRYP peripheral Context. - * @note Since teh DMA transfer is stopped in CRYP_SaveContext() function, - * after restoring the context, you have to enable the DMA again (if the - * DMA was previously used). - * @param CRYP_ContextRestore: pointer to a CRYP_Context structure that contains - * the repository for saved context. - * @note The data that were saved during context saving must be rewrited into - * the IN FIFO. - * @retval None - */ -void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore) -{ - - /* Configure the processor with the saved configuration */ - CRYP->CR = CRYP_ContextRestore->CR_CurrentConfig; - - /* restore The key value */ - CRYP->K0LR = CRYP_ContextRestore->CRYP_K0LR; - CRYP->K0RR = CRYP_ContextRestore->CRYP_K0RR; - CRYP->K1LR = CRYP_ContextRestore->CRYP_K1LR; - CRYP->K1RR = CRYP_ContextRestore->CRYP_K1RR; - CRYP->K2LR = CRYP_ContextRestore->CRYP_K2LR; - CRYP->K2RR = CRYP_ContextRestore->CRYP_K2RR; - CRYP->K3LR = CRYP_ContextRestore->CRYP_K3LR; - CRYP->K3RR = CRYP_ContextRestore->CRYP_K3RR; - - /* and the initialization vectors. */ - CRYP->IV0LR = CRYP_ContextRestore->CRYP_IV0LR; - CRYP->IV0RR = CRYP_ContextRestore->CRYP_IV0RR; - CRYP->IV1LR = CRYP_ContextRestore->CRYP_IV1LR; - CRYP->IV1RR = CRYP_ContextRestore->CRYP_IV1RR; - - /* Restore the content of context swap registers */ - CRYP->CSGCMCCM0R = CRYP_ContextRestore->CRYP_CSGCMCCMR[0]; - CRYP->CSGCMCCM1R = CRYP_ContextRestore->CRYP_CSGCMCCMR[1]; - CRYP->CSGCMCCM2R = CRYP_ContextRestore->CRYP_CSGCMCCMR[2]; - CRYP->CSGCMCCM3R = CRYP_ContextRestore->CRYP_CSGCMCCMR[3]; - CRYP->CSGCMCCM4R = CRYP_ContextRestore->CRYP_CSGCMCCMR[4]; - CRYP->CSGCMCCM5R = CRYP_ContextRestore->CRYP_CSGCMCCMR[5]; - CRYP->CSGCMCCM6R = CRYP_ContextRestore->CRYP_CSGCMCCMR[6]; - CRYP->CSGCMCCM7R = CRYP_ContextRestore->CRYP_CSGCMCCMR[7]; - - CRYP->CSGCM0R = CRYP_ContextRestore->CRYP_CSGCMR[0]; - CRYP->CSGCM1R = CRYP_ContextRestore->CRYP_CSGCMR[1]; - CRYP->CSGCM2R = CRYP_ContextRestore->CRYP_CSGCMR[2]; - CRYP->CSGCM3R = CRYP_ContextRestore->CRYP_CSGCMR[3]; - CRYP->CSGCM4R = CRYP_ContextRestore->CRYP_CSGCMR[4]; - CRYP->CSGCM5R = CRYP_ContextRestore->CRYP_CSGCMR[5]; - CRYP->CSGCM6R = CRYP_ContextRestore->CRYP_CSGCMR[6]; - CRYP->CSGCM7R = CRYP_ContextRestore->CRYP_CSGCMR[7]; - - /* Enable the cryptographic processor */ - CRYP->CR |= CRYP_CR_CRYPEN; -} -/** - * @} - */ - -/** @defgroup CRYP_Group4 CRYP's DMA interface Configuration function - * @brief CRYP's DMA interface Configuration function - * -@verbatim - =============================================================================== - ##### CRYP's DMA interface Configuration function ##### - =============================================================================== - [..] This section provides functions allowing to configure the DMA interface for - CRYP data input and output transfer. - - [..] When the DMA mode is enabled (using the CRYP_DMACmd() function), data can be - transferred: - (+) From memory to the CRYP IN FIFO using the DMA peripheral by enabling - the CRYP_DMAReq_DataIN request. - (+) From the CRYP OUT FIFO to the memory using the DMA peripheral by enabling - the CRYP_DMAReq_DataOUT request. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the CRYP DMA interface. - * @param CRYP_DMAReq: specifies the CRYP DMA transfer request to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg CRYP_DMAReq_DataOUT: DMA for outgoing(Tx) data transfer - * @arg CRYP_DMAReq_DataIN: DMA for incoming(Rx) data transfer - * @param NewState: new state of the selected CRYP DMA transfer request. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void CRYP_DMACmd(uint8_t CRYP_DMAReq, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_CRYP_DMAREQ(CRYP_DMAReq)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected CRYP DMA request */ - CRYP->DMACR |= CRYP_DMAReq; - } - else - { - /* Disable the selected CRYP DMA request */ - CRYP->DMACR &= (uint8_t)~CRYP_DMAReq; - } -} -/** - * @} - */ - -/** @defgroup CRYP_Group5 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the CRYP Interrupts and - to get the status and Interrupts pending bits. - - [..] The CRYP provides 2 Interrupts sources and 7 Flags: - - *** Flags : *** - =============== - [..] - (#) CRYP_FLAG_IFEM : Set when Input FIFO is empty. This Flag is cleared only - by hardware. - - (#) CRYP_FLAG_IFNF : Set when Input FIFO is not full. This Flag is cleared - only by hardware. - - - (#) CRYP_FLAG_INRIS : Set when Input FIFO Raw interrupt is pending it gives - the raw interrupt state prior to masking of the input FIFO service interrupt. - This Flag is cleared only by hardware. - - (#) CRYP_FLAG_OFNE : Set when Output FIFO not empty. This Flag is cleared - only by hardware. - - (#) CRYP_FLAG_OFFU : Set when Output FIFO is full. This Flag is cleared only - by hardware. - - (#) CRYP_FLAG_OUTRIS : Set when Output FIFO Raw interrupt is pending it gives - the raw interrupt state prior to masking of the output FIFO service interrupt. - This Flag is cleared only by hardware. - - (#) CRYP_FLAG_BUSY : Set when the CRYP core is currently processing a block - of data or a key preparation (for AES decryption). This Flag is cleared - only by hardware. To clear it, the CRYP core must be disabled and the last - processing has completed. - - *** Interrupts : *** - ==================== - [..] - (#) CRYP_IT_INI : The input FIFO service interrupt is asserted when there - are less than 4 words in the input FIFO. This interrupt is associated to - CRYP_FLAG_INRIS flag. - - -@- This interrupt is cleared by performing write operations to the input FIFO - until it holds 4 or more words. The input FIFO service interrupt INMIS is - enabled with the CRYP enable bit. Consequently, when CRYP is disabled, the - INMIS signal is low even if the input FIFO is empty. - - - - (#) CRYP_IT_OUTI : The output FIFO service interrupt is asserted when there - is one or more (32-bit word) data items in the output FIFO. This interrupt - is associated to CRYP_FLAG_OUTRIS flag. - - -@- This interrupt is cleared by reading data from the output FIFO until there - is no valid (32-bit) word left (that is, the interrupt follows the state - of the OFNE (output FIFO not empty) flag). - - *** Managing the CRYP controller events : *** - ============================================= - [..] The user should identify which mode will be used in his application to manage - the CRYP controller events: Polling mode or Interrupt mode. - - (#) In the Polling Mode it is advised to use the following functions: - (++) CRYP_GetFlagStatus() : to check if flags events occur. - - -@@- The CRYPT flags do not need to be cleared since they are cleared as - soon as the associated event are reset. - - - (#) In the Interrupt Mode it is advised to use the following functions: - (++) CRYP_ITConfig() : to enable or disable the interrupt source. - (++) CRYP_GetITStatus() : to check if Interrupt occurs. - - -@@- The CRYPT interrupts have no pending bits, the interrupt is cleared as - soon as the associated event is reset. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified CRYP interrupts. - * @param CRYP_IT: specifies the CRYP interrupt source to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg CRYP_IT_INI: Input FIFO interrupt - * @arg CRYP_IT_OUTI: Output FIFO interrupt - * @param NewState: new state of the specified CRYP interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void CRYP_ITConfig(uint8_t CRYP_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_CRYP_CONFIG_IT(CRYP_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected CRYP interrupt */ - CRYP->IMSCR |= CRYP_IT; - } - else - { - /* Disable the selected CRYP interrupt */ - CRYP->IMSCR &= (uint8_t)~CRYP_IT; - } -} - -/** - * @brief Checks whether the specified CRYP interrupt has occurred or not. - * @note This function checks the status of the masked interrupt (i.e the - * interrupt should be previously enabled). - * @param CRYP_IT: specifies the CRYP (masked) interrupt source to check. - * This parameter can be one of the following values: - * @arg CRYP_IT_INI: Input FIFO interrupt - * @arg CRYP_IT_OUTI: Output FIFO interrupt - * @retval The new state of CRYP_IT (SET or RESET). - */ -ITStatus CRYP_GetITStatus(uint8_t CRYP_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_CRYP_GET_IT(CRYP_IT)); - - /* Check the status of the specified CRYP interrupt */ - if ((CRYP->MISR & CRYP_IT) != (uint8_t)RESET) - { - /* CRYP_IT is set */ - bitstatus = SET; - } - else - { - /* CRYP_IT is reset */ - bitstatus = RESET; - } - /* Return the CRYP_IT status */ - return bitstatus; -} - -/** - * @brief Returns whether CRYP peripheral is enabled or disabled. - * @param none. - * @retval Current state of the CRYP peripheral (ENABLE or DISABLE). - */ -FunctionalState CRYP_GetCmdStatus(void) -{ - FunctionalState state = DISABLE; - - if ((CRYP->CR & CRYP_CR_CRYPEN) != 0) - { - /* CRYPEN bit is set */ - state = ENABLE; - } - else - { - /* CRYPEN bit is reset */ - state = DISABLE; - } - return state; -} - -/** - * @brief Checks whether the specified CRYP flag is set or not. - * @param CRYP_FLAG: specifies the CRYP flag to check. - * This parameter can be one of the following values: - * @arg CRYP_FLAG_IFEM: Input FIFO Empty flag. - * @arg CRYP_FLAG_IFNF: Input FIFO Not Full flag. - * @arg CRYP_FLAG_OFNE: Output FIFO Not Empty flag. - * @arg CRYP_FLAG_OFFU: Output FIFO Full flag. - * @arg CRYP_FLAG_BUSY: Busy flag. - * @arg CRYP_FLAG_OUTRIS: Output FIFO raw interrupt flag. - * @arg CRYP_FLAG_INRIS: Input FIFO raw interrupt flag. - * @retval The new state of CRYP_FLAG (SET or RESET). - */ -FlagStatus CRYP_GetFlagStatus(uint8_t CRYP_FLAG) -{ - FlagStatus bitstatus = RESET; - uint32_t tempreg = 0; - - /* Check the parameters */ - assert_param(IS_CRYP_GET_FLAG(CRYP_FLAG)); - - /* check if the FLAG is in RISR register */ - if ((CRYP_FLAG & FLAG_MASK) != 0x00) - { - tempreg = CRYP->RISR; - } - else /* The FLAG is in SR register */ - { - tempreg = CRYP->SR; - } - - - /* Check the status of the specified CRYP flag */ - if ((tempreg & CRYP_FLAG ) != (uint8_t)RESET) - { - /* CRYP_FLAG is set */ - bitstatus = SET; - } - else - { - /* CRYP_FLAG is reset */ - bitstatus = RESET; - } - - /* Return the CRYP_FLAG status */ - return bitstatus; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c deleted file mode 100644 index 4c5920b5..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c +++ /dev/null @@ -1,1676 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_cryp_aes.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides high level functions to encrypt and decrypt an - * input message using AES in ECB/CBC/CTR/GCM/CCM modes. - * It uses the stm32f4xx_cryp.c/.h drivers to access the STM32F4xx CRYP - * peripheral. - * AES-ECB/CBC/CTR/GCM/CCM modes are available on STM32F437x Devices. - * For STM32F41xx Devices, only AES-ECB/CBC/CTR modes are available. - * -@verbatim - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable The CRYP controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); function. - - (#) Encrypt and decrypt using AES in ECB Mode using CRYP_AES_ECB() function. - - (#) Encrypt and decrypt using AES in CBC Mode using CRYP_AES_CBC() function. - - (#) Encrypt and decrypt using AES in CTR Mode using CRYP_AES_CTR() function. - - (#) Encrypt and decrypt using AES in GCM Mode using CRYP_AES_GCM() function. - - (#) Encrypt and decrypt using AES in CCM Mode using CRYP_AES_CCM() function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_cryp.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRYP - * @brief CRYP driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define AESBUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup CRYP_Private_Functions - * @{ - */ - -/** @defgroup CRYP_Group6 High Level AES functions - * @brief High Level AES functions - * -@verbatim - =============================================================================== - ##### High Level AES functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Encrypt and decrypt using AES in ECB Mode - * @param Mode: encryption or decryption Mode. - * This parameter can be one of the following values: - * @arg MODE_ENCRYPT: Encryption - * @arg MODE_DECRYPT: Decryption - * @param Key: Key used for AES algorithm. - * @param Keysize: length of the Key, must be a 128, 192 or 256. - * @param Input: pointer to the Input buffer. - * @param Ilength: length of the Input buffer, must be a multiple of 16. - * @param Output: pointer to the returned buffer. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: Operation done - * - ERROR: Operation failed - */ -ErrorStatus CRYP_AES_ECB(uint8_t Mode, uint8_t* Key, uint16_t Keysize, - uint8_t* Input, uint32_t Ilength, uint8_t* Output) -{ - CRYP_InitTypeDef AES_CRYP_InitStructure; - CRYP_KeyInitTypeDef AES_CRYP_KeyInitStructure; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t keyaddr = (uint32_t)Key; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - uint32_t i = 0; - - /* Crypto structures initialisation*/ - CRYP_KeyStructInit(&AES_CRYP_KeyInitStructure); - - switch(Keysize) - { - case 128: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_128b; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - case 192: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_192b; - AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - case 256: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_256b; - AES_CRYP_KeyInitStructure.CRYP_Key0Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key0Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - default: - break; - } - - /*------------------ AES Decryption ------------------*/ - if(Mode == MODE_DECRYPT) /* AES decryption */ - { - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Crypto Init for Key preparation for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_Key; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_32b; - CRYP_Init(&AES_CRYP_InitStructure); - - /* Key Initialisation */ - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - /* wait until the Busy flag is RESET */ - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - else - { - /* Crypto Init for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - } - } - /*------------------ AES Encryption ------------------*/ - else /* AES encryption */ - { - - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* Crypto Init for Encryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - } - - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_ECB; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&AES_CRYP_InitStructure); - - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(i=0; ((i>32)); - CRYP_DataIn(__REV(headerlength)); - CRYP_DataIn(__REV(inputlength>>32)); - CRYP_DataIn(__REV(inputlength)); - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET) - { - } - - tagaddr = (uint32_t)AuthTAG; - /* Read the Auth TAG in the IN FIFO */ - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - } - /*------------------ AES Decryption ------------------*/ - else /* AES decryption */ - { - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Key Initialisation */ - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* CRYP Initialization Vectors */ - CRYP_IVInit(&AES_CRYP_IVInitStructure); - - /* Crypto Init for Key preparation for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_GCM; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&AES_CRYP_InitStructure); - - /***************************** Init phase *********************************/ - /* Select init phase */ - CRYP_PhaseConfig(CRYP_Phase_Init); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - /* Wait for CRYPEN bit to be 0 */ - while(CRYP_GetCmdStatus() == ENABLE); - - /***************************** header phase *******************************/ - if(HLength != 0) - { - /* Select header phase */ - CRYP_PhaseConfig(CRYP_Phase_Header); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; (loopcounter < HLength); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - } - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - } - - /**************************** payload phase *******************************/ - if(ILength != 0) - { - /* Select payload phase */ - CRYP_PhaseConfig(CRYP_Phase_Payload); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; ((loopcounter < ILength) && (status != ERROR)); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - else - { - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Output block from the Output FIFO */ - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - } - } - } - - /***************************** final phase ********************************/ - /* Select final phase */ - CRYP_PhaseConfig(CRYP_Phase_Final); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - /* Write number of bits concatenated with header in the IN FIFO */ - CRYP_DataIn(__REV(headerlength>>32)); - CRYP_DataIn(__REV(headerlength)); - CRYP_DataIn(__REV(inputlength>>32)); - CRYP_DataIn(__REV(inputlength)); - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - tagaddr = (uint32_t)AuthTAG; - /* Read the Auth TAG in the IN FIFO */ - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - } - /* Disable Crypto */ - CRYP_Cmd(DISABLE); - - return status; -} - -/** - * @brief Encrypt and decrypt using AES in CCM Mode. The GCM and CCM modes - * are available only on STM32F437x Devices. - * @param Mode: encryption or decryption Mode. - * This parameter can be one of the following values: - * @arg MODE_ENCRYPT: Encryption - * @arg MODE_DECRYPT: Decryption - * @param Nonce: the nounce used for AES algorithm. It shall be unique for each processing. - * @param Key: Key used for AES algorithm. - * @param Keysize: length of the Key, must be a 128, 192 or 256. - * @param Input: pointer to the Input buffer. - * @param Ilength: length of the Input buffer in bytes, must be a multiple of 16. - * @param Header: pointer to the header buffer. - * @param Hlength: length of the header buffer in bytes. - * @param HBuffer: pointer to temporary buffer used to append the header - * HBuffer size must be equal to Hlength + 21 - * @param Output: pointer to the returned buffer. - * @param AuthTAG: pointer to the authentication TAG buffer. - * @param TAGSize: the size of the TAG (called also MAC). - * @retval An ErrorStatus enumeration value: - * - SUCCESS: Operation done - * - ERROR: Operation failed - */ -ErrorStatus CRYP_AES_CCM(uint8_t Mode, - uint8_t* Nonce, uint32_t NonceSize, - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t ILength, - uint8_t *Header, uint32_t HLength, uint8_t *HBuffer, - uint8_t *Output, - uint8_t *AuthTAG, uint32_t TAGSize) -{ - CRYP_InitTypeDef AES_CRYP_InitStructure; - CRYP_KeyInitTypeDef AES_CRYP_KeyInitStructure; - CRYP_IVInitTypeDef AES_CRYP_IVInitStructure; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t keyaddr = (uint32_t)Key; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - uint32_t headeraddr = (uint32_t)Header; - uint32_t tagaddr = (uint32_t)AuthTAG; - uint32_t headersize = HLength; - uint32_t loopcounter = 0; - uint32_t bufferidx = 0; - uint8_t blockb0[16] = {0};/* Block B0 */ - uint8_t ctr[16] = {0}; /* Counter */ - uint32_t temptag[4] = {0}; /* temporary TAG (MAC) */ - uint32_t ctraddr = (uint32_t)ctr; - uint32_t b0addr = (uint32_t)blockb0; - - /************************ Formatting the header block ***********************/ - if(headersize != 0) - { - /* Check that the associated data (or header) length is lower than 2^16 - 2^8 = 65536 - 256 = 65280 */ - if(headersize < 65280) - { - HBuffer[bufferidx++] = (uint8_t) ((headersize >> 8) & 0xFF); - HBuffer[bufferidx++] = (uint8_t) ((headersize) & 0xFF); - headersize += 2; - } - else - { - /* header is encoded as 0xff || 0xfe || [headersize]32, i.e., six octets */ - HBuffer[bufferidx++] = 0xFF; - HBuffer[bufferidx++] = 0xFE; - HBuffer[bufferidx++] = headersize & 0xff000000; - HBuffer[bufferidx++] = headersize & 0x00ff0000; - HBuffer[bufferidx++] = headersize & 0x0000ff00; - HBuffer[bufferidx++] = headersize & 0x000000ff; - headersize += 6; - } - /* Copy the header buffer in internal buffer "HBuffer" */ - for(loopcounter = 0; loopcounter < headersize; loopcounter++) - { - HBuffer[bufferidx++] = Header[loopcounter]; - } - /* Check if the header size is modulo 16 */ - if ((headersize % 16) != 0) - { - /* Padd the header buffer with 0s till the HBuffer length is modulo 16 */ - for(loopcounter = headersize; loopcounter <= ((headersize/16) + 1) * 16; loopcounter++) - { - HBuffer[loopcounter] = 0; - } - /* Set the header size to modulo 16 */ - headersize = ((headersize/16) + 1) * 16; - } - /* set the pointer headeraddr to HBuffer */ - headeraddr = (uint32_t)HBuffer; - } - /************************* Formatting the block B0 **************************/ - if(headersize != 0) - { - blockb0[0] = 0x40; - } - /* Flags byte */ - blockb0[0] |= 0u | (((( (uint8_t) TAGSize - 2) / 2) & 0x07 ) << 3 ) | ( ( (uint8_t) (15 - NonceSize) - 1) & 0x07); - - for (loopcounter = 0; loopcounter < NonceSize; loopcounter++) - { - blockb0[loopcounter+1] = Nonce[loopcounter]; - } - for ( ; loopcounter < 13; loopcounter++) - { - blockb0[loopcounter+1] = 0; - } - - blockb0[14] = ((ILength >> 8) & 0xFF); - blockb0[15] = (ILength & 0xFF); - - /************************* Formatting the initial counter *******************/ - /* Byte 0: - Bits 7 and 6 are reserved and shall be set to 0 - Bits 3, 4, and 5 shall also be set to 0, to ensure that all the counter blocks - are distinct from B0 - Bits 0, 1, and 2 contain the same encoding of q as in B0 - */ - ctr[0] = blockb0[0] & 0x07; - /* byte 1 to NonceSize is the IV (Nonce) */ - for(loopcounter = 1; loopcounter < NonceSize + 1; loopcounter++) - { - ctr[loopcounter] = blockb0[loopcounter]; - } - /* Set the LSB to 1 */ - ctr[15] |= 0x01; - - /* Crypto structures initialisation*/ - CRYP_KeyStructInit(&AES_CRYP_KeyInitStructure); - - switch(Keysize) - { - case 128: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_128b; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - case 192: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_192b; - AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - case 256: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_256b; - AES_CRYP_KeyInitStructure.CRYP_Key0Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key0Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - default: - break; - } - - /* CRYP Initialization Vectors */ - AES_CRYP_IVInitStructure.CRYP_IV0Left = (__REV(*(uint32_t*)(ctraddr))); - ctraddr+=4; - AES_CRYP_IVInitStructure.CRYP_IV0Right= (__REV(*(uint32_t*)(ctraddr))); - ctraddr+=4; - AES_CRYP_IVInitStructure.CRYP_IV1Left = (__REV(*(uint32_t*)(ctraddr))); - ctraddr+=4; - AES_CRYP_IVInitStructure.CRYP_IV1Right= (__REV(*(uint32_t*)(ctraddr))); - - /*------------------ AES Encryption ------------------*/ - if(Mode == MODE_ENCRYPT) /* AES encryption */ - { - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Key Initialisation */ - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* CRYP Initialization Vectors */ - CRYP_IVInit(&AES_CRYP_IVInitStructure); - - /* Crypto Init for Key preparation for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_CCM; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&AES_CRYP_InitStructure); - - /***************************** Init phase *********************************/ - /* Select init phase */ - CRYP_PhaseConfig(CRYP_Phase_Init); - - b0addr = (uint32_t)blockb0; - /* Write the blockb0 block in the IN FIFO */ - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - /* Wait for CRYPEN bit to be 0 */ - while(CRYP_GetCmdStatus() == ENABLE); - - /***************************** header phase *******************************/ - if(headersize != 0) - { - /* Select header phase */ - CRYP_PhaseConfig(CRYP_Phase_Header); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; (loopcounter < headersize); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - } - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - } - - /**************************** payload phase *******************************/ - if(ILength != 0) - { - /* Select payload phase */ - CRYP_PhaseConfig(CRYP_Phase_Payload); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; ((loopcounter < ILength) && (status != ERROR)); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - else - { - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Output block from the Output FIFO */ - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - } - } - } - - /***************************** final phase ********************************/ - /* Select final phase */ - CRYP_PhaseConfig(CRYP_Phase_Final); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - ctraddr = (uint32_t)ctr; - /* Write the counter block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - /* Reset bit 0 (after 8-bit swap) is equivalent to reset bit 24 (before 8-bit swap) */ - CRYP_DataIn(*(uint32_t*)(ctraddr) & 0xfeffffff); - - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Auth TAG in the IN FIFO */ - temptag[0] = CRYP_DataOut(); - temptag[1] = CRYP_DataOut(); - temptag[2] = CRYP_DataOut(); - temptag[3] = CRYP_DataOut(); - } - /*------------------ AES Decryption ------------------*/ - else /* AES decryption */ - { - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Key Initialisation */ - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* CRYP Initialization Vectors */ - CRYP_IVInit(&AES_CRYP_IVInitStructure); - - /* Crypto Init for Key preparation for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_CCM; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&AES_CRYP_InitStructure); - - /***************************** Init phase *********************************/ - /* Select init phase */ - CRYP_PhaseConfig(CRYP_Phase_Init); - - b0addr = (uint32_t)blockb0; - /* Write the blockb0 block in the IN FIFO */ - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - /* Wait for CRYPEN bit to be 0 */ - while(CRYP_GetCmdStatus() == ENABLE); - - /***************************** header phase *******************************/ - if(headersize != 0) - { - /* Select header phase */ - CRYP_PhaseConfig(CRYP_Phase_Header); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; (loopcounter < headersize); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - } - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - } - - /**************************** payload phase *******************************/ - if(ILength != 0) - { - /* Select payload phase */ - CRYP_PhaseConfig(CRYP_Phase_Payload); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; ((loopcounter < ILength) && (status != ERROR)); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - else - { - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Output block from the Output FIFO */ - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - } - } - } - - /***************************** final phase ********************************/ - /* Select final phase */ - CRYP_PhaseConfig(CRYP_Phase_Final); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - ctraddr = (uint32_t)ctr; - /* Write the counter block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - /* Reset bit 0 (after 8-bit swap) is equivalent to reset bit 24 (before 8-bit swap) */ - CRYP_DataIn(*(uint32_t*)(ctraddr) & 0xfeffffff); - - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Authentaication TAG (MAC) in the IN FIFO */ - temptag[0] = CRYP_DataOut(); - temptag[1] = CRYP_DataOut(); - temptag[2] = CRYP_DataOut(); - temptag[3] = CRYP_DataOut(); - } - - /* Copy temporary authentication TAG in user TAG buffer */ - for(loopcounter = 0; (loopcounter < TAGSize); loopcounter++) - { - /* Set the authentication TAG buffer */ - *((uint8_t*)tagaddr+loopcounter) = *((uint8_t*)temptag+loopcounter); - } - - /* Disable Crypto */ - CRYP_Cmd(DISABLE); - - return status; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c deleted file mode 100644 index 1acfc052..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c +++ /dev/null @@ -1,308 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_cryp_des.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides high level functions to encrypt and decrypt an - * input message using DES in ECB/CBC modes. - * It uses the stm32f4xx_cryp.c/.h drivers to access the STM32F4xx CRYP - * peripheral. - * -@verbatim - - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable The CRYP controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); function. - - (#) Encrypt and decrypt using DES in ECB Mode using CRYP_DES_ECB() function. - - (#) Encrypt and decrypt using DES in CBC Mode using CRYP_DES_CBC() function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_cryp.h" - - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRYP - * @brief CRYP driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define DESBUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - - -/** @defgroup CRYP_Private_Functions - * @{ - */ - -/** @defgroup CRYP_Group8 High Level DES functions - * @brief High Level DES functions - * -@verbatim - =============================================================================== - ##### High Level DES functions ##### - =============================================================================== -@endverbatim - * @{ - */ - -/** - * @brief Encrypt and decrypt using DES in ECB Mode - * @param Mode: encryption or decryption Mode. - * This parameter can be one of the following values: - * @arg MODE_ENCRYPT: Encryption - * @arg MODE_DECRYPT: Decryption - * @param Key: Key used for DES algorithm. - * @param Ilength: length of the Input buffer, must be a multiple of 8. - * @param Input: pointer to the Input buffer. - * @param Output: pointer to the returned buffer. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: Operation done - * - ERROR: Operation failed - */ -ErrorStatus CRYP_DES_ECB(uint8_t Mode, uint8_t Key[8], uint8_t *Input, - uint32_t Ilength, uint8_t *Output) -{ - CRYP_InitTypeDef DES_CRYP_InitStructure; - CRYP_KeyInitTypeDef DES_CRYP_KeyInitStructure; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t keyaddr = (uint32_t)Key; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - uint32_t i = 0; - - /* Crypto structures initialisation*/ - CRYP_KeyStructInit(&DES_CRYP_KeyInitStructure); - - /* Crypto Init for Encryption process */ - if( Mode == MODE_ENCRYPT ) /* DES encryption */ - { - DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - } - else/* if( Mode == MODE_DECRYPT )*/ /* DES decryption */ - { - DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - } - - DES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_DES_ECB; - DES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&DES_CRYP_InitStructure); - - /* Key Initialisation */ - DES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - DES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - CRYP_KeyInit(& DES_CRYP_KeyInitStructure); - - /* Flush IN/OUT FIFO */ - CRYP_FIFOFlush(); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - for(i=0; ((i
© COPYRIGHT 2013 STMicroelectronics
- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_cryp.h" - - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRYP - * @brief CRYP driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define TDESBUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - - -/** @defgroup CRYP_Private_Functions - * @{ - */ - -/** @defgroup CRYP_Group7 High Level TDES functions - * @brief High Level TDES functions - * -@verbatim - =============================================================================== - ##### High Level TDES functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Encrypt and decrypt using TDES in ECB Mode - * @param Mode: encryption or decryption Mode. - * This parameter can be one of the following values: - * @arg MODE_ENCRYPT: Encryption - * @arg MODE_DECRYPT: Decryption - * @param Key: Key used for TDES algorithm. - * @param Ilength: length of the Input buffer, must be a multiple of 8. - * @param Input: pointer to the Input buffer. - * @param Output: pointer to the returned buffer. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: Operation done - * - ERROR: Operation failed - */ -ErrorStatus CRYP_TDES_ECB(uint8_t Mode, uint8_t Key[24], uint8_t *Input, - uint32_t Ilength, uint8_t *Output) -{ - CRYP_InitTypeDef TDES_CRYP_InitStructure; - CRYP_KeyInitTypeDef TDES_CRYP_KeyInitStructure; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t keyaddr = (uint32_t)Key; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - uint32_t i = 0; - - /* Crypto structures initialisation*/ - CRYP_KeyStructInit(&TDES_CRYP_KeyInitStructure); - - /* Crypto Init for Encryption process */ - if(Mode == MODE_ENCRYPT) /* TDES encryption */ - { - TDES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - } - else /*if(Mode == MODE_DECRYPT)*/ /* TDES decryption */ - { - TDES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - } - - TDES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_TDES_ECB; - TDES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&TDES_CRYP_InitStructure); - - /* Key Initialisation */ - TDES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - CRYP_KeyInit(& TDES_CRYP_KeyInitStructure); - - /* Flush IN/OUT FIFO */ - CRYP_FIFOFlush(); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - for(i=0; ((i
© COPYRIGHT 2013 STMicroelectronics
- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_dac.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup DAC - * @brief DAC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* 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) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup DAC_Private_Functions - * @{ - */ - -/** @defgroup DAC_Group1 DAC channels configuration - * @brief DAC channels configuration: trigger, output buffer, data format - * -@verbatim - =============================================================================== - ##### DAC channels configuration: trigger, output buffer, data format ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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. - * @note When the DAC channel is enabled the trigger source can no more be modified. - * @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)); - } -} - -/** - * @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. - * @note In dual mode, a unique register access is required to write in both - * DAC channels at the same time. - * @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); -} -/** - * @} - */ - -/** @defgroup DAC_Group2 DMA management functions - * @brief DMA management functions - * -@verbatim - =============================================================================== - ##### DMA management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified DAC channel DMA request. - * @note When enabled DMA1 is generated when an external trigger (EXTI Line9, - * TIM2, TIM4, TIM5, TIM6, TIM7 or TIM8 but not a software trigger) occurs. - * @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. - * @note The DAC channel1 is mapped on DMA1 Stream 5 channel7 which must be - * already configured. - * @note The DAC channel2 is mapped on DMA1 Stream 6 channel7 which must be - * already configured. - * @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)); - } -} -/** - * @} - */ - -/** @defgroup DAC_Group3 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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)); - } -} - -/** - * @brief Checks whether the specified DAC flag is set 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_FLAG: specifies the flag to check. - * This parameter can be only of the following value: - * @arg DAC_FLAG_DMAUDR: DMA underrun flag - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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 channel'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 - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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 - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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 channel'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 - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c deleted file mode 100644 index 7cd438d7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c +++ /dev/null @@ -1,180 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dbgmcu.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides all the DBGMCU firmware functions. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_dbgmcu.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup DBGMCU - * @brief DBGMCU driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define IDCODE_DEVID_MASK ((uint32_t)0x00000FFF) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @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 low power mode behavior when the MCU is in Debug mode. - * @param DBGMCU_Periph: specifies the 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 - * @param NewState: new state of the specified low power mode 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; - } -} - -/** - * @brief Configures APB1 peripheral behavior when the MCU is in Debug mode. - * @param DBGMCU_Periph: specifies the APB1 peripheral. - * This parameter can be any combination of the following values: - * @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_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_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 - * @arg DBGMCU_RTC_STOP: RTC Calendar and Wakeup counter stopped when Core is halted. - * @arg DBGMCU_WWDG_STOP: Debug WWDG stopped when Core is halted - * @arg DBGMCU_IWDG_STOP: Debug IWDG 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_I2C3_SMBUS_TIMEOUT: I2C3 SMBUS timeout mode stopped when Core is halted - * @arg DBGMCU_CAN2_STOP: Debug CAN1 stopped when Core is halted - * @arg DBGMCU_CAN1_STOP: Debug CAN2 stopped when Core is halted - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DBGMCU_APB1PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DBGMCU_APB1PERIPH(DBGMCU_Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - DBGMCU->APB1FZ |= DBGMCU_Periph; - } - else - { - DBGMCU->APB1FZ &= ~DBGMCU_Periph; - } -} - -/** - * @brief Configures APB2 peripheral behavior when the MCU is in Debug mode. - * @param DBGMCU_Periph: specifies the APB2 peripheral. - * This parameter can be any combination of the following values: - * @arg DBGMCU_TIM1_STOP: TIM1 counter stopped when Core is halted - * @arg DBGMCU_TIM8_STOP: TIM8 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 - * @param NewState: new state of the specified peripheral in Debug mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DBGMCU_APB2PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DBGMCU_APB2PERIPH(DBGMCU_Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - DBGMCU->APB2FZ |= DBGMCU_Periph; - } - else - { - DBGMCU->APB2FZ &= ~DBGMCU_Periph; - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c deleted file mode 100644 index d6eef0b9..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c +++ /dev/null @@ -1,538 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dcmi.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the DCMI peripheral: - * + Initialization and Configuration - * + Image capture functions - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - The sequence below describes how to use this driver to capture image - from a camera module connected to the DCMI Interface. - This sequence does not take into account the configuration of the - camera module, which should be made before to configure and enable - the DCMI to capture images. - - (#) Enable the clock for the DCMI and associated GPIOs using the following - functions: - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI, ENABLE); - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) DCMI pins configuration - (++) Connect the involved DCMI pins to AF13 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_DCMI); - (++) Configure these DCMI pins in alternate function mode by calling - the function GPIO_Init(); - - (#) Declare a DCMI_InitTypeDef structure, for example: - DCMI_InitTypeDef DCMI_InitStructure; - and fill the DCMI_InitStructure variable with the allowed values - of the structure member. - - (#) Initialize the DCMI interface by calling the function - DCMI_Init(&DCMI_InitStructure); - - (#) Configure the DMA2_Stream1 channel1 to transfer Data from DCMI DR - register to the destination memory buffer. - - (#) Enable DCMI interface using the function - DCMI_Cmd(ENABLE); - - (#) Start the image capture using the function - DCMI_CaptureCmd(ENABLE); - - (#) At this stage the DCMI interface waits for the first start of frame, - then a DMA request is generated continuously/once (depending on the - mode used, Continuous/Snapshot) to transfer the received data into - the destination memory. - - -@- If you need to capture only a rectangular window from the received - image, you have to use the DCMI_CROPConfig() function to configure - the coordinates and size of the window to be captured, then enable - the Crop feature using DCMI_CROPCmd(ENABLE); - In this case, the Crop configuration should be made before to enable - and start the DCMI interface. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_dcmi.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup DCMI - * @brief DCMI driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup DCMI_Private_Functions - * @{ - */ - -/** @defgroup DCMI_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the DCMI registers to their default reset values. - * @param None - * @retval None - */ -void DCMI_DeInit(void) -{ - DCMI->CR = 0x0; - DCMI->IER = 0x0; - DCMI->ICR = 0x1F; - DCMI->ESCR = 0x0; - DCMI->ESUR = 0x0; - DCMI->CWSTRTR = 0x0; - DCMI->CWSIZER = 0x0; -} - -/** - * @brief Initializes the DCMI according to the specified parameters in the DCMI_InitStruct. - * @param DCMI_InitStruct: pointer to a DCMI_InitTypeDef structure that contains - * the configuration information for the DCMI. - * @retval None - */ -void DCMI_Init(DCMI_InitTypeDef* DCMI_InitStruct) -{ - uint32_t temp = 0x0; - - /* Check the parameters */ - assert_param(IS_DCMI_CAPTURE_MODE(DCMI_InitStruct->DCMI_CaptureMode)); - assert_param(IS_DCMI_SYNCHRO(DCMI_InitStruct->DCMI_SynchroMode)); - assert_param(IS_DCMI_PCKPOLARITY(DCMI_InitStruct->DCMI_PCKPolarity)); - assert_param(IS_DCMI_VSPOLARITY(DCMI_InitStruct->DCMI_VSPolarity)); - assert_param(IS_DCMI_HSPOLARITY(DCMI_InitStruct->DCMI_HSPolarity)); - assert_param(IS_DCMI_CAPTURE_RATE(DCMI_InitStruct->DCMI_CaptureRate)); - assert_param(IS_DCMI_EXTENDED_DATA(DCMI_InitStruct->DCMI_ExtendedDataMode)); - - /* The DCMI configuration registers should be programmed correctly before - enabling the CR_ENABLE Bit and the CR_CAPTURE Bit */ - DCMI->CR &= ~(DCMI_CR_ENABLE | DCMI_CR_CAPTURE); - - /* Reset the old DCMI configuration */ - temp = DCMI->CR; - - temp &= ~((uint32_t)DCMI_CR_CM | DCMI_CR_ESS | DCMI_CR_PCKPOL | - DCMI_CR_HSPOL | DCMI_CR_VSPOL | DCMI_CR_FCRC_0 | - DCMI_CR_FCRC_1 | DCMI_CR_EDM_0 | DCMI_CR_EDM_1); - - /* Sets the new configuration of the DCMI peripheral */ - temp |= ((uint32_t)DCMI_InitStruct->DCMI_CaptureMode | - DCMI_InitStruct->DCMI_SynchroMode | - DCMI_InitStruct->DCMI_PCKPolarity | - DCMI_InitStruct->DCMI_VSPolarity | - DCMI_InitStruct->DCMI_HSPolarity | - DCMI_InitStruct->DCMI_CaptureRate | - DCMI_InitStruct->DCMI_ExtendedDataMode); - - DCMI->CR = temp; -} - -/** - * @brief Fills each DCMI_InitStruct member with its default value. - * @param DCMI_InitStruct : pointer to a DCMI_InitTypeDef structure which will - * be initialized. - * @retval None - */ -void DCMI_StructInit(DCMI_InitTypeDef* DCMI_InitStruct) -{ - /* Set the default configuration */ - DCMI_InitStruct->DCMI_CaptureMode = DCMI_CaptureMode_Continuous; - DCMI_InitStruct->DCMI_SynchroMode = DCMI_SynchroMode_Hardware; - DCMI_InitStruct->DCMI_PCKPolarity = DCMI_PCKPolarity_Falling; - DCMI_InitStruct->DCMI_VSPolarity = DCMI_VSPolarity_Low; - DCMI_InitStruct->DCMI_HSPolarity = DCMI_HSPolarity_Low; - DCMI_InitStruct->DCMI_CaptureRate = DCMI_CaptureRate_All_Frame; - DCMI_InitStruct->DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b; -} - -/** - * @brief Initializes the DCMI peripheral CROP mode according to the specified - * parameters in the DCMI_CROPInitStruct. - * @note This function should be called before to enable and start the DCMI interface. - * @param DCMI_CROPInitStruct: pointer to a DCMI_CROPInitTypeDef structure that - * contains the configuration information for the DCMI peripheral CROP mode. - * @retval None - */ -void DCMI_CROPConfig(DCMI_CROPInitTypeDef* DCMI_CROPInitStruct) -{ - /* Sets the CROP window coordinates */ - DCMI->CWSTRTR = (uint32_t)((uint32_t)DCMI_CROPInitStruct->DCMI_HorizontalOffsetCount | - ((uint32_t)DCMI_CROPInitStruct->DCMI_VerticalStartLine << 16)); - - /* Sets the CROP window size */ - DCMI->CWSIZER = (uint32_t)(DCMI_CROPInitStruct->DCMI_CaptureCount | - ((uint32_t)DCMI_CROPInitStruct->DCMI_VerticalLineCount << 16)); -} - -/** - * @brief Enables or disables the DCMI Crop feature. - * @note This function should be called before to enable and start the DCMI interface. - * @param NewState: new state of the DCMI Crop feature. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_CROPCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DCMI Crop feature */ - DCMI->CR |= (uint32_t)DCMI_CR_CROP; - } - else - { - /* Disable the DCMI Crop feature */ - DCMI->CR &= ~(uint32_t)DCMI_CR_CROP; - } -} - -/** - * @brief Sets the embedded synchronization codes - * @param DCMI_CodesInitTypeDef: pointer to a DCMI_CodesInitTypeDef structure that - * contains the embedded synchronization codes for the DCMI peripheral. - * @retval None - */ -void DCMI_SetEmbeddedSynchroCodes(DCMI_CodesInitTypeDef* DCMI_CodesInitStruct) -{ - DCMI->ESCR = (uint32_t)(DCMI_CodesInitStruct->DCMI_FrameStartCode | - ((uint32_t)DCMI_CodesInitStruct->DCMI_LineStartCode << 8)| - ((uint32_t)DCMI_CodesInitStruct->DCMI_LineEndCode << 16)| - ((uint32_t)DCMI_CodesInitStruct->DCMI_FrameEndCode << 24)); -} - -/** - * @brief Enables or disables the DCMI JPEG format. - * @note The Crop and Embedded Synchronization features cannot be used in this mode. - * @param NewState: new state of the DCMI JPEG format. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_JPEGCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DCMI JPEG format */ - DCMI->CR |= (uint32_t)DCMI_CR_JPEG; - } - else - { - /* Disable the DCMI JPEG format */ - DCMI->CR &= ~(uint32_t)DCMI_CR_JPEG; - } -} -/** - * @} - */ - -/** @defgroup DCMI_Group2 Image capture functions - * @brief Image capture functions - * -@verbatim - =============================================================================== - ##### Image capture functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the DCMI interface. - * @param NewState: new state of the DCMI interface. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_Cmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DCMI by setting ENABLE bit */ - DCMI->CR |= (uint32_t)DCMI_CR_ENABLE; - } - else - { - /* Disable the DCMI by clearing ENABLE bit */ - DCMI->CR &= ~(uint32_t)DCMI_CR_ENABLE; - } -} - -/** - * @brief Enables or disables the DCMI Capture. - * @param NewState: new state of the DCMI capture. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_CaptureCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DCMI Capture */ - DCMI->CR |= (uint32_t)DCMI_CR_CAPTURE; - } - else - { - /* Disable the DCMI Capture */ - DCMI->CR &= ~(uint32_t)DCMI_CR_CAPTURE; - } -} - -/** - * @brief Reads the data stored in the DR register. - * @param None - * @retval Data register value - */ -uint32_t DCMI_ReadData(void) -{ - return DCMI->DR; -} -/** - * @} - */ - -/** @defgroup DCMI_Group3 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the DCMI interface interrupts. - * @param DCMI_IT: specifies the DCMI interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg DCMI_IT_FRAME: Frame capture complete interrupt mask - * @arg DCMI_IT_OVF: Overflow interrupt mask - * @arg DCMI_IT_ERR: Synchronization error interrupt mask - * @arg DCMI_IT_VSYNC: VSYNC interrupt mask - * @arg DCMI_IT_LINE: Line interrupt mask - * @param NewState: new state of the specified DCMI interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_ITConfig(uint16_t DCMI_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DCMI_CONFIG_IT(DCMI_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the Interrupt sources */ - DCMI->IER |= DCMI_IT; - } - else - { - /* Disable the Interrupt sources */ - DCMI->IER &= (uint16_t)(~DCMI_IT); - } -} - -/** - * @brief Checks whether the DCMI interface flag is set or not. - * @param DCMI_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg DCMI_FLAG_FRAMERI: Frame capture complete Raw flag mask - * @arg DCMI_FLAG_OVFRI: Overflow Raw flag mask - * @arg DCMI_FLAG_ERRRI: Synchronization error Raw flag mask - * @arg DCMI_FLAG_VSYNCRI: VSYNC Raw flag mask - * @arg DCMI_FLAG_LINERI: Line Raw flag mask - * @arg DCMI_FLAG_FRAMEMI: Frame capture complete Masked flag mask - * @arg DCMI_FLAG_OVFMI: Overflow Masked flag mask - * @arg DCMI_FLAG_ERRMI: Synchronization error Masked flag mask - * @arg DCMI_FLAG_VSYNCMI: VSYNC Masked flag mask - * @arg DCMI_FLAG_LINEMI: Line Masked flag mask - * @arg DCMI_FLAG_HSYNC: HSYNC flag mask - * @arg DCMI_FLAG_VSYNC: VSYNC flag mask - * @arg DCMI_FLAG_FNE: Fifo not empty flag mask - * @retval The new state of DCMI_FLAG (SET or RESET). - */ -FlagStatus DCMI_GetFlagStatus(uint16_t DCMI_FLAG) -{ - FlagStatus bitstatus = RESET; - uint32_t dcmireg, tempreg = 0; - - /* Check the parameters */ - assert_param(IS_DCMI_GET_FLAG(DCMI_FLAG)); - - /* Get the DCMI register index */ - dcmireg = (((uint16_t)DCMI_FLAG) >> 12); - - if (dcmireg == 0x00) /* The FLAG is in RISR register */ - { - tempreg= DCMI->RISR; - } - else if (dcmireg == 0x02) /* The FLAG is in SR register */ - { - tempreg = DCMI->SR; - } - else /* The FLAG is in MISR register */ - { - tempreg = DCMI->MISR; - } - - if ((tempreg & DCMI_FLAG) != (uint16_t)RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - /* Return the DCMI_FLAG status */ - return bitstatus; -} - -/** - * @brief Clears the DCMI's pending flags. - * @param DCMI_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg DCMI_FLAG_FRAMERI: Frame capture complete Raw flag mask - * @arg DCMI_FLAG_OVFRI: Overflow Raw flag mask - * @arg DCMI_FLAG_ERRRI: Synchronization error Raw flag mask - * @arg DCMI_FLAG_VSYNCRI: VSYNC Raw flag mask - * @arg DCMI_FLAG_LINERI: Line Raw flag mask - * @retval None - */ -void DCMI_ClearFlag(uint16_t DCMI_FLAG) -{ - /* Check the parameters */ - assert_param(IS_DCMI_CLEAR_FLAG(DCMI_FLAG)); - - /* Clear the flag by writing in the ICR register 1 in the corresponding - Flag position*/ - - DCMI->ICR = DCMI_FLAG; -} - -/** - * @brief Checks whether the DCMI interrupt has occurred or not. - * @param DCMI_IT: specifies the DCMI interrupt source to check. - * This parameter can be one of the following values: - * @arg DCMI_IT_FRAME: Frame capture complete interrupt mask - * @arg DCMI_IT_OVF: Overflow interrupt mask - * @arg DCMI_IT_ERR: Synchronization error interrupt mask - * @arg DCMI_IT_VSYNC: VSYNC interrupt mask - * @arg DCMI_IT_LINE: Line interrupt mask - * @retval The new state of DCMI_IT (SET or RESET). - */ -ITStatus DCMI_GetITStatus(uint16_t DCMI_IT) -{ - ITStatus bitstatus = RESET; - uint32_t itstatus = 0; - - /* Check the parameters */ - assert_param(IS_DCMI_GET_IT(DCMI_IT)); - - itstatus = DCMI->MISR & DCMI_IT; /* Only masked interrupts are checked */ - - if ((itstatus != (uint16_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the DCMI's interrupt pending bits. - * @param DCMI_IT: specifies the DCMI interrupt pending bit to clear. - * This parameter can be any combination of the following values: - * @arg DCMI_IT_FRAME: Frame capture complete interrupt mask - * @arg DCMI_IT_OVF: Overflow interrupt mask - * @arg DCMI_IT_ERR: Synchronization error interrupt mask - * @arg DCMI_IT_VSYNC: VSYNC interrupt mask - * @arg DCMI_IT_LINE: Line interrupt mask - * @retval None - */ -void DCMI_ClearITPendingBit(uint16_t DCMI_IT) -{ - /* Clear the interrupt pending Bit by writing in the ICR register 1 in the - corresponding pending Bit position*/ - - DCMI->ICR = DCMI_IT; -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c deleted file mode 100644 index 1678c17d..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c +++ /dev/null @@ -1,1301 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dma.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Direct Memory Access controller (DMA): - * + Initialization and Configuration - * + Data Counter - * + Double Buffer mode configuration and command - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable The DMA controller clock using RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA1, ENABLE) - function for DMA1 or using RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA2, ENABLE) - function for DMA2. - - (#) Enable and configure the peripheral to be connected to the DMA Stream - (except for internal SRAM / FLASH memories: no initialization is - necessary). - - (#) For a given Stream, program the required configuration through following parameters: - Source and Destination addresses, Transfer Direction, Transfer size, Source and Destination - data formats, Circular or Normal mode, Stream Priority level, Source and Destination - Incrementation mode, FIFO mode and its Threshold (if needed), Burst - mode for Source and/or Destination (if needed) using the DMA_Init() function. - To avoid filling unneccessary fields, you can call DMA_StructInit() function - to initialize a given structure with default values (reset values), the modify - only necessary fields - (ie. Source and Destination addresses, Transfer size and Data Formats). - - (#) Enable the NVIC and the corresponding interrupt(s) using the function - DMA_ITConfig() if you need to use DMA interrupts. - - (#) Optionally, if the Circular mode is enabled, you can use the Double buffer mode by configuring - the second Memory address and the first Memory to be used through the function - DMA_DoubleBufferModeConfig(). Then enable the Double buffer mode through the function - DMA_DoubleBufferModeCmd(). These operations must be done before step 6. - - (#) Enable the DMA stream using the DMA_Cmd() function. - - (#) Activate the needed Stream Request using PPP_DMACmd() function for - any PPP peripheral except internal SRAM and FLASH (ie. SPI, USART ...) - The function allowing this operation is provided in each PPP peripheral - driver (ie. SPI_DMACmd for SPI peripheral). - Once the Stream is enabled, it is not possible to modify its configuration - unless the stream is stopped and disabled. - After enabling the Stream, it is advised to monitor the EN bit status using - the function DMA_GetCmdStatus(). In case of configuration errors or bus errors - this bit will remain reset and all transfers on this Stream will remain on hold. - - (#) Optionally, you can configure the number of data to be transferred - when the Stream is disabled (ie. after each Transfer Complete event - or when a Transfer Error occurs) using the function DMA_SetCurrDataCounter(). - And you can get the number of remaining data to be transferred using - the function DMA_GetCurrDataCounter() at run time (when the DMA Stream is - enabled and running). - - (#) To control DMA events you can use one of the following two methods: - (##) Check on DMA Stream flags using the function DMA_GetFlagStatus(). - (##) Use DMA interrupts through the function DMA_ITConfig() at initialization - phase and DMA_GetITStatus() function into interrupt routines in - communication phase. - [..] - After checking on a flag you should clear it using DMA_ClearFlag() - function. And after checking on an interrupt event you should - clear it using DMA_ClearITPendingBit() function. - - (#) Optionally, if Circular mode and Double Buffer mode are enabled, you can modify - the Memory Addresses using the function DMA_MemoryTargetConfig(). Make sure that - the Memory Address to be modified is not the one currently in use by DMA Stream. - This condition can be monitored using the function DMA_GetCurrentMemoryTarget(). - - (#) Optionally, Pause-Resume operations may be performed: - The DMA_Cmd() function may be used to perform Pause-Resume operation. - When a transfer is ongoing, calling this function to disable the - Stream will cause the transfer to be paused. All configuration registers - and the number of remaining data will be preserved. When calling again - this function to re-enable the Stream, the transfer will be resumed from - the point where it was paused. - - -@- Memory-to-Memory transfer is possible by setting the address of the memory into - the Peripheral registers. In this mode, Circular mode and Double Buffer mode - are not allowed. - - -@- The FIFO is used mainly to reduce bus usage and to allow data - packing/unpacking: it is possible to set different Data Sizes for - the Peripheral and the Memory (ie. you can set Half-Word data size - for the peripheral to access its data register and set Word data size - for the Memory to gain in access time. Each two Half-words will be - packed and written in a single access to a Word in the Memory). - - -@- When FIFO is disabled, it is not allowed to configure different - Data Sizes for Source and Destination. In this case the Peripheral - Data Size will be applied to both Source and Destination. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_dma.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup DMA - * @brief DMA driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* Masks Definition */ -#define TRANSFER_IT_ENABLE_MASK (uint32_t)(DMA_SxCR_TCIE | DMA_SxCR_HTIE | \ - DMA_SxCR_TEIE | DMA_SxCR_DMEIE) - -#define DMA_Stream0_IT_MASK (uint32_t)(DMA_LISR_FEIF0 | DMA_LISR_DMEIF0 | \ - DMA_LISR_TEIF0 | DMA_LISR_HTIF0 | \ - DMA_LISR_TCIF0) - -#define DMA_Stream1_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK << 6) -#define DMA_Stream2_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK << 16) -#define DMA_Stream3_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK << 22) -#define DMA_Stream4_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK | (uint32_t)0x20000000) -#define DMA_Stream5_IT_MASK (uint32_t)(DMA_Stream1_IT_MASK | (uint32_t)0x20000000) -#define DMA_Stream6_IT_MASK (uint32_t)(DMA_Stream2_IT_MASK | (uint32_t)0x20000000) -#define DMA_Stream7_IT_MASK (uint32_t)(DMA_Stream3_IT_MASK | (uint32_t)0x20000000) -#define TRANSFER_IT_MASK (uint32_t)0x0F3C0F3C -#define HIGH_ISR_MASK (uint32_t)0x20000000 -#define RESERVED_MASK (uint32_t)0x0F7D0F7D - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - - -/** @defgroup DMA_Private_Functions - * @{ - */ - -/** @defgroup DMA_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] - This subsection provides functions allowing to initialize the DMA Stream source - and destination addresses, incrementation and data sizes, transfer direction, - buffer size, circular/normal mode selection, memory-to-memory mode selection - and Stream priority value. - [..] - The DMA_Init() function follows the DMA configuration procedures as described in - reference manual (RM0090) except the first point: waiting on EN bit to be reset. - This condition should be checked by user application using the function DMA_GetCmdStatus() - before calling the DMA_Init() function. - -@endverbatim - * @{ - */ - -/** - * @brief Deinitialize the DMAy Streamx registers to their default reset values. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @retval None - */ -void DMA_DeInit(DMA_Stream_TypeDef* DMAy_Streamx) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Disable the selected DMAy Streamx */ - DMAy_Streamx->CR &= ~((uint32_t)DMA_SxCR_EN); - - /* Reset DMAy Streamx control register */ - DMAy_Streamx->CR = 0; - - /* Reset DMAy Streamx Number of Data to Transfer register */ - DMAy_Streamx->NDTR = 0; - - /* Reset DMAy Streamx peripheral address register */ - DMAy_Streamx->PAR = 0; - - /* Reset DMAy Streamx memory 0 address register */ - DMAy_Streamx->M0AR = 0; - - /* Reset DMAy Streamx memory 1 address register */ - DMAy_Streamx->M1AR = 0; - - /* Reset DMAy Streamx FIFO control register */ - DMAy_Streamx->FCR = (uint32_t)0x00000021; - - /* Reset interrupt pending bits for the selected stream */ - if (DMAy_Streamx == DMA1_Stream0) - { - /* Reset interrupt pending bits for DMA1 Stream0 */ - DMA1->LIFCR = DMA_Stream0_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream1) - { - /* Reset interrupt pending bits for DMA1 Stream1 */ - DMA1->LIFCR = DMA_Stream1_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream2) - { - /* Reset interrupt pending bits for DMA1 Stream2 */ - DMA1->LIFCR = DMA_Stream2_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream3) - { - /* Reset interrupt pending bits for DMA1 Stream3 */ - DMA1->LIFCR = DMA_Stream3_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream4) - { - /* Reset interrupt pending bits for DMA1 Stream4 */ - DMA1->HIFCR = DMA_Stream4_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream5) - { - /* Reset interrupt pending bits for DMA1 Stream5 */ - DMA1->HIFCR = DMA_Stream5_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream6) - { - /* Reset interrupt pending bits for DMA1 Stream6 */ - DMA1->HIFCR = (uint32_t)DMA_Stream6_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream7) - { - /* Reset interrupt pending bits for DMA1 Stream7 */ - DMA1->HIFCR = DMA_Stream7_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream0) - { - /* Reset interrupt pending bits for DMA2 Stream0 */ - DMA2->LIFCR = DMA_Stream0_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream1) - { - /* Reset interrupt pending bits for DMA2 Stream1 */ - DMA2->LIFCR = DMA_Stream1_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream2) - { - /* Reset interrupt pending bits for DMA2 Stream2 */ - DMA2->LIFCR = DMA_Stream2_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream3) - { - /* Reset interrupt pending bits for DMA2 Stream3 */ - DMA2->LIFCR = DMA_Stream3_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream4) - { - /* Reset interrupt pending bits for DMA2 Stream4 */ - DMA2->HIFCR = DMA_Stream4_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream5) - { - /* Reset interrupt pending bits for DMA2 Stream5 */ - DMA2->HIFCR = DMA_Stream5_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream6) - { - /* Reset interrupt pending bits for DMA2 Stream6 */ - DMA2->HIFCR = DMA_Stream6_IT_MASK; - } - else - { - if (DMAy_Streamx == DMA2_Stream7) - { - /* Reset interrupt pending bits for DMA2 Stream7 */ - DMA2->HIFCR = DMA_Stream7_IT_MASK; - } - } -} - -/** - * @brief Initializes the DMAy Streamx according to the specified parameters in - * the DMA_InitStruct structure. - * @note Before calling this function, it is recommended to check that the Stream - * is actually disabled using the function DMA_GetCmdStatus(). - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_InitStruct: pointer to a DMA_InitTypeDef structure that contains - * the configuration information for the specified DMA Stream. - * @retval None - */ -void DMA_Init(DMA_Stream_TypeDef* DMAy_Streamx, DMA_InitTypeDef* DMA_InitStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CHANNEL(DMA_InitStruct->DMA_Channel)); - assert_param(IS_DMA_DIRECTION(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_FIFO_MODE_STATE(DMA_InitStruct->DMA_FIFOMode)); - assert_param(IS_DMA_FIFO_THRESHOLD(DMA_InitStruct->DMA_FIFOThreshold)); - assert_param(IS_DMA_MEMORY_BURST(DMA_InitStruct->DMA_MemoryBurst)); - assert_param(IS_DMA_PERIPHERAL_BURST(DMA_InitStruct->DMA_PeripheralBurst)); - - /*------------------------- DMAy Streamx CR Configuration ------------------*/ - /* Get the DMAy_Streamx CR value */ - tmpreg = DMAy_Streamx->CR; - - /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */ - tmpreg &= ((uint32_t)~(DMA_SxCR_CHSEL | DMA_SxCR_MBURST | DMA_SxCR_PBURST | \ - DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \ - DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \ - DMA_SxCR_DIR)); - - /* Configure DMAy Streamx: */ - /* Set CHSEL bits according to DMA_CHSEL value */ - /* Set DIR bits according to DMA_DIR 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 CIRC bit according to DMA_Mode value */ - /* Set PL bits according to DMA_Priority value */ - /* Set MBURST bits according to DMA_MemoryBurst value */ - /* Set PBURST bits according to DMA_PeripheralBurst value */ - tmpreg |= DMA_InitStruct->DMA_Channel | DMA_InitStruct->DMA_DIR | - DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc | - DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize | - DMA_InitStruct->DMA_Mode | DMA_InitStruct->DMA_Priority | - DMA_InitStruct->DMA_MemoryBurst | DMA_InitStruct->DMA_PeripheralBurst; - - /* Write to DMAy Streamx CR register */ - DMAy_Streamx->CR = tmpreg; - - /*------------------------- DMAy Streamx FCR Configuration -----------------*/ - /* Get the DMAy_Streamx FCR value */ - tmpreg = DMAy_Streamx->FCR; - - /* Clear DMDIS and FTH bits */ - tmpreg &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH); - - /* Configure DMAy Streamx FIFO: - Set DMDIS bits according to DMA_FIFOMode value - Set FTH bits according to DMA_FIFOThreshold value */ - tmpreg |= DMA_InitStruct->DMA_FIFOMode | DMA_InitStruct->DMA_FIFOThreshold; - - /* Write to DMAy Streamx CR */ - DMAy_Streamx->FCR = tmpreg; - - /*------------------------- DMAy Streamx NDTR Configuration ----------------*/ - /* Write to DMAy Streamx NDTR register */ - DMAy_Streamx->NDTR = DMA_InitStruct->DMA_BufferSize; - - /*------------------------- DMAy Streamx PAR Configuration -----------------*/ - /* Write to DMAy Streamx PAR */ - DMAy_Streamx->PAR = DMA_InitStruct->DMA_PeripheralBaseAddr; - - /*------------------------- DMAy Streamx M0AR Configuration ----------------*/ - /* Write to DMAy Streamx M0AR */ - DMAy_Streamx->M0AR = DMA_InitStruct->DMA_Memory0BaseAddr; -} - -/** - * @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_Channel member */ - DMA_InitStruct->DMA_Channel = 0; - - /* Initialize the DMA_PeripheralBaseAddr member */ - DMA_InitStruct->DMA_PeripheralBaseAddr = 0; - - /* Initialize the DMA_Memory0BaseAddr member */ - DMA_InitStruct->DMA_Memory0BaseAddr = 0; - - /* Initialize the DMA_DIR member */ - DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralToMemory; - - /* 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_FIFOMode member */ - DMA_InitStruct->DMA_FIFOMode = DMA_FIFOMode_Disable; - - /* Initialize the DMA_FIFOThreshold member */ - DMA_InitStruct->DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; - - /* Initialize the DMA_MemoryBurst member */ - DMA_InitStruct->DMA_MemoryBurst = DMA_MemoryBurst_Single; - - /* Initialize the DMA_PeripheralBurst member */ - DMA_InitStruct->DMA_PeripheralBurst = DMA_PeripheralBurst_Single; -} - -/** - * @brief Enables or disables the specified DMAy Streamx. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param NewState: new state of the DMAy Streamx. - * This parameter can be: ENABLE or DISABLE. - * - * @note This function may be used to perform Pause-Resume operation. When a - * transfer is ongoing, calling this function to disable the Stream will - * cause the transfer to be paused. All configuration registers and the - * number of remaining data will be preserved. When calling again this - * function to re-enable the Stream, the transfer will be resumed from - * the point where it was paused. - * - * @note After configuring the DMA Stream (DMA_Init() function) and enabling the - * stream, it is recommended to check (or wait until) the DMA Stream is - * effectively enabled. A Stream may remain disabled if a configuration - * parameter is wrong. - * After disabling a DMA Stream, it is also recommended to check (or wait - * until) the DMA Stream is effectively disabled. If a Stream is disabled - * while a data transfer is ongoing, the current data will be transferred - * and the Stream will be effectively disabled only after the transfer of - * this single data is finished. - * - * @retval None - */ -void DMA_Cmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMAy Streamx by setting EN bit */ - DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_EN; - } - else - { - /* Disable the selected DMAy Streamx by clearing EN bit */ - DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_EN; - } -} - -/** - * @brief Configures, when the PINC (Peripheral Increment address mode) bit is - * set, if the peripheral address should be incremented with the data - * size (configured with PSIZE bits) or by a fixed offset equal to 4 - * (32-bit aligned addresses). - * - * @note This function has no effect if the Peripheral Increment mode is disabled. - * - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_Pincos: specifies the Peripheral increment offset size. - * This parameter can be one of the following values: - * @arg DMA_PINCOS_Psize: Peripheral address increment is done - * accordingly to PSIZE parameter. - * @arg DMA_PINCOS_WordAligned: Peripheral address increment offset is - * fixed to 4 (32-bit aligned addresses). - * @retval None - */ -void DMA_PeriphIncOffsetSizeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_Pincos) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_PINCOS_SIZE(DMA_Pincos)); - - /* Check the needed Peripheral increment offset */ - if(DMA_Pincos != DMA_PINCOS_Psize) - { - /* Configure DMA_SxCR_PINCOS bit with the input parameter */ - DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_PINCOS; - } - else - { - /* Clear the PINCOS bit: Peripheral address incremented according to PSIZE */ - DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_PINCOS; - } -} - -/** - * @brief Configures, when the DMAy Streamx is disabled, the flow controller for - * the next transactions (Peripheral or Memory). - * - * @note Before enabling this feature, check if the used peripheral supports - * the Flow Controller mode or not. - * - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_FlowCtrl: specifies the DMA flow controller. - * This parameter can be one of the following values: - * @arg DMA_FlowCtrl_Memory: DMAy_Streamx transactions flow controller is - * the DMA controller. - * @arg DMA_FlowCtrl_Peripheral: DMAy_Streamx transactions flow controller - * is the peripheral. - * @retval None - */ -void DMA_FlowControllerConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FlowCtrl) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_FLOW_CTRL(DMA_FlowCtrl)); - - /* Check the needed flow controller */ - if(DMA_FlowCtrl != DMA_FlowCtrl_Memory) - { - /* Configure DMA_SxCR_PFCTRL bit with the input parameter */ - DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_PFCTRL; - } - else - { - /* Clear the PFCTRL bit: Memory is the flow controller */ - DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_PFCTRL; - } -} -/** - * @} - */ - -/** @defgroup DMA_Group2 Data Counter functions - * @brief Data Counter functions - * -@verbatim - =============================================================================== - ##### Data Counter functions ##### - =============================================================================== - [..] - This subsection provides function allowing to configure and read the buffer size - (number of data to be transferred). - [..] - The DMA data counter can be written only when the DMA Stream is disabled - (ie. after transfer complete event). - [..] - The following function can be used to write the Stream data counter value: - (+) void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter); - -@- It is advised to use this function rather than DMA_Init() in situations - where only the Data buffer needs to be reloaded. - -@- If the Source and Destination Data Sizes are different, then the value - written in data counter, expressing the number of transfers, is relative - to the number of transfers from the Peripheral point of view. - ie. If Memory data size is Word, Peripheral data size is Half-Words, - then the value to be configured in the data counter is the number - of Half-Words to be transferred from/to the peripheral. - [..] - The DMA data counter can be read to indicate the number of remaining transfers for - the relative DMA Stream. This counter is decremented at the end of each data - transfer and when the transfer is complete: - (+) If Normal mode is selected: the counter is set to 0. - (+) If Circular mode is selected: the counter is reloaded with the initial value - (configured before enabling the DMA Stream) - [..] - The following function can be used to read the Stream data counter value: - (+) uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx); - -@endverbatim - * @{ - */ - -/** - * @brief Writes the number of data units to be transferred on the DMAy Streamx. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param Counter: Number of data units to be transferred (from 0 to 65535) - * Number of data items depends only on the Peripheral data format. - * - * @note If Peripheral data format is Bytes: number of data units is equal - * to total number of bytes to be transferred. - * - * @note If Peripheral data format is Half-Word: number of data units is - * equal to total number of bytes to be transferred / 2. - * - * @note If Peripheral data format is Word: number of data units is equal - * to total number of bytes to be transferred / 4. - * - * @note In Memory-to-Memory transfer mode, the memory buffer pointed by - * DMAy_SxPAR register is considered as Peripheral. - * - * @retval The number of remaining data units in the current DMAy Streamx transfer. - */ -void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Write the number of data units to be transferred */ - DMAy_Streamx->NDTR = (uint16_t)Counter; -} - -/** - * @brief Returns the number of remaining data units in the current DMAy Streamx transfer. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @retval The number of remaining data units in the current DMAy Streamx transfer. - */ -uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Return the number of remaining data units for DMAy Streamx */ - return ((uint16_t)(DMAy_Streamx->NDTR)); -} -/** - * @} - */ - -/** @defgroup DMA_Group3 Double Buffer mode functions - * @brief Double Buffer mode functions - * -@verbatim - =============================================================================== - ##### Double Buffer mode functions ##### - =============================================================================== - [..] - This subsection provides function allowing to configure and control the double - buffer mode parameters. - - [..] - The Double Buffer mode can be used only when Circular mode is enabled. - The Double Buffer mode cannot be used when transferring data from Memory to Memory. - - [..] - The Double Buffer mode allows to set two different Memory addresses from/to which - the DMA controller will access alternatively (after completing transfer to/from - target memory 0, it will start transfer to/from target memory 1). - This allows to reduce software overhead for double buffering and reduce the CPU - access time. - - [..] - Two functions must be called before calling the DMA_Init() function: - (+) void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, - uint32_t Memory1BaseAddr, uint32_t DMA_CurrentMemory); - (+) void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); - - [..] - DMA_DoubleBufferModeConfig() is called to configure the Memory 1 base address - and the first Memory target from/to which the transfer will start after - enabling the DMA Stream. Then DMA_DoubleBufferModeCmd() must be called - to enable the Double Buffer mode (or disable it when it should not be used). - - [..] - Two functions can be called dynamically when the transfer is ongoing (or when the DMA Stream is - stopped) to modify on of the target Memories addresses or to check wich Memory target is currently - used: - (+) void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, - uint32_t MemoryBaseAddr, uint32_t DMA_MemoryTarget); - (+) uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx); - - [..] - DMA_MemoryTargetConfig() can be called to modify the base address of one of - the two target Memories. - The Memory of which the base address will be modified must not be currently - be used by the DMA Stream (ie. if the DMA Stream is currently transferring - from Memory 1 then you can only modify base address of target Memory 0 and vice versa). - To check this condition, it is recommended to use the function DMA_GetCurrentMemoryTarget() which - returns the index of the Memory target currently in use by the DMA Stream. - -@endverbatim - * @{ - */ - -/** - * @brief Configures, when the DMAy Streamx is disabled, the double buffer mode - * and the current memory target. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param Memory1BaseAddr: the base address of the second buffer (Memory 1) - * @param DMA_CurrentMemory: specifies which memory will be first buffer for - * the transactions when the Stream will be enabled. - * This parameter can be one of the following values: - * @arg DMA_Memory_0: Memory 0 is the current buffer. - * @arg DMA_Memory_1: Memory 1 is the current buffer. - * - * @note Memory0BaseAddr is set by the DMA structure configuration in DMA_Init(). - * - * @retval None - */ -void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t Memory1BaseAddr, - uint32_t DMA_CurrentMemory) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CURRENT_MEM(DMA_CurrentMemory)); - - if (DMA_CurrentMemory != DMA_Memory_0) - { - /* Set Memory 1 as current memory address */ - DMAy_Streamx->CR |= (uint32_t)(DMA_SxCR_CT); - } - else - { - /* Set Memory 0 as current memory address */ - DMAy_Streamx->CR &= ~(uint32_t)(DMA_SxCR_CT); - } - - /* Write to DMAy Streamx M1AR */ - DMAy_Streamx->M1AR = Memory1BaseAddr; -} - -/** - * @brief Enables or disables the double buffer mode for the selected DMA stream. - * @note This function can be called only when the DMA Stream is disabled. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param NewState: new state of the DMAy Streamx double buffer mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Configure the Double Buffer mode */ - if (NewState != DISABLE) - { - /* Enable the Double buffer mode */ - DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_DBM; - } - else - { - /* Disable the Double buffer mode */ - DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_DBM; - } -} - -/** - * @brief Configures the Memory address for the next buffer transfer in double - * buffer mode (for dynamic use). This function can be called when the - * DMA Stream is enabled and when the transfer is ongoing. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param MemoryBaseAddr: The base address of the target memory buffer - * @param DMA_MemoryTarget: Next memory target to be used. - * This parameter can be one of the following values: - * @arg DMA_Memory_0: To use the memory address 0 - * @arg DMA_Memory_1: To use the memory address 1 - * - * @note It is not allowed to modify the Base Address of a target Memory when - * this target is involved in the current transfer. ie. If the DMA Stream - * is currently transferring to/from Memory 1, then it not possible to - * modify Base address of Memory 1, but it is possible to modify Base - * address of Memory 0. - * To know which Memory is currently used, you can use the function - * DMA_GetCurrentMemoryTarget(). - * - * @retval None - */ -void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t MemoryBaseAddr, - uint32_t DMA_MemoryTarget) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CURRENT_MEM(DMA_MemoryTarget)); - - /* Check the Memory target to be configured */ - if (DMA_MemoryTarget != DMA_Memory_0) - { - /* Write to DMAy Streamx M1AR */ - DMAy_Streamx->M1AR = MemoryBaseAddr; - } - else - { - /* Write to DMAy Streamx M0AR */ - DMAy_Streamx->M0AR = MemoryBaseAddr; - } -} - -/** - * @brief Returns the current memory target used by double buffer transfer. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @retval The memory target number: 0 for Memory0 or 1 for Memory1. - */ -uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx) -{ - uint32_t tmp = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Get the current memory target */ - if ((DMAy_Streamx->CR & DMA_SxCR_CT) != 0) - { - /* Current memory buffer used is Memory 1 */ - tmp = 1; - } - else - { - /* Current memory buffer used is Memory 0 */ - tmp = 0; - } - return tmp; -} -/** - * @} - */ - -/** @defgroup DMA_Group4 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - [..] - This subsection provides functions allowing to - (+) Check the DMA enable status - (+) Check the FIFO status - (+) Configure the DMA Interrupts sources and check or clear the flags or - pending bits status. - - [..] - (#) DMA Enable status: - After configuring the DMA Stream (DMA_Init() function) and enabling - the stream, it is recommended to check (or wait until) the DMA Stream - is effectively enabled. A Stream may remain disabled if a configuration - parameter is wrong. After disabling a DMA Stream, it is also recommended - to check (or wait until) the DMA Stream is effectively disabled. - If a Stream is disabled while a data transfer is ongoing, the current - data will be transferred and the Stream will be effectively disabled - only after this data transfer completion. - To monitor this state it is possible to use the following function: - (++) FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx); - - (#) FIFO Status: - It is possible to monitor the FIFO status when a transfer is ongoing - using the following function: - (++) uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx); - - (#) DMA Interrupts and Flags: - The user should identify which mode will be used in his application - to manage the DMA controller events: Polling mode or Interrupt mode. - - *** Polling Mode *** - ==================== - [..] - Each DMA stream can be managed through 4 event Flags: - (x : DMA Stream number ) - (#) DMA_FLAG_FEIFx : to indicate that a FIFO Mode Transfer Error event occurred. - (#) DMA_FLAG_DMEIFx : to indicate that a Direct Mode Transfer Error event occurred. - (#) DMA_FLAG_TEIFx : to indicate that a Transfer Error event occurred. - (#) DMA_FLAG_HTIFx : to indicate that a Half-Transfer Complete event occurred. - (#) DMA_FLAG_TCIFx : to indicate that a Transfer Complete event occurred . - [..] - In this Mode it is advised to use the following functions: - (+) FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); - (+) void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); - - *** Interrupt Mode *** - ====================== - [..] - Each DMA Stream can be managed through 4 Interrupts: - - *** Interrupt Source *** - ======================== - [..] - (#) DMA_IT_FEIFx : specifies the interrupt source for the FIFO Mode Transfer Error event. - (#) DMA_IT_DMEIFx : specifies the interrupt source for the Direct Mode Transfer Error event. - (#) DMA_IT_TEIFx : specifies the interrupt source for the Transfer Error event. - (#) DMA_IT_HTIFx : specifies the interrupt source for the Half-Transfer Complete event. - (#) DMA_IT_TCIFx : specifies the interrupt source for the a Transfer Complete event. - [..] - In this Mode it is advised to use the following functions: - (+) void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState); - (+) ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); - (+) void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); - -@endverbatim - * @{ - */ - -/** - * @brief Returns the status of EN bit for the specified DMAy Streamx. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * - * @note After configuring the DMA Stream (DMA_Init() function) and enabling - * the stream, it is recommended to check (or wait until) the DMA Stream - * is effectively enabled. A Stream may remain disabled if a configuration - * parameter is wrong. - * After disabling a DMA Stream, it is also recommended to check (or wait - * until) the DMA Stream is effectively disabled. If a Stream is disabled - * while a data transfer is ongoing, the current data will be transferred - * and the Stream will be effectively disabled only after the transfer - * of this single data is finished. - * - * @retval Current state of the DMAy Streamx (ENABLE or DISABLE). - */ -FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx) -{ - FunctionalState state = DISABLE; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - if ((DMAy_Streamx->CR & (uint32_t)DMA_SxCR_EN) != 0) - { - /* The selected DMAy Streamx EN bit is set (DMA is still transferring) */ - state = ENABLE; - } - else - { - /* The selected DMAy Streamx EN bit is cleared (DMA is disabled and - all transfers are complete) */ - state = DISABLE; - } - return state; -} - -/** - * @brief Returns the current DMAy Streamx FIFO filled level. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @retval The FIFO filling state. - * - DMA_FIFOStatus_Less1QuarterFull: when FIFO is less than 1 quarter-full - * and not empty. - * - DMA_FIFOStatus_1QuarterFull: if more than 1 quarter-full. - * - DMA_FIFOStatus_HalfFull: if more than 1 half-full. - * - DMA_FIFOStatus_3QuartersFull: if more than 3 quarters-full. - * - DMA_FIFOStatus_Empty: when FIFO is empty - * - DMA_FIFOStatus_Full: when FIFO is full - */ -uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Get the FIFO level bits */ - tmpreg = (uint32_t)((DMAy_Streamx->FCR & DMA_SxFCR_FS)); - - return tmpreg; -} - -/** - * @brief Checks whether the specified DMAy Streamx flag is set or not. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg DMA_FLAG_TCIFx: Streamx transfer complete flag - * @arg DMA_FLAG_HTIFx: Streamx half transfer complete flag - * @arg DMA_FLAG_TEIFx: Streamx transfer error flag - * @arg DMA_FLAG_DMEIFx: Streamx direct mode error flag - * @arg DMA_FLAG_FEIFx: Streamx FIFO error flag - * Where x can be 0 to 7 to select the DMA Stream. - * @retval The new state of DMA_FLAG (SET or RESET). - */ -FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG) -{ - FlagStatus bitstatus = RESET; - DMA_TypeDef* DMAy; - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_GET_FLAG(DMA_FLAG)); - - /* Determine the DMA to which belongs the stream */ - if (DMAy_Streamx < DMA2_Stream0) - { - /* DMAy_Streamx belongs to DMA1 */ - DMAy = DMA1; - } - else - { - /* DMAy_Streamx belongs to DMA2 */ - DMAy = DMA2; - } - - /* Check if the flag is in HISR or LISR */ - if ((DMA_FLAG & HIGH_ISR_MASK) != (uint32_t)RESET) - { - /* Get DMAy HISR register value */ - tmpreg = DMAy->HISR; - } - else - { - /* Get DMAy LISR register value */ - tmpreg = DMAy->LISR; - } - - /* Mask the reserved bits */ - tmpreg &= (uint32_t)RESERVED_MASK; - - /* Check the status of the specified DMA flag */ - if ((tmpreg & DMA_FLAG) != (uint32_t)RESET) - { - /* DMA_FLAG is set */ - bitstatus = SET; - } - else - { - /* DMA_FLAG is reset */ - bitstatus = RESET; - } - - /* Return the DMA_FLAG status */ - return bitstatus; -} - -/** - * @brief Clears the DMAy Streamx's pending flags. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg DMA_FLAG_TCIFx: Streamx transfer complete flag - * @arg DMA_FLAG_HTIFx: Streamx half transfer complete flag - * @arg DMA_FLAG_TEIFx: Streamx transfer error flag - * @arg DMA_FLAG_DMEIFx: Streamx direct mode error flag - * @arg DMA_FLAG_FEIFx: Streamx FIFO error flag - * Where x can be 0 to 7 to select the DMA Stream. - * @retval None - */ -void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG) -{ - DMA_TypeDef* DMAy; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CLEAR_FLAG(DMA_FLAG)); - - /* Determine the DMA to which belongs the stream */ - if (DMAy_Streamx < DMA2_Stream0) - { - /* DMAy_Streamx belongs to DMA1 */ - DMAy = DMA1; - } - else - { - /* DMAy_Streamx belongs to DMA2 */ - DMAy = DMA2; - } - - /* Check if LIFCR or HIFCR register is targeted */ - if ((DMA_FLAG & HIGH_ISR_MASK) != (uint32_t)RESET) - { - /* Set DMAy HIFCR register clear flag bits */ - DMAy->HIFCR = (uint32_t)(DMA_FLAG & RESERVED_MASK); - } - else - { - /* Set DMAy LIFCR register clear flag bits */ - DMAy->LIFCR = (uint32_t)(DMA_FLAG & RESERVED_MASK); - } -} - -/** - * @brief Enables or disables the specified DMAy Streamx interrupts. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_IT: specifies the DMA interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg DMA_IT_TC: Transfer complete interrupt mask - * @arg DMA_IT_HT: Half transfer complete interrupt mask - * @arg DMA_IT_TE: Transfer error interrupt mask - * @arg DMA_IT_FE: FIFO error interrupt mask - * @param NewState: new state of the specified DMA interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CONFIG_IT(DMA_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Check if the DMA_IT parameter contains a FIFO interrupt */ - if ((DMA_IT & DMA_IT_FE) != 0) - { - if (NewState != DISABLE) - { - /* Enable the selected DMA FIFO interrupts */ - DMAy_Streamx->FCR |= (uint32_t)DMA_IT_FE; - } - else - { - /* Disable the selected DMA FIFO interrupts */ - DMAy_Streamx->FCR &= ~(uint32_t)DMA_IT_FE; - } - } - - /* Check if the DMA_IT parameter contains a Transfer interrupt */ - if (DMA_IT != DMA_IT_FE) - { - if (NewState != DISABLE) - { - /* Enable the selected DMA transfer interrupts */ - DMAy_Streamx->CR |= (uint32_t)(DMA_IT & TRANSFER_IT_ENABLE_MASK); - } - else - { - /* Disable the selected DMA transfer interrupts */ - DMAy_Streamx->CR &= ~(uint32_t)(DMA_IT & TRANSFER_IT_ENABLE_MASK); - } - } -} - -/** - * @brief Checks whether the specified DMAy Streamx interrupt has occurred or not. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_IT: specifies the DMA interrupt source to check. - * This parameter can be one of the following values: - * @arg DMA_IT_TCIFx: Streamx transfer complete interrupt - * @arg DMA_IT_HTIFx: Streamx half transfer complete interrupt - * @arg DMA_IT_TEIFx: Streamx transfer error interrupt - * @arg DMA_IT_DMEIFx: Streamx direct mode error interrupt - * @arg DMA_IT_FEIFx: Streamx FIFO error interrupt - * Where x can be 0 to 7 to select the DMA Stream. - * @retval The new state of DMA_IT (SET or RESET). - */ -ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT) -{ - ITStatus bitstatus = RESET; - DMA_TypeDef* DMAy; - uint32_t tmpreg = 0, enablestatus = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_GET_IT(DMA_IT)); - - /* Determine the DMA to which belongs the stream */ - if (DMAy_Streamx < DMA2_Stream0) - { - /* DMAy_Streamx belongs to DMA1 */ - DMAy = DMA1; - } - else - { - /* DMAy_Streamx belongs to DMA2 */ - DMAy = DMA2; - } - - /* Check if the interrupt enable bit is in the CR or FCR register */ - if ((DMA_IT & TRANSFER_IT_MASK) != (uint32_t)RESET) - { - /* Get the interrupt enable position mask in CR register */ - tmpreg = (uint32_t)((DMA_IT >> 11) & TRANSFER_IT_ENABLE_MASK); - - /* Check the enable bit in CR register */ - enablestatus = (uint32_t)(DMAy_Streamx->CR & tmpreg); - } - else - { - /* Check the enable bit in FCR register */ - enablestatus = (uint32_t)(DMAy_Streamx->FCR & DMA_IT_FE); - } - - /* Check if the interrupt pending flag is in LISR or HISR */ - if ((DMA_IT & HIGH_ISR_MASK) != (uint32_t)RESET) - { - /* Get DMAy HISR register value */ - tmpreg = DMAy->HISR ; - } - else - { - /* Get DMAy LISR register value */ - tmpreg = DMAy->LISR ; - } - - /* mask all reserved bits */ - tmpreg &= (uint32_t)RESERVED_MASK; - - /* Check the status of the specified DMA interrupt */ - if (((tmpreg & DMA_IT) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) - { - /* DMA_IT is set */ - bitstatus = SET; - } - else - { - /* DMA_IT is reset */ - bitstatus = RESET; - } - - /* Return the DMA_IT status */ - return bitstatus; -} - -/** - * @brief Clears the DMAy Streamx's interrupt pending bits. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_IT: specifies the DMA interrupt pending bit to clear. - * This parameter can be any combination of the following values: - * @arg DMA_IT_TCIFx: Streamx transfer complete interrupt - * @arg DMA_IT_HTIFx: Streamx half transfer complete interrupt - * @arg DMA_IT_TEIFx: Streamx transfer error interrupt - * @arg DMA_IT_DMEIFx: Streamx direct mode error interrupt - * @arg DMA_IT_FEIFx: Streamx FIFO error interrupt - * Where x can be 0 to 7 to select the DMA Stream. - * @retval None - */ -void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT) -{ - DMA_TypeDef* DMAy; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CLEAR_IT(DMA_IT)); - - /* Determine the DMA to which belongs the stream */ - if (DMAy_Streamx < DMA2_Stream0) - { - /* DMAy_Streamx belongs to DMA1 */ - DMAy = DMA1; - } - else - { - /* DMAy_Streamx belongs to DMA2 */ - DMAy = DMA2; - } - - /* Check if LIFCR or HIFCR register is targeted */ - if ((DMA_IT & HIGH_ISR_MASK) != (uint32_t)RESET) - { - /* Set DMAy HIFCR register clear interrupt bits */ - DMAy->HIFCR = (uint32_t)(DMA_IT & RESERVED_MASK); - } - else - { - /* Set DMAy LIFCR register clear interrupt bits */ - DMAy->LIFCR = (uint32_t)(DMA_IT & RESERVED_MASK); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c deleted file mode 100644 index 0de36e9e..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c +++ /dev/null @@ -1,313 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_exti.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the EXTI peripheral: - * + Initialization and Configuration - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### EXTI features ##### - =================================================================== - - [..] External interrupt/event lines are mapped as following: - (#) All available GPIO pins are connected to the 16 external - interrupt/event lines from EXTI0 to EXTI15. - (#) EXTI line 16 is connected to the PVD Output - (#) EXTI line 17 is connected to the RTC Alarm event - (#) EXTI line 18 is connected to the USB OTG FS Wakeup from suspend event - (#) EXTI line 19 is connected to the Ethernet Wakeup event - (#) EXTI line 20 is connected to the USB OTG HS (configured in FS) Wakeup event - (#) EXTI line 21 is connected to the RTC Tamper and Time Stamp events - (#) EXTI line 22 is connected to the RTC Wakeup event - - - ##### How to use this driver ##### - =================================================================== - - [..] In order to use an I/O pin as an external interrupt source, follow steps - below: - (#) Configure the I/O in input mode using GPIO_Init() - (#) Select the input source pin for the EXTI line using SYSCFG_EXTILineConfig() - (#) Select the mode(interrupt, event) and configure the trigger - selection (Rising, falling or both) using EXTI_Init() - (#) Configure NVIC IRQ channel mapped to the EXTI line using NVIC_Init() - - [..] - (@) SYSCFG APB clock must be enabled to get write access to SYSCFG_EXTICRx - registers using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_exti.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup EXTI - * @brief EXTI driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -#define EXTI_LINENONE ((uint32_t)0x00000) /* No interrupt selected */ - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup EXTI_Private_Functions - * @{ - */ - -/** @defgroup EXTI_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 = 0x007FFFFF; -} - -/** - * @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 on selected EXTI line. - * @param EXTI_Line: specifies the EXTI line on which the software interrupt - * will be generated. - * This parameter can be any combination of EXTI_Linex where x can be (0..22) - * @retval None - */ -void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line) -{ - /* Check the parameters */ - assert_param(IS_EXTI_LINE(EXTI_Line)); - - EXTI->SWIER |= EXTI_Line; -} - -/** - * @} - */ - -/** @defgroup EXTI_Group2 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 EXTI_Linex where x can be(0..22) - * @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..22) - * @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 EXTI_Linex where x can be(0..22) - * @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..22) - * @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c deleted file mode 100644 index 8e44926c..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c +++ /dev/null @@ -1,1180 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_flash.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the FLASH peripheral: - * + FLASH Interface configuration - * + FLASH Memory Programming - * + Option Bytes Programming - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - This driver provides functions to configure and program the FLASH memory - of all STM32F4xx devices. These functions are split in 4 groups: - - (#) FLASH Interface configuration functions: this group includes the - management of the following features: - (++) Set the latency - (++) Enable/Disable the prefetch buffer - (++) Enable/Disable the Instruction cache and the Data cache - (++) Reset the Instruction cache and the Data cache - - (#) FLASH Memory Programming functions: this group includes all needed - functions to erase and program the main memory: - (++) Lock and Unlock the FLASH interface - (++) Erase function: Erase sector, erase all sectors - (++) Program functions: byte, half word, word and double word - - (#) Option Bytes Programming functions: this group includes all needed - functions to manage the Option Bytes: - (++) Set/Reset the write protection - (++) Set the Read protection Level - (++) Set the BOR level - (++) Program the user Option Bytes - (++) Launch the Option Bytes loader - - (#) Interrupts and flags management functions: this group - includes all needed functions to: - (++) Enable/Disable the FLASH interrupt sources - (++) Get flags status - (++) Clear flags - (++) Get FLASH operation status - (++) Wait for last FLASH operation - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_flash.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup FLASH - * @brief FLASH driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define SECTOR_MASK ((uint32_t)0xFFFFFF07) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup FLASH_Private_Functions - * @{ - */ - -/** @defgroup FLASH_Group1 FLASH Interface configuration functions - * @brief FLASH Interface configuration functions - * - -@verbatim - =============================================================================== - ##### FLASH Interface configuration functions ##### - =============================================================================== - [..] - This group includes the following functions: - (+) void FLASH_SetLatency(uint32_t FLASH_Latency) - To correctly read data from FLASH memory, the number of wait states (LATENCY) - must be correctly programmed according to the frequency of the CPU clock - (HCLK) and the supply voltage of the device. - +-------------------------------------------------------------------------------------+ - | Latency | HCLK clock frequency (MHz) | - | |---------------------------------------------------------------------| - | | voltage range | voltage range | voltage range | voltage range | - | | 2.7 V - 3.6 V | 2.4 V - 2.7 V | 2.1 V - 2.4 V | 1.8 V - 2.1 V | - |---------------|----------------|----------------|-----------------|-----------------| - |0WS(1CPU cycle)|0 < HCLK <= 30 |0 < HCLK <= 24 |0 < HCLK <= 22 |0 < HCLK <= 20 | - |---------------|----------------|----------------|-----------------|-----------------| - |1WS(2CPU cycle)|30 < HCLK <= 60 |24 < HCLK <= 48 |22 < HCLK <= 44 |20 < HCLK <= 40 | - |---------------|----------------|----------------|-----------------|-----------------| - |2WS(3CPU cycle)|60 < HCLK <= 90 |48 < HCLK <= 72 |44 < HCLK <= 66 |40 < HCLK <= 60 | - |---------------|----------------|----------------|-----------------|-----------------| - |3WS(4CPU cycle)|90 < HCLK <= 120|72 < HCLK <= 96 |66 < HCLK <= 88 |60 < HCLK <= 80 | - |---------------|----------------|----------------|-----------------|-----------------| - |4WS(5CPU cycle)|120< HCLK <= 150|96 < HCLK <= 120|88 < HCLK <= 110 |80 < HCLK <= 100 | - |---------------|----------------|----------------|-----------------|-----------------| - |5WS(6CPU cycle)|120< HCLK <= 168|120< HCLK <= 144|110 < HCLK <= 132|100 < HCLK <= 120| - |---------------|----------------|----------------|-----------------|-----------------| - |6WS(7CPU cycle)| NA |144< HCLK <= 168|132 < HCLK <= 154|120 < HCLK <= 140| - |---------------|----------------|----------------|-----------------|-----------------| - |7WS(8CPU cycle)| NA | NA |154 < HCLK <= 168|140 < HCLK <= 160| - +-------------------------------------------------------------------------------------+ - - [..] - +-------------------------------------------------------------------------------------------------------------------+ - | | voltage range | voltage range | voltage range | voltage range | voltage range 2.7 V - 3.6 V | - | | 2.7 V - 3.6 V | 2.4 V - 2.7 V | 2.1 V - 2.4 V | 1.8 V - 2.1 V | with External Vpp = 9V | - |---------------|----------------|----------------|-----------------|-----------------|-----------------------------| - |Max Parallelism| x32 | x16 | x8 | x64 | - |---------------|----------------|----------------|-----------------|-----------------|-----------------------------| - |PSIZE[1:0] | 10 | 01 | 00 | 11 | - +-------------------------------------------------------------------------------------------------------------------+ - -@- When VOS bit (in PWR_CR register) is reset to 0 , the maximum value of HCLK is 144 MHz. - You can use PWR_MainRegulatorModeConfig() function to set or reset this bit. - -@- On STM32F40xx/41xx devices: - (++) when VOS = '0', the maximum value of fHCLK = 144MHz. - (++) when VOS = '1', the maximum value of fHCLK = 168MHz. - [..] - On STM32F427x/437x devices: - (++) when VOS[1:0] = '0x01', the maximum value of fHCLK is 120MHz. - (++) when VOS[1:0] = '0x10', the maximum value of fHCLK is 144MHz. - (++) when VOS[1:0] = '0x11', the maximum value of f is 168MHz - You can use PWR_MainRegulatorModeConfig() function to control VOS bits. - - (+) void FLASH_PrefetchBufferCmd(FunctionalState NewState) - (+) void FLASH_InstructionCacheCmd(FunctionalState NewState) - (+) void FLASH_DataCacheCmd(FunctionalState NewState) - (+) void FLASH_InstructionCacheReset(void) - (+) void FLASH_DataCacheReset(void) - - [..] - The unlock sequence is not needed for these functions. - -@endverbatim - * @{ - */ - -/** - * @brief Sets the code latency value. - * @param FLASH_Latency: specifies the FLASH Latency value. - * This parameter can be one of the following values: - * @arg FLASH_Latency_0: FLASH Zero Latency cycle - * @arg FLASH_Latency_1: FLASH One Latency cycle - * @arg FLASH_Latency_2: FLASH Two Latency cycles - * @arg FLASH_Latency_3: FLASH Three Latency cycles - * @arg FLASH_Latency_4: FLASH Four Latency cycles - * @arg FLASH_Latency_5: FLASH Five Latency cycles - * @arg FLASH_Latency_6: FLASH Six Latency cycles - * @arg FLASH_Latency_7: FLASH Seven Latency cycles - * For STM32F40xx/41xx and STM32F427x/437x devices this parameter can be - * a value between FLASH_Latency_0 and FLASH_Latency_7. - * @retval None - */ -void FLASH_SetLatency(uint32_t FLASH_Latency) -{ - /* Check the parameters */ - assert_param(IS_FLASH_LATENCY(FLASH_Latency)); - - /* Perform Byte access to FLASH_ACR[8:0] to set the Latency value */ - *(__IO uint8_t *)ACR_BYTE0_ADDRESS = (uint8_t)FLASH_Latency; -} - -/** - * @brief Enables or disables the Prefetch Buffer. - * @param NewState: new state of the Prefetch Buffer. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_PrefetchBufferCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Enable or disable the Prefetch Buffer */ - if(NewState != DISABLE) - { - FLASH->ACR |= FLASH_ACR_PRFTEN; - } - else - { - FLASH->ACR &= (~FLASH_ACR_PRFTEN); - } -} - -/** - * @brief Enables or disables the Instruction Cache feature. - * @param NewState: new state of the Instruction Cache. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_InstructionCacheCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if(NewState != DISABLE) - { - FLASH->ACR |= FLASH_ACR_ICEN; - } - else - { - FLASH->ACR &= (~FLASH_ACR_ICEN); - } -} - -/** - * @brief Enables or disables the Data Cache feature. - * @param NewState: new state of the Data Cache. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_DataCacheCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if(NewState != DISABLE) - { - FLASH->ACR |= FLASH_ACR_DCEN; - } - else - { - FLASH->ACR &= (~FLASH_ACR_DCEN); - } -} - -/** - * @brief Resets the Instruction Cache. - * @note This function must be used only when the Instruction Cache is disabled. - * @param None - * @retval None - */ -void FLASH_InstructionCacheReset(void) -{ - FLASH->ACR |= FLASH_ACR_ICRST; -} - -/** - * @brief Resets the Data Cache. - * @note This function must be used only when the Data Cache is disabled. - * @param None - * @retval None - */ -void FLASH_DataCacheReset(void) -{ - FLASH->ACR |= FLASH_ACR_DCRST; -} - -/** - * @} - */ - -/** @defgroup FLASH_Group2 FLASH Memory Programming functions - * @brief FLASH Memory Programming functions - * -@verbatim - =============================================================================== - ##### FLASH Memory Programming functions ##### - =============================================================================== - [..] - This group includes the following functions: - (+) void FLASH_Unlock(void) - (+) void FLASH_Lock(void) - (+) FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange) - (+) FLASH_Status FLASH_EraseAllSectors(uint8_t VoltageRange) - (+) FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data) - (+) FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) - (+) FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) - (+) FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data) - [..] - Any operation of erase or program should follow these steps: - (#) Call the FLASH_Unlock() function to enable the FLASH control register access - - (#) Call the desired function to erase sector(s) or program data - - (#) Call the FLASH_Lock() function to disable the FLASH control register access - (recommended to protect the FLASH memory against possible unwanted operation) - -@endverbatim - * @{ - */ - -/** - * @brief Unlocks the FLASH control register access - * @param None - * @retval None - */ -void FLASH_Unlock(void) -{ - if((FLASH->CR & FLASH_CR_LOCK) != RESET) - { - /* Authorize the FLASH Registers access */ - FLASH->KEYR = FLASH_KEY1; - FLASH->KEYR = FLASH_KEY2; - } -} - -/** - * @brief Locks the FLASH control register access - * @param None - * @retval None - */ -void FLASH_Lock(void) -{ - /* Set the LOCK Bit to lock the FLASH Registers access */ - FLASH->CR |= FLASH_CR_LOCK; -} - -/** - * @brief Erases a specified FLASH Sector. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param FLASH_Sector: The Sector number to be erased. - * For STM32F40xx/41xx devices this parameter can be a value between - * FLASH_Sector_0 and FLASH_Sector_11. - * For STM32F427x/437x devices this parameter can be a value between - * FLASH_Sector_0 and FLASH_Sector_23. - * - * @param VoltageRange: The device voltage range which defines the erase parallelism. - * This parameter can be one of the following values: - * @arg VoltageRange_1: when the device voltage range is 1.8V to 2.1V, - * the operation will be done by byte (8-bit) - * @arg VoltageRange_2: when the device voltage range is 2.1V to 2.7V, - * the operation will be done by half word (16-bit) - * @arg VoltageRange_3: when the device voltage range is 2.7V to 3.6V, - * the operation will be done by word (32-bit) - * @arg VoltageRange_4: when the device voltage range is 2.7V to 3.6V + External Vpp, - * the operation will be done by double word (64-bit) - * - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange) -{ - uint32_t tmp_psize = 0x0; - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_SECTOR(FLASH_Sector)); - assert_param(IS_VOLTAGERANGE(VoltageRange)); - - if(VoltageRange == VoltageRange_1) - { - tmp_psize = FLASH_PSIZE_BYTE; - } - else if(VoltageRange == VoltageRange_2) - { - tmp_psize = FLASH_PSIZE_HALF_WORD; - } - else if(VoltageRange == VoltageRange_3) - { - tmp_psize = FLASH_PSIZE_WORD; - } - else - { - tmp_psize = FLASH_PSIZE_DOUBLE_WORD; - } - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to erase the sector */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= tmp_psize; - FLASH->CR &= SECTOR_MASK; - FLASH->CR |= FLASH_CR_SER | FLASH_Sector; - FLASH->CR |= FLASH_CR_STRT; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the erase operation is completed, disable the SER Bit */ - FLASH->CR &= (~FLASH_CR_SER); - FLASH->CR &= SECTOR_MASK; - } - /* Return the Erase Status */ - return status; -} - -/** - * @brief Erases all FLASH Sectors. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param VoltageRange: The device voltage range which defines the erase parallelism. - * This parameter can be one of the following values: - * @arg VoltageRange_1: when the device voltage range is 1.8V to 2.1V, - * the operation will be done by byte (8-bit) - * @arg VoltageRange_2: when the device voltage range is 2.1V to 2.7V, - * the operation will be done by half word (16-bit) - * @arg VoltageRange_3: when the device voltage range is 2.7V to 3.6V, - * the operation will be done by word (32-bit) - * @arg VoltageRange_4: when the device voltage range is 2.7V to 3.6V + External Vpp, - * the operation will be done by double word (64-bit) - * - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_EraseAllSectors(uint8_t VoltageRange) -{ -#if defined (STM32F427X) || (STM32F40XX) - uint32_t tmp_psize = 0x0; -#endif - FLASH_Status status = FLASH_COMPLETE; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - assert_param(IS_VOLTAGERANGE(VoltageRange)); - -#if defined (STM32F427X) || (STM32F40XX) - if(VoltageRange == VoltageRange_1) - { - tmp_psize = FLASH_PSIZE_BYTE; - } - else if(VoltageRange == VoltageRange_2) - { - tmp_psize = FLASH_PSIZE_HALF_WORD; - } - else if(VoltageRange == VoltageRange_3) - { - tmp_psize = FLASH_PSIZE_WORD; - } - else - { - tmp_psize = FLASH_PSIZE_DOUBLE_WORD; - } -#endif - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to erase all sectors */ -#if defined (STM32F427X) - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= tmp_psize; - FLASH->CR |= (FLASH_CR_MER1 | FLASH_CR_MER2); - FLASH->CR |= FLASH_CR_STRT; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the erase operation is completed, disable the MER Bit */ - FLASH->CR &= ~(FLASH_CR_MER1 | FLASH_CR_MER2); -#endif /* STM32F427X */ - -#ifdef STM32F40XX - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= tmp_psize; - FLASH->CR |= FLASH_CR_MER; - FLASH->CR |= FLASH_CR_STRT; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the erase operation is completed, disable the MER Bit */ - FLASH->CR &= (~FLASH_CR_MER); -#endif /* STM32F40XX */ - - } - /* Return the Erase Status */ - return status; -} - -/** - * @brief Programs a double word (64-bit) at a specified address. - * @note This function must be used when the device voltage range is from - * 2.7V to 3.6V and an External Vpp is present. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param Address: specifies the address to be programmed. - * @param Data: specifies the data to be programmed. - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_ADDRESS(Address)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to program the new data */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= FLASH_PSIZE_DOUBLE_WORD; - FLASH->CR |= FLASH_CR_PG; - - *(__IO uint64_t*)Address = Data; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the program operation is completed, disable the PG Bit */ - FLASH->CR &= (~FLASH_CR_PG); - } - /* Return the Program Status */ - return status; -} - -/** - * @brief Programs a word (32-bit) at a specified address. - * - * @note This function must be used when the device voltage range is from 2.7V to 3.6V. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param Address: specifies the address to be programmed. - * This parameter can be any address in Program memory zone or in OTP zone. - * @param Data: specifies the data to be programmed. - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_ADDRESS(Address)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to program the new data */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= FLASH_PSIZE_WORD; - FLASH->CR |= FLASH_CR_PG; - - *(__IO uint32_t*)Address = Data; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the program operation is completed, disable the PG Bit */ - FLASH->CR &= (~FLASH_CR_PG); - } - /* Return the Program Status */ - return status; -} - -/** - * @brief Programs a half word (16-bit) at a specified address. - * @note This function must be used when the device voltage range is from 2.1V to 3.6V. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param Address: specifies the address to be programmed. - * This parameter can be any address in Program memory zone or in OTP zone. - * @param Data: specifies the data to be programmed. - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_ADDRESS(Address)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to program the new data */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= FLASH_PSIZE_HALF_WORD; - FLASH->CR |= FLASH_CR_PG; - - *(__IO uint16_t*)Address = Data; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the program operation is completed, disable the PG Bit */ - FLASH->CR &= (~FLASH_CR_PG); - } - /* Return the Program Status */ - return status; -} - -/** - * @brief Programs a byte (8-bit) at a specified address. - * @note This function can be used within all the device supply voltage ranges. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param Address: specifies the address to be programmed. - * This parameter can be any address in Program memory zone or in OTP zone. - * @param Data: specifies the data to be programmed. - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_ADDRESS(Address)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to program the new data */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= FLASH_PSIZE_BYTE; - FLASH->CR |= FLASH_CR_PG; - - *(__IO uint8_t*)Address = Data; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the program operation is completed, disable the PG Bit */ - FLASH->CR &= (~FLASH_CR_PG); - } - - /* Return the Program Status */ - return status; -} - -/** - * @} - */ - -/** @defgroup FLASH_Group3 Option Bytes Programming functions - * @brief Option Bytes Programming functions - * -@verbatim - =============================================================================== - ##### Option Bytes Programming functions ##### - =============================================================================== - [..] - This group includes the following functions: - (+) void FLASH_OB_Unlock(void) - (+) void FLASH_OB_Lock(void) - (+) void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) - (+) void FLASH_OB_WRP1Config(uint32_t OB_WRP, FunctionalState NewState) - (+) void FLASH_OB_RDPConfig(uint8_t OB_RDP) - (+) void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) - (+) void FLASH_OB_BORConfig(uint8_t OB_BOR) - (+) FLASH_Status FLASH_ProgramOTP(uint32_t Address, uint32_t Data) - (+) FLASH_Status FLASH_OB_Launch(void) - (+) uint32_t FLASH_OB_GetUser(void) - (+) uint8_t FLASH_OB_GetWRP(void) - (+) uint8_t FLASH_OB_GetWRP1(void) - (+) uint8_t FLASH_OB_GetRDP(void) - (+) uint8_t FLASH_OB_GetBOR(void) - [..] - Any operation of erase or program should follow these steps: - (#) Call the FLASH_OB_Unlock() function to enable the FLASH option control - register access - - (#) Call one or several functions to program the desired Option Bytes: - (++) void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) - => to Enable/Disable the desired sector write protection - (++) void FLASH_OB_RDPConfig(uint8_t OB_RDP) => to set the desired read - Protection Level - (++) void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) - => to configure the user Option Bytes. - (++) void FLASH_OB_BORConfig(uint8_t OB_BOR) => to set the BOR Level - - (#) Once all needed Option Bytes to be programmed are correctly written, - call the FLASH_OB_Launch() function to launch the Option Bytes - programming process. - - -@- When changing the IWDG mode from HW to SW or from SW to HW, a system - reset is needed to make the change effective. - - (#) Call the FLASH_OB_Lock() function to disable the FLASH option control - register access (recommended to protect the Option Bytes against - possible unwanted operations) - -@endverbatim - * @{ - */ - -/** - * @brief Unlocks the FLASH Option Control Registers access. - * @param None - * @retval None - */ -void FLASH_OB_Unlock(void) -{ - if((FLASH->OPTCR & FLASH_OPTCR_OPTLOCK) != RESET) - { - /* Authorizes the Option Byte register programming */ - FLASH->OPTKEYR = FLASH_OPT_KEY1; - FLASH->OPTKEYR = FLASH_OPT_KEY2; - } -} - -/** - * @brief Locks the FLASH Option Control Registers access. - * @param None - * @retval None - */ -void FLASH_OB_Lock(void) -{ - /* Set the OPTLOCK Bit to lock the FLASH Option Byte Registers access */ - FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK; -} - -/** - * @brief Enables or disables the write protection of the desired sectors - * - * @note When the memory read protection level is selected (RDP level = 1), - * it is not possible to program or erase the flash sector i if CortexM4 - * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 - * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). - * - * @param OB_WRP: specifies the sector(s) to be write protected or unprotected. - * This parameter can be one of the following values: - * @arg OB_WRP: A value between OB_WRP_Sector0 and OB_WRP_Sector11 - * @arg OB_WRP_Sector_All - * @param Newstate: new state of the Write Protection. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_OB_WRP(OB_WRP)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - if(NewState != DISABLE) - { - *(__IO uint16_t*)OPTCR_BYTE2_ADDRESS &= (~OB_WRP); - } - else - { - *(__IO uint16_t*)OPTCR_BYTE2_ADDRESS |= (uint16_t)OB_WRP; - } - } -} - -/** - * @brief Enables or disables the write protection of the desired sectors - * @note This function can be used only for STM32F427x/437x devices. - * @note When the memory read out protection is selected (RDP level = 1), - * it is not possible to program or erase the flash sector i if CortexM4 - * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 - * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). - * - * @param OB_WRP: specifies the sector(s) to be write protected or unprotected. - * This parameter can be one of the following values: - * @arg OB_WRP: A value between OB_WRP_Sector12 and OB_WRP_Sector23 - * @arg OB_WRP_Sector_All - * @param Newstate: new state of the Write Protection. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_OB_WRP1Config(uint32_t OB_WRP, FunctionalState NewState) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_OB_WRP(OB_WRP)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - if(NewState != DISABLE) - { - *(__IO uint16_t*)OPTCR1_BYTE2_ADDRESS &= (~OB_WRP); - } - else - { - *(__IO uint16_t*)OPTCR1_BYTE2_ADDRESS |= (uint16_t)OB_WRP; - } - } -} - -/** - * @brief Sets the read protection level. - * @param OB_RDP: specifies the read protection level. - * This parameter can be one of the following values: - * @arg OB_RDP_Level_0: No protection - * @arg OB_RDP_Level_1: Read protection of the memory - * @arg OB_RDP_Level_2: Full chip protection - * - * !!!Warning!!! When enabling OB_RDP level 2 it's no more possible to go back to level 1 or 0 - * - * @retval None - */ -void FLASH_OB_RDPConfig(uint8_t OB_RDP) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_OB_RDP(OB_RDP)); - - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - *(__IO uint8_t*)OPTCR_BYTE1_ADDRESS = OB_RDP; - - } -} - -/** - * @brief Programs the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. - * @param OB_IWDG: Selects the IWDG mode - * This parameter can be one of the following values: - * @arg OB_IWDG_SW: Software IWDG selected - * @arg OB_IWDG_HW: Hardware IWDG selected - * @param OB_STOP: Reset event when entering STOP mode. - * This parameter can be one of the following values: - * @arg OB_STOP_NoRST: No reset generated when entering in STOP - * @arg OB_STOP_RST: Reset generated when entering in STOP - * @param OB_STDBY: Reset event when entering Standby mode. - * This parameter can be one of the following values: - * @arg OB_STDBY_NoRST: No reset generated when entering in STANDBY - * @arg OB_STDBY_RST: Reset generated when entering in STANDBY - * @retval None - */ -void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) -{ - uint8_t optiontmp = 0xFF; - 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)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* Mask OPTLOCK, OPTSTRT and BOR_LEV bits */ - optiontmp = (uint8_t)((*(__IO uint8_t *)OPTCR_BYTE0_ADDRESS) & (uint8_t)0x0F); - - /* Update User Option Byte */ - *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS = OB_IWDG | (uint8_t)(OB_STDBY | (uint8_t)(OB_STOP | ((uint8_t)optiontmp))); - } -} - -/** - * @brief Sets the BOR Level. - * @param OB_BOR: specifies the Option Bytes BOR Reset Level. - * This parameter can be one of the following values: - * @arg OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V - * @arg OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V - * @arg OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V - * @arg OB_BOR_OFF: Supply voltage ranges from 1.62 to 2.1 V - * @retval None - */ -void FLASH_OB_BORConfig(uint8_t OB_BOR) -{ - /* Check the parameters */ - assert_param(IS_OB_BOR(OB_BOR)); - - /* Set the BOR Level */ - *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS &= (~FLASH_OPTCR_BOR_LEV); - *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= OB_BOR; - -} - -/** - * @brief Launch the option byte loading. - * @param None - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_OB_Launch(void) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Set the OPTSTRT bit in OPTCR register */ - *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= FLASH_OPTCR_OPTSTRT; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - return status; -} - -/** - * @brief Returns the FLASH User Option Bytes values. - * @param None - * @retval The FLASH User Option Bytes values: IWDG_SW(Bit0), RST_STOP(Bit1) - * and RST_STDBY(Bit2). - */ -uint8_t FLASH_OB_GetUser(void) -{ - /* Return the User Option Byte */ - return (uint8_t)(FLASH->OPTCR >> 5); -} - -/** - * @brief Returns the FLASH Write Protection Option Bytes value. - * @param None - * @retval The FLASH Write Protection Option Bytes value - */ -uint16_t FLASH_OB_GetWRP(void) -{ - /* Return the FLASH write protection Register value */ - return (*(__IO uint16_t *)(OPTCR_BYTE2_ADDRESS)); -} - -/** - * @brief Returns the FLASH Write Protection Option Bytes value. - * @note This function can be used only for STM32F427x/437x devices. - * @param None - * @retval The FLASH Write Protection Option Bytes value - */ -uint16_t FLASH_OB_GetWRP1(void) -{ - /* Return the FLASH write protection Register value */ - return (*(__IO uint16_t *)(OPTCR1_BYTE2_ADDRESS)); -} - -/** - * @brief Returns the FLASH Read Protection level. - * @param None - * @retval FLASH ReadOut Protection Status: - * - SET, when OB_RDP_Level_1 or OB_RDP_Level_2 is set - * - RESET, when OB_RDP_Level_0 is set - */ -FlagStatus FLASH_OB_GetRDP(void) -{ - FlagStatus readstatus = RESET; - - if ((*(__IO uint8_t*)(OPTCR_BYTE1_ADDRESS) != (uint8_t)OB_RDP_Level_0)) - { - readstatus = SET; - } - else - { - readstatus = RESET; - } - return readstatus; -} - -/** - * @brief Returns the FLASH BOR level. - * @param None - * @retval The FLASH BOR level: - * - OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V - * - OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V - * - OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V - * - OB_BOR_OFF : Supply voltage ranges from 1.62 to 2.1 V - */ -uint8_t FLASH_OB_GetBOR(void) -{ - /* Return the FLASH BOR level */ - return (uint8_t)(*(__IO uint8_t *)(OPTCR_BYTE0_ADDRESS) & (uint8_t)0x0C); -} - -/** - * @} - */ - -/** @defgroup FLASH_Group4 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified FLASH interrupts. - * @param FLASH_IT: specifies the FLASH interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg FLASH_IT_ERR: FLASH Error Interrupt - * @arg FLASH_IT_EOP: FLASH end of operation Interrupt - * @retval None - */ -void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FLASH_IT(FLASH_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if(NewState != DISABLE) - { - /* Enable the interrupt sources */ - FLASH->CR |= FLASH_IT; - } - else - { - /* Disable the interrupt sources */ - FLASH->CR &= ~(uint32_t)FLASH_IT; - } -} - -/** - * @brief Checks whether the specified FLASH flag is set or not. - * @param FLASH_FLAG: specifies the FLASH flag to check. - * This parameter can be one of the following values: - * @arg FLASH_FLAG_EOP: FLASH End of Operation flag - * @arg FLASH_FLAG_OPERR: FLASH operation Error flag - * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag - * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag - * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag - * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag - * @arg FLASH_FLAG_BSY: FLASH Busy flag - * @retval The new state of FLASH_FLAG (SET or RESET). - */ -FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_FLASH_GET_FLAG(FLASH_FLAG)); - - if((FLASH->SR & FLASH_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - /* Return the new state of FLASH_FLAG (SET or RESET) */ - return bitstatus; -} - -/** - * @brief Clears the FLASH's pending flags. - * @param FLASH_FLAG: specifies the FLASH flags to clear. - * This parameter can be any combination of the following values: - * @arg FLASH_FLAG_EOP: FLASH End of Operation flag - * @arg FLASH_FLAG_OPERR: FLASH operation Error flag - * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag - * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag - * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag - * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag - * @retval None - */ -void FLASH_ClearFlag(uint32_t FLASH_FLAG) -{ - /* Check the parameters */ - assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG)); - - /* Clear the flags */ - FLASH->SR = FLASH_FLAG; -} - -/** - * @brief Returns the FLASH Status. - * @param None - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION 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_WRPERR) != (uint32_t)0x00) - { - flashstatus = FLASH_ERROR_WRP; - } - else - { - if((FLASH->SR & (uint32_t)0xEF) != (uint32_t)0x00) - { - flashstatus = FLASH_ERROR_PROGRAM; - } - else - { - if((FLASH->SR & FLASH_FLAG_OPERR) != (uint32_t)0x00) - { - flashstatus = FLASH_ERROR_OPERATION; - } - else - { - flashstatus = FLASH_COMPLETE; - } - } - } - } - /* Return the FLASH Status */ - return flashstatus; -} - -/** - * @brief Waits for a FLASH operation to complete. - * @param None - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_WaitForLastOperation(void) -{ - __IO FLASH_Status status = FLASH_COMPLETE; - - /* Check for the FLASH Status */ - status = FLASH_GetStatus(); - - /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset. - Even if the FLASH operation fails, the BUSY flag will be reset and an error - flag will be set */ - while(status == FLASH_BUSY) - { - status = FLASH_GetStatus(); - } - /* Return the operation status */ - return status; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c deleted file mode 100644 index c01fc629..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c +++ /dev/null @@ -1,989 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_fsmc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the FSMC peripheral: - * + Interface with SRAM, PSRAM, NOR and OneNAND memories - * + Interface with NAND memories - * + Interface with 16-bit PC Card compatible memories - * + Interrupts and flags management - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_fsmc.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup FSMC - * @brief FSMC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* --------------------- 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) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup FSMC_Private_Functions - * @{ - */ - -/** @defgroup FSMC_Group1 NOR/SRAM Controller functions - * @brief NOR/SRAM Controller functions - * -@verbatim - =============================================================================== - ##### NOR and SRAM Controller functions ##### - =============================================================================== - - [..] The following sequence should be followed to configure the FSMC to interface - with SRAM, PSRAM, NOR or OneNAND memory connected to the NOR/SRAM Bank: - - (#) Enable the clock for the FSMC and associated GPIOs using the following functions: - RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) FSMC pins configuration - (++) Connect the involved FSMC pins to AF12 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC); - (++) Configure these FSMC pins in alternate function mode by calling the function - GPIO_Init(); - - (#) Declare a FSMC_NORSRAMInitTypeDef structure, for example: - FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; - and fill the FSMC_NORSRAMInitStructure variable with the allowed values of - the structure member. - - (#) Initialize the NOR/SRAM Controller by calling the function - FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); - - (#) Then enable the NOR/SRAM Bank, for example: - FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE); - - (#) At this stage you can read/write from/to the memory connected to the NOR/SRAM Bank. - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes 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 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 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 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; - } -} -/** - * @} - */ - -/** @defgroup FSMC_Group2 NAND Controller functions - * @brief NAND Controller functions - * -@verbatim - =============================================================================== - ##### NAND Controller functions ##### - =============================================================================== - - [..] The following sequence should be followed to configure the FSMC to interface - with 8-bit or 16-bit NAND memory connected to the NAND Bank: - - (#) Enable the clock for the FSMC and associated GPIOs using the following functions: - (++) RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); - (++) RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) FSMC pins configuration - (++) Connect the involved FSMC pins to AF12 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC); - (++) Configure these FSMC pins in alternate function mode by calling the function - GPIO_Init(); - - (#) Declare a FSMC_NANDInitTypeDef structure, for example: - FSMC_NANDInitTypeDef FSMC_NANDInitStructure; - and fill the FSMC_NANDInitStructure variable with the allowed values of - the structure member. - - (#) Initialize the NAND Controller by calling the function - FSMC_NANDInit(&FSMC_NANDInitStructure); - - (#) Then enable the NAND Bank, for example: - FSMC_NANDCmd(FSMC_Bank3_NAND, ENABLE); - - (#) At this stage you can read/write from/to the memory connected to the NAND Bank. - - [..] - (@) To enable the Error Correction Code (ECC), you have to use the function - FSMC_NANDECCCmd(FSMC_Bank3_NAND, ENABLE); - [..] - (@) and to get the current ECC value you have to use the function - ECCval = FSMC_GetECC(FSMC_Bank3_NAND); - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes 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 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 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 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 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); -} -/** - * @} - */ - -/** @defgroup FSMC_Group3 PCCARD Controller functions - * @brief PCCARD Controller functions - * -@verbatim - =============================================================================== - ##### PCCARD Controller functions ##### - =============================================================================== - - [..] he following sequence should be followed to configure the FSMC to interface - with 16-bit PC Card compatible memory connected to the PCCARD Bank: - - (#) Enable the clock for the FSMC and associated GPIOs using the following functions: - (++) RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); - (++) RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) FSMC pins configuration - (++) Connect the involved FSMC pins to AF12 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC); - (++) Configure these FSMC pins in alternate function mode by calling the function - GPIO_Init(); - - (#) Declare a FSMC_PCCARDInitTypeDef structure, for example: - FSMC_PCCARDInitTypeDef FSMC_PCCARDInitStructure; - and fill the FSMC_PCCARDInitStructure variable with the allowed values of - the structure member. - - (#) Initialize the PCCARD Controller by calling the function - FSMC_PCCARDInit(&FSMC_PCCARDInitStructure); - - (#) Then enable the PCCARD Bank: - FSMC_PCCARDCmd(ENABLE); - - (#) At this stage you can read/write from/to the memory connected to the PCCARD Bank. - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes 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 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_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 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; - } -} -/** - * @} - */ - -/** @defgroup FSMC_Group4 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 edge detection Flag. - * @arg FSMC_FLAG_Level: Level detection Flag. - * @arg FSMC_FLAG_FallingEdge: Falling edge 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 edge detection Flag. - * @arg FSMC_FLAG_Level: Level detection Flag. - * @arg FSMC_FLAG_FallingEdge: Falling edge 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c deleted file mode 100644 index 0586369c..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c +++ /dev/null @@ -1,584 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_gpio.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the GPIO peripheral: - * + Initialization and Configuration - * + GPIO Read and Write - * + GPIO Alternate functions configuration - * -@verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable the GPIO AHB clock using the following function - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) Configure the GPIO pin(s) using GPIO_Init() - Four possible configuration are available for each pin: - (++) Input: Floating, Pull-up, Pull-down. - (++) Output: Push-Pull (Pull-up, Pull-down or no Pull) - Open Drain (Pull-up, Pull-down or no Pull). In output mode, the speed - is configurable: 2 MHz, 25 MHz, 50 MHz or 100 MHz. - (++) Alternate Function: Push-Pull (Pull-up, Pull-down or no Pull) Open - Drain (Pull-up, Pull-down or no Pull). - (++) Analog: required mode when a pin is to be used as ADC channel or DAC - output. - - (#) Peripherals alternate function: - (++) For ADC and DAC, configure the desired pin in analog mode using - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN; - (+++) For other peripherals (TIM, USART...): - (+++) Connect the pin to the desired peripherals' Alternate - Function (AF) using GPIO_PinAFConfig() function - (+++) Configure the desired pin in alternate function mode using - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF - (+++) Select the type, pull-up/pull-down and output speed via - GPIO_PuPd, GPIO_OType and GPIO_Speed members - (+++) Call GPIO_Init() function - - (#) To get the level of a pin configured in input mode use GPIO_ReadInputDataBit() - - (#) To set/reset the level of a pin configured in output mode use - GPIO_SetBits()/GPIO_ResetBits() - - (#) During and just after reset, the alternate functions are not - active and the GPIO pins are configured in input floating mode (except JTAG - pins). - - (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose - (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has - priority over the GPIO function. - - (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as - general purpose PH0 and PH1, respectively, when the HSE oscillator is off. - The HSE has priority over the GPIO function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_gpio.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup GPIO - * @brief GPIO driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup GPIO_Private_Functions - * @{ - */ - -/** @defgroup GPIO_Group1 Initialization and Configuration - * @brief Initialization and Configuration - * -@verbatim - =============================================================================== - ##### Initialization and Configuration ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes the GPIOx peripheral registers to their default reset values. - * @note By default, The GPIO pins are configured in input floating mode (except JTAG pins). - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @retval None - */ -void GPIO_DeInit(GPIO_TypeDef* GPIOx) -{ - /* Check the parameters */ - assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); - - if (GPIOx == GPIOA) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, DISABLE); - } - else if (GPIOx == GPIOB) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, DISABLE); - } - else if (GPIOx == GPIOC) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, DISABLE); - } - else if (GPIOx == GPIOD) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, DISABLE); - } - else if (GPIOx == GPIOE) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, DISABLE); - } - else if (GPIOx == GPIOF) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, DISABLE); - } - else if (GPIOx == GPIOG) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, DISABLE); - } - else if (GPIOx == GPIOH) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, DISABLE); - } - else - { - if (GPIOx == GPIOI) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, DISABLE); - } - } -} - -/** - * @brief Initializes the GPIOx peripheral according to the specified parameters in the GPIO_InitStruct. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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 pinpos = 0x00, pos = 0x00 , currentpin = 0x00; - - /* Check the parameters */ - assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); - assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin)); - assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode)); - assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd)); - - /* ------------------------- Configure the port pins ---------------- */ - /*-- GPIO Mode Configuration --*/ - for (pinpos = 0x00; pinpos < 0x10; pinpos++) - { - pos = ((uint32_t)0x01) << pinpos; - /* Get the port pins position */ - currentpin = (GPIO_InitStruct->GPIO_Pin) & pos; - - if (currentpin == pos) - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2)); - GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2)); - - if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF)) - { - /* Check Speed mode parameters */ - assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed)); - - /* Speed mode configuration */ - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2)); - - /* Check Output mode parameters */ - assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType)); - - /* Output mode configuration*/ - GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)) ; - GPIOx->OTYPER |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos)); - } - - /* Pull-up Pull down resistor configuration*/ - GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2)); - GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2)); - } - } -} - -/** - * @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_Mode = GPIO_Mode_IN; - GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStruct->GPIO_OType = GPIO_OType_PP; - GPIO_InitStruct->GPIO_PuPd = GPIO_PuPd_NOPULL; -} - -/** - * @brief Locks GPIO Pins configuration registers. - * @note The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, - * GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH. - * @note The configuration of the locked GPIO pins can no longer be modified - * until the next reset. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: specifies the port bit to be locked. - * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). - * @retval None - */ -void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) -{ - __IO 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; -} - -/** - * @} - */ - -/** @defgroup GPIO_Group2 GPIO Read and Write - * @brief GPIO Read and Write - * -@verbatim - =============================================================================== - ##### GPIO Read and Write ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Reads the specified input port pin. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: specifies the port bit to read. - * This parameter can be GPIO_Pin_x where x can be (0..15). - * @retval The input port pin value. - */ -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..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: specifies the port bit to read. - * This parameter can be GPIO_Pin_x where x can be (0..15). - * @retval The 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..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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. - * @note This functions uses GPIOx_BSRR register to allow atomic read/modify - * accesses. In this way, there is no risk of an IRQ occurring between - * the read and the modify access. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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->BSRRL = GPIO_Pin; -} - -/** - * @brief Clears the selected data port bits. - * @note This functions uses GPIOx_BSRR register to allow atomic read/modify - * accesses. In this way, there is no risk of an IRQ occurring between - * the read and the modify access. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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->BSRRH = GPIO_Pin; -} - -/** - * @brief Sets or clears the selected data port bit. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: specifies the port bit to be written. - * This parameter can be one of GPIO_Pin_x where x can be (0..15). - * @param 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->BSRRL = GPIO_Pin; - } - else - { - GPIOx->BSRRH = GPIO_Pin ; - } -} - -/** - * @brief Writes data to the specified GPIO data port. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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 Toggles the specified GPIO pins.. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: Specifies the pins to be toggled. - * @retval None - */ -void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) -{ - /* Check the parameters */ - assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); - - GPIOx->ODR ^= GPIO_Pin; -} - -/** - * @} - */ - -/** @defgroup GPIO_Group3 GPIO Alternate functions configuration function - * @brief GPIO Alternate functions configuration function - * -@verbatim - =============================================================================== - ##### GPIO Alternate functions configuration function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Changes the mapping of the specified pin. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_PinSource: specifies the pin for the Alternate function. - * This parameter can be GPIO_PinSourcex where x can be (0..15). - * @param GPIO_AFSelection: selects the pin to used as Alternate function. - * This parameter can be one of the following values: - * @arg GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin to AF0 (default after reset) - * @arg GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2) to AF0 (default after reset) - * @arg GPIO_AF_TAMPER: Connect TAMPER pins (TAMPER_1 and TAMPER_2) to AF0 (default after reset) - * @arg GPIO_AF_SWJ: Connect SWJ pins (SWD and JTAG)to AF0 (default after reset) - * @arg GPIO_AF_TRACE: Connect TRACE pins to AF0 (default after reset) - * @arg GPIO_AF_TIM1: Connect TIM1 pins to AF1 - * @arg GPIO_AF_TIM2: Connect TIM2 pins to AF1 - * @arg GPIO_AF_TIM3: Connect TIM3 pins to AF2 - * @arg GPIO_AF_TIM4: Connect TIM4 pins to AF2 - * @arg GPIO_AF_TIM5: Connect TIM5 pins to AF2 - * @arg GPIO_AF_TIM8: Connect TIM8 pins to AF3 - * @arg GPIO_AF_TIM9: Connect TIM9 pins to AF3 - * @arg GPIO_AF_TIM10: Connect TIM10 pins to AF3 - * @arg GPIO_AF_TIM11: Connect TIM11 pins to AF3 - * @arg GPIO_AF_I2C1: Connect I2C1 pins to AF4 - * @arg GPIO_AF_I2C2: Connect I2C2 pins to AF4 - * @arg GPIO_AF_I2C3: Connect I2C3 pins to AF4 - * @arg GPIO_AF_SPI1: Connect SPI1 pins to AF5 - * @arg GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5 - * @arg GPIO_AF_SPI4: Connect SPI4 pins to AF5 - * @arg GPIO_AF_SPI5: Connect SPI5 pins to AF5 - * @arg GPIO_AF_SPI6: Connect SPI6 pins to AF5 - * @arg GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6 - * @arg GPIO_AF_I2S3ext: Connect I2S3ext pins to AF7 - * @arg GPIO_AF_USART1: Connect USART1 pins to AF7 - * @arg GPIO_AF_USART2: Connect USART2 pins to AF7 - * @arg GPIO_AF_USART3: Connect USART3 pins to AF7 - * @arg GPIO_AF_UART4: Connect UART4 pins to AF8 - * @arg GPIO_AF_UART5: Connect UART5 pins to AF8 - * @arg GPIO_AF_USART6: Connect USART6 pins to AF8 - * @arg GPIO_AF_UART7: Connect UART7 pins to AF8 - * @arg GPIO_AF_UART8: Connect UART8 pins to AF8 - * @arg GPIO_AF_CAN1: Connect CAN1 pins to AF9 - * @arg GPIO_AF_CAN2: Connect CAN2 pins to AF9 - * @arg GPIO_AF_TIM12: Connect TIM12 pins to AF9 - * @arg GPIO_AF_TIM13: Connect TIM13 pins to AF9 - * @arg GPIO_AF_TIM14: Connect TIM14 pins to AF9 - * @arg GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10 - * @arg GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10 - * @arg GPIO_AF_ETH: Connect ETHERNET pins to AF11 - * @arg GPIO_AF_FSMC: Connect FSMC pins to AF12 - * @arg GPIO_AF_OTG_HS_FS: Connect OTG HS (configured in FS) pins to AF12 - * @arg GPIO_AF_SDIO: Connect SDIO pins to AF12 - * @arg GPIO_AF_DCMI: Connect DCMI pins to AF13 - * @arg GPIO_AF_EVENTOUT: Connect EVENTOUT pins to AF15 - * @retval None - */ -void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) -{ - uint32_t temp = 0x00; - uint32_t temp_2 = 0x00; - - /* Check the parameters */ - assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); - assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource)); - assert_param(IS_GPIO_AF(GPIO_AF)); - - temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ; - GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ; - temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp; - GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c deleted file mode 100644 index 2bd2ae7b..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c +++ /dev/null @@ -1,726 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hash.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the HASH / HMAC Processor (HASH) peripheral: - * - Initialization and Configuration functions - * - Message Digest generation functions - * - context swapping functions - * - DMA interface function - * - Interrupts and flags management - * -@verbatim - =================================================================== - ##### How to use this driver ##### - =================================================================== - - *** HASH operation : *** - ======================== - [..] - (#) Enable the HASH controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE) function. - - (#) Initialise the HASH using HASH_Init() function. - - (#) Reset the HASH processor core, so that the HASH will be ready - to compute he message digest of a new message by using HASH_Reset() function. - - (#) Enable the HASH controller using the HASH_Cmd() function. - - (#) if using DMA for Data input transfer, Activate the DMA Request - using HASH_DMACmd() function - - (#) if DMA is not used for data transfer, use HASH_DataIn() function - to enter data to IN FIFO. - - - (#) Configure the Number of valid bits in last word of the message - using HASH_SetLastWordValidBitsNbr() function. - - (#) if the message length is not an exact multiple of 512 bits, - then the function HASH_StartDigest() must be called to launch the computation - of the final digest. - - (#) Once computed, the digest can be read using HASH_GetDigest() function. - - (#) To control HASH events you can use one of the following wo methods: - (++) Check on HASH flags using the HASH_GetFlagStatus() function. - (++) Use HASH interrupts through the function HASH_ITConfig() at - initialization phase and HASH_GetITStatus() function into - interrupt routines in hashing phase. - After checking on a flag you should clear it using HASH_ClearFlag() - function. And after checking on an interrupt event you should - clear it using HASH_ClearITPendingBit() function. - - (#) Save and restore hash processor context using - HASH_SaveContext() and HASH_RestoreContext() functions. - - - - *** HMAC operation : *** - ======================== - [..] The HMAC algorithm is used for message authentication, by - irreversibly binding the message being processed to a key chosen - by the user. - For HMAC specifications, refer to "HMAC: keyed-hashing for message - authentication, H. Krawczyk, M. Bellare, R. Canetti, February 1997" - - [..] Basically, the HMAC algorithm consists of two nested hash operations: - HMAC(message) = Hash[((key | pad) XOR 0x5C) | Hash(((key | pad) XOR 0x36) | message)] - where: - (+) "pad" is a sequence of zeroes needed to extend the key to the - length of the underlying hash function data block (that is - 512 bits for both the SHA-1 and MD5 hash algorithms) - (+) "|" represents the concatenation operator - - - [..]To compute the HMAC, four different phases are required: - (#) Initialise the HASH using HASH_Init() function to do HMAC - operation. - - (#) The key (to be used for the inner hash function) is then given to the core. - This operation follows the same mechanism as the one used to send the - message in the hash operation (that is, by HASH_DataIn() function and, - finally, HASH_StartDigest() function. - - (#) Once the last word has been entered and computation has started, - the hash processor elaborates the key. It is then ready to accept the message - text using the same mechanism as the one used to send the message in the - hash operation. - - (#) After the first hash round, the hash processor returns "ready" to indicate - that it is ready to receive the key to be used for the outer hash function - (normally, this key is the same as the one used for the inner hash function). - When the last word of the key is entered and computation starts, the HMAC - result is made available using HASH_GetDigest() function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hash.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup HASH - * @brief HASH driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup HASH_Private_Functions - * @{ - */ - -/** @defgroup HASH_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initialize the HASH peripheral - (+) Configure the HASH Processor - (+) MD5/SHA1, - (+) HASH/HMAC, - (+) datatype - (+) HMAC Key (if mode = HMAC) - (+) Reset the HASH Processor - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes the HASH peripheral registers to their default reset values - * @param None - * @retval None - */ -void HASH_DeInit(void) -{ - /* Enable HASH reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_HASH, ENABLE); - /* Release HASH from reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_HASH, DISABLE); -} - -/** - * @brief Initializes the HASH peripheral according to the specified parameters - * in the HASH_InitStruct structure. - * @note the hash processor is reset when calling this function so that the - * HASH will be ready to compute the message digest of a new message. - * There is no need to call HASH_Reset() function. - * @param HASH_InitStruct: pointer to a HASH_InitTypeDef structure that contains - * the configuration information for the HASH peripheral. - * @note The field HASH_HMACKeyType in HASH_InitTypeDef must be filled only - * if the algorithm mode is HMAC. - * @retval None - */ -void HASH_Init(HASH_InitTypeDef* HASH_InitStruct) -{ - /* Check the parameters */ - assert_param(IS_HASH_ALGOSELECTION(HASH_InitStruct->HASH_AlgoSelection)); - assert_param(IS_HASH_DATATYPE(HASH_InitStruct->HASH_DataType)); - assert_param(IS_HASH_ALGOMODE(HASH_InitStruct->HASH_AlgoMode)); - - /* Configure the Algorithm used, algorithm mode and the datatype */ - HASH->CR &= ~ (HASH_CR_ALGO | HASH_CR_DATATYPE | HASH_CR_MODE); - HASH->CR |= (HASH_InitStruct->HASH_AlgoSelection | \ - HASH_InitStruct->HASH_DataType | \ - HASH_InitStruct->HASH_AlgoMode); - - /* if algorithm mode is HMAC, set the Key */ - if(HASH_InitStruct->HASH_AlgoMode == HASH_AlgoMode_HMAC) - { - assert_param(IS_HASH_HMAC_KEYTYPE(HASH_InitStruct->HASH_HMACKeyType)); - HASH->CR &= ~HASH_CR_LKEY; - HASH->CR |= HASH_InitStruct->HASH_HMACKeyType; - } - - /* Reset the HASH processor core, so that the HASH will be ready to compute - the message digest of a new message */ - HASH->CR |= HASH_CR_INIT; -} - -/** - * @brief Fills each HASH_InitStruct member with its default value. - * @param HASH_InitStruct : pointer to a HASH_InitTypeDef structure which will - * be initialized. - * @note The default values set are : Processor mode is HASH, Algorithm selected is SHA1, - * Data type selected is 32b and HMAC Key Type is short key. - * @retval None - */ -void HASH_StructInit(HASH_InitTypeDef* HASH_InitStruct) -{ - /* Initialize the HASH_AlgoSelection member */ - HASH_InitStruct->HASH_AlgoSelection = HASH_AlgoSelection_SHA1; - - /* Initialize the HASH_AlgoMode member */ - HASH_InitStruct->HASH_AlgoMode = HASH_AlgoMode_HASH; - - /* Initialize the HASH_DataType member */ - HASH_InitStruct->HASH_DataType = HASH_DataType_32b; - - /* Initialize the HASH_HMACKeyType member */ - HASH_InitStruct->HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; -} - -/** - * @brief Resets the HASH processor core, so that the HASH will be ready - * to compute the message digest of a new message. - * @note Calling this function will clear the HASH_SR_DCIS (Digest calculation - * completion interrupt status) bit corresponding to HASH_IT_DCI - * interrupt and HASH_FLAG_DCIS flag. - * @param None - * @retval None - */ -void HASH_Reset(void) -{ - /* Reset the HASH processor core */ - HASH->CR |= HASH_CR_INIT; -} -/** - * @} - */ - -/** @defgroup HASH_Group2 Message Digest generation functions - * @brief Message Digest generation functions - * -@verbatim - =============================================================================== - ##### Message Digest generation functions ##### - =============================================================================== - [..] This section provides functions allowing the generation of message digest: - (+) Push data in the IN FIFO : using HASH_DataIn() - (+) Get the number of words set in IN FIFO, use HASH_GetInFIFOWordsNbr() - (+) set the last word valid bits number using HASH_SetLastWordValidBitsNbr() - (+) start digest calculation : using HASH_StartDigest() - (+) Get the Digest message : using HASH_GetDigest() - -@endverbatim - * @{ - */ - - -/** - * @brief Configure the Number of valid bits in last word of the message - * @param ValidNumber: Number of valid bits in last word of the message. - * This parameter must be a number between 0 and 0x1F. - * - 0x00: All 32 bits of the last data written are valid - * - 0x01: Only bit [0] of the last data written is valid - * - 0x02: Only bits[1:0] of the last data written are valid - * - 0x03: Only bits[2:0] of the last data written are valid - * - ... - * - 0x1F: Only bits[30:0] of the last data written are valid - * @note The Number of valid bits must be set before to start the message - * digest competition (in Hash and HMAC) and key treatment(in HMAC). - * @retval None - */ -void HASH_SetLastWordValidBitsNbr(uint16_t ValidNumber) -{ - /* Check the parameters */ - assert_param(IS_HASH_VALIDBITSNUMBER(ValidNumber)); - - /* Configure the Number of valid bits in last word of the message */ - HASH->STR &= ~(HASH_STR_NBW); - HASH->STR |= ValidNumber; -} - -/** - * @brief Writes data in the Data Input FIFO - * @param Data: new data of the message to be processed. - * @retval None - */ -void HASH_DataIn(uint32_t Data) -{ - /* Write in the DIN register a new data */ - HASH->DIN = Data; -} - -/** - * @brief Returns the number of words already pushed into the IN FIFO. - * @param None - * @retval The value of words already pushed into the IN FIFO. - */ -uint8_t HASH_GetInFIFOWordsNbr(void) -{ - /* Return the value of NBW bits */ - return ((HASH->CR & HASH_CR_NBW) >> 8); -} - -/** - * @brief Provides the message digest result. - * @note In MD5 mode, Data[7] to Data[4] filed of HASH_MsgDigest structure is not used - * and is read as zero. - * In SHA-1 mode, Data[7] to Data[5] filed of HASH_MsgDigest structure is not used - * and is read as zero. - * In SHA-224 mode, Data[7] filed of HASH_MsgDigest structure is not used - * and is read as zero. - * @param HASH_MessageDigest: pointer to a HASH_MsgDigest structure which will - * hold the message digest result - * @retval None - */ -void HASH_GetDigest(HASH_MsgDigest* HASH_MessageDigest) -{ - /* Get the data field */ - HASH_MessageDigest->Data[0] = HASH->HR[0]; - HASH_MessageDigest->Data[1] = HASH->HR[1]; - HASH_MessageDigest->Data[2] = HASH->HR[2]; - HASH_MessageDigest->Data[3] = HASH->HR[3]; - HASH_MessageDigest->Data[4] = HASH->HR[4]; - HASH_MessageDigest->Data[5] = HASH_DIGEST->HR[5]; - HASH_MessageDigest->Data[6] = HASH_DIGEST->HR[6]; - HASH_MessageDigest->Data[7] = HASH_DIGEST->HR[7]; -} - -/** - * @brief Starts the message padding and calculation of the final message - * @param None - * @retval None - */ -void HASH_StartDigest(void) -{ - /* Start the Digest calculation */ - HASH->STR |= HASH_STR_DCAL; -} -/** - * @} - */ - -/** @defgroup HASH_Group3 Context swapping functions - * @brief Context swapping functions - * -@verbatim - =============================================================================== - ##### Context swapping functions ##### - =============================================================================== - - [..] This section provides functions allowing to save and store HASH Context - - [..] It is possible to interrupt a HASH/HMAC process to perform another processing - with a higher priority, and to complete the interrupted process later on, when - the higher priority task is complete. To do so, the context of the interrupted - task must be saved from the HASH registers to memory, and then be restored - from memory to the HASH registers. - - (#) To save the current context, use HASH_SaveContext() function - (#) To restore the saved context, use HASH_RestoreContext() function - - -@endverbatim - * @{ - */ - -/** - * @brief Save the Hash peripheral Context. - * @note The context can be saved only when no block is currently being - * processed. So user must wait for DINIS = 1 (the last block has been - * processed and the input FIFO is empty) or NBW != 0 (the FIFO is not - * full and no processing is ongoing). - * @param HASH_ContextSave: pointer to a HASH_Context structure that contains - * the repository for current context. - * @retval None - */ -void HASH_SaveContext(HASH_Context* HASH_ContextSave) -{ - uint8_t i = 0; - - /* save context registers */ - HASH_ContextSave->HASH_IMR = HASH->IMR; - HASH_ContextSave->HASH_STR = HASH->STR; - HASH_ContextSave->HASH_CR = HASH->CR; - for(i=0; i<=53;i++) - { - HASH_ContextSave->HASH_CSR[i] = HASH->CSR[i]; - } -} - -/** - * @brief Restore the Hash peripheral Context. - * @note After calling this function, user can restart the processing from the - * point where it has been interrupted. - * @param HASH_ContextRestore: pointer to a HASH_Context structure that contains - * the repository for saved context. - * @retval None - */ -void HASH_RestoreContext(HASH_Context* HASH_ContextRestore) -{ - uint8_t i = 0; - - /* restore context registers */ - HASH->IMR = HASH_ContextRestore->HASH_IMR; - HASH->STR = HASH_ContextRestore->HASH_STR; - HASH->CR = HASH_ContextRestore->HASH_CR; - - /* Initialize the hash processor */ - HASH->CR |= HASH_CR_INIT; - - /* continue restoring context registers */ - for(i=0; i<=53;i++) - { - HASH->CSR[i] = HASH_ContextRestore->HASH_CSR[i]; - } -} -/** - * @} - */ - -/** @defgroup HASH_Group4 HASH's DMA interface Configuration function - * @brief HASH's DMA interface Configuration function - * -@verbatim - =============================================================================== - ##### HASH's DMA interface Configuration function ##### - =============================================================================== - - [..] This section provides functions allowing to configure the DMA interface for - HASH/ HMAC data input transfer. - - [..] When the DMA mode is enabled (using the HASH_DMACmd() function), data can be - sent to the IN FIFO using the DMA peripheral. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables auto-start message padding and - * calculation of the final message digest at the end of DMA transfer. - * @param NewState: new state of the selected HASH DMA transfer request. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void HASH_AutoStartDigest(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the auto start of the final message digest at the end of DMA transfer */ - HASH->CR &= ~HASH_CR_MDMAT; - } - else - { - /* Disable the auto start of the final message digest at the end of DMA transfer */ - HASH->CR |= HASH_CR_MDMAT; - } -} - -/** - * @brief Enables or disables the HASH DMA interface. - * @note The DMA is disabled by hardware after the end of transfer. - * @param NewState: new state of the selected HASH DMA transfer request. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void HASH_DMACmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the HASH DMA request */ - HASH->CR |= HASH_CR_DMAE; - } - else - { - /* Disable the HASH DMA request */ - HASH->CR &= ~HASH_CR_DMAE; - } -} -/** - * @} - */ - -/** @defgroup HASH_Group5 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the HASH Interrupts and - to get the status and clear flags and Interrupts pending bits. - - [..] The HASH provides 2 Interrupts sources and 5 Flags: - - *** Flags : *** - =============== - [..] - (#) HASH_FLAG_DINIS : set when 16 locations are free in the Data IN FIFO - which means that a new block (512 bit) can be entered into the input buffer. - - (#) HASH_FLAG_DCIS : set when Digest calculation is complete - - (#) HASH_FLAG_DMAS : set when HASH's DMA interface is enabled (DMAE=1) or - a transfer is ongoing. This Flag is cleared only by hardware. - - (#) HASH_FLAG_BUSY : set when The hash core is processing a block of data - This Flag is cleared only by hardware. - - (#) HASH_FLAG_DINNE : set when Data IN FIFO is not empty which means that - the Data IN FIFO contains at least one word of data. This Flag is cleared - only by hardware. - - *** Interrupts : *** - ==================== - [..] - (#) HASH_IT_DINI : if enabled, this interrupt source is pending when 16 - locations are free in the Data IN FIFO which means that a new block (512 bit) - can be entered into the input buffer. This interrupt source is cleared using - HASH_ClearITPendingBit(HASH_IT_DINI) function. - - (#) HASH_IT_DCI : if enabled, this interrupt source is pending when Digest - calculation is complete. This interrupt source is cleared using - HASH_ClearITPendingBit(HASH_IT_DCI) function. - - *** Managing the HASH controller events : *** - ============================================= - [..] The user should identify which mode will be used in his application to manage - the HASH controller events: Polling mode or Interrupt mode. - - (#) In the Polling Mode it is advised to use the following functions: - (++) HASH_GetFlagStatus() : to check if flags events occur. - (++) HASH_ClearFlag() : to clear the flags events. - - (#) In the Interrupt Mode it is advised to use the following functions: - (++) HASH_ITConfig() : to enable or disable the interrupt source. - (++) HASH_GetITStatus() : to check if Interrupt occurs. - (++) HASH_ClearITPendingBit() : to clear the Interrupt pending Bit - (corresponding Flag). - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified HASH interrupts. - * @param HASH_IT: specifies the HASH interrupt source to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg HASH_IT_DINI: Data Input interrupt - * @arg HASH_IT_DCI: Digest Calculation Completion Interrupt - * @param NewState: new state of the specified HASH interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void HASH_ITConfig(uint32_t HASH_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_HASH_IT(HASH_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected HASH interrupt */ - HASH->IMR |= HASH_IT; - } - else - { - /* Disable the selected HASH interrupt */ - HASH->IMR &= (uint32_t)(~HASH_IT); - } -} - -/** - * @brief Checks whether the specified HASH flag is set or not. - * @param HASH_FLAG: specifies the HASH flag to check. - * This parameter can be one of the following values: - * @arg HASH_FLAG_DINIS: Data input interrupt status flag - * @arg HASH_FLAG_DCIS: Digest calculation completion interrupt status flag - * @arg HASH_FLAG_BUSY: Busy flag - * @arg HASH_FLAG_DMAS: DMAS Status flag - * @arg HASH_FLAG_DINNE: Data Input register (DIN) not empty status flag - * @retval The new state of HASH_FLAG (SET or RESET) - */ -FlagStatus HASH_GetFlagStatus(uint32_t HASH_FLAG) -{ - FlagStatus bitstatus = RESET; - uint32_t tempreg = 0; - - /* Check the parameters */ - assert_param(IS_HASH_GET_FLAG(HASH_FLAG)); - - /* check if the FLAG is in CR register */ - if ((HASH_FLAG & HASH_FLAG_DINNE) != (uint32_t)RESET ) - { - tempreg = HASH->CR; - } - else /* The FLAG is in SR register */ - { - tempreg = HASH->SR; - } - - /* Check the status of the specified HASH flag */ - if ((tempreg & HASH_FLAG) != (uint32_t)RESET) - { - /* HASH is set */ - bitstatus = SET; - } - else - { - /* HASH_FLAG is reset */ - bitstatus = RESET; - } - - /* Return the HASH_FLAG status */ - return bitstatus; -} -/** - * @brief Clears the HASH flags. - * @param HASH_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg HASH_FLAG_DINIS: Data Input Flag - * @arg HASH_FLAG_DCIS: Digest Calculation Completion Flag - * @retval None - */ -void HASH_ClearFlag(uint32_t HASH_FLAG) -{ - /* Check the parameters */ - assert_param(IS_HASH_CLEAR_FLAG(HASH_FLAG)); - - /* Clear the selected HASH flags */ - HASH->SR = ~(uint32_t)HASH_FLAG; -} -/** - * @brief Checks whether the specified HASH interrupt has occurred or not. - * @param HASH_IT: specifies the HASH interrupt source to check. - * This parameter can be one of the following values: - * @arg HASH_IT_DINI: Data Input interrupt - * @arg HASH_IT_DCI: Digest Calculation Completion Interrupt - * @retval The new state of HASH_IT (SET or RESET). - */ -ITStatus HASH_GetITStatus(uint32_t HASH_IT) -{ - ITStatus bitstatus = RESET; - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_HASH_GET_IT(HASH_IT)); - - - /* Check the status of the specified HASH interrupt */ - tmpreg = HASH->SR; - - if (((HASH->IMR & tmpreg) & HASH_IT) != RESET) - { - /* HASH_IT is set */ - bitstatus = SET; - } - else - { - /* HASH_IT is reset */ - bitstatus = RESET; - } - /* Return the HASH_IT status */ - return bitstatus; -} - -/** - * @brief Clears the HASH interrupt pending bit(s). - * @param HASH_IT: specifies the HASH interrupt pending bit(s) to clear. - * This parameter can be any combination of the following values: - * @arg HASH_IT_DINI: Data Input interrupt - * @arg HASH_IT_DCI: Digest Calculation Completion Interrupt - * @retval None - */ -void HASH_ClearITPendingBit(uint32_t HASH_IT) -{ - /* Check the parameters */ - assert_param(IS_HASH_IT(HASH_IT)); - - /* Clear the selected HASH interrupt pending bit */ - HASH->SR = (uint32_t)(~HASH_IT); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c deleted file mode 100644 index f7549dec..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c +++ /dev/null @@ -1,320 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hash_md5.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides high level functions to compute the HASH MD5 and - * HMAC MD5 Digest of an input message. - * It uses the stm32f4xx_hash.c/.h drivers to access the STM32F4xx HASH - * peripheral. - * -@verbatim - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable The HASH controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE); function. - - (#) Calculate the HASH MD5 Digest using HASH_MD5() function. - - (#) Calculate the HMAC MD5 Digest using HMAC_MD5() function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hash.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup HASH - * @brief HASH driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define MD5BUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup HASH_Private_Functions - * @{ - */ - -/** @defgroup HASH_Group7 High Level MD5 functions - * @brief High Level MD5 Hash and HMAC functions - * -@verbatim - =============================================================================== - ##### High Level MD5 Hash and HMAC functions ##### - =============================================================================== - - -@endverbatim - * @{ - */ - -/** - * @brief Compute the HASH MD5 digest. - * @param Input: pointer to the Input buffer to be treated. - * @param Ilen: length of the Input buffer. - * @param Output: the returned digest - * @retval An ErrorStatus enumeration value: - * - SUCCESS: digest computation done - * - ERROR: digest computation failed - */ -ErrorStatus HASH_MD5(uint8_t *Input, uint32_t Ilen, uint8_t Output[16]) -{ - HASH_InitTypeDef MD5_HASH_InitStructure; - HASH_MsgDigest MD5_MessageDigest; - __IO uint16_t nbvalidbitsdata = 0; - uint32_t i = 0; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - - - /* Number of valid bits in last word of the Input data */ - nbvalidbitsdata = 8 * (Ilen % 4); - - /* HASH peripheral initialization */ - HASH_DeInit(); - - /* HASH Configuration */ - MD5_HASH_InitStructure.HASH_AlgoSelection = HASH_AlgoSelection_MD5; - MD5_HASH_InitStructure.HASH_AlgoMode = HASH_AlgoMode_HASH; - MD5_HASH_InitStructure.HASH_DataType = HASH_DataType_8b; - HASH_Init(&MD5_HASH_InitStructure); - - /* Configure the number of valid bits in last word of the data */ - HASH_SetLastWordValidBitsNbr(nbvalidbitsdata); - - /* Write the Input block in the IN FIFO */ - for(i=0; i 64) - { - /* HMAC long Key */ - MD5_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_LongKey; - } - else - { - /* HMAC short Key */ - MD5_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; - } - HASH_Init(&MD5_HASH_InitStructure); - - /* Configure the number of valid bits in last word of the Key */ - HASH_SetLastWordValidBitsNbr(nbvalidbitskey); - - /* Write the Key */ - for(i=0; i
© COPYRIGHT 2013 STMicroelectronics
- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hash.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup HASH - * @brief HASH driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define SHA1BUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup HASH_Private_Functions - * @{ - */ - -/** @defgroup HASH_Group6 High Level SHA1 functions - * @brief High Level SHA1 Hash and HMAC functions - * -@verbatim - =============================================================================== - ##### High Level SHA1 Hash and HMAC functions ##### - =============================================================================== - - -@endverbatim - * @{ - */ - -/** - * @brief Compute the HASH SHA1 digest. - * @param Input: pointer to the Input buffer to be treated. - * @param Ilen: length of the Input buffer. - * @param Output: the returned digest - * @retval An ErrorStatus enumeration value: - * - SUCCESS: digest computation done - * - ERROR: digest computation failed - */ -ErrorStatus HASH_SHA1(uint8_t *Input, uint32_t Ilen, uint8_t Output[20]) -{ - HASH_InitTypeDef SHA1_HASH_InitStructure; - HASH_MsgDigest SHA1_MessageDigest; - __IO uint16_t nbvalidbitsdata = 0; - uint32_t i = 0; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - - /* Number of valid bits in last word of the Input data */ - nbvalidbitsdata = 8 * (Ilen % 4); - - /* HASH peripheral initialization */ - HASH_DeInit(); - - /* HASH Configuration */ - SHA1_HASH_InitStructure.HASH_AlgoSelection = HASH_AlgoSelection_SHA1; - SHA1_HASH_InitStructure.HASH_AlgoMode = HASH_AlgoMode_HASH; - SHA1_HASH_InitStructure.HASH_DataType = HASH_DataType_8b; - HASH_Init(&SHA1_HASH_InitStructure); - - /* Configure the number of valid bits in last word of the data */ - HASH_SetLastWordValidBitsNbr(nbvalidbitsdata); - - /* Write the Input block in the IN FIFO */ - for(i=0; i 64) - { - /* HMAC long Key */ - SHA1_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_LongKey; - } - else - { - /* HMAC short Key */ - SHA1_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; - } - HASH_Init(&SHA1_HASH_InitStructure); - - /* Configure the number of valid bits in last word of the Key */ - HASH_SetLastWordValidBitsNbr(nbvalidbitskey); - - /* Write the Key */ - for(i=0; iGPIO_Mode = GPIO_Mode_AF - (++) Select the type, pull-up/pull-down and output speed via - GPIO_PuPd, GPIO_OType and GPIO_Speed members - (++) Call GPIO_Init() function - Recommended configuration is Push-Pull, Pull-up, Open-Drain. - Add an external pull up if necessary (typically 4.7 KOhm). - - (#) Program the Mode, duty cycle , Own address, Ack, Speed and Acknowledged - Address using the I2C_Init() function. - - (#) Optionally you can enable/configure the following parameters without - re-initialization (i.e there is no need to call again I2C_Init() function): - (++) Enable the acknowledge feature using I2C_AcknowledgeConfig() function - (++) Enable the dual addressing mode using I2C_DualAddressCmd() function - (++) Enable the general call using the I2C_GeneralCallCmd() function - (++) Enable the clock stretching using I2C_StretchClockCmd() function - (++) Enable the fast mode duty cycle using the I2C_FastModeDutyCycleConfig() - function. - (++) Configure the NACK position for Master Receiver mode in case of - 2 bytes reception using the function I2C_NACKPositionConfig(). - (++) Enable the PEC Calculation using I2C_CalculatePEC() function - (++) For SMBus Mode: - (+++) Enable the Address Resolution Protocol (ARP) using I2C_ARPCmd() function - (+++) Configure the SMBusAlert pin using I2C_SMBusAlertConfig() function - - (#) Enable the NVIC and the corresponding interrupt using the function - I2C_ITConfig() if you need to use interrupt mode. - - (#) When using the DMA mode - (++) Configure the DMA using DMA_Init() function - (++) Active the needed channel Request using I2C_DMACmd() or - I2C_DMALastTransferCmd() function. - -@@- When using DMA mode, I2C interrupts may be used at the same time to - control the communication flow (Start/Stop/Ack... events and errors). - - (#) Enable the I2C using the I2C_Cmd() function. - - (#) Enable the DMA using the DMA_Cmd() function when using DMA mode in the - transfers. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_i2c.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup I2C - * @brief I2C driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -#define CR1_CLEAR_MASK ((uint16_t)0xFBF5) /*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 &= (uint16_t)~((uint16_t)I2C_CR2_FREQ); - /* 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 &= (uint16_t)~((uint16_t)I2C_CR1_PE); - /* 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 */ - /* To use the I2C at 400 KHz (in fast mode), the PCLK1 frequency (I2C peripheral - input clock) must be a multiple of 10 MHz */ - 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 & I2C_CCR_CCR) == 0) - { - /* Set minimum allowed value */ - result |= (uint16_t)0x0001; - } - /* Set speed value and set F/S bit for fast mode */ - tmpreg |= (uint16_t)(result | I2C_CCR_FS); - /* 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 |= I2C_CR1_PE; - -/*---------------------------- 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, 2 or 3 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 |= I2C_CR1_PE; - } - else - { - /* Disable the selected I2C peripheral */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_PE); - } -} - -/** - * @brief Enables or disables the Analog filter of I2C peripheral. - * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. - * @param NewState: new state of the Analog filter. - * This parameter can be: ENABLE or DISABLE. - * @note This function should be called before initializing and enabling - the I2C Peripheral. - * @retval None - */ -void I2C_AnalogFilterCmd(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 analog filter */ - I2Cx->FLTR &= (uint16_t)~((uint16_t)I2C_FLTR_ANOFF); - } - else - { - /* Disable the analog filter */ - I2Cx->FLTR |= I2C_FLTR_ANOFF; - } -} - -/** - * @brief Configures the Digital noise filter of I2C peripheral. - * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. - * @param I2C_DigitalFilter: Coefficient of digital noise filter. - * This parameter can be a number between 0x00 and 0x0F. - * @note This function should be called before initializing and enabling - the I2C Peripheral. - * @retval None - */ -void I2C_DigitalFilterConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DigitalFilter) -{ - uint16_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_I2C_ALL_PERIPH(I2Cx)); - assert_param(IS_I2C_DIGITAL_FILTER(I2C_DigitalFilter)); - - /* Get the old register value */ - tmpreg = I2Cx->FLTR; - - /* Reset I2Cx DNF bit [3:0] */ - tmpreg &= (uint16_t)~((uint16_t)I2C_FLTR_DNF); - - /* Set I2Cx DNF coefficient */ - tmpreg |= (uint16_t)((uint16_t)I2C_DigitalFilter & I2C_FLTR_DNF); - - /* Store the new register value */ - I2Cx->FLTR = tmpreg; -} - -/** - * @brief Generates I2Cx communication START condition. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_START; - } - else - { - /* Disable the START condition generation */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_START); - } -} - -/** - * @brief Generates I2Cx communication STOP condition. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_STOP; - } - else - { - /* Disable the STOP condition generation */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_STOP); - } -} - -/** - * @brief Transmits the address byte to select the slave device. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_OAR1_ADD0; - } - else - { - /* Reset the address bit0 for write */ - Address &= (uint8_t)~((uint8_t)I2C_OAR1_ADD0); - } - /* Send the address */ - I2Cx->DR = Address; -} - -/** - * @brief Enables or disables the specified I2C acknowledge feature. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_ACK; - } - else - { - /* Disable the acknowledgement */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ACK); - } -} - -/** - * @brief Configures the specified I2C own address2. - * @param I2Cx: where x can be 1, 2 or 3 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 &= (uint16_t)~((uint16_t)I2C_OAR2_ADD2); - - /* 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, 2 or 3 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 |= I2C_OAR2_ENDUAL; - } - else - { - /* Disable dual addressing mode */ - I2Cx->OAR2 &= (uint16_t)~((uint16_t)I2C_OAR2_ENDUAL); - } -} - -/** - * @brief Enables or disables the specified I2C general call feature. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_ENGC; - } - else - { - /* Disable generall call */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ENGC); - } -} - -/** - * @brief Enables or disables the specified I2C software reset. - * @note When software reset is enabled, the I2C IOs are released (this can - * be useful to recover from bus errors). - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_SWRST; - } - else - { - /* Peripheral not under reset */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_SWRST); - } -} - -/** - * @brief Enables or disables the specified I2C Clock stretching. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_NOSTRETCH; - } - else - { - /* Disable the selected I2C Clock stretching */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_NOSTRETCH); - } -} - -/** - * @brief Selects the specified I2C fast mode duty cycle. - * @param I2Cx: where x can be 1, 2 or 3 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 Selects the specified I2C NACK position in master receiver mode. - * @note 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, 2 or 3 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, 2 or 3 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 ARP. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_ENARP; - } - else - { - /* Disable the selected I2C ARP */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ENARP); - } -} -/** - * @} - */ - -/** @defgroup I2C_Group2 Data transfers functions - * @brief Data transfers functions - * -@verbatim - =============================================================================== - ##### Data transfers functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Sends a data byte through the I2Cx peripheral. - * @param I2Cx: where x can be 1, 2 or 3 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, 2 or 3 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; -} - -/** - * @} - */ - -/** @defgroup I2C_Group3 PEC management functions - * @brief PEC management functions - * -@verbatim - =============================================================================== - ##### PEC management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified I2C PEC transfer. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_PEC; - } - else - { - /* Disable the selected I2C PEC transmission */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_PEC); - } -} - -/** - * @brief Selects the specified I2C PEC position. - * @param I2Cx: where x can be 1, 2 or 3 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, 2 or 3 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 |= I2C_CR1_ENPEC; - } - else - { - /* Disable the selected I2C PEC calculation */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ENPEC); - } -} - -/** - * @brief Returns the PEC value for the specified I2C. - * @param I2Cx: where x can be 1, 2 or 3 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); -} - -/** - * @} - */ - -/** @defgroup I2C_Group4 DMA transfers management functions - * @brief DMA transfers management functions - * -@verbatim - =============================================================================== - ##### DMA transfers management functions ##### - =============================================================================== - This section provides functions allowing to configure the I2C DMA channels - requests. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified I2C DMA requests. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR2_DMAEN; - } - else - { - /* Disable the selected I2C DMA requests */ - I2Cx->CR2 &= (uint16_t)~((uint16_t)I2C_CR2_DMAEN); - } -} - -/** - * @brief Specifies that the next DMA transfer is the last one. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR2_LAST; - } - else - { - /* Next DMA transfer is not the last transfer */ - I2Cx->CR2 &= (uint16_t)~((uint16_t)I2C_CR2_LAST); - } -} - -/** - * @} - */ - -/** @defgroup I2C_Group5 Interrupts events and flags management functions - * @brief Interrupts, events and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts, events and flags management functions ##### - =============================================================================== - [..] - This section provides functions allowing to configure the I2C Interrupts - sources and check or clear the flags or pending bits status. - The user should identify which mode will be used in his application to manage - the communication: Polling mode, Interrupt mode or DMA mode. - - - ##### I2C State Monitoring Functions ##### - =============================================================================== - [..] - This I2C driver provides three different ways for I2C state monitoring - depending on the application requirements and constraints: - - - (#) 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 (RM0090). - (+++) 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. - - -@@- 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 the - I2Cx_ER_IRQHandler() function 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. - - - (#) Advanced state monitoring (Using the function I2C_GetLastEvent()) - - 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 (stm32f4xx_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). - - - (#) Flag-based state monitoring (Using the function I2C_GetFlagStatus()) - - 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 - stm32f4xx_i2c.h file. - -@endverbatim - * @{ - */ - -/** - * @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 interrupts. - * @param I2Cx: where x can be 1, 2 or 3 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; - } -} - -/* - =============================================================================== - 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, 2 or 3 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 stm32f4xx_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, 2 or 3 to select the I2C peripheral. - * - * @note For detailed description of Events, please refer to section I2C_Events - * in stm32f4xx_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, 2 or 3 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)"ENDAD" - * @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, 2 or 3 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). - * @note 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. - * @note 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()). - * @note 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)). - * @note 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, 2 or 3 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 I2Cx's interrupt pending bits. - * @param I2Cx: where x can be 1, 2 or 3 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). - * @note 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. - * @note 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()). - * @note 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)). - * @note 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c deleted file mode 100644 index 5f6cb547..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c +++ /dev/null @@ -1,266 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_iwdg.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Independent watchdog (IWDG) peripheral: - * + Prescaler and Counter configuration - * + IWDG activation - * + Flag management - * - @verbatim - =============================================================================== - ##### IWDG features ##### - =============================================================================== - [..] - The IWDG can be started by either software or hardware (configurable - through option byte). - - The IWDG is clocked by its own dedicated low-speed clock (LSI) and - thus stays active even if the main clock fails. - Once the IWDG is started, the LSI is forced ON and cannot be disabled - (LSI cannot be disabled too), and the counter starts counting down from - the reset value of 0xFFF. When it reaches the end of count value (0x000) - a system reset is generated. - The IWDG counter should be reloaded at regular intervals to prevent - an MCU reset. - - The IWDG is implemented in the VDD voltage domain that is still functional - in STOP and STANDBY mode (IWDG reset can wake-up from STANDBY). - - IWDGRST flag in RCC_CSR register can be used to inform when a IWDG - reset occurs. - - Min-max timeout value @32KHz (LSI): ~125us / ~32.7s - The IWDG timeout may vary due to LSI frequency dispersion. STM32F4xx - devices provide the capability to measure the LSI frequency (LSI clock - connected internally to TIM5 CH4 input capture). The measured value - can be used to have an IWDG timeout with an acceptable accuracy. - For more information, please refer to the STM32F4xx Reference manual - - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable write access to IWDG_PR and IWDG_RLR registers using - IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable) function - - (#) Configure the IWDG prescaler using IWDG_SetPrescaler() function - - (#) Configure the IWDG counter value using IWDG_SetReload() function. - This value will be loaded in the IWDG counter each time the counter - is reloaded, then the IWDG will start counting down from this value. - - (#) Start the IWDG using IWDG_Enable() function, when the IWDG is used - in software mode (no need to enable the LSI, it will be enabled - by hardware) - - (#) Then the application program must reload the IWDG counter at regular - intervals during normal operation to prevent an MCU reset, using - IWDG_ReloadCounter() function. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_iwdg.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup IWDG - * @brief IWDG driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* KR register bit mask */ -#define KR_KEY_RELOAD ((uint16_t)0xAAAA) -#define KR_KEY_ENABLE ((uint16_t)0xCCCC) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup IWDG_Private_Functions - * @{ - */ - -/** @defgroup IWDG_Group1 Prescaler and Counter configuration functions - * @brief Prescaler and Counter configuration functions - * -@verbatim - =============================================================================== - ##### Prescaler and Counter configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup IWDG_Group2 IWDG activation function - * @brief IWDG activation function - * -@verbatim - =============================================================================== - ##### IWDG activation function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup IWDG_Group3 Flag management function - * @brief Flag management function - * -@verbatim - =============================================================================== - ##### Flag management function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c deleted file mode 100644 index 3446cfec..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c +++ /dev/null @@ -1,678 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_pwr.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Power Controller (PWR) peripheral: - * + Backup Domain Access - * + PVD configuration - * + WakeUp pin configuration - * + Main and Backup Regulators configuration - * + FLASH Power Down configuration - * + Low Power modes configuration - * + Flags management - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_pwr.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup PWR - * @brief PWR driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* --------- 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)) - -/* Alias word address of FPDS bit */ -#define FPDS_BitNumber 0x09 -#define CR_FPDS_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (FPDS_BitNumber * 4)) - -/* Alias word address of PMODE bit */ -#define PMODE_BitNumber 0x0E -#define CR_PMODE_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PMODE_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)) - -/* Alias word address of BRE bit */ -#define BRE_BitNumber 0x09 -#define CSR_BRE_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (BRE_BitNumber * 4)) - -/* ------------------ PWR registers bit mask ------------------------ */ - -/* CR register bit mask */ -#define CR_DS_MASK ((uint32_t)0xFFFFFFFC) -#define CR_PLS_MASK ((uint32_t)0xFFFFFF1F) -#define CR_VOS_MASK ((uint32_t)0xFFFF3FFF) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup PWR_Private_Functions - * @{ - */ - -/** @defgroup PWR_Group1 Backup Domain Access function - * @brief Backup Domain Access function - * -@verbatim - =============================================================================== - ##### Backup Domain Access function ##### - =============================================================================== - [..] - After reset, the backup domain (RTC registers, RTC backup data - registers and backup SRAM) is protected against possible unwanted - write accesses. - To enable access to the RTC Domain and RTC registers, proceed as follows: - (+) Enable the Power Controller (PWR) APB1 interface clock using the - RCC_APB1PeriphClockCmd() function. - (+) Enable access to RTC domain using the PWR_BackupAccessCmd() function. - -@endverbatim - * @{ - */ - -/** - * @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 backup domain (RTC registers, RTC - * backup data registers and backup SRAM). - * @note If the HSE divided by 2, 3, ..31 is used as the RTC clock, the - * Backup Domain Access should be kept enabled. - * @param NewState: new state of the access to the backup domain. - * 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; -} - -/** - * @} - */ - -/** @defgroup PWR_Group2 PVD configuration functions - * @brief PVD configuration functions - * -@verbatim - =============================================================================== - ##### PVD configuration functions ##### - =============================================================================== - [..] - (+) The PVD is used to monitor the VDD power supply by comparing it to a - threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR). - (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower - than the PVD threshold. This event is internally connected to the EXTI - line16 and can generate an interrupt if enabled through the EXTI registers. - (+) The PVD is stopped in Standby mode. - -@endverbatim - * @{ - */ - -/** - * @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_0 - * @arg PWR_PVDLevel_1 - * @arg PWR_PVDLevel_2 - * @arg PWR_PVDLevel_3 - * @arg PWR_PVDLevel_4 - * @arg PWR_PVDLevel_5 - * @arg PWR_PVDLevel_6 - * @arg PWR_PVDLevel_7 - * @note Refer to the electrical characteristics of your device datasheet for - * more details about the voltage threshold corresponding to each - * detection level. - * @retval None - */ -void 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 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; -} - -/** - * @} - */ - -/** @defgroup PWR_Group3 WakeUp pin configuration functions - * @brief WakeUp pin configuration functions - * -@verbatim - =============================================================================== - ##### WakeUp pin configuration functions ##### - =============================================================================== - [..] - (+) WakeUp pin is used to wakeup the system from Standby mode. This pin is - forced in input pull down configuration and is active on rising edges. - (+) There is only one WakeUp pin: WakeUp Pin 1 on PA.00. - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup PWR_Group4 Main and Backup Regulators configuration functions - * @brief Main and Backup Regulators configuration functions - * -@verbatim - =============================================================================== - ##### Main and Backup Regulators configuration functions ##### - =============================================================================== - [..] - (+) The backup domain includes 4 Kbytes of backup SRAM accessible only from - the CPU, and address in 32-bit, 16-bit or 8-bit mode. Its content is - retained even in Standby or VBAT mode when the low power backup regulator - is enabled. It can be considered as an internal EEPROM when VBAT is - always present. You can use the PWR_BackupRegulatorCmd() function to - enable the low power backup regulator and use the PWR_GetFlagStatus - (PWR_FLAG_BRR) to check if it is ready or not. - - (+) When the backup domain is supplied by VDD (analog switch connected to VDD) - the backup SRAM is powered from VDD which replaces the VBAT power supply to - save battery life. - - (+) The backup SRAM is not mass erased by an tamper event. It is read - protected to prevent confidential data, such as cryptographic private - key, from being accessed. The backup SRAM can be erased only through - the Flash interface when a protection level change from level 1 to - level 0 is requested. - -@- Refer to the description of Read protection (RDP) in the Flash - programming manual. - - (+) The main internal regulator can be configured to have a tradeoff between - performance and power consumption when the device does not operate at - the maximum frequency. This is done through PWR_MainRegulatorModeConfig() - function which configure VOS bit in PWR_CR register: - (++) When this bit is set (Regulator voltage output Scale 1 mode selected) - the System frequency can go up to 168 MHz. - (++) When this bit is reset (Regulator voltage output Scale 2 mode selected) - the System frequency can go up to 144 MHz. - - Refer to the datasheets for more details. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the Backup Regulator. - * @param NewState: new state of the Backup Regulator. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void PWR_BackupRegulatorCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - *(__IO uint32_t *) CSR_BRE_BB = (uint32_t)NewState; -} - -/** - * @brief Configures the main internal regulator output voltage. - * @param PWR_Regulator_Voltage: specifies the regulator output voltage to achieve - * a tradeoff between performance and power consumption when the device does - * not operate at the maximum frequency (refer to the datasheets for more details). - * This parameter can be one of the following values: - * @arg PWR_Regulator_Voltage_Scale1: Regulator voltage output Scale 1 mode, - * System frequency up to 168 MHz. - * @arg PWR_Regulator_Voltage_Scale2: Regulator voltage output Scale 2 mode, - * System frequency up to 144 MHz. - * @arg PWR_Regulator_Voltage_Scale3: Regulator voltage output Scale 3 mode, - * System frequency up to 120 MHz - * @retval None - */ -void PWR_MainRegulatorModeConfig(uint32_t PWR_Regulator_Voltage) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_PWR_REGULATOR_VOLTAGE(PWR_Regulator_Voltage)); - - tmpreg = PWR->CR; - - /* Clear VOS[15:14] bits */ - tmpreg &= CR_VOS_MASK; - - /* Set VOS[15:14] bits according to PWR_Regulator_Voltage value */ - tmpreg |= PWR_Regulator_Voltage; - - /* Store the new value */ - PWR->CR = tmpreg; -} - -/** - * @} - */ - -/** @defgroup PWR_Group5 FLASH Power Down configuration functions - * @brief FLASH Power Down configuration functions - * -@verbatim - =============================================================================== - ##### FLASH Power Down configuration functions ##### - =============================================================================== - [..] - (+) By setting the FPDS bit in the PWR_CR register by using the - PWR_FlashPowerDownCmd() function, the Flash memory also enters power - down mode when the device enters Stop mode. When the Flash memory - is in power down mode, an additional startup delay is incurred when - waking up from Stop mode. -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the Flash Power Down in STOP mode. - * @param NewState: new state of the Flash power mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void PWR_FlashPowerDownCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - *(__IO uint32_t *) CR_FPDS_BB = (uint32_t)NewState; -} - -/** - * @} - */ - -/** @defgroup PWR_Group6 Low Power modes configuration functions - * @brief Low Power modes configuration functions - * -@verbatim - =============================================================================== - ##### Low Power modes configuration functions ##### - =============================================================================== - [..] - The devices feature 3 low-power modes: - (+) Sleep mode: Cortex-M4 core stopped, peripherals kept running. - (+) Stop mode: all clocks are stopped, regulator running, regulator - in low power mode - (+) Standby mode: 1.2V domain powered off. - - *** Sleep mode *** - ================== - [..] - (+) Entry: - (++) The Sleep mode is entered by using the __WFI() or __WFE() functions. - (+) Exit: - (++) Any peripheral interrupt acknowledged by the nested vectored interrupt - controller (NVIC) can wake up the device from Sleep mode. - - *** Stop mode *** - ================= - [..] - In Stop mode, all clocks in the 1.2V domain are stopped, the PLL, the HSI, - and the HSE RC oscillators are disabled. Internal SRAM and register contents - are preserved. - The voltage regulator can be configured either in normal or low-power mode. - To minimize the consumption In Stop mode, FLASH can be powered off before - entering the Stop mode. It can be switched on again by software after exiting - the Stop mode using the PWR_FlashPowerDownCmd() function. - - (+) Entry: - (++) The Stop mode is entered using the PWR_EnterSTOPMode(PWR_Regulator_LowPower,) - function with regulator in LowPower or with Regulator ON. - (+) Exit: - (++) Any EXTI Line (Internal or External) configured in Interrupt/Event mode. - - *** Standby mode *** - ==================== - [..] - The Standby mode allows to achieve the lowest power consumption. It is based - on the Cortex-M4 deepsleep mode, with the voltage regulator disabled. - The 1.2V domain is consequently powered off. The PLL, the HSI oscillator and - the HSE oscillator are also switched off. SRAM and register contents are lost - except for the RTC registers, RTC backup registers, backup SRAM and Standby - circuitry. - - The voltage regulator is OFF. - - (+) Entry: - (++) The Standby mode is entered using the PWR_EnterSTANDBYMode() function. - (+) Exit: - (++) WKUP pin rising edge, RTC alarm (Alarm A and Alarm B), RTC wakeup, - tamper event, time-stamp event, external reset in NRST pin, IWDG reset. - - *** Auto-wakeup (AWU) from low-power mode *** - ============================================= - [..] - The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC - Wakeup event, a tamper event, a time-stamp event, or a comparator event, - without depending on an external interrupt (Auto-wakeup mode). - - (#) RTC auto-wakeup (AWU) from the Stop mode - - (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to: - (+++) Configure the EXTI Line 17 to be sensitive to rising edges (Interrupt - or Event modes) using the EXTI_Init() function. - (+++) Enable the RTC Alarm Interrupt using the RTC_ITConfig() function - (+++) Configure the RTC to generate the RTC alarm using the RTC_SetAlarm() - and RTC_AlarmCmd() functions. - (++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it - is necessary to: - (+++) Configure the EXTI Line 21 to be sensitive to rising edges (Interrupt - or Event modes) using the EXTI_Init() function. - (+++) Enable the RTC Tamper or time stamp Interrupt using the RTC_ITConfig() - function - (+++) Configure the RTC to detect the tamper or time stamp event using the - RTC_TimeStampConfig(), RTC_TamperTriggerConfig() and RTC_TamperCmd() - functions. - (++) To wake up from the Stop mode with an RTC WakeUp event, it is necessary to: - (+++) Configure the EXTI Line 22 to be sensitive to rising edges (Interrupt - or Event modes) using the EXTI_Init() function. - (+++) Enable the RTC WakeUp Interrupt using the RTC_ITConfig() function - (+++) Configure the RTC to generate the RTC WakeUp event using the RTC_WakeUpClockConfig(), - RTC_SetWakeUpCounter() and RTC_WakeUpCmd() functions. - - (#) RTC auto-wakeup (AWU) from the Standby mode - - (++) To wake up from the Standby mode with an RTC alarm event, it is necessary to: - (+++) Enable the RTC Alarm Interrupt using the RTC_ITConfig() function - (+++) Configure the RTC to generate the RTC alarm using the RTC_SetAlarm() - and RTC_AlarmCmd() functions. - (++) To wake up from the Standby mode with an RTC Tamper or time stamp event, it - is necessary to: - (+++) Enable the RTC Tamper or time stamp Interrupt using the RTC_ITConfig() - function - (+++) Configure the RTC to detect the tamper or time stamp event using the - RTC_TimeStampConfig(), RTC_TamperTriggerConfig() and RTC_TamperCmd() - functions. - (++) To wake up from the Standby mode with an RTC WakeUp event, it is necessary to: - (+++) Enable the RTC WakeUp Interrupt using the RTC_ITConfig() function - (+++) Configure the RTC to generate the RTC WakeUp event using the RTC_WakeUpClockConfig(), - RTC_SetWakeUpCounter() and RTC_WakeUpCmd() functions. - -@endverbatim - * @{ - */ - -/** - * @brief Enters STOP mode. - * - * @note In Stop mode, all I/O pins keep the same state as in Run mode. - * @note When exiting Stop mode by issuing an interrupt or a wakeup event, - * the HSI RC oscillator is selected as system clock. - * @note When the voltage regulator operates in low power mode, an additional - * startup delay is incurred when waking up from Stop mode. - * By keeping the internal regulator ON during Stop mode, the consumption - * is higher although the startup time is reduced. - * - * @param 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 LPDSR bits */ - tmpreg &= CR_DS_MASK; - - /* Set LPDSR 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_Msk; - - /* 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_Msk); -} - -/** - * @brief Enters STANDBY mode. - * @note In Standby mode, all I/O pins are high impedance except for: - * - Reset pad (still available) - * - RTC_AF1 pin (PC13) if configured for tamper, time-stamp, RTC - * Alarm out, or RTC clock calibration out. - * - RTC_AF2 pin (PI8) if configured for tamper or time-stamp. - * - WKUP pin 1 (PA0) if enabled. - * @param None - * @retval None - */ -void PWR_EnterSTANDBYMode(void) -{ - /* Clear Wakeup 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_Msk; - -/* This option is used to ensure that store operations are completed */ -#if defined ( __CC_ARM ) - __force_stores(); -#endif - /* Request Wait For Interrupt */ - __WFI(); -} - -/** - * @} - */ - -/** @defgroup PWR_Group7 Flags management functions - * @brief Flags management functions - * -@verbatim - =============================================================================== - ##### Flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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. This flag indicates that a wakeup event - * was received from the WKUP pin or from the RTC alarm (Alarm A - * or Alarm B), RTC Tamper event, RTC TimeStamp event or RTC Wakeup. - * An additional wakeup event is detected if the WKUP pin is enabled - * (by setting the EWUP bit) when the WKUP pin level is already high. - * @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was - * resumed from StandBy mode. - * @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled - * by the PWR_PVDCmd() function. The PVD is stopped by Standby mode - * For this reason, this bit is equal to 0 after Standby or reset - * until the PVDE bit is set. - * @arg PWR_FLAG_BRR: Backup regulator ready flag. This bit is not reset - * when the device wakes up from Standby mode or by a system reset - * or power reset. - * @arg PWR_FLAG_VOSRDY: This flag indicates that the Regulator voltage - * scaling output selection is ready. - * @retval The new state of 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c deleted file mode 100644 index 967798e4..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c +++ /dev/null @@ -1,1872 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rcc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Reset and clock control (RCC) peripheral: - * + Internal/external clocks, PLL, CSS and MCO configuration - * + System, AHB and APB busses clocks configuration - * + Peripheral clocks configuration - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### RCC specific features ##### - =============================================================================== - [..] - After reset the device is running from Internal High Speed oscillator - (HSI 16MHz) with Flash 0 wait state, Flash prefetch buffer, D-Cache - and I-Cache are disabled, and all peripherals are off except internal - SRAM, Flash and JTAG. - (+) There is no prescaler on High speed (AHB) and Low speed (APB) busses; - all peripherals mapped on these busses are running at HSI speed. - (+) The clock for all peripherals is switched off, except the SRAM and FLASH. - (+) All GPIOs are in input floating state, except the JTAG pins which - are assigned to be used for debug purpose. - [..] - Once the device started from reset, the user application has to: - (+) Configure the clock source to be used to drive the System clock - (if the application needs higher frequency/performance) - (+) Configure the System clock frequency and Flash settings - (+) Configure the AHB and APB busses prescalers - (+) Enable the clock for the peripheral(s) to be used - (+) Configure the clock source(s) for peripherals which clocks are not - derived from the System clock (I2S, RTC, ADC, USB OTG FS/SDIO/RNG) - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup RCC - * @brief RCC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* ------------ 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 CSSON bit */ -#define CSSON_BitNumber 0x13 -#define CR_CSSON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (CSSON_BitNumber * 4)) -/* Alias word address of PLLON bit */ -#define PLLON_BitNumber 0x18 -#define CR_PLLON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLLON_BitNumber * 4)) -/* Alias word address of PLLI2SON bit */ -#define PLLI2SON_BitNumber 0x1A -#define CR_PLLI2SON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLLI2SON_BitNumber * 4)) - -/* --- CFGR Register ---*/ -/* Alias word address of I2SSRC bit */ -#define CFGR_OFFSET (RCC_OFFSET + 0x08) -#define I2SSRC_BitNumber 0x17 -#define CFGR_I2SSRC_BB (PERIPH_BB_BASE + (CFGR_OFFSET * 32) + (I2SSRC_BitNumber * 4)) - -/* --- BDCR Register ---*/ -/* Alias word address of RTCEN bit */ -#define BDCR_OFFSET (RCC_OFFSET + 0x70) -#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 + 0x74) -#define LSION_BitNumber 0x00 -#define CSR_LSION_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (LSION_BitNumber * 4)) - -/* --- DCKCFGR Register ---*/ -/* Alias word address of TIMPRE bit */ -#define DCKCFGR_OFFSET (RCC_OFFSET + 0x8C) -#define TIMPRE_BitNumber 0x18 -#define DCKCFGR_TIMPRE_BB (PERIPH_BB_BASE + (DCKCFGR_OFFSET * 32) + (TIMPRE_BitNumber * 4)) -/* ---------------------- RCC registers bit mask ------------------------ */ -/* CFGR register bit mask */ -#define CFGR_MCO2_RESET_MASK ((uint32_t)0x07FFFFFF) -#define CFGR_MCO1_RESET_MASK ((uint32_t)0xF89FFFFF) - -/* RCC Flag Mask */ -#define FLAG_MASK ((uint8_t)0x1F) - -/* CR register byte 3 (Bits[23:16]) base address */ -#define CR_BYTE3_ADDRESS ((uint32_t)0x40023802) - -/* CIR register byte 2 (Bits[15:8]) base address */ -#define CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + 0x0C + 0x01)) - -/* CIR register byte 3 (Bits[23:16]) base address */ -#define CIR_BYTE3_ADDRESS ((uint32_t)(RCC_BASE + 0x0C + 0x02)) - -/* BDCR register base address */ -#define BDCR_ADDRESS (PERIPH_BASE + BDCR_OFFSET) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; - -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup RCC_Private_Functions - * @{ - */ - -/** @defgroup RCC_Group1 Internal and external clocks, PLL, CSS and MCO configuration functions - * @brief Internal and external clocks, PLL, CSS and MCO configuration functions - * -@verbatim - =================================================================================== - ##### Internal and external clocks, PLL, CSS and MCO configuration functions ##### - =================================================================================== - [..] - This section provide functions allowing to configure the internal/external clocks, - PLLs, CSS and MCO pins. - - (#) HSI (high-speed internal), 16 MHz factory-trimmed RC used directly or through - the PLL as System clock source. - - (#) LSI (low-speed internal), 32 KHz low consumption RC used as IWDG and/or RTC - clock source. - - (#) HSE (high-speed external), 4 to 26 MHz crystal oscillator used directly or - through the PLL as System clock source. Can be used also as RTC clock source. - - (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source. - - (#) PLL (clocked by HSI or HSE), featuring two different output clocks: - (++) The first output is used to generate the high speed system clock (up to 168 MHz) - (++) The second output is used to generate the clock for the USB OTG FS (48 MHz), - the random analog generator (<=48 MHz) and the SDIO (<= 48 MHz). - - (#) PLLI2S (clocked by HSI or HSE), used to generate an accurate clock to achieve - high-quality audio performance on the I2S interface. - - (#) CSS (Clock security system), once enable and if a HSE clock failure occurs - (HSE used directly or through PLL as System clock source), the System clock - is automatically switched to HSI and an interrupt is generated if enabled. - The interrupt is linked to the Cortex-M4 NMI (Non-Maskable Interrupt) - exception vector. - - (#) MCO1 (microcontroller clock output), used to output HSI, LSE, HSE or PLL - clock (through a configurable prescaler) on PA8 pin. - - (#) MCO2 (microcontroller clock output), used to output HSE, PLL, SYSCLK or PLLI2S - clock (through a configurable prescaler) on PC9 pin. - @endverbatim - * @{ - */ - -/** - * @brief Resets the RCC clock configuration to the default reset state. - * @note The default reset state of the clock configuration is given below: - * - HSI ON and used as system clock source - * - HSE, PLL and PLLI2S OFF - * - AHB, APB1 and APB2 prescaler set to 1. - * - CSS, MCO1 and MCO2 OFF - * - All interrupts disabled - * @note This function doesn't modify the configuration of the - * - Peripheral clocks - * - LSI, LSE and RTC clocks - * @param None - * @retval None - */ -void RCC_DeInit(void) -{ - /* Set HSION bit */ - RCC->CR |= (uint32_t)0x00000001; - - /* Reset CFGR register */ - RCC->CFGR = 0x00000000; - - /* Reset HSEON, CSSON, PLLON and PLLI2S bits */ - RCC->CR &= (uint32_t)0xFAF6FFFF; - - /* Reset PLLCFGR register */ - RCC->PLLCFGR = 0x24003010; - - /* Reset PLLI2SCFGR register */ - RCC->PLLI2SCFGR = 0x20003000; - - /* Reset HSEBYP bit */ - RCC->CR &= (uint32_t)0xFFFBFFFF; - - /* Disable all interrupts */ - RCC->CIR = 0x00000000; - -#ifdef STM32F427X - /* Disable Timers clock prescalers selection */ - RCC->DCKCFGR = 0x00000000; -#endif /* STM32F427X */ - -} - -/** - * @brief Configures the External High Speed oscillator (HSE). - * @note After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application - * software should wait on HSERDY flag to be set indicating that HSE clock - * is stable and can be used to clock the PLL and/or system clock. - * @note HSE state can not be changed if it is used directly or through the - * PLL as system clock. In this case, you have to select another source - * of the system clock then change the HSE state (ex. disable it). - * @note The HSE is stopped by hardware when entering STOP and STANDBY modes. - * @note This function reset the CSSON bit, so if the Clock security system(CSS) - * was previously enabled you have to enable it again after calling this - * function. - * @param RCC_HSE: specifies the new state of the HSE. - * This parameter can be one of the following values: - * @arg RCC_HSE_OFF: turn OFF the HSE oscillator, HSERDY flag goes low after - * 6 HSE oscillator clock cycles. - * @arg RCC_HSE_ON: turn ON the HSE oscillator - * @arg RCC_HSE_Bypass: HSE oscillator bypassed with external clock - * @retval None - */ -void RCC_HSEConfig(uint8_t RCC_HSE) -{ - /* Check the parameters */ - assert_param(IS_RCC_HSE(RCC_HSE)); - - /* Reset HSEON and HSEBYP bits before configuring the HSE ------------------*/ - *(__IO uint8_t *) CR_BYTE3_ADDRESS = RCC_HSE_OFF; - - /* Set the new HSE configuration -------------------------------------------*/ - *(__IO uint8_t *) CR_BYTE3_ADDRESS = RCC_HSE; -} - -/** - * @brief Waits for HSE start-up. - * @note This functions waits on HSERDY flag to be set and return SUCCESS if - * this flag is set, otherwise returns ERROR if the timeout is reached - * and this flag is not set. The timeout value is defined by the constant - * HSE_STARTUP_TIMEOUT in stm32f4xx.h file. You can tailor it depending - * on the HSE crystal used in your application. - * @param None - * @retval An ErrorStatus enumeration 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. - * @note The calibration is used to compensate for the variations in voltage - * and temperature that influence the frequency of the internal HSI RC. - * @param HSICalibrationValue: specifies the calibration trimming value. - * 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 &= ~RCC_CR_HSITRIM; - - /* 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 The HSI is stopped by hardware when entering STOP and STANDBY modes. - * It is used (enabled by hardware) as system clock source after startup - * from Reset, wakeup from STOP and STANDBY mode, or in case of failure - * of the HSE used directly or indirectly as system clock (if the Clock - * Security System CSS is enabled). - * @note HSI can not be stopped if it is used as system clock source. In this case, - * you have to select another source of the system clock then stop the HSI. - * @note After enabling the HSI, the application software should wait on HSIRDY - * flag to be set indicating that HSI clock is stable and can be used as - * system clock source. - * @param NewState: new state of the HSI. - * This parameter can be: ENABLE or DISABLE. - * @note When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator - * clock cycles. - * @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 External Low Speed oscillator (LSE). - * @note As the LSE is in the Backup domain and write access is denied to - * this domain after reset, you have to enable write access using - * PWR_BackupAccessCmd(ENABLE) function before to configure the LSE - * (to be done once after reset). - * @note After enabling the LSE (RCC_LSE_ON or RCC_LSE_Bypass), the application - * software should wait on LSERDY flag to be set indicating that LSE clock - * is stable and can be used to clock the RTC. - * @param RCC_LSE: specifies the new state of the LSE. - * This parameter can be one of the following values: - * @arg RCC_LSE_OFF: turn OFF the LSE oscillator, LSERDY flag goes low after - * 6 LSE oscillator clock cycles. - * @arg RCC_LSE_ON: turn ON the LSE oscillator - * @arg RCC_LSE_Bypass: LSE oscillator bypassed with external clock - * @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 After enabling the LSI, the application software should wait on - * LSIRDY flag to be set indicating that LSI clock is stable and can - * be used to clock the IWDG and/or the RTC. - * @note LSI can not be disabled if the IWDG is running. - * @param NewState: new state of the LSI. - * This parameter can be: ENABLE or DISABLE. - * @note When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator - * clock cycles. - * @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 main PLL clock source, multiplication and division factors. - * @note This function must be used only when the main PLL is disabled. - * - * @param RCC_PLLSource: specifies the PLL entry clock source. - * This parameter can be one of the following values: - * @arg RCC_PLLSource_HSI: HSI oscillator clock selected as PLL clock entry - * @arg RCC_PLLSource_HSE: HSE oscillator clock selected as PLL clock entry - * @note This clock source (RCC_PLLSource) is common for the main PLL and PLLI2S. - * - * @param PLLM: specifies the division factor for PLL VCO input clock - * This parameter must be a number between 0 and 63. - * @note You have to set the PLLM parameter correctly to ensure that the VCO input - * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency - * of 2 MHz to limit PLL jitter. - * - * @param PLLN: specifies the multiplication factor for PLL VCO output clock - * This parameter must be a number between 192 and 432. - * @note You have to set the PLLN parameter correctly to ensure that the VCO - * output frequency is between 192 and 432 MHz. - * - * @param PLLP: specifies the division factor for main system clock (SYSCLK) - * This parameter must be a number in the range {2, 4, 6, or 8}. - * @note You have to set the PLLP parameter correctly to not exceed 168 MHz on - * the System clock frequency. - * - * @param PLLQ: specifies the division factor for OTG FS, SDIO and RNG clocks - * This parameter must be a number between 4 and 15. - * @note If the USB OTG FS is used in your application, you have to set the - * PLLQ parameter correctly to have 48 MHz clock for the USB. However, - * the SDIO and RNG need a frequency lower than or equal to 48 MHz to work - * correctly. - * - * @retval None - */ -void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ) -{ - /* Check the parameters */ - assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource)); - assert_param(IS_RCC_PLLM_VALUE(PLLM)); - assert_param(IS_RCC_PLLN_VALUE(PLLN)); - assert_param(IS_RCC_PLLP_VALUE(PLLP)); - assert_param(IS_RCC_PLLQ_VALUE(PLLQ)); - - RCC->PLLCFGR = PLLM | (PLLN << 6) | (((PLLP >> 1) -1) << 16) | (RCC_PLLSource) | - (PLLQ << 24); -} - -/** - * @brief Enables or disables the main PLL. - * @note After enabling the main PLL, the application software should wait on - * PLLRDY flag to be set indicating that PLL clock is stable and can - * be used as system clock source. - * @note The main PLL can not be disabled if it is used as system clock source - * @note The main PLL is disabled by hardware when entering STOP and STANDBY modes. - * @param NewState: new state of the main 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; -} - -/** - * @brief Configures the PLLI2S clock multiplication and division factors. - * - * @note This function must be used only when the PLLI2S is disabled. - * @note PLLI2S clock source is common with the main PLL (configured in - * RCC_PLLConfig function ) - * - * @param PLLI2SN: specifies the multiplication factor for PLLI2S VCO output clock - * This parameter must be a number between 192 and 432. - * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO - * output frequency is between 192 and 432 MHz. - * - * @param PLLI2SR: specifies the division factor for I2S clock - * This parameter must be a number between 2 and 7. - * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz - * on the I2S clock frequency. - * - * @retval None - */ -void RCC_PLLI2SConfig(uint32_t PLLI2SN, uint32_t PLLI2SR) -{ - /* Check the parameters */ - assert_param(IS_RCC_PLLI2SN_VALUE(PLLI2SN)); - assert_param(IS_RCC_PLLI2SR_VALUE(PLLI2SR)); - - RCC->PLLI2SCFGR = (PLLI2SN << 6) | (PLLI2SR << 28); -} - -/** - * @brief Enables or disables the PLLI2S. - * @note The PLLI2S is disabled by hardware when entering STOP and STANDBY modes. - * @param NewState: new state of the PLLI2S. This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_PLLI2SCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - *(__IO uint32_t *) CR_PLLI2SON_BB = (uint32_t)NewState; -} - -/** - * @brief Enables or disables the Clock Security System. - * @note If a failure is detected on the HSE oscillator clock, this oscillator - * is automatically disabled and an interrupt is generated to inform the - * software about the failure (Clock Security System Interrupt, CSSI), - * allowing the MCU to perform rescue operations. The CSSI is linked to - * the Cortex-M4 NMI (Non-Maskable Interrupt) exception vector. - * @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 MCO1 pin(PA8). - * @note PA8 should be configured in alternate function mode. - * @param RCC_MCO1Source: specifies the clock source to output. - * This parameter can be one of the following values: - * @arg RCC_MCO1Source_HSI: HSI clock selected as MCO1 source - * @arg RCC_MCO1Source_LSE: LSE clock selected as MCO1 source - * @arg RCC_MCO1Source_HSE: HSE clock selected as MCO1 source - * @arg RCC_MCO1Source_PLLCLK: main PLL clock selected as MCO1 source - * @param RCC_MCO1Div: specifies the MCO1 prescaler. - * This parameter can be one of the following values: - * @arg RCC_MCO1Div_1: no division applied to MCO1 clock - * @arg RCC_MCO1Div_2: division by 2 applied to MCO1 clock - * @arg RCC_MCO1Div_3: division by 3 applied to MCO1 clock - * @arg RCC_MCO1Div_4: division by 4 applied to MCO1 clock - * @arg RCC_MCO1Div_5: division by 5 applied to MCO1 clock - * @retval None - */ -void RCC_MCO1Config(uint32_t RCC_MCO1Source, uint32_t RCC_MCO1Div) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RCC_MCO1SOURCE(RCC_MCO1Source)); - assert_param(IS_RCC_MCO1DIV(RCC_MCO1Div)); - - tmpreg = RCC->CFGR; - - /* Clear MCO1[1:0] and MCO1PRE[2:0] bits */ - tmpreg &= CFGR_MCO1_RESET_MASK; - - /* Select MCO1 clock source and prescaler */ - tmpreg |= RCC_MCO1Source | RCC_MCO1Div; - - /* Store the new value */ - RCC->CFGR = tmpreg; -} - -/** - * @brief Selects the clock source to output on MCO2 pin(PC9). - * @note PC9 should be configured in alternate function mode. - * @param RCC_MCO2Source: specifies the clock source to output. - * This parameter can be one of the following values: - * @arg RCC_MCO2Source_SYSCLK: System clock (SYSCLK) selected as MCO2 source - * @arg RCC_MCO2Source_PLLI2SCLK: PLLI2S clock selected as MCO2 source - * @arg RCC_MCO2Source_HSE: HSE clock selected as MCO2 source - * @arg RCC_MCO2Source_PLLCLK: main PLL clock selected as MCO2 source - * @param RCC_MCO2Div: specifies the MCO2 prescaler. - * This parameter can be one of the following values: - * @arg RCC_MCO2Div_1: no division applied to MCO2 clock - * @arg RCC_MCO2Div_2: division by 2 applied to MCO2 clock - * @arg RCC_MCO2Div_3: division by 3 applied to MCO2 clock - * @arg RCC_MCO2Div_4: division by 4 applied to MCO2 clock - * @arg RCC_MCO2Div_5: division by 5 applied to MCO2 clock - * @retval None - */ -void RCC_MCO2Config(uint32_t RCC_MCO2Source, uint32_t RCC_MCO2Div) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RCC_MCO2SOURCE(RCC_MCO2Source)); - assert_param(IS_RCC_MCO2DIV(RCC_MCO2Div)); - - tmpreg = RCC->CFGR; - - /* Clear MCO2 and MCO2PRE[2:0] bits */ - tmpreg &= CFGR_MCO2_RESET_MASK; - - /* Select MCO2 clock source and prescaler */ - tmpreg |= RCC_MCO2Source | RCC_MCO2Div; - - /* Store the new value */ - RCC->CFGR = tmpreg; -} - -/** - * @} - */ - -/** @defgroup RCC_Group2 System AHB and APB busses clocks configuration functions - * @brief System, AHB and APB busses clocks configuration functions - * -@verbatim - =============================================================================== - ##### System, AHB and APB busses clocks configuration functions ##### - =============================================================================== - [..] - This section provide functions allowing to configure the System, AHB, APB1 and - APB2 busses clocks. - - (#) Several clock sources can be used to drive the System clock (SYSCLK): HSI, - HSE and PLL. - The AHB clock (HCLK) is derived from System clock through configurable - prescaler and used to clock the CPU, memory and peripherals mapped - on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived - from AHB clock through configurable prescalers and used to clock - the peripherals mapped on these busses. You can use - "RCC_GetClocksFreq()" function to retrieve the frequencies of these clocks. - - -@- All the peripheral clocks are derived from the System clock (SYSCLK) except: - (+@) I2S: the I2S clock can be derived either from a specific PLL (PLLI2S) or - from an external clock mapped on the I2S_CKIN pin. - You have to use RCC_I2SCLKConfig() function to configure this clock. - (+@) RTC: the RTC clock can be derived either from the LSI, LSE or HSE clock - divided by 2 to 31. You have to use RCC_RTCCLKConfig() and RCC_RTCCLKCmd() - functions to configure this clock. - (+@) USB OTG FS, SDIO and RTC: USB OTG FS require a frequency equal to 48 MHz - to work correctly, while the SDIO require a frequency equal or lower than - to 48. This clock is derived of the main PLL through PLLQ divider. - (+@) IWDG clock which is always the LSI clock. - - (#) The maximum frequency of the SYSCLK and HCLK is 168 MHz, PCLK2 84 MHz - and PCLK1 42 MHz. Depending on the device voltage range, the maximum - frequency should be adapted accordingly: - +-------------------------------------------------------------------------------------+ - | Latency | HCLK clock frequency (MHz) | - | |---------------------------------------------------------------------| - | | voltage range | voltage range | voltage range | voltage range | - | | 2.7 V - 3.6 V | 2.4 V - 2.7 V | 2.1 V - 2.4 V | 1.8 V - 2.1 V | - |---------------|----------------|----------------|-----------------|-----------------| - |0WS(1CPU cycle)|0 < HCLK <= 30 |0 < HCLK <= 24 |0 < HCLK <= 18 |0 < HCLK <= 16 | - |---------------|----------------|----------------|-----------------|-----------------| - |1WS(2CPU cycle)|30 < HCLK <= 60 |24 < HCLK <= 48 |18 < HCLK <= 36 |16 < HCLK <= 32 | - |---------------|----------------|----------------|-----------------|-----------------| - |2WS(3CPU cycle)|60 < HCLK <= 90 |48 < HCLK <= 72 |36 < HCLK <= 54 |32 < HCLK <= 48 | - |---------------|----------------|----------------|-----------------|-----------------| - |3WS(4CPU cycle)|90 < HCLK <= 120|72 < HCLK <= 96 |54 < HCLK <= 72 |48 < HCLK <= 64 | - |---------------|----------------|----------------|-----------------|-----------------| - |4WS(5CPU cycle)|120< HCLK <= 150|96 < HCLK <= 120|72 < HCLK <= 90 |64 < HCLK <= 80 | - |---------------|----------------|----------------|-----------------|-----------------| - |5WS(6CPU cycle)|120< HCLK <= 168|120< HCLK <= 144|90 < HCLK <= 108 |80 < HCLK <= 96 | - |---------------|----------------|----------------|-----------------|-----------------| - |6WS(7CPU cycle)| NA |144< HCLK <= 168|108 < HCLK <= 120|96 < HCLK <= 112 | - |---------------|----------------|----------------|-----------------|-----------------| - |7WS(8CPU cycle)| NA | NA |120 < HCLK <= 138|112 < HCLK <= 120| - +-------------------------------------------------------------------------------------+ - -@- When VOS bits (in PWR_CR register) is reset to 0 , the maximum value of HCLK is 144 MHz. - You can use PWR_MainRegulatorModeConfig() function to set or reset this bit. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the system clock (SYSCLK). - * @note The HSI is used (enabled by hardware) as system clock source after - * startup from Reset, wake-up from STOP and STANDBY mode, or in case - * of failure of the HSE used directly or indirectly as system clock - * (if the Clock Security System CSS is enabled). - * @note A switch from one clock source to another occurs only if the target - * clock source is ready (clock stable after startup delay or PLL locked). - * If a clock source which is not yet ready is selected, the switch will - * occur when the clock source will be ready. - * You can use RCC_GetSYSCLKSource() function to know which clock is - * currently used as system clock source. - * @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 source - * @arg RCC_SYSCLKSource_HSE: HSE selected as system clock source - * @arg RCC_SYSCLKSource_PLLCLK: PLL selected as system clock source - * @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 &= ~RCC_CFGR_SW; - - /* 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 & RCC_CFGR_SWS)); -} - -/** - * @brief Configures the AHB clock (HCLK). - * @note Depending on the device voltage range, the software has to set correctly - * these bits to ensure that HCLK not exceed the maximum allowed frequency - * (for more details refer to section above - * "CPU, AHB and APB busses clocks configuration functions") - * @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 &= ~RCC_CFGR_HPRE; - - /* 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 &= ~RCC_CFGR_PPRE1; - - /* 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 &= ~RCC_CFGR_PPRE2; - - /* Set PPRE2[2:0] bits according to RCC_HCLK value */ - tmpreg |= RCC_HCLK << 3; - - /* Store the new value */ - RCC->CFGR = tmpreg; -} - -/** - * @brief Returns the frequencies of different on chip clocks; SYSCLK, HCLK, - * PCLK1 and PCLK2. - * - * @note The system frequency computed by this function is not the real - * frequency in the chip. It is calculated based on the predefined - * constant and the selected clock source: - * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(*) - * @note If SYSCLK source is HSE, function returns values based on HSE_VALUE(**) - * @note If SYSCLK source is PLL, function returns values based on HSE_VALUE(**) - * or HSI_VALUE(*) multiplied/divided by the PLL factors. - * @note (*) HSI_VALUE is a constant defined in stm32f4xx.h file (default value - * 16 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * @note (**) HSE_VALUE is a constant defined in stm32f4xx.h file (default value - * 25 MHz), user has to ensure that HSE_VALUE is same as the real - * frequency of the crystal used. Otherwise, this function may - * have wrong result. - * - * @note The result of this function could be not correct when using fractional - * value for HSE crystal. - * - * @param RCC_Clocks: pointer to a RCC_ClocksTypeDef structure which will hold - * the clocks frequencies. - * - * @note This function can be used by the user application to compute the - * baudrate for the communication peripherals or configure other parameters. - * @note Each time SYSCLK, HCLK, PCLK1 and/or PCLK2 clock changes, this function - * must be called to update the structure's field. Otherwise, any - * configuration based on this function will be incorrect. - * - * @retval None - */ -void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) -{ - uint32_t tmp = 0, presc = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFGR & RCC_CFGR_SWS; - - switch (tmp) - { - case 0x00: /* HSI used as system clock source */ - RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; - break; - case 0x04: /* HSE used as system clock source */ - RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; - break; - case 0x08: /* PLL used as system clock source */ - - /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN - SYSCLK = PLL_VCO / PLLP - */ - pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; - pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; - - if (pllsource != 0) - { - /* HSE used as PLL clock source */ - pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - else - { - /* HSI used as PLL clock source */ - pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - - pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; - RCC_Clocks->SYSCLK_Frequency = pllvco/pllp; - break; - default: - RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; - break; - } - /* Compute HCLK, PCLK1 and PCLK2 clocks frequencies ------------------------*/ - - /* Get HCLK prescaler */ - tmp = RCC->CFGR & RCC_CFGR_HPRE; - tmp = tmp >> 4; - presc = APBAHBPrescTable[tmp]; - /* HCLK clock frequency */ - RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc; - - /* Get PCLK1 prescaler */ - tmp = RCC->CFGR & RCC_CFGR_PPRE1; - tmp = tmp >> 10; - presc = APBAHBPrescTable[tmp]; - /* PCLK1 clock frequency */ - RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc; - - /* Get PCLK2 prescaler */ - tmp = RCC->CFGR & RCC_CFGR_PPRE2; - tmp = tmp >> 13; - presc = APBAHBPrescTable[tmp]; - /* PCLK2 clock frequency */ - RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc; -} - -/** - * @} - */ - -/** @defgroup RCC_Group3 Peripheral clocks configuration functions - * @brief Peripheral clocks configuration functions - * -@verbatim - =============================================================================== - ##### Peripheral clocks configuration functions ##### - =============================================================================== - [..] This section provide functions allowing to configure the Peripheral clocks. - - (#) The RTC clock which is derived from the LSI, LSE or HSE clock divided - by 2 to 31. - - (#) After restart from Reset or wakeup from STANDBY, all peripherals are off - except internal SRAM, Flash and JTAG. Before to start using a peripheral - you have to enable its interface clock. You can do this using - RCC_AHBPeriphClockCmd(), RCC_APB2PeriphClockCmd() and RCC_APB1PeriphClockCmd() functions. - - (#) To reset the peripherals configuration (to the default state after device reset) - you can use RCC_AHBPeriphResetCmd(), RCC_APB2PeriphResetCmd() and - RCC_APB1PeriphResetCmd() functions. - - (#) To further reduce power consumption in SLEEP mode the peripheral clocks - can be disabled prior to executing the WFI or WFE instructions. - You can do this using RCC_AHBPeriphClockLPModeCmd(), - RCC_APB2PeriphClockLPModeCmd() and RCC_APB1PeriphClockLPModeCmd() functions. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the RTC clock (RTCCLK). - * @note As the RTC clock configuration bits are in the Backup domain and write - * access is denied to this domain after reset, you have to enable write - * access using PWR_BackupAccessCmd(ENABLE) function before to configure - * the RTC clock source (to be done once after reset). - * @note Once the RTC clock is configured it can't be changed unless the - * Backup domain is reset using RCC_BackupResetCmd() function, or by - * a Power On Reset (POR). - * - * @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_Divx: HSE clock divided by x selected - * as RTC clock, where x:[2,31] - * - * @note If the LSE or LSI is used as RTC clock source, the RTC continues to - * work in STOP and STANDBY modes, and can be used as wakeup source. - * However, when the HSE clock is used as RTC clock source, the RTC - * cannot be used in STOP and STANDBY modes. - * @note The maximum input clock frequency for RTC is 1MHz (when using HSE as - * RTC clock source). - * - * @retval None - */ -void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RCC_RTCCLK_SOURCE(RCC_RTCCLKSource)); - - if ((RCC_RTCCLKSource & 0x00000300) == 0x00000300) - { /* If HSE is selected as RTC clock source, configure HSE division factor for RTC clock */ - tmpreg = RCC->CFGR; - - /* Clear RTCPRE[4:0] bits */ - tmpreg &= ~RCC_CFGR_RTCPRE; - - /* Configure HSE division factor for RTC clock */ - tmpreg |= (RCC_RTCCLKSource & 0xFFFFCFF); - - /* Store the new value */ - RCC->CFGR = tmpreg; - } - - /* Select the RTC clock source */ - RCC->BDCR |= (RCC_RTCCLKSource & 0x00000FFF); -} - -/** - * @brief Enables or disables the RTC clock. - * @note This function must be used only after the RTC clock source 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 Forces or releases the Backup domain reset. - * @note This function resets the RTC peripheral (including the backup registers) - * and the RTC clock source selection in RCC_CSR register. - * @note The BKPSRAM is not affected by this reset. - * @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 Configures the I2S clock source (I2SCLK). - * @note This function must be called before enabling the I2S APB clock. - * @param RCC_I2SCLKSource: specifies the I2S clock source. - * This parameter can be one of the following values: - * @arg RCC_I2S2CLKSource_PLLI2S: PLLI2S clock used as I2S clock source - * @arg RCC_I2S2CLKSource_Ext: External clock mapped on the I2S_CKIN pin - * used as I2S clock source - * @retval None - */ -void RCC_I2SCLKConfig(uint32_t RCC_I2SCLKSource) -{ - /* Check the parameters */ - assert_param(IS_RCC_I2SCLK_SOURCE(RCC_I2SCLKSource)); - - *(__IO uint32_t *) CFGR_I2SSRC_BB = RCC_I2SCLKSource; -} - -/** - * @brief Configures the Timers clocks prescalers selection. - * - * @note This feature is only available with STM32F427x/437x Devices. - * @param RCC_TIMCLKPrescaler : specifies the Timers clocks prescalers selection - * This parameter can be one of the following values: - * @arg RCC_TIMPrescDesactivated: The Timers kernels clocks prescaler is - * equal to HPRE if PPREx is corresponding to division by 1 or 2, - * else it is equal to [(HPRE * PPREx) / 2] if PPREx is corresponding to - * division by 4 or more. - * - * @arg RCC_TIMPrescActivated: The Timers kernels clocks prescaler is - * equal to HPRE if PPREx is corresponding to division by 1, 2 or 4, - * else it is equal to [(HPRE * PPREx) / 4] if PPREx is corresponding - * to division by 8 or more. - * @retval None - */ -void RCC_TIMCLKPresConfig(uint32_t RCC_TIMCLKPrescaler) -{ - /* Check the parameters */ - assert_param(IS_RCC_TIMCLK_PRESCALER(RCC_TIMCLKPrescaler)); - - *(__IO uint32_t *) DCKCFGR_TIMPRE_BB = RCC_TIMCLKPrescaler; - -} - -/** - * @brief Enables or disables the AHB1 peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @param RCC_AHBPeriph: specifies the AHB1 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_AHB1Periph_GPIOA: GPIOA clock - * @arg RCC_AHB1Periph_GPIOB: GPIOB clock - * @arg RCC_AHB1Periph_GPIOC: GPIOC clock - * @arg RCC_AHB1Periph_GPIOD: GPIOD clock - * @arg RCC_AHB1Periph_GPIOE: GPIOE clock - * @arg RCC_AHB1Periph_GPIOF: GPIOF clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOI: GPIOI clock - * @arg RCC_AHB1Periph_CRC: CRC clock - * @arg RCC_AHB1Periph_BKPSRAM: BKPSRAM interface clock - * @arg RCC_AHB1Periph_CCMDATARAMEN CCM data RAM interface clock - * @arg RCC_AHB1Periph_DMA1: DMA1 clock - * @arg RCC_AHB1Periph_DMA2: DMA2 clock - * @arg RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock - * @arg RCC_AHB1Periph_ETH_MAC_Tx: Ethernet Transmission clock - * @arg RCC_AHB1Periph_ETH_MAC_Rx: Ethernet Reception clock - * @arg RCC_AHB1Periph_ETH_MAC_PTP: Ethernet PTP clock - * @arg RCC_AHB1Periph_OTG_HS: USB OTG HS clock - * @arg RCC_AHB1Periph_OTG_HS_ULPI: USB OTG HS ULPI clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph)); - - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->AHB1ENR |= RCC_AHB1Periph; - } - else - { - RCC->AHB1ENR &= ~RCC_AHB1Periph; - } -} - -/** - * @brief Enables or disables the AHB2 peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @param RCC_AHBPeriph: specifies the AHB2 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_AHB2Periph_DCMI: DCMI clock - * @arg RCC_AHB2Periph_CRYP: CRYP clock - * @arg RCC_AHB2Periph_HASH: HASH clock - * @arg RCC_AHB2Periph_RNG: RNG clock - * @arg RCC_AHB2Periph_OTG_FS: USB OTG FS clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB2ENR |= RCC_AHB2Periph; - } - else - { - RCC->AHB2ENR &= ~RCC_AHB2Periph; - } -} - -/** - * @brief Enables or disables the AHB3 peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @param RCC_AHBPeriph: specifies the AHB3 peripheral to gates its clock. - * This parameter must be: RCC_AHB3Periph_FSMC - * - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB3_PERIPH(RCC_AHB3Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB3ENR |= RCC_AHB3Periph; - } - else - { - RCC->AHB3ENR &= ~RCC_AHB3Periph; - } -} - -/** - * @brief Enables or disables the Low Speed APB (APB1) peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @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: TIM2 clock - * @arg RCC_APB1Periph_TIM3: TIM3 clock - * @arg RCC_APB1Periph_TIM4: TIM4 clock - * @arg RCC_APB1Periph_TIM5: TIM5 clock - * @arg RCC_APB1Periph_TIM6: TIM6 clock - * @arg RCC_APB1Periph_TIM7: TIM7 clock - * @arg RCC_APB1Periph_TIM12: TIM12 clock - * @arg RCC_APB1Periph_TIM13: TIM13 clock - * @arg RCC_APB1Periph_TIM14: TIM14 clock - * @arg RCC_APB1Periph_WWDG: WWDG clock - * @arg RCC_APB1Periph_SPI2: SPI2 clock - * @arg RCC_APB1Periph_SPI3: SPI3 clock - * @arg RCC_APB1Periph_USART2: USART2 clock - * @arg RCC_APB1Periph_USART3: USART3 clock - * @arg RCC_APB1Periph_UART4: UART4 clock - * @arg RCC_APB1Periph_UART5: UART5 clock - * @arg RCC_APB1Periph_I2C1: I2C1 clock - * @arg RCC_APB1Periph_I2C2: I2C2 clock - * @arg RCC_APB1Periph_I2C3: I2C3 clock - * @arg RCC_APB1Periph_CAN1: CAN1 clock - * @arg RCC_APB1Periph_CAN2: CAN2 clock - * @arg RCC_APB1Periph_PWR: PWR clock - * @arg RCC_APB1Periph_DAC: DAC clock - * @arg RCC_APB1Periph_UART7: UART7 clock - * @arg RCC_APB1Periph_UART8: UART8 clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->APB1ENR |= RCC_APB1Periph; - } - else - { - RCC->APB1ENR &= ~RCC_APB1Periph; - } -} - -/** - * @brief Enables or disables the High Speed APB (APB2) peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_APB2Periph_TIM1: TIM1 clock - * @arg RCC_APB2Periph_TIM8: TIM8 clock - * @arg RCC_APB2Periph_USART1: USART1 clock - * @arg RCC_APB2Periph_USART6: USART6 clock - * @arg RCC_APB2Periph_ADC1: ADC1 clock - * @arg RCC_APB2Periph_ADC2: ADC2 clock - * @arg RCC_APB2Periph_ADC3: ADC3 clock - * @arg RCC_APB2Periph_SDIO: SDIO clock - * @arg RCC_APB2Periph_SPI1: SPI1 clock - * @arg RCC_APB2Periph_SPI4: SPI4 clock - * @arg RCC_APB2Periph_SYSCFG: SYSCFG clock - * @arg RCC_APB2Periph_TIM9: TIM9 clock - * @arg RCC_APB2Periph_TIM10: TIM10 clock - * @arg RCC_APB2Periph_TIM11: TIM11 clock - * @arg RCC_APB2Periph_SPI5: SPI5 clock - * @arg RCC_APB2Periph_SPI6: SPI6 clock - * @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 Forces or releases AHB1 peripheral reset. - * @param RCC_AHB1Periph: specifies the AHB1 peripheral to reset. - * This parameter can be any combination of the following values: - * @arg RCC_AHB1Periph_GPIOA: GPIOA clock - * @arg RCC_AHB1Periph_GPIOB: GPIOB clock - * @arg RCC_AHB1Periph_GPIOC: GPIOC clock - * @arg RCC_AHB1Periph_GPIOD: GPIOD clock - * @arg RCC_AHB1Periph_GPIOE: GPIOE clock - * @arg RCC_AHB1Periph_GPIOF: GPIOF clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOI: GPIOI clock - * @arg RCC_AHB1Periph_CRC: CRC clock - * @arg RCC_AHB1Periph_DMA1: DMA1 clock - * @arg RCC_AHB1Periph_DMA2: DMA2 clock - * @arg RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock - * @arg RCC_AHB1Periph_OTG_HS: USB OTG HS clock - * - * @param NewState: new state of the specified peripheral reset. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB1PeriphResetCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB1_RESET_PERIPH(RCC_AHB1Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB1RSTR |= RCC_AHB1Periph; - } - else - { - RCC->AHB1RSTR &= ~RCC_AHB1Periph; - } -} - -/** - * @brief Forces or releases AHB2 peripheral reset. - * @param RCC_AHB2Periph: specifies the AHB2 peripheral to reset. - * This parameter can be any combination of the following values: - * @arg RCC_AHB2Periph_DCMI: DCMI clock - * @arg RCC_AHB2Periph_CRYP: CRYP clock - * @arg RCC_AHB2Periph_HASH: HASH clock - * @arg RCC_AHB2Periph_RNG: RNG clock - * @arg RCC_AHB2Periph_OTG_FS: USB OTG FS clock - * @param NewState: new state of the specified peripheral reset. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB2PeriphResetCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB2RSTR |= RCC_AHB2Periph; - } - else - { - RCC->AHB2RSTR &= ~RCC_AHB2Periph; - } -} - -/** - * @brief Forces or releases AHB3 peripheral reset. - * @param RCC_AHB3Periph: specifies the AHB3 peripheral to reset. - * This parameter must be: RCC_AHB3Periph_FSMC - * - * @param NewState: new state of the specified peripheral reset. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB3PeriphResetCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB3_PERIPH(RCC_AHB3Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB3RSTR |= RCC_AHB3Periph; - } - else - { - RCC->AHB3RSTR &= ~RCC_AHB3Periph; - } -} - -/** - * @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: TIM2 clock - * @arg RCC_APB1Periph_TIM3: TIM3 clock - * @arg RCC_APB1Periph_TIM4: TIM4 clock - * @arg RCC_APB1Periph_TIM5: TIM5 clock - * @arg RCC_APB1Periph_TIM6: TIM6 clock - * @arg RCC_APB1Periph_TIM7: TIM7 clock - * @arg RCC_APB1Periph_TIM12: TIM12 clock - * @arg RCC_APB1Periph_TIM13: TIM13 clock - * @arg RCC_APB1Periph_TIM14: TIM14 clock - * @arg RCC_APB1Periph_WWDG: WWDG clock - * @arg RCC_APB1Periph_SPI2: SPI2 clock - * @arg RCC_APB1Periph_SPI3: SPI3 clock - * @arg RCC_APB1Periph_USART2: USART2 clock - * @arg RCC_APB1Periph_USART3: USART3 clock - * @arg RCC_APB1Periph_UART4: UART4 clock - * @arg RCC_APB1Periph_UART5: UART5 clock - * @arg RCC_APB1Periph_I2C1: I2C1 clock - * @arg RCC_APB1Periph_I2C2: I2C2 clock - * @arg RCC_APB1Periph_I2C3: I2C3 clock - * @arg RCC_APB1Periph_CAN1: CAN1 clock - * @arg RCC_APB1Periph_CAN2: CAN2 clock - * @arg RCC_APB1Periph_PWR: PWR clock - * @arg RCC_APB1Periph_DAC: DAC clock - * @arg RCC_APB1Periph_UART7: UART7 clock - * @arg RCC_APB1Periph_UART8: UART8 clock - * @param NewState: new state of the specified peripheral reset. - * 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 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_TIM1: TIM1 clock - * @arg RCC_APB2Periph_TIM8: TIM8 clock - * @arg RCC_APB2Periph_USART1: USART1 clock - * @arg RCC_APB2Periph_USART6: USART6 clock - * @arg RCC_APB2Periph_ADC1: ADC1 clock - * @arg RCC_APB2Periph_ADC2: ADC2 clock - * @arg RCC_APB2Periph_ADC3: ADC3 clock - * @arg RCC_APB2Periph_SDIO: SDIO clock - * @arg RCC_APB2Periph_SPI1: SPI1 clock - * @arg RCC_APB2Periph_SPI4: SPI4 clock - * @arg RCC_APB2Periph_SYSCFG: SYSCFG clock - * @arg RCC_APB2Periph_TIM9: TIM9 clock - * @arg RCC_APB2Periph_TIM10: TIM10 clock - * @arg RCC_APB2Periph_TIM11: TIM11 clock - * @arg RCC_APB2Periph_SPI5: SPI5 clock - * @arg RCC_APB2Periph_SPI6: SPI6 clock - * @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_RESET_PERIPH(RCC_APB2Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->APB2RSTR |= RCC_APB2Periph; - } - else - { - RCC->APB2RSTR &= ~RCC_APB2Periph; - } -} - -/** - * @brief Enables or disables the AHB1 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @param RCC_AHBPeriph: specifies the AHB1 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_AHB1Periph_GPIOA: GPIOA clock - * @arg RCC_AHB1Periph_GPIOB: GPIOB clock - * @arg RCC_AHB1Periph_GPIOC: GPIOC clock - * @arg RCC_AHB1Periph_GPIOD: GPIOD clock - * @arg RCC_AHB1Periph_GPIOE: GPIOE clock - * @arg RCC_AHB1Periph_GPIOF: GPIOF clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOI: GPIOI clock - * @arg RCC_AHB1Periph_CRC: CRC clock - * @arg RCC_AHB1Periph_BKPSRAM: BKPSRAM interface clock - * @arg RCC_AHB1Periph_DMA1: DMA1 clock - * @arg RCC_AHB1Periph_DMA2: DMA2 clock - * @arg RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock - * @arg RCC_AHB1Periph_ETH_MAC_Tx: Ethernet Transmission clock - * @arg RCC_AHB1Periph_ETH_MAC_Rx: Ethernet Reception clock - * @arg RCC_AHB1Periph_ETH_MAC_PTP: Ethernet PTP clock - * @arg RCC_AHB1Periph_OTG_HS: USB OTG HS clock - * @arg RCC_AHB1Periph_OTG_HS_ULPI: USB OTG HS ULPI clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB1_LPMODE_PERIPH(RCC_AHB1Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->AHB1LPENR |= RCC_AHB1Periph; - } - else - { - RCC->AHB1LPENR &= ~RCC_AHB1Periph; - } -} - -/** - * @brief Enables or disables the AHB2 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @param RCC_AHBPeriph: specifies the AHB2 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_AHB2Periph_DCMI: DCMI clock - * @arg RCC_AHB2Periph_CRYP: CRYP clock - * @arg RCC_AHB2Periph_HASH: HASH clock - * @arg RCC_AHB2Periph_RNG: RNG clock - * @arg RCC_AHB2Periph_OTG_FS: USB OTG FS clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB2PeriphClockLPModeCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->AHB2LPENR |= RCC_AHB2Periph; - } - else - { - RCC->AHB2LPENR &= ~RCC_AHB2Periph; - } -} - -/** - * @brief Enables or disables the AHB3 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @param RCC_AHBPeriph: specifies the AHB3 peripheral to gates its clock. - * This parameter must be: RCC_AHB3Periph_FSMC - * - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB3PeriphClockLPModeCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB3_PERIPH(RCC_AHB3Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->AHB3LPENR |= RCC_AHB3Periph; - } - else - { - RCC->AHB3LPENR &= ~RCC_AHB3Periph; - } -} - -/** - * @brief Enables or disables the APB1 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @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: TIM2 clock - * @arg RCC_APB1Periph_TIM3: TIM3 clock - * @arg RCC_APB1Periph_TIM4: TIM4 clock - * @arg RCC_APB1Periph_TIM5: TIM5 clock - * @arg RCC_APB1Periph_TIM6: TIM6 clock - * @arg RCC_APB1Periph_TIM7: TIM7 clock - * @arg RCC_APB1Periph_TIM12: TIM12 clock - * @arg RCC_APB1Periph_TIM13: TIM13 clock - * @arg RCC_APB1Periph_TIM14: TIM14 clock - * @arg RCC_APB1Periph_WWDG: WWDG clock - * @arg RCC_APB1Periph_SPI2: SPI2 clock - * @arg RCC_APB1Periph_SPI3: SPI3 clock - * @arg RCC_APB1Periph_USART2: USART2 clock - * @arg RCC_APB1Periph_USART3: USART3 clock - * @arg RCC_APB1Periph_UART4: UART4 clock - * @arg RCC_APB1Periph_UART5: UART5 clock - * @arg RCC_APB1Periph_I2C1: I2C1 clock - * @arg RCC_APB1Periph_I2C2: I2C2 clock - * @arg RCC_APB1Periph_I2C3: I2C3 clock - * @arg RCC_APB1Periph_CAN1: CAN1 clock - * @arg RCC_APB1Periph_CAN2: CAN2 clock - * @arg RCC_APB1Periph_PWR: PWR clock - * @arg RCC_APB1Periph_DAC: DAC clock - * @arg RCC_APB1Periph_UART7: UART7 clock - * @arg RCC_APB1Periph_UART8: UART8 clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_APB1PeriphClockLPModeCmd(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->APB1LPENR |= RCC_APB1Periph; - } - else - { - RCC->APB1LPENR &= ~RCC_APB1Periph; - } -} - -/** - * @brief Enables or disables the APB2 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_APB2Periph_TIM1: TIM1 clock - * @arg RCC_APB2Periph_TIM8: TIM8 clock - * @arg RCC_APB2Periph_USART1: USART1 clock - * @arg RCC_APB2Periph_USART6: USART6 clock - * @arg RCC_APB2Periph_ADC1: ADC1 clock - * @arg RCC_APB2Periph_ADC2: ADC2 clock - * @arg RCC_APB2Periph_ADC3: ADC3 clock - * @arg RCC_APB2Periph_SDIO: SDIO clock - * @arg RCC_APB2Periph_SPI1: SPI1 clock - * @arg RCC_APB2Periph_SPI4: SPI4 clock - * @arg RCC_APB2Periph_SYSCFG: SYSCFG clock - * @arg RCC_APB2Periph_TIM9: TIM9 clock - * @arg RCC_APB2Periph_TIM10: TIM10 clock - * @arg RCC_APB2Periph_TIM11: TIM11 clock - * @arg RCC_APB2Periph_SPI5: SPI5 clock - * @arg RCC_APB2Periph_SPI6: SPI6 clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_APB2PeriphClockLPModeCmd(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->APB2LPENR |= RCC_APB2Periph; - } - else - { - RCC->APB2LPENR &= ~RCC_APB2Periph; - } -} - -/** - * @} - */ - -/** @defgroup RCC_Group4 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified RCC interrupts. - * @param RCC_IT: specifies the RCC interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg RCC_IT_LSIRDY: LSI ready interrupt - * @arg RCC_IT_LSERDY: LSE ready interrupt - * @arg RCC_IT_HSIRDY: HSI ready interrupt - * @arg RCC_IT_HSERDY: HSE ready interrupt - * @arg RCC_IT_PLLRDY: main PLL ready interrupt - * @arg RCC_IT_PLLI2SRDY: PLLI2S 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[14:8] bits to enable the selected interrupts */ - *(__IO uint8_t *) CIR_BYTE2_ADDRESS |= RCC_IT; - } - else - { - /* Perform Byte access to RCC_CIR[14:8] bits to disable the selected interrupts */ - *(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT; - } -} - -/** - * @brief Checks whether the specified RCC flag is set or not. - * @param RCC_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready - * @arg RCC_FLAG_HSERDY: HSE oscillator clock ready - * @arg RCC_FLAG_PLLRDY: main PLL clock ready - * @arg RCC_FLAG_PLLI2SRDY: PLLI2S clock ready - * @arg RCC_FLAG_LSERDY: LSE oscillator clock ready - * @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready - * @arg RCC_FLAG_BORRST: POR/PDR or BOR reset - * @arg RCC_FLAG_PINRST: Pin reset - * @arg RCC_FLAG_PORRST: POR/PDR reset - * @arg RCC_FLAG_SFTRST: Software reset - * @arg RCC_FLAG_IWDGRST: Independent Watchdog reset - * @arg RCC_FLAG_WWDGRST: Window Watchdog reset - * @arg RCC_FLAG_LPWRRST: Low Power reset - * @retval The new state of 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. - * 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 |= RCC_CSR_RMVF; -} - -/** - * @brief Checks whether the specified RCC interrupt has occurred or not. - * @param RCC_IT: specifies the RCC interrupt source to check. - * This parameter can be one of the following values: - * @arg RCC_IT_LSIRDY: LSI ready interrupt - * @arg RCC_IT_LSERDY: LSE ready interrupt - * @arg RCC_IT_HSIRDY: HSI ready interrupt - * @arg RCC_IT_HSERDY: HSE ready interrupt - * @arg RCC_IT_PLLRDY: main PLL ready interrupt - * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt - * @arg RCC_IT_CSS: Clock Security System interrupt - * @retval The new state of 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. - * This parameter can be any combination of the following values: - * @arg RCC_IT_LSIRDY: LSI ready interrupt - * @arg RCC_IT_LSERDY: LSE ready interrupt - * @arg RCC_IT_HSIRDY: HSI ready interrupt - * @arg RCC_IT_HSERDY: HSE ready interrupt - * @arg RCC_IT_PLLRDY: main PLL ready interrupt - * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt - * @arg RCC_IT_CSS: Clock Security System interrupt - * @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c deleted file mode 100644 index 6d0e65d9..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c +++ /dev/null @@ -1,397 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rng.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Random Number Generator (RNG) peripheral: - * + Initialization and Configuration - * + Get 32 bit Random number - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable The RNG controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE) function. - - (#) Activate the RNG peripheral using RNG_Cmd() function. - - (#) Wait until the 32 bit Random number Generator contains a valid random data - (using polling/interrupt mode). For more details, refer to "Interrupts and - flags management functions" module description. - - (#) Get the 32 bit Random number using RNG_GetRandomNumber() function - - (#) To get another 32 bit Random number, go to step 3. - - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_rng.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup RNG - * @brief RNG driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup RNG_Private_Functions - * @{ - */ - -/** @defgroup RNG_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initialize the RNG peripheral - (+) Enable or disable the RNG peripheral - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes the RNG peripheral registers to their default reset values. - * @param None - * @retval None - */ -void RNG_DeInit(void) -{ - /* Enable RNG reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, ENABLE); - - /* Release RNG from reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, DISABLE); -} - -/** - * @brief Enables or disables the RNG peripheral. - * @param NewState: new state of the RNG peripheral. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RNG_Cmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the RNG */ - RNG->CR |= RNG_CR_RNGEN; - } - else - { - /* Disable the RNG */ - RNG->CR &= ~RNG_CR_RNGEN; - } -} -/** - * @} - */ - -/** @defgroup RNG_Group2 Get 32 bit Random number function - * @brief Get 32 bit Random number function - * - -@verbatim - =============================================================================== - ##### Get 32 bit Random number function ##### - =============================================================================== - [..] This section provides a function allowing to get the 32 bit Random number - - (@) Before to call this function you have to wait till DRDY flag is set, - using RNG_GetFlagStatus(RNG_FLAG_DRDY) function. - -@endverbatim - * @{ - */ - - -/** - * @brief Returns a 32-bit random number. - * - * @note Before to call this function you have to wait till DRDY (data ready) - * flag is set, using RNG_GetFlagStatus(RNG_FLAG_DRDY) function. - * @note Each time the the Random number data is read (using RNG_GetRandomNumber() - * function), the RNG_FLAG_DRDY flag is automatically cleared. - * @note In the case of a seed error, the generation of random numbers is - * interrupted for as long as the SECS bit is '1'. If a number is - * available in the RNG_DR register, it must not be used because it may - * not have enough entropy. In this case, it is recommended to clear the - * SEIS bit(using RNG_ClearFlag(RNG_FLAG_SECS) function), then disable - * and enable the RNG peripheral (using RNG_Cmd() function) to - * reinitialize and restart the RNG. - * @note In the case of a clock error, the RNG is no more able to generate - * random numbers because the PLL48CLK clock is not correct. User have - * to check that the clock controller is correctly configured to provide - * the RNG clock and clear the CEIS bit (using RNG_ClearFlag(RNG_FLAG_CECS) - * function) . The clock error has no impact on the previously generated - * random numbers, and the RNG_DR register contents can be used. - * - * @param None - * @retval 32-bit random number. - */ -uint32_t RNG_GetRandomNumber(void) -{ - /* Return the 32 bit random number from the DR register */ - return RNG->DR; -} - - -/** - * @} - */ - -/** @defgroup RNG_Group3 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the RNG Interrupts and - to get the status and clear flags and Interrupts pending bits. - - [..] The RNG provides 3 Interrupts sources and 3 Flags: - - *** Flags : *** - =============== - [..] - (#) RNG_FLAG_DRDY : In the case of the RNG_DR register contains valid - random data. it is cleared by reading the valid data(using - RNG_GetRandomNumber() function). - - (#) RNG_FLAG_CECS : In the case of a seed error detection. - - (#) RNG_FLAG_SECS : In the case of a clock error detection. - - *** Interrupts *** - ================== - [..] If enabled, an RNG interrupt is pending : - - (#) In the case of the RNG_DR register contains valid random data. - This interrupt source is cleared once the RNG_DR register has been read - (using RNG_GetRandomNumber() function) until a new valid value is - computed; or - (#) In the case of a seed error : One of the following faulty sequences has - been detected: - (++) More than 64 consecutive bits at the same value (0 or 1) - (++) More than 32 consecutive alternance of 0 and 1 (0101010101...01) - This interrupt source is cleared using RNG_ClearITPendingBit(RNG_IT_SEI) - function; or - (#) In the case of a clock error : the PLL48CLK (RNG peripheral clock source) - was not correctly detected (fPLL48CLK< fHCLK/16). This interrupt source is - cleared using RNG_ClearITPendingBit(RNG_IT_CEI) function. - -@- note In this case, User have to check that the clock controller is - correctly configured to provide the RNG clock. - - *** Managing the RNG controller events : *** - ============================================ - [..] The user should identify which mode will be used in his application to manage - the RNG controller events: Polling mode or Interrupt mode. - - (#) In the Polling Mode it is advised to use the following functions: - (++) RNG_GetFlagStatus() : to check if flags events occur. - (++) RNG_ClearFlag() : to clear the flags events. - - -@@- RNG_FLAG_DRDY can not be cleared by RNG_ClearFlag(). it is cleared only - by reading the Random number data. - - (#) In the Interrupt Mode it is advised to use the following functions: - (++) RNG_ITConfig() : to enable or disable the interrupt source. - (++) RNG_GetITStatus() : to check if Interrupt occurs. - (++) RNG_ClearITPendingBit() : to clear the Interrupt pending Bit - (corresponding Flag). - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the RNG interrupt. - * @note The RNG provides 3 interrupt sources, - * - Computed data is ready event (DRDY), and - * - Seed error Interrupt (SEI) and - * - Clock error Interrupt (CEI), - * all these interrupts sources are enabled by setting the IE bit in - * CR register. However, each interrupt have its specific status bit - * (see RNG_GetITStatus() function) and clear bit except the DRDY event - * (see RNG_ClearITPendingBit() function). - * @param NewState: new state of the RNG interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RNG_ITConfig(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the RNG interrupt */ - RNG->CR |= RNG_CR_IE; - } - else - { - /* Disable the RNG interrupt */ - RNG->CR &= ~RNG_CR_IE; - } -} - -/** - * @brief Checks whether the specified RNG flag is set or not. - * @param RNG_FLAG: specifies the RNG flag to check. - * This parameter can be one of the following values: - * @arg RNG_FLAG_DRDY: Data Ready flag. - * @arg RNG_FLAG_CECS: Clock Error Current flag. - * @arg RNG_FLAG_SECS: Seed Error Current flag. - * @retval The new state of RNG_FLAG (SET or RESET). - */ -FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_RNG_GET_FLAG(RNG_FLAG)); - - /* Check the status of the specified RNG flag */ - if ((RNG->SR & RNG_FLAG) != (uint8_t)RESET) - { - /* RNG_FLAG is set */ - bitstatus = SET; - } - else - { - /* RNG_FLAG is reset */ - bitstatus = RESET; - } - /* Return the RNG_FLAG status */ - return bitstatus; -} - - -/** - * @brief Clears the RNG flags. - * @param RNG_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg RNG_FLAG_CECS: Clock Error Current flag. - * @arg RNG_FLAG_SECS: Seed Error Current flag. - * @note RNG_FLAG_DRDY can not be cleared by RNG_ClearFlag() function. - * This flag is cleared only by reading the Random number data (using - * RNG_GetRandomNumber() function). - * @retval None - */ -void RNG_ClearFlag(uint8_t RNG_FLAG) -{ - /* Check the parameters */ - assert_param(IS_RNG_CLEAR_FLAG(RNG_FLAG)); - /* Clear the selected RNG flags */ - RNG->SR = ~(uint32_t)(((uint32_t)RNG_FLAG) << 4); -} - -/** - * @brief Checks whether the specified RNG interrupt has occurred or not. - * @param RNG_IT: specifies the RNG interrupt source to check. - * This parameter can be one of the following values: - * @arg RNG_IT_CEI: Clock Error Interrupt. - * @arg RNG_IT_SEI: Seed Error Interrupt. - * @retval The new state of RNG_IT (SET or RESET). - */ -ITStatus RNG_GetITStatus(uint8_t RNG_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_RNG_GET_IT(RNG_IT)); - - /* Check the status of the specified RNG interrupt */ - if ((RNG->SR & RNG_IT) != (uint8_t)RESET) - { - /* RNG_IT is set */ - bitstatus = SET; - } - else - { - /* RNG_IT is reset */ - bitstatus = RESET; - } - /* Return the RNG_IT status */ - return bitstatus; -} - - -/** - * @brief Clears the RNG interrupt pending bit(s). - * @param RNG_IT: specifies the RNG interrupt pending bit(s) to clear. - * This parameter can be any combination of the following values: - * @arg RNG_IT_CEI: Clock Error Interrupt. - * @arg RNG_IT_SEI: Seed Error Interrupt. - * @retval None - */ -void RNG_ClearITPendingBit(uint8_t RNG_IT) -{ - /* Check the parameters */ - assert_param(IS_RNG_IT(RNG_IT)); - - /* Clear the selected RNG interrupt pending bit */ - RNG->SR = (uint8_t)~RNG_IT; -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c deleted file mode 100644 index d4b22d29..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c +++ /dev/null @@ -1,2761 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rtc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Real-Time Clock (RTC) peripheral: - * + Initialization - * + Calendar (Time and Date) configuration - * + Alarms (Alarm A and Alarm B) configuration - * + WakeUp Timer configuration - * + Daylight Saving configuration - * + Output pin Configuration - * + Coarse digital Calibration configuration - * + Smooth digital Calibration configuration - * + TimeStamp configuration - * + Tampers configuration - * + Backup Data Registers configuration - * + Shift control synchronisation - * + RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### Backup Domain Operating Condition ##### - =================================================================== - [..] The real-time clock (RTC), the RTC backup registers, and the backup - SRAM (BKP SRAM) can be powered from the VBAT voltage when the main - VDD supply is powered off. - To retain the content of the RTC backup registers, backup SRAM, and supply - the RTC when VDD is turned off, VBAT pin can be connected to an optional - standby voltage supplied by a battery or by another source. - - [..] To allow the RTC to operate even when the main digital supply (VDD) is turned - off, the VBAT pin powers the following blocks: - (#) The RTC - (#) The LSE oscillator - (#) The backup SRAM when the low power backup regulator is enabled - (#) PC13 to PC15 I/Os, plus PI8 I/O (when available) - - [..] When the backup domain is supplied by VDD (analog switch connected to VDD), - the following functions are available: - (#) PC14 and PC15 can be used as either GPIO or LSE pins - (#) PC13 can be used as a GPIO or as the RTC_AF1 pin - (#) PI8 can be used as a GPIO or as the RTC_AF2 pin - - [..] When the backup domain is supplied by VBAT (analog switch connected to VBAT - because VDD is not present), the following functions are available: - (#) PC14 and PC15 can be used as LSE pins only - (#) PC13 can be used as the RTC_AF1 pin - (#) PI8 can be used as the RTC_AF2 pin - - - ##### Backup Domain Reset ##### - =================================================================== - [..] The backup domain reset sets all RTC registers and the RCC_BDCR register - to their reset values. The BKPSRAM is not affected by this reset. The only - way of resetting the BKPSRAM is through the Flash interface by requesting - a protection level change from 1 to 0. - [..] A backup domain reset is generated when one of the following events occurs: - (#) Software reset, triggered by setting the BDRST bit in the - RCC Backup domain control register (RCC_BDCR). You can use the - RCC_BackupResetCmd(). - (#) VDD or VBAT power on, if both supplies have previously been powered off. - - - ##### Backup Domain Access ##### - =================================================================== - [..] After reset, the backup domain (RTC registers, RTC backup data - registers and backup SRAM) is protected against possible unwanted write - accesses. - [..] To enable access to the RTC Domain and RTC registers, proceed as follows: - (+) Enable the Power Controller (PWR) APB1 interface clock using the - RCC_APB1PeriphClockCmd() function. - (+) Enable access to RTC domain using the PWR_BackupAccessCmd() function. - (+) Select the RTC clock source using the RCC_RTCCLKConfig() function. - (+) Enable RTC Clock using the RCC_RTCCLKCmd() function. - - - ##### How to use RTC Driver ##### - =================================================================== - [..] - (+) Enable the RTC domain access (see description in the section above) - (+) Configure the RTC Prescaler (Asynchronous and Synchronous) and RTC hour - format using the RTC_Init() function. - - *** Time and Date configuration *** - =================================== - [..] - (+) To configure the RTC Calendar (Time and Date) use the RTC_SetTime() - and RTC_SetDate() functions. - (+) To read the RTC Calendar, use the RTC_GetTime() and RTC_GetDate() functions. - (+) Use the RTC_DayLightSavingConfig() function to add or sub one - hour to the RTC Calendar. - - *** Alarm configuration *** - =========================== - [..] - (+) To configure the RTC Alarm use the RTC_SetAlarm() function. - (+) Enable the selected RTC Alarm using the RTC_AlarmCmd() function - (+) To read the RTC Alarm, use the RTC_GetAlarm() function. - (+) To read the RTC alarm SubSecond, use the RTC_GetAlarmSubSecond() function. - - *** RTC Wakeup configuration *** - ================================ - [..] - (+) Configure the RTC Wakeup Clock source use the RTC_WakeUpClockConfig() - function. - (+) Configure the RTC WakeUp Counter using the RTC_SetWakeUpCounter() function - (+) Enable the RTC WakeUp using the RTC_WakeUpCmd() function - (+) To read the RTC WakeUp Counter register, use the RTC_GetWakeUpCounter() - function. - - *** Outputs configuration *** - ============================= - [..] The RTC has 2 different outputs: - (+) AFO_ALARM: this output is used to manage the RTC Alarm A, Alarm B - and WaKeUp signals. To output the selected RTC signal on RTC_AF1 pin, use the - RTC_OutputConfig() function. - (+) AFO_CALIB: this output is 512Hz signal or 1Hz. To output the RTC Clock on - RTC_AF1 pin, use the RTC_CalibOutputCmd() function. - - *** Smooth digital Calibration configuration *** - ================================================ - [..] - (+) Configure the RTC Original Digital Calibration Value and the corresponding - calibration cycle period (32s,16s and 8s) using the RTC_SmoothCalibConfig() - function. - - *** Coarse digital Calibration configuration *** - ================================================ - [..] - (+) Configure the RTC Coarse Calibration Value and the corresponding - sign using the RTC_CoarseCalibConfig() function. - (+) Enable the RTC Coarse Calibration using the RTC_CoarseCalibCmd() function - - *** TimeStamp configuration *** - =============================== - [..] - (+) Configure the RTC_AF1 trigger and enables the RTC TimeStamp using the RTC - _TimeStampCmd() function. - (+) To read the RTC TimeStamp Time and Date register, use the RTC_GetTimeStamp() - function. - (+) To read the RTC TimeStamp SubSecond register, use the - RTC_GetTimeStampSubSecond() function. - (+) The TAMPER1 alternate function can be mapped either to RTC_AF1(PC13) - or RTC_AF2 (PI8) depending on the value of TAMP1INSEL bit in - RTC_TAFCR register. You can use the RTC_TamperPinSelection() function to - select the corresponding pin. - - *** Tamper configuration *** - ============================ - [..] - (+) Enable the RTC Tamper using the RTC_TamperCmd() function. - (+) Configure the Tamper filter count using RTC_TamperFilterConfig() - function. - (+) Configure the RTC Tamper trigger Edge or Level according to the Tamper - filter (if equal to 0 Edge else Level) value using the RTC_TamperConfig() - function. - (+) Configure the Tamper sampling frequency using RTC_TamperSamplingFreqConfig() - function. - (+) Configure the Tamper precharge or discharge duration using - RTC_TamperPinsPrechargeDuration() function. - (+) Enable the Tamper Pull-UP using RTC_TamperPullUpDisableCmd() function. - (+) Enable the Time stamp on Tamper detection event using - TC_TSOnTamperDetecCmd() function. - (+) The TIMESTAMP alternate function can be mapped to either RTC_AF1 - or RTC_AF2 depending on the value of the TSINSEL bit in the RTC_TAFCR - register. You can use the RTC_TimeStampPinSelection() function to select - the corresponding pin. - - *** Backup Data Registers configuration *** - =========================================== - [..] - (+) To write to the RTC Backup Data registers, use the RTC_WriteBackupRegister() - function. - (+) To read the RTC Backup Data registers, use the RTC_ReadBackupRegister() - function. - - - ##### RTC and low power modes ##### - =================================================================== - [..] The MCU can be woken up from a low power mode by an RTC alternate - function. - [..] The RTC alternate functions are the RTC alarms (Alarm A and Alarm B), - RTC wakeup, RTC tamper event detection and RTC time stamp event detection. - These RTC alternate functions can wake up the system from the Stop and - Standby lowpower modes. - [..] The system can also wake up from low power modes without depending - on an external interrupt (Auto-wakeup mode), by using the RTC alarm - or the RTC wakeup events. - [..] The RTC provides a programmable time base for waking up from the - Stop or Standby mode at regular intervals. - Wakeup from STOP and Standby modes is possible only when the RTC clock source - is LSE or LSI. - - - ##### Selection of RTC_AF1 alternate functions ##### - =================================================================== - [..] The RTC_AF1 pin (PC13) can be used for the following purposes: - (+) AFO_ALARM output - (+) AFO_CALIB output - (+) AFI_TAMPER - (+) AFI_TIMESTAMP - - [..] - +-------------------------------------------------------------------------------------------------------------+ - | Pin |AFO_ALARM |AFO_CALIB |AFI_TAMPER |AFI_TIMESTAMP | TAMP1INSEL | TSINSEL |ALARMOUTTYPE | - | configuration | ENABLED | ENABLED | ENABLED | ENABLED |TAMPER1 pin |TIMESTAMP pin | AFO_ALARM | - | and function | | | | | selection | selection |Configuration | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | Alarm out | | | | | Don't | Don't | | - | output OD | 1 |Don't care|Don't care | Don't care | care | care | 0 | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | Alarm out | | | | | Don't | Don't | | - | output PP | 1 |Don't care|Don't care | Don't care | care | care | 1 | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | Calibration out | | | | | Don't | Don't | | - | output PP | 0 | 1 |Don't care | Don't care | care | care | Don't care | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | TAMPER input | | | | | | Don't | | - | floating | 0 | 0 | 1 | 0 | 0 | care | Don't care | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | TIMESTAMP and | | | | | | | | - | TAMPER input | 0 | 0 | 1 | 1 | 0 | 0 | Don't care | - | floating | | | | | | | | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | TIMESTAMP input | | | | | Don't | | | - | floating | 0 | 0 | 0 | 1 | care | 0 | Don't care | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | Standard GPIO | 0 | 0 | 0 | 0 | Don't care | Don't care | Don't care | - +-------------------------------------------------------------------------------------------------------------+ - - - ##### Selection of RTC_AF2 alternate functions ##### - =================================================================== - [..] The RTC_AF2 pin (PI8) can be used for the following purposes: - (+) AFI_TAMPER - (+) AFI_TIMESTAMP - [..] - +---------------------------------------------------------------------------------------+ - | Pin |AFI_TAMPER |AFI_TIMESTAMP | TAMP1INSEL | TSINSEL |ALARMOUTTYPE | - | configuration | ENABLED | ENABLED |TAMPER1 pin |TIMESTAMP pin | AFO_ALARM | - | and function | | | selection | selection |Configuration | - |-----------------|-----------|--------------|------------|--------------|--------------| - | TAMPER input | | | | Don't | | - | floating | 1 | 0 | 1 | care | Don't care | - |-----------------|-----------|--------------|------------|--------------|--------------| - | TIMESTAMP and | | | | | | - | TAMPER input | 1 | 1 | 1 | 1 | Don't care | - | floating | | | | | | - |-----------------|-----------|--------------|------------|--------------|--------------| - | TIMESTAMP input | | | Don't | | | - | floating | 0 | 1 | care | 1 | Don't care | - |-----------------|-----------|--------------|------------|--------------|--------------| - | Standard GPIO | 0 | 0 | Don't care | Don't care | Don't care | - +---------------------------------------------------------------------------------------+ - - -@endverbatim - - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_rtc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup RTC - * @brief RTC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* Masks Definition */ -#define RTC_TR_RESERVED_MASK ((uint32_t)0x007F7F7F) -#define RTC_DR_RESERVED_MASK ((uint32_t)0x00FFFF3F) -#define RTC_INIT_MASK ((uint32_t)0xFFFFFFFF) -#define RTC_RSF_MASK ((uint32_t)0xFFFFFF5F) -#define RTC_FLAGS_MASK ((uint32_t)(RTC_FLAG_TSOVF | RTC_FLAG_TSF | RTC_FLAG_WUTF | \ - RTC_FLAG_ALRBF | RTC_FLAG_ALRAF | RTC_FLAG_INITF | \ - RTC_FLAG_RSF | RTC_FLAG_INITS | RTC_FLAG_WUTWF | \ - RTC_FLAG_ALRBWF | RTC_FLAG_ALRAWF | RTC_FLAG_TAMP1F | \ - RTC_FLAG_RECALPF | RTC_FLAG_SHPF)) - -#define INITMODE_TIMEOUT ((uint32_t) 0x00010000) -#define SYNCHRO_TIMEOUT ((uint32_t) 0x00020000) -#define RECALPF_TIMEOUT ((uint32_t) 0x00020000) -#define SHPF_TIMEOUT ((uint32_t) 0x00001000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -static uint8_t RTC_ByteToBcd2(uint8_t Value); -static uint8_t RTC_Bcd2ToByte(uint8_t Value); - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup RTC_Private_Functions - * @{ - */ - -/** @defgroup RTC_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to initialize and configure the RTC - Prescaler (Synchronous and Asynchronous), RTC Hour format, disable RTC registers - Write protection, enter and exit the RTC initialization mode, RTC registers - synchronization check and reference clock detection enable. - - (#) The RTC Prescaler is programmed to generate the RTC 1Hz time base. It is - split into 2 programmable prescalers to minimize power consumption. - (++) A 7-bit asynchronous prescaler and A 13-bit synchronous prescaler. - (++) When both prescalers are used, it is recommended to configure the - asynchronous prescaler to a high value to minimize consumption. - - (#) All RTC registers are Write protected. Writing to the RTC registers - is enabled by writing a key into the Write Protection register, RTC_WPR. - - (#) To Configure the RTC Calendar, user application should enter initialization - mode. In this mode, the calendar counter is stopped and its value can be - updated. When the initialization sequence is complete, the calendar restarts - counting after 4 RTCCLK cycles. - - (#) To read the calendar through the shadow registers after Calendar initialization, - calendar update or after wakeup from low power modes the software must first - clear the RSF flag. The software must then wait until it is set again before - reading the calendar, which means that the calendar registers have been - correctly copied into the RTC_TR and RTC_DR shadow registers. - The RTC_WaitForSynchro() function implements the above software sequence - (RSF clear and RSF check). - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the RTC registers to their default reset values. - * @note This function doesn't reset the RTC Clock source and RTC Backup Data - * registers. - * @param None - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC registers are deinitialized - * - ERROR: RTC registers are not deinitialized - */ -ErrorStatus RTC_DeInit(void) -{ - __IO uint32_t wutcounter = 0x00; - uint32_t wutwfstatus = 0x00; - ErrorStatus status = ERROR; - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Reset TR, DR and CR registers */ - RTC->TR = (uint32_t)0x00000000; - RTC->DR = (uint32_t)0x00002101; - /* Reset All CR bits except CR[2:0] */ - RTC->CR &= (uint32_t)0x00000007; - - /* Wait till RTC WUTWF flag is set and if Time out is reached exit */ - do - { - wutwfstatus = RTC->ISR & RTC_ISR_WUTWF; - wutcounter++; - } while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00)); - - if ((RTC->ISR & RTC_ISR_WUTWF) == RESET) - { - status = ERROR; - } - else - { - /* Reset all RTC CR register bits */ - RTC->CR &= (uint32_t)0x00000000; - RTC->WUTR = (uint32_t)0x0000FFFF; - RTC->PRER = (uint32_t)0x007F00FF; - RTC->CALIBR = (uint32_t)0x00000000; - RTC->ALRMAR = (uint32_t)0x00000000; - RTC->ALRMBR = (uint32_t)0x00000000; - RTC->SHIFTR = (uint32_t)0x00000000; - RTC->CALR = (uint32_t)0x00000000; - RTC->ALRMASSR = (uint32_t)0x00000000; - RTC->ALRMBSSR = (uint32_t)0x00000000; - - /* Reset ISR register and exit initialization mode */ - RTC->ISR = (uint32_t)0x00000000; - - /* Reset Tamper and alternate functions configuration register */ - RTC->TAFCR = 0x00000000; - - if(RTC_WaitForSynchro() == ERROR) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Initializes the RTC registers according to the specified parameters - * in RTC_InitStruct. - * @param RTC_InitStruct: pointer to a RTC_InitTypeDef structure that contains - * the configuration information for the RTC peripheral. - * @note The RTC Prescaler register is write protected and can be written in - * initialization mode only. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC registers are initialized - * - ERROR: RTC registers are not initialized - */ -ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct) -{ - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_HOUR_FORMAT(RTC_InitStruct->RTC_HourFormat)); - assert_param(IS_RTC_ASYNCH_PREDIV(RTC_InitStruct->RTC_AsynchPrediv)); - assert_param(IS_RTC_SYNCH_PREDIV(RTC_InitStruct->RTC_SynchPrediv)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Clear RTC CR FMT Bit */ - RTC->CR &= ((uint32_t)~(RTC_CR_FMT)); - /* Set RTC_CR register */ - RTC->CR |= ((uint32_t)(RTC_InitStruct->RTC_HourFormat)); - - /* Configure the RTC PRER */ - RTC->PRER = (uint32_t)(RTC_InitStruct->RTC_SynchPrediv); - RTC->PRER |= (uint32_t)(RTC_InitStruct->RTC_AsynchPrediv << 16); - - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - status = SUCCESS; - } - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Fills each RTC_InitStruct member with its default value. - * @param RTC_InitStruct: pointer to a RTC_InitTypeDef structure which will be - * initialized. - * @retval None - */ -void RTC_StructInit(RTC_InitTypeDef* RTC_InitStruct) -{ - /* Initialize the RTC_HourFormat member */ - RTC_InitStruct->RTC_HourFormat = RTC_HourFormat_24; - - /* Initialize the RTC_AsynchPrediv member */ - RTC_InitStruct->RTC_AsynchPrediv = (uint32_t)0x7F; - - /* Initialize the RTC_SynchPrediv member */ - RTC_InitStruct->RTC_SynchPrediv = (uint32_t)0xFF; -} - -/** - * @brief Enables or disables the RTC registers write protection. - * @note All the RTC registers are write protected except for RTC_ISR[13:8], - * RTC_TAFCR and RTC_BKPxR. - * @note Writing a wrong key reactivates the write protection. - * @note The protection mechanism is not affected by system reset. - * @param NewState: new state of the write protection. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_WriteProtectionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - } - else - { - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - } -} - -/** - * @brief Enters the RTC Initialization mode. - * @note The RTC Initialization mode is write protected, use the - * RTC_WriteProtectionCmd(DISABLE) before calling this function. - * @param None - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC is in Init mode - * - ERROR: RTC is not in Init mode - */ -ErrorStatus RTC_EnterInitMode(void) -{ - __IO uint32_t initcounter = 0x00; - ErrorStatus status = ERROR; - uint32_t initstatus = 0x00; - - /* Check if the Initialization mode is set */ - if ((RTC->ISR & RTC_ISR_INITF) == (uint32_t)RESET) - { - /* Set the Initialization mode */ - RTC->ISR = (uint32_t)RTC_INIT_MASK; - - /* Wait till RTC is in INIT state and if Time out is reached exit */ - do - { - initstatus = RTC->ISR & RTC_ISR_INITF; - initcounter++; - } while((initcounter != INITMODE_TIMEOUT) && (initstatus == 0x00)); - - if ((RTC->ISR & RTC_ISR_INITF) != RESET) - { - status = SUCCESS; - } - else - { - status = ERROR; - } - } - else - { - status = SUCCESS; - } - - return (status); -} - -/** - * @brief Exits the RTC Initialization mode. - * @note When the initialization sequence is complete, the calendar restarts - * counting after 4 RTCCLK cycles. - * @note The RTC Initialization mode is write protected, use the - * RTC_WriteProtectionCmd(DISABLE) before calling this function. - * @param None - * @retval None - */ -void RTC_ExitInitMode(void) -{ - /* Exit Initialization mode */ - RTC->ISR &= (uint32_t)~RTC_ISR_INIT; -} - -/** - * @brief Waits until the RTC Time and Date registers (RTC_TR and RTC_DR) are - * synchronized with RTC APB clock. - * @note The RTC Resynchronization mode is write protected, use the - * RTC_WriteProtectionCmd(DISABLE) before calling this function. - * @note To read the calendar through the shadow registers after Calendar - * initialization, calendar update or after wakeup from low power modes - * the software must first clear the RSF flag. - * The software must then wait until it is set again before reading - * the calendar, which means that the calendar registers have been - * correctly copied into the RTC_TR and RTC_DR shadow registers. - * @param None - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC registers are synchronised - * - ERROR: RTC registers are not synchronised - */ -ErrorStatus RTC_WaitForSynchro(void) -{ - __IO uint32_t synchrocounter = 0; - ErrorStatus status = ERROR; - uint32_t synchrostatus = 0x00; - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Clear RSF flag */ - RTC->ISR &= (uint32_t)RTC_RSF_MASK; - - /* Wait the registers to be synchronised */ - do - { - synchrostatus = RTC->ISR & RTC_ISR_RSF; - synchrocounter++; - } while((synchrocounter != SYNCHRO_TIMEOUT) && (synchrostatus == 0x00)); - - if ((RTC->ISR & RTC_ISR_RSF) != RESET) - { - status = SUCCESS; - } - else - { - status = ERROR; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return (status); -} - -/** - * @brief Enables or disables the RTC reference clock detection. - * @param NewState: new state of the RTC reference clock. - * This parameter can be: ENABLE or DISABLE. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC reference clock detection is enabled - * - ERROR: RTC reference clock detection is disabled - */ -ErrorStatus RTC_RefClockCmd(FunctionalState NewState) -{ - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - if (NewState != DISABLE) - { - /* Enable the RTC reference clock detection */ - RTC->CR |= RTC_CR_REFCKON; - } - else - { - /* Disable the RTC reference clock detection */ - RTC->CR &= ~RTC_CR_REFCKON; - } - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - status = SUCCESS; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Enables or Disables the Bypass Shadow feature. - * @note When the Bypass Shadow is enabled the calendar value are taken - * directly from the Calendar counter. - * @param NewState: new state of the Bypass Shadow feature. - * This parameter can be: ENABLE or DISABLE. - * @retval None -*/ -void RTC_BypassShadowCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - if (NewState != DISABLE) - { - /* Set the BYPSHAD bit */ - RTC->CR |= (uint8_t)RTC_CR_BYPSHAD; - } - else - { - /* Reset the BYPSHAD bit */ - RTC->CR &= (uint8_t)~RTC_CR_BYPSHAD; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @} - */ - -/** @defgroup RTC_Group2 Time and Date configuration functions - * @brief Time and Date configuration functions - * -@verbatim - =============================================================================== - ##### Time and Date configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to program and read the RTC Calendar - (Time and Date). - -@endverbatim - * @{ - */ - -/** - * @brief Set the RTC current time. - * @param RTC_Format: specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that contains - * the time configuration information for the RTC. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Time register is configured - * - ERROR: RTC Time register is not configured - */ -ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct) -{ - uint32_t tmpreg = 0; - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - if (RTC_Format == RTC_Format_BIN) - { - if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) - { - assert_param(IS_RTC_HOUR12(RTC_TimeStruct->RTC_Hours)); - assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12)); - } - else - { - RTC_TimeStruct->RTC_H12 = 0x00; - assert_param(IS_RTC_HOUR24(RTC_TimeStruct->RTC_Hours)); - } - assert_param(IS_RTC_MINUTES(RTC_TimeStruct->RTC_Minutes)); - assert_param(IS_RTC_SECONDS(RTC_TimeStruct->RTC_Seconds)); - } - else - { - if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) - { - tmpreg = RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours); - assert_param(IS_RTC_HOUR12(tmpreg)); - assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12)); - } - else - { - RTC_TimeStruct->RTC_H12 = 0x00; - assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours))); - } - assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes))); - assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds))); - } - - /* Check the input parameters format */ - if (RTC_Format != RTC_Format_BIN) - { - tmpreg = (((uint32_t)(RTC_TimeStruct->RTC_Hours) << 16) | \ - ((uint32_t)(RTC_TimeStruct->RTC_Minutes) << 8) | \ - ((uint32_t)RTC_TimeStruct->RTC_Seconds) | \ - ((uint32_t)(RTC_TimeStruct->RTC_H12) << 16)); - } - else - { - tmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Hours) << 16) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Minutes) << 8) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Seconds)) | \ - (((uint32_t)RTC_TimeStruct->RTC_H12) << 16)); - } - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Set the RTC_TR register */ - RTC->TR = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK); - - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */ - if ((RTC->CR & RTC_CR_BYPSHAD) == RESET) - { - if(RTC_WaitForSynchro() == ERROR) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - else - { - status = SUCCESS; - } - } - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Fills each RTC_TimeStruct member with its default value - * (Time = 00h:00min:00sec). - * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure which will be - * initialized. - * @retval None - */ -void RTC_TimeStructInit(RTC_TimeTypeDef* RTC_TimeStruct) -{ - /* Time = 00h:00min:00sec */ - RTC_TimeStruct->RTC_H12 = RTC_H12_AM; - RTC_TimeStruct->RTC_Hours = 0; - RTC_TimeStruct->RTC_Minutes = 0; - RTC_TimeStruct->RTC_Seconds = 0; -} - -/** - * @brief Get the RTC current Time. - * @param RTC_Format: specifies the format of the returned parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that will - * contain the returned current time configuration. - * @retval None - */ -void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - /* Get the RTC_TR register */ - tmpreg = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK); - - /* Fill the structure fields with the read parameters */ - RTC_TimeStruct->RTC_Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16); - RTC_TimeStruct->RTC_Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8); - RTC_TimeStruct->RTC_Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU)); - RTC_TimeStruct->RTC_H12 = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16); - - /* Check the input parameters format */ - if (RTC_Format == RTC_Format_BIN) - { - /* Convert the structure parameters to Binary format */ - RTC_TimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours); - RTC_TimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes); - RTC_TimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds); - } -} - -/** - * @brief Gets the RTC current Calendar Sub seconds value. - * @note This function freeze the Time and Date registers after reading the - * SSR register. - * @param None - * @retval RTC current Calendar Sub seconds value. - */ -uint32_t RTC_GetSubSecond(void) -{ - uint32_t tmpreg = 0; - - /* Get sub seconds values from the correspondent registers*/ - tmpreg = (uint32_t)(RTC->SSR); - - /* Read DR register to unfroze calendar registers */ - (void) (RTC->DR); - - return (tmpreg); -} - -/** - * @brief Set the RTC current date. - * @param RTC_Format: specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that contains - * the date configuration information for the RTC. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Date register is configured - * - ERROR: RTC Date register is not configured - */ -ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct) -{ - uint32_t tmpreg = 0; - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - if ((RTC_Format == RTC_Format_BIN) && ((RTC_DateStruct->RTC_Month & 0x10) == 0x10)) - { - RTC_DateStruct->RTC_Month = (RTC_DateStruct->RTC_Month & (uint32_t)~(0x10)) + 0x0A; - } - if (RTC_Format == RTC_Format_BIN) - { - assert_param(IS_RTC_YEAR(RTC_DateStruct->RTC_Year)); - assert_param(IS_RTC_MONTH(RTC_DateStruct->RTC_Month)); - assert_param(IS_RTC_DATE(RTC_DateStruct->RTC_Date)); - } - else - { - assert_param(IS_RTC_YEAR(RTC_Bcd2ToByte(RTC_DateStruct->RTC_Year))); - tmpreg = RTC_Bcd2ToByte(RTC_DateStruct->RTC_Month); - assert_param(IS_RTC_MONTH(tmpreg)); - tmpreg = RTC_Bcd2ToByte(RTC_DateStruct->RTC_Date); - assert_param(IS_RTC_DATE(tmpreg)); - } - assert_param(IS_RTC_WEEKDAY(RTC_DateStruct->RTC_WeekDay)); - - /* Check the input parameters format */ - if (RTC_Format != RTC_Format_BIN) - { - tmpreg = ((((uint32_t)RTC_DateStruct->RTC_Year) << 16) | \ - (((uint32_t)RTC_DateStruct->RTC_Month) << 8) | \ - ((uint32_t)RTC_DateStruct->RTC_Date) | \ - (((uint32_t)RTC_DateStruct->RTC_WeekDay) << 13)); - } - else - { - tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Year) << 16) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Month) << 8) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Date)) | \ - ((uint32_t)RTC_DateStruct->RTC_WeekDay << 13)); - } - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Set the RTC_DR register */ - RTC->DR = (uint32_t)(tmpreg & RTC_DR_RESERVED_MASK); - - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */ - if ((RTC->CR & RTC_CR_BYPSHAD) == RESET) - { - if(RTC_WaitForSynchro() == ERROR) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - else - { - status = SUCCESS; - } - } - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Fills each RTC_DateStruct member with its default value - * (Monday, January 01 xx00). - * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure which will be - * initialized. - * @retval None - */ -void RTC_DateStructInit(RTC_DateTypeDef* RTC_DateStruct) -{ - /* Monday, January 01 xx00 */ - RTC_DateStruct->RTC_WeekDay = RTC_Weekday_Monday; - RTC_DateStruct->RTC_Date = 1; - RTC_DateStruct->RTC_Month = RTC_Month_January; - RTC_DateStruct->RTC_Year = 0; -} - -/** - * @brief Get the RTC current date. - * @param RTC_Format: specifies the format of the returned parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that will - * contain the returned current date configuration. - * @retval None - */ -void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - /* Get the RTC_TR register */ - tmpreg = (uint32_t)(RTC->DR & RTC_DR_RESERVED_MASK); - - /* Fill the structure fields with the read parameters */ - RTC_DateStruct->RTC_Year = (uint8_t)((tmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16); - RTC_DateStruct->RTC_Month = (uint8_t)((tmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8); - RTC_DateStruct->RTC_Date = (uint8_t)(tmpreg & (RTC_DR_DT | RTC_DR_DU)); - RTC_DateStruct->RTC_WeekDay = (uint8_t)((tmpreg & (RTC_DR_WDU)) >> 13); - - /* Check the input parameters format */ - if (RTC_Format == RTC_Format_BIN) - { - /* Convert the structure parameters to Binary format */ - RTC_DateStruct->RTC_Year = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Year); - RTC_DateStruct->RTC_Month = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Month); - RTC_DateStruct->RTC_Date = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Date); - } -} - -/** - * @} - */ - -/** @defgroup RTC_Group3 Alarms configuration functions - * @brief Alarms (Alarm A and Alarm B) configuration functions - * -@verbatim - =============================================================================== - ##### Alarms A and B configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to program and read the RTC Alarms. - -@endverbatim - * @{ - */ - -/** - * @brief Set the specified RTC Alarm. - * @note The Alarm register can only be written when the corresponding Alarm - * is disabled (Use the RTC_AlarmCmd(DISABLE)). - * @param RTC_Format: specifies the format of the returned parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_Alarm: specifies the alarm to be configured. - * This parameter can be one of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that - * contains the alarm configuration parameters. - * @retval None - */ -void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - assert_param(IS_RTC_ALARM(RTC_Alarm)); - assert_param(IS_ALARM_MASK(RTC_AlarmStruct->RTC_AlarmMask)); - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_SEL(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel)); - - if (RTC_Format == RTC_Format_BIN) - { - if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) - { - assert_param(IS_RTC_HOUR12(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours)); - assert_param(IS_RTC_H12(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12)); - } - else - { - RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = 0x00; - assert_param(IS_RTC_HOUR24(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours)); - } - assert_param(IS_RTC_MINUTES(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes)); - assert_param(IS_RTC_SECONDS(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds)); - - if(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel == RTC_AlarmDateWeekDaySel_Date) - { - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(RTC_AlarmStruct->RTC_AlarmDateWeekDay)); - } - else - { - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(RTC_AlarmStruct->RTC_AlarmDateWeekDay)); - } - } - else - { - if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) - { - tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours); - assert_param(IS_RTC_HOUR12(tmpreg)); - assert_param(IS_RTC_H12(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12)); - } - else - { - RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = 0x00; - assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours))); - } - - assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes))); - assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds))); - - if(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel == RTC_AlarmDateWeekDaySel_Date) - { - tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay); - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(tmpreg)); - } - else - { - tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay); - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(tmpreg)); - } - } - - /* Check the input parameters format */ - if (RTC_Format != RTC_Format_BIN) - { - tmpreg = (((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours) << 16) | \ - ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes) << 8) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds) | \ - ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12) << 16) | \ - ((uint32_t)(RTC_AlarmStruct->RTC_AlarmDateWeekDay) << 24) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmDateWeekDaySel) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmMask)); - } - else - { - tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours) << 16) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes) << 8) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds)) | \ - ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12) << 16) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmDateWeekDay) << 24) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmDateWeekDaySel) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmMask)); - } - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Alarm register */ - if (RTC_Alarm == RTC_Alarm_A) - { - RTC->ALRMAR = (uint32_t)tmpreg; - } - else - { - RTC->ALRMBR = (uint32_t)tmpreg; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Fills each RTC_AlarmStruct member with its default value - * (Time = 00h:00mn:00sec / Date = 1st day of the month/Mask = - * all fields are masked). - * @param RTC_AlarmStruct: pointer to a @ref RTC_AlarmTypeDef structure which - * will be initialized. - * @retval None - */ -void RTC_AlarmStructInit(RTC_AlarmTypeDef* RTC_AlarmStruct) -{ - /* Alarm Time Settings : Time = 00h:00mn:00sec */ - RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = RTC_H12_AM; - RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = 0; - RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = 0; - RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = 0; - - /* Alarm Date Settings : Date = 1st day of the month */ - RTC_AlarmStruct->RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; - RTC_AlarmStruct->RTC_AlarmDateWeekDay = 1; - - /* Alarm Masks Settings : Mask = all fields are not masked */ - RTC_AlarmStruct->RTC_AlarmMask = RTC_AlarmMask_None; -} - -/** - * @brief Get the RTC Alarm value and masks. - * @param RTC_Format: specifies the format of the output parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_Alarm: specifies the alarm to be read. - * This parameter can be one of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that will - * contains the output alarm configuration values. - * @retval None - */ -void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - assert_param(IS_RTC_ALARM(RTC_Alarm)); - - /* Get the RTC_ALRMxR register */ - if (RTC_Alarm == RTC_Alarm_A) - { - tmpreg = (uint32_t)(RTC->ALRMAR); - } - else - { - tmpreg = (uint32_t)(RTC->ALRMBR); - } - - /* Fill the structure with the read parameters */ - RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = (uint32_t)((tmpreg & (RTC_ALRMAR_HT | \ - RTC_ALRMAR_HU)) >> 16); - RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = (uint32_t)((tmpreg & (RTC_ALRMAR_MNT | \ - RTC_ALRMAR_MNU)) >> 8); - RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = (uint32_t)(tmpreg & (RTC_ALRMAR_ST | \ - RTC_ALRMAR_SU)); - RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = (uint32_t)((tmpreg & RTC_ALRMAR_PM) >> 16); - RTC_AlarmStruct->RTC_AlarmDateWeekDay = (uint32_t)((tmpreg & (RTC_ALRMAR_DT | RTC_ALRMAR_DU)) >> 24); - RTC_AlarmStruct->RTC_AlarmDateWeekDaySel = (uint32_t)(tmpreg & RTC_ALRMAR_WDSEL); - RTC_AlarmStruct->RTC_AlarmMask = (uint32_t)(tmpreg & RTC_AlarmMask_All); - - if (RTC_Format == RTC_Format_BIN) - { - RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = RTC_Bcd2ToByte(RTC_AlarmStruct-> \ - RTC_AlarmTime.RTC_Hours); - RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = RTC_Bcd2ToByte(RTC_AlarmStruct-> \ - RTC_AlarmTime.RTC_Minutes); - RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = RTC_Bcd2ToByte(RTC_AlarmStruct-> \ - RTC_AlarmTime.RTC_Seconds); - RTC_AlarmStruct->RTC_AlarmDateWeekDay = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay); - } -} - -/** - * @brief Enables or disables the specified RTC Alarm. - * @param RTC_Alarm: specifies the alarm to be configured. - * This parameter can be any combination of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param NewState: new state of the specified alarm. - * This parameter can be: ENABLE or DISABLE. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Alarm is enabled/disabled - * - ERROR: RTC Alarm is not enabled/disabled - */ -ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm, FunctionalState NewState) -{ - __IO uint32_t alarmcounter = 0x00; - uint32_t alarmstatus = 0x00; - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_CMD_ALARM(RTC_Alarm)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Alarm state */ - if (NewState != DISABLE) - { - RTC->CR |= (uint32_t)RTC_Alarm; - - status = SUCCESS; - } - else - { - /* Disable the Alarm in RTC_CR register */ - RTC->CR &= (uint32_t)~RTC_Alarm; - - /* Wait till RTC ALRxWF flag is set and if Time out is reached exit */ - do - { - alarmstatus = RTC->ISR & (RTC_Alarm >> 8); - alarmcounter++; - } while((alarmcounter != INITMODE_TIMEOUT) && (alarmstatus == 0x00)); - - if ((RTC->ISR & (RTC_Alarm >> 8)) == RESET) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Configure the RTC AlarmA/B Sub seconds value and mask.* - * @note This function is performed only when the Alarm is disabled. - * @param RTC_Alarm: specifies the alarm to be configured. - * This parameter can be one of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param RTC_AlarmSubSecondValue: specifies the Sub seconds value. - * This parameter can be a value from 0 to 0x00007FFF. - * @param RTC_AlarmSubSecondMask: specifies the Sub seconds Mask. - * This parameter can be any combination of the following values: - * @arg RTC_AlarmSubSecondMask_All : All Alarm SS fields are masked. - * There is no comparison on sub seconds for Alarm. - * @arg RTC_AlarmSubSecondMask_SS14_1 : SS[14:1] are don't care in Alarm comparison. - * Only SS[0] is compared - * @arg RTC_AlarmSubSecondMask_SS14_2 : SS[14:2] are don't care in Alarm comparison. - * Only SS[1:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_3 : SS[14:3] are don't care in Alarm comparison. - * Only SS[2:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_4 : SS[14:4] are don't care in Alarm comparison. - * Only SS[3:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_5 : SS[14:5] are don't care in Alarm comparison. - * Only SS[4:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_6 : SS[14:6] are don't care in Alarm comparison. - * Only SS[5:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_7 : SS[14:7] are don't care in Alarm comparison. - * Only SS[6:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_8 : SS[14:8] are don't care in Alarm comparison. - * Only SS[7:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_9 : SS[14:9] are don't care in Alarm comparison. - * Only SS[8:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_10: SS[14:10] are don't care in Alarm comparison. - * Only SS[9:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_11: SS[14:11] are don't care in Alarm comparison. - * Only SS[10:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_12: SS[14:12] are don't care in Alarm comparison. - * Only SS[11:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_13: SS[14:13] are don't care in Alarm comparison. - * Only SS[12:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14 : SS[14] is don't care in Alarm comparison. - * Only SS[13:0] are compared - * @arg RTC_AlarmSubSecondMask_None : SS[14:0] are compared and must match - * to activate alarm - * @retval None - */ -void RTC_AlarmSubSecondConfig(uint32_t RTC_Alarm, uint32_t RTC_AlarmSubSecondValue, uint32_t RTC_AlarmSubSecondMask) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_ALARM(RTC_Alarm)); - assert_param(IS_RTC_ALARM_SUB_SECOND_VALUE(RTC_AlarmSubSecondValue)); - assert_param(IS_RTC_ALARM_SUB_SECOND_MASK(RTC_AlarmSubSecondMask)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Alarm A or Alarm B Sub Second registers */ - tmpreg = (uint32_t) (uint32_t)(RTC_AlarmSubSecondValue) | (uint32_t)(RTC_AlarmSubSecondMask); - - if (RTC_Alarm == RTC_Alarm_A) - { - /* Configure the Alarm A Sub Second register */ - RTC->ALRMASSR = tmpreg; - } - else - { - /* Configure the Alarm B Sub Second register */ - RTC->ALRMBSSR = tmpreg; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - -} - -/** - * @brief Gets the RTC Alarm Sub seconds value. - * @param RTC_Alarm: specifies the alarm to be read. - * This parameter can be one of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param None - * @retval RTC Alarm Sub seconds value. - */ -uint32_t RTC_GetAlarmSubSecond(uint32_t RTC_Alarm) -{ - uint32_t tmpreg = 0; - - /* Get the RTC_ALRMxR register */ - if (RTC_Alarm == RTC_Alarm_A) - { - tmpreg = (uint32_t)((RTC->ALRMASSR) & RTC_ALRMASSR_SS); - } - else - { - tmpreg = (uint32_t)((RTC->ALRMBSSR) & RTC_ALRMBSSR_SS); - } - - return (tmpreg); -} - -/** - * @} - */ - -/** @defgroup RTC_Group4 WakeUp Timer configuration functions - * @brief WakeUp Timer configuration functions - * -@verbatim - =============================================================================== - ##### WakeUp Timer configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to program and read the RTC WakeUp. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the RTC Wakeup clock source. - * @note The WakeUp Clock source can only be changed when the RTC WakeUp - * is disabled (Use the RTC_WakeUpCmd(DISABLE)). - * @param RTC_WakeUpClock: Wakeup Clock source. - * This parameter can be one of the following values: - * @arg RTC_WakeUpClock_RTCCLK_Div16: RTC Wakeup Counter Clock = RTCCLK/16 - * @arg RTC_WakeUpClock_RTCCLK_Div8: RTC Wakeup Counter Clock = RTCCLK/8 - * @arg RTC_WakeUpClock_RTCCLK_Div4: RTC Wakeup Counter Clock = RTCCLK/4 - * @arg RTC_WakeUpClock_RTCCLK_Div2: RTC Wakeup Counter Clock = RTCCLK/2 - * @arg RTC_WakeUpClock_CK_SPRE_16bits: RTC Wakeup Counter Clock = CK_SPRE - * @arg RTC_WakeUpClock_CK_SPRE_17bits: RTC Wakeup Counter Clock = CK_SPRE - * @retval None - */ -void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock) -{ - /* Check the parameters */ - assert_param(IS_RTC_WAKEUP_CLOCK(RTC_WakeUpClock)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Clear the Wakeup Timer clock source bits in CR register */ - RTC->CR &= (uint32_t)~RTC_CR_WUCKSEL; - - /* Configure the clock source */ - RTC->CR |= (uint32_t)RTC_WakeUpClock; - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Configures the RTC Wakeup counter. - * @note The RTC WakeUp counter can only be written when the RTC WakeUp - * is disabled (Use the RTC_WakeUpCmd(DISABLE)). - * @param RTC_WakeUpCounter: specifies the WakeUp counter. - * This parameter can be a value from 0x0000 to 0xFFFF. - * @retval None - */ -void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter) -{ - /* Check the parameters */ - assert_param(IS_RTC_WAKEUP_COUNTER(RTC_WakeUpCounter)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Wakeup Timer counter */ - RTC->WUTR = (uint32_t)RTC_WakeUpCounter; - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Returns the RTC WakeUp timer counter value. - * @param None - * @retval The RTC WakeUp Counter value. - */ -uint32_t RTC_GetWakeUpCounter(void) -{ - /* Get the counter value */ - return ((uint32_t)(RTC->WUTR & RTC_WUTR_WUT)); -} - -/** - * @brief Enables or Disables the RTC WakeUp timer. - * @param NewState: new state of the WakeUp timer. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -ErrorStatus RTC_WakeUpCmd(FunctionalState NewState) -{ - __IO uint32_t wutcounter = 0x00; - uint32_t wutwfstatus = 0x00; - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - if (NewState != DISABLE) - { - /* Enable the Wakeup Timer */ - RTC->CR |= (uint32_t)RTC_CR_WUTE; - status = SUCCESS; - } - else - { - /* Disable the Wakeup Timer */ - RTC->CR &= (uint32_t)~RTC_CR_WUTE; - /* Wait till RTC WUTWF flag is set and if Time out is reached exit */ - do - { - wutwfstatus = RTC->ISR & RTC_ISR_WUTWF; - wutcounter++; - } while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00)); - - if ((RTC->ISR & RTC_ISR_WUTWF) == RESET) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @} - */ - -/** @defgroup RTC_Group5 Daylight Saving configuration functions - * @brief Daylight Saving configuration functions - * -@verbatim - =============================================================================== - ##### Daylight Saving configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to configure the RTC DayLight Saving. - -@endverbatim - * @{ - */ - -/** - * @brief Adds or substract one hour from the current time. - * @param RTC_DayLightSaveOperation: the value of hour adjustment. - * This parameter can be one of the following values: - * @arg RTC_DayLightSaving_SUB1H: Substract one hour (winter time) - * @arg RTC_DayLightSaving_ADD1H: Add one hour (summer time) - * @param RTC_StoreOperation: Specifies the value to be written in the BCK bit - * in CR register to store the operation. - * This parameter can be one of the following values: - * @arg RTC_StoreOperation_Reset: BCK Bit Reset - * @arg RTC_StoreOperation_Set: BCK Bit Set - * @retval None - */ -void RTC_DayLightSavingConfig(uint32_t RTC_DayLightSaving, uint32_t RTC_StoreOperation) -{ - /* Check the parameters */ - assert_param(IS_RTC_DAYLIGHT_SAVING(RTC_DayLightSaving)); - assert_param(IS_RTC_STORE_OPERATION(RTC_StoreOperation)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Clear the bits to be configured */ - RTC->CR &= (uint32_t)~(RTC_CR_BCK); - - /* Configure the RTC_CR register */ - RTC->CR |= (uint32_t)(RTC_DayLightSaving | RTC_StoreOperation); - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Returns the RTC Day Light Saving stored operation. - * @param None - * @retval RTC Day Light Saving stored operation. - * - RTC_StoreOperation_Reset - * - RTC_StoreOperation_Set - */ -uint32_t RTC_GetStoreOperation(void) -{ - return (RTC->CR & RTC_CR_BCK); -} - -/** - * @} - */ - -/** @defgroup RTC_Group6 Output pin Configuration function - * @brief Output pin Configuration function - * -@verbatim - =============================================================================== - ##### Output pin Configuration function ##### - =============================================================================== - - [..] This section provide functions allowing to configure the RTC Output source. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the RTC output source (AFO_ALARM). - * @param RTC_Output: Specifies which signal will be routed to the RTC output. - * This parameter can be one of the following values: - * @arg RTC_Output_Disable: No output selected - * @arg RTC_Output_AlarmA: signal of AlarmA mapped to output - * @arg RTC_Output_AlarmB: signal of AlarmB mapped to output - * @arg RTC_Output_WakeUp: signal of WakeUp mapped to output - * @param RTC_OutputPolarity: Specifies the polarity of the output signal. - * This parameter can be one of the following: - * @arg RTC_OutputPolarity_High: The output pin is high when the - * ALRAF/ALRBF/WUTF is high (depending on OSEL) - * @arg RTC_OutputPolarity_Low: The output pin is low when the - * ALRAF/ALRBF/WUTF is high (depending on OSEL) - * @retval None - */ -void RTC_OutputConfig(uint32_t RTC_Output, uint32_t RTC_OutputPolarity) -{ - /* Check the parameters */ - assert_param(IS_RTC_OUTPUT(RTC_Output)); - assert_param(IS_RTC_OUTPUT_POL(RTC_OutputPolarity)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Clear the bits to be configured */ - RTC->CR &= (uint32_t)~(RTC_CR_OSEL | RTC_CR_POL); - - /* Configure the output selection and polarity */ - RTC->CR |= (uint32_t)(RTC_Output | RTC_OutputPolarity); - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @} - */ - -/** @defgroup RTC_Group7 Digital Calibration configuration functions - * @brief Coarse Calibration configuration functions - * -@verbatim - =============================================================================== - ##### Digital Calibration configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the Coarse calibration parameters. - * @param RTC_CalibSign: specifies the sign of the coarse calibration value. - * This parameter can be one of the following values: - * @arg RTC_CalibSign_Positive: The value sign is positive - * @arg RTC_CalibSign_Negative: The value sign is negative - * @param Value: value of coarse calibration expressed in ppm (coded on 5 bits). - * - * @note This Calibration value should be between 0 and 63 when using negative - * sign with a 2-ppm step. - * - * @note This Calibration value should be between 0 and 126 when using positive - * sign with a 4-ppm step. - * - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Coarse calibration are initialized - * - ERROR: RTC Coarse calibration are not initialized - */ -ErrorStatus RTC_CoarseCalibConfig(uint32_t RTC_CalibSign, uint32_t Value) -{ - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_CALIB_SIGN(RTC_CalibSign)); - assert_param(IS_RTC_CALIB_VALUE(Value)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Set the coarse calibration value */ - RTC->CALIBR = (uint32_t)(RTC_CalibSign | Value); - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - status = SUCCESS; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Enables or disables the Coarse calibration process. - * @param NewState: new state of the Coarse calibration. - * This parameter can be: ENABLE or DISABLE. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Coarse calibration are enabled/disabled - * - ERROR: RTC Coarse calibration are not enabled/disabled - */ -ErrorStatus RTC_CoarseCalibCmd(FunctionalState NewState) -{ - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - if (NewState != DISABLE) - { - /* Enable the Coarse Calibration */ - RTC->CR |= (uint32_t)RTC_CR_DCE; - } - else - { - /* Disable the Coarse Calibration */ - RTC->CR &= (uint32_t)~RTC_CR_DCE; - } - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - status = SUCCESS; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Enables or disables the RTC clock to be output through the relative pin. - * @param NewState: new state of the digital calibration Output. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_CalibOutputCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - if (NewState != DISABLE) - { - /* Enable the RTC clock output */ - RTC->CR |= (uint32_t)RTC_CR_COE; - } - else - { - /* Disable the RTC clock output */ - RTC->CR &= (uint32_t)~RTC_CR_COE; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Configure the Calibration Pinout (RTC_CALIB) Selection (1Hz or 512Hz). - * @param RTC_CalibOutput : Select the Calibration output Selection . - * This parameter can be one of the following values: - * @arg RTC_CalibOutput_512Hz: A signal has a regular waveform at 512Hz. - * @arg RTC_CalibOutput_1Hz : A signal has a regular waveform at 1Hz. - * @retval None -*/ -void RTC_CalibOutputConfig(uint32_t RTC_CalibOutput) -{ - /* Check the parameters */ - assert_param(IS_RTC_CALIB_OUTPUT(RTC_CalibOutput)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /*clear flags before configuration */ - RTC->CR &= (uint32_t)~(RTC_CR_COSEL); - - /* Configure the RTC_CR register */ - RTC->CR |= (uint32_t)RTC_CalibOutput; - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Configures the Smooth Calibration Settings. - * @param RTC_SmoothCalibPeriod : Select the Smooth Calibration Period. - * This parameter can be can be one of the following values: - * @arg RTC_SmoothCalibPeriod_32sec : The smooth calibration period is 32s. - * @arg RTC_SmoothCalibPeriod_16sec : The smooth calibration period is 16s. - * @arg RTC_SmoothCalibPeriod_8sec : The smooth calibartion period is 8s. - * @param RTC_SmoothCalibPlusPulses : Select to Set or reset the CALP bit. - * This parameter can be one of the following values: - * @arg RTC_SmoothCalibPlusPulses_Set : Add one RTCCLK puls every 2**11 pulses. - * @arg RTC_SmoothCalibPlusPulses_Reset: No RTCCLK pulses are added. - * @param RTC_SmouthCalibMinusPulsesValue: Select the value of CALM[8:0] bits. - * This parameter can be one any value from 0 to 0x000001FF. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Calib registers are configured - * - ERROR: RTC Calib registers are not configured -*/ -ErrorStatus RTC_SmoothCalibConfig(uint32_t RTC_SmoothCalibPeriod, - uint32_t RTC_SmoothCalibPlusPulses, - uint32_t RTC_SmouthCalibMinusPulsesValue) -{ - ErrorStatus status = ERROR; - uint32_t recalpfcount = 0; - - /* Check the parameters */ - assert_param(IS_RTC_SMOOTH_CALIB_PERIOD(RTC_SmoothCalibPeriod)); - assert_param(IS_RTC_SMOOTH_CALIB_PLUS(RTC_SmoothCalibPlusPulses)); - assert_param(IS_RTC_SMOOTH_CALIB_MINUS(RTC_SmouthCalibMinusPulsesValue)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* check if a calibration is pending*/ - if ((RTC->ISR & RTC_ISR_RECALPF) != RESET) - { - /* wait until the Calibration is completed*/ - while (((RTC->ISR & RTC_ISR_RECALPF) != RESET) && (recalpfcount != RECALPF_TIMEOUT)) - { - recalpfcount++; - } - } - - /* check if the calibration pending is completed or if there is no calibration operation at all*/ - if ((RTC->ISR & RTC_ISR_RECALPF) == RESET) - { - /* Configure the Smooth calibration settings */ - RTC->CALR = (uint32_t)((uint32_t)RTC_SmoothCalibPeriod | (uint32_t)RTC_SmoothCalibPlusPulses | (uint32_t)RTC_SmouthCalibMinusPulsesValue); - - status = SUCCESS; - } - else - { - status = ERROR; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return (ErrorStatus)(status); -} - -/** - * @} - */ - - -/** @defgroup RTC_Group8 TimeStamp configuration functions - * @brief TimeStamp configuration functions - * -@verbatim - =============================================================================== - ##### TimeStamp configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or Disables the RTC TimeStamp functionality with the - * specified time stamp pin stimulating edge. - * @param RTC_TimeStampEdge: Specifies the pin edge on which the TimeStamp is - * activated. - * This parameter can be one of the following: - * @arg RTC_TimeStampEdge_Rising: the Time stamp event occurs on the rising - * edge of the related pin. - * @arg RTC_TimeStampEdge_Falling: the Time stamp event occurs on the - * falling edge of the related pin. - * @param NewState: new state of the TimeStamp. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_TimeStampCmd(uint32_t RTC_TimeStampEdge, FunctionalState NewState) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_TIMESTAMP_EDGE(RTC_TimeStampEdge)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Get the RTC_CR register and clear the bits to be configured */ - tmpreg = (uint32_t)(RTC->CR & (uint32_t)~(RTC_CR_TSEDGE | RTC_CR_TSE)); - - /* Get the new configuration */ - if (NewState != DISABLE) - { - tmpreg |= (uint32_t)(RTC_TimeStampEdge | RTC_CR_TSE); - } - else - { - tmpreg |= (uint32_t)(RTC_TimeStampEdge); - } - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Time Stamp TSEDGE and Enable bits */ - RTC->CR = (uint32_t)tmpreg; - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Get the RTC TimeStamp value and masks. - * @param RTC_Format: specifies the format of the output parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_StampTimeStruct: pointer to a RTC_TimeTypeDef structure that will - * contains the TimeStamp time values. - * @param RTC_StampDateStruct: pointer to a RTC_DateTypeDef structure that will - * contains the TimeStamp date values. - * @retval None - */ -void RTC_GetTimeStamp(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_StampTimeStruct, - RTC_DateTypeDef* RTC_StampDateStruct) -{ - uint32_t tmptime = 0, tmpdate = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - /* Get the TimeStamp time and date registers values */ - tmptime = (uint32_t)(RTC->TSTR & RTC_TR_RESERVED_MASK); - tmpdate = (uint32_t)(RTC->TSDR & RTC_DR_RESERVED_MASK); - - /* Fill the Time structure fields with the read parameters */ - RTC_StampTimeStruct->RTC_Hours = (uint8_t)((tmptime & (RTC_TR_HT | RTC_TR_HU)) >> 16); - RTC_StampTimeStruct->RTC_Minutes = (uint8_t)((tmptime & (RTC_TR_MNT | RTC_TR_MNU)) >> 8); - RTC_StampTimeStruct->RTC_Seconds = (uint8_t)(tmptime & (RTC_TR_ST | RTC_TR_SU)); - RTC_StampTimeStruct->RTC_H12 = (uint8_t)((tmptime & (RTC_TR_PM)) >> 16); - - /* Fill the Date structure fields with the read parameters */ - RTC_StampDateStruct->RTC_Year = 0; - RTC_StampDateStruct->RTC_Month = (uint8_t)((tmpdate & (RTC_DR_MT | RTC_DR_MU)) >> 8); - RTC_StampDateStruct->RTC_Date = (uint8_t)(tmpdate & (RTC_DR_DT | RTC_DR_DU)); - RTC_StampDateStruct->RTC_WeekDay = (uint8_t)((tmpdate & (RTC_DR_WDU)) >> 13); - - /* Check the input parameters format */ - if (RTC_Format == RTC_Format_BIN) - { - /* Convert the Time structure parameters to Binary format */ - RTC_StampTimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Hours); - RTC_StampTimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Minutes); - RTC_StampTimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Seconds); - - /* Convert the Date structure parameters to Binary format */ - RTC_StampDateStruct->RTC_Month = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_Month); - RTC_StampDateStruct->RTC_Date = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_Date); - RTC_StampDateStruct->RTC_WeekDay = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_WeekDay); - } -} - -/** - * @brief Get the RTC timestamp Sub seconds value. - * @param None - * @retval RTC current timestamp Sub seconds value. - */ -uint32_t RTC_GetTimeStampSubSecond(void) -{ - /* Get timestamp sub seconds values from the correspondent registers */ - return (uint32_t)(RTC->TSSSR); -} - -/** - * @} - */ - -/** @defgroup RTC_Group9 Tampers configuration functions - * @brief Tampers configuration functions - * -@verbatim - =============================================================================== - ##### Tampers configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the select Tamper pin edge. - * @param RTC_Tamper: Selected tamper pin. - * This parameter can be RTC_Tamper_1. - * @param RTC_TamperTrigger: Specifies the trigger on the tamper pin that - * stimulates tamper event. - * This parameter can be one of the following values: - * @arg RTC_TamperTrigger_RisingEdge: Rising Edge of the tamper pin causes tamper event. - * @arg RTC_TamperTrigger_FallingEdge: Falling Edge of the tamper pin causes tamper event. - * @arg RTC_TamperTrigger_LowLevel: Low Level of the tamper pin causes tamper event. - * @arg RTC_TamperTrigger_HighLevel: High Level of the tamper pin causes tamper event. - * @retval None - */ -void RTC_TamperTriggerConfig(uint32_t RTC_Tamper, uint32_t RTC_TamperTrigger) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER(RTC_Tamper)); - assert_param(IS_RTC_TAMPER_TRIGGER(RTC_TamperTrigger)); - - if (RTC_TamperTrigger == RTC_TamperTrigger_RisingEdge) - { - /* Configure the RTC_TAFCR register */ - RTC->TAFCR &= (uint32_t)((uint32_t)~(RTC_Tamper << 1)); - } - else - { - /* Configure the RTC_TAFCR register */ - RTC->TAFCR |= (uint32_t)(RTC_Tamper << 1); - } -} - -/** - * @brief Enables or Disables the Tamper detection. - * @param RTC_Tamper: Selected tamper pin. - * This parameter can be RTC_Tamper_1. - * @param NewState: new state of the tamper pin. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_TamperCmd(uint32_t RTC_Tamper, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER(RTC_Tamper)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected Tamper pin */ - RTC->TAFCR |= (uint32_t)RTC_Tamper; - } - else - { - /* Disable the selected Tamper pin */ - RTC->TAFCR &= (uint32_t)~RTC_Tamper; - } -} - -/** - * @brief Configures the Tampers Filter. - * @param RTC_TamperFilter: Specifies the tampers filter. - * This parameter can be one of the following values: - * @arg RTC_TamperFilter_Disable: Tamper filter is disabled. - * @arg RTC_TamperFilter_2Sample: Tamper is activated after 2 consecutive - * samples at the active level - * @arg RTC_TamperFilter_4Sample: Tamper is activated after 4 consecutive - * samples at the active level - * @arg RTC_TamperFilter_8Sample: Tamper is activated after 8 consecutive - * samples at the active level - * @retval None - */ -void RTC_TamperFilterConfig(uint32_t RTC_TamperFilter) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER_FILTER(RTC_TamperFilter)); - - /* Clear TAMPFLT[1:0] bits in the RTC_TAFCR register */ - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPFLT); - - /* Configure the RTC_TAFCR register */ - RTC->TAFCR |= (uint32_t)RTC_TamperFilter; -} - -/** - * @brief Configures the Tampers Sampling Frequency. - * @param RTC_TamperSamplingFreq: Specifies the tampers Sampling Frequency. - * This parameter can be one of the following values: - * @arg RTC_TamperSamplingFreq_RTCCLK_Div32768: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 32768 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div16384: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 16384 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div8192: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 8192 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div4096: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 4096 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div2048: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 2048 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div1024: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 1024 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div512: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 512 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div256: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 256 - * @retval None - */ -void RTC_TamperSamplingFreqConfig(uint32_t RTC_TamperSamplingFreq) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER_SAMPLING_FREQ(RTC_TamperSamplingFreq)); - - /* Clear TAMPFREQ[2:0] bits in the RTC_TAFCR register */ - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPFREQ); - - /* Configure the RTC_TAFCR register */ - RTC->TAFCR |= (uint32_t)RTC_TamperSamplingFreq; -} - -/** - * @brief Configures the Tampers Pins input Precharge Duration. - * @param RTC_TamperPrechargeDuration: Specifies the Tampers Pins input - * Precharge Duration. - * This parameter can be one of the following values: - * @arg RTC_TamperPrechargeDuration_1RTCCLK: Tamper pins are precharged before sampling during 1 RTCCLK cycle - * @arg RTC_TamperPrechargeDuration_2RTCCLK: Tamper pins are precharged before sampling during 2 RTCCLK cycle - * @arg RTC_TamperPrechargeDuration_4RTCCLK: Tamper pins are precharged before sampling during 4 RTCCLK cycle - * @arg RTC_TamperPrechargeDuration_8RTCCLK: Tamper pins are precharged before sampling during 8 RTCCLK cycle - * @retval None - */ -void RTC_TamperPinsPrechargeDuration(uint32_t RTC_TamperPrechargeDuration) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER_PRECHARGE_DURATION(RTC_TamperPrechargeDuration)); - - /* Clear TAMPPRCH[1:0] bits in the RTC_TAFCR register */ - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPPRCH); - - /* Configure the RTC_TAFCR register */ - RTC->TAFCR |= (uint32_t)RTC_TamperPrechargeDuration; -} - -/** - * @brief Enables or Disables the TimeStamp on Tamper Detection Event. - * @note The timestamp is valid even the TSE bit in tamper control register - * is reset. - * @param NewState: new state of the timestamp on tamper event. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_TimeStampOnTamperDetectionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Save timestamp on tamper detection event */ - RTC->TAFCR |= (uint32_t)RTC_TAFCR_TAMPTS; - } - else - { - /* Tamper detection does not cause a timestamp to be saved */ - RTC->TAFCR &= (uint32_t)~RTC_TAFCR_TAMPTS; - } -} - -/** - * @brief Enables or Disables the Precharge of Tamper pin. - * @param NewState: new state of tamper pull up. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_TamperPullUpCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable precharge of the selected Tamper pin */ - RTC->TAFCR &= (uint32_t)~RTC_TAFCR_TAMPPUDIS; - } - else - { - /* Disable precharge of the selected Tamper pin */ - RTC->TAFCR |= (uint32_t)RTC_TAFCR_TAMPPUDIS; - } -} - -/** - * @} - */ - -/** @defgroup RTC_Group10 Backup Data Registers configuration functions - * @brief Backup Data Registers configuration functions - * -@verbatim - =============================================================================== - ##### Backup Data Registers configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Writes a data in a specified RTC Backup data register. - * @param RTC_BKP_DR: RTC Backup data Register number. - * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to - * specify the register. - * @param Data: Data to be written in the specified RTC Backup data register. - * @retval None - */ -void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data) -{ - __IO uint32_t tmp = 0; - - /* Check the parameters */ - assert_param(IS_RTC_BKP(RTC_BKP_DR)); - - tmp = RTC_BASE + 0x50; - tmp += (RTC_BKP_DR * 4); - - /* Write the specified register */ - *(__IO uint32_t *)tmp = (uint32_t)Data; -} - -/** - * @brief Reads data from the specified RTC Backup data Register. - * @param RTC_BKP_DR: RTC Backup data Register number. - * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to - * specify the register. - * @retval None - */ -uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR) -{ - __IO uint32_t tmp = 0; - - /* Check the parameters */ - assert_param(IS_RTC_BKP(RTC_BKP_DR)); - - tmp = RTC_BASE + 0x50; - tmp += (RTC_BKP_DR * 4); - - /* Read the specified register */ - return (*(__IO uint32_t *)tmp); -} - -/** - * @} - */ - -/** @defgroup RTC_Group11 RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration functions - * @brief RTC Tamper and TimeStamp Pins Selection and Output Type Config - * configuration functions - * -@verbatim - ================================================================================================== - ##### RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration functions ##### - ================================================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Selects the RTC Tamper Pin. - * @param RTC_TamperPin: specifies the RTC Tamper Pin. - * This parameter can be one of the following values: - * @arg RTC_TamperPin_PC13: PC13 is selected as RTC Tamper Pin. - * @arg RTC_TamperPin_PI8: PI8 is selected as RTC Tamper Pin. - * @retval None - */ -void RTC_TamperPinSelection(uint32_t RTC_TamperPin) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER_PIN(RTC_TamperPin)); - - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPINSEL); - RTC->TAFCR |= (uint32_t)(RTC_TamperPin); -} - -/** - * @brief Selects the RTC TimeStamp Pin. - * @param RTC_TimeStampPin: specifies the RTC TimeStamp Pin. - * This parameter can be one of the following values: - * @arg RTC_TimeStampPin_PC13: PC13 is selected as RTC TimeStamp Pin. - * @arg RTC_TimeStampPin_PI8: PI8 is selected as RTC TimeStamp Pin. - * @retval None - */ -void RTC_TimeStampPinSelection(uint32_t RTC_TimeStampPin) -{ - /* Check the parameters */ - assert_param(IS_RTC_TIMESTAMP_PIN(RTC_TimeStampPin)); - - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TSINSEL); - RTC->TAFCR |= (uint32_t)(RTC_TimeStampPin); -} - -/** - * @brief Configures the RTC Output Pin mode. - * @param RTC_OutputType: specifies the RTC Output (PC13) pin mode. - * This parameter can be one of the following values: - * @arg RTC_OutputType_OpenDrain: RTC Output (PC13) is configured in - * Open Drain mode. - * @arg RTC_OutputType_PushPull: RTC Output (PC13) is configured in - * Push Pull mode. - * @retval None - */ -void RTC_OutputTypeConfig(uint32_t RTC_OutputType) -{ - /* Check the parameters */ - assert_param(IS_RTC_OUTPUT_TYPE(RTC_OutputType)); - - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_ALARMOUTTYPE); - RTC->TAFCR |= (uint32_t)(RTC_OutputType); -} - -/** - * @} - */ - -/** @defgroup RTC_Group12 Shift control synchronisation functions - * @brief Shift control synchronisation functions - * -@verbatim - =============================================================================== - ##### Shift control synchronisation functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the Synchronization Shift Control Settings. - * @note When REFCKON is set, firmware must not write to Shift control register - * @param RTC_ShiftAdd1S : Select to add or not 1 second to the time Calendar. - * This parameter can be one of the following values : - * @arg RTC_ShiftAdd1S_Set : Add one second to the clock calendar. - * @arg RTC_ShiftAdd1S_Reset: No effect. - * @param RTC_ShiftSubFS: Select the number of Second Fractions to Substitute. - * This parameter can be one any value from 0 to 0x7FFF. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Shift registers are configured - * - ERROR: RTC Shift registers are not configured -*/ -ErrorStatus RTC_SynchroShiftConfig(uint32_t RTC_ShiftAdd1S, uint32_t RTC_ShiftSubFS) -{ - ErrorStatus status = ERROR; - uint32_t shpfcount = 0; - - /* Check the parameters */ - assert_param(IS_RTC_SHIFT_ADD1S(RTC_ShiftAdd1S)); - assert_param(IS_RTC_SHIFT_SUBFS(RTC_ShiftSubFS)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Check if a Shift is pending*/ - if ((RTC->ISR & RTC_ISR_SHPF) != RESET) - { - /* Wait until the shift is completed*/ - while (((RTC->ISR & RTC_ISR_SHPF) != RESET) && (shpfcount != SHPF_TIMEOUT)) - { - shpfcount++; - } - } - - /* Check if the Shift pending is completed or if there is no Shift operation at all*/ - if ((RTC->ISR & RTC_ISR_SHPF) == RESET) - { - /* check if the reference clock detection is disabled */ - if((RTC->CR & RTC_CR_REFCKON) == RESET) - { - /* Configure the Shift settings */ - RTC->SHIFTR = (uint32_t)(uint32_t)(RTC_ShiftSubFS) | (uint32_t)(RTC_ShiftAdd1S); - - if(RTC_WaitForSynchro() == ERROR) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - else - { - status = ERROR; - } - } - else - { - status = ERROR; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return (ErrorStatus)(status); -} - -/** - * @} - */ - -/** @defgroup RTC_Group13 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - [..] All RTC interrupts are connected to the EXTI controller. - - (+) To enable the RTC Alarm interrupt, the following sequence is required: - (++) Configure and enable the EXTI Line 17 in interrupt mode and select - the rising edge sensitivity using the EXTI_Init() function. - (++) Configure and enable the RTC_Alarm IRQ channel in the NVIC using the - NVIC_Init() function. - (++) Configure the RTC to generate RTC alarms (Alarm A and/or Alarm B) using - the RTC_SetAlarm() and RTC_AlarmCmd() functions. - - (+) To enable the RTC Wakeup interrupt, the following sequence is required: - (++) Configure and enable the EXTI Line 22 in interrupt mode and select the - rising edge sensitivity using the EXTI_Init() function. - (++) Configure and enable the RTC_WKUP IRQ channel in the NVIC using the - NVIC_Init() function. - (++) Configure the RTC to generate the RTC wakeup timer event using the - RTC_WakeUpClockConfig(), RTC_SetWakeUpCounter() and RTC_WakeUpCmd() - functions. - - (+) To enable the RTC Tamper interrupt, the following sequence is required: - (++) Configure and enable the EXTI Line 21 in interrupt mode and select - the rising edge sensitivity using the EXTI_Init() function. - (++) Configure and enable the TAMP_STAMP IRQ channel in the NVIC using the - NVIC_Init() function. - (++) Configure the RTC to detect the RTC tamper event using the - RTC_TamperTriggerConfig() and RTC_TamperCmd() functions. - - (+) To enable the RTC TimeStamp interrupt, the following sequence is required: - (++) Configure and enable the EXTI Line 21 in interrupt mode and select the - rising edge sensitivity using the EXTI_Init() function. - (++) Configure and enable the TAMP_STAMP IRQ channel in the NVIC using the - NVIC_Init() function. - (++) Configure the RTC to detect the RTC time stamp event using the - RTC_TimeStampCmd() functions. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified RTC interrupts. - * @param RTC_IT: specifies the RTC interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg RTC_IT_TS: Time Stamp interrupt mask - * @arg RTC_IT_WUT: WakeUp Timer interrupt mask - * @arg RTC_IT_ALRB: Alarm B interrupt mask - * @arg RTC_IT_ALRA: Alarm A interrupt mask - * @arg RTC_IT_TAMP: Tamper event interrupt mask - * @param NewState: new state of the specified RTC interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RTC_CONFIG_IT(RTC_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - if (NewState != DISABLE) - { - /* Configure the Interrupts in the RTC_CR register */ - RTC->CR |= (uint32_t)(RTC_IT & ~RTC_TAFCR_TAMPIE); - /* Configure the Tamper Interrupt in the RTC_TAFCR */ - RTC->TAFCR |= (uint32_t)(RTC_IT & RTC_TAFCR_TAMPIE); - } - else - { - /* Configure the Interrupts in the RTC_CR register */ - RTC->CR &= (uint32_t)~(RTC_IT & (uint32_t)~RTC_TAFCR_TAMPIE); - /* Configure the Tamper Interrupt in the RTC_TAFCR */ - RTC->TAFCR &= (uint32_t)~(RTC_IT & RTC_TAFCR_TAMPIE); - } - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Checks whether the specified RTC flag is set or not. - * @param RTC_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg RTC_FLAG_RECALPF: RECALPF event flag. - * @arg RTC_FLAG_TAMP1F: Tamper 1 event flag - * @arg RTC_FLAG_TSOVF: Time Stamp OverFlow flag - * @arg RTC_FLAG_TSF: Time Stamp event flag - * @arg RTC_FLAG_WUTF: WakeUp Timer flag - * @arg RTC_FLAG_ALRBF: Alarm B flag - * @arg RTC_FLAG_ALRAF: Alarm A flag - * @arg RTC_FLAG_INITF: Initialization mode flag - * @arg RTC_FLAG_RSF: Registers Synchronized flag - * @arg RTC_FLAG_INITS: Registers Configured flag - * @arg RTC_FLAG_SHPF: Shift operation pending flag. - * @arg RTC_FLAG_WUTWF: WakeUp Timer Write flag - * @arg RTC_FLAG_ALRBWF: Alarm B Write flag - * @arg RTC_FLAG_ALRAWF: Alarm A write flag - * @retval The new state of RTC_FLAG (SET or RESET). - */ -FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG) -{ - FlagStatus bitstatus = RESET; - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_GET_FLAG(RTC_FLAG)); - - /* Get all the flags */ - tmpreg = (uint32_t)(RTC->ISR & RTC_FLAGS_MASK); - - /* Return the status of the flag */ - if ((tmpreg & RTC_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the RTC's pending flags. - * @param RTC_FLAG: specifies the RTC flag to clear. - * This parameter can be any combination of the following values: - * @arg RTC_FLAG_TAMP1F: Tamper 1 event flag - * @arg RTC_FLAG_TSOVF: Time Stamp Overflow flag - * @arg RTC_FLAG_TSF: Time Stamp event flag - * @arg RTC_FLAG_WUTF: WakeUp Timer flag - * @arg RTC_FLAG_ALRBF: Alarm B flag - * @arg RTC_FLAG_ALRAF: Alarm A flag - * @arg RTC_FLAG_RSF: Registers Synchronized flag - * @retval None - */ -void RTC_ClearFlag(uint32_t RTC_FLAG) -{ - /* Check the parameters */ - assert_param(IS_RTC_CLEAR_FLAG(RTC_FLAG)); - - /* Clear the Flags in the RTC_ISR register */ - RTC->ISR = (uint32_t)((uint32_t)(~((RTC_FLAG | RTC_ISR_INIT)& 0x0000FFFF) | (uint32_t)(RTC->ISR & RTC_ISR_INIT))); -} - -/** - * @brief Checks whether the specified RTC interrupt has occurred or not. - * @param RTC_IT: specifies the RTC interrupt source to check. - * This parameter can be one of the following values: - * @arg RTC_IT_TS: Time Stamp interrupt - * @arg RTC_IT_WUT: WakeUp Timer interrupt - * @arg RTC_IT_ALRB: Alarm B interrupt - * @arg RTC_IT_ALRA: Alarm A interrupt - * @arg RTC_IT_TAMP1: Tamper 1 event interrupt - * @retval The new state of RTC_IT (SET or RESET). - */ -ITStatus RTC_GetITStatus(uint32_t RTC_IT) -{ - ITStatus bitstatus = RESET; - uint32_t tmpreg = 0, enablestatus = 0; - - /* Check the parameters */ - assert_param(IS_RTC_GET_IT(RTC_IT)); - - /* Get the TAMPER Interrupt enable bit and pending bit */ - tmpreg = (uint32_t)(RTC->TAFCR & (RTC_TAFCR_TAMPIE)); - - /* Get the Interrupt enable Status */ - enablestatus = (uint32_t)((RTC->CR & RTC_IT) | (tmpreg & (RTC_IT >> 15))); - - /* Get the Interrupt pending bit */ - tmpreg = (uint32_t)((RTC->ISR & (uint32_t)(RTC_IT >> 4))); - - /* Get the status of the Interrupt */ - if ((enablestatus != (uint32_t)RESET) && ((tmpreg & 0x0000FFFF) != (uint32_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the RTC's interrupt pending bits. - * @param RTC_IT: specifies the RTC interrupt pending bit to clear. - * This parameter can be any combination of the following values: - * @arg RTC_IT_TS: Time Stamp interrupt - * @arg RTC_IT_WUT: WakeUp Timer interrupt - * @arg RTC_IT_ALRB: Alarm B interrupt - * @arg RTC_IT_ALRA: Alarm A interrupt - * @arg RTC_IT_TAMP1: Tamper 1 event interrupt - * @retval None - */ -void RTC_ClearITPendingBit(uint32_t RTC_IT) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_CLEAR_IT(RTC_IT)); - - /* Get the RTC_ISR Interrupt pending bits mask */ - tmpreg = (uint32_t)(RTC_IT >> 4); - - /* Clear the interrupt pending bits in the RTC_ISR register */ - RTC->ISR = (uint32_t)((uint32_t)(~((tmpreg | RTC_ISR_INIT)& 0x0000FFFF) | (uint32_t)(RTC->ISR & RTC_ISR_INIT))); -} - -/** - * @} - */ - -/** - * @brief Converts a 2 digit decimal to BCD format. - * @param Value: Byte to be converted. - * @retval Converted byte - */ -static uint8_t RTC_ByteToBcd2(uint8_t Value) -{ - uint8_t bcdhigh = 0; - - while (Value >= 10) - { - bcdhigh++; - Value -= 10; - } - - return ((uint8_t)(bcdhigh << 4) | Value); -} - -/** - * @brief Convert from 2 digit BCD to Binary. - * @param Value: BCD value to be converted. - * @retval Converted word - */ -static uint8_t RTC_Bcd2ToByte(uint8_t Value) -{ - uint8_t tmp = 0; - tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10; - return (tmp + (Value & (uint8_t)0x0F)); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c deleted file mode 100644 index ed1e3e51..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c +++ /dev/null @@ -1,1011 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_sdio.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Secure digital input/output interface (SDIO) - * peripheral: - * + Initialization and Configuration - * + Command path state machine (CPSM) management - * + Data path state machine (DPSM) management - * + SDIO IO Cards mode management - * + CE-ATA mode management - * + DMA transfers management - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) The SDIO clock (SDIOCLK = 48 MHz) is coming from a specific output of PLL - (PLL48CLK). Before to start working with SDIO peripheral make sure that the - PLL is well configured. - The SDIO peripheral uses two clock signals: - (++) SDIO adapter clock (SDIOCLK = 48 MHz) - (++) APB2 bus clock (PCLK2) - - -@@- PCLK2 and SDIO_CK clock frequencies must respect the following condition: - Frequency(PCLK2) >= (3 / 8 x Frequency(SDIO_CK)) - - (#) Enable peripheral clock using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE). - - (#) According to the SDIO mode, enable the GPIO clocks using - RCC_AHB1PeriphClockCmd() function. - The I/O can be one of the following configurations: - (++) 1-bit data length: SDIO_CMD, SDIO_CK and D0. - (++) 4-bit data length: SDIO_CMD, SDIO_CK and D[3:0]. - (++) 8-bit data length: SDIO_CMD, SDIO_CK and D[7:0]. - - (#) Peripheral alternate function: - (++) Connect the pin to the desired peripherals' Alternate Function (AF) - using GPIO_PinAFConfig() function - (++) Configure the desired pin in alternate function by: - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF - (++) Select the type, pull-up/pull-down and output speed via GPIO_PuPd, - GPIO_OType and GPIO_Speed members - (++) Call GPIO_Init() function - - (#) Program the Clock Edge, Clock Bypass, Clock Power Save, Bus Wide, - hardware, flow control and the Clock Divider using the SDIO_Init() - function. - - (#) Enable the Power ON State using the SDIO_SetPowerState(SDIO_PowerState_ON) - function. - - (#) Enable the clock using the SDIO_ClockCmd() function. - - (#) Enable the NVIC and the corresponding interrupt using the function - SDIO_ITConfig() if you need to use interrupt mode. - - (#) When using the DMA mode - (++) Configure the DMA using DMA_Init() function - (++) Active the needed channel Request using SDIO_DMACmd() function - - (#) Enable the DMA using the DMA_Cmd() function, when using DMA mode. - - (#) To control the CPSM (Command Path State Machine) and send - commands to the card use the SDIO_SendCommand(), - SDIO_GetCommandResponse() and SDIO_GetResponse() functions. First, user has - to fill the command structure (pointer to SDIO_CmdInitTypeDef) according - to the selected command to be sent. - The parameters that should be filled are: - (++) Command Argument - (++) Command Index - (++) Command Response type - (++) Command Wait - (++) CPSM Status (Enable or Disable). - - -@@- To check if the command is well received, read the SDIO_CMDRESP - register using the SDIO_GetCommandResponse(). - The SDIO responses registers (SDIO_RESP1 to SDIO_RESP2), use the - SDIO_GetResponse() function. - - (#) To control the DPSM (Data Path State Machine) and send/receive - data to/from the card use the SDIO_DataConfig(), SDIO_GetDataCounter(), - SDIO_ReadData(), SDIO_WriteData() and SDIO_GetFIFOCount() functions. - - *** Read Operations *** - ======================= - [..] - (#) First, user has to fill the data structure (pointer to - SDIO_DataInitTypeDef) according to the selected data type to be received. - The parameters that should be filled are: - (++) Data TimeOut - (++) Data Length - (++) Data Block size - (++) Data Transfer direction: should be from card (To SDIO) - (++) Data Transfer mode - (++) DPSM Status (Enable or Disable) - - (#) Configure the SDIO resources to receive the data from the card - according to selected transfer mode (Refer to Step 8, 9 and 10). - - (#) Send the selected Read command (refer to step 11). - - (#) Use the SDIO flags/interrupts to check the transfer status. - - *** Write Operations *** - ======================== - [..] - (#) First, user has to fill the data structure (pointer to - SDIO_DataInitTypeDef) according to the selected data type to be received. - The parameters that should be filled are: - (++) Data TimeOut - (++) Data Length - (++) Data Block size - (++) Data Transfer direction: should be to card (To CARD) - (++) Data Transfer mode - (++) DPSM Status (Enable or Disable) - - (#) Configure the SDIO resources to send the data to the card according to - selected transfer mode (Refer to Step 8, 9 and 10). - - (#) Send the selected Write command (refer to step 11). - - (#) Use the SDIO flags/interrupts to check the transfer status. - - -@endverbatim - * - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_sdio.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup SDIO - * @brief SDIO driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* ------------ 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)) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup SDIO_Private_Functions - * @{ - */ - -/** @defgroup SDIO_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the SDIO peripheral registers to their default reset values. - * @param None - * @retval None - */ -void SDIO_DeInit(void) -{ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, DISABLE); -} - -/** - * @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: SDIO Power OFF - * @arg SDIO_PowerState_ON: SDIO Power ON - * @retval None - */ -void SDIO_SetPowerState(uint32_t SDIO_PowerState) -{ - /* Check the parameters */ - assert_param(IS_SDIO_POWER_STATE(SDIO_PowerState)); - - 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 values: - * - 0x00: Power OFF - * - 0x02: Power UP - * - 0x03: Power ON - */ -uint32_t SDIO_GetPowerState(void) -{ - return (SDIO->POWER & (~PWR_PWRCTRL_MASK)); -} - -/** - * @} - */ - -/** @defgroup SDIO_Group2 Command path state machine (CPSM) management functions - * @brief Command path state machine (CPSM) management functions - * -@verbatim - =============================================================================== - ##### Command path state machine (CPSM) management functions ##### - =============================================================================== - - This section provide functions allowing to program and read the Command path - state machine (CPSM). - -@endverbatim - * @{ - */ - -/** - * @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); -} - -/** - * @} - */ - -/** @defgroup SDIO_Group3 Data path state machine (DPSM) management functions - * @brief Data path state machine (DPSM) management functions - * -@verbatim - =============================================================================== - ##### Data path state machine (DPSM) management functions ##### - =============================================================================== - - This section provide functions allowing to program and read the Data path - state machine (DPSM). - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup SDIO_Group4 SDIO IO Cards mode management functions - * @brief SDIO IO Cards mode management functions - * -@verbatim - =============================================================================== - ##### SDIO IO Cards mode management functions ##### - =============================================================================== - - This section provide functions allowing to program and read the SDIO IO Cards. - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup SDIO_Group5 CE-ATA mode management functions - * @brief CE-ATA mode management functions - * -@verbatim - =============================================================================== - ##### CE-ATA mode management functions ##### - =============================================================================== - - This section provide functions allowing to program and read the CE-ATA card. - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup SDIO_Group6 DMA transfers management functions - * @brief DMA transfers management functions - * -@verbatim - =============================================================================== - ##### DMA transfers management functions ##### - =============================================================================== - - This section provide functions allowing to program SDIO DMA transfer. - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup SDIO_Group7 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - -@endverbatim - * @{ - */ - -/** - * @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 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, SDIO_DCOUNT, 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c deleted file mode 100644 index f0526c47..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c +++ /dev/null @@ -1,1312 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_spi.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Serial peripheral interface (SPI): - * + Initialization and Configuration - * + Data transfers functions - * + Hardware CRC Calculation - * + DMA transfers management - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable peripheral clock using the following functions - RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE) for SPI1 - RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE) for SPI2 - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI3 - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI4 - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI5 - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI6. - - (#) Enable SCK, MOSI, MISO and NSS GPIO clocks using RCC_AHB1PeriphClockCmd() - function. In I2S mode, if an external clock source is used then the I2S - CKIN pin GPIO clock should also be enabled. - - (#) Peripherals alternate function: - (++) Connect the pin to the desired peripherals' Alternate Function (AF) - using GPIO_PinAFConfig() function - (++) Configure the desired pin in alternate function by: - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF - (++) Select the type, pull-up/pull-down and output speed via GPIO_PuPd, - GPIO_OType and GPIO_Speed members - (++) Call GPIO_Init() function In I2S mode, if an external clock source is - used then the I2S CKIN pin should be also configured in Alternate - function Push-pull pull-up mode. - - (#) Program the Polarity, Phase, First Data, Baud Rate Prescaler, Slave - Management, Peripheral Mode and CRC Polynomial values using the SPI_Init() - function. - In I2S mode, program the Mode, Standard, Data Format, MCLK Output, Audio - frequency and Polarity using I2S_Init() function. For I2S mode, make sure - that either: - (++) I2S PLL is configured using the functions - RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S), RCC_PLLI2SCmd(ENABLE) and - RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY); or - (++) External clock source is configured using the function - RCC_I2SCLKConfig(RCC_I2S2CLKSource_Ext) and after setting correctly - the define constant I2S_EXTERNAL_CLOCK_VAL in the stm32f4xx_conf.h file. - - (#) Enable the NVIC and the corresponding interrupt using the function - SPI_ITConfig() if you need to use interrupt mode. - - (#) When using the DMA mode - (++) Configure the DMA using DMA_Init() function - (++) Active the needed channel Request using SPI_I2S_DMACmd() function - - (#) Enable the SPI using the SPI_Cmd() function or enable the I2S using - I2S_Cmd(). - - (#) Enable the DMA using the DMA_Cmd() function when using DMA mode. - - (#) Optionally, you can enable/configure the following parameters without - re-initialization (i.e there is no need to call again SPI_Init() function): - (++) When bidirectional mode (SPI_Direction_1Line_Rx or SPI_Direction_1Line_Tx) - is programmed as Data direction parameter using the SPI_Init() function - it can be possible to switch between SPI_Direction_Tx or SPI_Direction_Rx - using the SPI_BiDirectionalLineConfig() function. - (++) When SPI_NSS_Soft is selected as Slave Select Management parameter - using the SPI_Init() function it can be possible to manage the - NSS internal signal using the SPI_NSSInternalSoftwareConfig() function. - (++) Reconfigure the data size using the SPI_DataSizeConfig() function - (++) Enable or disable the SS output using the SPI_SSOutputCmd() function - - (#) To use the CRC Hardware calculation feature refer to the Peripheral - CRC hardware Calculation subsection. - - - [..] It is possible to use SPI in I2S full duplex mode, in this case, each SPI - peripheral is able to manage sending and receiving data simultaneously - using two data lines. Each SPI peripheral has an extended block called I2Sxext - (ie. I2S2ext for SPI2 and I2S3ext for SPI3). - The extension block is not a full SPI IP, it is used only as I2S slave to - implement full duplex mode. The extension block uses the same clock sources - as its master. - To configure I2S full duplex you have to: - - (#) Configure SPIx in I2S mode (I2S_Init() function) as described above. - - (#) Call the I2S_FullDuplexConfig() function using the same strucutre passed to - I2S_Init() function. - - (#) Call I2S_Cmd() for SPIx then for its extended block. - - (#) To configure interrupts or DMA requests and to get/clear flag status, - use I2Sxext instance for the extension block. - - [..] Functions that can be called with I2Sxext instances are: I2S_Cmd(), - I2S_FullDuplexConfig(), SPI_I2S_ReceiveData(), SPI_I2S_SendData(), - SPI_I2S_DMACmd(), SPI_I2S_ITConfig(), SPI_I2S_GetFlagStatus(), - SPI_I2S_ClearFlag(), SPI_I2S_GetITStatus() and SPI_I2S_ClearITPendingBit(). - - Example: To use SPI3 in Full duplex mode (SPI3 is Master Tx, I2S3ext is Slave Rx): - - RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); - I2S_StructInit(&I2SInitStruct); - I2SInitStruct.Mode = I2S_Mode_MasterTx; - I2S_Init(SPI3, &I2SInitStruct); - I2S_FullDuplexConfig(SPI3ext, &I2SInitStruct) - I2S_Cmd(SPI3, ENABLE); - I2S_Cmd(SPI3ext, ENABLE); - ... - while (SPI_I2S_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET) - {} - SPI_I2S_SendData(SPI3, txdata[i]); - ... - while (SPI_I2S_GetFlagStatus(I2S3ext, SPI_FLAG_RXNE) == RESET) - {} - rxdata[i] = SPI_I2S_ReceiveData(I2S3ext); - ... - - [..] - (@) In I2S mode: if an external clock is used as source clock for the I2S, - then the define I2S_EXTERNAL_CLOCK_VAL in file stm32f4xx_conf.h should - be enabled and set to the value of the source clock frequency (in Hz). - - (@) In SPI mode: To use the SPI TI mode, call the function SPI_TIModeCmd() - just after calling the function SPI_Init(). - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_spi.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup SPI - * @brief SPI driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* SPI registers Masks */ -#define CR1_CLEAR_MASK ((uint16_t)0x3040) -#define I2SCFGR_CLEAR_MASK ((uint16_t)0xF040) - -/* RCC PLLs masks */ -#define PLLCFGR_PPLR_MASK ((uint32_t)0x70000000) -#define PLLCFGR_PPLN_MASK ((uint32_t)0x00007FC0) - -#define SPI_CR2_FRF ((uint16_t)0x0010) -#define SPI_SR_TIFRFE ((uint16_t)0x0100) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup SPI_Private_Functions - * @{ - */ - -/** @defgroup SPI_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides a set of functions allowing to initialize the SPI - Direction, SPI Mode, SPI Data Size, SPI Polarity, SPI Phase, SPI NSS - Management, SPI Baud Rate Prescaler, SPI First Bit and SPI CRC Polynomial. - - [..] The SPI_Init() function follows the SPI configuration procedures for Master - mode and Slave mode (details for these procedures are available in reference - manual (RM0090)). - -@endverbatim - * @{ - */ - -/** - * @brief De-initialize the SPIx peripheral registers to their default reset values. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode. - * - * @note The extended I2S blocks (ie. I2S2ext and I2S3ext blocks) are de-initialized - * when the relative I2S peripheral is de-initialized (the extended block's clock - * is managed by the I2S peripheral clock). - * - * @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); - } - else if (SPIx == SPI4) - { - /* Enable SPI4 reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI4, ENABLE); - /* Release SPI4 from reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI4, DISABLE); - } - else if (SPIx == SPI5) - { - /* Enable SPI5 reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI5, ENABLE); - /* Release SPI5 from reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI5, DISABLE); - } - else - { - if (SPIx == SPI6) - { - /* Enable SPI6 reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI6, ENABLE); - /* Release SPI6 from reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI6, DISABLE); - } - } -} - -/** - * @brief Initializes the SPIx peripheral according to the specified - * parameters in the SPI_InitStruct. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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 &= (uint16_t)~((uint16_t)SPI_I2SCFGR_I2SMOD); -/*---------------------------- 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. - * - * @note if an external clock is used as source clock for the I2S, then the define - * I2S_EXTERNAL_CLOCK_VAL in file stm32f4xx_conf.h should be enabled and set - * to the value of the the source clock frequency (in Hz). - * - * @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, i2sclk = 0; -#ifndef I2S_EXTERNAL_CLOCK_VAL - uint32_t pllm = 0, plln = 0, pllr = 0; -#endif /* I2S_EXTERNAL_CLOCK_VAL */ - - /* 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 I2S source Clock frequency ****************************************/ - - /* If an external I2S clock has to be used, this define should be set - in the project configuration or in the stm32f4xx_conf.h file */ - #ifdef I2S_EXTERNAL_CLOCK_VAL - /* Set external clock as I2S clock source */ - if ((RCC->CFGR & RCC_CFGR_I2SSRC) == 0) - { - RCC->CFGR |= (uint32_t)RCC_CFGR_I2SSRC; - } - - /* Set the I2S clock to the external clock value */ - i2sclk = I2S_EXTERNAL_CLOCK_VAL; - - #else /* There is no define for External I2S clock source */ - /* Set PLLI2S as I2S clock source */ - if ((RCC->CFGR & RCC_CFGR_I2SSRC) != 0) - { - RCC->CFGR &= ~(uint32_t)RCC_CFGR_I2SSRC; - } - - /* Get the PLLI2SN value */ - plln = (uint32_t)(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6) & \ - (RCC_PLLI2SCFGR_PLLI2SN >> 6)); - - /* Get the PLLI2SR value */ - pllr = (uint32_t)(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28) & \ - (RCC_PLLI2SCFGR_PLLI2SR >> 28)); - - /* Get the PLLM value */ - pllm = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM); - - /* Get the I2S source clock value */ - i2sclk = (uint32_t)(((HSE_VALUE / pllm) * plln) / pllr); - #endif /* I2S_EXTERNAL_CLOCK_VAL */ - - /* 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)(((((i2sclk / 256) * 10) / I2S_InitStruct->I2S_AudioFreq)) + 5); - } - else - { - /* MCLK output is disabled */ - tmp = (uint16_t)(((((i2sclk / (32 * packetlength)) *10 ) / I2S_InitStruct->I2S_AudioFreq)) + 5); - } - - /* Remove the flatting 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)((uint16_t)i2sdiv | (uint16_t)(i2sodd | (uint16_t)I2S_InitStruct->I2S_MCLKOutput)); - - /* Configure the I2S with the SPI_InitStruct values */ - tmpreg |= (uint16_t)((uint16_t)SPI_I2SCFGR_I2SMOD | (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, 3, 4, 5 or 6 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 |= SPI_CR1_SPE; - } - else - { - /* Disable the selected SPI peripheral */ - SPIx->CR1 &= (uint16_t)~((uint16_t)SPI_CR1_SPE); - } -} - -/** - * @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 (or I2Sxext - * for full duplex mode). - * @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_EXT(SPIx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected SPI peripheral (in I2S mode) */ - SPIx->I2SCFGR |= SPI_I2SCFGR_I2SE; - } - else - { - /* Disable the selected SPI peripheral in I2S mode */ - SPIx->I2SCFGR &= (uint16_t)~((uint16_t)SPI_I2SCFGR_I2SE); - } -} - -/** - * @brief Configures the data size for the selected SPI. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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 Selects the data transfer direction in bidirectional mode for the specified SPI. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 to select the SPI peripheral. - * @param SPI_Direction: specifies the data transfer direction in bidirectional 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 Configures internally by software the NSS pin for the selected SPI. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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, 3, 4, 5 or 6 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 |= (uint16_t)SPI_CR2_SSOE; - } - else - { - /* Disable the selected SPI SS output */ - SPIx->CR2 &= (uint16_t)~((uint16_t)SPI_CR2_SSOE); - } -} - -/** - * @brief Enables or disables the SPIx/I2Sx DMA interface. - * - * @note This function can be called only after the SPI_Init() function has - * been called. - * @note When TI mode is selected, the control bits SSM, SSI, CPOL and CPHA - * are not taken into consideration and are configured by hardware - * respectively to the TI mode requirements. - * - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 - * @param NewState: new state of the selected SPI TI communication mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void SPI_TIModeCmd(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 TI mode for the selected SPI peripheral */ - SPIx->CR2 |= SPI_CR2_FRF; - } - else - { - /* Disable the TI mode for the selected SPI peripheral */ - SPIx->CR2 &= (uint16_t)~SPI_CR2_FRF; - } -} - -/** - * @brief Configures the full duplex mode for the I2Sx peripheral using its - * extension I2Sxext according to the specified parameters in the - * I2S_InitStruct. - * @param I2Sxext: where x can be 2 or 3 to select the I2S peripheral extension block. - * @param I2S_InitStruct: pointer to an I2S_InitTypeDef structure that - * contains the configuration information for the specified I2S peripheral - * extension. - * - * @note The structure pointed by I2S_InitStruct parameter should be the same - * used for the master I2S peripheral. In this case, if the master is - * configured as transmitter, the slave will be receiver and vice versa. - * Or you can force a different mode by modifying the field I2S_Mode to the - * value I2S_SlaveRx or I2S_SlaveTx indepedently of the master configuration. - * - * @note The I2S full duplex extension can be configured in slave mode only. - * - * @retval None - */ -void I2S_FullDuplexConfig(SPI_TypeDef* I2Sxext, I2S_InitTypeDef* I2S_InitStruct) -{ - uint16_t tmpreg = 0, tmp = 0; - - /* Check the I2S parameters */ - assert_param(IS_I2S_EXT_PERIPH(I2Sxext)); - 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_CPOL(I2S_InitStruct->I2S_CPOL)); - -/*----------------------- SPIx I2SCFGR & I2SPR Configuration -----------------*/ - /* Clear I2SMOD, I2SE, I2SCFG, PCMSYNC, I2SSTD, CKPOL, DATLEN and CHLEN bits */ - I2Sxext->I2SCFGR &= I2SCFGR_CLEAR_MASK; - I2Sxext->I2SPR = 0x0002; - - /* Get the I2SCFGR register value */ - tmpreg = I2Sxext->I2SCFGR; - - /* Get the mode to be configured for the extended I2S */ - if ((I2S_InitStruct->I2S_Mode == I2S_Mode_MasterTx) || (I2S_InitStruct->I2S_Mode == I2S_Mode_SlaveTx)) - { - tmp = I2S_Mode_SlaveRx; - } - else - { - if ((I2S_InitStruct->I2S_Mode == I2S_Mode_MasterRx) || (I2S_InitStruct->I2S_Mode == I2S_Mode_SlaveRx)) - { - tmp = I2S_Mode_SlaveTx; - } - } - - - /* Configure the I2S with the SPI_InitStruct values */ - tmpreg |= (uint16_t)((uint16_t)SPI_I2SCFGR_I2SMOD | (uint16_t)(tmp | \ - (uint16_t)(I2S_InitStruct->I2S_Standard | (uint16_t)(I2S_InitStruct->I2S_DataFormat | \ - (uint16_t)I2S_InitStruct->I2S_CPOL)))); - - /* Write to SPIx I2SCFGR */ - I2Sxext->I2SCFGR = tmpreg; -} - -/** - * @} - */ - -/** @defgroup SPI_Group2 Data transfers functions - * @brief Data transfers functions - * -@verbatim - =============================================================================== - ##### Data transfers functions ##### - =============================================================================== - - [..] This section provides a set of functions allowing to manage the SPI data - transfers. In reception, data are received and then stored into an internal - Rx buffer while. In transmission, data are first stored into an internal Tx - buffer before being transmitted. - - [..] The read access of the SPI_DR register can be done using the SPI_I2S_ReceiveData() - function and returns the Rx buffered value. Whereas a write access to the SPI_DR - can be done using SPI_I2S_SendData() function and stores the written data into - Tx buffer. - -@endverbatim - * @{ - */ - -/** - * @brief Returns the most recent received data by the SPIx/I2Sx peripheral. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex 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_EXT(SPIx)); - - /* Return the data in the DR register */ - return SPIx->DR; -} - -/** - * @brief Transmits a Data through the SPIx/I2Sx peripheral. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex 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_EXT(SPIx)); - - /* Write in the DR register the data to be sent */ - SPIx->DR = Data; -} - -/** - * @} - */ - -/** @defgroup SPI_Group3 Hardware CRC Calculation functions - * @brief Hardware CRC Calculation functions - * -@verbatim - =============================================================================== - ##### Hardware CRC Calculation functions ##### - =============================================================================== - - [..] This section provides a set of functions allowing to manage the SPI CRC hardware - calculation - - [..] SPI communication using CRC is possible through the following procedure: - (#) Program the Data direction, Polarity, Phase, First Data, Baud Rate Prescaler, - Slave Management, Peripheral Mode and CRC Polynomial values using the SPI_Init() - function. - (#) Enable the CRC calculation using the SPI_CalculateCRC() function. - (#) Enable the SPI using the SPI_Cmd() function - (#) Before writing the last data to the TX buffer, set the CRCNext bit using the - SPI_TransmitCRC() function to indicate that after transmission of the last - data, the CRC should be transmitted. - (#) After transmitting the last data, the SPI transmits the CRC. The SPI_CR1_CRCNEXT - bit is reset. The CRC is also received and compared against the SPI_RXCRCR - value. - If the value does not match, the SPI_FLAG_CRCERR flag is set and an interrupt - can be generated when the SPI_I2S_IT_ERR interrupt is enabled. - - [..] - (@) It is advised not to read the calculated CRC values during the communication. - - (@) When the SPI is in slave mode, be careful to enable CRC calculation only - when the clock is stable, that is, when the clock is in the steady state. - If not, a wrong CRC calculation may be done. In fact, the CRC is sensitive - to the SCK slave input clock as soon as CRCEN is set, and this, whatever - the value of the SPE bit. - - (@) With high bitrate frequencies, be careful when transmitting the CRC. - As the number of used CPU cycles has to be as low as possible in the CRC - transfer phase, it is forbidden to call software functions in the CRC - transmission sequence to avoid errors in the last data and CRC reception. - In fact, CRCNEXT bit has to be written before the end of the transmission/reception - of the last data. - - (@) For high bit rate frequencies, it is advised to use the DMA mode to avoid the - degradation of the SPI speed performance due to CPU accesses impacting the - SPI bandwidth. - - (@) When the STM32F4xx is configured as slave and the NSS hardware mode is - used, the NSS pin needs to be kept low between the data phase and the CRC - phase. - - (@) When the SPI is configured in slave mode with the CRC feature enabled, CRC - calculation takes place even if a high level is applied on the NSS pin. - This may happen for example in case of a multi-slave environment where the - communication master addresses slaves alternately. - - (@) Between a slave de-selection (high level on NSS) and a new slave selection - (low level on NSS), the CRC value should be cleared on both master and slave - sides in order to resynchronize the master and slave for their respective - CRC calculation. - - (@) To clear the CRC, follow the procedure below: - (#@) Disable SPI using the SPI_Cmd() function - (#@) Disable the CRC calculation using the SPI_CalculateCRC() function. - (#@) Enable the CRC calculation using the SPI_CalculateCRC() function. - (#@) Enable SPI using the SPI_Cmd() function. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the CRC value calculation of the transferred bytes. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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 |= SPI_CR1_CRCEN; - } - else - { - /* Disable the selected SPI CRC calculation */ - SPIx->CR1 &= (uint16_t)~((uint16_t)SPI_CR1_CRCEN); - } -} - -/** - * @brief Transmit the SPIx CRC value. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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 |= SPI_CR1_CRCNEXT; -} - -/** - * @brief Returns the transmit or the receive CRC register value for the specified SPI. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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, 3, 4, 5 or 6 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; -} - -/** - * @} - */ - -/** @defgroup SPI_Group4 DMA transfers management functions - * @brief DMA transfers management functions - * -@verbatim - =============================================================================== - ##### DMA transfers management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the SPIx/I2Sx DMA interface. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_DMAReq: specifies the SPI 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 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_EXT(SPIx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - assert_param(IS_SPI_I2S_DMAREQ(SPI_I2S_DMAReq)); - - if (NewState != DISABLE) - { - /* Enable the selected SPI DMA requests */ - SPIx->CR2 |= SPI_I2S_DMAReq; - } - else - { - /* Disable the selected SPI DMA requests */ - SPIx->CR2 &= (uint16_t)~SPI_I2S_DMAReq; - } -} - -/** - * @} - */ - -/** @defgroup SPI_Group5 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides a set of functions allowing to configure the SPI Interrupts - sources and check or clear the flags or pending bits status. - The user should identify which mode will be used in his application to manage - the communication: Polling mode, Interrupt mode or DMA mode. - - *** Polling Mode *** - ==================== -[..] In Polling Mode, the SPI/I2S communication can be managed by 9 flags: - (#) SPI_I2S_FLAG_TXE : to indicate the status of the transmit buffer register - (#) SPI_I2S_FLAG_RXNE : to indicate the status of the receive buffer register - (#) SPI_I2S_FLAG_BSY : to indicate the state of the communication layer of the SPI. - (#) SPI_FLAG_CRCERR : to indicate if a CRC Calculation error occur - (#) SPI_FLAG_MODF : to indicate if a Mode Fault error occur - (#) SPI_I2S_FLAG_OVR : to indicate if an Overrun error occur - (#) I2S_FLAG_TIFRFE: to indicate a Frame Format error occurs. - (#) I2S_FLAG_UDR: to indicate an Underrun error occurs. - (#) I2S_FLAG_CHSIDE: to indicate Channel Side. - - (@) Do not use the BSY flag to handle each data transmission or reception. It is - better to use the TXE and RXNE flags instead. - - [..] In this Mode it is advised to use the following functions: - (+) FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); - (+) void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); - - *** Interrupt Mode *** - ====================== - [..] In Interrupt Mode, the SPI communication can be managed by 3 interrupt sources - and 7 pending bits: - (+) Pending Bits: - (##) SPI_I2S_IT_TXE : to indicate the status of the transmit buffer register - (##) SPI_I2S_IT_RXNE : to indicate the status of the receive buffer register - (##) SPI_IT_CRCERR : to indicate if a CRC Calculation error occur (available in SPI mode only) - (##) SPI_IT_MODF : to indicate if a Mode Fault error occur (available in SPI mode only) - (##) SPI_I2S_IT_OVR : to indicate if an Overrun error occur - (##) I2S_IT_UDR : to indicate an Underrun Error occurs (available in I2S mode only). - (##) I2S_FLAG_TIFRFE : to indicate a Frame Format error occurs (available in TI mode only). - - (+) Interrupt Source: - (##) SPI_I2S_IT_TXE: specifies the interrupt source for the Tx buffer empty - interrupt. - (##) SPI_I2S_IT_RXNE : specifies the interrupt source for the Rx buffer not - empty interrupt. - (##) SPI_I2S_IT_ERR : specifies the interrupt source for the errors interrupt. - - [..] In this Mode it is advised to use the following functions: - (+) void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); - (+) ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); - (+) void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); - - *** DMA Mode *** - ================ - [..] In DMA Mode, the SPI communication can be managed by 2 DMA Channel requests: - (#) SPI_I2S_DMAReq_Tx: specifies the Tx buffer DMA transfer request - (#) SPI_I2S_DMAReq_Rx: specifies the Rx buffer DMA transfer request - - [..] In this Mode it is advised to use the following function: - (+) void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState - NewState); - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified SPI/I2S interrupts. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_IT: specifies the SPI 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 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_EXT(SPIx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - assert_param(IS_SPI_I2S_CONFIG_IT(SPI_I2S_IT)); - - /* Get the SPI 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 interrupt */ - SPIx->CR2 |= itmask; - } - else - { - /* Disable the selected SPI interrupt */ - SPIx->CR2 &= (uint16_t)~itmask; - } -} - -/** - * @brief Checks whether the specified SPIx/I2Sx flag is set or not. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_FLAG: specifies the SPI 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 SPI_I2S_FLAG_TIFRFE: Format Error. - * @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_EXT(SPIx)); - assert_param(IS_SPI_I2S_GET_FLAG(SPI_I2S_FLAG)); - - /* Check the status of the specified SPI 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: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_FLAG: specifies the SPI flag to clear. - * This function clears only CRCERR flag. - * @arg SPI_FLAG_CRCERR: CRC Error 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()). - * @note UDR (UnderRun error) flag is cleared by a read operation to - * SPI_SR register (SPI_I2S_GetFlagStatus()). - * @note 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_EXT(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 SPIx/I2Sx interrupt has occurred or not. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_IT: specifies the SPI 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 interrupt. - * @arg SPI_I2S_IT_TIFRFE: Format 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_EXT(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 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 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: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_IT: specifies the SPI interrupt pending bit to clear. - * This function clears only CRCERR interrupt pending bit. - * @arg SPI_IT_CRCERR: CRC Error interrupt. - * - * @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()). - * @note UDR (UnderRun Error) interrupt pending bit is cleared by a read - * operation to SPI_SR register (SPI_I2S_GetITStatus()). - * @note 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_EXT(SPIx)); - assert_param(IS_SPI_I2S_CLEAR_IT(SPI_I2S_IT)); - - /* Get the SPI_I2S 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c deleted file mode 100644 index 160181c5..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c +++ /dev/null @@ -1,206 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_syscfg.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the SYSCFG peripheral. - * - @verbatim - - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] This driver provides functions for: - - (#) Remapping the memory accessible in the code area using SYSCFG_MemoryRemapConfig() - - (#) Manage the EXTI lines connection to the GPIOs using SYSCFG_EXTILineConfig() - - (#) Select the ETHERNET media interface (RMII/RII) using SYSCFG_ETH_MediaInterfaceConfig() - - -@- SYSCFG APB clock must be enabled to get write access to SYSCFG registers, - using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_syscfg.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup SYSCFG - * @brief SYSCFG driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* ------------ RCC registers bit address in the alias region ----------- */ -#define SYSCFG_OFFSET (SYSCFG_BASE - PERIPH_BASE) - -/* --- PMC Register ---*/ -/* Alias word address of MII_RMII_SEL bit */ -#define PMC_OFFSET (SYSCFG_OFFSET + 0x04) -#define MII_RMII_SEL_BitNumber ((uint8_t)0x17) -#define PMC_MII_RMII_SEL_BB (PERIPH_BB_BASE + (PMC_OFFSET * 32) + (MII_RMII_SEL_BitNumber * 4)) - -/* --- CMPCR Register ---*/ -/* Alias word address of CMP_PD bit */ -#define CMPCR_OFFSET (SYSCFG_OFFSET + 0x20) -#define CMP_PD_BitNumber ((uint8_t)0x00) -#define CMPCR_CMP_PD_BB (PERIPH_BB_BASE + (CMPCR_OFFSET * 32) + (CMP_PD_BitNumber * 4)) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup SYSCFG_Private_Functions - * @{ - */ - -/** - * @brief Deinitializes the Alternate Functions (remap and EXTI configuration) - * registers to their default reset values. - * @param None - * @retval None - */ -void SYSCFG_DeInit(void) -{ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, DISABLE); -} - -/** - * @brief Changes the mapping of the specified pin. - * @param SYSCFG_Memory: selects the memory remapping. - * This parameter can be one of the following values: - * @arg SYSCFG_MemoryRemap_Flash: Main Flash memory mapped at 0x00000000 - * @arg SYSCFG_MemoryRemap_SystemFlash: System Flash memory mapped at 0x00000000 - * @arg SYSCFG_MemoryRemap_FSMC: FSMC (Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000 - * @arg SYSCFG_MemoryRemap_SRAM: Embedded SRAM (112kB) mapped at 0x00000000 - * @retval None - */ -void SYSCFG_MemoryRemapConfig(uint8_t SYSCFG_MemoryRemap) -{ - /* Check the parameters */ - assert_param(IS_SYSCFG_MEMORY_REMAP_CONFING(SYSCFG_MemoryRemap)); - - SYSCFG->MEMRMP = SYSCFG_MemoryRemap; -} - -/** - * @brief Selects the GPIO pin used as EXTI Line. - * @param EXTI_PortSourceGPIOx : selects the GPIO port to be used as source for - * EXTI lines where x can be (A..I) for STM32F40xx/STM32F41xx - * and STM32F427x/STM32F437x devices. - * - * @param EXTI_PinSourcex: specifies the EXTI line to be configured. - * This parameter can be EXTI_PinSourcex where x can be (0..15, except - * for EXTI_PortSourceGPIOI x can be (0..11) for STM32F40xx/STM32F41xx - * and STM32F427x/STM32F437x devices. - * - * @retval None - */ -void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex) -{ - uint32_t tmp = 0x00; - - /* Check the parameters */ - assert_param(IS_EXTI_PORT_SOURCE(EXTI_PortSourceGPIOx)); - assert_param(IS_EXTI_PIN_SOURCE(EXTI_PinSourcex)); - - tmp = ((uint32_t)0x0F) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03)); - SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] &= ~tmp; - SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] |= (((uint32_t)EXTI_PortSourceGPIOx) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03))); -} - -/** - * @brief Selects the ETHERNET media interface - * @param SYSCFG_ETH_MediaInterface: specifies the Media Interface mode. - * This parameter can be one of the following values: - * @arg SYSCFG_ETH_MediaInterface_MII: MII mode selected - * @arg SYSCFG_ETH_MediaInterface_RMII: RMII mode selected - * @retval None - */ -void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface) -{ - assert_param(IS_SYSCFG_ETH_MEDIA_INTERFACE(SYSCFG_ETH_MediaInterface)); - /* Configure MII_RMII selection bit */ - *(__IO uint32_t *) PMC_MII_RMII_SEL_BB = SYSCFG_ETH_MediaInterface; -} - -/** - * @brief Enables or disables the I/O Compensation Cell. - * @note The I/O compensation cell can be used only when the device supply - * voltage ranges from 2.4 to 3.6 V. - * @param NewState: new state of the I/O Compensation Cell. - * This parameter can be one of the following values: - * @arg ENABLE: I/O compensation cell enabled - * @arg DISABLE: I/O compensation cell power-down mode - * @retval None - */ -void SYSCFG_CompensationCellCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - *(__IO uint32_t *) CMPCR_CMP_PD_BB = (uint32_t)NewState; -} - -/** - * @brief Checks whether the I/O Compensation Cell ready flag is set or not. - * @param None - * @retval The new state of the I/O Compensation Cell ready flag (SET or RESET) - */ -FlagStatus SYSCFG_GetCompensationCellStatus(void) -{ - FlagStatus bitstatus = RESET; - - if ((SYSCFG->CMPCR & SYSCFG_CMPCR_READY ) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c deleted file mode 100644 index 1616a625..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c +++ /dev/null @@ -1,3365 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_tim.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the TIM peripheral: - * + TimeBase management - * + Output Compare management - * + Input Capture management - * + Advanced-control timers (TIM1 and TIM8) specific features - * + Interrupts, DMA and flags management - * + Clocks management - * + Synchronization management - * + Specific interface management - * + Specific remapping management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - This driver provides functions to configure and program the TIM - of all STM32F4xx devices. - These functions are split in 9 groups: - - (#) TIM TimeBase management: this group includes all needed functions - to configure the TM Timebase unit: - (++) Set/Get Prescaler - (++) Set/Get Autoreload - (++) Counter modes configuration - (++) Set Clock division - (++) Select the One Pulse mode - (++) Update Request Configuration - (++) Update Disable Configuration - (++) Auto-Preload Configuration - (++) Enable/Disable the counter - - (#) TIM Output Compare management: this group includes all needed - functions to configure the Capture/Compare unit used in Output - compare mode: - (++) Configure each channel, independently, in Output Compare mode - (++) Select the output compare modes - (++) Select the Polarities of each channel - (++) Set/Get the Capture/Compare register values - (++) Select the Output Compare Fast mode - (++) Select the Output Compare Forced mode - (++) Output Compare-Preload Configuration - (++) Clear Output Compare Reference - (++) Select the OCREF Clear signal - (++) Enable/Disable the Capture/Compare Channels - - (#) TIM Input Capture management: this group includes all needed - functions to configure the Capture/Compare unit used in - Input Capture mode: - (++) Configure each channel in input capture mode - (++) Configure Channel1/2 in PWM Input mode - (++) Set the Input Capture Prescaler - (++) Get the Capture/Compare values - - (#) Advanced-control timers (TIM1 and TIM8) specific features - (++) Configures the Break input, dead time, Lock level, the OSSI, - the OSSR State and the AOE(automatic output enable) - (++) Enable/Disable the TIM peripheral Main Outputs - (++) Select the Commutation event - (++) Set/Reset the Capture Compare Preload Control bit - - (#) TIM interrupts, DMA and flags management - (++) Enable/Disable interrupt sources - (++) Get flags status - (++) Clear flags/ Pending bits - (++) Enable/Disable DMA requests - (++) Configure DMA burst mode - (++) Select CaptureCompare DMA request - - (#) TIM clocks management: this group includes all needed functions - to configure the clock controller unit: - (++) Select internal/External clock - (++) Select the external clock mode: ETR(Mode1/Mode2), TIx or ITRx - - (#) TIM synchronization management: this group includes all needed - functions to configure the Synchronization unit: - (++) Select Input Trigger - (++) Select Output Trigger - (++) Select Master Slave Mode - (++) ETR Configuration when used as external trigger - - (#) TIM specific interface management, this group includes all - needed functions to use the specific TIM interface: - (++) Encoder Interface Configuration - (++) Select Hall Sensor - - (#) TIM specific remapping management includes the Remapping - configuration of specific timers - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_tim.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup TIM - * @brief TIM driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* ---------------------- TIM registers bit mask ------------------------ */ -#define SMCR_ETR_MASK ((uint16_t)0x00FF) -#define CCMR_OFFSET ((uint16_t)0x0018) -#define CCER_CCE_SET ((uint16_t)0x0001) -#define CCER_CCNE_SET ((uint16_t)0x0004) -#define CCMR_OC13M_MASK ((uint16_t)0xFF8F) -#define CCMR_OC24M_MASK ((uint16_t)0x8FFF) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); -static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); -static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); -static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup TIM_Private_Functions - * @{ - */ - -/** @defgroup TIM_Group1 TimeBase management functions - * @brief TimeBase management functions - * -@verbatim - =============================================================================== - ##### TimeBase management functions ##### - =============================================================================== - - - ##### TIM Driver: how to use it in Timing(Time base) Mode ##### - =============================================================================== - [..] - To use the Timer in Timing(Time base) mode, the following steps are mandatory: - - (#) Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) function - - (#) Fill the TIM_TimeBaseInitStruct with the desired parameters. - - (#) Call TIM_TimeBaseInit(TIMx, &TIM_TimeBaseInitStruct) to configure the Time Base unit - with the corresponding configuration - - (#) Enable the NVIC if you need to generate the update interrupt. - - (#) Enable the corresponding interrupt using the function TIM_ITConfig(TIMx, TIM_IT_Update) - - (#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter. - - -@- All other functions can be used separately to modify, if needed, - a specific feature of the Timer. - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the TIMx peripheral registers to their default reset values. - * @param TIMx: where x can be 1 to 14 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); - } - } -} - -/** - * @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 14 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)(~(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)(~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)) - { - /* Set the Repetition Counter value */ - TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter; - } - - /* Generate an update event to reload the Prescaler - and the repetition counter(only for TIM1 and TIM8) value immediatly */ - TIMx->EGR = TIM_PSCReloadMode_Immediate; -} - -/** - * @brief Fills each TIM_TimeBaseInitStruct member with its default value. - * @param TIM_TimeBaseInitStruct : pointer to a TIM_TimeBaseInitTypeDef - * structure which will be initialized. - * @retval None - */ -void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) -{ - /* Set the default configuration */ - TIM_TimeBaseInitStruct->TIM_Period = 0xFFFFFFFF; - TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000; - TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1; - TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up; - TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000; -} - -/** - * @brief Configures the TIMx Prescaler. - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @param Prescaler: specifies the Prescaler Register value - * @param TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode - * This parameter can be one of the following values: - * @arg TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event. - * @arg TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediatly. - * @retval None - */ -void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode)); - /* Set the Prescaler value */ - TIMx->PSC = Prescaler; - /* Set or reset the UG Bit */ - TIMx->EGR = TIM_PSCReloadMode; -} - -/** - * @brief Specifies the TIMx Counter Mode to be used. - * @param TIMx: where x can be 1, 2, 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)~(TIM_CR1_DIR | TIM_CR1_CMS); - - /* Set the Counter Mode */ - tmpcr1 |= TIM_CounterMode; - - /* Write to TIMx CR1 register */ - TIMx->CR1 = tmpcr1; -} - -/** - * @brief Sets the TIMx Counter Register value - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @param Counter: specifies the Counter register new value. - * @retval None - */ -void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Set the Counter Register value */ - TIMx->CNT = Counter; -} - -/** - * @brief Sets the TIMx Autoreload Register value - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @param Autoreload: specifies the Autoreload register new value. - * @retval None - */ -void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Set the Autoreload Register value */ - TIMx->ARR = Autoreload; -} - -/** - * @brief Gets the TIMx Counter value. - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @retval Counter Register value - */ -uint32_t TIM_GetCounter(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Get the Counter Register value */ - return TIMx->CNT; -} - -/** - * @brief Gets the TIMx Prescaler value. - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @retval Prescaler Register value. - */ -uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Get the Prescaler Register value */ - return TIMx->PSC; -} - -/** - * @brief Enables or Disables the TIMx Update event. - * @param TIMx: where x can be 1 to 14 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)~TIM_CR1_UDIS; - } -} - -/** - * @brief Configures the TIMx Update Request Interrupt source. - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @param TIM_UpdateSource: specifies the Update source. - * This parameter can be one of the following values: - * @arg TIM_UpdateSource_Global: 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_Regular: 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)~TIM_CR1_URS; - } -} - -/** - * @brief Enables or disables TIMx peripheral Preload register on ARR. - * @param TIMx: where x can be 1 to 14 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)~TIM_CR1_ARPE; - } -} - -/** - * @brief Selects the TIMx's One Pulse Mode. - * @param TIMx: where x can be 1 to 14 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)~TIM_CR1_OPM; - - /* Configure the OPM Mode */ - TIMx->CR1 |= TIM_OPMode; -} - -/** - * @brief Sets the TIMx Clock Division value. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_CKD_DIV(TIM_CKD)); - - /* Reset the CKD Bits */ - TIMx->CR1 &= (uint16_t)(~TIM_CR1_CKD); - - /* Set the CKD value */ - TIMx->CR1 |= TIM_CKD; -} - -/** - * @brief Enables or disables the specified TIM peripheral. - * @param TIMx: where x can be 1 to 14 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)~TIM_CR1_CEN; - } -} -/** - * @} - */ - -/** @defgroup TIM_Group2 Output Compare management functions - * @brief Output Compare management functions - * -@verbatim - =============================================================================== - ##### Output Compare management functions ##### - =============================================================================== - - - ##### TIM Driver: how to use it in Output Compare Mode ##### - =============================================================================== - [..] - To use the Timer in Output Compare mode, the following steps are mandatory: - - (#) Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) - function - - (#) Configure the TIM pins by configuring the corresponding GPIO pins - - (#) Configure the Time base unit as described in the first part of this driver, - (++) if needed, else the Timer will run with the default configuration: - Autoreload value = 0xFFFF - (++) Prescaler value = 0x0000 - (++) Counter mode = Up counting - (++) Clock Division = TIM_CKD_DIV1 - - (#) Fill the TIM_OCInitStruct with the desired parameters including: - (++) The TIM Output Compare mode: TIM_OCMode - (++) TIM Output State: TIM_OutputState - (++) TIM Pulse value: TIM_Pulse - (++) TIM Output Compare Polarity : TIM_OCPolarity - - (#) Call TIM_OCxInit(TIMx, &TIM_OCInitStruct) to configure the desired - channel with the corresponding configuration - - (#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter. - - -@- All other functions can be used separately to modify, if needed, - a specific feature of the Timer. - - -@- In case of PWM mode, this function is mandatory: - TIM_OCxPreloadConfig(TIMx, TIM_OCPreload_ENABLE); - - -@- If the corresponding interrupt or DMA request are needed, the user should: - (+@) Enable the NVIC (or the DMA) to use the TIM interrupts (or DMA requests). - (+@) Enable the corresponding interrupt (or DMA request) using the function - TIM_ITConfig(TIMx, TIM_IT_CCx) (or TIM_DMA_Cmd(TIMx, TIM_DMA_CCx)) - -@endverbatim - * @{ - */ - -/** - * @brief Initializes the TIMx Channel1 according to the specified parameters in - * the TIM_OCInitStruct. - * @param TIMx: where x can be 1 to 14 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_LIST1_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)~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)~TIM_CCMR1_OC1M; - tmpccmrx &= (uint16_t)~TIM_CCMR1_CC1S; - /* Select the Output Compare Mode */ - tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; - - /* Reset the Output Polarity level */ - tmpccer &= (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)) - { - 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)~TIM_CCER_CC1NP; - /* Set the Output N Polarity */ - tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity; - /* Reset the Output N State */ - tmpccer &= (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)~TIM_CR2_OIS1; - tmpcr2 &= (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 or 12 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_LIST2_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)~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)~TIM_CCMR1_OC2M; - tmpccmrx &= (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)~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)~TIM_CCER_CC2NP; - /* Set the Output N Polarity */ - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4); - /* Reset the Output N State */ - tmpccer &= (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)~TIM_CR2_OIS2; - tmpcr2 &= (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 3: Reset the CC2E Bit */ - TIMx->CCER &= (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)~TIM_CCMR2_OC3M; - tmpccmrx &= (uint16_t)~TIM_CCMR2_CC3S; - /* Select the Output Compare Mode */ - tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; - - /* Reset the Output Polarity level */ - tmpccer &= (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)~TIM_CCER_CC3NP; - /* Set the Output N Polarity */ - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8); - /* Reset the Output N State */ - tmpccer &= (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)~TIM_CR2_OIS3; - tmpcr2 &= (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 4: Reset the CC4E Bit */ - TIMx->CCER &= (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)~TIM_CCMR2_OC4M; - tmpccmrx &= (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)~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) ~TIM_CR2_OIS4; - /* Set the Output Idle state */ - tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6); - } - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - - /* Write to TIMx CCMR2 */ - TIMx->CCMR2 = tmpccmrx; - - /* Set the Capture Compare Register value */ - TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse; - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; -} - -/** - * @brief Fills each TIM_OCInitStruct member with its default value. - * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure which will - * be initialized. - * @retval None - */ -void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct) -{ - /* Set the default configuration */ - TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing; - TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable; - TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable; - TIM_OCInitStruct->TIM_Pulse = 0x00000000; - TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High; - TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High; - TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset; - TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset; -} - -/** - * @brief Selects the TIM Output Compare Mode. - * @note This function disables the selected channel before changing the Output - * Compare Mode. If needed, user has to enable this channel using - * TIM_CCxCmd() and TIM_CCxNCmd() functions. - * @param TIMx: where x can be 1 to 14 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_LIST1_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 &= CCMR_OC13M_MASK; - - /* 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 &= CCMR_OC24M_MASK; - - /* Configure the OCxM bits in the CCMRx register */ - *(__IO uint32_t *) tmp |= (uint16_t)(TIM_OCMode << 8); - } -} - -/** - * @brief Sets the TIMx Capture Compare1 Register value - * @param TIMx: where x can be 1 to 14 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, uint32_t Compare1) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST1_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 or 12 to select the TIM - * peripheral. - * @param Compare2: specifies the Capture Compare2 register new value. - * @retval None - */ -void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST2_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, uint32_t Compare3) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - - /* Set the Capture Compare3 Register value */ - TIMx->CCR3 = Compare3; -} - -/** - * @brief Sets the TIMx Capture Compare4 Register value - * @param TIMx: where x can be 1, 2, 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, uint32_t Compare4) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - - /* Set the Capture Compare4 Register value */ - TIMx->CCR4 = Compare4; -} - -/** - * @brief Forces the TIMx output 1 waveform to active or inactive level. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC1M Bits */ - tmpccmr1 &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC2M Bits */ - tmpccmr1 &= (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)~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)~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 the TIMx peripheral Preload register on CCR1. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); - - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC1PE Bit */ - tmpccmr1 &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); - - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC2PE Bit */ - tmpccmr1 &= (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)(~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)(~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 14 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_LIST1_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)~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 or 12 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_LIST2_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)(~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)~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)(~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 to 14 except 6 and 7, 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); - - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC1CE Bit */ - tmpccmr1 &= (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, 8, 9 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); - - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC2CE Bit */ - tmpccmr1 &= (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)~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)~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 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC1P Bit */ - tmpccer &= (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 or 8 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_LIST4_PERIPH(TIMx)); - assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC1NP Bit */ - tmpccer &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC2P Bit */ - tmpccer &= (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_LIST4_PERIPH(TIMx)); - assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC2NP Bit */ - tmpccer &= (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)~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_LIST4_PERIPH(TIMx)); - assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC3NP Bit */ - tmpccer &= (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)~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 14 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_LIST1_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 or 8 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_LIST4_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); -} -/** - * @} - */ - -/** @defgroup TIM_Group3 Input Capture management functions - * @brief Input Capture management functions - * -@verbatim - =============================================================================== - ##### Input Capture management functions ##### - =============================================================================== - - ##### TIM Driver: how to use it in Input Capture Mode ##### - =============================================================================== - [..] - To use the Timer in Input Capture mode, the following steps are mandatory: - - (#) Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) - function - - (#) Configure the TIM pins by configuring the corresponding GPIO pins - - (#) Configure the Time base unit as described in the first part of this driver, - if needed, else the Timer will run with the default configuration: - (++) Autoreload value = 0xFFFF - (++) Prescaler value = 0x0000 - (++) Counter mode = Up counting - (++) Clock Division = TIM_CKD_DIV1 - - (#) Fill the TIM_ICInitStruct with the desired parameters including: - (++) TIM Channel: TIM_Channel - (++) TIM Input Capture polarity: TIM_ICPolarity - (++) TIM Input Capture selection: TIM_ICSelection - (++) TIM Input Capture Prescaler: TIM_ICPrescaler - (++) TIM Input CApture filter value: TIM_ICFilter - - (#) Call TIM_ICInit(TIMx, &TIM_ICInitStruct) to configure the desired channel - with the corresponding configuration and to measure only frequency - or duty cycle of the input signal, or, Call TIM_PWMIConfig(TIMx, &TIM_ICInitStruct) - to configure the desired channels with the corresponding configuration - and to measure the frequency and the duty cycle of the input signal - - (#) Enable the NVIC or the DMA to read the measured frequency. - - (#) Enable the corresponding interrupt (or DMA request) to read the Captured - value, using the function TIM_ITConfig(TIMx, TIM_IT_CCx) - (or TIM_DMA_Cmd(TIMx, TIM_DMA_CCx)) - - (#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter. - - (#) Use TIM_GetCapturex(TIMx); to read the captured value. - - -@- All other functions can be used separately to modify, if needed, - a specific feature of the Timer. - -@endverbatim - * @{ - */ - -/** - * @brief Initializes the TIM peripheral according to the specified parameters - * in the TIM_ICInitStruct. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_IC_POLARITY(TIM_ICInitStruct->TIM_ICPolarity)); - 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 (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); - } - else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2) - { - /* TI2 Configuration */ - assert_param(IS_TIM_LIST2_PERIPH(TIMx)); - 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) - { - /* TI3 Configuration */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - 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 - { - /* TI4 Configuration */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } -} - -/** - * @brief Fills each TIM_ICInitStruct member with its default value. - * @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure which will - * be initialized. - * @retval None - */ -void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct) -{ - /* Set the default configuration */ - TIM_ICInitStruct->TIM_Channel = TIM_Channel_1; - TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising; - TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI; - TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1; - TIM_ICInitStruct->TIM_ICFilter = 0x00; -} - -/** - * @brief Configures the TIM peripheral according to the specified parameters - * in the TIM_ICInitStruct to measure an external PWM signal. - * @param TIMx: where x can be 1, 2, 3, 4, 5,8, 9 or 12 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_LIST2_PERIPH(TIMx)); - - /* Select the Opposite Input Polarity */ - if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising) - { - icoppositepolarity = TIM_ICPolarity_Falling; - } - else - { - icoppositepolarity = TIM_ICPolarity_Rising; - } - /* Select the Opposite Input */ - if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI) - { - icoppositeselection = TIM_ICSelection_IndirectTI; - } - else - { - icoppositeselection = TIM_ICSelection_DirectTI; - } - if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) - { - /* TI1 Configuration */ - TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - /* TI2 Configuration */ - TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } - else - { - /* TI2 Configuration */ - TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - /* TI1 Configuration */ - TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } -} - -/** - * @brief Gets the TIMx Input Capture 1 value. - * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. - * @retval Capture Compare 1 Register value. - */ -uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST1_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 or 12 to select the TIM - * peripheral. - * @retval Capture Compare 2 Register value. - */ -uint32_t TIM_GetCapture2(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST2_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. - */ -uint32_t TIM_GetCapture3(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - - /* Get the Capture 3 Register value */ - return TIMx->CCR3; -} - -/** - * @brief Gets the TIMx Input Capture 4 value. - * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. - * @retval Capture Compare 4 Register value. - */ -uint32_t TIM_GetCapture4(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - - /* Get the Capture 4 Register value */ - return TIMx->CCR4; -} - -/** - * @brief Sets the TIMx Input Capture 1 prescaler. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); - - /* Reset the IC1PSC Bits */ - TIMx->CCMR1 &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); - - /* Reset the IC2PSC Bits */ - TIMx->CCMR1 &= (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)~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)~TIM_CCMR2_IC4PSC; - - /* Set the IC4PSC value */ - TIMx->CCMR2 |= (uint16_t)(TIM_ICPSC << 8); -} -/** - * @} - */ - -/** @defgroup TIM_Group4 Advanced-control timers (TIM1 and TIM8) specific features - * @brief Advanced-control timers (TIM1 and TIM8) specific features - * -@verbatim - =============================================================================== - ##### Advanced-control timers (TIM1 and TIM8) specific features ##### - =============================================================================== - - ##### TIM Driver: how to use the Break feature ##### - =============================================================================== - [..] - After configuring the Timer channel(s) in the appropriate Output Compare mode: - - (#) Fill the TIM_BDTRInitStruct with the desired parameters for the Timer - Break Polarity, dead time, Lock level, the OSSI/OSSR State and the - AOE(automatic output enable). - - (#) Call TIM_BDTRConfig(TIMx, &TIM_BDTRInitStruct) to configure the Timer - - (#) Enable the Main Output using TIM_CtrlPWMOutputs(TIM1, ENABLE) - - (#) Once the break even occurs, the Timer's output signals are put in reset - state or in a known state (according to the configuration made in - TIM_BDTRConfig() function). - -@endverbatim - * @{ - */ - -/** - * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State - * and the AOE(automatic output enable). - * @param TIMx: where x can be 1 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_LIST4_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 Polarity, the OSSR State, - the OSSI State, the dead time value and the Automatic Output Enable Bit */ - TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState | - TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime | - TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity | - TIM_BDTRInitStruct->TIM_AutomaticOutput; -} - -/** - * @brief Fills each TIM_BDTRInitStruct member with its default value. - * @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure which - * will be initialized. - * @retval None - */ -void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct) -{ - /* Set the default configuration */ - TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable; - TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable; - TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF; - TIM_BDTRInitStruct->TIM_DeadTime = 0x00; - TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable; - TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low; - TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; -} - -/** - * @brief Enables or disables the TIM peripheral Main Outputs. - * @param TIMx: where x can be 1 or 8 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_LIST4_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)~TIM_BDTR_MOE; - } -} - -/** - * @brief Selects the TIM peripheral Commutation event. - * @param TIMx: where x can be 1 or 8 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_LIST4_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)~TIM_CR2_CCUS; - } -} - -/** - * @brief Sets or Resets the TIM peripheral Capture Compare Preload Control bit. - * @param TIMx: where x can be 1 or 8 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_LIST4_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)~TIM_CR2_CCPC; - } -} -/** - * @} - */ - -/** @defgroup TIM_Group5 Interrupts DMA and flags management functions - * @brief Interrupts, DMA and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts, DMA and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified TIM interrupts. - * @param TIMx: where x can be 1 to 14 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 For TIM6 and TIM7 only the parameter TIM_IT_Update can be used - * @note For TIM9 and TIM12 only one of the following parameters can be used: TIM_IT_Update, - * TIM_IT_CC1, TIM_IT_CC2 or TIM_IT_Trigger. - * @note For TIM10, TIM11, TIM13 and TIM14 only one of the following parameters can - * be used: TIM_IT_Update or TIM_IT_CC1 - * @note TIM_IT_COM and TIM_IT_Break can be used only with TIM1 and TIM8 - * - * @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 14 to select the TIM peripheral. - * @param TIM_EventSource: specifies the event source. - * This parameter can be one or more of the following values: - * @arg TIM_EventSource_Update: Timer update Event source - * @arg TIM_EventSource_CC1: Timer Capture Compare 1 Event source - * @arg TIM_EventSource_CC2: Timer Capture Compare 2 Event source - * @arg TIM_EventSource_CC3: Timer Capture Compare 3 Event source - * @arg TIM_EventSource_CC4: Timer Capture Compare 4 Event source - * @arg TIM_EventSource_COM: Timer COM event source - * @arg TIM_EventSource_Trigger: Timer Trigger Event source - * @arg TIM_EventSource_Break: Timer Break event source - * - * @note TIM6 and TIM7 can only generate an update event. - * @note TIM_EventSource_COM and TIM_EventSource_Break are used only with TIM1 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 Checks whether the specified TIM flag is set or not. - * @param TIMx: where x can be 1 to 14 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 over capture Flag - * @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 over capture Flag - * @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 over capture Flag - * @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 over capture Flag - * - * @note TIM6 and TIM7 can have only one update flag. - * @note TIM_FLAG_COM and TIM_FLAG_Break are used only with TIM1 and TIM8. - * - * @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 14 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 over capture Flag - * @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 over capture Flag - * @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 over capture Flag - * @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 over capture Flag - * - * @note TIM6 and TIM7 can have only one update flag. - * @note TIM_FLAG_COM and TIM_FLAG_Break are used only with TIM1 and TIM8. - * - * @retval None - */ -void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* 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 14 to select the TIM peripheral. - * @param TIM_IT: specifies the TIM interrupt source to check. - * This parameter can be one of the following values: - * @arg TIM_IT_Update: TIM update Interrupt source - * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source - * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source - * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source - * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source - * @arg TIM_IT_COM: TIM Commutation Interrupt source - * @arg TIM_IT_Trigger: TIM Trigger Interrupt source - * @arg TIM_IT_Break: TIM Break Interrupt source - * - * @note TIM6 and TIM7 can generate only an update interrupt. - * @note TIM_IT_COM and TIM_IT_Break are used only with TIM1 and TIM8. - * - * @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 14 to select the TIM peripheral. - * @param TIM_IT: specifies the pending bit to clear. - * This parameter can be any combination of the following values: - * @arg TIM_IT_Update: TIM1 update Interrupt source - * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source - * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source - * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source - * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source - * @arg TIM_IT_COM: TIM Commutation Interrupt source - * @arg TIM_IT_Trigger: TIM Trigger Interrupt source - * @arg TIM_IT_Break: TIM Break Interrupt source - * - * @note TIM6 and TIM7 can generate only an update interrupt. - * @note TIM_IT_COM and TIM_IT_Break are used only with TIM1 and TIM8. - * - * @retval None - */ -void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Clear the IT pending Bit */ - TIMx->SR = (uint16_t)~TIM_IT; -} - -/** - * @brief Configures the TIMx's DMA interface. - * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. - * @param TIM_DMABase: DMA Base address. - * This parameter can be one of the following values: - * @arg TIM_DMABase_CR1 - * @arg TIM_DMABase_CR2 - * @arg TIM_DMABase_SMCR - * @arg TIM_DMABase_DIER - * @arg TIM1_DMABase_SR - * @arg TIM_DMABase_EGR - * @arg TIM_DMABase_CCMR1 - * @arg TIM_DMABase_CCMR2 - * @arg TIM_DMABase_CCER - * @arg TIM_DMABase_CNT - * @arg TIM_DMABase_PSC - * @arg TIM_DMABase_ARR - * @arg TIM_DMABase_RCR - * @arg TIM_DMABase_CCR1 - * @arg TIM_DMABase_CCR2 - * @arg TIM_DMABase_CCR3 - * @arg TIM_DMABase_CCR4 - * @arg TIM_DMABase_BDTR - * @arg 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_LIST3_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 or 8 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_LIST5_PERIPH(TIMx)); - assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA sources */ - TIMx->DIER |= TIM_DMASource; - } - else - { - /* Disable the DMA sources */ - TIMx->DIER &= (uint16_t)~TIM_DMASource; - } -} - -/** - * @brief Selects the TIMx peripheral Capture Compare DMA source. - * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 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_LIST3_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)~TIM_CR2_CCDS; - } -} -/** - * @} - */ - -/** @defgroup TIM_Group6 Clocks management functions - * @brief Clocks management functions - * -@verbatim - =============================================================================== - ##### Clocks management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the TIMx internal Clock - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM - * peripheral. - * @retval None - */ -void TIM_InternalClockConfig(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST2_PERIPH(TIMx)); - - /* Disable slave mode to clock the prescaler directly with the internal clock */ - TIMx->SMCR &= (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, 8, 9 or 12 to select the TIM - * peripheral. - * @param TIM_InputTriggerSource: Trigger source. - * This parameter can be one of the following values: - * @arg TIM_TS_ITR0: Internal Trigger 0 - * @arg TIM_TS_ITR1: Internal Trigger 1 - * @arg TIM_TS_ITR2: Internal Trigger 2 - * @arg TIM_TS_ITR3: Internal Trigger 3 - * @retval None - */ -void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST2_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, 8, 9, 10, 11, 12, 13 or 14 - * 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_IC_POLARITY(TIM_ICPolarity)); - assert_param(IS_TIM_IC_FILTER(ICFilter)); - - /* Configure the Timer Input Clock Source */ - if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2) - { - TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); - } - else - { - TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); - } - /* Select the Trigger source */ - TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource); - /* Select the External clock mode1 */ - TIMx->SMCR |= TIM_SlaveMode_External1; -} - -/** - * @brief Configures the External clock Mode1 - * @param TIMx: where x can be 1, 2, 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)~TIM_SMCR_SMS; - - /* Select the External clock mode1 */ - tmpsmcr |= TIM_SlaveMode_External1; - - /* Select the Trigger selection : ETRF */ - tmpsmcr &= (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; -} -/** - * @} - */ - -/** @defgroup TIM_Group7 Synchronization management functions - * @brief Synchronization management functions - * -@verbatim - =============================================================================== - ##### Synchronization management functions ##### - =============================================================================== - - ##### TIM Driver: how to use it in synchronization Mode ##### - =============================================================================== - [..] - - *** Case of two/several Timers *** - ================================== - [..] - (#) Configure the Master Timers using the following functions: - (++) void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource); - (++) void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode); - (#) Configure the Slave Timers using the following functions: - (++) void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); - (++) void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); - - *** Case of Timers and external trigger(ETR pin) *** - ==================================================== - [..] - (#) Configure the External trigger using this function: - (++) void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); - (#) Configure the Slave Timers using the following functions: - (++) void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); - (++) void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); - -@endverbatim - * @{ - */ - -/** - * @brief Selects the Input Trigger source - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13 or 14 - * 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_LIST1_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)~TIM_SMCR_TS; - - /* Set the Input Trigger source */ - tmpsmcr |= TIM_InputTriggerSource; - - /* Write to TIMx SMCR */ - TIMx->SMCR = tmpsmcr; -} - -/** - * @brief Selects the TIMx Trigger Output Mode. - * @param TIMx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the TIM peripheral. - * - * @param TIM_TRGOSource: specifies the Trigger Output source. - * This parameter can be one of the following values: - * - * - For all TIMx - * @arg TIM_TRGOSource_Reset: The UG bit in the TIM_EGR register is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_Enable: The Counter Enable CEN is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_Update: The update event is selected as the trigger output(TRGO) - * - * - For all TIMx except TIM6 and TIM7 - * @arg TIM_TRGOSource_OC1: The trigger output sends a positive pulse when the CC1IF flag - * is to be set, as soon as a capture or compare match occurs(TRGO) - * @arg TIM_TRGOSource_OC1Ref: OC1REF signal is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_OC2Ref: OC2REF signal is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_OC3Ref: OC3REF signal is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_OC4Ref: OC4REF signal is used as the trigger output(TRGO) - * - * @retval None - */ -void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST5_PERIPH(TIMx)); - assert_param(IS_TIM_TRGO_SOURCE(TIM_TRGOSource)); - - /* Reset the MMS Bits */ - TIMx->CR2 &= (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 or 12 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) reinitialize - * 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_SLAVE_MODE(TIM_SlaveMode)); - - /* Reset the SMS Bits */ - TIMx->SMCR &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_MSM_STATE(TIM_MasterSlaveMode)); - - /* Reset the MSM Bit */ - TIMx->SMCR &= (uint16_t)~TIM_SMCR_MSM; - - /* Set or Reset the MSM Bit */ - TIMx->SMCR |= TIM_MasterSlaveMode; -} - -/** - * @brief Configures the TIMx External Trigger (ETR). - * @param TIMx: where x can be 1, 2, 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; -} -/** - * @} - */ - -/** @defgroup TIM_Group8 Specific interface management functions - * @brief Specific interface management functions - * -@verbatim - =============================================================================== - ##### Specific interface management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the TIMx Encoder Interface. - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 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_LIST2_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)~TIM_SMCR_SMS; - tmpsmcr |= TIM_EncoderMode; - - /* Select the Capture Compare 1 and the Capture Compare 2 as input */ - tmpccmr1 &= ((uint16_t)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR1_CC2S); - tmpccmr1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0; - - /* Set the TI1 and the TI2 Polarities */ - tmpccer &= ((uint16_t)~TIM_CCER_CC1P) & ((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 Enables or disables the TIMx's Hall sensor interface. - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 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_LIST2_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)~TIM_CR2_TI1S; - } -} -/** - * @} - */ - -/** @defgroup TIM_Group9 Specific remapping management function - * @brief Specific remapping management function - * -@verbatim - =============================================================================== - ##### Specific remapping management function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the TIM2, TIM5 and TIM11 Remapping input capabilities. - * @param TIMx: where x can be 2, 5 or 11 to select the TIM peripheral. - * @param TIM_Remap: specifies the TIM input remapping source. - * This parameter can be one of the following values: - * @arg TIM2_TIM8_TRGO: TIM2 ITR1 input is connected to TIM8 Trigger output(default) - * @arg TIM2_ETH_PTP: TIM2 ITR1 input is connected to ETH PTP trogger output. - * @arg TIM2_USBFS_SOF: TIM2 ITR1 input is connected to USB FS SOF. - * @arg TIM2_USBHS_SOF: TIM2 ITR1 input is connected to USB HS SOF. - * @arg TIM5_GPIO: TIM5 CH4 input is connected to dedicated Timer pin(default) - * @arg TIM5_LSI: TIM5 CH4 input is connected to LSI clock. - * @arg TIM5_LSE: TIM5 CH4 input is connected to LSE clock. - * @arg TIM5_RTC: TIM5 CH4 input is connected to RTC Output event. - * @arg TIM11_GPIO: TIM11 CH4 input is connected to dedicated Timer pin(default) - * @arg TIM11_HSE: TIM11 CH4 input is connected to HSE_RTC clock - * (HSE divided by a programmable prescaler) - * @retval None - */ -void TIM_RemapConfig(TIM_TypeDef* TIMx, uint16_t TIM_Remap) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST6_PERIPH(TIMx)); - assert_param(IS_TIM_REMAP(TIM_Remap)); - - /* Set the Timer remapping configuration */ - TIMx->OR = TIM_Remap; -} -/** - * @} - */ - -/** - * @brief Configure the TI1 as Input. - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13 or 14 - * to select the TIM peripheral. - * @param TIM_ICPolarity : The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPolarity_Rising - * @arg TIM_ICPolarity_Falling - * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSelection_DirectTI: TIM Input 1 is selected to be connected to IC1. - * @arg TIM_ICSelection_IndirectTI: TIM Input 1 is selected to be connected to IC2. - * @arg TIM_ICSelection_TRC: TIM Input 1 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -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)~TIM_CCER_CC1E; - tmpccmr1 = TIMx->CCMR1; - tmpccer = TIMx->CCER; - - /* Select the Input and set the filter */ - tmpccmr1 &= ((uint16_t)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR1_IC1F); - tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); - - /* Select the Polarity and set the CC1E Bit */ - tmpccer &= (uint16_t)~(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 or 12 to select the TIM - * peripheral. - * @param TIM_ICPolarity : The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPolarity_Rising - * @arg TIM_ICPolarity_Falling - * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSelection_DirectTI: TIM Input 2 is selected to be connected to IC2. - * @arg TIM_ICSelection_IndirectTI: TIM Input 2 is selected to be connected to IC1. - * @arg TIM_ICSelection_TRC: TIM Input 2 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -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)~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)~TIM_CCMR1_CC2S) & ((uint16_t)~TIM_CCMR1_IC2F); - tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12); - tmpccmr1 |= (uint16_t)(TIM_ICSelection << 8); - - /* Select the Polarity and set the CC2E Bit */ - tmpccer &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP); - tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC2E); - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1 ; - TIMx->CCER = tmpccer; -} - -/** - * @brief Configure the TI3 as Input. - * @param TIMx: where x can be 1, 2, 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 - * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSelection_DirectTI: TIM Input 3 is selected to be connected to IC3. - * @arg TIM_ICSelection_IndirectTI: TIM Input 3 is selected to be connected to IC4. - * @arg TIM_ICSelection_TRC: TIM Input 3 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -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)~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)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR2_IC3F); - tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); - - /* Select the Polarity and set the CC3E Bit */ - tmpccer &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP); - tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC3E); - - /* Write to TIMx CCMR2 and CCER registers */ - TIMx->CCMR2 = tmpccmr2; - TIMx->CCER = tmpccer; -} - -/** - * @brief Configure the TI4 as Input. - * @param TIMx: where x can be 1, 2, 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 - * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSelection_DirectTI: TIM Input 4 is selected to be connected to IC4. - * @arg TIM_ICSelection_IndirectTI: TIM Input 4 is selected to be connected to IC3. - * @arg TIM_ICSelection_TRC: TIM Input 4 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @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)~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)~TIM_CCMR1_CC2S) & ((uint16_t)~TIM_CCMR1_IC2F); - tmpccmr2 |= (uint16_t)(TIM_ICSelection << 8); - tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12); - - /* Select the Polarity and set the CC4E Bit */ - tmpccer &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP); - tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC4E); - - /* Write to TIMx CCMR2 and CCER registers */ - TIMx->CCMR2 = tmpccmr2; - TIMx->CCER = tmpccer ; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c deleted file mode 100644 index 40f2391e..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c +++ /dev/null @@ -1,1486 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_usart.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Universal synchronous asynchronous receiver - * transmitter (USART): - * + Initialization and Configuration - * + Data transfers - * + Multi-Processor Communication - * + LIN mode - * + Half-duplex mode - * + Smartcard mode - * + IrDA mode - * + DMA transfers management - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable peripheral clock using the following functions - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx, ENABLE) for USART1 and USART6 - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE) for USART2, USART3, - UART4 or UART5. - - (#) According to the USART mode, enable the GPIO clocks using - RCC_AHB1PeriphClockCmd() function. (The I/O can be TX, RX, CTS, - or/and SCLK). - - (#) Peripheral's alternate function: - (++) Connect the pin to the desired peripherals' Alternate - Function (AF) using GPIO_PinAFConfig() function - (++) Configure the desired pin in alternate function by: - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF - (++) Select the type, pull-up/pull-down and output speed via - GPIO_PuPd, GPIO_OType and GPIO_Speed members - (++) Call GPIO_Init() function - - (#) Program the Baud Rate, Word Length , Stop Bit, Parity, Hardware - flow control and Mode(Receiver/Transmitter) using the USART_Init() - function. - - (#) For synchronous mode, enable the clock and program the polarity, - phase and last bit using the USART_ClockInit() function. - - (#) Enable the NVIC and the corresponding interrupt using the function - USART_ITConfig() if you need to use interrupt mode. - - (#) When using the DMA mode - (++) Configure the DMA using DMA_Init() function - (++) Active the needed channel Request using USART_DMACmd() function - - (#) Enable the USART using the USART_Cmd() function. - - (#) Enable the DMA using the DMA_Cmd() function, when using DMA mode. - - -@- Refer to Multi-Processor, LIN, half-duplex, Smartcard, IrDA sub-sections - for more details - - [..] - In order to reach higher communication baudrates, it is possible to - enable the oversampling by 8 mode using the function USART_OverSampling8Cmd(). - This function should be called after enabling the USART clock (RCC_APBxPeriphClockCmd()) - and before calling the function USART_Init(). - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_usart.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup USART - * @brief USART driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/*!< USART CR1 register clear Mask ((~(uint16_t)0xE9F3)) */ -#define CR1_CLEAR_MASK ((uint16_t)(USART_CR1_M | USART_CR1_PCE | \ - USART_CR1_PS | USART_CR1_TE | \ - USART_CR1_RE)) - -/*!< USART CR2 register clock bits clear Mask ((~(uint16_t)0xF0FF)) */ -#define CR2_CLOCK_CLEAR_MASK ((uint16_t)(USART_CR2_CLKEN | USART_CR2_CPOL | \ - USART_CR2_CPHA | USART_CR2_LBCL)) - -/*!< USART CR3 register clear Mask ((~(uint16_t)0xFCFF)) */ -#define CR3_CLEAR_MASK ((uint16_t)(USART_CR3_RTSE | USART_CR3_CTSE)) - -/*!< USART Interrupts mask */ -#define IT_MASK ((uint16_t)0x001F) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup USART_Private_Functions - * @{ - */ - -/** @defgroup USART_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to initialize the USART - in asynchronous and in synchronous modes. - (+) For the asynchronous mode only these parameters can be configured: - (++) Baud Rate - (++) Word Length - (++) Stop Bit - (++) Parity: If the parity is enabled, then the MSB bit of the data written - in the data register is transmitted but is changed by the parity bit. - Depending on the frame length defined by the M bit (8-bits or 9-bits), - the possible USART frame formats are as listed in the following table: - +-------------------------------------------------------------+ - | M bit | PCE bit | USART frame | - |---------------------|---------------------------------------| - | 0 | 0 | | SB | 8 bit data | STB | | - |---------|-----------|---------------------------------------| - | 0 | 1 | | SB | 7 bit data | PB | STB | | - |---------|-----------|---------------------------------------| - | 1 | 0 | | SB | 9 bit data | STB | | - |---------|-----------|---------------------------------------| - | 1 | 1 | | SB | 8 bit data | PB | STB | | - +-------------------------------------------------------------+ - (++) Hardware flow control - (++) Receiver/transmitter modes - - [..] - The USART_Init() function follows the USART asynchronous configuration - procedure (details for the procedure are available in reference manual (RM0090)). - - (+) For the synchronous mode in addition to the asynchronous mode parameters these - parameters should be also configured: - (++) USART Clock Enabled - (++) USART polarity - (++) USART phase - (++) USART LastBit - - [..] - These parameters can be configured using the USART_ClockInit() function. - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the USARTx peripheral registers to their default reset values. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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); - } - else if (USARTx == USART6) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE); - } - else if (USARTx == UART7) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART7, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART7, DISABLE); - } - else - { - if (USARTx == UART8) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART8, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART8, DISABLE); - } - } -} - -/** - * @brief Initializes the USARTx peripheral according to the specified - * parameters in the USART_InitStruct . - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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; - 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, USART3 and USART6 */ - if (USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None) - { - assert_param(IS_USART_1236_PERIPH(USARTx)); - } - -/*---------------------------- USART CR2 Configuration -----------------------*/ - tmpreg = USARTx->CR2; - - /* Clear STOP[13:12] bits */ - tmpreg &= (uint32_t)~((uint32_t)USART_CR2_STOP); - - /* 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 &= (uint32_t)~((uint32_t)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 &= (uint32_t)~((uint32_t)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 ((USARTx == USART1) || (USARTx == USART6)) - { - apbclock = RCC_ClocksStatus.PCLK2_Frequency; - } - else - { - apbclock = RCC_ClocksStatus.PCLK1_Frequency; - } - - /* Determine the integer part */ - if ((USARTx->CR1 & USART_CR1_OVER8) != 0) - { - /* Integer part computing in case Oversampling mode is 8 Samples */ - integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate))); - } - else /* if ((USARTx->CR1 & USART_CR1_OVER8) == 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 & USART_CR1_OVER8) != 0) - { - tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07); - } - else /* if ((USARTx->CR1 & USART_CR1_OVER8) == 0) */ - { - tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F); - } - - /* Write to USART BRR register */ - 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 or 6 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_1236_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 &= (uint32_t)~((uint32_t)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: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR1_UE; - } - else - { - /* Disable the selected USART by clearing the UE bit in the CR1 register */ - USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_UE); - } -} - -/** - * @brief Sets the system clock prescaler. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= USART_GTPR_GT; - /* Set the USART prescaler */ - USARTx->GTPR |= USART_Prescaler; -} - -/** - * @brief Enables or disables the USART's 8x oversampling mode. - * @note This function has to be called before calling USART_Init() function - * in order to have correct baudrate Divider value. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @param NewState: new state of the USART 8x oversampling mode. - * This parameter can be: ENABLE or DISABLE. - * @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 |= USART_CR1_OVER8; - } - else - { - /* Disable the 8x Oversampling mode by clearing the OVER8 bit in the CR1 register */ - USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_OVER8); - } -} - -/** - * @brief Enables or disables the USART's one bit sampling method. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR3_ONEBIT; - } - else - { - /* Disable the one bit method by clearing the ONEBITE bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT); - } -} - -/** - * @} - */ - -/** @defgroup USART_Group2 Data transfers functions - * @brief Data transfers functions - * -@verbatim - =============================================================================== - ##### Data transfers functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART data - transfers. - [..] - During an USART reception, data shifts in least significant bit first through - the RX pin. In this mode, the USART_DR register consists of a buffer (RDR) - between the internal bus and the received shift register. - [..] - When a transmission is taking place, a write instruction to the USART_DR register - stores the data in the TDR register and which is copied in the shift register - at the end of the current transmission. - [..] - The read access of the USART_DR register can be done using the USART_ReceiveData() - function and returns the RDR buffered value. Whereas a write access to the USART_DR - can be done using USART_SendData() function and stores the written data into - TDR buffer. - -@endverbatim - * @{ - */ - -/** - * @brief Transmits single data through the USARTx peripheral. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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); -} - -/** - * @} - */ - -/** @defgroup USART_Group3 MultiProcessor Communication functions - * @brief Multi-Processor Communication functions - * -@verbatim - =============================================================================== - ##### Multi-Processor Communication functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART - multiprocessor communication. - [..] - For instance one of the USARTs can be the master, its TX output is connected - to the RX input of the other USART. The others are slaves, their respective - TX outputs are logically ANDed together and connected to the RX input of the - master. - [..] - USART multiprocessor communication is possible through the following procedure: - (#) Program the Baud rate, Word length = 9 bits, Stop bits, Parity, Mode - transmitter or Mode receiver and hardware flow control values using - the USART_Init() function. - (#) Configures the USART address using the USART_SetAddress() function. - (#) Configures the wake up method (USART_WakeUp_IdleLine or USART_WakeUp_AddressMark) - using USART_WakeUpConfig() function only for the slaves. - (#) Enable the USART using the USART_Cmd() function. - (#) Enter the USART slaves in mute mode using USART_ReceiverWakeUpCmd() function. - [..] - The USART Slave exit from mute mode when receive the wake up condition. - -@endverbatim - * @{ - */ - -/** - * @brief Sets the address of the USART node. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= (uint16_t)~((uint16_t)USART_CR2_ADD); - /* Set the USART address node */ - USARTx->CR2 |= USART_Address; -} - -/** - * @brief Determines if the USART is in mute mode or not. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR1_RWU; - } - else - { - /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */ - USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_RWU); - } -} -/** - * @brief Selects the USART WakeUp method. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= (uint16_t)~((uint16_t)USART_CR1_WAKE); - USARTx->CR1 |= USART_WakeUp; -} - -/** - * @} - */ - -/** @defgroup USART_Group4 LIN mode functions - * @brief LIN mode functions - * -@verbatim - =============================================================================== - ##### LIN mode functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART LIN - Mode communication. - [..] - In LIN mode, 8-bit data format with 1 stop bit is required in accordance with - the LIN standard. - [..] - Only this LIN Feature is supported by the USART IP: - (+) LIN Master Synchronous Break send capability and LIN slave break detection - capability : 13-bit break generation and 10/11 bit break detection - - [..] - USART LIN Master transmitter communication is possible through the following - procedure: - (#) Program the Baud rate, Word length = 8bits, Stop bits = 1bit, Parity, - Mode transmitter or Mode receiver and hardware flow control values using - the USART_Init() function. - (#) Enable the USART using the USART_Cmd() function. - (#) Enable the LIN mode using the USART_LINCmd() function. - (#) Send the break character using USART_SendBreak() function. - [..] - USART LIN Master receiver communication is possible through the following procedure: - (#) Program the Baud rate, Word length = 8bits, Stop bits = 1bit, Parity, - Mode transmitter or Mode receiver and hardware flow control values using - the USART_Init() function. - (#) Enable the USART using the USART_Cmd() function. - (#) Configures the break detection length using the USART_LINBreakDetectLengthConfig() - function. - (#) Enable the LIN mode using the USART_LINCmd() function. - - -@- In LIN mode, the following bits must be kept cleared: - (+@) CLKEN in the USART_CR2 register, - (+@) STOP[1:0], SCEN, HDSEL and IREN in the USART_CR3 register. - -@endverbatim - * @{ - */ - -/** - * @brief Sets the USART LIN Break detection length. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= (uint16_t)~((uint16_t)USART_CR2_LBDL); - USARTx->CR2 |= USART_LINBreakDetectLength; -} - -/** - * @brief Enables or disables the USART's LIN mode. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR2_LINEN; - } - else - { - /* Disable the LIN mode by clearing the LINEN bit in the CR2 register */ - USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_LINEN); - } -} - -/** - * @brief Transmits break characters. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @retval None - */ -void USART_SendBreak(USART_TypeDef* USARTx) -{ - /* Check the parameters */ - assert_param(IS_USART_ALL_PERIPH(USARTx)); - - /* Send break characters */ - USARTx->CR1 |= USART_CR1_SBK; -} - -/** - * @} - */ - -/** @defgroup USART_Group5 Halfduplex mode function - * @brief Half-duplex mode function - * -@verbatim - =============================================================================== - ##### Half-duplex mode function ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART - Half-duplex communication. - [..] - The USART can be configured to follow a single-wire half-duplex protocol where - the TX and RX lines are internally connected. - [..] - USART Half duplex communication is possible through the following procedure: - (#) Program the Baud rate, Word length, Stop bits, Parity, Mode transmitter - or Mode receiver and hardware flow control values using the USART_Init() - function. - (#) Configures the USART address using the USART_SetAddress() function. - (#) Enable the USART using the USART_Cmd() function. - (#) Enable the half duplex mode using USART_HalfDuplexCmd() function. - - - -@- The RX pin is no longer used - -@- In Half-duplex mode the following bits must be kept cleared: - (+@) LINEN and CLKEN bits in the USART_CR2 register. - (+@) SCEN and IREN bits in the USART_CR3 register. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the USART's Half Duplex communication. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR3_HDSEL; - } - else - { - /* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_HDSEL); - } -} - -/** - * @} - */ - - -/** @defgroup USART_Group6 Smartcard mode functions - * @brief Smartcard mode functions - * -@verbatim - =============================================================================== - ##### Smartcard mode functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART - Smartcard communication. - [..] - The Smartcard interface is designed to support asynchronous protocol Smartcards as - defined in the ISO 7816-3 standard. - [..] - The USART can provide a clock to the smartcard through the SCLK output. - In smartcard mode, SCLK is not associated to the communication but is simply derived - from the internal peripheral input clock through a 5-bit prescaler. - [..] - Smartcard communication is possible through the following procedure: - (#) Configures the Smartcard Prescaler using the USART_SetPrescaler() function. - (#) Configures the Smartcard Guard Time using the USART_SetGuardTime() function. - (#) Program the USART clock using the USART_ClockInit() function as following: - (++) USART Clock enabled - (++) USART CPOL Low - (++) USART CPHA on first edge - (++) USART Last Bit Clock Enabled - (#) Program the Smartcard interface using the USART_Init() function as following: - (++) Word Length = 9 Bits - (++) 1.5 Stop Bit - (++) Even parity - (++) BaudRate = 12096 baud - (++) Hardware flow control disabled (RTS and CTS signals) - (++) Tx and Rx enabled - (#) POptionally you can enable the parity error interrupt using the USART_ITConfig() - function - (#) PEnable the USART using the USART_Cmd() function. - (#) PEnable the Smartcard NACK using the USART_SmartCardNACKCmd() function. - (#) PEnable the Smartcard interface using the USART_SmartCardCmd() function. - - Please refer to the ISO 7816-3 specification for more details. - - -@- It is also possible to choose 0.5 stop bit for receiving but it is recommended - to use 1.5 stop bits for both transmitting and receiving to avoid switching - between the two configurations. - -@- In smartcard mode, the following bits must be kept cleared: - (+@) LINEN bit in the USART_CR2 register. - (+@) HDSEL and IREN bits in the USART_CR3 register. - -@- Smartcard mode is available on USART peripherals only (not available on UART4 - and UART5 peripherals). - -@endverbatim - * @{ - */ - -/** - * @brief Sets the specified USART guard time. - * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART or - * UART peripheral. - * @param USART_GuardTime: specifies the guard time. - * @retval None - */ -void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime) -{ - /* Check the parameters */ - assert_param(IS_USART_1236_PERIPH(USARTx)); - - /* Clear the USART Guard time */ - USARTx->GTPR &= USART_GTPR_PSC; - /* Set the USART guard time */ - USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08); -} - -/** - * @brief Enables or disables the USART's Smart Card mode. - * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART or - * UART peripheral. - * @param NewState: new state of the Smart Card mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_USART_1236_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 |= USART_CR3_SCEN; - } - else - { - /* Disable the SC mode by clearing the SCEN bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_SCEN); - } -} - -/** - * @brief Enables or disables NACK transmission. - * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART or - * UART peripheral. - * @param NewState: new state of the NACK transmission. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_USART_1236_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 |= USART_CR3_NACK; - } - else - { - /* Disable the NACK transmission by clearing the NACK bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_NACK); - } -} - -/** - * @} - */ - -/** @defgroup USART_Group7 IrDA mode functions - * @brief IrDA mode functions - * -@verbatim - =============================================================================== - ##### IrDA mode functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART - IrDA communication. - [..] - IrDA is a half duplex communication protocol. If the Transmitter is busy, any data - on the IrDA receive line will be ignored by the IrDA decoder and if the Receiver - is busy, data on the TX from the USART to IrDA will not be encoded by IrDA. - While receiving data, transmission should be avoided as the data to be transmitted - could be corrupted. - [..] - IrDA communication is possible through the following procedure: - (#) Program the Baud rate, Word length = 8 bits, Stop bits, Parity, Transmitter/Receiver - modes and hardware flow control values using the USART_Init() function. - (#) Enable the USART using the USART_Cmd() function. - (#) Configures the IrDA pulse width by configuring the prescaler using - the USART_SetPrescaler() function. - (#) Configures the IrDA USART_IrDAMode_LowPower or USART_IrDAMode_Normal mode - using the USART_IrDAConfig() function. - (#) Enable the IrDA using the USART_IrDACmd() function. - - -@- A pulse of width less than two and greater than one PSC period(s) may or may - not be rejected. - -@- The receiver set up time should be managed by software. The IrDA physical layer - specification specifies a minimum of 10 ms delay between transmission and - reception (IrDA is a half duplex protocol). - -@- In IrDA mode, the following bits must be kept cleared: - (+@) LINEN, STOP and CLKEN bits in the USART_CR2 register. - (+@) SCEN and HDSEL bits in the USART_CR3 register. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the USART's IrDA interface. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= (uint16_t)~((uint16_t)USART_CR3_IRLP); - USARTx->CR3 |= USART_IrDAMode; -} - -/** - * @brief Enables or disables the USART's IrDA interface. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR3_IREN; - } - else - { - /* Disable the IrDA mode by clearing the IREN bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_IREN); - } -} - -/** - * @} - */ - -/** @defgroup USART_Group8 DMA transfers management functions - * @brief DMA transfers management functions - * -@verbatim - =============================================================================== - ##### DMA transfers management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the USART's DMA interface. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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. - * @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; - } -} - -/** - * @} - */ - -/** @defgroup USART_Group9 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to configure the USART - Interrupts sources, DMA channels requests and check or clear the flags or - pending bits status. - The user should identify which mode will be used in his application to manage - the communication: Polling mode, Interrupt mode or DMA mode. - - *** Polling Mode *** - ==================== - [..] - In Polling Mode, the SPI communication can be managed by 10 flags: - (#) USART_FLAG_TXE : to indicate the status of the transmit buffer register - (#) USART_FLAG_RXNE : to indicate the status of the receive buffer register - (#) USART_FLAG_TC : to indicate the status of the transmit operation - (#) USART_FLAG_IDLE : to indicate the status of the Idle Line - (#) USART_FLAG_CTS : to indicate the status of the nCTS input - (#) USART_FLAG_LBD : to indicate the status of the LIN break detection - (#) USART_FLAG_NE : to indicate if a noise error occur - (#) USART_FLAG_FE : to indicate if a frame error occur - (#) USART_FLAG_PE : to indicate if a parity error occur - (#) USART_FLAG_ORE : to indicate if an Overrun error occur - [..] - In this Mode it is advised to use the following functions: - (+) FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); - (+) void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); - - *** Interrupt Mode *** - ====================== - [..] - In Interrupt Mode, the USART communication can be managed by 8 interrupt sources - and 10 pending bits: - - (#) Pending Bits: - - (##) USART_IT_TXE : to indicate the status of the transmit buffer register - (##) USART_IT_RXNE : to indicate the status of the receive buffer register - (##) USART_IT_TC : to indicate the status of the transmit operation - (##) USART_IT_IDLE : to indicate the status of the Idle Line - (##) USART_IT_CTS : to indicate the status of the nCTS input - (##) USART_IT_LBD : to indicate the status of the LIN break detection - (##) USART_IT_NE : to indicate if a noise error occur - (##) USART_IT_FE : to indicate if a frame error occur - (##) USART_IT_PE : to indicate if a parity error occur - (##) USART_IT_ORE : to indicate if an Overrun error occur - - (#) Interrupt Source: - - (##) USART_IT_TXE : specifies the interrupt source for the Tx buffer empty - interrupt. - (##) USART_IT_RXNE : specifies the interrupt source for the Rx buffer not - empty interrupt. - (##) USART_IT_TC : specifies the interrupt source for the Transmit complete - interrupt. - (##) USART_IT_IDLE : specifies the interrupt source for the Idle Line interrupt. - (##) USART_IT_CTS : specifies the interrupt source for the CTS interrupt. - (##) USART_IT_LBD : specifies the interrupt source for the LIN break detection - interrupt. - (##) USART_IT_PE : specifies the interrupt source for the parity error interrupt. - (##) USART_IT_ERR : specifies the interrupt source for the errors interrupt. - - -@@- Some parameters are coded in order to use them as interrupt source - or as pending bits. - [..] - In this Mode it is advised to use the following functions: - (+) void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState); - (+) ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); - (+) void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT); - - *** DMA Mode *** - ================ - [..] - In DMA Mode, the USART communication can be managed by 2 DMA Channel requests: - (#) USART_DMAReq_Tx: specifies the Tx buffer DMA transfer request - (#) USART_DMAReq_Rx: specifies the Rx buffer DMA transfer request - [..] - In this Mode it is advised to use the following function: - (+) void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified USART interrupts. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 - * @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_1236_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 Checks whether the specified USART flag is set or not. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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_1236_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: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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()). - * @note RXNE flag can be also cleared by a read to the USART_DR register - * (USART_ReceiveData()). - * @note 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()). - * @note 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_1236_PERIPH(USARTx)); - } - - USARTx->SR = (uint16_t)~USART_FLAG; -} - -/** - * @brief Checks whether the specified USART interrupt has occurred or not. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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: 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_ORE_RX : OverRun Error interrupt if the RXNEIE bit is set - * @arg USART_IT_ORE_ER : OverRun Error interrupt if the EIE bit is set - * @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_1236_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: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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()). - * @note RXNE pending bit can be also cleared by a read to the USART_DR register - * (USART_ReceiveData()). - * @note 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()). - * @note 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_1236_PERIPH(USARTx)); - } - - bitpos = USART_IT >> 0x08; - itmask = ((uint16_t)0x01 << (uint16_t)bitpos); - USARTx->SR = (uint16_t)~itmask; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c deleted file mode 100644 index d3e651b3..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c +++ /dev/null @@ -1,307 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_wwdg.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Window watchdog (WWDG) peripheral: - * + Prescaler, Refresh window and Counter configuration - * + WWDG activation - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### WWDG features ##### - =============================================================================== - [..] - Once enabled the WWDG generates a system reset on expiry of a programmed - time period, unless the program refreshes the counter (downcounter) - before to reach 0x3F value (i.e. a reset is generated when the counter - value rolls over from 0x40 to 0x3F). - An MCU reset is also generated if the counter value is refreshed - before the counter has reached the refresh window value. This - implies that the counter must be refreshed in a limited window. - - Once enabled the WWDG cannot be disabled except by a system reset. - - WWDGRST flag in RCC_CSR register can be used to inform when a WWDG - reset occurs. - - The WWDG counter input clock is derived from the APB clock divided - by a programmable prescaler. - - WWDG counter clock = PCLK1 / Prescaler - WWDG timeout = (WWDG counter clock) * (counter value) - - Min-max timeout value @42 MHz(PCLK1): ~97.5 us / ~49.9 ms - - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable WWDG clock using RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE) function - - (#) Configure the WWDG prescaler using WWDG_SetPrescaler() function - - (#) Configure the WWDG refresh window using WWDG_SetWindowValue() function - - (#) Set the WWDG counter value and start it using WWDG_Enable() function. - When the WWDG is enabled the counter value should be configured to - a value greater than 0x40 to prevent generating an immediate reset. - - (#) Optionally you can enable the Early wakeup interrupt which is - generated when the counter reach 0x40. - Once enabled this interrupt cannot be disabled except by a system reset. - - (#) Then the application program must refresh the WWDG counter at regular - intervals during normal operation to prevent an MCU reset, using - WWDG_SetCounter() function. This operation must occur only when - the counter value is lower than the refresh window value, - programmed using WWDG_SetWindowValue(). - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_wwdg.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup WWDG - * @brief WWDG driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* ----------- 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 ------------------------ */ -/* CFR register bit mask */ -#define CFR_WDGTB_MASK ((uint32_t)0xFFFFFE7F) -#define CFR_W_MASK ((uint32_t)0xFFFFFF80) -#define BIT_MASK ((uint8_t)0x7F) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup WWDG_Private_Functions - * @{ - */ - -/** @defgroup WWDG_Group1 Prescaler, Refresh window and Counter configuration functions - * @brief Prescaler, Refresh window and Counter configuration functions - * -@verbatim - =============================================================================== - ##### Prescaler, Refresh window and Counter configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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). - * @note Once enabled this interrupt cannot be disabled except by a system reset. - * @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 (to prevent generating - * an immediate reset) - * @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; -} -/** - * @} - */ - -/** @defgroup WWDG_Group2 WWDG activation functions - * @brief WWDG activation functions - * -@verbatim - =============================================================================== - ##### WWDG activation function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 (to prevent generating - * an immediate reset) - * @retval None - */ -void WWDG_Enable(uint8_t Counter) -{ - /* Check the parameters */ - assert_param(IS_WWDG_COUNTER(Counter)); - WWDG->CR = WWDG_CR_WDGA | Counter; -} -/** - * @} - */ - -/** @defgroup WWDG_Group3 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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) -{ - FlagStatus bitstatus = RESET; - - if ((WWDG->SR) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears Early Wakeup interrupt flag. - * @param None - * @retval None - */ -void WWDG_ClearFlag(void) -{ - WWDG->SR = (uint32_t)RESET; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/stm32f4xx_conf.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/stm32f4xx_conf.h deleted file mode 100644 index 62705e84..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/stm32f4xx_conf.h +++ /dev/null @@ -1,94 +0,0 @@ -/** - ****************************************************************************** - * @file SysTick/SysTick_Example/stm32f4xx_conf.h - * @author MCD Application Team - * @version V1.1.0 - * @date 18-January-2013 - * @brief Library configuration file. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_CONF_H -#define __STM32F4xx_CONF_H - -/* Includes ------------------------------------------------------------------*/ -/* Uncomment the line below to enable peripheral header file inclusion */ -#include "stm32f4xx_adc.h" -#include "stm32f4xx_can.h" -#include "stm32f4xx_crc.h" -#include "stm32f4xx_cryp.h" -#include "stm32f4xx_dac.h" -#include "stm32f4xx_dbgmcu.h" -#include "stm32f4xx_dcmi.h" -#include "stm32f4xx_dma.h" -#include "stm32f4xx_exti.h" -#include "stm32f4xx_flash.h" -#include "stm32f4xx_fsmc.h" -#include "stm32f4xx_hash.h" -#include "stm32f4xx_gpio.h" -#include "stm32f4xx_i2c.h" -#include "stm32f4xx_iwdg.h" -#include "stm32f4xx_pwr.h" -#include "stm32f4xx_rcc.h" -#include "stm32f4xx_rng.h" -#include "stm32f4xx_rtc.h" -#include "stm32f4xx_sdio.h" -#include "stm32f4xx_spi.h" -#include "stm32f4xx_syscfg.h" -#include "stm32f4xx_tim.h" -#include "stm32f4xx_usart.h" -#include "stm32f4xx_wwdg.h" -#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* If an external clock source is used, then the value of the following define - should be set to the value of the external clock source, else, if no external - clock is used, keep this define commented */ -/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ - - -/* Uncomment the line below to expanse the "assert_param" macro in the - Standard Peripheral Library drivers code */ -/* #define USE_FULL_ASSERT 1 */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT - -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0) -#endif /* USE_FULL_ASSERT */ - -#endif /* __STM32F4xx_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/clock-arch.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/clock-arch.c deleted file mode 100644 index 1e213136..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/clock-arch.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: clock-arch.c,v 1.2 2006/06/12 08:00:31 adam Exp $ - */ - -/** - * \file - * Implementation of architecture-specific clock functionality - * \author - * Adam Dunkels - */ - -#include "clock-arch.h" -#include "boot.h" - -/*---------------------------------------------------------------------------*/ -clock_time_t -clock_time(void) -{ - return (clock_time_t)TimerGet(); -} -/*---------------------------------------------------------------------------*/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/clock-arch.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/clock-arch.h deleted file mode 100644 index aa97f0e7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/clock-arch.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $ - */ - -#ifndef __CLOCK_ARCH_H__ -#define __CLOCK_ARCH_H__ - -typedef int clock_time_t; -#define CLOCK_CONF_SECOND 1000 - -#endif /* __CLOCK_ARCH_H__ */ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/netdev.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/netdev.c deleted file mode 100644 index 09d0d2a7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/netdev.c +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Copyright (c) 2001, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Author: Adam Dunkels - * - * $Id: netdev.c,v 1.8 2006/06/07 08:39:58 adam Exp $ - */ - - -/*---------------------------------------------------------------------------*/ -#include "uip.h" -#include "uip_arp.h" -#include "boot.h" -#include "stm32f4xx.h" /* STM32 registers */ -#include "stm32f4xx_conf.h" /* STM32 peripheral drivers */ -#include "stm32_eth.h" /* STM32 ethernet library */ -#include /* for memcpy */ - - -/*---------------------------------------------------------------------------*/ -#define NETDEV_DEFAULT_MACADDR0 (0x08) -#define NETDEV_DEFAULT_MACADDR1 (0x00) -#define NETDEV_DEFAULT_MACADDR2 (0x27) -#define NETDEV_DEFAULT_MACADDR3 (0x69) -#define NETDEV_DEFAULT_MACADDR4 (0x5B) -#define NETDEV_DEFAULT_MACADDR5 (0x45) - - -/*---------------------------------------------------------------------------*/ -static void netdev_TxDscrInit(void); -static void netdev_RxDscrInit(void); - -/*---------------------------------------------------------------------------*/ -typedef union _TranDesc0_t -{ - uint32_t Data; - struct { - uint32_t DB : 1; - uint32_t UF : 1; - uint32_t ED : 1; - uint32_t CC : 4; - uint32_t VF : 1; - uint32_t EC : 1; - uint32_t LC : 1; - uint32_t NC : 1; - uint32_t LSC : 1; - uint32_t IPE : 1; - uint32_t FF : 1; - uint32_t JT : 1; - uint32_t ES : 1; - uint32_t IHE : 1; - uint32_t : 3; - uint32_t TCH : 1; - uint32_t TER : 1; - uint32_t CIC : 2; - uint32_t : 2; - uint32_t DP : 1; - uint32_t DC : 1; - uint32_t FS : 1; - uint32_t LSEG : 1; - uint32_t IC : 1; - uint32_t OWN : 1; - }; -} TranDesc0_t, * pTranDesc0_t; - -typedef union _TranDesc1_t -{ - uint32_t Data; - struct { - uint32_t TBS1 :13; - uint32_t : 3; - uint32_t TBS2 :12; - uint32_t : 3; - }; -} TranDesc1_t, * pTranDesc1_t; - -typedef union _RecDesc0_t -{ - uint32_t Data; - struct { - uint32_t RMAM_PCE : 1; - uint32_t CE : 1; - uint32_t DE : 1; - uint32_t RE : 1; - uint32_t RWT : 1; - uint32_t FT : 1; - uint32_t LC : 1; - uint32_t IPHCE : 1; - uint32_t LS : 1; - uint32_t FS : 1; - uint32_t VLAN : 1; - uint32_t OE : 1; - uint32_t LE : 1; - uint32_t SAF : 1; - uint32_t DERR : 1; - uint32_t ES : 1; - uint32_t FL :14; - uint32_t AFM : 1; - uint32_t OWN : 1; - }; -} RecDesc0_t, * pRecDesc0_t; - -typedef union _recDesc1_t -{ - uint32_t Data; - struct { - uint32_t RBS1 :13; - uint32_t : 1; - uint32_t RCH : 1; - uint32_t RER : 1; - uint32_t RBS2 :14; - uint32_t DIC : 1; - }; -} RecDesc1_t, * pRecDesc1_t; - -typedef union _EnetDmaDesc_t -{ - uint32_t Data[4]; - // Rx DMA descriptor - struct - { - RecDesc0_t RxDesc0; - RecDesc1_t RxDesc1; - uint32_t * pBuffer; - union - { - uint32_t * pBuffer2; - union _EnetDmaDesc_t * pEnetDmaNextDesc; - }; - } Rx; - // Tx DMA descriptor - struct - { - TranDesc0_t TxDesc0; - TranDesc1_t TxDesc1; - uint32_t * pBuffer1; - union - { - uint32_t * pBuffer2; - union _EnetDmaDesc_t * pEnetDmaNextDesc; - }; - } Tx; -} EnetDmaDesc_t, * pEnetDmaDesc_t; - - -/*---------------------------------------------------------------------------*/ -uint8_t RxBuff[UIP_CONF_BUFFER_SIZE] __attribute__ ((aligned (4))); -uint8_t TxBuff[UIP_CONF_BUFFER_SIZE] __attribute__ ((aligned (4))); - -EnetDmaDesc_t EnetDmaRx __attribute__((aligned (128))); -EnetDmaDesc_t EnetDmaTx __attribute__ ((aligned (128))); - - -/*---------------------------------------------------------------------------*/ -void netdev_init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - ETH_InitTypeDef ETH_InitStructure; - - /* Enable ETHERNET clocks */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx | - RCC_AHB1Periph_ETH_MAC_Rx | RCC_AHB1Periph_ETH_MAC_PTP, ENABLE); - - - /* Enable GPIOs clocks */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | - RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG, ENABLE); - - /* Enable SYSCFG clock */ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); - /*Select RMII Interface*/ - SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII); - - /* ETHERNET pins configuration */ - /* PA - ETH_RMII_REF_CLK: PA1 - ETH_RMII_MDIO: PA2 - ETH_RMII_MDINT: PA3 - ETH_RMII_CRS_DV: PA7 - */ - - /* Configure PA1, PA2, PA3 and PA7*/ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - /* Connect PA1, PA2, PA3 and PA7 to ethernet module*/ - GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH); - - /* PB - ETH_RMII_TX_EN: PG11 - */ - - /* Configure PG11*/ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOG, &GPIO_InitStructure); - - /* Connect PG11 to ethernet module*/ - GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_ETH); - - /* PC - ETH_RMII_MDC: PC1 - ETH_RMII_RXD0: PC4 - ETH_RMII_RXD1: PC5 - */ - - /* Configure PC1, PC4 and PC5*/ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOC, &GPIO_InitStructure); - - /* Connect PC1, PC4 and PC5 to ethernet module*/ - GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH); - - /* PG - ETH_RMII_TXD0: PG13 - ETH_RMII_TXD1: PG14 - */ - - /* Configure PG13 and PG14*/ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOG, &GPIO_InitStructure); - - /* Connect PG13 and PG14 to ethernet module*/ - GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH); - - /* Reset ETHERNET on AHB Bus */ - ETH_DeInit(); - - /* Software reset */ - ETH_SoftwareReset(); - - /* Wait for software reset */ - while(ETH_GetSoftwareResetStatus()==SET); - - /* ETHERNET Configuration ------------------------------------------------------*/ - /* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */ - ETH_StructInit(Ð_InitStructure); - - /* Fill ETH_InitStructure parametrs */ - /*------------------------ MAC -----------------------------------*/ - ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable ; - ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable; - ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable; - ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable; - ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Enable; - ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Disable; - ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable; - ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect; - ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect; - ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex; - ETH_InitStructure.ETH_Speed = ETH_Speed_100M; - - unsigned int PhyAddr; - union { - uint32_t HI_LO; - struct - { - uint16_t LO; - uint16_t HI; - }; - } PHYID; - for(PhyAddr = 0; 32 > PhyAddr; PhyAddr++) - { - // datasheet for the ks8721bl ethernet controller (http://www.micrel.com/_PDF/Ethernet/datasheets/ks8721bl-sl.pdf) - // page 20 --> PHY Identifier 1 and 2 - PHYID.HI = ETH_ReadPHYRegister(PhyAddr,2); // 0x0022 - PHYID.LO = ETH_ReadPHYRegister(PhyAddr,3); // 0x1619 - if ((0x00221619 == PHYID.HI_LO) || (0x0007C0F1 == PHYID.HI_LO)) - break; - } - if (32 < PhyAddr) - { - ASSERT_RT(BLT_FALSE); - } - /* Configure Ethernet */ - if(0 == ETH_Init(Ð_InitStructure, PhyAddr)) - { - ASSERT_RT(BLT_FALSE); - } - - netdev_TxDscrInit(); - netdev_RxDscrInit(); - ETH_Start(); -} - - -/*---------------------------------------------------------------------------*/ -void netdev_init_mac(void) -{ - struct uip_eth_addr macAddress; - - /* set the default MAC address */ - macAddress.addr[0] = NETDEV_DEFAULT_MACADDR0; - macAddress.addr[1] = NETDEV_DEFAULT_MACADDR1; - macAddress.addr[2] = NETDEV_DEFAULT_MACADDR2; - macAddress.addr[3] = NETDEV_DEFAULT_MACADDR3; - macAddress.addr[4] = NETDEV_DEFAULT_MACADDR4; - macAddress.addr[5] = NETDEV_DEFAULT_MACADDR5; - uip_setethaddr(macAddress); -} - - -/*---------------------------------------------------------------------------*/ -unsigned int netdev_read(void) -{ - uint32_t size; - /*check for validity*/ - if(0 == EnetDmaRx.Rx.RxDesc0.OWN) - { - /*Get the size of the packet*/ - size = EnetDmaRx.Rx.RxDesc0.FL; // CRC - memcpy(uip_buf, RxBuff, size); //string.h library*/ - } - else - { - return 0; - } - /* Give the buffer back to ENET */ - EnetDmaRx.Rx.RxDesc0.OWN = 1; - /* Start the receive operation */ - ETH->DMARPDR = 1; - /* Return no error */ - return size; -} - - -/*---------------------------------------------------------------------------*/ -void netdev_send(void) -{ - while(EnetDmaTx.Tx.TxDesc0.OWN); - - /* Copy the application buffer to the driver buffer - Using this MEMCOPY_L2L_BY4 makes the copy routine faster - than memcpy */ - memcpy(TxBuff, uip_buf, uip_len); - - /* Assign ENET address to Temp Tx Array */ - EnetDmaTx.Tx.pBuffer1 = (uint32_t *)TxBuff; - - /* Setting the Frame Length*/ - EnetDmaTx.Tx.TxDesc0.Data = 0; - EnetDmaTx.Tx.TxDesc0.TCH = 1; - EnetDmaTx.Tx.TxDesc0.LSEG = 1; - EnetDmaTx.Tx.TxDesc0.FS = 1; - EnetDmaTx.Tx.TxDesc0.DC = 0; - EnetDmaTx.Tx.TxDesc0.DP = 0; - - EnetDmaTx.Tx.TxDesc1.Data = 0; - EnetDmaTx.Tx.TxDesc1.TBS1 = (uip_len&0xFFF); - - /* Start the ENET by setting the VALID bit in dmaPackStatus of current descr*/ - EnetDmaTx.Tx.TxDesc0.OWN = 1; - - /* Start the transmit operation */ - ETH->DMATPDR = 1; -} - - -/*---------------------------------------------------------------------------*/ -static void netdev_RxDscrInit(void) -{ - /* Initialization */ - /* Assign temp Rx array to the ENET buffer */ - EnetDmaRx.Rx.pBuffer = (uint32_t *)RxBuff; - - /* Initialize RX ENET Status and control */ - EnetDmaRx.Rx.RxDesc0.Data = 0; - - /* Initialize the next descriptor- In our case its single descriptor */ - EnetDmaRx.Rx.pEnetDmaNextDesc = &EnetDmaRx; - - EnetDmaRx.Rx.RxDesc1.Data = 0; - EnetDmaRx.Rx.RxDesc1.RER = 0; // end of ring - EnetDmaRx.Rx.RxDesc1.RCH = 1; // end of ring - - /* Set the max packet size */ - EnetDmaRx.Rx.RxDesc1.RBS1 = UIP_CONF_BUFFER_SIZE; - - /* Setting the VALID bit */ - EnetDmaRx.Rx.RxDesc0.OWN = 1; - /* Setting the RX NEXT Descriptor Register inside the ENET */ - ETH->DMARDLAR = (uint32_t)&EnetDmaRx; -} - - -/*---------------------------------------------------------------------------*/ -static void netdev_TxDscrInit(void) -{ - /* ENET Start Address */ - EnetDmaTx.Tx.pBuffer1 = (uint32_t *)TxBuff; - - /* Next Descriptor Address */ - EnetDmaTx.Tx.pEnetDmaNextDesc = &EnetDmaTx; - - /* Initialize ENET status and control */ - EnetDmaTx.Tx.TxDesc0.TCH = 1; - EnetDmaTx.Tx.TxDesc0.Data = 0; - EnetDmaTx.Tx.TxDesc1.Data = 0; - /* Tx next set to Tx descriptor base */ - ETH->DMATDLAR = (uint32_t)&EnetDmaTx; - -} diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/netdev.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/netdev.h deleted file mode 100644 index 4ea59ce5..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/netdev.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2001, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Adam Dunkels. - * 4. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack. - * - * $Id: netdev.h,v 1.1 2002/01/10 06:22:56 adam Exp $ - * - */ - -#ifndef __NETDEV_H__ -#define __NETDEV_H__ - -void netdev_init(void); -void netdev_init_mac(void); -unsigned int netdev_read(void); -void netdev_send(void); - -#endif /* __NETDEV_H__ */ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/uip-conf.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/uip-conf.h deleted file mode 100644 index fd9ba0dd..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/uip/uip-conf.h +++ /dev/null @@ -1,151 +0,0 @@ -/** - * \addtogroup uipopt - * @{ - */ - -/** - * \name Project-specific configuration options - * @{ - * - * uIP has a number of configuration options that can be overridden - * for each project. These are kept in a project-specific uip-conf.h - * file and all configuration names have the prefix UIP_CONF. - */ - -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ - */ - -/** - * \file - * An example uIP configuration file - * \author - * Adam Dunkels - */ - -#ifndef __UIP_CONF_H__ -#define __UIP_CONF_H__ - - -/** - * 8 bit datatype - * - * This typedef defines the 8-bit type used throughout uIP. - * - * \hideinitializer - */ -typedef unsigned char u8_t; - -/** - * 16 bit datatype - * - * This typedef defines the 16-bit type used throughout uIP. - * - * \hideinitializer - */ -typedef unsigned short u16_t; - -/** - * Statistics datatype - * - * This typedef defines the dataype used for keeping statistics in - * uIP. - * - * \hideinitializer - */ -typedef unsigned short uip_stats_t; - -/** - * Maximum number of TCP connections. - * - * \hideinitializer - */ -#define UIP_CONF_MAX_CONNECTIONS 1 - -/** - * Maximum number of listening TCP ports. - * - * \hideinitializer - */ -#define UIP_CONF_MAX_LISTENPORTS 1 - -/** - * uIP buffer size. - * - * \hideinitializer - */ -#define UIP_CONF_BUFFER_SIZE 1600 - -/** - * CPU byte order. - * - * \hideinitializer - */ -#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN - -/** - * Logging on or off - * - * \hideinitializer - */ -#define UIP_CONF_LOGGING 0 - -/** - * UDP support on or off - * - * \hideinitializer - */ -#define UIP_CONF_UDP 0 - -/** - * UDP checksums on or off - * - * \hideinitializer - */ -#define UIP_CONF_UDP_CHECKSUMS 1 - -/** - * uIP statistics on or off - * - * \hideinitializer - */ -#define UIP_CONF_STATISTICS 0 - -/* Here we include the header file for the application(s) we use in - our project. */ -#include "boot.h" -#include "net.h" - -#endif /* __UIP_CONF_H__ */ - -/** @} */ -/** @} */ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_core.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_core.h deleted file mode 100644 index e0884cac..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_core.h +++ /dev/null @@ -1,120 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_core.h - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief Header file for usbd_core.c - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USBD_CORE_H -#define __USBD_CORE_H - -/* Includes ------------------------------------------------------------------*/ -#include "usb_dcd.h" -#include "usbd_def.h" -#include "usbd_conf.h" - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - -/** @defgroup USBD_CORE - * @brief This file is the Header file for usbd_core.c file - * @{ - */ - - -/** @defgroup USBD_CORE_Exported_Defines - * @{ - */ - -typedef enum { - USBD_OK = 0, - USBD_BUSY, - USBD_FAIL, -}USBD_Status; -/** - * @} - */ - - -/** @defgroup USBD_CORE_Exported_TypesDefinitions - * @{ - */ - - -/** - * @} - */ - - - -/** @defgroup USBD_CORE_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup USBD_CORE_Exported_Variables - * @{ - */ - -/** - * @} - */ - -/** @defgroup USBD_CORE_Exported_FunctionsPrototype - * @{ - */ -void USBD_Init(USB_OTG_CORE_HANDLE *pdev, - USB_OTG_CORE_ID_TypeDef coreID, - USBD_DEVICE *pDevice, - USBD_Class_cb_TypeDef *class_cb, - USBD_Usr_cb_TypeDef *usr_cb); - -USBD_Status USBD_DeInit(USB_OTG_CORE_HANDLE *pdev); - -USBD_Status USBD_ClrCfg(USB_OTG_CORE_HANDLE *pdev, uint8_t cfgidx); - -USBD_Status USBD_SetCfg(USB_OTG_CORE_HANDLE *pdev, uint8_t cfgidx); - -/** - * @} - */ - -#endif /* __USBD_CORE_H */ - -/** - * @} - */ - -/** -* @} -*/ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - - - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_def.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_def.h deleted file mode 100644 index 7c0cff76..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_def.h +++ /dev/null @@ -1,156 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_def.h - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief general defines for the usb device library - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ - -#ifndef __USBD_DEF_H -#define __USBD_DEF_H - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_conf.h" - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - -/** @defgroup USB_DEF - * @brief general defines for the usb device library file - * @{ - */ - -/** @defgroup USB_DEF_Exported_Defines - * @{ - */ - -#ifndef NULL -#define NULL 0 -#endif - -#define USB_LEN_DEV_QUALIFIER_DESC 0x0A -#define USB_LEN_DEV_DESC 0x12 -#define USB_LEN_CFG_DESC 0x09 -#define USB_LEN_IF_DESC 0x09 -#define USB_LEN_EP_DESC 0x07 -#define USB_LEN_OTG_DESC 0x03 - -#define USBD_IDX_LANGID_STR 0x00 -#define USBD_IDX_MFC_STR 0x01 -#define USBD_IDX_PRODUCT_STR 0x02 -#define USBD_IDX_SERIAL_STR 0x03 -#define USBD_IDX_CONFIG_STR 0x04 -#define USBD_IDX_INTERFACE_STR 0x05 - -#define USB_REQ_TYPE_STANDARD 0x00 -#define USB_REQ_TYPE_CLASS 0x20 -#define USB_REQ_TYPE_VENDOR 0x40 -#define USB_REQ_TYPE_MASK 0x60 - -#define USB_REQ_RECIPIENT_DEVICE 0x00 -#define USB_REQ_RECIPIENT_INTERFACE 0x01 -#define USB_REQ_RECIPIENT_ENDPOINT 0x02 -#define USB_REQ_RECIPIENT_MASK 0x03 - -#define USB_REQ_GET_STATUS 0x00 -#define USB_REQ_CLEAR_FEATURE 0x01 -#define USB_REQ_SET_FEATURE 0x03 -#define USB_REQ_SET_ADDRESS 0x05 -#define USB_REQ_GET_DESCRIPTOR 0x06 -#define USB_REQ_SET_DESCRIPTOR 0x07 -#define USB_REQ_GET_CONFIGURATION 0x08 -#define USB_REQ_SET_CONFIGURATION 0x09 -#define USB_REQ_GET_INTERFACE 0x0A -#define USB_REQ_SET_INTERFACE 0x0B -#define USB_REQ_SYNCH_FRAME 0x0C - -#define USB_DESC_TYPE_DEVICE 1 -#define USB_DESC_TYPE_CONFIGURATION 2 -#define USB_DESC_TYPE_STRING 3 -#define USB_DESC_TYPE_INTERFACE 4 -#define USB_DESC_TYPE_ENDPOINT 5 -#define USB_DESC_TYPE_DEVICE_QUALIFIER 6 -#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 7 - - -#define USB_CONFIG_REMOTE_WAKEUP 2 -#define USB_CONFIG_SELF_POWERED 1 - -#define USB_FEATURE_EP_HALT 0 -#define USB_FEATURE_REMOTE_WAKEUP 1 -#define USB_FEATURE_TEST_MODE 2 - -/** - * @} - */ - - -/** @defgroup USBD_DEF_Exported_TypesDefinitions - * @{ - */ -/** - * @} - */ - - - -/** @defgroup USBD_DEF_Exported_Macros - * @{ - */ -#define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \ - (((uint16_t)(*(((uint8_t *)(addr)) + 1))) << 8)) - -#define LOBYTE(x) ((uint8_t)(x & 0x00FF)) -#define HIBYTE(x) ((uint8_t)((x & 0xFF00) >>8)) -/** - * @} - */ - -/** @defgroup USBD_DEF_Exported_Variables - * @{ - */ - -/** - * @} - */ - -/** @defgroup USBD_DEF_Exported_FunctionsPrototype - * @{ - */ - -/** - * @} - */ - -#endif /* __USBD_DEF_H */ - -/** - * @} - */ - -/** -* @} -*/ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_ioreq.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_ioreq.h deleted file mode 100644 index 3f6aea1a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_ioreq.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_ioreq.h - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief header file for the usbd_ioreq.c file - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ - -#ifndef __USBD_IOREQ_H_ -#define __USBD_IOREQ_H_ - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_def.h" -#include "usbd_core.h" - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - -/** @defgroup USBD_IOREQ - * @brief header file for the usbd_ioreq.c file - * @{ - */ - -/** @defgroup USBD_IOREQ_Exported_Defines - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Exported_Types - * @{ - */ - - -/** - * @} - */ - - - -/** @defgroup USBD_IOREQ_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup USBD_IOREQ_Exported_Variables - * @{ - */ - -/** - * @} - */ - -/** @defgroup USBD_IOREQ_Exported_FunctionsPrototype - * @{ - */ - -USBD_Status USBD_CtlSendData (USB_OTG_CORE_HANDLE *pdev, - uint8_t *buf, - uint16_t len); - -USBD_Status USBD_CtlContinueSendData (USB_OTG_CORE_HANDLE *pdev, - uint8_t *pbuf, - uint16_t len); - -USBD_Status USBD_CtlPrepareRx (USB_OTG_CORE_HANDLE *pdev, - uint8_t *pbuf, - uint16_t len); - -USBD_Status USBD_CtlContinueRx (USB_OTG_CORE_HANDLE *pdev, - uint8_t *pbuf, - uint16_t len); - -USBD_Status USBD_CtlSendStatus (USB_OTG_CORE_HANDLE *pdev); - -USBD_Status USBD_CtlReceiveStatus (USB_OTG_CORE_HANDLE *pdev); - -uint16_t USBD_GetRxCount (USB_OTG_CORE_HANDLE *pdev , - uint8_t epnum); - -/** - * @} - */ - -#endif /* __USBD_IOREQ_H_ */ - -/** - * @} - */ - -/** -* @} -*/ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_req.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_req.h deleted file mode 100644 index f88416df..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_req.h +++ /dev/null @@ -1,108 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_req.h - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief header file for the usbd_req.c file - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ - -#ifndef __USB_REQUEST_H_ -#define __USB_REQUEST_H_ - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_def.h" -#include "usbd_core.h" -#include "usbd_conf.h" - - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - -/** @defgroup USBD_REQ - * @brief header file for the usbd_ioreq.c file - * @{ - */ - -/** @defgroup USBD_REQ_Exported_Defines - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_REQ_Exported_Types - * @{ - */ -/** - * @} - */ - - - -/** @defgroup USBD_REQ_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup USBD_REQ_Exported_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup USBD_REQ_Exported_FunctionsPrototype - * @{ - */ - -USBD_Status USBD_StdDevReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req); -USBD_Status USBD_StdItfReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req); -USBD_Status USBD_StdEPReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req); -void USBD_ParseSetupRequest( USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req); - -void USBD_CtlError( USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req); - -void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len); -/** - * @} - */ - -#endif /* __USB_REQUEST_H_ */ - -/** - * @} - */ - -/** -* @} -*/ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_usr.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_usr.h deleted file mode 100644 index 1425009d..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/inc/usbd_usr.h +++ /dev/null @@ -1,144 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_usr.h - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief Header file for usbd_usr.c - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USBD_USR_H__ -#define __USBD_USR_H__ - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_core.h" -#include "boot.h" - -/** @addtogroup USBD_USER - * @{ - */ -extern void UsbEnterLowPowerModeHook(void); -extern void UsbLeaveLowPowerModeHook(void); -extern void UsbConnectHook(blt_bool connect); - -/** @addtogroup USBD_MSC_DEMO_USER_CALLBACKS - * @{ - */ - -/** @defgroup USBD_USR - * @brief This file is the Header file for usbd_usr.c - * @{ - */ - - -/** @defgroup USBD_USR_Exported_Types - * @{ - */ - -extern USBD_Usr_cb_TypeDef USR_cb; -extern USBD_Usr_cb_TypeDef USR_FS_cb; -extern USBD_Usr_cb_TypeDef USR_HS_cb; - - - -/** - * @} - */ - - - -/** @defgroup USBD_USR_Exported_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup USBD_USR_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup USBD_USR_Exported_Variables - * @{ - */ - -void USBD_USR_Init(void); -void USBD_USR_DeviceReset (uint8_t speed); -void USBD_USR_DeviceConfigured (void); -void USBD_USR_DeviceSuspended(void); -void USBD_USR_DeviceResumed(void); - -void USBD_USR_DeviceConnected(void); -void USBD_USR_DeviceDisconnected(void); - -void USBD_USR_FS_Init(void); -void USBD_USR_FS_DeviceReset (uint8_t speed); -void USBD_USR_FS_DeviceConfigured (void); -void USBD_USR_FS_DeviceSuspended(void); -void USBD_USR_FS_DeviceResumed(void); - -void USBD_USR_FS_DeviceConnected(void); -void USBD_USR_FS_DeviceDisconnected(void); - -void USBD_USR_HS_Init(void); -void USBD_USR_HS_DeviceReset (uint8_t speed); -void USBD_USR_HS_DeviceConfigured (void); -void USBD_USR_HS_DeviceSuspended(void); -void USBD_USR_HS_DeviceResumed(void); - -void USBD_USR_HS_DeviceConnected(void); -void USBD_USR_HS_DeviceDisconnected(void); - -/** - * @} - */ - -/** @defgroup USBD_USR_Exported_FunctionsPrototype - * @{ - */ -/** - * @} - */ - -#endif /*__USBD_USR_H__*/ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - - - - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_core.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_core.c deleted file mode 100644 index fa647eb0..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_core.c +++ /dev/null @@ -1,506 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_core.c - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief This file provides all the USBD core functions. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_core.h" -#include "usbd_req.h" -#include "usbd_ioreq.h" -#include "usb_dcd_int.h" -#include "usb_bsp.h" - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY -* @{ -*/ - - -/** @defgroup USBD_CORE -* @brief usbd core module -* @{ -*/ - -/** @defgroup USBD_CORE_Private_TypesDefinitions -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USBD_CORE_Private_Defines -* @{ -*/ - -/** -* @} -*/ - - -/** @defgroup USBD_CORE_Private_Macros -* @{ -*/ -/** -* @} -*/ - - - - -/** @defgroup USBD_CORE_Private_FunctionPrototypes -* @{ -*/ -static uint8_t USBD_SetupStage(USB_OTG_CORE_HANDLE *pdev); -static uint8_t USBD_DataOutStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); -static uint8_t USBD_DataInStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); -static uint8_t USBD_SOF(USB_OTG_CORE_HANDLE *pdev); -static uint8_t USBD_Reset(USB_OTG_CORE_HANDLE *pdev); -static uint8_t USBD_Suspend(USB_OTG_CORE_HANDLE *pdev); -static uint8_t USBD_Resume(USB_OTG_CORE_HANDLE *pdev); -#ifdef VBUS_SENSING_ENABLED -static uint8_t USBD_DevConnected(USB_OTG_CORE_HANDLE *pdev); -static uint8_t USBD_DevDisconnected(USB_OTG_CORE_HANDLE *pdev); -#endif -static uint8_t USBD_IsoINIncomplete(USB_OTG_CORE_HANDLE *pdev); -static uint8_t USBD_IsoOUTIncomplete(USB_OTG_CORE_HANDLE *pdev); -static uint8_t USBD_RunTestMode (USB_OTG_CORE_HANDLE *pdev) ; -/** -* @} -*/ - -/** @defgroup USBD_CORE_Private_Variables -* @{ -*/ - -__IO USB_OTG_DCTL_TypeDef SET_TEST_MODE; - -USBD_DCD_INT_cb_TypeDef USBD_DCD_INT_cb = -{ - USBD_DataOutStage, - USBD_DataInStage, - USBD_SetupStage, - USBD_SOF, - USBD_Reset, - USBD_Suspend, - USBD_Resume, - USBD_IsoINIncomplete, - USBD_IsoOUTIncomplete, -#ifdef VBUS_SENSING_ENABLED -USBD_DevConnected, -USBD_DevDisconnected, -#endif -}; - -USBD_DCD_INT_cb_TypeDef *USBD_DCD_INT_fops = &USBD_DCD_INT_cb; -/** -* @} -*/ - -/** @defgroup USBD_CORE_Private_Functions -* @{ -*/ - -/** -* @brief USBD_Init -* Initailizes the device stack and load the class driver -* @param pdev: device instance -* @param core_address: USB OTG core ID -* @param class_cb: Class callback structure address -* @param usr_cb: User callback structure address -* @retval None -*/ -void USBD_Init(USB_OTG_CORE_HANDLE *pdev, - USB_OTG_CORE_ID_TypeDef coreID, - USBD_DEVICE *pDevice, - USBD_Class_cb_TypeDef *class_cb, - USBD_Usr_cb_TypeDef *usr_cb) -{ - /* Hardware Init */ - USB_OTG_BSP_Init(pdev); - - USBD_DeInit(pdev); - - /*Register class and user callbacks */ - pdev->dev.class_cb = class_cb; - pdev->dev.usr_cb = usr_cb; - pdev->dev.usr_device = pDevice; - - /* set USB OTG core params */ - DCD_Init(pdev , coreID); - - /* Upon Init call usr callback */ - pdev->dev.usr_cb->Init(); - - /* Enable Interrupts */ - USB_OTG_BSP_EnableInterrupt(pdev); -} - -/** -* @brief USBD_DeInit -* Re-Initialize th device library -* @param pdev: device instance -* @retval status: status -*/ -USBD_Status USBD_DeInit(USB_OTG_CORE_HANDLE *pdev) -{ - /* Software Init */ - - return USBD_OK; -} - -/** -* @brief USBD_SetupStage -* Handle the setup stage -* @param pdev: device instance -* @retval status -*/ -static uint8_t USBD_SetupStage(USB_OTG_CORE_HANDLE *pdev) -{ - USB_SETUP_REQ req; - - USBD_ParseSetupRequest(pdev , &req); - - switch (req.bmRequest & 0x1F) - { - case USB_REQ_RECIPIENT_DEVICE: - USBD_StdDevReq (pdev, &req); - break; - - case USB_REQ_RECIPIENT_INTERFACE: - USBD_StdItfReq(pdev, &req); - break; - - case USB_REQ_RECIPIENT_ENDPOINT: - USBD_StdEPReq(pdev, &req); - break; - - default: - DCD_EP_Stall(pdev , req.bmRequest & 0x80); - break; - } - return USBD_OK; -} - -/** -* @brief USBD_DataOutStage -* Handle data out stage -* @param pdev: device instance -* @param epnum: endpoint index -* @retval status -*/ -static uint8_t USBD_DataOutStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) -{ - USB_OTG_EP *ep; - - if(epnum == 0) - { - ep = &pdev->dev.out_ep[0]; - if ( pdev->dev.device_state == USB_OTG_EP0_DATA_OUT) - { - if(ep->rem_data_len > ep->maxpacket) - { - ep->rem_data_len -= ep->maxpacket; - - if(pdev->cfg.dma_enable == 1) - { - /* in slave mode this, is handled by the RxSTSQLvl ISR */ - ep->xfer_buff += ep->maxpacket; - } - USBD_CtlContinueRx (pdev, - ep->xfer_buff, - MIN(ep->rem_data_len ,ep->maxpacket)); - } - else - { - if((pdev->dev.class_cb->EP0_RxReady != NULL)&& - (pdev->dev.device_status == USB_OTG_CONFIGURED)) - { - pdev->dev.class_cb->EP0_RxReady(pdev); - } - USBD_CtlSendStatus(pdev); - } - } - } - else if((pdev->dev.class_cb->DataOut != NULL)&& - (pdev->dev.device_status == USB_OTG_CONFIGURED)) - { - pdev->dev.class_cb->DataOut(pdev, epnum); - } - return USBD_OK; -} - -/** -* @brief USBD_DataInStage -* Handle data in stage -* @param pdev: device instance -* @param epnum: endpoint index -* @retval status -*/ -static uint8_t USBD_DataInStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) -{ - USB_OTG_EP *ep; - - if(epnum == 0) - { - ep = &pdev->dev.in_ep[0]; - if ( pdev->dev.device_state == USB_OTG_EP0_DATA_IN) - { - if(ep->rem_data_len > ep->maxpacket) - { - ep->rem_data_len -= ep->maxpacket; - if(pdev->cfg.dma_enable == 1) - { - /* in slave mode this, is handled by the TxFifoEmpty ISR */ - ep->xfer_buff += ep->maxpacket; - } - USBD_CtlContinueSendData (pdev, - ep->xfer_buff, - ep->rem_data_len); - } - else - { /* last packet is MPS multiple, so send ZLP packet */ - if((ep->total_data_len % ep->maxpacket == 0) && - (ep->total_data_len >= ep->maxpacket) && - (ep->total_data_len < ep->ctl_data_len )) - { - - USBD_CtlContinueSendData(pdev , NULL, 0); - ep->ctl_data_len = 0; - } - else - { - if((pdev->dev.class_cb->EP0_TxSent != NULL)&& - (pdev->dev.device_status == USB_OTG_CONFIGURED)) - { - pdev->dev.class_cb->EP0_TxSent(pdev); - } - USBD_CtlReceiveStatus(pdev); - } - } - } - if (pdev->dev.test_mode == 1) - { - USBD_RunTestMode(pdev); - pdev->dev.test_mode = 0; - } - } - else if((pdev->dev.class_cb->DataIn != NULL)&& - (pdev->dev.device_status == USB_OTG_CONFIGURED)) - { - pdev->dev.class_cb->DataIn(pdev, epnum); - } - return USBD_OK; -} - - - - -/** -* @brief USBD_RunTestMode -* Launch test mode process -* @param pdev: device instance -* @retval status -*/ -static uint8_t USBD_RunTestMode (USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCTL, SET_TEST_MODE.d32); - return USBD_OK; -} - -/** -* @brief USBD_Reset -* Handle Reset event -* @param pdev: device instance -* @retval status -*/ - -static uint8_t USBD_Reset(USB_OTG_CORE_HANDLE *pdev) -{ - /* Open EP0 OUT */ - DCD_EP_Open(pdev, - 0x00, - USB_OTG_MAX_EP0_SIZE, - EP_TYPE_CTRL); - - /* Open EP0 IN */ - DCD_EP_Open(pdev, - 0x80, - USB_OTG_MAX_EP0_SIZE, - EP_TYPE_CTRL); - - /* Upon Reset call usr call back */ - pdev->dev.device_status = USB_OTG_DEFAULT; - pdev->dev.usr_cb->DeviceReset(pdev->cfg.speed); - - return USBD_OK; -} - -/** -* @brief USBD_Resume -* Handle Resume event -* @param pdev: device instance -* @retval status -*/ - -static uint8_t USBD_Resume(USB_OTG_CORE_HANDLE *pdev) -{ - /* Upon Resume call usr call back */ - pdev->dev.usr_cb->DeviceResumed(); - pdev->dev.device_status = pdev->dev.device_old_status; - pdev->dev.device_status = USB_OTG_CONFIGURED; - return USBD_OK; -} - - -/** -* @brief USBD_Suspend -* Handle Suspend event -* @param pdev: device instance -* @retval status -*/ - -static uint8_t USBD_Suspend(USB_OTG_CORE_HANDLE *pdev) -{ - pdev->dev.device_old_status = pdev->dev.device_status; - pdev->dev.device_status = USB_OTG_SUSPENDED; - /* Upon Resume call usr call back */ - pdev->dev.usr_cb->DeviceSuspended(); - return USBD_OK; -} - - -/** -* @brief USBD_SOF -* Handle SOF event -* @param pdev: device instance -* @retval status -*/ - -static uint8_t USBD_SOF(USB_OTG_CORE_HANDLE *pdev) -{ - if(pdev->dev.class_cb->SOF) - { - pdev->dev.class_cb->SOF(pdev); - } - return USBD_OK; -} -/** -* @brief USBD_SetCfg -* Configure device and start the interface -* @param pdev: device instance -* @param cfgidx: configuration index -* @retval status -*/ - -USBD_Status USBD_SetCfg(USB_OTG_CORE_HANDLE *pdev, uint8_t cfgidx) -{ - pdev->dev.class_cb->Init(pdev, cfgidx); - - /* Upon set config call usr call back */ - pdev->dev.usr_cb->DeviceConfigured(); - return USBD_OK; -} - -/** -* @brief USBD_ClrCfg -* Clear current configuration -* @param pdev: device instance -* @param cfgidx: configuration index -* @retval status: USBD_Status -*/ -USBD_Status USBD_ClrCfg(USB_OTG_CORE_HANDLE *pdev, uint8_t cfgidx) -{ - pdev->dev.class_cb->DeInit(pdev, cfgidx); - return USBD_OK; -} - -/** -* @brief USBD_IsoINIncomplete -* Handle iso in incomplete event -* @param pdev: device instance -* @retval status -*/ -static uint8_t USBD_IsoINIncomplete(USB_OTG_CORE_HANDLE *pdev) -{ - pdev->dev.class_cb->IsoINIncomplete(pdev); - return USBD_OK; -} - -/** -* @brief USBD_IsoOUTIncomplete -* Handle iso out incomplete event -* @param pdev: device instance -* @retval status -*/ -static uint8_t USBD_IsoOUTIncomplete(USB_OTG_CORE_HANDLE *pdev) -{ - pdev->dev.class_cb->IsoOUTIncomplete(pdev); - return USBD_OK; -} - -#ifdef VBUS_SENSING_ENABLED -/** -* @brief USBD_DevConnected -* Handle device connection event -* @param pdev: device instance -* @retval status -*/ -static uint8_t USBD_DevConnected(USB_OTG_CORE_HANDLE *pdev) -{ - pdev->dev.usr_cb->DeviceConnected(); - pdev->dev.connection_status = 1; - return USBD_OK; -} - -/** -* @brief USBD_DevDisconnected -* Handle device disconnection event -* @param pdev: device instance -* @retval status -*/ -static uint8_t USBD_DevDisconnected(USB_OTG_CORE_HANDLE *pdev) -{ - pdev->dev.usr_cb->DeviceDisconnected(); - pdev->dev.class_cb->DeInit(pdev, 0); - pdev->dev.connection_status = 0; - return USBD_OK; -} -#endif -/** -* @} -*/ - - -/** -* @} -*/ - - -/** -* @} -*/ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_ioreq.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_ioreq.c deleted file mode 100644 index a9e4a863..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_ioreq.c +++ /dev/null @@ -1,244 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_ioreq.c - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief This file provides the IO requests APIs for control endpoints. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_ioreq.h" - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - - -/** @defgroup USBD_IOREQ - * @brief control I/O requests module - * @{ - */ - -/** @defgroup USBD_IOREQ_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_Defines - * @{ - */ - -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_Macros - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_Variables - * @{ - */ - -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_FunctionPrototypes - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_Functions - * @{ - */ - -/** -* @brief USBD_CtlSendData -* send data on the ctl pipe -* @param pdev: device instance -* @param buff: pointer to data buffer -* @param len: length of data to be sent -* @retval status -*/ -USBD_Status USBD_CtlSendData (USB_OTG_CORE_HANDLE *pdev, - uint8_t *pbuf, - uint16_t len) -{ - USBD_Status ret = USBD_OK; - - pdev->dev.in_ep[0].total_data_len = len; - pdev->dev.in_ep[0].rem_data_len = len; - pdev->dev.device_state = USB_OTG_EP0_DATA_IN; - - DCD_EP_Tx (pdev, 0, pbuf, len); - - return ret; -} - -/** -* @brief USBD_CtlContinueSendData -* continue sending data on the ctl pipe -* @param pdev: device instance -* @param buff: pointer to data buffer -* @param len: length of data to be sent -* @retval status -*/ -USBD_Status USBD_CtlContinueSendData (USB_OTG_CORE_HANDLE *pdev, - uint8_t *pbuf, - uint16_t len) -{ - USBD_Status ret = USBD_OK; - - DCD_EP_Tx (pdev, 0, pbuf, len); - - - return ret; -} - -/** -* @brief USBD_CtlPrepareRx -* receive data on the ctl pipe -* @param pdev: USB OTG device instance -* @param buff: pointer to data buffer -* @param len: length of data to be received -* @retval status -*/ -USBD_Status USBD_CtlPrepareRx (USB_OTG_CORE_HANDLE *pdev, - uint8_t *pbuf, - uint16_t len) -{ - USBD_Status ret = USBD_OK; - - pdev->dev.out_ep[0].total_data_len = len; - pdev->dev.out_ep[0].rem_data_len = len; - pdev->dev.device_state = USB_OTG_EP0_DATA_OUT; - - DCD_EP_PrepareRx (pdev, - 0, - pbuf, - len); - - - return ret; -} - -/** -* @brief USBD_CtlContinueRx -* continue receive data on the ctl pipe -* @param pdev: USB OTG device instance -* @param buff: pointer to data buffer -* @param len: length of data to be received -* @retval status -*/ -USBD_Status USBD_CtlContinueRx (USB_OTG_CORE_HANDLE *pdev, - uint8_t *pbuf, - uint16_t len) -{ - USBD_Status ret = USBD_OK; - - DCD_EP_PrepareRx (pdev, - 0, - pbuf, - len); - return ret; -} -/** -* @brief USBD_CtlSendStatus -* send zero lzngth packet on the ctl pipe -* @param pdev: USB OTG device instance -* @retval status -*/ -USBD_Status USBD_CtlSendStatus (USB_OTG_CORE_HANDLE *pdev) -{ - USBD_Status ret = USBD_OK; - pdev->dev.device_state = USB_OTG_EP0_STATUS_IN; - DCD_EP_Tx (pdev, - 0, - NULL, - 0); - - USB_OTG_EP0_OutStart(pdev); - - return ret; -} - -/** -* @brief USBD_CtlReceiveStatus -* receive zero lzngth packet on the ctl pipe -* @param pdev: USB OTG device instance -* @retval status -*/ -USBD_Status USBD_CtlReceiveStatus (USB_OTG_CORE_HANDLE *pdev) -{ - USBD_Status ret = USBD_OK; - pdev->dev.device_state = USB_OTG_EP0_STATUS_OUT; - DCD_EP_PrepareRx ( pdev, - 0, - NULL, - 0); - - USB_OTG_EP0_OutStart(pdev); - - return ret; -} - - -/** -* @brief USBD_GetRxCount -* returns the received data length -* @param pdev: USB OTG device instance -* epnum: endpoint index -* @retval Rx Data blength -*/ -uint16_t USBD_GetRxCount (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) -{ - return pdev->dev.out_ep[epnum].xfer_count; -} - -/** - * @} - */ - - -/** - * @} - */ - - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_req.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_req.c deleted file mode 100644 index f954bd9a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Core/src/usbd_req.c +++ /dev/null @@ -1,868 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_req.c - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief This file provides the standard USB requests following chapter 9. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_req.h" -#include "usbd_ioreq.h" -#include "usbd_desc.h" - - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - - -/** @defgroup USBD_REQ - * @brief USB standard requests module - * @{ - */ - -/** @defgroup USBD_REQ_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_REQ_Private_Defines - * @{ - */ - -/** - * @} - */ - - -/** @defgroup USBD_REQ_Private_Macros - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_REQ_Private_Variables - * @{ - */ -extern __IO USB_OTG_DCTL_TypeDef SET_TEST_MODE; - -#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED - #if defined ( __ICCARM__ ) /*!< IAR Compiler */ - #pragma data_alignment=4 - #endif -#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ -__ALIGN_BEGIN uint32_t USBD_ep_status __ALIGN_END = 0; - -#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED - #if defined ( __ICCARM__ ) /*!< IAR Compiler */ - #pragma data_alignment=4 - #endif -#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ -__ALIGN_BEGIN uint32_t USBD_default_cfg __ALIGN_END = 0; - -#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED - #if defined ( __ICCARM__ ) /*!< IAR Compiler */ - #pragma data_alignment=4 - #endif -#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ -__ALIGN_BEGIN uint32_t USBD_cfg_status __ALIGN_END = 0; - -#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED - #if defined ( __ICCARM__ ) /*!< IAR Compiler */ - #pragma data_alignment=4 - #endif -#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ -__ALIGN_BEGIN uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ] __ALIGN_END ; -/** - * @} - */ - - -/** @defgroup USBD_REQ_Private_FunctionPrototypes - * @{ - */ -static void USBD_GetDescriptor(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req); - -static void USBD_SetAddress(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req); - -static void USBD_SetConfig(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req); - -static void USBD_GetConfig(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req); - -static void USBD_GetStatus(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req); - -static void USBD_SetFeature(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req); - -static void USBD_ClrFeature(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req); - -static uint8_t USBD_GetLen(uint8_t *buf); -/** - * @} - */ - - -/** @defgroup USBD_REQ_Private_Functions - * @{ - */ - - -/** -* @brief USBD_StdDevReq -* Handle standard usb device requests -* @param pdev: device instance -* @param req: usb request -* @retval status -*/ -USBD_Status USBD_StdDevReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req) -{ - USBD_Status ret = USBD_OK; - - switch (req->bRequest) - { - case USB_REQ_GET_DESCRIPTOR: - - USBD_GetDescriptor (pdev, req) ; - break; - - case USB_REQ_SET_ADDRESS: - USBD_SetAddress(pdev, req); - break; - - case USB_REQ_SET_CONFIGURATION: - USBD_SetConfig (pdev , req); - break; - - case USB_REQ_GET_CONFIGURATION: - USBD_GetConfig (pdev , req); - break; - - case USB_REQ_GET_STATUS: - USBD_GetStatus (pdev , req); - break; - - - case USB_REQ_SET_FEATURE: - USBD_SetFeature (pdev , req); - break; - - case USB_REQ_CLEAR_FEATURE: - USBD_ClrFeature (pdev , req); - break; - - default: - USBD_CtlError(pdev , req); - break; - } - - return ret; -} - -/** -* @brief USBD_StdItfReq -* Handle standard usb interface requests -* @param pdev: USB OTG device instance -* @param req: usb request -* @retval status -*/ -USBD_Status USBD_StdItfReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req) -{ - USBD_Status ret = USBD_OK; - - switch (pdev->dev.device_status) - { - case USB_OTG_CONFIGURED: - - if (LOBYTE(req->wIndex) <= USBD_ITF_MAX_NUM) - { - pdev->dev.class_cb->Setup (pdev, req); - - if((req->wLength == 0)&& (ret == USBD_OK)) - { - USBD_CtlSendStatus(pdev); - } - } - else - { - USBD_CtlError(pdev , req); - } - break; - - default: - USBD_CtlError(pdev , req); - break; - } - return ret; -} - -/** -* @brief USBD_StdEPReq -* Handle standard usb endpoint requests -* @param pdev: USB OTG device instance -* @param req: usb request -* @retval status -*/ -USBD_Status USBD_StdEPReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req) -{ - - uint8_t ep_addr; - USBD_Status ret = USBD_OK; - - ep_addr = LOBYTE(req->wIndex); - - switch (req->bRequest) - { - - case USB_REQ_SET_FEATURE : - - switch (pdev->dev.device_status) - { - case USB_OTG_ADDRESSED: - if ((ep_addr != 0x00) && (ep_addr != 0x80)) - { - DCD_EP_Stall(pdev , ep_addr); - } - break; - - case USB_OTG_CONFIGURED: - if (req->wValue == USB_FEATURE_EP_HALT) - { - if ((ep_addr != 0x00) && (ep_addr != 0x80)) - { - DCD_EP_Stall(pdev , ep_addr); - - } - } - pdev->dev.class_cb->Setup (pdev, req); - USBD_CtlSendStatus(pdev); - - break; - - default: - USBD_CtlError(pdev , req); - break; - } - break; - - case USB_REQ_CLEAR_FEATURE : - - switch (pdev->dev.device_status) - { - case USB_OTG_ADDRESSED: - if ((ep_addr != 0x00) && (ep_addr != 0x80)) - { - DCD_EP_Stall(pdev , ep_addr); - } - break; - - case USB_OTG_CONFIGURED: - if (req->wValue == USB_FEATURE_EP_HALT) - { - if ((ep_addr != 0x00) && (ep_addr != 0x80)) - { - DCD_EP_ClrStall(pdev , ep_addr); - pdev->dev.class_cb->Setup (pdev, req); - } - USBD_CtlSendStatus(pdev); - } - break; - - default: - USBD_CtlError(pdev , req); - break; - } - break; - - case USB_REQ_GET_STATUS: - switch (pdev->dev.device_status) - { - case USB_OTG_ADDRESSED: - if ((ep_addr != 0x00) && (ep_addr != 0x80)) - { - DCD_EP_Stall(pdev , ep_addr); - } - break; - - case USB_OTG_CONFIGURED: - - - if ((ep_addr & 0x80)== 0x80) - { - if(pdev->dev.in_ep[ep_addr & 0x7F].is_stall) - { - USBD_ep_status = 0x0001; - } - else - { - USBD_ep_status = 0x0000; - } - } - else if ((ep_addr & 0x80)== 0x00) - { - if(pdev->dev.out_ep[ep_addr].is_stall) - { - USBD_ep_status = 0x0001; - } - - else - { - USBD_ep_status = 0x0000; - } - } - USBD_CtlSendData (pdev, - (uint8_t *)&USBD_ep_status, - 2); - break; - - default: - USBD_CtlError(pdev , req); - break; - } - break; - - default: - break; - } - return ret; -} -/** -* @brief USBD_GetDescriptor -* Handle Get Descriptor requests -* @param pdev: device instance -* @param req: usb request -* @retval status -*/ -static void USBD_GetDescriptor(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req) -{ - uint16_t len; - uint8_t *pbuf; - - - switch (req->wValue >> 8) - { - case USB_DESC_TYPE_DEVICE: - pbuf = pdev->dev.usr_device->GetDeviceDescriptor(pdev->cfg.speed, &len); - if ((req->wLength == 64) ||( pdev->dev.device_status == USB_OTG_DEFAULT)) - { - len = 8; - } - break; - - case USB_DESC_TYPE_CONFIGURATION: - pbuf = (uint8_t *)pdev->dev.class_cb->GetConfigDescriptor(pdev->cfg.speed, &len); -#ifdef USB_OTG_HS_CORE - if((pdev->cfg.speed == USB_OTG_SPEED_FULL )&& - (pdev->cfg.phy_itface == USB_OTG_ULPI_PHY)) - { - pbuf = (uint8_t *)pdev->dev.class_cb->GetOtherConfigDescriptor(pdev->cfg.speed, &len); - } -#endif - pbuf[1] = USB_DESC_TYPE_CONFIGURATION; - pdev->dev.pConfig_descriptor = pbuf; - break; - - case USB_DESC_TYPE_STRING: - switch ((uint8_t)(req->wValue)) - { - case USBD_IDX_LANGID_STR: - pbuf = pdev->dev.usr_device->GetLangIDStrDescriptor(pdev->cfg.speed, &len); - break; - - case USBD_IDX_MFC_STR: - pbuf = pdev->dev.usr_device->GetManufacturerStrDescriptor(pdev->cfg.speed, &len); - break; - - case USBD_IDX_PRODUCT_STR: - pbuf = pdev->dev.usr_device->GetProductStrDescriptor(pdev->cfg.speed, &len); - break; - - case USBD_IDX_SERIAL_STR: - pbuf = pdev->dev.usr_device->GetSerialStrDescriptor(pdev->cfg.speed, &len); - break; - - case USBD_IDX_CONFIG_STR: - pbuf = pdev->dev.usr_device->GetConfigurationStrDescriptor(pdev->cfg.speed, &len); - break; - - case USBD_IDX_INTERFACE_STR: - pbuf = pdev->dev.usr_device->GetInterfaceStrDescriptor(pdev->cfg.speed, &len); - break; - - default: -#ifdef USB_SUPPORT_USER_STRING_DESC - pbuf = pdev->dev.class_cb->GetUsrStrDescriptor(pdev->cfg.speed, (req->wValue) , &len); - break; -#else - USBD_CtlError(pdev , req); - return; -#endif /* USBD_CtlError(pdev , req); */ - } - break; - case USB_DESC_TYPE_DEVICE_QUALIFIER: -#ifdef USB_OTG_HS_CORE - if(pdev->cfg.speed == USB_OTG_SPEED_HIGH ) - { - - pbuf = (uint8_t *)pdev->dev.class_cb->GetConfigDescriptor(pdev->cfg.speed, &len); - - USBD_DeviceQualifierDesc[4]= pbuf[14]; - USBD_DeviceQualifierDesc[5]= pbuf[15]; - USBD_DeviceQualifierDesc[6]= pbuf[16]; - - pbuf = USBD_DeviceQualifierDesc; - len = USB_LEN_DEV_QUALIFIER_DESC; - break; - } - else - { - USBD_CtlError(pdev , req); - return; - } -#else - USBD_CtlError(pdev , req); - return; -#endif - - case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION: -#ifdef USB_OTG_HS_CORE - - if(pdev->cfg.speed == USB_OTG_SPEED_HIGH ) - { - pbuf = (uint8_t *)pdev->dev.class_cb->GetOtherConfigDescriptor(pdev->cfg.speed, &len); - pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION; - break; - } - else - { - USBD_CtlError(pdev , req); - return; - } -#else - USBD_CtlError(pdev , req); - return; -#endif - - - default: - USBD_CtlError(pdev , req); - return; - } - - if((len != 0)&& (req->wLength != 0)) - { - - len = MIN(len , req->wLength); - - USBD_CtlSendData (pdev, - pbuf, - len); - } - -} - -/** -* @brief USBD_SetAddress -* Set device address -* @param pdev: device instance -* @param req: usb request -* @retval status -*/ -static void USBD_SetAddress(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req) -{ - uint8_t dev_addr; - - if ((req->wIndex == 0) && (req->wLength == 0)) - { - dev_addr = (uint8_t)(req->wValue) & 0x7F; - - if (pdev->dev.device_status == USB_OTG_CONFIGURED) - { - USBD_CtlError(pdev , req); - } - else - { - pdev->dev.device_address = dev_addr; - DCD_EP_SetAddress(pdev, dev_addr); - USBD_CtlSendStatus(pdev); - - if (dev_addr != 0) - { - pdev->dev.device_status = USB_OTG_ADDRESSED; - } - else - { - pdev->dev.device_status = USB_OTG_DEFAULT; - } - } - } - else - { - USBD_CtlError(pdev , req); - } -} - -/** -* @brief USBD_SetConfig -* Handle Set device configuration request -* @param pdev: device instance -* @param req: usb request -* @retval status -*/ -static void USBD_SetConfig(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req) -{ - - static uint8_t cfgidx; - - cfgidx = (uint8_t)(req->wValue); - - if (cfgidx > USBD_CFG_MAX_NUM ) - { - USBD_CtlError(pdev , req); - } - else - { - switch (pdev->dev.device_status) - { - case USB_OTG_ADDRESSED: - if (cfgidx) - { - pdev->dev.device_config = cfgidx; - pdev->dev.device_status = USB_OTG_CONFIGURED; - USBD_SetCfg(pdev , cfgidx); - USBD_CtlSendStatus(pdev); - } - else - { - USBD_CtlSendStatus(pdev); - } - break; - - case USB_OTG_CONFIGURED: - if (cfgidx == 0) - { - pdev->dev.device_status = USB_OTG_ADDRESSED; - pdev->dev.device_config = cfgidx; - USBD_ClrCfg(pdev , cfgidx); - USBD_CtlSendStatus(pdev); - - } - else if (cfgidx != pdev->dev.device_config) - { - /* Clear old configuration */ - USBD_ClrCfg(pdev , pdev->dev.device_config); - - /* set new configuration */ - pdev->dev.device_config = cfgidx; - USBD_SetCfg(pdev , cfgidx); - USBD_CtlSendStatus(pdev); - } - else - { - USBD_CtlSendStatus(pdev); - } - break; - - default: - USBD_CtlError(pdev , req); - break; - } - } -} - -/** -* @brief USBD_GetConfig -* Handle Get device configuration request -* @param pdev: device instance -* @param req: usb request -* @retval status -*/ -static void USBD_GetConfig(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req) -{ - - if (req->wLength != 1) - { - USBD_CtlError(pdev , req); - } - else - { - switch (pdev->dev.device_status ) - { - case USB_OTG_ADDRESSED: - - USBD_CtlSendData (pdev, - (uint8_t *)&USBD_default_cfg, - 1); - break; - - case USB_OTG_CONFIGURED: - - USBD_CtlSendData (pdev, - &pdev->dev.device_config, - 1); - break; - - default: - USBD_CtlError(pdev , req); - break; - } - } -} - -/** -* @brief USBD_GetStatus -* Handle Get Status request -* @param pdev: device instance -* @param req: usb request -* @retval status -*/ -static void USBD_GetStatus(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req) -{ - - - switch (pdev->dev.device_status) - { - case USB_OTG_ADDRESSED: - case USB_OTG_CONFIGURED: - -#ifdef USBD_SELF_POWERED - USBD_cfg_status = USB_CONFIG_SELF_POWERED; -#else - USBD_cfg_status = 0x00; -#endif - - if (pdev->dev.DevRemoteWakeup) - { - USBD_cfg_status |= USB_CONFIG_REMOTE_WAKEUP; - } - - USBD_CtlSendData (pdev, - (uint8_t *)&USBD_cfg_status, - 2); - break; - - default : - USBD_CtlError(pdev , req); - break; - } -} - - -/** -* @brief USBD_SetFeature -* Handle Set device feature request -* @param pdev: device instance -* @param req: usb request -* @retval status -*/ -static void USBD_SetFeature(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req) -{ - - USB_OTG_DCTL_TypeDef dctl; - uint8_t test_mode = 0; - - if (req->wValue == USB_FEATURE_REMOTE_WAKEUP) - { - pdev->dev.DevRemoteWakeup = 1; - pdev->dev.class_cb->Setup (pdev, req); - USBD_CtlSendStatus(pdev); - } - - else if ((req->wValue == USB_FEATURE_TEST_MODE) && - ((req->wIndex & 0xFF) == 0)) - { - dctl.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCTL); - - test_mode = req->wIndex >> 8; - switch (test_mode) - { - case 1: // TEST_J - dctl.b.tstctl = 1; - break; - - case 2: // TEST_K - dctl.b.tstctl = 2; - break; - - case 3: // TEST_SE0_NAK - dctl.b.tstctl = 3; - break; - - case 4: // TEST_PACKET - dctl.b.tstctl = 4; - break; - - case 5: // TEST_FORCE_ENABLE - dctl.b.tstctl = 5; - break; - } - SET_TEST_MODE = dctl; - pdev->dev.test_mode = 1; - USBD_CtlSendStatus(pdev); - } - -} - - -/** -* @brief USBD_ClrFeature -* Handle clear device feature request -* @param pdev: device instance -* @param req: usb request -* @retval status -*/ -static void USBD_ClrFeature(USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req) -{ - switch (pdev->dev.device_status) - { - case USB_OTG_ADDRESSED: - case USB_OTG_CONFIGURED: - if (req->wValue == USB_FEATURE_REMOTE_WAKEUP) - { - pdev->dev.DevRemoteWakeup = 0; - pdev->dev.class_cb->Setup (pdev, req); - USBD_CtlSendStatus(pdev); - } - break; - - default : - USBD_CtlError(pdev , req); - break; - } -} - -/** -* @brief USBD_ParseSetupRequest -* Copy buffer into setup structure -* @param pdev: device instance -* @param req: usb request -* @retval None -*/ - -void USBD_ParseSetupRequest( USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req) -{ - req->bmRequest = *(uint8_t *) (pdev->dev.setup_packet); - req->bRequest = *(uint8_t *) (pdev->dev.setup_packet + 1); - req->wValue = SWAPBYTE (pdev->dev.setup_packet + 2); - req->wIndex = SWAPBYTE (pdev->dev.setup_packet + 4); - req->wLength = SWAPBYTE (pdev->dev.setup_packet + 6); - - pdev->dev.in_ep[0].ctl_data_len = req->wLength ; - pdev->dev.device_state = USB_OTG_EP0_SETUP; -} - -/** -* @brief USBD_CtlError -* Handle USB low level Error -* @param pdev: device instance -* @param req: usb request -* @retval None -*/ - -void USBD_CtlError( USB_OTG_CORE_HANDLE *pdev, - USB_SETUP_REQ *req) -{ - - DCD_EP_Stall(pdev , 0x80); - DCD_EP_Stall(pdev , 0); - USB_OTG_EP0_OutStart(pdev); -} - - -/** - * @brief USBD_GetString - * Convert Ascii string into unicode one - * @param desc : descriptor buffer - * @param unicode : Formatted string buffer (unicode) - * @param len : descriptor length - * @retval None - */ -void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len) -{ - uint8_t idx = 0; - - if (desc != NULL) - { - *len = USBD_GetLen(desc) * 2 + 2; - unicode[idx++] = *len; - unicode[idx++] = USB_DESC_TYPE_STRING; - - while (*desc != NULL) - { - unicode[idx++] = *desc++; - unicode[idx++] = 0x00; - } - } -} - -/** - * @brief USBD_GetLen - * return the string length - * @param buf : pointer to the ascii string buffer - * @retval string length - */ -static uint8_t USBD_GetLen(uint8_t *buf) -{ - uint8_t len = 0; - - while (*buf != NULL) - { - len++; - buf++; - } - - return len; -} -/** - * @} - */ - - -/** - * @} - */ - - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Release_Notes.html b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Release_Notes.html deleted file mode 100644 index 60f8ab87..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbdevicelib/Release_Notes.html +++ /dev/null @@ -1,950 +0,0 @@ - - - - - - - - -Release Notes for STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library - - - - - -
- -

 

- -
- - - - - -
- - - - - - - -
-

Back to Release page

-
-

Release Notes for STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library

-

Copyright - 2012 STMicroelectronics

-

-
-

 

- - - - -
-

Contents

-
    -
  1. Update History
  2. -
  3. License
  4. -
-

Update History

V1.1.0 / 19-March-2012

-

Main -Changes

- -
  • Official support of STM32F4xx devices
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • Handle test mode in the set feature request
  • Handle dynamically the USB SELF POWERED feature
  • Handle correctly the USBD_CtlError process to take into account error during Control OUT stage
  • Miscellaneous bug fix

V1.0.0 / 22-July-2011

Main -Changes

-
  • First official version for STM32F105/7xx and STM32F2xx devices

-

License

-

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless -required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See -the License for the specific language governing permissions and -limitations under the License.
-
-
-
-

For - complete documentation on STM32 - Microcontrollers visit www.st.com/STM32

-
-

-
- -
- -

 

- -
- - \ No newline at end of file diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/Release_Notes.html b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/Release_Notes.html deleted file mode 100644 index 1116edd3..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/Release_Notes.html +++ /dev/null @@ -1,950 +0,0 @@ - - - - - - - - -Release Notes for STM32F105/7xx, STM32F2xx and STM32F4xx USB OTG Driver - - - - - -
- -

 

- -
- - - - - -
- - - - - - - -
-

Back to Release page

-
-

Release Notes for STM32F105/7xx, STM32F2xx and STM32F4xx USB OTG Driver

-

Copyright - 2012 STMicroelectronics

-

-
-

 

- - - - -
-

Contents

-
    -
  1. Update History
  2. -
  3. License
  4. -
-

Update History

V2.1.0 / 19-March-2012

-

Main -Changes

- -
  • Official support of STM32F4xx devices
  • All source files: license disclaimer text update and add link to the License file on ST Internet
  • Unmask Session request interrupt to handle the connect event during the core start-up
  • Remove any reference to the USB HS external I2C PHY
  • Update optimization pragma for AR Compiler
  • Handle Correctly the Low Speed device connection in HS mode
  • Add a wrapper to isolate the library from the low level driver: connection done through ISR structure
  • Miscellaneous bug fix

V2.0.0 / 22-July-2011

Main -Changes

-
  • Second official version supporting STM32F105/7 and STM32F2xx devices
  • Rename the Library from "STM32_USB_HOST_Driver" to "STM32_USB_OTG_Driver"
  • Add support for STM32F2xx devices
  • Add support for Device and OTG modes
  • Change HCD layer to support High speed core
  • Change the Low level driver to support multi core support for Host mode
  • Add Stop mechanism for Host and Device modes
  • Change VBUS enabling method, to use the external or the internal VBUS when using the ULPI

V1.0.0 - 11/29/2010

-
  • Created 

License

-

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless -required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See -the License for the specific language governing permissions and -limitations under the License.
-
-
-
-

For - complete documentation on STM32 - Microcontrollers visit www.st.com/STM32

-
-

-
- -
- -

 

- -
- - \ No newline at end of file diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_bsp.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_bsp.h deleted file mode 100644 index 29763a90..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_bsp.h +++ /dev/null @@ -1,103 +0,0 @@ -/** - ****************************************************************************** - * @file usb_bsp.h - * @author MCD Application Team - * @version V2.1.0 - * @date 19-March-2012 - * @brief Specific api's relative to the used hardware platform - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_BSP__H__ -#define __USB_BSP__H__ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_core.h" -#include "usb_conf.h" - -/** @addtogroup USB_OTG_DRIVER - * @{ - */ - -/** @defgroup USB_BSP - * @brief This file is the - * @{ - */ - - -/** @defgroup USB_BSP_Exported_Defines - * @{ - */ -/** - * @} - */ - - -/** @defgroup USB_BSP_Exported_Types - * @{ - */ -/** - * @} - */ - - -/** @defgroup USB_BSP_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_BSP_Exported_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_BSP_Exported_FunctionsPrototype - * @{ - */ -void BSP_Init(void); - -void USB_OTG_BSP_Init (USB_OTG_CORE_HANDLE *pdev); -void USB_OTG_BSP_uDelay (const uint32_t usec); -void USB_OTG_BSP_mDelay (const uint32_t msec); -void USB_OTG_BSP_EnableInterrupt (USB_OTG_CORE_HANDLE *pdev); -#ifdef USE_HOST_MODE -void USB_OTG_BSP_ConfigVBUS(USB_OTG_CORE_HANDLE *pdev); -void USB_OTG_BSP_DriveVBUS(USB_OTG_CORE_HANDLE *pdev,uint8_t state); -#endif -/** - * @} - */ - -#endif //__USB_BSP__H__ - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_core.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_core.h deleted file mode 100644 index c574665c..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_core.h +++ /dev/null @@ -1,417 +0,0 @@ -/** - ****************************************************************************** - * @file usb_core.h - * @author MCD Application Team - * @version V2.1.0 - * @date 19-March-2012 - * @brief Header of the Core Layer - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_CORE_H__ -#define __USB_CORE_H__ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_conf.h" -#include "usb_regs.h" -#include "usb_defines.h" - - -/** @addtogroup USB_OTG_DRIVER - * @{ - */ - -/** @defgroup USB_CORE - * @brief usb otg driver core layer - * @{ - */ - - -/** @defgroup USB_CORE_Exported_Defines - * @{ - */ - -#define USB_OTG_EP0_IDLE 0 -#define USB_OTG_EP0_SETUP 1 -#define USB_OTG_EP0_DATA_IN 2 -#define USB_OTG_EP0_DATA_OUT 3 -#define USB_OTG_EP0_STATUS_IN 4 -#define USB_OTG_EP0_STATUS_OUT 5 -#define USB_OTG_EP0_STALL 6 - -#define USB_OTG_EP_TX_DIS 0x0000 -#define USB_OTG_EP_TX_STALL 0x0010 -#define USB_OTG_EP_TX_NAK 0x0020 -#define USB_OTG_EP_TX_VALID 0x0030 - -#define USB_OTG_EP_RX_DIS 0x0000 -#define USB_OTG_EP_RX_STALL 0x1000 -#define USB_OTG_EP_RX_NAK 0x2000 -#define USB_OTG_EP_RX_VALID 0x3000 -/** - * @} - */ -#define MAX_DATA_LENGTH 0x200 - -/** @defgroup USB_CORE_Exported_Types - * @{ - */ - - -typedef enum { - USB_OTG_OK = 0, - USB_OTG_FAIL -}USB_OTG_STS; - -typedef enum { - HC_IDLE = 0, - HC_XFRC, - HC_HALTED, - HC_NAK, - HC_NYET, - HC_STALL, - HC_XACTERR, - HC_BBLERR, - HC_DATATGLERR, -}HC_STATUS; - -typedef enum { - URB_IDLE = 0, - URB_DONE, - URB_NOTREADY, - URB_ERROR, - URB_STALL -}URB_STATE; - -typedef enum { - CTRL_START = 0, - CTRL_XFRC, - CTRL_HALTED, - CTRL_NAK, - CTRL_STALL, - CTRL_XACTERR, - CTRL_BBLERR, - CTRL_DATATGLERR, - CTRL_FAIL -}CTRL_STATUS; - - -typedef struct USB_OTG_hc -{ - uint8_t dev_addr ; - uint8_t ep_num; - uint8_t ep_is_in; - uint8_t speed; - uint8_t do_ping; - uint8_t ep_type; - uint16_t max_packet; - uint8_t data_pid; - uint8_t *xfer_buff; - uint32_t xfer_len; - uint32_t xfer_count; - uint8_t toggle_in; - uint8_t toggle_out; - uint32_t dma_addr; -} -USB_OTG_HC , *PUSB_OTG_HC; - -typedef struct USB_OTG_ep -{ - uint8_t num; - uint8_t is_in; - uint8_t is_stall; - uint8_t type; - uint8_t data_pid_start; - uint8_t even_odd_frame; - uint16_t tx_fifo_num; - uint32_t maxpacket; - /* transaction level variables*/ - uint8_t *xfer_buff; - uint32_t dma_addr; - uint32_t xfer_len; - uint32_t xfer_count; - /* Transfer level variables*/ - uint32_t rem_data_len; - uint32_t total_data_len; - uint32_t ctl_data_len; - -} - -USB_OTG_EP , *PUSB_OTG_EP; - - - -typedef struct USB_OTG_core_cfg -{ - uint8_t host_channels; - uint8_t dev_endpoints; - uint8_t speed; - uint8_t dma_enable; - uint16_t mps; - uint16_t TotalFifoSize; - uint8_t phy_itface; - uint8_t Sof_output; - uint8_t low_power; - uint8_t coreID; - -} -USB_OTG_CORE_CFGS, *PUSB_OTG_CORE_CFGS; - - - -typedef struct usb_setup_req { - - uint8_t bmRequest; - uint8_t bRequest; - uint16_t wValue; - uint16_t wIndex; - uint16_t wLength; -} USB_SETUP_REQ; - -typedef struct _Device_TypeDef -{ - uint8_t *(*GetDeviceDescriptor)( uint8_t speed , uint16_t *length); - uint8_t *(*GetLangIDStrDescriptor)( uint8_t speed , uint16_t *length); - uint8_t *(*GetManufacturerStrDescriptor)( uint8_t speed , uint16_t *length); - uint8_t *(*GetProductStrDescriptor)( uint8_t speed , uint16_t *length); - uint8_t *(*GetSerialStrDescriptor)( uint8_t speed , uint16_t *length); - uint8_t *(*GetConfigurationStrDescriptor)( uint8_t speed , uint16_t *length); - uint8_t *(*GetInterfaceStrDescriptor)( uint8_t speed , uint16_t *length); -} USBD_DEVICE, *pUSBD_DEVICE; - -//typedef struct USB_OTG_hPort -//{ -// void (*Disconnect) (void *phost); -// void (*Connect) (void *phost); -// uint8_t ConnStatus; -// uint8_t DisconnStatus; -// uint8_t ConnHandled; -// uint8_t DisconnHandled; -//} USB_OTG_hPort_TypeDef; - -typedef struct _Device_cb -{ - uint8_t (*Init) (void *pdev , uint8_t cfgidx); - uint8_t (*DeInit) (void *pdev , uint8_t cfgidx); - /* Control Endpoints*/ - uint8_t (*Setup) (void *pdev , USB_SETUP_REQ *req); - uint8_t (*EP0_TxSent) (void *pdev ); - uint8_t (*EP0_RxReady) (void *pdev ); - /* Class Specific Endpoints*/ - uint8_t (*DataIn) (void *pdev , uint8_t epnum); - uint8_t (*DataOut) (void *pdev , uint8_t epnum); - uint8_t (*SOF) (void *pdev); - uint8_t (*IsoINIncomplete) (void *pdev); - uint8_t (*IsoOUTIncomplete) (void *pdev); - - uint8_t *(*GetConfigDescriptor)( uint8_t speed , uint16_t *length); -#ifdef USB_OTG_HS_CORE - uint8_t *(*GetOtherConfigDescriptor)( uint8_t speed , uint16_t *length); -#endif - -#ifdef USB_SUPPORT_USER_STRING_DESC - uint8_t *(*GetUsrStrDescriptor)( uint8_t speed ,uint8_t index, uint16_t *length); -#endif - -} USBD_Class_cb_TypeDef; - - - -typedef struct _USBD_USR_PROP -{ - void (*Init)(void); - void (*DeviceReset)(uint8_t speed); - void (*DeviceConfigured)(void); - void (*DeviceSuspended)(void); - void (*DeviceResumed)(void); - - void (*DeviceConnected)(void); - void (*DeviceDisconnected)(void); - -} -USBD_Usr_cb_TypeDef; - -typedef struct _DCD -{ - uint8_t device_config; - uint8_t device_state; - uint8_t device_status; - uint8_t device_old_status; - uint8_t device_address; - uint8_t connection_status; - uint8_t test_mode; - uint32_t DevRemoteWakeup; - USB_OTG_EP in_ep [USB_OTG_MAX_TX_FIFOS]; - USB_OTG_EP out_ep [USB_OTG_MAX_TX_FIFOS]; - uint8_t setup_packet [8*3]; - USBD_Class_cb_TypeDef *class_cb; - USBD_Usr_cb_TypeDef *usr_cb; - USBD_DEVICE *usr_device; - uint8_t *pConfig_descriptor; - } -DCD_DEV , *DCD_PDEV; - - -typedef struct _HCD -{ - uint8_t Rx_Buffer [MAX_DATA_LENGTH]; - __IO uint32_t ConnSts; - __IO uint32_t ErrCnt[USB_OTG_MAX_TX_FIFOS]; - __IO uint32_t XferCnt[USB_OTG_MAX_TX_FIFOS]; - __IO HC_STATUS HC_Status[USB_OTG_MAX_TX_FIFOS]; - __IO URB_STATE URB_State[USB_OTG_MAX_TX_FIFOS]; - USB_OTG_HC hc [USB_OTG_MAX_TX_FIFOS]; - uint16_t channel [USB_OTG_MAX_TX_FIFOS]; -// USB_OTG_hPort_TypeDef *port_cb; -} -HCD_DEV , *USB_OTG_USBH_PDEV; - - -typedef struct _OTG -{ - uint8_t OTG_State; - uint8_t OTG_PrevState; - uint8_t OTG_Mode; -} -OTG_DEV , *USB_OTG_USBO_PDEV; - -typedef struct USB_OTG_handle -{ - USB_OTG_CORE_CFGS cfg; - USB_OTG_CORE_REGS regs; -#ifdef USE_DEVICE_MODE - DCD_DEV dev; -#endif -#ifdef USE_HOST_MODE - HCD_DEV host; -#endif -#ifdef USE_OTG_MODE - OTG_DEV otg; -#endif -} -USB_OTG_CORE_HANDLE , *PUSB_OTG_CORE_HANDLE; - -/** - * @} - */ - - -/** @defgroup USB_CORE_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup USB_CORE_Exported_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_CORE_Exported_FunctionsPrototype - * @{ - */ - - -USB_OTG_STS USB_OTG_CoreInit (USB_OTG_CORE_HANDLE *pdev); -USB_OTG_STS USB_OTG_SelectCore (USB_OTG_CORE_HANDLE *pdev, - USB_OTG_CORE_ID_TypeDef coreID); -USB_OTG_STS USB_OTG_EnableGlobalInt (USB_OTG_CORE_HANDLE *pdev); -USB_OTG_STS USB_OTG_DisableGlobalInt(USB_OTG_CORE_HANDLE *pdev); -void* USB_OTG_ReadPacket (USB_OTG_CORE_HANDLE *pdev , - uint8_t *dest, - uint16_t len); -USB_OTG_STS USB_OTG_WritePacket (USB_OTG_CORE_HANDLE *pdev , - uint8_t *src, - uint8_t ch_ep_num, - uint16_t len); -USB_OTG_STS USB_OTG_FlushTxFifo (USB_OTG_CORE_HANDLE *pdev , uint32_t num); -USB_OTG_STS USB_OTG_FlushRxFifo (USB_OTG_CORE_HANDLE *pdev); - -uint32_t USB_OTG_ReadCoreItr (USB_OTG_CORE_HANDLE *pdev); -uint32_t USB_OTG_ReadOtgItr (USB_OTG_CORE_HANDLE *pdev); -uint8_t USB_OTG_IsHostMode (USB_OTG_CORE_HANDLE *pdev); -uint8_t USB_OTG_IsDeviceMode (USB_OTG_CORE_HANDLE *pdev); -uint32_t USB_OTG_GetMode (USB_OTG_CORE_HANDLE *pdev); -USB_OTG_STS USB_OTG_PhyInit (USB_OTG_CORE_HANDLE *pdev); -USB_OTG_STS USB_OTG_SetCurrentMode (USB_OTG_CORE_HANDLE *pdev, - uint8_t mode); - -/*********************** HOST APIs ********************************************/ -#ifdef USE_HOST_MODE -USB_OTG_STS USB_OTG_CoreInitHost (USB_OTG_CORE_HANDLE *pdev); -USB_OTG_STS USB_OTG_EnableHostInt (USB_OTG_CORE_HANDLE *pdev); -USB_OTG_STS USB_OTG_HC_Init (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num); -USB_OTG_STS USB_OTG_HC_Halt (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num); -USB_OTG_STS USB_OTG_HC_StartXfer (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num); -USB_OTG_STS USB_OTG_HC_DoPing (USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num); -uint32_t USB_OTG_ReadHostAllChannels_intr (USB_OTG_CORE_HANDLE *pdev); -uint32_t USB_OTG_ResetPort (USB_OTG_CORE_HANDLE *pdev); -uint32_t USB_OTG_ReadHPRT0 (USB_OTG_CORE_HANDLE *pdev); -void USB_OTG_DriveVbus (USB_OTG_CORE_HANDLE *pdev, uint8_t state); -void USB_OTG_InitFSLSPClkSel (USB_OTG_CORE_HANDLE *pdev ,uint8_t freq); -uint8_t USB_OTG_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev) ; -void USB_OTG_StopHost (USB_OTG_CORE_HANDLE *pdev); -#endif -/********************* DEVICE APIs ********************************************/ -#ifdef USE_DEVICE_MODE -USB_OTG_STS USB_OTG_CoreInitDev (USB_OTG_CORE_HANDLE *pdev); -USB_OTG_STS USB_OTG_EnableDevInt (USB_OTG_CORE_HANDLE *pdev); -uint32_t USB_OTG_ReadDevAllInEPItr (USB_OTG_CORE_HANDLE *pdev); -enum USB_OTG_SPEED USB_OTG_GetDeviceSpeed (USB_OTG_CORE_HANDLE *pdev); -USB_OTG_STS USB_OTG_EP0Activate (USB_OTG_CORE_HANDLE *pdev); -USB_OTG_STS USB_OTG_EPActivate (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); -USB_OTG_STS USB_OTG_EPDeactivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); -USB_OTG_STS USB_OTG_EPStartXfer (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); -USB_OTG_STS USB_OTG_EP0StartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); -USB_OTG_STS USB_OTG_EPSetStall (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); -USB_OTG_STS USB_OTG_EPClearStall (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); -uint32_t USB_OTG_ReadDevAllOutEp_itr (USB_OTG_CORE_HANDLE *pdev); -uint32_t USB_OTG_ReadDevOutEP_itr (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); -uint32_t USB_OTG_ReadDevAllInEPItr (USB_OTG_CORE_HANDLE *pdev); -void USB_OTG_InitDevSpeed (USB_OTG_CORE_HANDLE *pdev , uint8_t speed); -uint8_t USBH_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev); -void USB_OTG_EP0_OutStart(USB_OTG_CORE_HANDLE *pdev); -void USB_OTG_ActiveRemoteWakeup(USB_OTG_CORE_HANDLE *pdev); -void USB_OTG_UngateClock(USB_OTG_CORE_HANDLE *pdev); -void USB_OTG_StopDevice(USB_OTG_CORE_HANDLE *pdev); -void USB_OTG_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep , uint32_t Status); -uint32_t USB_OTG_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,USB_OTG_EP *ep); -#endif -/** - * @} - */ - -#endif /* __USB_CORE_H__ */ - - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_dcd.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_dcd.h deleted file mode 100644 index 6922782a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_dcd.h +++ /dev/null @@ -1,164 +0,0 @@ -/** - ****************************************************************************** - * @file usb_dcd.h - * @author MCD Application Team - * @version V2.1.0 - * @date 19-March-2012 - * @brief Peripheral Driver Header file - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __DCD_H__ -#define __DCD_H__ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_core.h" - - -/** @addtogroup USB_OTG_DRIVER -* @{ -*/ - -/** @defgroup USB_DCD -* @brief This file is the -* @{ -*/ - - -/** @defgroup USB_DCD_Exported_Defines -* @{ -*/ -#define USB_OTG_EP_CONTROL 0 -#define USB_OTG_EP_ISOC 1 -#define USB_OTG_EP_BULK 2 -#define USB_OTG_EP_INT 3 -#define USB_OTG_EP_MASK 3 - -/* Device Status */ -#define USB_OTG_DEFAULT 1 -#define USB_OTG_ADDRESSED 2 -#define USB_OTG_CONFIGURED 3 -#define USB_OTG_SUSPENDED 4 - -/** -* @} -*/ - - -/** @defgroup USB_DCD_Exported_Types -* @{ -*/ -/******************************************************************************** -Data structure type -********************************************************************************/ -typedef struct -{ - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bEndpointAddress; - uint8_t bmAttributes; - uint16_t wMaxPacketSize; - uint8_t bInterval; -} -EP_DESCRIPTOR , *PEP_DESCRIPTOR; - -/** -* @} -*/ - - -/** @defgroup USB_DCD_Exported_Macros -* @{ -*/ -/** -* @} -*/ - -/** @defgroup USB_DCD_Exported_Variables -* @{ -*/ -/** -* @} -*/ - -/** @defgroup USB_DCD_Exported_FunctionsPrototype -* @{ -*/ -/******************************************************************************** -EXPORTED FUNCTION FROM THE USB-OTG LAYER -********************************************************************************/ -void DCD_Init(USB_OTG_CORE_HANDLE *pdev , - USB_OTG_CORE_ID_TypeDef coreID); - -void DCD_DevConnect (USB_OTG_CORE_HANDLE *pdev); -void DCD_DevDisconnect (USB_OTG_CORE_HANDLE *pdev); -void DCD_EP_SetAddress (USB_OTG_CORE_HANDLE *pdev, - uint8_t address); -uint32_t DCD_EP_Open(USB_OTG_CORE_HANDLE *pdev , - uint8_t ep_addr, - uint16_t ep_mps, - uint8_t ep_type); - -uint32_t DCD_EP_Close (USB_OTG_CORE_HANDLE *pdev, - uint8_t ep_addr); - - -uint32_t DCD_EP_PrepareRx ( USB_OTG_CORE_HANDLE *pdev, - uint8_t ep_addr, - uint8_t *pbuf, - uint16_t buf_len); - -uint32_t DCD_EP_Tx (USB_OTG_CORE_HANDLE *pdev, - uint8_t ep_addr, - uint8_t *pbuf, - uint32_t buf_len); -uint32_t DCD_EP_Stall (USB_OTG_CORE_HANDLE *pdev, - uint8_t epnum); -uint32_t DCD_EP_ClrStall (USB_OTG_CORE_HANDLE *pdev, - uint8_t epnum); -uint32_t DCD_EP_Flush (USB_OTG_CORE_HANDLE *pdev, - uint8_t epnum); -uint32_t DCD_Handle_ISR(USB_OTG_CORE_HANDLE *pdev); - -uint32_t DCD_GetEPStatus(USB_OTG_CORE_HANDLE *pdev , - uint8_t epnum); - -void DCD_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , - uint8_t epnum , - uint32_t Status); - -/** -* @} -*/ - - -#endif //__DCD_H__ - - -/** -* @} -*/ - -/** -* @} -*/ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_dcd_int.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_dcd_int.h deleted file mode 100644 index e2369e5d..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_dcd_int.h +++ /dev/null @@ -1,127 +0,0 @@ -/** - ****************************************************************************** - * @file usb_dcd_int.h - * @author MCD Application Team - * @version V2.1.0 - * @date 19-March-2012 - * @brief Peripheral Device Interface Layer - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef USB_DCD_INT_H__ -#define USB_DCD_INT_H__ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_dcd.h" - - - -/** @addtogroup USB_OTG_DRIVER - * @{ - */ - -/** @defgroup USB_DCD_INT - * @brief This file is the - * @{ - */ - - -/** @defgroup USB_DCD_INT_Exported_Defines - * @{ - */ - -typedef struct _USBD_DCD_INT -{ - uint8_t (* DataOutStage) (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); - uint8_t (* DataInStage) (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); - uint8_t (* SetupStage) (USB_OTG_CORE_HANDLE *pdev); - uint8_t (* SOF) (USB_OTG_CORE_HANDLE *pdev); - uint8_t (* Reset) (USB_OTG_CORE_HANDLE *pdev); - uint8_t (* Suspend) (USB_OTG_CORE_HANDLE *pdev); - uint8_t (* Resume) (USB_OTG_CORE_HANDLE *pdev); - uint8_t (* IsoINIncomplete) (USB_OTG_CORE_HANDLE *pdev); - uint8_t (* IsoOUTIncomplete) (USB_OTG_CORE_HANDLE *pdev); - - uint8_t (* DevConnected) (USB_OTG_CORE_HANDLE *pdev); - uint8_t (* DevDisconnected) (USB_OTG_CORE_HANDLE *pdev); - -}USBD_DCD_INT_cb_TypeDef; - -extern USBD_DCD_INT_cb_TypeDef *USBD_DCD_INT_fops; -/** - * @} - */ - - -/** @defgroup USB_DCD_INT_Exported_Types - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_DCD_INT_Exported_Macros - * @{ - */ - -#define CLEAR_IN_EP_INTR(epnum,intr) \ - diepint.d32=0; \ - diepint.b.intr = 1; \ - USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[epnum]->DIEPINT,diepint.d32); - -#define CLEAR_OUT_EP_INTR(epnum,intr) \ - doepint.d32=0; \ - doepint.b.intr = 1; \ - USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[epnum]->DOEPINT,doepint.d32); - -/** - * @} - */ - -/** @defgroup USB_DCD_INT_Exported_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_DCD_INT_Exported_FunctionsPrototype - * @{ - */ - -uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev); - -/** - * @} - */ - - -#endif // USB_DCD_INT_H__ - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_defines.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_defines.h deleted file mode 100644 index 28e6d168..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_defines.h +++ /dev/null @@ -1,249 +0,0 @@ -/** - ****************************************************************************** - * @file usb_defines.h - * @author MCD Application Team - * @version V2.1.0 - * @date 19-March-2012 - * @brief Header of the Core Layer - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_DEF_H__ -#define __USB_DEF_H__ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_conf.h" - -/** @addtogroup USB_OTG_DRIVER - * @{ - */ - -/** @defgroup USB_DEFINES - * @brief This file is the - * @{ - */ - - -/** @defgroup USB_DEFINES_Exported_Defines - * @{ - */ -/** - * @} - */ - - -/** @defgroup _CORE_DEFINES_ - * @{ - */ - -#define USB_OTG_SPEED_PARAM_HIGH 0 -#define USB_OTG_SPEED_PARAM_HIGH_IN_FULL 1 -#define USB_OTG_SPEED_PARAM_FULL 3 - -#define USB_OTG_SPEED_HIGH 0 -#define USB_OTG_SPEED_FULL 1 - -#define USB_OTG_ULPI_PHY 1 -#define USB_OTG_EMBEDDED_PHY 2 - -/** - * @} - */ - - -/** @defgroup _GLOBAL_DEFINES_ - * @{ - */ -#define GAHBCFG_TXFEMPTYLVL_EMPTY 1 -#define GAHBCFG_TXFEMPTYLVL_HALFEMPTY 0 -#define GAHBCFG_GLBINT_ENABLE 1 -#define GAHBCFG_INT_DMA_BURST_SINGLE 0 -#define GAHBCFG_INT_DMA_BURST_INCR 1 -#define GAHBCFG_INT_DMA_BURST_INCR4 3 -#define GAHBCFG_INT_DMA_BURST_INCR8 5 -#define GAHBCFG_INT_DMA_BURST_INCR16 7 -#define GAHBCFG_DMAENABLE 1 -#define GAHBCFG_TXFEMPTYLVL_EMPTY 1 -#define GAHBCFG_TXFEMPTYLVL_HALFEMPTY 0 -#define GRXSTS_PKTSTS_IN 2 -#define GRXSTS_PKTSTS_IN_XFER_COMP 3 -#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR 5 -#define GRXSTS_PKTSTS_CH_HALTED 7 -/** - * @} - */ - - -/** @defgroup _OnTheGo_DEFINES_ - * @{ - */ -#define MODE_HNP_SRP_CAPABLE 0 -#define MODE_SRP_ONLY_CAPABLE 1 -#define MODE_NO_HNP_SRP_CAPABLE 2 -#define MODE_SRP_CAPABLE_DEVICE 3 -#define MODE_NO_SRP_CAPABLE_DEVICE 4 -#define MODE_SRP_CAPABLE_HOST 5 -#define MODE_NO_SRP_CAPABLE_HOST 6 -#define A_HOST 1 -#define A_SUSPEND 2 -#define A_PERIPHERAL 3 -#define B_PERIPHERAL 4 -#define B_HOST 5 -#define DEVICE_MODE 0 -#define HOST_MODE 1 -#define OTG_MODE 2 -/** - * @} - */ - - -/** @defgroup __DEVICE_DEFINES_ - * @{ - */ -#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ 0 -#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ 1 -#define DSTS_ENUMSPD_LS_PHY_6MHZ 2 -#define DSTS_ENUMSPD_FS_PHY_48MHZ 3 - -#define DCFG_FRAME_INTERVAL_80 0 -#define DCFG_FRAME_INTERVAL_85 1 -#define DCFG_FRAME_INTERVAL_90 2 -#define DCFG_FRAME_INTERVAL_95 3 - -#define DEP0CTL_MPS_64 0 -#define DEP0CTL_MPS_32 1 -#define DEP0CTL_MPS_16 2 -#define DEP0CTL_MPS_8 3 - -#define EP_SPEED_LOW 0 -#define EP_SPEED_FULL 1 -#define EP_SPEED_HIGH 2 - -#define EP_TYPE_CTRL 0 -#define EP_TYPE_ISOC 1 -#define EP_TYPE_BULK 2 -#define EP_TYPE_INTR 3 -#define EP_TYPE_MSK 3 - -#define STS_GOUT_NAK 1 -#define STS_DATA_UPDT 2 -#define STS_XFER_COMP 3 -#define STS_SETUP_COMP 4 -#define STS_SETUP_UPDT 6 -/** - * @} - */ - - -/** @defgroup __HOST_DEFINES_ - * @{ - */ -#define HC_PID_DATA0 0 -#define HC_PID_DATA2 1 -#define HC_PID_DATA1 2 -#define HC_PID_SETUP 3 - -#define HPRT0_PRTSPD_HIGH_SPEED 0 -#define HPRT0_PRTSPD_FULL_SPEED 1 -#define HPRT0_PRTSPD_LOW_SPEED 2 - -#define HCFG_30_60_MHZ 0 -#define HCFG_48_MHZ 1 -#define HCFG_6_MHZ 2 - -#define HCCHAR_CTRL 0 -#define HCCHAR_ISOC 1 -#define HCCHAR_BULK 2 -#define HCCHAR_INTR 3 - -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) - -/** - * @} - */ - - -/** @defgroup USB_DEFINES_Exported_Types - * @{ - */ - -typedef enum -{ - USB_OTG_HS_CORE_ID = 0, - USB_OTG_FS_CORE_ID = 1 -}USB_OTG_CORE_ID_TypeDef; -/** - * @} - */ - - -/** @defgroup USB_DEFINES_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_DEFINES_Exported_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_DEFINES_Exported_FunctionsPrototype - * @{ - */ -/** - * @} - */ - - -/** @defgroup Internal_Macro's - * @{ - */ -#define USB_OTG_READ_REG32(reg) (*(__IO uint32_t *)reg) -#define USB_OTG_WRITE_REG32(reg,value) (*(__IO uint32_t *)reg = value) -#define USB_OTG_MODIFY_REG32(reg,clear_mask,set_mask) \ - USB_OTG_WRITE_REG32(reg, (((USB_OTG_READ_REG32(reg)) & ~clear_mask) | set_mask ) ) - -/******************************************************************************** - ENUMERATION TYPE -********************************************************************************/ -enum USB_OTG_SPEED { - USB_SPEED_UNKNOWN = 0, - USB_SPEED_LOW, - USB_SPEED_FULL, - USB_SPEED_HIGH -}; - -#endif //__USB_DEFINES__H__ - - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_regs.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_regs.h deleted file mode 100644 index 323e8705..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/inc/usb_regs.h +++ /dev/null @@ -1,1188 +0,0 @@ -/** - ****************************************************************************** - * @file usb_regs.h - * @author MCD Application Team - * @version V2.1.0 - * @date 19-March-2012 - * @brief hardware registers - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_OTG_REGS_H__ -#define __USB_OTG_REGS_H__ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_conf.h" - - -/** @addtogroup USB_OTG_DRIVER - * @{ - */ - -/** @defgroup USB_REGS - * @brief This file is the - * @{ - */ - - -/** @defgroup USB_REGS_Exported_Defines - * @{ - */ - -#define USB_OTG_HS_BASE_ADDR 0x40040000 -#define USB_OTG_FS_BASE_ADDR 0x50000000 - -#define USB_OTG_CORE_GLOBAL_REGS_OFFSET 0x000 -#define USB_OTG_DEV_GLOBAL_REG_OFFSET 0x800 -#define USB_OTG_DEV_IN_EP_REG_OFFSET 0x900 -#define USB_OTG_EP_REG_OFFSET 0x20 -#define USB_OTG_DEV_OUT_EP_REG_OFFSET 0xB00 -#define USB_OTG_HOST_GLOBAL_REG_OFFSET 0x400 -#define USB_OTG_HOST_PORT_REGS_OFFSET 0x440 -#define USB_OTG_HOST_CHAN_REGS_OFFSET 0x500 -#define USB_OTG_CHAN_REGS_OFFSET 0x20 -#define USB_OTG_PCGCCTL_OFFSET 0xE00 -#define USB_OTG_DATA_FIFO_OFFSET 0x1000 -#define USB_OTG_DATA_FIFO_SIZE 0x1000 - - -#define USB_OTG_MAX_TX_FIFOS 15 - -#define USB_OTG_HS_MAX_PACKET_SIZE 512 -#define USB_OTG_FS_MAX_PACKET_SIZE 64 -#define USB_OTG_MAX_EP0_SIZE 64 -/** - * @} - */ - -/** @defgroup USB_REGS_Exported_Types - * @{ - */ - -/** @defgroup __USB_OTG_Core_register - * @{ - */ -typedef struct _USB_OTG_GREGS //000h -{ - __IO uint32_t GOTGCTL; /* USB_OTG Control and Status Register 000h*/ - __IO uint32_t GOTGINT; /* USB_OTG Interrupt Register 004h*/ - __IO uint32_t GAHBCFG; /* Core AHB Configuration Register 008h*/ - __IO uint32_t GUSBCFG; /* Core USB Configuration Register 00Ch*/ - __IO uint32_t GRSTCTL; /* Core Reset Register 010h*/ - __IO uint32_t GINTSTS; /* Core Interrupt Register 014h*/ - __IO uint32_t GINTMSK; /* Core Interrupt Mask Register 018h*/ - __IO uint32_t GRXSTSR; /* Receive Sts Q Read Register 01Ch*/ - __IO uint32_t GRXSTSP; /* Receive Sts Q Read & POP Register 020h*/ - __IO uint32_t GRXFSIZ; /* Receive FIFO Size Register 024h*/ - __IO uint32_t DIEPTXF0_HNPTXFSIZ; /* EP0 / Non Periodic Tx FIFO Size Register 028h*/ - __IO uint32_t HNPTXSTS; /* Non Periodic Tx FIFO/Queue Sts reg 02Ch*/ - uint32_t Reserved30[2]; /* Reserved 030h*/ - __IO uint32_t GCCFG; /* General Purpose IO Register 038h*/ - __IO uint32_t CID; /* User ID Register 03Ch*/ - uint32_t Reserved40[48]; /* Reserved 040h-0FFh*/ - __IO uint32_t HPTXFSIZ; /* Host Periodic Tx FIFO Size Reg 100h*/ - __IO uint32_t DIEPTXF[USB_OTG_MAX_TX_FIFOS];/* dev Periodic Transmit FIFO */ -} -USB_OTG_GREGS; -/** - * @} - */ - - -/** @defgroup __device_Registers - * @{ - */ -typedef struct _USB_OTG_DREGS // 800h -{ - __IO uint32_t DCFG; /* dev Configuration Register 800h*/ - __IO uint32_t DCTL; /* dev Control Register 804h*/ - __IO uint32_t DSTS; /* dev Status Register (RO) 808h*/ - uint32_t Reserved0C; /* Reserved 80Ch*/ - __IO uint32_t DIEPMSK; /* dev IN Endpoint Mask 810h*/ - __IO uint32_t DOEPMSK; /* dev OUT Endpoint Mask 814h*/ - __IO uint32_t DAINT; /* dev All Endpoints Itr Reg 818h*/ - __IO uint32_t DAINTMSK; /* dev All Endpoints Itr Mask 81Ch*/ - uint32_t Reserved20; /* Reserved 820h*/ - uint32_t Reserved9; /* Reserved 824h*/ - __IO uint32_t DVBUSDIS; /* dev VBUS discharge Register 828h*/ - __IO uint32_t DVBUSPULSE; /* dev VBUS Pulse Register 82Ch*/ - __IO uint32_t DTHRCTL; /* dev thr 830h*/ - __IO uint32_t DIEPEMPMSK; /* dev empty msk 834h*/ - __IO uint32_t DEACHINT; /* dedicated EP interrupt 838h*/ - __IO uint32_t DEACHMSK; /* dedicated EP msk 83Ch*/ - uint32_t Reserved40; /* dedicated EP mask 840h*/ - __IO uint32_t DINEP1MSK; /* dedicated EP mask 844h*/ - uint32_t Reserved44[15]; /* Reserved 844-87Ch*/ - __IO uint32_t DOUTEP1MSK; /* dedicated EP msk 884h*/ -} -USB_OTG_DREGS; -/** - * @} - */ - - -/** @defgroup __IN_Endpoint-Specific_Register - * @{ - */ -typedef struct _USB_OTG_INEPREGS -{ - __IO uint32_t DIEPCTL; /* dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h*/ - uint32_t Reserved04; /* Reserved 900h + (ep_num * 20h) + 04h*/ - __IO uint32_t DIEPINT; /* dev IN Endpoint Itr Reg 900h + (ep_num * 20h) + 08h*/ - uint32_t Reserved0C; /* Reserved 900h + (ep_num * 20h) + 0Ch*/ - __IO uint32_t DIEPTSIZ; /* IN Endpoint Txfer Size 900h + (ep_num * 20h) + 10h*/ - __IO uint32_t DIEPDMA; /* IN Endpoint DMA Address Reg 900h + (ep_num * 20h) + 14h*/ - __IO uint32_t DTXFSTS;/*IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h*/ - uint32_t Reserved18; /* Reserved 900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch*/ -} -USB_OTG_INEPREGS; -/** - * @} - */ - - -/** @defgroup __OUT_Endpoint-Specific_Registers - * @{ - */ -typedef struct _USB_OTG_OUTEPREGS -{ - __IO uint32_t DOEPCTL; /* dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h*/ - uint32_t Reserved04; /* Reserved B00h + (ep_num * 20h) + 04h*/ - __IO uint32_t DOEPINT; /* dev OUT Endpoint Itr Reg B00h + (ep_num * 20h) + 08h*/ - uint32_t Reserved0C; /* Reserved B00h + (ep_num * 20h) + 0Ch*/ - __IO uint32_t DOEPTSIZ; /* dev OUT Endpoint Txfer Size B00h + (ep_num * 20h) + 10h*/ - __IO uint32_t DOEPDMA; /* dev OUT Endpoint DMA Address B00h + (ep_num * 20h) + 14h*/ - uint32_t Reserved18[2]; /* Reserved B00h + (ep_num * 20h) + 18h - B00h + (ep_num * 20h) + 1Ch*/ -} -USB_OTG_OUTEPREGS; -/** - * @} - */ - - -/** @defgroup __Host_Mode_Register_Structures - * @{ - */ -typedef struct _USB_OTG_HREGS -{ - __IO uint32_t HCFG; /* Host Configuration Register 400h*/ - __IO uint32_t HFIR; /* Host Frame Interval Register 404h*/ - __IO uint32_t HFNUM; /* Host Frame Nbr/Frame Remaining 408h*/ - uint32_t Reserved40C; /* Reserved 40Ch*/ - __IO uint32_t HPTXSTS; /* Host Periodic Tx FIFO/ Queue Status 410h*/ - __IO uint32_t HAINT; /* Host All Channels Interrupt Register 414h*/ - __IO uint32_t HAINTMSK; /* Host All Channels Interrupt Mask 418h*/ -} -USB_OTG_HREGS; -/** - * @} - */ - - -/** @defgroup __Host_Channel_Specific_Registers - * @{ - */ -typedef struct _USB_OTG_HC_REGS -{ - __IO uint32_t HCCHAR; - __IO uint32_t HCSPLT; - __IO uint32_t HCINT; - __IO uint32_t HCINTMSK; - __IO uint32_t HCTSIZ; - __IO uint32_t HCDMA; - uint32_t Reserved[2]; -} -USB_OTG_HC_REGS; -/** - * @} - */ - - -/** @defgroup __otg_Core_registers - * @{ - */ -typedef struct USB_OTG_core_regs //000h -{ - USB_OTG_GREGS *GREGS; - USB_OTG_DREGS *DREGS; - USB_OTG_HREGS *HREGS; - USB_OTG_INEPREGS *INEP_REGS[USB_OTG_MAX_TX_FIFOS]; - USB_OTG_OUTEPREGS *OUTEP_REGS[USB_OTG_MAX_TX_FIFOS]; - USB_OTG_HC_REGS *HC_REGS[USB_OTG_MAX_TX_FIFOS]; - __IO uint32_t *HPRT0; - __IO uint32_t *DFIFO[USB_OTG_MAX_TX_FIFOS]; - __IO uint32_t *PCGCCTL; -} -USB_OTG_CORE_REGS , *PUSB_OTG_CORE_REGS; -typedef union _USB_OTG_GOTGCTL_TypeDef -{ - uint32_t d32; - struct - { -uint32_t sesreqscs : - 1; -uint32_t sesreq : - 1; -uint32_t Reserved2_7 : - 6; -uint32_t hstnegscs : - 1; -uint32_t hnpreq : - 1; -uint32_t hstsethnpen : - 1; -uint32_t devhnpen : - 1; -uint32_t Reserved12_15 : - 4; -uint32_t conidsts : - 1; -uint32_t dbct : - 1; -uint32_t asesvld : - 1; -uint32_t bsesvld : - 1; -uint32_t Reserved20_31 : - 12; - } - b; -} USB_OTG_GOTGCTL_TypeDef ; - -typedef union _USB_OTG_GOTGINT_TypeDef -{ - uint32_t d32; - struct - { -uint32_t Reserved0_1 : - 2; -uint32_t sesenddet : - 1; -uint32_t Reserved3_7 : - 5; -uint32_t sesreqsucstschng : - 1; -uint32_t hstnegsucstschng : - 1; -uint32_t reserver10_16 : - 7; -uint32_t hstnegdet : - 1; -uint32_t adevtoutchng : - 1; -uint32_t debdone : - 1; -uint32_t Reserved31_20 : - 12; - } - b; -} USB_OTG_GOTGINT_TypeDef ; -typedef union _USB_OTG_GAHBCFG_TypeDef -{ - uint32_t d32; - struct - { -uint32_t glblintrmsk : - 1; -uint32_t hburstlen : - 4; -uint32_t dmaenable : - 1; -uint32_t Reserved : - 1; -uint32_t nptxfemplvl_txfemplvl : - 1; -uint32_t ptxfemplvl : - 1; -uint32_t Reserved9_31 : - 23; - } - b; -} USB_OTG_GAHBCFG_TypeDef ; -typedef union _USB_OTG_GUSBCFG_TypeDef -{ - uint32_t d32; - struct - { -uint32_t toutcal : - 3; -uint32_t Reserved3_5 : - 3; -uint32_t physel : - 1; -uint32_t Reserved7 : - 1; -uint32_t srpcap : - 1; -uint32_t hnpcap : - 1; -uint32_t usbtrdtim : - 4; -uint32_t Reserved14 : - 1; -uint32_t phylpwrclksel : - 1; -uint32_t Reserved16 : - 1; -uint32_t ulpi_fsls : - 1; -uint32_t ulpi_auto_res : - 1; -uint32_t ulpi_clk_sus_m : - 1; -uint32_t ulpi_ext_vbus_drv : - 1; -uint32_t ulpi_int_vbus_ind : - 1; -uint32_t term_sel_dl_pulse : - 1; -uint32_t ulpi_ind_cpl : - 1; -uint32_t ulpi_passthrough : - 1; -uint32_t ulpi_protect_disable : - 1; -uint32_t Reserved26_28 : - 3; -uint32_t force_host : - 1; -uint32_t force_dev : - 1; -uint32_t corrupt_tx : - 1; - } - b; -} USB_OTG_GUSBCFG_TypeDef ; -typedef union _USB_OTG_GRSTCTL_TypeDef -{ - uint32_t d32; - struct - { -uint32_t csftrst : - 1; -uint32_t hsftrst : - 1; -uint32_t hstfrm : - 1; -uint32_t Reserved3 : - 1; -uint32_t rxfflsh : - 1; -uint32_t txfflsh : - 1; -uint32_t txfnum : - 5; -uint32_t Reserved11_29 : - 19; -uint32_t dmareq : - 1; -uint32_t ahbidle : - 1; - } - b; -} USB_OTG_GRSTCTL_TypeDef ; -typedef union _USB_OTG_GINTMSK_TypeDef -{ - uint32_t d32; - struct - { -uint32_t Reserved0 : - 1; -uint32_t modemismatch : - 1; -uint32_t otgintr : - 1; -uint32_t sofintr : - 1; -uint32_t rxstsqlvl : - 1; -uint32_t nptxfempty : - 1; -uint32_t ginnakeff : - 1; -uint32_t goutnakeff : - 1; -uint32_t Reserved8_9 : - 2; -uint32_t erlysuspend : - 1; -uint32_t usbsuspend : - 1; -uint32_t usbreset : - 1; -uint32_t enumdone : - 1; -uint32_t isooutdrop : - 1; -uint32_t eopframe : - 1; -uint32_t Reserved16 : - 1; -uint32_t epmismatch : - 1; -uint32_t inepintr : - 1; -uint32_t outepintr : - 1; -uint32_t incomplisoin : - 1; -uint32_t incomplisoout : - 1; -uint32_t Reserved22_23 : - 2; -uint32_t portintr : - 1; -uint32_t hcintr : - 1; -uint32_t ptxfempty : - 1; -uint32_t Reserved27 : - 1; -uint32_t conidstschng : - 1; -uint32_t disconnect : - 1; -uint32_t sessreqintr : - 1; -uint32_t wkupintr : - 1; - } - b; -} USB_OTG_GINTMSK_TypeDef ; -typedef union _USB_OTG_GINTSTS_TypeDef -{ - uint32_t d32; - struct - { -uint32_t curmode : - 1; -uint32_t modemismatch : - 1; -uint32_t otgintr : - 1; -uint32_t sofintr : - 1; -uint32_t rxstsqlvl : - 1; -uint32_t nptxfempty : - 1; -uint32_t ginnakeff : - 1; -uint32_t goutnakeff : - 1; -uint32_t Reserved8_9 : - 2; -uint32_t erlysuspend : - 1; -uint32_t usbsuspend : - 1; -uint32_t usbreset : - 1; -uint32_t enumdone : - 1; -uint32_t isooutdrop : - 1; -uint32_t eopframe : - 1; -uint32_t Reserved16_17 : - 2; -uint32_t inepint: - 1; -uint32_t outepintr : - 1; -uint32_t incomplisoin : - 1; -uint32_t incomplisoout : - 1; -uint32_t Reserved22_23 : - 2; -uint32_t portintr : - 1; -uint32_t hcintr : - 1; -uint32_t ptxfempty : - 1; -uint32_t Reserved27 : - 1; -uint32_t conidstschng : - 1; -uint32_t disconnect : - 1; -uint32_t sessreqintr : - 1; -uint32_t wkupintr : - 1; - } - b; -} USB_OTG_GINTSTS_TypeDef ; -typedef union _USB_OTG_DRXSTS_TypeDef -{ - uint32_t d32; - struct - { -uint32_t epnum : - 4; -uint32_t bcnt : - 11; -uint32_t dpid : - 2; -uint32_t pktsts : - 4; -uint32_t fn : - 4; -uint32_t Reserved : - 7; - } - b; -} USB_OTG_DRXSTS_TypeDef ; -typedef union _USB_OTG_GRXSTS_TypeDef -{ - uint32_t d32; - struct - { -uint32_t chnum : - 4; -uint32_t bcnt : - 11; -uint32_t dpid : - 2; -uint32_t pktsts : - 4; -uint32_t Reserved : - 11; - } - b; -} USB_OTG_GRXFSTS_TypeDef ; -typedef union _USB_OTG_FSIZ_TypeDef -{ - uint32_t d32; - struct - { -uint32_t startaddr : - 16; -uint32_t depth : - 16; - } - b; -} USB_OTG_FSIZ_TypeDef ; -typedef union _USB_OTG_HNPTXSTS_TypeDef -{ - uint32_t d32; - struct - { - uint32_t nptxfspcavail : - 16; - uint32_t nptxqspcavail : - 8; - struct - { - uint32_t terminate : - 1; - uint32_t token : - 2; - uint32_t chnum : - 4; - } nptxqtop; - uint32_t Reserved : - 1; - } - b; -} USB_OTG_HNPTXSTS_TypeDef ; -typedef union _USB_OTG_DTXFSTSn_TypeDef -{ - uint32_t d32; - struct - { -uint32_t txfspcavail : - 16; -uint32_t Reserved : - 16; - } - b; -} USB_OTG_DTXFSTSn_TypeDef ; - -typedef union _USB_OTG_GCCFG_TypeDef -{ - uint32_t d32; - struct - { -uint32_t Reserved_in : - 16; -uint32_t pwdn : - 1; -uint32_t Reserved_17 : - 1; -uint32_t vbussensingA : - 1; -uint32_t vbussensingB : - 1; -uint32_t sofouten : - 1; -uint32_t disablevbussensing : - 1; -uint32_t Reserved_out : - 10; - } - b; -} USB_OTG_GCCFG_TypeDef ; - -typedef union _USB_OTG_DCFG_TypeDef -{ - uint32_t d32; - struct - { -uint32_t devspd : - 2; -uint32_t nzstsouthshk : - 1; -uint32_t Reserved3 : - 1; -uint32_t devaddr : - 7; -uint32_t perfrint : - 2; -uint32_t Reserved12_31 : - 19; - } - b; -} USB_OTG_DCFG_TypeDef ; -typedef union _USB_OTG_DCTL_TypeDef -{ - uint32_t d32; - struct - { -uint32_t rmtwkupsig : - 1; -uint32_t sftdiscon : - 1; -uint32_t gnpinnaksts : - 1; -uint32_t goutnaksts : - 1; -uint32_t tstctl : - 3; -uint32_t sgnpinnak : - 1; -uint32_t cgnpinnak : - 1; -uint32_t sgoutnak : - 1; -uint32_t cgoutnak : - 1; -uint32_t poprg_done : - 1; -uint32_t Reserved : - 20; - } - b; -} USB_OTG_DCTL_TypeDef ; -typedef union _USB_OTG_DSTS_TypeDef -{ - uint32_t d32; - struct - { -uint32_t suspsts : - 1; -uint32_t enumspd : - 2; -uint32_t errticerr : - 1; -uint32_t Reserved4_7: - 4; -uint32_t soffn : - 14; -uint32_t Reserved22_31 : - 10; - } - b; -} USB_OTG_DSTS_TypeDef ; -typedef union _USB_OTG_DIEPINTn_TypeDef -{ - uint32_t d32; - struct - { -uint32_t xfercompl : - 1; -uint32_t epdisabled : - 1; -uint32_t Reserved2 : - 1; -uint32_t timeout : - 1; -uint32_t intktxfemp : - 1; -uint32_t Reserved5 : - 1; -uint32_t inepnakeff : - 1; -uint32_t emptyintr : - 1; -uint32_t txfifoundrn : - 1; -uint32_t Reserved14_31 : - 23; - } - b; -} USB_OTG_DIEPINTn_TypeDef ; -typedef union _USB_OTG_DIEPINTn_TypeDef USB_OTG_DIEPMSK_TypeDef ; -typedef union _USB_OTG_DOEPINTn_TypeDef -{ - uint32_t d32; - struct - { -uint32_t xfercompl : - 1; -uint32_t epdisabled : - 1; -uint32_t Reserved2 : - 1; -uint32_t setup : - 1; -uint32_t Reserved04_31 : - 28; - } - b; -} USB_OTG_DOEPINTn_TypeDef ; -typedef union _USB_OTG_DOEPINTn_TypeDef USB_OTG_DOEPMSK_TypeDef ; - -typedef union _USB_OTG_DAINT_TypeDef -{ - uint32_t d32; - struct - { -uint32_t in : - 16; -uint32_t out : - 16; - } - ep; -} USB_OTG_DAINT_TypeDef ; - -typedef union _USB_OTG_DTHRCTL_TypeDef -{ - uint32_t d32; - struct - { -uint32_t non_iso_thr_en : - 1; -uint32_t iso_thr_en : - 1; -uint32_t tx_thr_len : - 9; -uint32_t Reserved11_15 : - 5; -uint32_t rx_thr_en : - 1; -uint32_t rx_thr_len : - 9; -uint32_t Reserved26 : - 1; -uint32_t arp_en : - 1; -uint32_t Reserved28_31 : - 4; - } - b; -} USB_OTG_DTHRCTL_TypeDef ; -typedef union _USB_OTG_DEPCTL_TypeDef -{ - uint32_t d32; - struct - { -uint32_t mps : - 11; -uint32_t reserved : - 4; -uint32_t usbactep : - 1; -uint32_t dpid : - 1; -uint32_t naksts : - 1; -uint32_t eptype : - 2; -uint32_t snp : - 1; -uint32_t stall : - 1; -uint32_t txfnum : - 4; -uint32_t cnak : - 1; -uint32_t snak : - 1; -uint32_t setd0pid : - 1; -uint32_t setd1pid : - 1; -uint32_t epdis : - 1; -uint32_t epena : - 1; - } - b; -} USB_OTG_DEPCTL_TypeDef ; -typedef union _USB_OTG_DEPXFRSIZ_TypeDef -{ - uint32_t d32; - struct - { -uint32_t xfersize : - 19; -uint32_t pktcnt : - 10; -uint32_t mc : - 2; -uint32_t Reserved : - 1; - } - b; -} USB_OTG_DEPXFRSIZ_TypeDef ; -typedef union _USB_OTG_DEP0XFRSIZ_TypeDef -{ - uint32_t d32; - struct - { -uint32_t xfersize : - 7; -uint32_t Reserved7_18 : - 12; -uint32_t pktcnt : - 2; -uint32_t Reserved20_28 : - 9; -uint32_t supcnt : - 2; - uint32_t Reserved31; - } - b; -} USB_OTG_DEP0XFRSIZ_TypeDef ; -typedef union _USB_OTG_HCFG_TypeDef -{ - uint32_t d32; - struct - { -uint32_t fslspclksel : - 2; -uint32_t fslssupp : - 1; - } - b; -} USB_OTG_HCFG_TypeDef ; -typedef union _USB_OTG_HFRMINTRVL_TypeDef -{ - uint32_t d32; - struct - { -uint32_t frint : - 16; -uint32_t Reserved : - 16; - } - b; -} USB_OTG_HFRMINTRVL_TypeDef ; - -typedef union _USB_OTG_HFNUM_TypeDef -{ - uint32_t d32; - struct - { -uint32_t frnum : - 16; -uint32_t frrem : - 16; - } - b; -} USB_OTG_HFNUM_TypeDef ; -typedef union _USB_OTG_HPTXSTS_TypeDef -{ - uint32_t d32; - struct - { -uint32_t ptxfspcavail : - 16; -uint32_t ptxqspcavail : - 8; - struct - { - uint32_t terminate : - 1; - uint32_t token : - 2; - uint32_t chnum : - 4; - uint32_t odd_even : - 1; - } ptxqtop; - } - b; -} USB_OTG_HPTXSTS_TypeDef ; -typedef union _USB_OTG_HPRT0_TypeDef -{ - uint32_t d32; - struct - { -uint32_t prtconnsts : - 1; -uint32_t prtconndet : - 1; -uint32_t prtena : - 1; -uint32_t prtenchng : - 1; -uint32_t prtovrcurract : - 1; -uint32_t prtovrcurrchng : - 1; -uint32_t prtres : - 1; -uint32_t prtsusp : - 1; -uint32_t prtrst : - 1; -uint32_t Reserved9 : - 1; -uint32_t prtlnsts : - 2; -uint32_t prtpwr : - 1; -uint32_t prttstctl : - 4; -uint32_t prtspd : - 2; -uint32_t Reserved19_31 : - 13; - } - b; -} USB_OTG_HPRT0_TypeDef ; -typedef union _USB_OTG_HAINT_TypeDef -{ - uint32_t d32; - struct - { -uint32_t chint : - 16; -uint32_t Reserved : - 16; - } - b; -} USB_OTG_HAINT_TypeDef ; -typedef union _USB_OTG_HAINTMSK_TypeDef -{ - uint32_t d32; - struct - { -uint32_t chint : - 16; -uint32_t Reserved : - 16; - } - b; -} USB_OTG_HAINTMSK_TypeDef ; -typedef union _USB_OTG_HCCHAR_TypeDef -{ - uint32_t d32; - struct - { -uint32_t mps : - 11; -uint32_t epnum : - 4; -uint32_t epdir : - 1; -uint32_t Reserved : - 1; -uint32_t lspddev : - 1; -uint32_t eptype : - 2; -uint32_t multicnt : - 2; -uint32_t devaddr : - 7; -uint32_t oddfrm : - 1; -uint32_t chdis : - 1; -uint32_t chen : - 1; - } - b; -} USB_OTG_HCCHAR_TypeDef ; -typedef union _USB_OTG_HCSPLT_TypeDef -{ - uint32_t d32; - struct - { -uint32_t prtaddr : - 7; -uint32_t hubaddr : - 7; -uint32_t xactpos : - 2; -uint32_t compsplt : - 1; -uint32_t Reserved : - 14; -uint32_t spltena : - 1; - } - b; -} USB_OTG_HCSPLT_TypeDef ; -typedef union _USB_OTG_HCINTn_TypeDef -{ - uint32_t d32; - struct - { -uint32_t xfercompl : - 1; -uint32_t chhltd : - 1; -uint32_t ahberr : - 1; -uint32_t stall : - 1; -uint32_t nak : - 1; -uint32_t ack : - 1; -uint32_t nyet : - 1; -uint32_t xacterr : - 1; -uint32_t bblerr : - 1; -uint32_t frmovrun : - 1; -uint32_t datatglerr : - 1; -uint32_t Reserved : - 21; - } - b; -} USB_OTG_HCINTn_TypeDef ; -typedef union _USB_OTG_HCTSIZn_TypeDef -{ - uint32_t d32; - struct - { -uint32_t xfersize : - 19; -uint32_t pktcnt : - 10; -uint32_t pid : - 2; -uint32_t dopng : - 1; - } - b; -} USB_OTG_HCTSIZn_TypeDef ; -typedef union _USB_OTG_HCINTMSK_TypeDef -{ - uint32_t d32; - struct - { -uint32_t xfercompl : - 1; -uint32_t chhltd : - 1; -uint32_t ahberr : - 1; -uint32_t stall : - 1; -uint32_t nak : - 1; -uint32_t ack : - 1; -uint32_t nyet : - 1; -uint32_t xacterr : - 1; -uint32_t bblerr : - 1; -uint32_t frmovrun : - 1; -uint32_t datatglerr : - 1; -uint32_t Reserved : - 21; - } - b; -} USB_OTG_HCINTMSK_TypeDef ; - -typedef union _USB_OTG_PCGCCTL_TypeDef -{ - uint32_t d32; - struct - { -uint32_t stoppclk : - 1; -uint32_t gatehclk : - 1; -uint32_t Reserved2_3 : - 2; -uint32_t phy_susp : - 1; -uint32_t Reserved5_31 : - 27; - } - b; -} USB_OTG_PCGCCTL_TypeDef ; - -/** - * @} - */ - - -/** @defgroup USB_REGS_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_REGS_Exported_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_REGS_Exported_FunctionsPrototype - * @{ - */ -/** - * @} - */ - - -#endif //__USB_OTG_REGS_H__ - - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_core.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_core.c deleted file mode 100644 index e257e73d..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_core.c +++ /dev/null @@ -1,2162 +0,0 @@ -/** - ****************************************************************************** - * @file usb_core.c - * @author MCD Application Team - * @version V2.1.0 - * @date 19-March-2012 - * @brief USB-OTG Core Layer - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_core.h" -#include "usb_bsp.h" - - -/** @addtogroup USB_OTG_DRIVER -* @{ -*/ - -/** @defgroup USB_CORE -* @brief This file includes the USB-OTG Core Layer -* @{ -*/ - - -/** @defgroup USB_CORE_Private_Defines -* @{ -*/ - -/** -* @} -*/ - - -/** @defgroup USB_CORE_Private_TypesDefinitions -* @{ -*/ -/** -* @} -*/ - - - -/** @defgroup USB_CORE_Private_Macros -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_CORE_Private_Variables -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_CORE_Private_FunctionPrototypes -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_CORE_Private_Functions -* @{ -*/ - -/** -* @brief USB_OTG_EnableCommonInt -* Initializes the commmon interrupts, used in both device and modes -* @param pdev : Selected device -* @retval None -*/ -static void USB_OTG_EnableCommonInt(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTMSK_TypeDef int_mask; - - int_mask.d32 = 0; - /* Clear any pending USB_OTG Interrupts */ -#ifndef USE_OTG_MODE - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GOTGINT, 0xFFFFFFFF); -#endif - /* Clear any pending interrupts */ - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTSTS, 0xBFFFFFFF); - /* Enable the interrupts in the INTMSK */ - int_mask.b.wkupintr = 1; - int_mask.b.usbsuspend = 1; - -#ifdef USE_OTG_MODE - int_mask.b.otgintr = 1; - int_mask.b.sessreqintr = 1; - int_mask.b.conidstschng = 1; -#endif - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTMSK, int_mask.d32); -} - -/** -* @brief USB_OTG_CoreReset : Soft reset of the core -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -static USB_OTG_STS USB_OTG_CoreReset(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_STS status = USB_OTG_OK; - __IO USB_OTG_GRSTCTL_TypeDef greset; - uint32_t count = 0; - - greset.d32 = 0; - /* Wait for AHB master IDLE state. */ - do - { - USB_OTG_BSP_uDelay(3); - greset.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GRSTCTL); - if (++count > 200000) - { - return USB_OTG_OK; - } - } - while (greset.b.ahbidle == 0); - /* Core Soft Reset */ - count = 0; - greset.b.csftrst = 1; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRSTCTL, greset.d32 ); - do - { - greset.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GRSTCTL); - if (++count > 200000) - { - break; - } - } - while (greset.b.csftrst == 1); - /* Wait for 3 PHY Clocks*/ - USB_OTG_BSP_uDelay(3); - return status; -} - -/** -* @brief USB_OTG_WritePacket : Writes a packet into the Tx FIFO associated -* with the EP -* @param pdev : Selected device -* @param src : source pointer -* @param ch_ep_num : end point number -* @param bytes : No. of bytes -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_WritePacket(USB_OTG_CORE_HANDLE *pdev, - uint8_t *src, - uint8_t ch_ep_num, - uint16_t len) -{ - USB_OTG_STS status = USB_OTG_OK; - if (pdev->cfg.dma_enable == 0) - { - uint32_t count32b= 0 , i= 0; - __IO uint32_t *fifo; - - count32b = (len + 3) / 4; - fifo = pdev->regs.DFIFO[ch_ep_num]; - for (i = 0; i < count32b; i++, src+=4) - { - USB_OTG_WRITE_REG32( fifo, *((__packed uint32_t *)src) ); - } - } - return status; -} - - -/** -* @brief USB_OTG_ReadPacket : Reads a packet from the Rx FIFO -* @param pdev : Selected device -* @param dest : Destination Pointer -* @param bytes : No. of bytes -* @retval None -*/ -void *USB_OTG_ReadPacket(USB_OTG_CORE_HANDLE *pdev, - uint8_t *dest, - uint16_t len) -{ - uint32_t i=0; - uint32_t count32b = (len + 3) / 4; - - __IO uint32_t *fifo = pdev->regs.DFIFO[0]; - - for ( i = 0; i < count32b; i++, dest += 4 ) - { - *(__packed uint32_t *)dest = USB_OTG_READ_REG32(fifo); - - } - return ((void *)dest); -} - -/** -* @brief USB_OTG_SelectCore -* Initialize core registers address. -* @param pdev : Selected device -* @param coreID : USB OTG Core ID -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_SelectCore(USB_OTG_CORE_HANDLE *pdev, - USB_OTG_CORE_ID_TypeDef coreID) -{ - uint32_t i , baseAddress = 0; - USB_OTG_STS status = USB_OTG_OK; - - pdev->cfg.dma_enable = 0; - - /* at startup the core is in FS mode */ - pdev->cfg.speed = USB_OTG_SPEED_FULL; - pdev->cfg.mps = USB_OTG_FS_MAX_PACKET_SIZE ; - - /* initialize device cfg following its address */ - if (coreID == USB_OTG_FS_CORE_ID) - { - baseAddress = USB_OTG_FS_BASE_ADDR; - pdev->cfg.coreID = USB_OTG_FS_CORE_ID; - pdev->cfg.host_channels = 8 ; - pdev->cfg.dev_endpoints = 4 ; - pdev->cfg.TotalFifoSize = 320; /* in 32-bits */ - pdev->cfg.phy_itface = USB_OTG_EMBEDDED_PHY; - -#ifdef USB_OTG_FS_SOF_OUTPUT_ENABLED - pdev->cfg.Sof_output = 1; -#endif - -#ifdef USB_OTG_FS_LOW_PWR_MGMT_SUPPORT - pdev->cfg.low_power = 1; -#endif - } - else if (coreID == USB_OTG_HS_CORE_ID) - { - baseAddress = USB_OTG_HS_BASE_ADDR; - pdev->cfg.coreID = USB_OTG_HS_CORE_ID; - pdev->cfg.host_channels = 12 ; - pdev->cfg.dev_endpoints = 6 ; - pdev->cfg.TotalFifoSize = 1280;/* in 32-bits */ - -#ifdef USB_OTG_ULPI_PHY_ENABLED - pdev->cfg.phy_itface = USB_OTG_ULPI_PHY; -#else -#ifdef USB_OTG_EMBEDDED_PHY_ENABLED - pdev->cfg.phy_itface = USB_OTG_EMBEDDED_PHY; -#endif -#endif - -#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED - pdev->cfg.dma_enable = 1; -#endif - -#ifdef USB_OTG_HS_SOF_OUTPUT_ENABLED - pdev->cfg.Sof_output = 1; -#endif - -#ifdef USB_OTG_HS_LOW_PWR_MGMT_SUPPORT - pdev->cfg.low_power = 1; -#endif - - } - - pdev->regs.GREGS = (USB_OTG_GREGS *)(baseAddress + \ - USB_OTG_CORE_GLOBAL_REGS_OFFSET); - pdev->regs.DREGS = (USB_OTG_DREGS *) (baseAddress + \ - USB_OTG_DEV_GLOBAL_REG_OFFSET); - - for (i = 0; i < pdev->cfg.dev_endpoints; i++) - { - pdev->regs.INEP_REGS[i] = (USB_OTG_INEPREGS *) \ - (baseAddress + USB_OTG_DEV_IN_EP_REG_OFFSET + \ - (i * USB_OTG_EP_REG_OFFSET)); - pdev->regs.OUTEP_REGS[i] = (USB_OTG_OUTEPREGS *) \ - (baseAddress + USB_OTG_DEV_OUT_EP_REG_OFFSET + \ - (i * USB_OTG_EP_REG_OFFSET)); - } - pdev->regs.HREGS = (USB_OTG_HREGS *)(baseAddress + \ - USB_OTG_HOST_GLOBAL_REG_OFFSET); - pdev->regs.HPRT0 = (uint32_t *)(baseAddress + USB_OTG_HOST_PORT_REGS_OFFSET); - - for (i = 0; i < pdev->cfg.host_channels; i++) - { - pdev->regs.HC_REGS[i] = (USB_OTG_HC_REGS *)(baseAddress + \ - USB_OTG_HOST_CHAN_REGS_OFFSET + \ - (i * USB_OTG_CHAN_REGS_OFFSET)); - } - for (i = 0; i < pdev->cfg.host_channels; i++) - { - pdev->regs.DFIFO[i] = (uint32_t *)(baseAddress + USB_OTG_DATA_FIFO_OFFSET +\ - (i * USB_OTG_DATA_FIFO_SIZE)); - } - pdev->regs.PCGCCTL = (uint32_t *)(baseAddress + USB_OTG_PCGCCTL_OFFSET); - - return status; -} - - -/** -* @brief USB_OTG_CoreInit -* Initializes the USB_OTG controller registers and prepares the core -* device mode or host mode operation. -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_CoreInit(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_GUSBCFG_TypeDef usbcfg; - USB_OTG_GCCFG_TypeDef gccfg; - USB_OTG_GAHBCFG_TypeDef ahbcfg; - - usbcfg.d32 = 0; - gccfg.d32 = 0; - ahbcfg.d32 = 0; - - - - if (pdev->cfg.phy_itface == USB_OTG_ULPI_PHY) - { - gccfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GCCFG); - gccfg.b.pwdn = 0; - - if (pdev->cfg.Sof_output) - { - gccfg.b.sofouten = 1; - } - USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GCCFG, gccfg.d32); - - /* Init The ULPI Interface */ - usbcfg.d32 = 0; - usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG); - - usbcfg.b.physel = 0; /* HS Interface */ -#ifdef USB_OTG_INTERNAL_VBUS_ENABLED - usbcfg.b.ulpi_ext_vbus_drv = 0; /* Use internal VBUS */ -#else -#ifdef USB_OTG_EXTERNAL_VBUS_ENABLED - usbcfg.b.ulpi_ext_vbus_drv = 1; /* Use external VBUS */ -#endif -#endif - usbcfg.b.term_sel_dl_pulse = 0; /* Data line pulsing using utmi_txvalid */ - - usbcfg.b.ulpi_fsls = 0; - usbcfg.b.ulpi_clk_sus_m = 0; - USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GUSBCFG, usbcfg.d32); - - /* Reset after a PHY select */ - USB_OTG_CoreReset(pdev); - - if(pdev->cfg.dma_enable == 1) - { - - ahbcfg.b.hburstlen = 5; /* 64 x 32-bits*/ - ahbcfg.b.dmaenable = 1; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GAHBCFG, ahbcfg.d32); - - } - } - else /* FS interface (embedded Phy) */ - { - - usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG);; - usbcfg.b.physel = 1; /* FS Interface */ - USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GUSBCFG, usbcfg.d32); - /* Reset after a PHY select and set Host mode */ - USB_OTG_CoreReset(pdev); - /* Deactivate the power down*/ - gccfg.d32 = 0; - gccfg.b.pwdn = 1; - - gccfg.b.vbussensingA = 1 ; - gccfg.b.vbussensingB = 1 ; -#ifndef VBUS_SENSING_ENABLED - gccfg.b.disablevbussensing = 1; -#endif - - if(pdev->cfg.Sof_output) - { - gccfg.b.sofouten = 1; - } - - USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GCCFG, gccfg.d32); - USB_OTG_BSP_mDelay(20); - } - /* case the HS core is working in FS mode */ - if(pdev->cfg.dma_enable == 1) - { - - ahbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GAHBCFG); - ahbcfg.b.hburstlen = 5; /* 64 x 32-bits*/ - ahbcfg.b.dmaenable = 1; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GAHBCFG, ahbcfg.d32); - - } - /* initialize OTG features */ -#ifdef USE_OTG_MODE - usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG); - usbcfg.b.hnpcap = 1; - usbcfg.b.srpcap = 1; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GUSBCFG, usbcfg.d32); - USB_OTG_EnableCommonInt(pdev); -#endif - return status; -} -/** -* @brief USB_OTG_EnableGlobalInt -* Enables the controller's Global Int in the AHB Config reg -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EnableGlobalInt(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_GAHBCFG_TypeDef ahbcfg; - - ahbcfg.d32 = 0; - ahbcfg.b.glblintrmsk = 1; /* Enable interrupts */ - USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GAHBCFG, 0, ahbcfg.d32); - return status; -} - - -/** -* @brief USB_OTG_DisableGlobalInt -* Enables the controller's Global Int in the AHB Config reg -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_DisableGlobalInt(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_GAHBCFG_TypeDef ahbcfg; - ahbcfg.d32 = 0; - ahbcfg.b.glblintrmsk = 1; /* Enable interrupts */ - USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GAHBCFG, ahbcfg.d32, 0); - return status; -} - - -/** -* @brief USB_OTG_FlushTxFifo : Flush a Tx FIFO -* @param pdev : Selected device -* @param num : FO num -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_FlushTxFifo (USB_OTG_CORE_HANDLE *pdev , uint32_t num ) -{ - USB_OTG_STS status = USB_OTG_OK; - __IO USB_OTG_GRSTCTL_TypeDef greset; - - uint32_t count = 0; - greset.d32 = 0; - greset.b.txfflsh = 1; - greset.b.txfnum = num; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GRSTCTL, greset.d32 ); - do - { - greset.d32 = USB_OTG_READ_REG32( &pdev->regs.GREGS->GRSTCTL); - if (++count > 200000) - { - break; - } - } - while (greset.b.txfflsh == 1); - /* Wait for 3 PHY Clocks*/ - USB_OTG_BSP_uDelay(3); - return status; -} - - -/** -* @brief USB_OTG_FlushRxFifo : Flush a Rx FIFO -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_FlushRxFifo( USB_OTG_CORE_HANDLE *pdev ) -{ - USB_OTG_STS status = USB_OTG_OK; - __IO USB_OTG_GRSTCTL_TypeDef greset; - uint32_t count = 0; - - greset.d32 = 0; - greset.b.rxfflsh = 1; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GRSTCTL, greset.d32 ); - do - { - greset.d32 = USB_OTG_READ_REG32( &pdev->regs.GREGS->GRSTCTL); - if (++count > 200000) - { - break; - } - } - while (greset.b.rxfflsh == 1); - /* Wait for 3 PHY Clocks*/ - USB_OTG_BSP_uDelay(3); - return status; -} - - -/** -* @brief USB_OTG_SetCurrentMode : Set ID line -* @param pdev : Selected device -* @param mode : (Host/device) -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_SetCurrentMode(USB_OTG_CORE_HANDLE *pdev , uint8_t mode) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_GUSBCFG_TypeDef usbcfg; - - usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG); - - usbcfg.b.force_host = 0; - usbcfg.b.force_dev = 0; - - if ( mode == HOST_MODE) - { - usbcfg.b.force_host = 1; - } - else if ( mode == DEVICE_MODE) - { - usbcfg.b.force_dev = 1; - } - - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GUSBCFG, usbcfg.d32); - USB_OTG_BSP_mDelay(50); - return status; -} - - -/** -* @brief USB_OTG_GetMode : Get current mode -* @param pdev : Selected device -* @retval current mode -*/ -uint32_t USB_OTG_GetMode(USB_OTG_CORE_HANDLE *pdev) -{ - return (USB_OTG_READ_REG32(&pdev->regs.GREGS->GINTSTS ) & 0x1); -} - - -/** -* @brief USB_OTG_IsDeviceMode : Check if it is device mode -* @param pdev : Selected device -* @retval num_in_ep -*/ -uint8_t USB_OTG_IsDeviceMode(USB_OTG_CORE_HANDLE *pdev) -{ - return (USB_OTG_GetMode(pdev) != HOST_MODE); -} - - -/** -* @brief USB_OTG_IsHostMode : Check if it is host mode -* @param pdev : Selected device -* @retval num_in_ep -*/ -uint8_t USB_OTG_IsHostMode(USB_OTG_CORE_HANDLE *pdev) -{ - return (USB_OTG_GetMode(pdev) == HOST_MODE); -} - - -/** -* @brief USB_OTG_ReadCoreItr : returns the Core Interrupt register -* @param pdev : Selected device -* @retval Status -*/ -uint32_t USB_OTG_ReadCoreItr(USB_OTG_CORE_HANDLE *pdev) -{ - uint32_t v = 0; - v = USB_OTG_READ_REG32(&pdev->regs.GREGS->GINTSTS); - v &= USB_OTG_READ_REG32(&pdev->regs.GREGS->GINTMSK); - return v; -} - - -/** -* @brief USB_OTG_ReadOtgItr : returns the USB_OTG Interrupt register -* @param pdev : Selected device -* @retval Status -*/ -uint32_t USB_OTG_ReadOtgItr (USB_OTG_CORE_HANDLE *pdev) -{ - return (USB_OTG_READ_REG32 (&pdev->regs.GREGS->GOTGINT)); -} - -#ifdef USE_HOST_MODE -/** -* @brief USB_OTG_CoreInitHost : Initializes USB_OTG controller for host mode -* @param pdev : Selected device -* @retval status -*/ -USB_OTG_STS USB_OTG_CoreInitHost(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_FSIZ_TypeDef nptxfifosize; - USB_OTG_FSIZ_TypeDef ptxfifosize; - USB_OTG_HCFG_TypeDef hcfg; - -#ifdef USE_OTG_MODE - USB_OTG_OTGCTL_TypeDef gotgctl; -#endif - - uint32_t i = 0; - - nptxfifosize.d32 = 0; - ptxfifosize.d32 = 0; -#ifdef USE_OTG_MODE - gotgctl.d32 = 0; -#endif - hcfg.d32 = 0; - - - /* configure charge pump IO */ - USB_OTG_BSP_ConfigVBUS(pdev); - - /* Restart the Phy Clock */ - USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, 0); - - /* Initialize Host Configuration Register */ - if (pdev->cfg.phy_itface == USB_OTG_ULPI_PHY) - { - USB_OTG_InitFSLSPClkSel(pdev , HCFG_30_60_MHZ); - } - else - { - USB_OTG_InitFSLSPClkSel(pdev , HCFG_48_MHZ); - } - USB_OTG_ResetPort(pdev); - - hcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HCFG); - hcfg.b.fslssupp = 0; - USB_OTG_WRITE_REG32(&pdev->regs.HREGS->HCFG, hcfg.d32); - - /* Configure data FIFO sizes */ - /* Rx FIFO */ -#ifdef USB_OTG_FS_CORE - if(pdev->cfg.coreID == USB_OTG_FS_CORE_ID) - { - /* set Rx FIFO size */ - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_FS_SIZE); - nptxfifosize.b.startaddr = RX_FIFO_FS_SIZE; - nptxfifosize.b.depth = TXH_NP_FS_FIFOSIZ; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->DIEPTXF0_HNPTXFSIZ, nptxfifosize.d32); - - ptxfifosize.b.startaddr = RX_FIFO_FS_SIZE + TXH_NP_FS_FIFOSIZ; - ptxfifosize.b.depth = TXH_P_FS_FIFOSIZ; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->HPTXFSIZ, ptxfifosize.d32); - } -#endif -#ifdef USB_OTG_HS_CORE - if (pdev->cfg.coreID == USB_OTG_HS_CORE_ID) - { - /* set Rx FIFO size */ - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_HS_SIZE); - nptxfifosize.b.startaddr = RX_FIFO_HS_SIZE; - nptxfifosize.b.depth = TXH_NP_HS_FIFOSIZ; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->DIEPTXF0_HNPTXFSIZ, nptxfifosize.d32); - - ptxfifosize.b.startaddr = RX_FIFO_HS_SIZE + TXH_NP_HS_FIFOSIZ; - ptxfifosize.b.depth = TXH_P_HS_FIFOSIZ; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->HPTXFSIZ, ptxfifosize.d32); - } -#endif - -#ifdef USE_OTG_MODE - /* Clear Host Set HNP Enable in the USB_OTG Control Register */ - gotgctl.b.hstsethnpen = 1; - USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GOTGCTL, gotgctl.d32, 0); -#endif - - /* Make sure the FIFOs are flushed. */ - USB_OTG_FlushTxFifo(pdev, 0x10 ); /* all Tx FIFOs */ - USB_OTG_FlushRxFifo(pdev); - - - /* Clear all pending HC Interrupts */ - for (i = 0; i < pdev->cfg.host_channels; i++) - { - USB_OTG_WRITE_REG32( &pdev->regs.HC_REGS[i]->HCINT, 0xFFFFFFFF ); - USB_OTG_WRITE_REG32( &pdev->regs.HC_REGS[i]->HCINTMSK, 0 ); - } -#ifndef USE_OTG_MODE - USB_OTG_DriveVbus(pdev, 1); -#endif - - USB_OTG_EnableHostInt(pdev); - return status; -} - -/** -* @brief USB_OTG_IsEvenFrame -* This function returns the frame number for sof packet -* @param pdev : Selected device -* @retval Frame number -*/ -uint8_t USB_OTG_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev) -{ - return !(USB_OTG_READ_REG32(&pdev->regs.HREGS->HFNUM) & 0x1); -} - -/** -* @brief USB_OTG_DriveVbus : set/reset vbus -* @param pdev : Selected device -* @param state : VBUS state -* @retval None -*/ -void USB_OTG_DriveVbus (USB_OTG_CORE_HANDLE *pdev, uint8_t state) -{ - USB_OTG_HPRT0_TypeDef hprt0; - - hprt0.d32 = 0; - - /* enable disable the external charge pump */ - USB_OTG_BSP_DriveVBUS(pdev, state); - - /* Turn on the Host port power. */ - hprt0.d32 = USB_OTG_ReadHPRT0(pdev); - if ((hprt0.b.prtpwr == 0 ) && (state == 1 )) - { - hprt0.b.prtpwr = 1; - USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); - } - if ((hprt0.b.prtpwr == 1 ) && (state == 0 )) - { - hprt0.b.prtpwr = 0; - USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); - } - - USB_OTG_BSP_mDelay(200); -} -/** -* @brief USB_OTG_EnableHostInt: Enables the Host mode interrupts -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EnableHostInt(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_GINTMSK_TypeDef intmsk; - intmsk.d32 = 0; - /* Disable all interrupts. */ - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTMSK, 0); - - /* Clear any pending interrupts. */ - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, 0xFFFFFFFF); - - /* Enable the common interrupts */ - USB_OTG_EnableCommonInt(pdev); - - if (pdev->cfg.dma_enable == 0) - { - intmsk.b.rxstsqlvl = 1; - } - intmsk.b.portintr = 1; - intmsk.b.hcintr = 1; - intmsk.b.disconnect = 1; - intmsk.b.sofintr = 1; - intmsk.b.incomplisoout = 1; - USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GINTMSK, intmsk.d32, intmsk.d32); - return status; -} - -/** -* @brief USB_OTG_InitFSLSPClkSel : Initializes the FSLSPClkSel field of the -* HCFG register on the PHY type -* @param pdev : Selected device -* @param freq : clock frequency -* @retval None -*/ -void USB_OTG_InitFSLSPClkSel(USB_OTG_CORE_HANDLE *pdev , uint8_t freq) -{ - USB_OTG_HCFG_TypeDef hcfg; - - hcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HCFG); - hcfg.b.fslspclksel = freq; - USB_OTG_WRITE_REG32(&pdev->regs.HREGS->HCFG, hcfg.d32); -} - - -/** -* @brief USB_OTG_ReadHPRT0 : Reads HPRT0 to modify later -* @param pdev : Selected device -* @retval HPRT0 value -*/ -uint32_t USB_OTG_ReadHPRT0(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_HPRT0_TypeDef hprt0; - - hprt0.d32 = USB_OTG_READ_REG32(pdev->regs.HPRT0); - hprt0.b.prtena = 0; - hprt0.b.prtconndet = 0; - hprt0.b.prtenchng = 0; - hprt0.b.prtovrcurrchng = 0; - return hprt0.d32; -} - - -/** -* @brief USB_OTG_ReadHostAllChannels_intr : Register PCD Callbacks -* @param pdev : Selected device -* @retval Status -*/ -uint32_t USB_OTG_ReadHostAllChannels_intr (USB_OTG_CORE_HANDLE *pdev) -{ - return (USB_OTG_READ_REG32 (&pdev->regs.HREGS->HAINT)); -} - - -/** -* @brief USB_OTG_ResetPort : Reset Host Port -* @param pdev : Selected device -* @retval status -* @note : (1)The application must wait at least 10 ms (+ 10 ms security) -* before clearing the reset bit. -*/ -uint32_t USB_OTG_ResetPort(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_HPRT0_TypeDef hprt0; - - hprt0.d32 = USB_OTG_ReadHPRT0(pdev); - hprt0.b.prtrst = 1; - USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); - USB_OTG_BSP_mDelay (10); /* See Note #1 */ - hprt0.b.prtrst = 0; - USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); - USB_OTG_BSP_mDelay (20); - return 1; -} - - -/** -* @brief USB_OTG_HC_Init : Prepares a host channel for transferring packets -* @param pdev : Selected device -* @param hc_num : channel number -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_HC_Init(USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num) -{ - USB_OTG_STS status = USB_OTG_OK; - uint32_t intr_enable = 0; - USB_OTG_HCINTMSK_TypeDef hcintmsk; - USB_OTG_GINTMSK_TypeDef gintmsk; - USB_OTG_HCCHAR_TypeDef hcchar; - USB_OTG_HCINTn_TypeDef hcint; - - - gintmsk.d32 = 0; - hcintmsk.d32 = 0; - hcchar.d32 = 0; - - /* Clear old interrupt conditions for this host channel. */ - hcint.d32 = 0xFFFFFFFF; - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCINT, hcint.d32); - - /* Enable channel interrupts required for this transfer. */ - hcintmsk.d32 = 0; - - if (pdev->cfg.dma_enable == 1) - { - hcintmsk.b.ahberr = 1; - } - - switch (pdev->host.hc[hc_num].ep_type) - { - case EP_TYPE_CTRL: - case EP_TYPE_BULK: - hcintmsk.b.xfercompl = 1; - hcintmsk.b.stall = 1; - hcintmsk.b.xacterr = 1; - hcintmsk.b.datatglerr = 1; - hcintmsk.b.nak = 1; - if (pdev->host.hc[hc_num].ep_is_in) - { - hcintmsk.b.bblerr = 1; - } - else - { - hcintmsk.b.nyet = 1; - if (pdev->host.hc[hc_num].do_ping) - { - hcintmsk.b.ack = 1; - } - } - break; - case EP_TYPE_INTR: - hcintmsk.b.xfercompl = 1; - hcintmsk.b.nak = 1; - hcintmsk.b.stall = 1; - hcintmsk.b.xacterr = 1; - hcintmsk.b.datatglerr = 1; - hcintmsk.b.frmovrun = 1; - - if (pdev->host.hc[hc_num].ep_is_in) - { - hcintmsk.b.bblerr = 1; - } - - break; - case EP_TYPE_ISOC: - hcintmsk.b.xfercompl = 1; - hcintmsk.b.frmovrun = 1; - hcintmsk.b.ack = 1; - - if (pdev->host.hc[hc_num].ep_is_in) - { - hcintmsk.b.xacterr = 1; - hcintmsk.b.bblerr = 1; - } - break; - } - - - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCINTMSK, hcintmsk.d32); - - - /* Enable the top level host channel interrupt. */ - intr_enable = (1 << hc_num); - USB_OTG_MODIFY_REG32(&pdev->regs.HREGS->HAINTMSK, 0, intr_enable); - - /* Make sure host channel interrupts are enabled. */ - gintmsk.b.hcintr = 1; - USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GINTMSK, 0, gintmsk.d32); - - /* Program the HCCHAR register */ - hcchar.d32 = 0; - hcchar.b.devaddr = pdev->host.hc[hc_num].dev_addr; - hcchar.b.epnum = pdev->host.hc[hc_num].ep_num; - hcchar.b.epdir = pdev->host.hc[hc_num].ep_is_in; - hcchar.b.lspddev = (pdev->host.hc[hc_num].speed == HPRT0_PRTSPD_LOW_SPEED); - hcchar.b.eptype = pdev->host.hc[hc_num].ep_type; - hcchar.b.mps = pdev->host.hc[hc_num].max_packet; - if (pdev->host.hc[hc_num].ep_type == HCCHAR_INTR) - { - hcchar.b.oddfrm = 1; - } - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR, hcchar.d32); - return status; -} - - -/** -* @brief USB_OTG_HC_StartXfer : Start transfer -* @param pdev : Selected device -* @param hc_num : channel number -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_HC_StartXfer(USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_HCCHAR_TypeDef hcchar; - USB_OTG_HCTSIZn_TypeDef hctsiz; - USB_OTG_HNPTXSTS_TypeDef hnptxsts; - USB_OTG_HPTXSTS_TypeDef hptxsts; - USB_OTG_GINTMSK_TypeDef intmsk; - uint16_t len_words = 0; - - uint16_t num_packets; - uint16_t max_hc_pkt_count; - - max_hc_pkt_count = 256; - hctsiz.d32 = 0; - hcchar.d32 = 0; - intmsk.d32 = 0; - - /* Compute the expected number of packets associated to the transfer */ - if (pdev->host.hc[hc_num].xfer_len > 0) - { - num_packets = (pdev->host.hc[hc_num].xfer_len + \ - pdev->host.hc[hc_num].max_packet - 1) / pdev->host.hc[hc_num].max_packet; - - if (num_packets > max_hc_pkt_count) - { - num_packets = max_hc_pkt_count; - pdev->host.hc[hc_num].xfer_len = num_packets * \ - pdev->host.hc[hc_num].max_packet; - } - } - else - { - num_packets = 1; - } - if (pdev->host.hc[hc_num].ep_is_in) - { - pdev->host.hc[hc_num].xfer_len = num_packets * \ - pdev->host.hc[hc_num].max_packet; - } - /* Initialize the HCTSIZn register */ - hctsiz.b.xfersize = pdev->host.hc[hc_num].xfer_len; - hctsiz.b.pktcnt = num_packets; - hctsiz.b.pid = pdev->host.hc[hc_num].data_pid; - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCTSIZ, hctsiz.d32); - - if (pdev->cfg.dma_enable == 1) - { - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCDMA, (unsigned int)pdev->host.hc[hc_num].xfer_buff); - } - - - hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR); - hcchar.b.oddfrm = USB_OTG_IsEvenFrame(pdev); - - /* Set host channel enable */ - hcchar.b.chen = 1; - hcchar.b.chdis = 0; - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR, hcchar.d32); - - if (pdev->cfg.dma_enable == 0) /* Slave mode */ - { - if((pdev->host.hc[hc_num].ep_is_in == 0) && - (pdev->host.hc[hc_num].xfer_len > 0)) - { - switch(pdev->host.hc[hc_num].ep_type) - { - /* Non periodic transfer */ - case EP_TYPE_CTRL: - case EP_TYPE_BULK: - - hnptxsts.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->HNPTXSTS); - len_words = (pdev->host.hc[hc_num].xfer_len + 3) / 4; - - /* check if there is enough space in FIFO space */ - if(len_words > hnptxsts.b.nptxfspcavail) - { - /* need to process data in nptxfempty interrupt */ - intmsk.b.nptxfempty = 1; - USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, 0, intmsk.d32); - } - - break; - /* Periodic transfer */ - case EP_TYPE_INTR: - case EP_TYPE_ISOC: - hptxsts.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HPTXSTS); - len_words = (pdev->host.hc[hc_num].xfer_len + 3) / 4; - /* check if there is enough space in FIFO space */ - if(len_words > hptxsts.b.ptxfspcavail) /* split the transfer */ - { - /* need to process data in ptxfempty interrupt */ - intmsk.b.ptxfempty = 1; - USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, 0, intmsk.d32); - } - break; - - default: - break; - } - - /* Write packet into the Tx FIFO. */ - USB_OTG_WritePacket(pdev, - pdev->host.hc[hc_num].xfer_buff , - hc_num, pdev->host.hc[hc_num].xfer_len); - } - } - return status; -} - - -/** -* @brief USB_OTG_HC_Halt : Halt channel -* @param pdev : Selected device -* @param hc_num : channel number -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_HC_Halt(USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_HNPTXSTS_TypeDef nptxsts; - USB_OTG_HPTXSTS_TypeDef hptxsts; - USB_OTG_HCCHAR_TypeDef hcchar; - - nptxsts.d32 = 0; - hptxsts.d32 = 0; - hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR); - hcchar.b.chen = 1; - hcchar.b.chdis = 1; - - /* Check for space in the request queue to issue the halt. */ - if (hcchar.b.eptype == HCCHAR_CTRL || hcchar.b.eptype == HCCHAR_BULK) - { - nptxsts.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->HNPTXSTS); - if (nptxsts.b.nptxqspcavail == 0) - { - hcchar.b.chen = 0; - } - } - else - { - hptxsts.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HPTXSTS); - if (hptxsts.b.ptxqspcavail == 0) - { - hcchar.b.chen = 0; - } - } - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR, hcchar.d32); - return status; -} - -/** -* @brief Issue a ping token -* @param None -* @retval : None -*/ -USB_OTG_STS USB_OTG_HC_DoPing(USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_HCCHAR_TypeDef hcchar; - USB_OTG_HCTSIZn_TypeDef hctsiz; - - hctsiz.d32 = 0; - hctsiz.b.dopng = 1; - hctsiz.b.pktcnt = 1; - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCTSIZ, hctsiz.d32); - - hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR); - hcchar.b.chen = 1; - hcchar.b.chdis = 0; - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR, hcchar.d32); - return status; -} - -/** -* @brief Stop the device and clean up fifo's -* @param None -* @retval : None -*/ -void USB_OTG_StopHost(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_HCCHAR_TypeDef hcchar; - uint32_t i; - - USB_OTG_WRITE_REG32(&pdev->regs.HREGS->HAINTMSK , 0); - USB_OTG_WRITE_REG32(&pdev->regs.HREGS->HAINT, 0xFFFFFFFF); - /* Flush out any leftover queued requests. */ - - for (i = 0; i < pdev->cfg.host_channels; i++) - { - hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[i]->HCCHAR); - hcchar.b.chen = 0; - hcchar.b.chdis = 1; - hcchar.b.epdir = 0; - USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[i]->HCCHAR, hcchar.d32); - } - - /* Flush the FIFO */ - USB_OTG_FlushRxFifo(pdev); - USB_OTG_FlushTxFifo(pdev , 0x10 ); -} -#endif -#ifdef USE_DEVICE_MODE -/* PCD Core Layer */ - -/** -* @brief USB_OTG_InitDevSpeed :Initializes the DevSpd field of DCFG register -* depending the PHY type and the enumeration speed of the device. -* @param pdev : Selected device -* @retval : None -*/ -void USB_OTG_InitDevSpeed(USB_OTG_CORE_HANDLE *pdev , uint8_t speed) -{ - USB_OTG_DCFG_TypeDef dcfg; - - dcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCFG); - dcfg.b.devspd = speed; - USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCFG, dcfg.d32); -} - - -/** -* @brief USB_OTG_CoreInitDev : Initializes the USB_OTG controller registers -* for device mode -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_CoreInitDev (USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_DEPCTL_TypeDef depctl; - uint32_t i; - USB_OTG_DCFG_TypeDef dcfg; - USB_OTG_FSIZ_TypeDef nptxfifosize; - USB_OTG_FSIZ_TypeDef txfifosize; - USB_OTG_DIEPMSK_TypeDef msk; - USB_OTG_DTHRCTL_TypeDef dthrctl; - - depctl.d32 = 0; - dcfg.d32 = 0; - nptxfifosize.d32 = 0; - txfifosize.d32 = 0; - msk.d32 = 0; - - /* Restart the Phy Clock */ - USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, 0); - /* Device configuration register */ - dcfg.d32 = USB_OTG_READ_REG32( &pdev->regs.DREGS->DCFG); - dcfg.b.perfrint = DCFG_FRAME_INTERVAL_80; - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DCFG, dcfg.d32 ); - -#ifdef USB_OTG_FS_CORE - if(pdev->cfg.coreID == USB_OTG_FS_CORE_ID ) - { - - /* Set Full speed phy */ - USB_OTG_InitDevSpeed (pdev , USB_OTG_SPEED_PARAM_FULL); - - /* set Rx FIFO size */ - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_FS_SIZE); - - /* EP0 TX*/ - nptxfifosize.b.depth = TX0_FIFO_FS_SIZE; - nptxfifosize.b.startaddr = RX_FIFO_FS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF0_HNPTXFSIZ, nptxfifosize.d32 ); - - - /* EP1 TX*/ - txfifosize.b.startaddr = nptxfifosize.b.startaddr + nptxfifosize.b.depth; - txfifosize.b.depth = TX1_FIFO_FS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[0], txfifosize.d32 ); - - - /* EP2 TX*/ - txfifosize.b.startaddr += txfifosize.b.depth; - txfifosize.b.depth = TX2_FIFO_FS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[1], txfifosize.d32 ); - - - /* EP3 TX*/ - txfifosize.b.startaddr += txfifosize.b.depth; - txfifosize.b.depth = TX3_FIFO_FS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[2], txfifosize.d32 ); - } -#endif -#ifdef USB_OTG_HS_CORE - if(pdev->cfg.coreID == USB_OTG_HS_CORE_ID ) - { - - /* Set High speed phy */ - - if(pdev->cfg.phy_itface == USB_OTG_ULPI_PHY) - { - USB_OTG_InitDevSpeed (pdev , USB_OTG_SPEED_PARAM_HIGH); - } - else /* set High speed phy in Full speed mode */ - { - USB_OTG_InitDevSpeed (pdev , USB_OTG_SPEED_PARAM_HIGH_IN_FULL); - } - - /* set Rx FIFO size */ - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_HS_SIZE); - - /* EP0 TX*/ - nptxfifosize.b.depth = TX0_FIFO_HS_SIZE; - nptxfifosize.b.startaddr = RX_FIFO_HS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF0_HNPTXFSIZ, nptxfifosize.d32 ); - - - /* EP1 TX*/ - txfifosize.b.startaddr = nptxfifosize.b.startaddr + nptxfifosize.b.depth; - txfifosize.b.depth = TX1_FIFO_HS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[0], txfifosize.d32 ); - - - /* EP2 TX*/ - txfifosize.b.startaddr += txfifosize.b.depth; - txfifosize.b.depth = TX2_FIFO_HS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[1], txfifosize.d32 ); - - - /* EP3 TX*/ - txfifosize.b.startaddr += txfifosize.b.depth; - txfifosize.b.depth = TX3_FIFO_HS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[2], txfifosize.d32 ); - - /* EP4 TX*/ - txfifosize.b.startaddr += txfifosize.b.depth; - txfifosize.b.depth = TX4_FIFO_HS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[3], txfifosize.d32 ); - - - /* EP5 TX*/ - txfifosize.b.startaddr += txfifosize.b.depth; - txfifosize.b.depth = TX5_FIFO_HS_SIZE; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[4], txfifosize.d32 ); - } -#endif - /* Flush the FIFOs */ - USB_OTG_FlushTxFifo(pdev , 0x10); /* all Tx FIFOs */ - USB_OTG_FlushRxFifo(pdev); - /* Clear all pending Device Interrupts */ - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DIEPMSK, 0 ); - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DOEPMSK, 0 ); - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINT, 0xFFFFFFFF ); - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINTMSK, 0 ); - - for (i = 0; i < pdev->cfg.dev_endpoints; i++) - { - depctl.d32 = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[i]->DIEPCTL); - if (depctl.b.epena) - { - depctl.d32 = 0; - depctl.b.epdis = 1; - depctl.b.snak = 1; - } - else - { - depctl.d32 = 0; - } - USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPCTL, depctl.d32); - USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPTSIZ, 0); - USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPINT, 0xFF); - } - for (i = 0; i < pdev->cfg.dev_endpoints; i++) - { - USB_OTG_DEPCTL_TypeDef depctl; - depctl.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[i]->DOEPCTL); - if (depctl.b.epena) - { - depctl.d32 = 0; - depctl.b.epdis = 1; - depctl.b.snak = 1; - } - else - { - depctl.d32 = 0; - } - USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPCTL, depctl.d32); - USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPTSIZ, 0); - USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPINT, 0xFF); - } - msk.d32 = 0; - msk.b.txfifoundrn = 1; - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPMSK, msk.d32, msk.d32); - - if (pdev->cfg.dma_enable == 1) - { - dthrctl.d32 = 0; - dthrctl.b.non_iso_thr_en = 1; - dthrctl.b.iso_thr_en = 1; - dthrctl.b.tx_thr_len = 64; - dthrctl.b.rx_thr_en = 1; - dthrctl.b.rx_thr_len = 64; - USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DTHRCTL, dthrctl.d32); - } - USB_OTG_EnableDevInt(pdev); - return status; -} - - -/** -* @brief USB_OTG_EnableDevInt : Enables the Device mode interrupts -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EnableDevInt(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_GINTMSK_TypeDef intmsk; - - intmsk.d32 = 0; - - /* Disable all interrupts. */ - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTMSK, 0); - /* Clear any pending interrupts */ - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTSTS, 0xBFFFFFFF); - /* Enable the common interrupts */ - USB_OTG_EnableCommonInt(pdev); - - if (pdev->cfg.dma_enable == 0) - { - intmsk.b.rxstsqlvl = 1; - } - - /* Enable interrupts matching to the Device mode ONLY */ - intmsk.b.usbsuspend = 1; - intmsk.b.usbreset = 1; - intmsk.b.enumdone = 1; - intmsk.b.inepintr = 1; - intmsk.b.outepintr = 1; - intmsk.b.sofintr = 1; - - intmsk.b.incomplisoin = 1; - intmsk.b.incomplisoout = 1; -#ifdef VBUS_SENSING_ENABLED - intmsk.b.sessreqintr = 1; - intmsk.b.otgintr = 1; -#endif - USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, intmsk.d32, intmsk.d32); - return status; -} - - -/** -* @brief USB_OTG_GetDeviceSpeed -* Get the device speed from the device status register -* @param None -* @retval status -*/ -enum USB_OTG_SPEED USB_OTG_GetDeviceSpeed (USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_DSTS_TypeDef dsts; - enum USB_OTG_SPEED speed = USB_SPEED_UNKNOWN; - - - dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); - - switch (dsts.b.enumspd) - { - case DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ: - speed = USB_SPEED_HIGH; - break; - case DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ: - case DSTS_ENUMSPD_FS_PHY_48MHZ: - speed = USB_SPEED_FULL; - break; - - case DSTS_ENUMSPD_LS_PHY_6MHZ: - speed = USB_SPEED_LOW; - break; - } - - return speed; -} -/** -* @brief enables EP0 OUT to receive SETUP packets and configures EP0 -* for transmitting packets -* @param None -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EP0Activate(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_DSTS_TypeDef dsts; - USB_OTG_DEPCTL_TypeDef diepctl; - USB_OTG_DCTL_TypeDef dctl; - - dctl.d32 = 0; - /* Read the Device Status and Endpoint 0 Control registers */ - dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); - diepctl.d32 = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[0]->DIEPCTL); - /* Set the MPS of the IN EP based on the enumeration speed */ - switch (dsts.b.enumspd) - { - case DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ: - case DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ: - case DSTS_ENUMSPD_FS_PHY_48MHZ: - diepctl.b.mps = DEP0CTL_MPS_64; - break; - case DSTS_ENUMSPD_LS_PHY_6MHZ: - diepctl.b.mps = DEP0CTL_MPS_8; - break; - } - USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[0]->DIEPCTL, diepctl.d32); - dctl.b.cgnpinnak = 1; - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, dctl.d32, dctl.d32); - return status; -} - - -/** -* @brief USB_OTG_EPActivate : Activates an EP -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EPActivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_DEPCTL_TypeDef depctl; - USB_OTG_DAINT_TypeDef daintmsk; - __IO uint32_t *addr; - - - depctl.d32 = 0; - daintmsk.d32 = 0; - /* Read DEPCTLn register */ - if (ep->is_in == 1) - { - addr = &pdev->regs.INEP_REGS[ep->num]->DIEPCTL; - daintmsk.ep.in = 1 << ep->num; - } - else - { - addr = &pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL; - daintmsk.ep.out = 1 << ep->num; - } - /* If the EP is already active don't change the EP Control - * register. */ - depctl.d32 = USB_OTG_READ_REG32(addr); - if (!depctl.b.usbactep) - { - depctl.b.mps = ep->maxpacket; - depctl.b.eptype = ep->type; - depctl.b.txfnum = ep->tx_fifo_num; - depctl.b.setd0pid = 1; - depctl.b.usbactep = 1; - USB_OTG_WRITE_REG32(addr, depctl.d32); - } - /* Enable the Interrupt for this EP */ -#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED - if((ep->num == 1)&&(pdev->cfg.coreID == USB_OTG_HS_CORE_ID)) - { - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DEACHMSK, 0, daintmsk.d32); - } - else -#endif - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DAINTMSK, 0, daintmsk.d32); - return status; -} - - -/** -* @brief USB_OTG_EPDeactivate : Deactivates an EP -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EPDeactivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_DEPCTL_TypeDef depctl; - USB_OTG_DAINT_TypeDef daintmsk; - __IO uint32_t *addr; - - depctl.d32 = 0; - daintmsk.d32 = 0; - /* Read DEPCTLn register */ - if (ep->is_in == 1) - { - addr = &pdev->regs.INEP_REGS[ep->num]->DIEPCTL; - daintmsk.ep.in = 1 << ep->num; - } - else - { - addr = &pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL; - daintmsk.ep.out = 1 << ep->num; - } - depctl.b.usbactep = 0; - USB_OTG_WRITE_REG32(addr, depctl.d32); - /* Disable the Interrupt for this EP */ - -#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED - if((ep->num == 1)&&(pdev->cfg.coreID == USB_OTG_HS_CORE_ID)) - { - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DEACHMSK, daintmsk.d32, 0); - } - else -#endif - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DAINTMSK, daintmsk.d32, 0); - return status; -} - - -/** -* @brief USB_OTG_EPStartXfer : Handle the setup for data xfer for an EP and -* starts the xfer -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EPStartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_DEPCTL_TypeDef depctl; - USB_OTG_DEPXFRSIZ_TypeDef deptsiz; - USB_OTG_DSTS_TypeDef dsts; - uint32_t fifoemptymsk = 0; - - depctl.d32 = 0; - deptsiz.d32 = 0; - /* IN endpoint */ - if (ep->is_in == 1) - { - depctl.d32 = USB_OTG_READ_REG32(&(pdev->regs.INEP_REGS[ep->num]->DIEPCTL)); - deptsiz.d32 = USB_OTG_READ_REG32(&(pdev->regs.INEP_REGS[ep->num]->DIEPTSIZ)); - /* Zero Length Packet? */ - if (ep->xfer_len == 0) - { - deptsiz.b.xfersize = 0; - deptsiz.b.pktcnt = 1; - } - else - { - /* Program the transfer size and packet count - * as follows: xfersize = N * maxpacket + - * short_packet pktcnt = N + (short_packet - * exist ? 1 : 0) - */ - deptsiz.b.xfersize = ep->xfer_len; - deptsiz.b.pktcnt = (ep->xfer_len - 1 + ep->maxpacket) / ep->maxpacket; - - if (ep->type == EP_TYPE_ISOC) - { - deptsiz.b.mc = 1; - } - } - USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[ep->num]->DIEPTSIZ, deptsiz.d32); - - if (pdev->cfg.dma_enable == 1) - { - USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[ep->num]->DIEPDMA, ep->dma_addr); - } - else - { - if (ep->type != EP_TYPE_ISOC) - { - /* Enable the Tx FIFO Empty Interrupt for this EP */ - if (ep->xfer_len > 0) - { - fifoemptymsk = 1 << ep->num; - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, 0, fifoemptymsk); - } - } - } - - - if (ep->type == EP_TYPE_ISOC) - { - dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); - - if (((dsts.b.soffn)&0x1) == 0) - { - depctl.b.setd1pid = 1; - } - else - { - depctl.b.setd0pid = 1; - } - } - - /* EP enable, IN data in FIFO */ - depctl.b.cnak = 1; - depctl.b.epena = 1; - USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[ep->num]->DIEPCTL, depctl.d32); - - if (ep->type == EP_TYPE_ISOC) - { - USB_OTG_WritePacket(pdev, ep->xfer_buff, ep->num, ep->xfer_len); - } - } - else - { - /* OUT endpoint */ - depctl.d32 = USB_OTG_READ_REG32(&(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL)); - deptsiz.d32 = USB_OTG_READ_REG32(&(pdev->regs.OUTEP_REGS[ep->num]->DOEPTSIZ)); - /* Program the transfer size and packet count as follows: - * pktcnt = N - * xfersize = N * maxpacket - */ - if (ep->xfer_len == 0) - { - deptsiz.b.xfersize = ep->maxpacket; - deptsiz.b.pktcnt = 1; - } - else - { - deptsiz.b.pktcnt = (ep->xfer_len + (ep->maxpacket - 1)) / ep->maxpacket; - deptsiz.b.xfersize = deptsiz.b.pktcnt * ep->maxpacket; - } - USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPTSIZ, deptsiz.d32); - - if (pdev->cfg.dma_enable == 1) - { - USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPDMA, ep->dma_addr); - } - - if (ep->type == EP_TYPE_ISOC) - { - if (ep->even_odd_frame) - { - depctl.b.setd1pid = 1; - } - else - { - depctl.b.setd0pid = 1; - } - } - /* EP enable */ - depctl.b.cnak = 1; - depctl.b.epena = 1; - USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL, depctl.d32); - } - return status; -} - - -/** -* @brief USB_OTG_EP0StartXfer : Handle the setup for a data xfer for EP0 and -* starts the xfer -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EP0StartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_DEPCTL_TypeDef depctl; - USB_OTG_DEP0XFRSIZ_TypeDef deptsiz; - USB_OTG_INEPREGS *in_regs; - uint32_t fifoemptymsk = 0; - - depctl.d32 = 0; - deptsiz.d32 = 0; - /* IN endpoint */ - if (ep->is_in == 1) - { - in_regs = pdev->regs.INEP_REGS[0]; - depctl.d32 = USB_OTG_READ_REG32(&in_regs->DIEPCTL); - deptsiz.d32 = USB_OTG_READ_REG32(&in_regs->DIEPTSIZ); - /* Zero Length Packet? */ - if (ep->xfer_len == 0) - { - deptsiz.b.xfersize = 0; - deptsiz.b.pktcnt = 1; - - } - else - { - if (ep->xfer_len > ep->maxpacket) - { - ep->xfer_len = ep->maxpacket; - deptsiz.b.xfersize = ep->maxpacket; - } - else - { - deptsiz.b.xfersize = ep->xfer_len; - } - deptsiz.b.pktcnt = 1; - } - USB_OTG_WRITE_REG32(&in_regs->DIEPTSIZ, deptsiz.d32); - - if (pdev->cfg.dma_enable == 1) - { - USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[ep->num]->DIEPDMA, ep->dma_addr); - } - - /* EP enable, IN data in FIFO */ - depctl.b.cnak = 1; - depctl.b.epena = 1; - USB_OTG_WRITE_REG32(&in_regs->DIEPCTL, depctl.d32); - - - - if (pdev->cfg.dma_enable == 0) - { - /* Enable the Tx FIFO Empty Interrupt for this EP */ - if (ep->xfer_len > 0) - { - { - fifoemptymsk |= 1 << ep->num; - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, 0, fifoemptymsk); - } - } - } - } - else - { - /* OUT endpoint */ - depctl.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); - deptsiz.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPTSIZ); - /* Program the transfer size and packet count as follows: - * xfersize = N * (maxpacket + 4 - (maxpacket % 4)) - * pktcnt = N */ - if (ep->xfer_len == 0) - { - deptsiz.b.xfersize = ep->maxpacket; - deptsiz.b.pktcnt = 1; - } - else - { - ep->xfer_len = ep->maxpacket; - deptsiz.b.xfersize = ep->maxpacket; - deptsiz.b.pktcnt = 1; - } - USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPTSIZ, deptsiz.d32); - if (pdev->cfg.dma_enable == 1) - { - USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPDMA, ep->dma_addr); - } - /* EP enable */ - depctl.b.cnak = 1; - depctl.b.epena = 1; - USB_OTG_WRITE_REG32 (&(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL), depctl.d32); - - } - return status; -} - - -/** -* @brief USB_OTG_EPSetStall : Set the EP STALL -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EPSetStall(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_DEPCTL_TypeDef depctl; - __IO uint32_t *depctl_addr; - - depctl.d32 = 0; - if (ep->is_in == 1) - { - depctl_addr = &(pdev->regs.INEP_REGS[ep->num]->DIEPCTL); - depctl.d32 = USB_OTG_READ_REG32(depctl_addr); - /* set the disable and stall bits */ - if (depctl.b.epena) - { - depctl.b.epdis = 1; - } - depctl.b.stall = 1; - USB_OTG_WRITE_REG32(depctl_addr, depctl.d32); - } - else - { - depctl_addr = &(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); - depctl.d32 = USB_OTG_READ_REG32(depctl_addr); - /* set the stall bit */ - depctl.b.stall = 1; - USB_OTG_WRITE_REG32(depctl_addr, depctl.d32); - } - return status; -} - - -/** -* @brief Clear the EP STALL -* @param pdev : Selected device -* @retval USB_OTG_STS : status -*/ -USB_OTG_STS USB_OTG_EPClearStall(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) -{ - USB_OTG_STS status = USB_OTG_OK; - USB_OTG_DEPCTL_TypeDef depctl; - __IO uint32_t *depctl_addr; - - depctl.d32 = 0; - - if (ep->is_in == 1) - { - depctl_addr = &(pdev->regs.INEP_REGS[ep->num]->DIEPCTL); - } - else - { - depctl_addr = &(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); - } - depctl.d32 = USB_OTG_READ_REG32(depctl_addr); - /* clear the stall bits */ - depctl.b.stall = 0; - if (ep->type == EP_TYPE_INTR || ep->type == EP_TYPE_BULK) - { - depctl.b.setd0pid = 1; /* DATA0 */ - } - USB_OTG_WRITE_REG32(depctl_addr, depctl.d32); - return status; -} - - -/** -* @brief USB_OTG_ReadDevAllOutEp_itr : returns OUT endpoint interrupt bits -* @param pdev : Selected device -* @retval OUT endpoint interrupt bits -*/ -uint32_t USB_OTG_ReadDevAllOutEp_itr(USB_OTG_CORE_HANDLE *pdev) -{ - uint32_t v; - v = USB_OTG_READ_REG32(&pdev->regs.DREGS->DAINT); - v &= USB_OTG_READ_REG32(&pdev->regs.DREGS->DAINTMSK); - return ((v & 0xffff0000) >> 16); -} - - -/** -* @brief USB_OTG_ReadDevOutEP_itr : returns Device OUT EP Interrupt register -* @param pdev : Selected device -* @param ep : end point number -* @retval Device OUT EP Interrupt register -*/ -uint32_t USB_OTG_ReadDevOutEP_itr(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) -{ - uint32_t v; - v = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[epnum]->DOEPINT); - v &= USB_OTG_READ_REG32(&pdev->regs.DREGS->DOEPMSK); - return v; -} - - -/** -* @brief USB_OTG_ReadDevAllInEPItr : Get int status register -* @param pdev : Selected device -* @retval int status register -*/ -uint32_t USB_OTG_ReadDevAllInEPItr(USB_OTG_CORE_HANDLE *pdev) -{ - uint32_t v; - v = USB_OTG_READ_REG32(&pdev->regs.DREGS->DAINT); - v &= USB_OTG_READ_REG32(&pdev->regs.DREGS->DAINTMSK); - return (v & 0xffff); -} - -/** -* @brief configures EPO to receive SETUP packets -* @param None -* @retval : None -*/ -void USB_OTG_EP0_OutStart(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_DEP0XFRSIZ_TypeDef doeptsize0; - doeptsize0.d32 = 0; - doeptsize0.b.supcnt = 3; - doeptsize0.b.pktcnt = 1; - doeptsize0.b.xfersize = 8 * 3; - USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[0]->DOEPTSIZ, doeptsize0.d32 ); - - if (pdev->cfg.dma_enable == 1) - { - USB_OTG_DEPCTL_TypeDef doepctl; - doepctl.d32 = 0; - USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[0]->DOEPDMA, - (uint32_t)&pdev->dev.setup_packet); - - /* EP enable */ - doepctl.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[0]->DOEPCTL); - doepctl.b.epena = 1; - doepctl.d32 = 0x80008000; - USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[0]->DOEPCTL, doepctl.d32); - } -} - -/** -* @brief USB_OTG_RemoteWakeup : active remote wakeup signalling -* @param None -* @retval : None -*/ -void USB_OTG_ActiveRemoteWakeup(USB_OTG_CORE_HANDLE *pdev) -{ - - USB_OTG_DCTL_TypeDef dctl; - USB_OTG_DSTS_TypeDef dsts; - USB_OTG_PCGCCTL_TypeDef power; - - if (pdev->dev.DevRemoteWakeup) - { - dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); - if(dsts.b.suspsts == 1) - { - if(pdev->cfg.low_power) - { - /* un-gate USB Core clock */ - power.d32 = USB_OTG_READ_REG32(&pdev->regs.PCGCCTL); - power.b.gatehclk = 0; - power.b.stoppclk = 0; - USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, power.d32); - } - /* active Remote wakeup signaling */ - dctl.d32 = 0; - dctl.b.rmtwkupsig = 1; - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, 0, dctl.d32); - USB_OTG_BSP_mDelay(5); - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, dctl.d32, 0 ); - } - } -} - - -/** -* @brief USB_OTG_UngateClock : active USB Core clock -* @param None -* @retval : None -*/ -void USB_OTG_UngateClock(USB_OTG_CORE_HANDLE *pdev) -{ - if(pdev->cfg.low_power) - { - - USB_OTG_DSTS_TypeDef dsts; - USB_OTG_PCGCCTL_TypeDef power; - - dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); - - if(dsts.b.suspsts == 1) - { - /* un-gate USB Core clock */ - power.d32 = USB_OTG_READ_REG32(&pdev->regs.PCGCCTL); - power.b.gatehclk = 0; - power.b.stoppclk = 0; - USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, power.d32); - - } - } -} - -/** -* @brief Stop the device and clean up fifo's -* @param None -* @retval : None -*/ -void USB_OTG_StopDevice(USB_OTG_CORE_HANDLE *pdev) -{ - uint32_t i; - - pdev->dev.device_status = 1; - - for (i = 0; i < pdev->cfg.dev_endpoints ; i++) - { - USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPINT, 0xFF); - USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPINT, 0xFF); - } - - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DIEPMSK, 0 ); - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DOEPMSK, 0 ); - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINTMSK, 0 ); - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINT, 0xFFFFFFFF ); - - /* Flush the FIFO */ - USB_OTG_FlushRxFifo(pdev); - USB_OTG_FlushTxFifo(pdev , 0x10 ); -} - -/** -* @brief returns the EP Status -* @param pdev : Selected device -* ep : endpoint structure -* @retval : EP status -*/ - -uint32_t USB_OTG_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,USB_OTG_EP *ep) -{ - USB_OTG_DEPCTL_TypeDef depctl; - __IO uint32_t *depctl_addr; - uint32_t Status = 0; - - depctl.d32 = 0; - if (ep->is_in == 1) - { - depctl_addr = &(pdev->regs.INEP_REGS[ep->num]->DIEPCTL); - depctl.d32 = USB_OTG_READ_REG32(depctl_addr); - - if (depctl.b.stall == 1) - Status = USB_OTG_EP_TX_STALL; - else if (depctl.b.naksts == 1) - Status = USB_OTG_EP_TX_NAK; - else - Status = USB_OTG_EP_TX_VALID; - - } - else - { - depctl_addr = &(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); - depctl.d32 = USB_OTG_READ_REG32(depctl_addr); - if (depctl.b.stall == 1) - Status = USB_OTG_EP_RX_STALL; - else if (depctl.b.naksts == 1) - Status = USB_OTG_EP_RX_NAK; - else - Status = USB_OTG_EP_RX_VALID; - } - - /* Return the current status */ - return Status; -} - -/** -* @brief Set the EP Status -* @param pdev : Selected device -* Status : new Status -* ep : EP structure -* @retval : None -*/ -void USB_OTG_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep , uint32_t Status) -{ - USB_OTG_DEPCTL_TypeDef depctl; - __IO uint32_t *depctl_addr; - - depctl.d32 = 0; - - /* Process for IN endpoint */ - if (ep->is_in == 1) - { - depctl_addr = &(pdev->regs.INEP_REGS[ep->num]->DIEPCTL); - depctl.d32 = USB_OTG_READ_REG32(depctl_addr); - - if (Status == USB_OTG_EP_TX_STALL) - { - USB_OTG_EPSetStall(pdev, ep); return; - } - else if (Status == USB_OTG_EP_TX_NAK) - depctl.b.snak = 1; - else if (Status == USB_OTG_EP_TX_VALID) - { - if (depctl.b.stall == 1) - { - ep->even_odd_frame = 0; - USB_OTG_EPClearStall(pdev, ep); - return; - } - depctl.b.cnak = 1; - depctl.b.usbactep = 1; - depctl.b.epena = 1; - } - else if (Status == USB_OTG_EP_TX_DIS) - depctl.b.usbactep = 0; - } - else /* Process for OUT endpoint */ - { - depctl_addr = &(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); - depctl.d32 = USB_OTG_READ_REG32(depctl_addr); - - if (Status == USB_OTG_EP_RX_STALL) { - depctl.b.stall = 1; - } - else if (Status == USB_OTG_EP_RX_NAK) - depctl.b.snak = 1; - else if (Status == USB_OTG_EP_RX_VALID) - { - if (depctl.b.stall == 1) - { - ep->even_odd_frame = 0; - USB_OTG_EPClearStall(pdev, ep); - return; - } - depctl.b.cnak = 1; - depctl.b.usbactep = 1; - depctl.b.epena = 1; - } - else if (Status == USB_OTG_EP_RX_DIS) - { - depctl.b.usbactep = 0; - } - } - - USB_OTG_WRITE_REG32(depctl_addr, depctl.d32); -} - -#endif -/** -* @} -*/ - -/** -* @} -*/ - -/** -* @} -*/ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_dcd.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_dcd.c deleted file mode 100644 index eac8c337..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_dcd.c +++ /dev/null @@ -1,478 +0,0 @@ -/** - ****************************************************************************** - * @file usb_dcd.c - * @author MCD Application Team - * @version V2.1.0 - * @date 19-March-2012 - * @brief Peripheral Device Interface Layer - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_dcd.h" -#include "usb_bsp.h" - - -/** @addtogroup USB_OTG_DRIVER -* @{ -*/ - -/** @defgroup USB_DCD -* @brief This file is the interface between EFSL ans Host mass-storage class -* @{ -*/ - - -/** @defgroup USB_DCD_Private_Defines -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_DCD_Private_TypesDefinitions -* @{ -*/ -/** -* @} -*/ - - - -/** @defgroup USB_DCD_Private_Macros -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_DCD_Private_Variables -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_DCD_Private_FunctionPrototypes -* @{ -*/ - -/** -* @} -*/ - - -/** @defgroup USB_DCD_Private_Functions -* @{ -*/ - - - -void DCD_Init(USB_OTG_CORE_HANDLE *pdev , - USB_OTG_CORE_ID_TypeDef coreID) -{ - uint32_t i; - USB_OTG_EP *ep; - - USB_OTG_SelectCore (pdev , coreID); - - pdev->dev.device_status = USB_OTG_DEFAULT; - pdev->dev.device_address = 0; - - /* Init ep structure */ - for (i = 0; i < pdev->cfg.dev_endpoints ; i++) - { - ep = &pdev->dev.in_ep[i]; - /* Init ep structure */ - ep->is_in = 1; - ep->num = i; - ep->tx_fifo_num = i; - /* Control until ep is actvated */ - ep->type = EP_TYPE_CTRL; - ep->maxpacket = USB_OTG_MAX_EP0_SIZE; - ep->xfer_buff = 0; - ep->xfer_len = 0; - } - - for (i = 0; i < pdev->cfg.dev_endpoints; i++) - { - ep = &pdev->dev.out_ep[i]; - /* Init ep structure */ - ep->is_in = 0; - ep->num = i; - ep->tx_fifo_num = i; - /* Control until ep is activated */ - ep->type = EP_TYPE_CTRL; - ep->maxpacket = USB_OTG_MAX_EP0_SIZE; - ep->xfer_buff = 0; - ep->xfer_len = 0; - } - - USB_OTG_DisableGlobalInt(pdev); - - /*Init the Core (common init.) */ - USB_OTG_CoreInit(pdev); - - - /* Force Device Mode*/ - USB_OTG_SetCurrentMode(pdev, DEVICE_MODE); - - /* Init Device */ - USB_OTG_CoreInitDev(pdev); - - - /* Enable USB Global interrupt */ - USB_OTG_EnableGlobalInt(pdev); -} - - -/** -* @brief Configure an EP -* @param pdev : Device instance -* @param epdesc : Endpoint Descriptor -* @retval : status -*/ -uint32_t DCD_EP_Open(USB_OTG_CORE_HANDLE *pdev , - uint8_t ep_addr, - uint16_t ep_mps, - uint8_t ep_type) -{ - USB_OTG_EP *ep; - - if ((ep_addr & 0x80) == 0x80) - { - ep = &pdev->dev.in_ep[ep_addr & 0x7F]; - } - else - { - ep = &pdev->dev.out_ep[ep_addr & 0x7F]; - } - ep->num = ep_addr & 0x7F; - - ep->is_in = (0x80 & ep_addr) != 0; - ep->maxpacket = ep_mps; - ep->type = ep_type; - if (ep->is_in) - { - /* Assign a Tx FIFO */ - ep->tx_fifo_num = ep->num; - } - /* Set initial data PID. */ - if (ep_type == USB_OTG_EP_BULK ) - { - ep->data_pid_start = 0; - } - USB_OTG_EPActivate(pdev , ep ); - return 0; -} -/** -* @brief called when an EP is disabled -* @param pdev: device instance -* @param ep_addr: endpoint address -* @retval : status -*/ -uint32_t DCD_EP_Close(USB_OTG_CORE_HANDLE *pdev , uint8_t ep_addr) -{ - USB_OTG_EP *ep; - - if ((ep_addr&0x80) == 0x80) - { - ep = &pdev->dev.in_ep[ep_addr & 0x7F]; - } - else - { - ep = &pdev->dev.out_ep[ep_addr & 0x7F]; - } - ep->num = ep_addr & 0x7F; - ep->is_in = (0x80 & ep_addr) != 0; - USB_OTG_EPDeactivate(pdev , ep ); - return 0; -} - - -/** -* @brief DCD_EP_PrepareRx -* @param pdev: device instance -* @param ep_addr: endpoint address -* @param pbuf: pointer to Rx buffer -* @param buf_len: data length -* @retval : status -*/ -uint32_t DCD_EP_PrepareRx( USB_OTG_CORE_HANDLE *pdev, - uint8_t ep_addr, - uint8_t *pbuf, - uint16_t buf_len) -{ - USB_OTG_EP *ep; - - ep = &pdev->dev.out_ep[ep_addr & 0x7F]; - - /*setup and start the Xfer */ - ep->xfer_buff = pbuf; - ep->xfer_len = buf_len; - ep->xfer_count = 0; - ep->is_in = 0; - ep->num = ep_addr & 0x7F; - - if (pdev->cfg.dma_enable == 1) - { - ep->dma_addr = (uint32_t)pbuf; - } - - if ( ep->num == 0 ) - { - USB_OTG_EP0StartXfer(pdev , ep); - } - else - { - USB_OTG_EPStartXfer(pdev, ep ); - } - return 0; -} - -/** -* @brief Transmit data over USB -* @param pdev: device instance -* @param ep_addr: endpoint address -* @param pbuf: pointer to Tx buffer -* @param buf_len: data length -* @retval : status -*/ -uint32_t DCD_EP_Tx ( USB_OTG_CORE_HANDLE *pdev, - uint8_t ep_addr, - uint8_t *pbuf, - uint32_t buf_len) -{ - USB_OTG_EP *ep; - - ep = &pdev->dev.in_ep[ep_addr & 0x7F]; - - /* Setup and start the Transfer */ - ep->is_in = 1; - ep->num = ep_addr & 0x7F; - ep->xfer_buff = pbuf; - ep->dma_addr = (uint32_t)pbuf; - ep->xfer_count = 0; - ep->xfer_len = buf_len; - - if ( ep->num == 0 ) - { - USB_OTG_EP0StartXfer(pdev , ep); - } - else - { - USB_OTG_EPStartXfer(pdev, ep ); - } - return 0; -} - - -/** -* @brief Stall an endpoint. -* @param pdev: device instance -* @param epnum: endpoint address -* @retval : status -*/ -uint32_t DCD_EP_Stall (USB_OTG_CORE_HANDLE *pdev, uint8_t epnum) -{ - USB_OTG_EP *ep; - if ((0x80 & epnum) == 0x80) - { - ep = &pdev->dev.in_ep[epnum & 0x7F]; - } - else - { - ep = &pdev->dev.out_ep[epnum]; - } - - ep->is_stall = 1; - ep->num = epnum & 0x7F; - ep->is_in = ((epnum & 0x80) == 0x80); - - USB_OTG_EPSetStall(pdev , ep); - return (0); -} - - -/** -* @brief Clear stall condition on endpoints. -* @param pdev: device instance -* @param epnum: endpoint address -* @retval : status -*/ -uint32_t DCD_EP_ClrStall (USB_OTG_CORE_HANDLE *pdev, uint8_t epnum) -{ - USB_OTG_EP *ep; - if ((0x80 & epnum) == 0x80) - { - ep = &pdev->dev.in_ep[epnum & 0x7F]; - } - else - { - ep = &pdev->dev.out_ep[epnum]; - } - - ep->is_stall = 0; - ep->num = epnum & 0x7F; - ep->is_in = ((epnum & 0x80) == 0x80); - - USB_OTG_EPClearStall(pdev , ep); - return (0); -} - - -/** -* @brief This Function flushes the FIFOs. -* @param pdev: device instance -* @param epnum: endpoint address -* @retval : status -*/ -uint32_t DCD_EP_Flush (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) -{ - - if ((epnum & 0x80) == 0x80) - { - USB_OTG_FlushTxFifo(pdev, epnum & 0x7F); - } - else - { - USB_OTG_FlushRxFifo(pdev); - } - - return (0); -} - - -/** -* @brief This Function set USB device address -* @param pdev: device instance -* @param address: new device address -* @retval : status -*/ -void DCD_EP_SetAddress (USB_OTG_CORE_HANDLE *pdev, uint8_t address) -{ - USB_OTG_DCFG_TypeDef dcfg; - dcfg.d32 = 0; - dcfg.b.devaddr = address; - USB_OTG_MODIFY_REG32( &pdev->regs.DREGS->DCFG, 0, dcfg.d32); -} - -/** -* @brief Connect device (enable internal pull-up) -* @param pdev: device instance -* @retval : None -*/ -void DCD_DevConnect (USB_OTG_CORE_HANDLE *pdev) -{ -#ifndef USE_OTG_MODE - USB_OTG_DCTL_TypeDef dctl; - dctl.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCTL); - /* Connect device */ - dctl.b.sftdiscon = 0; - USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCTL, dctl.d32); - USB_OTG_BSP_mDelay(3); -#endif -} - - -/** -* @brief Disconnect device (disable internal pull-up) -* @param pdev: device instance -* @retval : None -*/ -void DCD_DevDisconnect (USB_OTG_CORE_HANDLE *pdev) -{ -#ifndef USE_OTG_MODE - USB_OTG_DCTL_TypeDef dctl; - dctl.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCTL); - /* Disconnect device for 3ms */ - dctl.b.sftdiscon = 1; - USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCTL, dctl.d32); - USB_OTG_BSP_mDelay(3); -#endif -} - - -/** -* @brief returns the EP Status -* @param pdev : Selected device -* epnum : endpoint address -* @retval : EP status -*/ - -uint32_t DCD_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,uint8_t epnum) -{ - USB_OTG_EP *ep; - uint32_t Status = 0; - - if ((0x80 & epnum) == 0x80) - { - ep = &pdev->dev.in_ep[epnum & 0x7F]; - } - else - { - ep = &pdev->dev.out_ep[epnum]; - } - - Status = USB_OTG_GetEPStatus(pdev ,ep); - - /* Return the current status */ - return Status; -} - -/** -* @brief Set the EP Status -* @param pdev : Selected device -* Status : new Status -* epnum : EP address -* @retval : None -*/ -void DCD_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum , uint32_t Status) -{ - USB_OTG_EP *ep; - - if ((0x80 & epnum) == 0x80) - { - ep = &pdev->dev.in_ep[epnum & 0x7F]; - } - else - { - ep = &pdev->dev.out_ep[epnum]; - } - - USB_OTG_SetEPStatus(pdev ,ep , Status); -} - -/** -* @} -*/ - -/** -* @} -*/ - -/** -* @} -*/ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_dcd_int.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_dcd_int.c deleted file mode 100644 index 32984e61..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/usbotgdriver/src/usb_dcd_int.c +++ /dev/null @@ -1,869 +0,0 @@ -/** - ****************************************************************************** - * @file usb_dcd_int.c - * @author MCD Application Team - * @version V2.1.0 - * @date 19-March-2012 - * @brief Peripheral Device interrupt subroutines - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_dcd_int.h" -/** @addtogroup USB_OTG_DRIVER -* @{ -*/ - -/** @defgroup USB_DCD_INT -* @brief This file contains the interrupt subroutines for the Device mode. -* @{ -*/ - - -/** @defgroup USB_DCD_INT_Private_Defines -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_DCD_INT_Private_TypesDefinitions -* @{ -*/ -/** -* @} -*/ - - - -/** @defgroup USB_DCD_INT_Private_Macros -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_DCD_INT_Private_Variables -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_DCD_INT_Private_FunctionPrototypes -* @{ -*/ -/* static functions */ -static uint32_t DCD_ReadDevInEP (USB_OTG_CORE_HANDLE *pdev, uint8_t epnum); - -/* Interrupt Handlers */ -static uint32_t DCD_HandleInEP_ISR(USB_OTG_CORE_HANDLE *pdev); -static uint32_t DCD_HandleOutEP_ISR(USB_OTG_CORE_HANDLE *pdev); -static uint32_t DCD_HandleSof_ISR(USB_OTG_CORE_HANDLE *pdev); - -static uint32_t DCD_HandleRxStatusQueueLevel_ISR(USB_OTG_CORE_HANDLE *pdev); -static uint32_t DCD_WriteEmptyTxFifo(USB_OTG_CORE_HANDLE *pdev , uint32_t epnum); - -static uint32_t DCD_HandleUsbReset_ISR(USB_OTG_CORE_HANDLE *pdev); -static uint32_t DCD_HandleEnumDone_ISR(USB_OTG_CORE_HANDLE *pdev); -static uint32_t DCD_HandleResume_ISR(USB_OTG_CORE_HANDLE *pdev); -static uint32_t DCD_HandleUSBSuspend_ISR(USB_OTG_CORE_HANDLE *pdev); - -static uint32_t DCD_IsoINIncomplete_ISR(USB_OTG_CORE_HANDLE *pdev); -static uint32_t DCD_IsoOUTIncomplete_ISR(USB_OTG_CORE_HANDLE *pdev); -#ifdef VBUS_SENSING_ENABLED -static uint32_t DCD_SessionRequest_ISR(USB_OTG_CORE_HANDLE *pdev); -static uint32_t DCD_OTG_ISR(USB_OTG_CORE_HANDLE *pdev); -#endif - -/** -* @} -*/ - - -/** @defgroup USB_DCD_INT_Private_Functions -* @{ -*/ - - -#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED -/** -* @brief USBD_OTG_EP1OUT_ISR_Handler -* handles all USB Interrupts -* @param pdev: device instance -* @retval status -*/ -uint32_t USBD_OTG_EP1OUT_ISR_Handler (USB_OTG_CORE_HANDLE *pdev) -{ - - USB_OTG_DOEPINTn_TypeDef doepint; - USB_OTG_DEPXFRSIZ_TypeDef deptsiz; - - doepint.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[1]->DOEPINT); - doepint.d32&= USB_OTG_READ_REG32(&pdev->regs.DREGS->DOUTEP1MSK); - - /* Transfer complete */ - if ( doepint.b.xfercompl ) - { - /* Clear the bit in DOEPINTn for this interrupt */ - CLEAR_OUT_EP_INTR(1, xfercompl); - if (pdev->cfg.dma_enable == 1) - { - deptsiz.d32 = USB_OTG_READ_REG32(&(pdev->regs.OUTEP_REGS[1]->DOEPTSIZ)); - /*ToDo : handle more than one single MPS size packet */ - pdev->dev.out_ep[1].xfer_count = pdev->dev.out_ep[1].maxpacket - \ - deptsiz.b.xfersize; - } - /* Inform upper layer: data ready */ - /* RX COMPLETE */ - USBD_DCD_INT_fops->DataOutStage(pdev , 1); - - } - - /* Endpoint disable */ - if ( doepint.b.epdisabled ) - { - /* Clear the bit in DOEPINTn for this interrupt */ - CLEAR_OUT_EP_INTR(1, epdisabled); - } - - return 1; -} - -/** -* @brief USBD_OTG_EP1IN_ISR_Handler -* handles all USB Interrupts -* @param pdev: device instance -* @retval status -*/ -uint32_t USBD_OTG_EP1IN_ISR_Handler (USB_OTG_CORE_HANDLE *pdev) -{ - - USB_OTG_DIEPINTn_TypeDef diepint; - uint32_t fifoemptymsk, msk, emp; - - msk = USB_OTG_READ_REG32(&pdev->regs.DREGS->DINEP1MSK); - emp = USB_OTG_READ_REG32(&pdev->regs.DREGS->DIEPEMPMSK); - msk |= ((emp >> 1 ) & 0x1) << 7; - diepint.d32 = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[1]->DIEPINT) & msk; - - if ( diepint.b.xfercompl ) - { - fifoemptymsk = 0x1 << 1; - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, fifoemptymsk, 0); - CLEAR_IN_EP_INTR(1, xfercompl); - /* TX COMPLETE */ - USBD_DCD_INT_fops->DataInStage(pdev , 1); - } - if ( diepint.b.epdisabled ) - { - CLEAR_IN_EP_INTR(1, epdisabled); - } - if ( diepint.b.timeout ) - { - CLEAR_IN_EP_INTR(1, timeout); - } - if (diepint.b.intktxfemp) - { - CLEAR_IN_EP_INTR(1, intktxfemp); - } - if (diepint.b.inepnakeff) - { - CLEAR_IN_EP_INTR(1, inepnakeff); - } - if (diepint.b.emptyintr) - { - DCD_WriteEmptyTxFifo(pdev , 1); - CLEAR_IN_EP_INTR(1, emptyintr); - } - return 1; -} -#endif - -/** -* @brief STM32_USBF_OTG_ISR_Handler -* handles all USB Interrupts -* @param pdev: device instance -* @retval status -*/ -uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTSTS_TypeDef gintr_status; - uint32_t retval = 0; - - if (USB_OTG_IsDeviceMode(pdev)) /* ensure that we are in device mode */ - { - gintr_status.d32 = USB_OTG_ReadCoreItr(pdev); - if (!gintr_status.d32) /* avoid spurious interrupt */ - { - return 0; - } - - if (gintr_status.b.outepintr) - { - retval |= DCD_HandleOutEP_ISR(pdev); - } - - if (gintr_status.b.inepint) - { - retval |= DCD_HandleInEP_ISR(pdev); - } - - if (gintr_status.b.modemismatch) - { - USB_OTG_GINTSTS_TypeDef gintsts; - - /* Clear interrupt */ - gintsts.d32 = 0; - gintsts.b.modemismatch = 1; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, gintsts.d32); - } - - if (gintr_status.b.wkupintr) - { - retval |= DCD_HandleResume_ISR(pdev); - } - - if (gintr_status.b.usbsuspend) - { - retval |= DCD_HandleUSBSuspend_ISR(pdev); - } - if (gintr_status.b.sofintr) - { - retval |= DCD_HandleSof_ISR(pdev); - - } - - if (gintr_status.b.rxstsqlvl) - { - retval |= DCD_HandleRxStatusQueueLevel_ISR(pdev); - - } - - if (gintr_status.b.usbreset) - { - retval |= DCD_HandleUsbReset_ISR(pdev); - - } - if (gintr_status.b.enumdone) - { - retval |= DCD_HandleEnumDone_ISR(pdev); - } - - if (gintr_status.b.incomplisoin) - { - retval |= DCD_IsoINIncomplete_ISR(pdev); - } - - if (gintr_status.b.incomplisoout) - { - retval |= DCD_IsoOUTIncomplete_ISR(pdev); - } -#ifdef VBUS_SENSING_ENABLED - if (gintr_status.b.sessreqintr) - { - retval |= DCD_SessionRequest_ISR(pdev); - } - - if (gintr_status.b.otgintr) - { - retval |= DCD_OTG_ISR(pdev); - } -#endif - } - return retval; -} - -#ifdef VBUS_SENSING_ENABLED -/** -* @brief DCD_SessionRequest_ISR -* Indicates that the USB_OTG controller has detected a connection -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_SessionRequest_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTSTS_TypeDef gintsts; - USBD_DCD_INT_fops->DevConnected (pdev); - - /* Clear interrupt */ - gintsts.d32 = 0; - gintsts.b.sessreqintr = 1; - USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GINTSTS, gintsts.d32); - return 1; -} - -/** -* @brief DCD_OTG_ISR -* Indicates that the USB_OTG controller has detected an OTG event: -* used to detect the end of session i.e. disconnection -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_OTG_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - - USB_OTG_GOTGINT_TypeDef gotgint; - - gotgint.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GOTGINT); - - if (gotgint.b.sesenddet) - { - USBD_DCD_INT_fops->DevDisconnected (pdev); - } - /* Clear OTG interrupt */ - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GOTGINT, gotgint.d32); - return 1; -} -#endif -/** -* @brief DCD_HandleResume_ISR -* Indicates that the USB_OTG controller has detected a resume or -* remote Wake-up sequence -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_HandleResume_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTSTS_TypeDef gintsts; - USB_OTG_DCTL_TypeDef devctl; - USB_OTG_PCGCCTL_TypeDef power; - - if(pdev->cfg.low_power) - { - /* un-gate USB Core clock */ - power.d32 = USB_OTG_READ_REG32(&pdev->regs.PCGCCTL); - power.b.gatehclk = 0; - power.b.stoppclk = 0; - USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, power.d32); - } - - /* Clear the Remote Wake-up Signaling */ - devctl.d32 = 0; - devctl.b.rmtwkupsig = 1; - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, devctl.d32, 0); - - /* Inform upper layer by the Resume Event */ - USBD_DCD_INT_fops->Resume (pdev); - - /* Clear interrupt */ - gintsts.d32 = 0; - gintsts.b.wkupintr = 1; - USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GINTSTS, gintsts.d32); - return 1; -} - -/** -* @brief USB_OTG_HandleUSBSuspend_ISR -* Indicates that SUSPEND state has been detected on the USB -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_HandleUSBSuspend_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTSTS_TypeDef gintsts; - USB_OTG_PCGCCTL_TypeDef power; - USB_OTG_DSTS_TypeDef dsts; - __IO uint8_t prev_status = 0; - - prev_status = pdev->dev.device_status; - USBD_DCD_INT_fops->Suspend (pdev); - - dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); - - /* Clear interrupt */ - gintsts.d32 = 0; - gintsts.b.usbsuspend = 1; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, gintsts.d32); - - if((pdev->cfg.low_power) && (dsts.b.suspsts == 1) && - (pdev->dev.connection_status == 1) && - (prev_status == USB_OTG_CONFIGURED)) - { - /* switch-off the clocks */ - power.d32 = 0; - power.b.stoppclk = 1; - USB_OTG_MODIFY_REG32(pdev->regs.PCGCCTL, 0, power.d32); - - power.b.gatehclk = 1; - USB_OTG_MODIFY_REG32(pdev->regs.PCGCCTL, 0, power.d32); - - /* Request to enter Sleep mode after exit from current ISR */ - SCB->SCR |= (SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk); - } - return 1; -} - -/** -* @brief DCD_HandleInEP_ISR -* Indicates that an IN EP has a pending Interrupt -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_HandleInEP_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_DIEPINTn_TypeDef diepint; - - uint32_t ep_intr; - uint32_t epnum = 0; - uint32_t fifoemptymsk; - diepint.d32 = 0; - ep_intr = USB_OTG_ReadDevAllInEPItr(pdev); - - while ( ep_intr ) - { - if (ep_intr&0x1) /* In ITR */ - { - diepint.d32 = DCD_ReadDevInEP(pdev , epnum); /* Get In ITR status */ - if ( diepint.b.xfercompl ) - { - fifoemptymsk = 0x1 << epnum; - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, fifoemptymsk, 0); - CLEAR_IN_EP_INTR(epnum, xfercompl); - /* TX COMPLETE */ - USBD_DCD_INT_fops->DataInStage(pdev , epnum); - - if (pdev->cfg.dma_enable == 1) - { - if((epnum == 0) && (pdev->dev.device_state == USB_OTG_EP0_STATUS_IN)) - { - /* prepare to rx more setup packets */ - USB_OTG_EP0_OutStart(pdev); - } - } - } - if ( diepint.b.timeout ) - { - CLEAR_IN_EP_INTR(epnum, timeout); - } - if (diepint.b.intktxfemp) - { - CLEAR_IN_EP_INTR(epnum, intktxfemp); - } - if (diepint.b.inepnakeff) - { - CLEAR_IN_EP_INTR(epnum, inepnakeff); - } - if ( diepint.b.epdisabled ) - { - CLEAR_IN_EP_INTR(epnum, epdisabled); - } - if (diepint.b.emptyintr) - { - - DCD_WriteEmptyTxFifo(pdev , epnum); - - CLEAR_IN_EP_INTR(epnum, emptyintr); - } - } - epnum++; - ep_intr >>= 1; - } - - return 1; -} - -/** -* @brief DCD_HandleOutEP_ISR -* Indicates that an OUT EP has a pending Interrupt -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_HandleOutEP_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - uint32_t ep_intr; - USB_OTG_DOEPINTn_TypeDef doepint; - USB_OTG_DEPXFRSIZ_TypeDef deptsiz; - uint32_t epnum = 0; - - doepint.d32 = 0; - - /* Read in the device interrupt bits */ - ep_intr = USB_OTG_ReadDevAllOutEp_itr(pdev); - - while ( ep_intr ) - { - if (ep_intr&0x1) - { - - doepint.d32 = USB_OTG_ReadDevOutEP_itr(pdev, epnum); - - /* Transfer complete */ - if ( doepint.b.xfercompl ) - { - /* Clear the bit in DOEPINTn for this interrupt */ - CLEAR_OUT_EP_INTR(epnum, xfercompl); - if (pdev->cfg.dma_enable == 1) - { - deptsiz.d32 = USB_OTG_READ_REG32(&(pdev->regs.OUTEP_REGS[epnum]->DOEPTSIZ)); - /*ToDo : handle more than one single MPS size packet */ - pdev->dev.out_ep[epnum].xfer_count = pdev->dev.out_ep[epnum].maxpacket - \ - deptsiz.b.xfersize; - } - /* Inform upper layer: data ready */ - /* RX COMPLETE */ - USBD_DCD_INT_fops->DataOutStage(pdev , epnum); - - if (pdev->cfg.dma_enable == 1) - { - if((epnum == 0) && (pdev->dev.device_state == USB_OTG_EP0_STATUS_OUT)) - { - /* prepare to rx more setup packets */ - USB_OTG_EP0_OutStart(pdev); - } - } - } - /* Endpoint disable */ - if ( doepint.b.epdisabled ) - { - /* Clear the bit in DOEPINTn for this interrupt */ - CLEAR_OUT_EP_INTR(epnum, epdisabled); - } - /* Setup Phase Done (control EPs) */ - if ( doepint.b.setup ) - { - - /* inform the upper layer that a setup packet is available */ - /* SETUP COMPLETE */ - USBD_DCD_INT_fops->SetupStage(pdev); - CLEAR_OUT_EP_INTR(epnum, setup); - } - } - epnum++; - ep_intr >>= 1; - } - return 1; -} - -/** -* @brief DCD_HandleSof_ISR -* Handles the SOF Interrupts -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_HandleSof_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTSTS_TypeDef GINTSTS; - - - USBD_DCD_INT_fops->SOF(pdev); - - /* Clear interrupt */ - GINTSTS.d32 = 0; - GINTSTS.b.sofintr = 1; - USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GINTSTS, GINTSTS.d32); - - return 1; -} - -/** -* @brief DCD_HandleRxStatusQueueLevel_ISR -* Handles the Rx Status Queue Level Interrupt -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_HandleRxStatusQueueLevel_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTMSK_TypeDef int_mask; - USB_OTG_DRXSTS_TypeDef status; - USB_OTG_EP *ep; - - /* Disable the Rx Status Queue Level interrupt */ - int_mask.d32 = 0; - int_mask.b.rxstsqlvl = 1; - USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, int_mask.d32, 0); - - /* Get the Status from the top of the FIFO */ - status.d32 = USB_OTG_READ_REG32( &pdev->regs.GREGS->GRXSTSP ); - - ep = &pdev->dev.out_ep[status.b.epnum]; - - switch (status.b.pktsts) - { - case STS_GOUT_NAK: - break; - case STS_DATA_UPDT: - if (status.b.bcnt) - { - USB_OTG_ReadPacket(pdev,ep->xfer_buff, status.b.bcnt); - ep->xfer_buff += status.b.bcnt; - ep->xfer_count += status.b.bcnt; - } - break; - case STS_XFER_COMP: - break; - case STS_SETUP_COMP: - break; - case STS_SETUP_UPDT: - /* Copy the setup packet received in FIFO into the setup buffer in RAM */ - USB_OTG_ReadPacket(pdev , pdev->dev.setup_packet, 8); - ep->xfer_count += status.b.bcnt; - break; - default: - break; - } - - /* Enable the Rx Status Queue Level interrupt */ - USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, 0, int_mask.d32); - - return 1; -} - -/** -* @brief DCD_WriteEmptyTxFifo -* check FIFO for the next packet to be loaded -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_WriteEmptyTxFifo(USB_OTG_CORE_HANDLE *pdev, uint32_t epnum) -{ - USB_OTG_DTXFSTSn_TypeDef txstatus; - USB_OTG_EP *ep; - uint32_t len = 0; - uint32_t len32b; - txstatus.d32 = 0; - - ep = &pdev->dev.in_ep[epnum]; - - len = ep->xfer_len - ep->xfer_count; - - if (len > ep->maxpacket) - { - len = ep->maxpacket; - } - - len32b = (len + 3) / 4; - txstatus.d32 = USB_OTG_READ_REG32( &pdev->regs.INEP_REGS[epnum]->DTXFSTS); - - - - while (txstatus.b.txfspcavail > len32b && - ep->xfer_count < ep->xfer_len && - ep->xfer_len != 0) - { - /* Write the FIFO */ - len = ep->xfer_len - ep->xfer_count; - - if (len > ep->maxpacket) - { - len = ep->maxpacket; - } - len32b = (len + 3) / 4; - - USB_OTG_WritePacket (pdev , ep->xfer_buff, epnum, len); - - ep->xfer_buff += len; - ep->xfer_count += len; - - txstatus.d32 = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[epnum]->DTXFSTS); - } - - return 1; -} - -/** -* @brief DCD_HandleUsbReset_ISR -* This interrupt occurs when a USB Reset is detected -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_HandleUsbReset_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_DAINT_TypeDef daintmsk; - USB_OTG_DOEPMSK_TypeDef doepmsk; - USB_OTG_DIEPMSK_TypeDef diepmsk; - USB_OTG_DCFG_TypeDef dcfg; - USB_OTG_DCTL_TypeDef dctl; - USB_OTG_GINTSTS_TypeDef gintsts; - uint32_t i; - - dctl.d32 = 0; - daintmsk.d32 = 0; - doepmsk.d32 = 0; - diepmsk.d32 = 0; - dcfg.d32 = 0; - gintsts.d32 = 0; - - /* Clear the Remote Wake-up Signaling */ - dctl.b.rmtwkupsig = 1; - USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, dctl.d32, 0 ); - - /* Flush the Tx FIFO */ - USB_OTG_FlushTxFifo(pdev , 0 ); - - for (i = 0; i < pdev->cfg.dev_endpoints ; i++) - { - USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPINT, 0xFF); - USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPINT, 0xFF); - } - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINT, 0xFFFFFFFF ); - - daintmsk.ep.in = 1; - daintmsk.ep.out = 1; - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINTMSK, daintmsk.d32 ); - - doepmsk.b.setup = 1; - doepmsk.b.xfercompl = 1; - doepmsk.b.epdisabled = 1; - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DOEPMSK, doepmsk.d32 ); -#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DOUTEP1MSK, doepmsk.d32 ); -#endif - diepmsk.b.xfercompl = 1; - diepmsk.b.timeout = 1; - diepmsk.b.epdisabled = 1; - - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DIEPMSK, diepmsk.d32 ); -#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DINEP1MSK, diepmsk.d32 ); -#endif - /* Reset Device Address */ - dcfg.d32 = USB_OTG_READ_REG32( &pdev->regs.DREGS->DCFG); - dcfg.b.devaddr = 0; - USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DCFG, dcfg.d32); - - - /* setup EP0 to receive SETUP packets */ - USB_OTG_EP0_OutStart(pdev); - - /* Clear interrupt */ - gintsts.d32 = 0; - gintsts.b.usbreset = 1; - USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GINTSTS, gintsts.d32); - - /*Reset internal state machine */ - USBD_DCD_INT_fops->Reset(pdev); - return 1; -} - -/** -* @brief DCD_HandleEnumDone_ISR -* Read the device status register and set the device speed -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_HandleEnumDone_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTSTS_TypeDef gintsts; - USB_OTG_GUSBCFG_TypeDef gusbcfg; - - USB_OTG_EP0Activate(pdev); - - /* Set USB turn-around time based on device speed and PHY interface. */ - gusbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG); - - /* Full or High speed */ - if ( USB_OTG_GetDeviceSpeed(pdev) == USB_SPEED_HIGH) - { - pdev->cfg.speed = USB_OTG_SPEED_HIGH; - pdev->cfg.mps = USB_OTG_HS_MAX_PACKET_SIZE ; - gusbcfg.b.usbtrdtim = 9; - } - else - { - pdev->cfg.speed = USB_OTG_SPEED_FULL; - pdev->cfg.mps = USB_OTG_FS_MAX_PACKET_SIZE ; - gusbcfg.b.usbtrdtim = 5; - } - - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GUSBCFG, gusbcfg.d32); - - /* Clear interrupt */ - gintsts.d32 = 0; - gintsts.b.enumdone = 1; - USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTSTS, gintsts.d32 ); - return 1; -} - - -/** -* @brief DCD_IsoINIncomplete_ISR -* handle the ISO IN incomplete interrupt -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_IsoINIncomplete_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTSTS_TypeDef gintsts; - - gintsts.d32 = 0; - - USBD_DCD_INT_fops->IsoINIncomplete (pdev); - - /* Clear interrupt */ - gintsts.b.incomplisoin = 1; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, gintsts.d32); - - return 1; -} - -/** -* @brief DCD_IsoOUTIncomplete_ISR -* handle the ISO OUT incomplete interrupt -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_IsoOUTIncomplete_ISR(USB_OTG_CORE_HANDLE *pdev) -{ - USB_OTG_GINTSTS_TypeDef gintsts; - - gintsts.d32 = 0; - - USBD_DCD_INT_fops->IsoOUTIncomplete (pdev); - - /* Clear interrupt */ - gintsts.b.incomplisoout = 1; - USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, gintsts.d32); - return 1; -} -/** -* @brief DCD_ReadDevInEP -* Reads ep flags -* @param pdev: device instance -* @retval status -*/ -static uint32_t DCD_ReadDevInEP (USB_OTG_CORE_HANDLE *pdev, uint8_t epnum) -{ - uint32_t v, msk, emp; - msk = USB_OTG_READ_REG32(&pdev->regs.DREGS->DIEPMSK); - emp = USB_OTG_READ_REG32(&pdev->regs.DREGS->DIEPEMPMSK); - msk |= ((emp >> epnum) & 0x1) << 7; - v = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[epnum]->DIEPINT) & msk; - return v; -} - - - -/** -* @} -*/ - -/** -* @} -*/ - -/** -* @} -*/ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/main.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/main.c deleted file mode 100644 index 1015a75c..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/main.c +++ /dev/null @@ -1,164 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Boot\main.c -* \brief Bootloader application source file. -* \ingroup Boot_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "boot.h" /* bootloader generic header */ -#include "stm32f4xx.h" /* STM32 registers */ -#include "stm32f4xx_conf.h" /* STM32 peripheral drivers */ - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -static void Init(void); - - -/************************************************************************************//** -** \brief This is the entry point for the bootloader application and is called -** by the reset interrupt vector after the C-startup routines executed. -** \return none. -** -****************************************************************************************/ -void main(void) -{ - /* initialize the microcontroller */ - Init(); - /* initialize the bootloader */ - BootInit(); - - /* start the infinite program loop */ - while (1) - { - /* run the bootloader task */ - BootTask(); - } -} /*** end of main ***/ - - -/************************************************************************************//** -** \brief Initializes the microcontroller. -** \return none. -** -****************************************************************************************/ -static void Init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; -#if (BOOT_COM_UART_ENABLE > 0) -#elif (BOOT_FILE_SYS_ENABLE > 0) - USART_InitTypeDef USART_InitStructure; -#endif - - /* initialize the system and its clocks */ - SystemInit(); - - /* initialize the button as a digital input. is used to override the starting of - * the user program. - */ - /* enable the GPIO Clock */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); - /* configure the GPIO pin */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - -#if (BOOT_COM_UART_ENABLE > 0) - /* enable UART peripheral clock */ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE); - /* enable GPIO peripheral clock for transmitter and receiver pins */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); - /* connect the pin to the peripherals alternate function */ - GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6); - /* configure USART Tx as alternate function */ - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOC, &GPIO_InitStructure); - /* configure USART Rx as alternate function */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; - GPIO_Init(GPIOC, &GPIO_InitStructure); -#elif (BOOT_FILE_SYS_ENABLE > 0) - /* enable UART peripheral clock */ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE); - /* enable GPIO peripheral clock for transmitter and receiver pins */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); - /* connect the pin to the peripherals alternate function */ - GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6); - /* configure USART Tx as alternate function */ - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOC, &GPIO_InitStructure); - /* configure USART Rx as alternate function */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; - GPIO_Init(GPIOC, &GPIO_InitStructure); - /* initialize the uart for the specified communication speed */ - USART_InitStructure.USART_BaudRate = BOOT_COM_UART_BAUDRATE; - 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(USART6, &USART_InitStructure); - /* enable UART */ - USART_Cmd(USART6, ENABLE); -#endif -#if (BOOT_COM_CAN_ENABLE > 0) - /* enable clocks for CAN2 transmitter and receiver pins */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); - /* select alternate function for the CAN2 pins */ - GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2); - GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2); - /* configure CAN2 RX and TX pins */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(GPIOB, &GPIO_InitStructure); - /* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2 - * the CAN1 peripheral also needs to be enabled. - */ - RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE); -#endif -} /*** end of Init ***/ - - -/*********************************** end of main.c *************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usb_bsp.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usb_bsp.c deleted file mode 100644 index 59d81bda..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usb_bsp.c +++ /dev/null @@ -1,194 +0,0 @@ -/** - ****************************************************************************** - * @file usb_bsp.c - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief This file is responsible to offer board support package and is - * configurable by user. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_bsp.h" -#include "usbd_conf.h" - - -extern void HwDelayUs(uint32_t time_us); -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY -* @{ -*/ - -/** @defgroup USB_BSP -* @brief This file is responsible to offer board support package -* @{ -*/ - -/** @defgroup USB_BSP_Private_Defines -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USB_BSP_Private_TypesDefinitions -* @{ -*/ -/** -* @} -*/ - - - - - -/** @defgroup USB_BSP_Private_Macros -* @{ -*/ -/** -* @} -*/ - -/** @defgroup USBH_BSP_Private_Variables -* @{ -*/ - -/** -* @} -*/ - -/** @defgroup USBH_BSP_Private_FunctionPrototypes -* @{ -*/ -/** -* @} -*/ - -/** @defgroup USB_BSP_Private_Functions -* @{ -*/ - - - -/** -* @brief USB_OTG_BSP_Init -* Initilizes BSP configurations -* @param None -* @retval None -*/ -void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA , ENABLE); - - /* Configure SOF ID DM DP Pins */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | - GPIO_Pin_11 | - GPIO_Pin_12; - - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_OTG1_FS) ; - GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_OTG1_FS) ; - GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_OTG1_FS) ; - - /* Configure VBUS Pin */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - /* Configure ID pin */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; - GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); - GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_OTG1_FS) ; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE) ; -} -/** -* @brief USB_OTG_BSP_EnableInterrupt -* Enabele USB Global interrupt -* @param None -* @retval None -*/ -void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev) -{ - /* driver runs in polling mode */ -} -/** -* @brief USB_OTG_BSP_uDelay -* This function provides delay time in micro sec -* @param usec : Value of delay required in micro sec -* @retval None -*/ -void USB_OTG_BSP_uDelay (const uint32_t usec) -{ - #define HW_DELAY_MS_LOOP_COUNT (28000) - - uint32_t delay_counter; - uint32_t time_us = usec; - - /* perform the delay */ - while (time_us-- > 0) - { - /* block program for about 1 millisecond */ - for (delay_counter=0; delay_counter<(HW_DELAY_MS_LOOP_COUNT/1000); delay_counter++) - { - __asm__("nop"); - } - } -} - - -/** -* @brief USB_OTG_BSP_mDelay -* This function provides delay time in milli sec -* @param msec : Value of delay required in milli sec -* @retval None -*/ -void USB_OTG_BSP_mDelay (const uint32_t msec) -{ - USB_OTG_BSP_uDelay(msec * 1000); -} -/** -* @} -*/ - -/** -* @} -*/ - -/** -* @} -*/ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usb_conf.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usb_conf.h deleted file mode 100644 index ab61672f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usb_conf.h +++ /dev/null @@ -1,289 +0,0 @@ -/** - ****************************************************************************** - * @file usb_conf.h - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief General low level driver configuration - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_CONF__H__ -#define __USB_CONF__H__ - -/* Includes ------------------------------------------------------------------*/ - #include "stm32f4xx.h" - - -/** @addtogroup USB_OTG_DRIVER - * @{ - */ - -/** @defgroup USB_CONF - * @brief USB low level driver configuration file - * @{ - */ - -/** @defgroup USB_CONF_Exported_Defines - * @{ - */ - -/* USB Core and PHY interface configuration. - Tip: To avoid modifying these defines each time you need to change the USB - configuration, you can declare the needed define in your toolchain - compiler preprocessor. - */ -/****************** USB OTG FS PHY CONFIGURATION ******************************* -* The USB OTG FS Core supports one on-chip Full Speed PHY. -* -* The USE_EMBEDDED_PHY symbol is defined in the project compiler preprocessor -* when FS core is used. -*******************************************************************************/ -#ifndef USE_USB_OTG_FS - //#define USE_USB_OTG_FS -#endif /* USE_USB_OTG_FS */ - -#ifdef USE_USB_OTG_FS - #define USB_OTG_FS_CORE -#endif - -/****************** USB OTG HS PHY CONFIGURATION ******************************* -* The USB OTG HS Core supports two PHY interfaces: -* (i) An ULPI interface for the external High Speed PHY: the USB HS Core will -* operate in High speed mode -* (ii) An on-chip Full Speed PHY: the USB HS Core will operate in Full speed mode -* -* You can select the PHY to be used using one of these two defines: -* (i) USE_ULPI_PHY: if the USB OTG HS Core is to be used in High speed mode -* (ii) USE_EMBEDDED_PHY: if the USB OTG HS Core is to be used in Full speed mode -* -* Notes: -* - The USE_ULPI_PHY symbol is defined in the project compiler preprocessor as -* default PHY when HS core is used. -* - On STM322xG-EVAL and STM324xG-EVAL boards, only configuration(i) is available. -* Configuration (ii) need a different hardware, for more details refer to your -* STM32 device datasheet. -*******************************************************************************/ -#ifndef USE_USB_OTG_HS - //#define USE_USB_OTG_HS -#endif /* USE_USB_OTG_HS */ - -#ifndef USE_ULPI_PHY - //#define USE_ULPI_PHY -#endif /* USE_ULPI_PHY */ - -#ifndef USE_EMBEDDED_PHY - //#define USE_EMBEDDED_PHY -#endif /* USE_EMBEDDED_PHY */ - -#ifdef USE_USB_OTG_HS - #define USB_OTG_HS_CORE -#endif - -/******************************************************************************* -* FIFO Size Configuration in Device mode -* -* (i) Receive data FIFO size = RAM for setup packets + -* OUT endpoint control information + -* data OUT packets + miscellaneous -* Space = ONE 32-bits words -* --> RAM for setup packets = 10 spaces -* (n is the nbr of CTRL EPs the device core supports) -* --> OUT EP CTRL info = 1 space -* (one space for status information written to the FIFO along with each -* received packet) -* --> data OUT packets = (Largest Packet Size / 4) + 1 spaces -* (MINIMUM to receive packets) -* --> OR data OUT packets = at least 2*(Largest Packet Size / 4) + 1 spaces -* (if high-bandwidth EP is enabled or multiple isochronous EPs) -* --> miscellaneous = 1 space per OUT EP -* (one space for transfer complete status information also pushed to the -* FIFO with each endpoint's last packet) -* -* (ii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for -* that particular IN EP. More space allocated in the IN EP Tx FIFO results -* in a better performance on the USB and can hide latencies on the AHB. -* -* (iii) TXn min size = 16 words. (n : Transmit FIFO index) -* (iv) When a TxFIFO is not used, the Configuration should be as follows: -* case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes) -* --> Txm can use the space allocated for Txn. -* case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes) -* --> Txn should be configured with the minimum space of 16 words -* (v) The FIFO is used optimally when used TxFIFOs are allocated in the top -* of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones. -* (vi) In HS case 12 FIFO locations should be reserved for internal DMA registers -* so total FIFO size should be 1012 Only instead of 1024 -*******************************************************************************/ - -/****************** USB OTG HS CONFIGURATION **********************************/ -#ifdef USB_OTG_HS_CORE - #define RX_FIFO_HS_SIZE 512 - #define TX0_FIFO_HS_SIZE 64 - #define TX1_FIFO_HS_SIZE 372 - #define TX2_FIFO_HS_SIZE 64 - #define TX3_FIFO_HS_SIZE 0 - #define TX4_FIFO_HS_SIZE 0 - #define TX5_FIFO_HS_SIZE 0 - -// #define USB_OTG_HS_SOF_OUTPUT_ENABLED - - #ifdef USE_ULPI_PHY - #define USB_OTG_ULPI_PHY_ENABLED - #endif - #ifdef USE_EMBEDDED_PHY - #define USB_OTG_EMBEDDED_PHY_ENABLED - /* wakeup is working only when HS core is configured in FS mode */ - #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT - #endif - /* #define USB_OTG_HS_INTERNAL_DMA_ENABLED */ /* Be aware that enabling DMA mode will result in data being sent only by - multiple of 4 packet sizes. This is due to the fact that USB DMA does - not allow sending data from non word-aligned addresses. - For this specific application, it is advised to not enable this option - unless required. */ - #define USB_OTG_HS_DEDICATED_EP1_ENABLED -#endif - -/****************** USB OTG FS CONFIGURATION **********************************/ -#ifdef USB_OTG_FS_CORE - #define RX_FIFO_FS_SIZE 128 - #define TX0_FIFO_FS_SIZE 32 - #define TX1_FIFO_FS_SIZE 128 - #define TX2_FIFO_FS_SIZE 32 - #define TX3_FIFO_FS_SIZE 0 - -// #define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT -// #define USB_OTG_FS_SOF_OUTPUT_ENABLED -#endif - -/****************** USB OTG MISC CONFIGURATION ********************************/ -#define VBUS_SENSING_ENABLED - -/****************** USB OTG MODE CONFIGURATION ********************************/ -//#define USE_HOST_MODE -#define USE_DEVICE_MODE -//#define USE_OTG_MODE - -#ifndef USB_OTG_FS_CORE - #ifndef USB_OTG_HS_CORE - #error "USB_OTG_HS_CORE or USB_OTG_FS_CORE should be defined" - #endif -#endif - -#ifndef USE_DEVICE_MODE - #ifndef USE_HOST_MODE - #error "USE_DEVICE_MODE or USE_HOST_MODE should be defined" - #endif -#endif - -#ifndef USE_USB_OTG_HS - #ifndef USE_USB_OTG_FS - #error "USE_USB_OTG_HS or USE_USB_OTG_FS should be defined" - #endif -#else //USE_USB_OTG_HS - #ifndef USE_ULPI_PHY - #ifndef USE_EMBEDDED_PHY - #error "USE_ULPI_PHY or USE_EMBEDDED_PHY should be defined" - #endif - #endif -#endif - -/****************** C Compilers dependant keywords ****************************/ -/* In HS mode and when the DMA is used, all variables and data structures dealing - with the DMA during the transaction process should be 4-bytes aligned */ -#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED - #if defined (__GNUC__) /* GNU Compiler */ - #define __ALIGN_END __attribute__ ((aligned (4))) - #define __ALIGN_BEGIN - #else - #define __ALIGN_END - #if defined (__CC_ARM) /* ARM Compiler */ - #define __ALIGN_BEGIN __align(4) - #elif defined (__ICCARM__) /* IAR Compiler */ - #define __ALIGN_BEGIN - #elif defined (__TASKING__) /* TASKING Compiler */ - #define __ALIGN_BEGIN __align(4) - #endif /* __CC_ARM */ - #endif /* __GNUC__ */ -#else - #define __ALIGN_BEGIN - #define __ALIGN_END -#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ - -/* __packed keyword used to decrease the data type alignment to 1-byte */ -#if defined (__CC_ARM) /* ARM Compiler */ - #define __packed __packed -#elif defined (__ICCARM__) /* IAR Compiler */ - #define __packed __packed -#elif defined ( __GNUC__ ) /* GNU Compiler */ - #define __packed __attribute__ ((__packed__)) -#elif defined (__TASKING__) /* TASKING Compiler */ - #define __packed __unaligned -#endif /* __CC_ARM */ - -/** - * @} - */ - - -/** @defgroup USB_CONF_Exported_Types - * @{ - */ -/** - * @} - */ - - -/** @defgroup USB_CONF_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_CONF_Exported_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_CONF_Exported_FunctionsPrototype - * @{ - */ -/** - * @} - */ - - -#endif //__USB_CONF__H__ - - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_bulk.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_bulk.c deleted file mode 100644 index 6bd165b6..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_bulk.c +++ /dev/null @@ -1,361 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_bulk.c - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief This file provides the high layer firmware functions to manage a - * USB bulk device. - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_bulk.h" -#include "usbd_desc.h" -#include "usbd_req.h" - - -extern void UsbReceivePipeBulkOUT(uint8_t epnum); -extern void UsbTransmitPipeBulkIN(void); - - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - - -/** @defgroup usbd_bulk - * @brief usbd core module - * @{ - */ - -/** @defgroup usbd_bulk_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup usbd_bulk_Private_Defines - * @{ - */ -/** - * @} - */ - - -/** @defgroup usbd_bulk_Private_Macros - * @{ - */ -/** - * @} - */ - - -/** @defgroup usbd_bulk_Private_FunctionPrototypes - * @{ - */ - -/********************************************* - BULK Device library callbacks - *********************************************/ -static uint8_t usbd_bulk_Init (void *pdev, uint8_t cfgidx); -static uint8_t usbd_bulk_DeInit (void *pdev, uint8_t cfgidx); -static uint8_t usbd_bulk_Setup (void *pdev, USB_SETUP_REQ *req); -static uint8_t usbd_bulk_DataIn (void *pdev, uint8_t epnum); -static uint8_t usbd_bulk_DataOut (void *pdev, uint8_t epnum); -static uint8_t usbd_bulk_SOF (void *pdev); - -/********************************************* - BULK specific management functions - *********************************************/ -static uint8_t *USBD_bulk_GetCfgDesc (uint8_t speed, uint16_t *length); -/** - * @} - */ - - -/** @defgroup usbd_bulk_Private_Variables - * @{ - */ -__ALIGN_BEGIN static volatile uint32_t usbd_bulk_AltSet __ALIGN_END = 0; - -__ALIGN_BEGIN uint8_t USB_Rx_Buffer[BULK_DATA_MAX_PACKET_SIZE] __ALIGN_END ; - - -/* Bulk interface class callbacks structure */ -USBD_Class_cb_TypeDef USBD_bulk_cb = -{ - usbd_bulk_Init, - usbd_bulk_DeInit, - usbd_bulk_Setup, - NULL, - NULL, - usbd_bulk_DataIn, - usbd_bulk_DataOut, - usbd_bulk_SOF, - NULL, - NULL, - USBD_bulk_GetCfgDesc -}; - - -/* USB CDC device Configuration Descriptor */ -__ALIGN_BEGIN uint8_t usbd_bulk_CfgDesc[USB_BULK_CONFIG_DESC_SIZ] __ALIGN_END = -{ - /*Configuration Descriptor*/ - 0x09, /* bLength: Configuration Descriptor size */ - USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */ - USB_BULK_CONFIG_DESC_SIZ, /* wTotalLength:no of returned bytes */ - 0x00, - 0x01, /* bNumInterfaces: 1 interface */ - 0x01, /* bConfigurationValue: Configuration value */ - 0x00, /* iConfiguration: Index of string descriptor describing the configuration */ - 0xC0, /* bmAttributes: self powered */ - 0x32, /* MaxPower 100 mA */ - /*---------------------------------------------------------------------------*/ - /*Interface Descriptor*/ - 0x09, /* bLength: Endpoint Descriptor size */ - USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: */ - 0x00, /* bInterfaceNumber: Number of Interface */ - 0x00, /* bAlternateSetting: Alternate setting */ - 0x02, /* bNumEndpoints: Two endpoints used */ - 0xFF, /* bInterfaceClass: vendor specific */ - 0x00, /* bInterfaceSubClass */ - 0x00, /* bInterfaceProtocol */ - 0x00, /* iInterface: */ - /*Endpoint 1 IN Descriptor*/ - 0x07, /* bLength: Endpoint Descriptor size */ - USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */ - BULK_IN_EP, /* bEndpointAddress: (IN1) */ - 0x02, /* bmAttributes: Bulk */ - LOBYTE(BULK_DATA_MAX_PACKET_SIZE), /* wMaxPacketSize: */ - HIBYTE(BULK_DATA_MAX_PACKET_SIZE), - 0xFF, /* bInterval: ignore for Bulk transfer */ - /*Endpoint 1 OUT Descriptor*/ - 0x07, /* bLength: Endpoint Descriptor size */ - USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */ - BULK_OUT_EP, /* bEndpointAddress: (OUT1) */ - 0x02, /* bmAttributes: Bulk */ - LOBYTE(BULK_DATA_MAX_PACKET_SIZE), /* wMaxPacketSize: */ - HIBYTE(BULK_DATA_MAX_PACKET_SIZE), - 0xFF /* bInterval: ignore for Bulk transfer */ -} ; - - -/** - * @} - */ - -/** @defgroup usbd_bulk_Private_Functions - * @{ - */ - -/** - * @brief usbd_bulk_Init - * Initilaize the Bulk interface - * @param pdev: device instance - * @param cfgidx: Configuration index - * @retval status - */ -static uint8_t usbd_bulk_Init (void *pdev, - uint8_t cfgidx) -{ - /* Open EP IN */ - DCD_EP_Open(pdev, - BULK_IN_EP, - BULK_DATA_IN_PACKET_SIZE, - USB_OTG_EP_BULK); - - /* Open EP OUT */ - DCD_EP_Open(pdev, - BULK_OUT_EP, - BULK_DATA_OUT_PACKET_SIZE, - USB_OTG_EP_BULK); - - - /* Prepare Out endpoint to receive next packet */ - DCD_EP_PrepareRx(pdev, - BULK_OUT_EP, - (uint8_t*)(USB_Rx_Buffer), - BULK_DATA_OUT_PACKET_SIZE); - - return USBD_OK; -} - -/** - * @brief usbd_bulk_DeInit - * DeInitialize the layer - * @param pdev: device instance - * @param cfgidx: Configuration index - * @retval status - */ -static uint8_t usbd_bulk_DeInit (void *pdev, - uint8_t cfgidx) -{ - /* Open EP IN */ - DCD_EP_Close(pdev, BULK_IN_EP); - - /* Open EP OUT */ - DCD_EP_Close(pdev, BULK_OUT_EP); - - return USBD_OK; -} - -/** - * @brief usbd_bulk_Setup - * Handle the bulk specific requests - * @param pdev: instance - * @param req: usb requests - * @retval status - */ -static uint8_t usbd_bulk_Setup (void *pdev, - USB_SETUP_REQ *req) -{ - uint16_t len=USB_BULK_DESC_SIZ; - uint8_t *pbuf=usbd_bulk_CfgDesc + 9; - - switch (req->bmRequest & USB_REQ_TYPE_MASK) - { - /* Standard Requests -------------------------------*/ - case USB_REQ_TYPE_STANDARD: - switch (req->bRequest) - { - case USB_REQ_GET_DESCRIPTOR: - if( (req->wValue >> 8) == BULK_DESCRIPTOR_TYPE) - { - pbuf = usbd_bulk_CfgDesc + 9 + (9 * USBD_ITF_MAX_NUM); - len = MIN(USB_BULK_DESC_SIZ , req->wLength); - } - - USBD_CtlSendData (pdev, - pbuf, - len); - break; - - case USB_REQ_GET_INTERFACE : - USBD_CtlSendData (pdev, - (uint8_t *)&usbd_bulk_AltSet, - 1); - break; - - case USB_REQ_SET_INTERFACE : - if ((uint8_t)(req->wValue) < USBD_ITF_MAX_NUM) - { - usbd_bulk_AltSet = (uint8_t)(req->wValue); - } - else - { - /* Call the error management function (command will be nacked */ - USBD_CtlError (pdev, req); - } - break; - } - } - return USBD_OK; -} - - -/** - * @brief usbd_bulk_DataIn - * Data sent on non-control IN endpoint - * @param pdev: device instance - * @param epnum: endpoint number - * @retval status - */ -static uint8_t usbd_bulk_DataIn (void *pdev, uint8_t epnum) -{ - /* endpoint finished the previous transmission so see if more data is left */ - UsbTransmitPipeBulkIN(); - return USBD_OK; -} - -/** - * @brief usbd_bulk_DataOut - * Data received on non-control Out endpoint - * @param pdev: device instance - * @param epnum: endpoint number - * @retval status - */ -static uint8_t usbd_bulk_DataOut (void *pdev, uint8_t epnum) -{ - /* read the data from the bulk OUT pipe */ - UsbReceivePipeBulkOUT(epnum); - return USBD_OK; -} - - -/** - * @brief usbd_buld_get_rx_buffer_ptr - * Get pointer to the USB rx buffer - * @retval Buffer pointer - */ -uint8_t *usbd_bulk_get_rx_buffer_ptr(void) -{ - return USB_Rx_Buffer; -} - - -/** - * @brief usbd_bulk_SOF - * Start Of Frame event management - * @param pdev: instance - * @param epnum: endpoint number - * @retval status - */ -static uint8_t usbd_bulk_SOF (void *pdev) -{ - if (((USB_OTG_CORE_HANDLE*)pdev)->dev.device_status == USB_OTG_CONFIGURED) - { - /* Check the data to be sent through IN pipe */ - UsbTransmitPipeBulkIN(); - } - return USBD_OK; -} - - -/** - * @brief USBD_bulk_GetCfgDesc - * Return configuration descriptor - * @param speed : current device speed - * @param length : pointer data length - * @retval pointer to descriptor buffer - */ -static uint8_t *USBD_bulk_GetCfgDesc (uint8_t speed, uint16_t *length) -{ - *length = sizeof (usbd_bulk_CfgDesc); - return usbd_bulk_CfgDesc; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_bulk.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_bulk.h deleted file mode 100644 index 7c17ac87..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_bulk.h +++ /dev/null @@ -1,102 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_bulk.h - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief header file for the usbd_bulk.c file. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ - -#ifndef __USB_BULK_H_ -#define __USB_BULK_H_ - -#include "usbd_ioreq.h" - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - -/** @defgroup usbd_cdc - * @brief This file is the Header file for USBD_cdc.c - * @{ - */ - - -/** @defgroup usbd_bulk_Exported_Defines - * @{ - */ -#define USB_BULK_CONFIG_DESC_SIZ (32) -#define USB_BULK_DESC_SIZ (32-9) - -#define BULK_DESCRIPTOR_TYPE 0x21 - - -#define USB_DEVICE_DESCRIPTOR_TYPE 0x01 -#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 -#define USB_STRING_DESCRIPTOR_TYPE 0x03 -#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04 -#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 - -#define STANDARD_ENDPOINT_DESC_SIZE 0x09 - -#define BULK_DATA_IN_PACKET_SIZE BULK_DATA_MAX_PACKET_SIZE -#define BULK_DATA_OUT_PACKET_SIZE BULK_DATA_MAX_PACKET_SIZE - - - - -/** @defgroup USBD_CORE_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup USBD_CORE_Exported_Variables - * @{ - */ - -extern USBD_Class_cb_TypeDef USBD_bulk_cb; -/** - * @} - */ - -/** @defgroup USB_CORE_Exported_Functions - * @{ - */ -uint8_t *usbd_bulk_get_rx_buffer_ptr(void); -/** - * @} - */ - -#endif // __USB_CDC_CORE_H_ -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_conf.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_conf.h deleted file mode 100644 index be7b1bae..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_conf.h +++ /dev/null @@ -1,91 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_conf.h - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief USB Device configuration file - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USBD_CONF__H__ -#define __USBD_CONF__H__ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_conf.h" - -/** @defgroup USB_CONF_Exported_Defines - * @{ - */ -#define USBD_CFG_MAX_NUM 1 -#define USBD_ITF_MAX_NUM 1 - -#define USBD_SELF_POWERED - -#define USB_MAX_STR_DESC_SIZ 255 - -/** @defgroup USB_VCP_Class_Layer_Parameter - * @{ - */ -#define BULK_IN_EP 0x81 /* EP1 for data IN */ -#define BULK_OUT_EP 0x01 /* EP1 for data OUT */ - -/* Bulk endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */ -#define BULK_DATA_MAX_PACKET_SIZE 64 /* Endpoint IN & OUT Packet size */ - -/** - * @} - */ - -/** @defgroup USB_CONF_Exported_Types - * @{ - */ -/** - * @} - */ - - -/** @defgroup USB_CONF_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_CONF_Exported_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup USB_CONF_Exported_FunctionsPrototype - * @{ - */ -/** - * @} - */ - - -#endif //__USBD_CONF__H__ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_desc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_desc.c deleted file mode 100644 index 1a7521b8..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_desc.c +++ /dev/null @@ -1,271 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_desc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief This file provides the USBD descriptors and string formating method. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_core.h" -#include "usbd_desc.h" -#include "usbd_req.h" -#include "usbd_conf.h" -#include "usb_regs.h" - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - - -/** @defgroup USBD_DESC - * @brief USBD descriptors module - * @{ - */ - -/** @defgroup USBD_DESC_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_DESC_Private_Defines - * @{ - */ -#define USBD_VID 0x1d50 - -#define USBD_PID 0x60ac - -/** @defgroup USB_String_Descriptors - * @{ - */ -#define USBD_LANGID_STRING 0x409 -#define USBD_MANUFACTURER_STRING "OpenBLT User" - -#define USBD_PRODUCT_FS_STRING "WinUSB Bulk Device" -#define USBD_SERIALNUMBER_FS_STRING "00000000050C" - -#define USBD_CONFIGURATION_FS_STRING "Default" -#define USBD_INTERFACE_FS_STRING "WinUSB Bulk Interface" -/** - * @} - */ - - -/** @defgroup USBD_DESC_Private_Macros - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_DESC_Private_Variables - * @{ - */ - -USBD_DEVICE USR_desc = -{ - USBD_USR_DeviceDescriptor, - USBD_USR_LangIDStrDescriptor, - USBD_USR_ManufacturerStrDescriptor, - USBD_USR_ProductStrDescriptor, - USBD_USR_SerialStrDescriptor, - USBD_USR_ConfigStrDescriptor, - USBD_USR_InterfaceStrDescriptor, - -}; - -/* USB Standard Device Descriptor */ -__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END = - { - 0x12, /*bLength */ - USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/ - 0x10, /*bcdUSB = 1.1 */ - 0x01, - 0x00, /*bDeviceClass*/ - 0x00, /*bDeviceSubClass*/ - 0x00, /*bDeviceProtocol*/ - USB_OTG_MAX_EP0_SIZE, /*bMaxPacketSize*/ - LOBYTE(USBD_VID), /*idVendor*/ - HIBYTE(USBD_VID), /*idVendor*/ - LOBYTE(USBD_PID), /*idVendor*/ - HIBYTE(USBD_PID), /*idVendor*/ - 0x00, /*bcdDevice rel. 1.00*/ - 0x01, - USBD_IDX_MFC_STR, /*Index of manufacturer string*/ - USBD_IDX_PRODUCT_STR, /*Index of product string*/ - USBD_IDX_SERIAL_STR, /*Index of serial number string*/ - USBD_CFG_MAX_NUM /*bNumConfigurations*/ - } ; /* USB_DeviceDescriptor */ - -/* USB Standard Device Descriptor */ -__ALIGN_BEGIN uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END = -{ - USB_LEN_DEV_QUALIFIER_DESC, - USB_DESC_TYPE_DEVICE_QUALIFIER, - 0x10, - 0x01, - 0x00, - 0x00, - 0x00, - 0x40, - 0x01, - 0x00, -}; - -/* USB Standard Device Descriptor */ -__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID] __ALIGN_END = -{ - USB_SIZ_STRING_LANGID, - USB_DESC_TYPE_STRING, - LOBYTE(USBD_LANGID_STRING), - HIBYTE(USBD_LANGID_STRING), -}; -/** - * @} - */ - - -/** @defgroup USBD_DESC_Private_FunctionPrototypes - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_DESC_Private_Functions - * @{ - */ - -/** -* @brief USBD_USR_DeviceDescriptor -* return the device descriptor -* @param speed : current device speed -* @param length : pointer to data length variable -* @retval pointer to descriptor buffer -*/ -uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length) -{ - *length = sizeof(USBD_DeviceDesc); - return USBD_DeviceDesc; -} - -/** -* @brief USBD_USR_LangIDStrDescriptor -* return the LangID string descriptor -* @param speed : current device speed -* @param length : pointer to data length variable -* @retval pointer to descriptor buffer -*/ -uint8_t * USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length) -{ - *length = sizeof(USBD_LangIDDesc); - return USBD_LangIDDesc; -} - - -/** -* @brief USBD_USR_ProductStrDescriptor -* return the product string descriptor -* @param speed : current device speed -* @param length : pointer to data length variable -* @retval pointer to descriptor buffer -*/ -uint8_t * USBD_USR_ProductStrDescriptor( uint8_t speed , uint16_t *length) -{ - USBD_GetString ((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length); - return USBD_StrDesc; -} - -/** -* @brief USBD_USR_ManufacturerStrDescriptor -* return the manufacturer string descriptor -* @param speed : current device speed -* @param length : pointer to data length variable -* @retval pointer to descriptor buffer -*/ -uint8_t * USBD_USR_ManufacturerStrDescriptor( uint8_t speed , uint16_t *length) -{ - USBD_GetString ((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length); - return USBD_StrDesc; -} - -/** -* @brief USBD_USR_SerialStrDescriptor -* return the serial number string descriptor -* @param speed : current device speed -* @param length : pointer to data length variable -* @retval pointer to descriptor buffer -*/ -uint8_t * USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length) -{ - USBD_GetString ((uint8_t *)USBD_SERIALNUMBER_FS_STRING, USBD_StrDesc, length); - return USBD_StrDesc; -} - -/** -* @brief USBD_USR_ConfigStrDescriptor -* return the configuration string descriptor -* @param speed : current device speed -* @param length : pointer to data length variable -* @retval pointer to descriptor buffer -*/ -uint8_t * USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length) -{ - USBD_GetString ((uint8_t *)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length); - return USBD_StrDesc; -} - - -/** -* @brief USBD_USR_InterfaceStrDescriptor -* return the interface string descriptor -* @param speed : current device speed -* @param length : pointer to data length variable -* @retval pointer to descriptor buffer -*/ -uint8_t * USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length) -{ - USBD_GetString ((uint8_t *)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length); - return USBD_StrDesc; -} - -/** - * @} - */ - - -/** - * @} - */ - - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_desc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_desc.h deleted file mode 100644 index e28e14ae..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_desc.h +++ /dev/null @@ -1,120 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_desc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief header file for the usbd_desc.c file - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ - -#ifndef __USB_DESC_H -#define __USB_DESC_H - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_def.h" - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY - * @{ - */ - -/** @defgroup USB_DESC - * @brief general defines for the usb device library file - * @{ - */ - -/** @defgroup USB_DESC_Exported_Defines - * @{ - */ -#define USB_DEVICE_DESCRIPTOR_TYPE 0x01 -#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 -#define USB_STRING_DESCRIPTOR_TYPE 0x03 -#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04 -#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 -#define USB_SIZ_DEVICE_DESC 18 -#define USB_SIZ_STRING_LANGID 4 - -/** - * @} - */ - - -/** @defgroup USBD_DESC_Exported_TypesDefinitions - * @{ - */ -/** - * @} - */ - - - -/** @defgroup USBD_DESC_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup USBD_DESC_Exported_Variables - * @{ - */ -extern uint8_t USBD_DeviceDesc [USB_SIZ_DEVICE_DESC]; -extern uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ]; -extern uint8_t USBD_OtherSpeedCfgDesc[USB_LEN_CFG_DESC]; -extern uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC]; -extern uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID]; -extern USBD_DEVICE USR_desc; -/** - * @} - */ - -/** @defgroup USBD_DESC_Exported_FunctionsPrototype - * @{ - */ - - -uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length); -uint8_t * USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length); -uint8_t * USBD_USR_ManufacturerStrDescriptor ( uint8_t speed , uint16_t *length); -uint8_t * USBD_USR_ProductStrDescriptor ( uint8_t speed , uint16_t *length); -uint8_t * USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length); -uint8_t * USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length); -uint8_t * USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length); - -#ifdef USB_SUPPORT_USER_STRING_DESC -uint8_t * USBD_USR_USRStringDesc (uint8_t speed, uint8_t idx , uint16_t *length); -#endif /* USB_SUPPORT_USER_STRING_DESC */ - -/** - * @} - */ - -#endif /* __USBD_DESC_H */ - -/** - * @} - */ - -/** -* @} -*/ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_usr.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_usr.c deleted file mode 100644 index ef9aefc8..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/usbd_usr.c +++ /dev/null @@ -1,206 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_usr.c - * @author MCD Application Team - * @version V1.1.0 - * @date 19-March-2012 - * @brief This file includes the user application layer - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2012 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_usr.h" -#include "usbd_ioreq.h" -#include "boot.h" /* bootloader generic header */ -#include "usb.h" - -/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY -* @{ -*/ - -/** @defgroup USBD_USR -* @brief This file includes the user application layer -* @{ -*/ - -/** @defgroup USBD_USR_Private_TypesDefinitions -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USBD_USR_Private_Defines -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USBD_USR_Private_Macros -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USBD_USR_Private_Variables -* @{ -*/ - -USBD_Usr_cb_TypeDef USR_cb = -{ - USBD_USR_Init, - USBD_USR_DeviceReset, - USBD_USR_DeviceConfigured, - USBD_USR_DeviceSuspended, - USBD_USR_DeviceResumed, - USBD_USR_DeviceConnected, - USBD_USR_DeviceDisconnected, -}; - -/** -* @} -*/ - -/** @defgroup USBD_USR_Private_Constants -* @{ -*/ - -/** -* @} -*/ - - - -/** @defgroup USBD_USR_Private_FunctionPrototypes -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USBD_USR_Private_Functions -* @{ -*/ - -/** -* @brief USBD_USR_Init -* Displays the message on LCD for host lib initialization -* @param None -* @retval None -*/ -void USBD_USR_Init(void) -{ -} - -/** -* @brief USBD_USR_DeviceReset -* Displays the message on LCD on device Reset Event -* @param speed : device speed -* @retval None -*/ -void USBD_USR_DeviceReset(uint8_t speed ) -{ - switch (speed) - { - case USB_OTG_SPEED_HIGH: - break; - - case USB_OTG_SPEED_FULL: - break; - default: - break; - } -} - - -/** -* @brief USBD_USR_DeviceConfigured -* Displays the message on LCD on device configuration Event -* @param None -* @retval Staus -*/ -void USBD_USR_DeviceConfigured (void) -{ -} - -/** -* @brief USBD_USR_DeviceSuspended -* Displays the message on LCD on device suspend Event -* @param None -* @retval None -*/ -void USBD_USR_DeviceSuspended(void) -{ - /* Users can do their application actions here for the USB-Reset */ - UsbEnterLowPowerModeHook(); -} - - -/** -* @brief USBD_USR_DeviceResumed -* Displays the message on LCD on device resume Event -* @param None -* @retval None -*/ -void USBD_USR_DeviceResumed(void) -{ - /* Users can do their application actions here for the USB-Reset */ - UsbLeaveLowPowerModeHook(); -} - - -/** -* @brief USBD_USR_DeviceConnected -* Displays the message on LCD on device connection Event -* @param None -* @retval Staus -*/ -void USBD_USR_DeviceConnected (void) -{ - /* cable plugged-in */ - UsbConnectHook(BLT_TRUE); -} - -/** -* @brief USBD_USR_DeviceDisonnected -* Displays the message on LCD on device disconnection Event -* @param None -* @retval Staus -*/ -void USBD_USR_DeviceDisconnected (void) -{ - /* Disable the Pull-Up */ - UsbConnectHook(BLT_FALSE); -} -/** -* @} -*/ - -/** -* @} -*/ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.elf b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.elf deleted file mode 100644 index f73ec3bcf0813886feb6dbf08db8c375852aa8d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152025 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≷Q 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 I=r#5K0zQ4^3IG5A diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.map b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.map deleted file mode 100644 index 6b8440c1..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.map +++ /dev/null @@ -1,2989 +0,0 @@ -Archive member included because of file (symbol) - -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - THUMB Debug/../../obj/netdev.o (memcpy) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - (__do_debug_operation_mempoll) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) (__debug_io_lock) - -Discarded input sections - - .text 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f4xx.o - .data 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f4xx.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f4xx.o - .text.SystemCoreClockUpdate - 0x00000000 0xe0 THUMB Debug/../../obj/system_stm32f4xx.o - .data.AHBPrescTable - 0x00000000 0x10 THUMB Debug/../../obj/system_stm32f4xx.o - .text 0x00000000 0x0 THUMB Debug/../../obj/misc.o - .data 0x00000000 0x0 THUMB Debug/../../obj/misc.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/misc.o - .text.NVIC_PriorityGroupConfig - 0x00000000 0x14 THUMB Debug/../../obj/misc.o - .text.NVIC_Init - 0x00000000 0x8c THUMB Debug/../../obj/misc.o - .text.NVIC_SetVectorTable - 0x00000000 0x18 THUMB Debug/../../obj/misc.o - .text.NVIC_SystemLPConfig - 0x00000000 0x24 THUMB Debug/../../obj/misc.o - .text.SysTick_CLKSourceConfig - 0x00000000 0x1c THUMB Debug/../../obj/misc.o - .debug_frame 0x00000000 0x6c THUMB Debug/../../obj/misc.o - .debug_info 0x00000000 0x58c THUMB Debug/../../obj/misc.o - .debug_abbrev 0x00000000 0x149 THUMB Debug/../../obj/misc.o - .debug_loc 0x00000000 0x1d0 THUMB Debug/../../obj/misc.o - .debug_aranges - 0x00000000 0x40 THUMB Debug/../../obj/misc.o - .debug_ranges 0x00000000 0x30 THUMB Debug/../../obj/misc.o - .debug_line 0x00000000 0x26a THUMB Debug/../../obj/misc.o - .debug_str 0x00000000 0x41b THUMB Debug/../../obj/misc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/misc.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/misc.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_adc.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_adc.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_DeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_Init - 0x00000000 0x54 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_StructInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_CommonInit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_CommonStructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_Cmd 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_AnalogWatchdogCmd - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_AnalogWatchdogThresholdsConfig - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_AnalogWatchdogSingleChannelConfig - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_TempSensorVrefintCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_VBATCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_RegularChannelConfig - 0x00000000 0xb0 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_SoftwareStartConv - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_GetSoftwareStartConvStatus - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_EOCOnEachRegularChannelCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_ContinuousModeCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_DiscModeChannelCountConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_DiscModeCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_GetConversionValue - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_GetMultiModeConversionValue - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_DMACmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_DMARequestAfterLastTransferCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_MultiModeDMARequestAfterLastTransferCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_InjectedChannelConfig - 0x00000000 0x70 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_InjectedSequencerLengthConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_SetInjectedOffset - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_ExternalTrigInjectedConvConfig - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_ExternalTrigInjectedConvEdgeConfig - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_SoftwareStartInjectedConv - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_GetSoftwareStartInjectedConvCmdStatus - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_AutoInjectedConvCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_InjectedDiscModeCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_GetInjectedConversionValue - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_ITConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_GetFlagStatus - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_ClearFlag - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_GetITStatus - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_ClearITPendingBit - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_frame 0x00000000 0x2c4 THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_info 0x00000000 0xd5a THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_abbrev 0x00000000 0x207 THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_loc 0x00000000 0xdb9 THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_aranges - 0x00000000 0x148 THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_ranges 0x00000000 0x138 THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_line 0x00000000 0x55f THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_str 0x00000000 0x85d THUMB Debug/../../obj/stm32f4xx_adc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_adc.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_adc.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_can.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_can.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CheckITStatus - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_SlaveStartBank - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_DBGFreeze - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_TTComModeCmd - 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_Transmit - 0x00000000 0xe8 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_TransmitStatus - 0x00000000 0x90 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_CancelTransmit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_FIFORelease - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_OperatingModeRequest - 0x00000000 0xf8 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_Sleep - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_WakeUp - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_GetLastErrorCode - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_GetReceiveErrorCounter - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_GetLSBTransmitErrorCounter - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_ITConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_GetFlagStatus - 0x00000000 0x6c THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_ClearFlag - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_GetITStatus - 0x00000000 0x114 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_ClearITPendingBit - 0x00000000 0xbc THUMB Debug/../../obj/stm32f4xx_can.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_crc.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_crc.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_crc.o - .text.CRC_ResetDR - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_crc.o - .text.CRC_CalcCRC - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_crc.o - .text.CRC_CalcBlockCRC - 0x00000000 0x5c THUMB Debug/../../obj/stm32f4xx_crc.o - .text.CRC_GetCRC - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_crc.o - .text.CRC_SetIDRegister - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_crc.o - .text.CRC_GetIDRegister - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_crc.o - .debug_frame 0x00000000 0x7c THUMB Debug/../../obj/stm32f4xx_crc.o - .debug_info 0x00000000 0x1fe THUMB Debug/../../obj/stm32f4xx_crc.o - .debug_abbrev 0x00000000 0x138 THUMB Debug/../../obj/stm32f4xx_crc.o - .debug_loc 0x00000000 0xad THUMB Debug/../../obj/stm32f4xx_crc.o - .debug_aranges - 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_crc.o - .debug_ranges 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_crc.o - .debug_line 0x00000000 0x23f THUMB Debug/../../obj/stm32f4xx_crc.o - .debug_str 0x00000000 0x28d THUMB Debug/../../obj/stm32f4xx_crc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_crc.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_crc.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_DeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_Init - 0x00000000 0x70 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_StructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_KeyInit - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_KeyStructInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_IVInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_IVStructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_PhaseConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_FIFOFlush - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_Cmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_DataIn - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_DataOut - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_SaveContext - 0x00000000 0x108 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_RestoreContext - 0x00000000 0x90 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_DMACmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_ITConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_GetITStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_GetCmdStatus - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_GetFlagStatus - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_frame 0x00000000 0x160 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_info 0x00000000 0x970 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_abbrev 0x00000000 0x204 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_loc 0x00000000 0x40c THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_aranges - 0x00000000 0xb0 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_ranges 0x00000000 0xa0 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_line 0x00000000 0x400 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_str 0x00000000 0x709 THUMB Debug/../../obj/stm32f4xx_cryp.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_cryp.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text.CRYP_AES_ECB - 0x00000000 0x1f0 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text.CRYP_AES_CBC - 0x00000000 0x214 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text.CRYP_AES_CTR - 0x00000000 0x1bc THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text.CRYP_AES_GCM - 0x00000000 0x530 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text.CRYP_AES_CCM - 0x00000000 0x810 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_frame 0x00000000 0x100 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_info 0x00000000 0x2d5c THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_abbrev 0x00000000 0x2b0 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_loc 0x00000000 0x32b9 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_aranges - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_ranges 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_line 0x00000000 0xc62 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_str 0x00000000 0x5bc THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .text.CRYP_DES_ECB - 0x00000000 0xec THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .text.CRYP_DES_CBC - 0x00000000 0x104 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_info 0x00000000 0x7c1 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_abbrev 0x00000000 0x1f7 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_loc 0x00000000 0x6b4 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_aranges - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_ranges 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_line 0x00000000 0x30e THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_str 0x00000000 0x4bb THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .text.CRYP_TDES_ECB - 0x00000000 0x104 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .text.CRYP_TDES_CBC - 0x00000000 0x11c THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_info 0x00000000 0x942 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_abbrev 0x00000000 0x208 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_loc 0x00000000 0x91c THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_aranges - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_ranges 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_line 0x00000000 0x36f THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_str 0x00000000 0x4c1 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dac.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dac.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_DeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_Init - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_StructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_Cmd 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_SoftwareTriggerCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_DualSoftwareTriggerCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_WaveGenerationCmd - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_SetChannel1Data - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_SetChannel2Data - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_SetDualChannelData - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_GetDataOutputValue - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_DMACmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_ITConfig - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_GetFlagStatus - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_ClearFlag - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_GetITStatus - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_ClearITPendingBit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_frame 0x00000000 0x150 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_info 0x00000000 0x6dd THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_abbrev 0x00000000 0x207 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_loc 0x00000000 0x685 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_aranges - 0x00000000 0xa0 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_ranges 0x00000000 0x90 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_line 0x00000000 0x37e THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_str 0x00000000 0x4ac THUMB Debug/../../obj/stm32f4xx_dac.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_dac.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_dac.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .text.DBGMCU_GetREVID - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .text.DBGMCU_GetDEVID - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .text.DBGMCU_Config - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .text.DBGMCU_APB1PeriphConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .text.DBGMCU_APB2PeriphConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_frame 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_info 0x00000000 0x1e4 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_abbrev 0x00000000 0xd7 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_loc 0x00000000 0x132 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_aranges - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_ranges 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_line 0x00000000 0x224 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_str 0x00000000 0x297 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_DeInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_Init - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_StructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_CROPConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_CROPCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_SetEmbeddedSynchroCodes - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_JPEGCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_Cmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_CaptureCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_ReadData - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_ITConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_GetFlagStatus - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_GetITStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_ClearITPendingBit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_frame 0x00000000 0x10c THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_info 0x00000000 0x59b THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_abbrev 0x00000000 0x1b8 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_loc 0x00000000 0x2d9 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_aranges - 0x00000000 0x90 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_ranges 0x00000000 0x80 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_line 0x00000000 0x345 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_str 0x00000000 0x51b THUMB Debug/../../obj/stm32f4xx_dcmi.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_dcmi.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dma.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dma.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_DeInit - 0x00000000 0x1f4 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_Init - 0x00000000 0x58 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_StructInit - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_Cmd 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_PeriphIncOffsetSizeConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_FlowControllerConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_SetCurrDataCounter - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_GetCurrDataCounter - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_DoubleBufferModeConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_DoubleBufferModeCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_MemoryTargetConfig - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_GetCurrentMemoryTarget - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_GetCmdStatus - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_GetFIFOStatus - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_GetFlagStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_ClearFlag - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_ITConfig - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_GetITStatus - 0x00000000 0x64 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_ClearITPendingBit - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_frame 0x00000000 0x17c THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_info 0x00000000 0x7a7 THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_abbrev 0x00000000 0x1a2 THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_loc 0x00000000 0x695 THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_aranges - 0x00000000 0xb0 THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_ranges 0x00000000 0xa0 THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_line 0x00000000 0x3e8 THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_str 0x00000000 0x58e THUMB Debug/../../obj/stm32f4xx_dma.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_dma.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_dma.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_exti.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_exti.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_exti.o - .text.EXTI_DeInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_exti.o - .text.EXTI_Init - 0x00000000 0x98 THUMB Debug/../../obj/stm32f4xx_exti.o - .text.EXTI_StructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_exti.o - .text.EXTI_GenerateSWInterrupt - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_exti.o - .text.EXTI_GetFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_exti.o - .text.EXTI_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_exti.o - .text.EXTI_GetITStatus - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_exti.o - .text.EXTI_ClearITPendingBit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_exti.o - .debug_frame 0x00000000 0x9c THUMB Debug/../../obj/stm32f4xx_exti.o - .debug_info 0x00000000 0x367 THUMB Debug/../../obj/stm32f4xx_exti.o - .debug_abbrev 0x00000000 0x1d6 THUMB Debug/../../obj/stm32f4xx_exti.o - .debug_loc 0x00000000 0x264 THUMB Debug/../../obj/stm32f4xx_exti.o - .debug_aranges - 0x00000000 0x58 THUMB Debug/../../obj/stm32f4xx_exti.o - .debug_ranges 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_exti.o - .debug_line 0x00000000 0x2c0 THUMB Debug/../../obj/stm32f4xx_exti.o - .debug_str 0x00000000 0x3b0 THUMB Debug/../../obj/stm32f4xx_exti.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_exti.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_exti.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_flash.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_flash.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_SetLatency - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_PrefetchBufferCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_InstructionCacheCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_DataCacheCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_InstructionCacheReset - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_DataCacheReset - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_Unlock - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_Lock - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_Unlock - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_Lock - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_BORConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_GetUser - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_GetWRP - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_GetWRP1 - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_GetRDP - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_GetBOR - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_ITConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_GetFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_GetStatus - 0x00000000 0x5c THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_WaitForLastOperation - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_Launch - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_UserConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_RDPConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_WRP1Config - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_WRPConfig - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_ProgramByte - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_ProgramHalfWord - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_ProgramWord - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_ProgramDoubleWord - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_EraseAllSectors - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_EraseSector - 0x00000000 0x70 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_frame 0x00000000 0x2c8 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_info 0x00000000 0x8a0 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_abbrev 0x00000000 0x1a9 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_loc 0x00000000 0x83a THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_aranges - 0x00000000 0x118 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_ranges 0x00000000 0x108 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_line 0x00000000 0x4a1 THUMB Debug/../../obj/stm32f4xx_flash.o - .debug_str 0x00000000 0x5f5 THUMB Debug/../../obj/stm32f4xx_flash.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_flash.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_flash.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NORSRAMDeInit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NORSRAMInit - 0x00000000 0xd4 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NORSRAMStructInit - 0x00000000 0x70 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NORSRAMCmd - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDDeInit - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDInit - 0x00000000 0x6c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDStructInit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDECCCmd - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_GetECC - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_PCCARDDeInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_PCCARDInit - 0x00000000 0x70 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_PCCARDStructInit - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_PCCARDCmd - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_ITConfig - 0x00000000 0x5c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_GetFlagStatus - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_ClearFlag - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_GetITStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_ClearITPendingBit - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_frame 0x00000000 0x170 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_info 0x00000000 0x9b9 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_abbrev 0x00000000 0x1ac THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_loc 0x00000000 0x6b7 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_aranges - 0x00000000 0xb0 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_ranges 0x00000000 0xa0 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_line 0x00000000 0x443 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_str 0x00000000 0x7d6 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_fsmc.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_gpio.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_gpio.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_DeInit - 0x00000000 0x158 THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_StructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_PinLockConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_ReadInputDataBit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_ReadInputData - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_ReadOutputDataBit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_ReadOutputData - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_WriteBit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_Write - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_ToggleBits - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_gpio.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_hash.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_hash.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_DeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_Init - 0x00000000 0x58 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_StructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_Reset - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_SetLastWordValidBitsNbr - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_DataIn - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_GetInFIFOWordsNbr - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_GetDigest - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_StartDigest - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_SaveContext - 0x00000000 0x54 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_RestoreContext - 0x00000000 0x5c THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_AutoStartDigest - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_DMACmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_ITConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_GetFlagStatus - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_ClearFlag - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_GetITStatus - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_ClearITPendingBit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_frame 0x00000000 0x154 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_info 0x00000000 0x633 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_abbrev 0x00000000 0x245 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_loc 0x00000000 0x2f2 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_aranges - 0x00000000 0xa8 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_ranges 0x00000000 0x98 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_line 0x00000000 0x3a6 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_str 0x00000000 0x4b4 THUMB Debug/../../obj/stm32f4xx_hash.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_hash.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_hash.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .text.HASH_MD5 - 0x00000000 0xe4 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .text.HMAC_MD5 - 0x00000000 0x234 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_info 0x00000000 0x718 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_abbrev 0x00000000 0x1ed THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_loc 0x00000000 0x689 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_aranges - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_ranges 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_line 0x00000000 0x390 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_str 0x00000000 0x3b1 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .text.HASH_SHA1 - 0x00000000 0xe4 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .text.HMAC_SHA1 - 0x00000000 0x234 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_info 0x00000000 0x779 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_abbrev 0x00000000 0x1ed THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_loc 0x00000000 0x715 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_aranges - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_ranges 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_line 0x00000000 0x3a9 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_str 0x00000000 0x3b6 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_i2c.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_i2c.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_DeInit - 0x00000000 0x74 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_Init - 0x00000000 0x100 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_StructInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_Cmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_AnalogFilterCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_DigitalFilterConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GenerateSTART - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GenerateSTOP - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_Send7bitAddress - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_AcknowledgeConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_OwnAddress2Config - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_DualAddressCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GeneralCallCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_SoftwareResetCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_StretchClockCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_FastModeDutyCycleConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_NACKPositionConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_SMBusAlertConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ARPCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_SendData - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ReceiveData - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_TransmitPEC - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_PECPositionConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_CalculatePEC - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GetPEC - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_DMACmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_DMALastTransferCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ReadRegister - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ITConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_CheckEvent - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GetLastEvent - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GetFlagStatus - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GetITStatus - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ClearITPendingBit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_frame 0x00000000 0x274 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_info 0x00000000 0xd25 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_abbrev 0x00000000 0x1d5 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_loc 0x00000000 0xca5 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_aranges - 0x00000000 0x130 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_ranges 0x00000000 0x120 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_line 0x00000000 0x507 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_str 0x00000000 0x72a THUMB Debug/../../obj/stm32f4xx_i2c.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_i2c.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .text.IWDG_WriteAccessCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_iwdg.o - .text.IWDG_SetPrescaler - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_iwdg.o - .text.IWDG_SetReload - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_iwdg.o - .text.IWDG_ReloadCounter - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .text.IWDG_Enable - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .text.IWDG_GetFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .debug_frame 0x00000000 0x70 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .debug_info 0x00000000 0x1f9 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .debug_abbrev 0x00000000 0x109 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .debug_loc 0x00000000 0x62 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .debug_aranges - 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .debug_ranges 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .debug_line 0x00000000 0x22f THUMB Debug/../../obj/stm32f4xx_iwdg.o - .debug_str 0x00000000 0x2ae THUMB Debug/../../obj/stm32f4xx_iwdg.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_iwdg.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_pwr.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_pwr.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_DeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_BackupAccessCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_PVDLevelConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_PVDCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_WakeUpPinCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_BackupRegulatorCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_MainRegulatorModeConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_FlashPowerDownCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_EnterSTOPMode - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_EnterSTANDBYMode - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_GetFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_pwr.o - .text.PWR_ClearFlag - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_frame 0x00000000 0xdc THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_info 0x00000000 0x582 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_abbrev 0x00000000 0x1d4 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_loc 0x00000000 0x1d0 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_aranges - 0x00000000 0x78 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_ranges 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_line 0x00000000 0x311 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_str 0x00000000 0x3e1 THUMB Debug/../../obj/stm32f4xx_pwr.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_pwr.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_pwr.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_rcc.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_rcc.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_DeInit - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_HSEConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AdjustHSICalibrationValue - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_HSICmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_LSEConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_LSICmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_PLLConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_PLLCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_PLLI2SConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_PLLI2SCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_ClockSecuritySystemCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_MCO1Config - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_MCO2Config - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_SYSCLKConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_GetSYSCLKSource - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_HCLKConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_PCLK1Config - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_PCLK2Config - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_RTCCLKConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_RTCCLKCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_BackupResetCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_I2SCLKConfig - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_TIMCLKPresConfig - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB2PeriphClockCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB3PeriphClockCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB2PeriphResetCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB3PeriphResetCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_APB2PeriphResetCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB1PeriphClockLPModeCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB2PeriphClockLPModeCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB3PeriphClockLPModeCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_APB1PeriphClockLPModeCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_APB2PeriphClockLPModeCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_ITConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_GetFlagStatus - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_WaitForHSEStartUp - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_ClearFlag - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_GetITStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_ClearITPendingBit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_rng.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_rng.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_DeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_Cmd 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_GetRandomNumber - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_ITConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_GetFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_ClearFlag - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_GetITStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_ClearITPendingBit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_frame 0x00000000 0x9c THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_info 0x00000000 0x2d2 THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_abbrev 0x00000000 0x17b THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_loc 0x00000000 0x164 THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_aranges - 0x00000000 0x58 THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_ranges 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_line 0x00000000 0x2a1 THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_str 0x00000000 0x2dd THUMB Debug/../../obj/stm32f4xx_rng.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_rng.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_rng.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_rtc.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_rtc.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ByteToBcd2 - 0x00000000 0x6c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_Bcd2ToByte - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_StructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WriteProtectionCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_EnterInitMode - 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ExitInitMode - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_Init - 0x00000000 0x64 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WaitForSynchro - 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_DeInit - 0x00000000 0xd0 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_RefClockCmd - 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_BypassShadowCmd - 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SetTime - 0x00000000 0xd4 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TimeStructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetTime - 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetSubSecond - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SetDate - 0x00000000 0xbc THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_DateStructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetDate - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SetAlarm - 0x00000000 0xd4 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_AlarmStructInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetAlarm - 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_AlarmCmd - 0x00000000 0x8c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_AlarmSubSecondConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetAlarmSubSecond - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WakeUpClockConfig - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SetWakeUpCounter - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetWakeUpCounter - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WakeUpCmd - 0x00000000 0x88 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_DayLightSavingConfig - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetStoreOperation - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_OutputConfig - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_CoarseCalibConfig - 0x00000000 0x4c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_CoarseCalibCmd - 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_CalibOutputCmd - 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_CalibOutputConfig - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SmoothCalibConfig - 0x00000000 0x90 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TimeStampCmd - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetTimeStamp - 0x00000000 0x7c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetTimeStampSubSecond - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperTriggerConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperFilterConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperSamplingFreqConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperPinsPrechargeDuration - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TimeStampOnTamperDetectionCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperPullUpCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WriteBackupRegister - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ReadBackupRegister - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperPinSelection - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TimeStampPinSelection - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_OutputTypeConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SynchroShiftConfig - 0x00000000 0xa8 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ITConfig - 0x00000000 0x64 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetFlagStatus - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ClearFlag - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetITStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ClearITPendingBit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_frame 0x00000000 0x4bc THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_info 0x00000000 0x145a THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_abbrev 0x00000000 0x1e5 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_loc 0x00000000 0x1724 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_aranges - 0x00000000 0x1e0 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_ranges 0x00000000 0x1d0 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_line 0x00000000 0x823 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_str 0x00000000 0xb95 THUMB Debug/../../obj/stm32f4xx_rtc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_rtc.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_sdio.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_sdio.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_DeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_Init - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_StructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_ClockCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_SetPowerState - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_GetPowerState - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_SendCommand - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_CmdStructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_GetCommandResponse - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_GetResponse - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_DataConfig - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_DataStructInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_GetDataCounter - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_ReadData - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_WriteData - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_GetFIFOCount - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_StartSDIOReadWait - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_StopSDIOReadWait - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_SetSDIOReadWaitMode - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_SetSDIOOperation - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_SendSDIOSuspendCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_CommandCompletionCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_CEATAITCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_SendCEATACmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_DMACmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_ITConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_GetFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_GetITStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_ClearITPendingBit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_frame 0x00000000 0x228 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_info 0x00000000 0x8e0 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_abbrev 0x00000000 0x1d9 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_loc 0x00000000 0x2f8 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_aranges - 0x00000000 0x108 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_ranges 0x00000000 0xf8 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_line 0x00000000 0x461 THUMB Debug/../../obj/stm32f4xx_sdio.o - .debug_str 0x00000000 0x6a4 THUMB Debug/../../obj/stm32f4xx_sdio.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_sdio.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_spi.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_spi.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_DeInit - 0x00000000 0xe8 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_Init - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.I2S_Init - 0x00000000 0x10c THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_StructInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_spi.o - .text.I2S_StructInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_Cmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.I2S_Cmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_DataSizeConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_BiDirectionalLineConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_NSSInternalSoftwareConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_SSOutputCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_TIModeCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.I2S_FullDuplexConfig - 0x00000000 0x54 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_ReceiveData - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_SendData - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_CalculateCRC - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_TransmitCRC - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_GetCRC - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_GetCRCPolynomial - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_DMACmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_ITConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_GetFlagStatus - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_GetITStatus - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_ClearITPendingBit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_frame 0x00000000 0x1e0 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_info 0x00000000 0xd33 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_abbrev 0x00000000 0x201 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_loc 0x00000000 0x94c THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_aranges - 0x00000000 0xe0 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_ranges 0x00000000 0xd0 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_line 0x00000000 0x472 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_str 0x00000000 0x6fa THUMB Debug/../../obj/stm32f4xx_spi.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_spi.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_spi.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .text.SYSCFG_DeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_syscfg.o - .text.SYSCFG_MemoryRemapConfig - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_syscfg.o - .text.SYSCFG_EXTILineConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .text.SYSCFG_CompensationCellCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_syscfg.o - .text.SYSCFG_GetCompensationCellStatus - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_tim.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_tim.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TI1_Config - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TI2_Config - 0x00000000 0x4c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_DeInit - 0x00000000 0x20c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_TimeBaseInit - 0x00000000 0xac THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_TimeBaseStructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_PrescalerConfig - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_CounterModeConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetCounter - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetAutoreload - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GetCounter - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GetPrescaler - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_UpdateDisableConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_UpdateRequestConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ARRPreloadConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectOnePulseMode - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetClockDivision - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_Cmd 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1Init - 0x00000000 0x8c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC2Init - 0x00000000 0x9c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC3Init - 0x00000000 0x98 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC4Init - 0x00000000 0x7c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OCStructInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectOCxM - 0x00000000 0x58 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetCompare1 - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetCompare2 - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetCompare3 - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetCompare4 - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ForcedOC1Config - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ForcedOC2Config - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ForcedOC3Config - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ForcedOC4Config - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1PreloadConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC2PreloadConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC3PreloadConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC4PreloadConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1FastConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC2FastConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC3FastConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC4FastConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearOC1Ref - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearOC2Ref - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearOC3Ref - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearOC4Ref - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1PolarityConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1NPolarityConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC2PolarityConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC2NPolarityConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC3PolarityConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC3NPolarityConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC4PolarityConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_CCxCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_CCxNCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ICStructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GetCapture1 - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GetCapture2 - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GetCapture3 - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GetCapture4 - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetIC1Prescaler - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetIC2Prescaler - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_PWMIConfig - 0x00000000 0x6c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetIC3Prescaler - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetIC4Prescaler - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ICInit - 0x00000000 0xe0 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_BDTRConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_BDTRStructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_CtrlPWMOutputs - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectCOM - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_CCPreloadControl - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ITConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GenerateEvent - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GetFlagStatus - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GetITStatus - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearITPendingBit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_DMAConfig - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_DMACmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectCCDMA - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_InternalClockConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectInputTrigger - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_TIxExternalClockConfig - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ITRxExternalClockConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectOutputTrigger - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectSlaveMode - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectMasterSlaveMode - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ETRConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ETRClockMode2Config - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ETRClockMode1Config - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_EncoderInterfaceConfig - 0x00000000 0x4c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectHallSensor - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_RemapConfig - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_frame 0x00000000 0x6a4 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_info 0x00000000 0x234a THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_abbrev 0x00000000 0x256 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_loc 0x00000000 0x2204 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_aranges - 0x00000000 0x2e8 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_ranges 0x00000000 0x2d8 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_line 0x00000000 0xa09 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_str 0x00000000 0xe40 THUMB Debug/../../obj/stm32f4xx_tim.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_tim.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_tim.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_usart.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_usart.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_DeInit - 0x00000000 0x134 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_StructInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ClockInit - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ClockStructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SetPrescaler - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_OverSampling8Cmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_OneBitMethodCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SendData - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SetAddress - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ReceiverWakeUpCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_WakeUpConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_LINBreakDetectLengthConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_LINCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SendBreak - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_HalfDuplexCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SetGuardTime - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SmartCardCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SmartCardNACKCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_IrDAConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_IrDACmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_DMACmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ITConfig - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_GetITStatus - 0x00000000 0x50 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ClearITPendingBit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_usart.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .text.WWDG_DeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_wwdg.o - .text.WWDG_SetPrescaler - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .text.WWDG_SetWindowValue - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_wwdg.o - .text.WWDG_EnableIT - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .text.WWDG_SetCounter - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .text.WWDG_Enable - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .text.WWDG_GetFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .text.WWDG_ClearFlag - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_frame 0x00000000 0xa4 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_info 0x00000000 0x2a5 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_abbrev 0x00000000 0x177 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_loc 0x00000000 0x13b THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_aranges - 0x00000000 0x58 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_ranges 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_line 0x00000000 0x2a0 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_str 0x00000000 0x2eb THUMB Debug/../../obj/stm32f4xx_wwdg.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_wwdg.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .text 0x00000000 0x0 THUMB Debug/../../obj/stm32_eth.o - .data 0x00000000 0x0 THUMB Debug/../../obj/stm32_eth.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_HandleTxPkt - 0x00000000 0x12c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_HandleRxPkt - 0x00000000 0x120 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DropRxPkt - 0x00000000 0x64 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_PHYLoopBackCmd - 0x00000000 0x30 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetFlowControlBusyStatus - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_InitiatePauseControlFrame - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_BackPressureActivationCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetMACFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetMACITStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MACITConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MACAddressConfig - 0x00000000 0x34 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetMACAddress - 0x00000000 0x34 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MACAddressPerfectFilterCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MACAddressFilterConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MACAddressMaskBytesFilterConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescChainInit - 0x00000000 0xc4 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescRingInit - 0x00000000 0xc4 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetDMATxDescFlagStatus - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetDMATxDescCollisionCount - 0x00000000 0x8 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_SetDMATxDescOwnBit - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescTransmitITConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescFrameSegmentConfig - 0x00000000 0x8 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescChecksumInsertionConfig - 0x00000000 0x8 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescCRCCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescEndOfRingCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescSecondAddressChainedCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescShortFramePaddingCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescTimeStampCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescBufferSizeConfig - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMARxDescChainInit - 0x00000000 0xdc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMARxDescRingInit - 0x00000000 0x14c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetDMARxDescFlagStatus - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_SetDMARxDescOwnBit - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetDMARxDescFrameLength - 0x00000000 0x8 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetRxPktSize - 0x00000000 0x30 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMARxDescReceiveITConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMARxDescEndOfRingCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMARxDescSecondAddressChainedCmd - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetDMARxDescBufferSize - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetDMAFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMAClearFlag - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetDMAITStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMAClearITPendingBit - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetTransmitProcessState - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetReceiveProcessState - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetFlushTransmitFIFOStatus - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMAITConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetDMAOverflowStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetRxOverflowMissedFrameCounter - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetBufferUnavailableMissedFrameCounter - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetCurrentTxDescStartAddress - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetCurrentRxDescStartAddress - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetCurrentTxBufferAddress - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetCurrentRxBufferAddress - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_ResumeDMATransmission - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_ResumeDMAReception - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_ResetWakeUpFrameFilterRegisterPointer - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_SetWakeUpFrameFilterRegister - 0x00000000 0x2c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GlobalUnicastWakeUpCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetPMTFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_WakeUpFrameDetectionCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MagicPacketDetectionCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_PowerDownCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCCounterFreezeCmd - 0x00000000 0x30 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCResetOnReadCmd - 0x00000000 0x30 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCCounterRolloverCmd - 0x00000000 0x30 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCCountersReset - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCITConfig - 0x00000000 0x64 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetMMCITStatus - 0x00000000 0x60 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetMMCRegister - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_EnablePTPTimeStampAddend - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_EnablePTPTimeStampInterruptTrigger - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_EnablePTPTimeStampUpdate - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_InitializePTPTimeStamp - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_PTPUpdateMethodConfig - 0x00000000 0x30 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_PTPTimeStampCmd - 0x00000000 0x30 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetPTPFlagStatus - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_SetPTPSubSecondIncrement - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_SetPTPTimeStampUpdate - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_SetPTPTimeStampAddend - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_SetPTPTargetTime - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetPTPRegister - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMAPTPTxDescChainInit - 0x00000000 0x120 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMAPTPRxDescChainInit - 0x00000000 0x12c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_HandlePTPTxPkt - 0x00000000 0x1dc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_HandlePTPRxPkt - 0x00000000 0x14c THUMB Debug/../../obj/stm32_eth.o - .bss.DMARxDescToGet - 0x00000000 0x4 THUMB Debug/../../obj/stm32_eth.o - .bss.DMAPTPTxDescToSet - 0x00000000 0x4 THUMB Debug/../../obj/stm32_eth.o - .bss.DMATxDescToSet - 0x00000000 0x4 THUMB Debug/../../obj/stm32_eth.o - .bss.DMAPTPRxDescToGet - 0x00000000 0x4 THUMB Debug/../../obj/stm32_eth.o - .text 0x00000000 0x0 THUMB Debug/../../obj/clock-arch.o - .data 0x00000000 0x0 THUMB Debug/../../obj/clock-arch.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/clock-arch.o - .text.clock_time - 0x00000000 0x8 THUMB Debug/../../obj/clock-arch.o - .debug_frame 0x00000000 0x2c THUMB Debug/../../obj/clock-arch.o - .debug_info 0x00000000 0xcf THUMB Debug/../../obj/clock-arch.o - .debug_abbrev 0x00000000 0x8b THUMB Debug/../../obj/clock-arch.o - .debug_loc 0x00000000 0x20 THUMB Debug/../../obj/clock-arch.o - .debug_aranges - 0x00000000 0x20 THUMB Debug/../../obj/clock-arch.o - .debug_ranges 0x00000000 0x10 THUMB Debug/../../obj/clock-arch.o - .debug_line 0x00000000 0x150 THUMB Debug/../../obj/clock-arch.o - .debug_str 0x00000000 0x1c9 THUMB Debug/../../obj/clock-arch.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/clock-arch.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/clock-arch.o - .text 0x00000000 0x0 THUMB Debug/../../obj/netdev.o - .data 0x00000000 0x0 THUMB Debug/../../obj/netdev.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/netdev.o - .text 0x00000000 0x0 THUMB Debug/../../obj/boot.o - .data 0x00000000 0x0 THUMB Debug/../../obj/boot.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/boot.o - .text 0x00000000 0x0 THUMB Debug/../../obj/cstart.o - .data 0x00000000 0x0 THUMB Debug/../../obj/cstart.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/cstart.o - .stack 0x00000000 0x0 THUMB Debug/../../obj/cstart.o - .stack_process - 0x00000000 0x0 THUMB Debug/../../obj/cstart.o - .heap 0x00000000 0x0 THUMB Debug/../../obj/cstart.o - .text 0x00000000 0x0 THUMB Debug/../../obj/led.o - .data 0x00000000 0x0 THUMB Debug/../../obj/led.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/led.o - .text 0x00000000 0x0 THUMB Debug/../../obj/main.o - .data 0x00000000 0x0 THUMB Debug/../../obj/main.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/main.o - .text 0x00000000 0x0 THUMB Debug/../../obj/timer.o - .data 0x00000000 0x0 THUMB Debug/../../obj/timer.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/timer.o - .text.TimerDeinit - 0x00000000 0x10 THUMB Debug/../../obj/timer.o - .text 0x00000000 0x0 THUMB Debug/../../obj/vectors.o - .data 0x00000000 0x0 THUMB Debug/../../obj/vectors.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/vectors.o - .text 0x00000000 0x0 THUMB Debug/../../obj/net.o - .data 0x00000000 0x0 THUMB Debug/../../obj/net.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/net.o - .text 0x00000000 0x0 THUMB Debug/../../obj/uip.o - .data 0x00000000 0x0 THUMB Debug/../../obj/uip.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/uip.o - .text.uip_setipid - 0x00000000 0xc THUMB Debug/../../obj/uip.o - .text.uip_unlisten - 0x00000000 0x38 THUMB Debug/../../obj/uip.o - .text.uip_connect - 0x00000000 0x108 THUMB Debug/../../obj/uip.o - .text.uip_udpchksum - 0x00000000 0xc THUMB Debug/../../obj/uip.o - .text.uip_chksum - 0x00000000 0x18 THUMB Debug/../../obj/uip.o - .text.uip_send - 0x00000000 0x2c THUMB Debug/../../obj/uip.o - .text 0x00000000 0x0 THUMB Debug/../../obj/uip_arp.o - .data 0x00000000 0x0 THUMB Debug/../../obj/uip_arp.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/uip_arp.o - .text.uip_arp_init - 0x00000000 0x40 THUMB Debug/../../obj/uip_arp.o - .text 0x00000000 0x0 THUMB Debug/../../obj/uip_timer.o - .data 0x00000000 0x0 THUMB Debug/../../obj/uip_timer.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/uip_timer.o - .text.timer_set - 0x00000000 0x10 THUMB Debug/../../obj/uip_timer.o - .text.timer_reset - 0x00000000 0xc THUMB Debug/../../obj/uip_timer.o - .text.timer_restart - 0x00000000 0xc THUMB Debug/../../obj/uip_timer.o - .text.timer_expired - 0x00000000 0x18 THUMB Debug/../../obj/uip_timer.o - .debug_frame 0x00000000 0x74 THUMB Debug/../../obj/uip_timer.o - .debug_info 0x00000000 0x144 THUMB Debug/../../obj/uip_timer.o - .debug_abbrev 0x00000000 0xf0 THUMB Debug/../../obj/uip_timer.o - .debug_loc 0x00000000 0xdb THUMB Debug/../../obj/uip_timer.o - .debug_aranges - 0x00000000 0x38 THUMB Debug/../../obj/uip_timer.o - .debug_ranges 0x00000000 0x28 THUMB Debug/../../obj/uip_timer.o - .debug_line 0x00000000 0x129 THUMB Debug/../../obj/uip_timer.o - .debug_str 0x00000000 0x18d THUMB Debug/../../obj/uip_timer.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uip_timer.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/uip_timer.o - .text 0x00000000 0x0 THUMB Debug/../../obj/uip-fw.o - .data 0x00000000 0x0 THUMB Debug/../../obj/uip-fw.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/uip-fw.o - .text.uip_fw_init - 0x00000000 0x34 THUMB Debug/../../obj/uip-fw.o - .text.uip_fw_output - 0x00000000 0xe8 THUMB Debug/../../obj/uip-fw.o - .text.uip_fw_forward - 0x00000000 0x1dc THUMB Debug/../../obj/uip-fw.o - .text.uip_fw_register - 0x00000000 0x10 THUMB Debug/../../obj/uip-fw.o - .text.uip_fw_default - 0x00000000 0xc THUMB Debug/../../obj/uip-fw.o - .text.uip_fw_periodic - 0x00000000 0x28 THUMB Debug/../../obj/uip-fw.o - .bss.netifs 0x00000000 0x4 THUMB Debug/../../obj/uip-fw.o - .bss.defaultnetif - 0x00000000 0x4 THUMB Debug/../../obj/uip-fw.o - .bss.fwcache 0x00000000 0x1c THUMB Debug/../../obj/uip-fw.o - .debug_frame 0x00000000 0x90 THUMB Debug/../../obj/uip-fw.o - .debug_info 0x00000000 0x6f7 THUMB Debug/../../obj/uip-fw.o - .debug_abbrev 0x00000000 0x295 THUMB Debug/../../obj/uip-fw.o - .debug_loc 0x00000000 0x18c THUMB Debug/../../obj/uip-fw.o - .debug_aranges - 0x00000000 0x48 THUMB Debug/../../obj/uip-fw.o - .debug_ranges 0x00000000 0x68 THUMB Debug/../../obj/uip-fw.o - .debug_line 0x00000000 0x249 THUMB Debug/../../obj/uip-fw.o - .debug_str 0x00000000 0x38d THUMB Debug/../../obj/uip-fw.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uip-fw.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/uip-fw.o - .text 0x00000000 0x0 THUMB Debug/../../obj/uiplib.o - .data 0x00000000 0x0 THUMB Debug/../../obj/uiplib.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/uiplib.o - .text.uiplib_ipaddrconv - 0x00000000 0x370 THUMB Debug/../../obj/uiplib.o - .debug_frame 0x00000000 0x2c THUMB Debug/../../obj/uiplib.o - .debug_info 0x00000000 0xc5 THUMB Debug/../../obj/uiplib.o - .debug_abbrev 0x00000000 0x64 THUMB Debug/../../obj/uiplib.o - .debug_loc 0x00000000 0xf89 THUMB Debug/../../obj/uiplib.o - .debug_aranges - 0x00000000 0x20 THUMB Debug/../../obj/uiplib.o - .debug_ranges 0x00000000 0x10 THUMB Debug/../../obj/uiplib.o - .debug_line 0x00000000 0x1b3 THUMB Debug/../../obj/uiplib.o - .debug_str 0x00000000 0x17b THUMB Debug/../../obj/uiplib.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uiplib.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/uiplib.o - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .text.libc.longjmp - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .text.libc.memcpy_fast - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .text.libc.memcpy_small - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .text.libc.__aeabi_memset - 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .text.libc.setjmp - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .text.libc.strcpy - 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .text.libc.strcmp - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .text.libc.strlen - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio - 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.__do_nvdebug_operation - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_abort - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fopen - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fgets - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fputc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fputs - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fread - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fwrite - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fseek - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_ftell - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_gets - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fflush - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fclose - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fgetc - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_putchar - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_puts - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_rewind - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_clearerr - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_feof - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_ferror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getch - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_time - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_vprintf - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_vfprintf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_ungetc - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fgetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_fsetpos - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_freopen - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_perror - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_remove - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_rename - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_tmpfile - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_tmpnam - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getenv - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_system - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_vfscanf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_vscanf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_exit - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_enabled - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_kbhit - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_ioctl - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_runtime_error - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_break - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getargs - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_geti - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getu - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getl - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getul - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getf - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getd - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getll - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_getull - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_filesize - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_accept - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_bind - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_listen - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_shutdown - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_socket - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_htons - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_htonl - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_loadsymbols - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text.libdebugio.debug_unloadsymbols - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .bss.libdebugio.getenv_buffer - 0x00000000 0x400 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .bss.libdebugio.__dbgEnabled - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .bss.libdebugio.tmpnam_buffer - 0x00000000 0x100 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .text 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .text.libc.__errno - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .text.libc.__heap_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .text.libc.__heap_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .text.libc.__printf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .text.libc.__printf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .text.libc.__scanf_lock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .text.libc.__scanf_unlock - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - .bss.libc.errno - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -Memory Configuration - -Name Origin Length Attributes -UNPLACED_SECTIONS 0xffffffff 0x00000000 xw -FLASH 0x0800c000 0x000f4000 xr -DATA_SRAM 0x10000000 0x00010000 xw -SYSTEM 0x1fff0000 0x00007a10 xw -OPTION 0x1fffc000 0x00000008 xw -RAM 0x20000000 0x00020000 xw -SRAM1 0x20000000 0x0001c000 xw -SRAM2 0x2001c000 0x00004000 xw -APB1 0x40000000 0x00008000 xw -APB2 0x40010000 0x00004c00 xw -AHB1 0x40020000 0x00060000 xw -AHB2 0x50000000 0x00060c00 xw -AHB3 0xa0000000 0x00001000 xw -PPB 0xe0000000 0x00100000 xw -BKPSRAM 0x40024000 0x00001000 xw -PCCARD 0x90000000 0x00000000 xw -NAND2 0x80000000 0x00000000 xw -NAND1 0x70000000 0x00000000 xw -NOR_PSRAM4 0x6c000000 0x00000000 xw -NOR_PSRAM3 0x68000000 0x00000000 xw -NOR_PSRAM2 0x64000000 0x00000000 xw -NOR_PSRAM1 0x60000000 0x00000000 xw -CM3_System_Control_Space 0xe000e000 0x00001000 xw -*default* 0x00000000 0xffffffff - -Linker script and memory map - - 0x0800f4bc __do_debug_operation = __do_debug_operation_mempoll - 0x0800c000 __FLASH_segment_start__ = 0x800c000 - 0x08100000 __FLASH_segment_end__ = 0x8100000 - 0x10000000 __DATA_SRAM_segment_start__ = 0x10000000 - 0x10010000 __DATA_SRAM_segment_end__ = 0x10010000 - 0x1fff0000 __SYSTEM_segment_start__ = 0x1fff0000 - 0x1fff7a10 __SYSTEM_segment_end__ = 0x1fff7a10 - 0x1fffc000 __OPTION_segment_start__ = 0x1fffc000 - 0x1fffc008 __OPTION_segment_end__ = 0x1fffc008 - 0x20000000 __RAM_segment_start__ = 0x20000000 - 0x20020000 __RAM_segment_end__ = 0x20020000 - 0x20000000 __SRAM1_segment_start__ = 0x20000000 - 0x2001c000 __SRAM1_segment_end__ = 0x2001c000 - 0x2001c000 __SRAM2_segment_start__ = 0x2001c000 - 0x20020000 __SRAM2_segment_end__ = 0x20020000 - 0x40000000 __APB1_segment_start__ = 0x40000000 - 0x40008000 __APB1_segment_end__ = 0x40008000 - 0x40010000 __APB2_segment_start__ = 0x40010000 - 0x40014c00 __APB2_segment_end__ = 0x40014c00 - 0x40020000 __AHB1_segment_start__ = 0x40020000 - 0x40080000 __AHB1_segment_end__ = 0x40080000 - 0x50000000 __AHB2_segment_start__ = 0x50000000 - 0x50060c00 __AHB2_segment_end__ = 0x50060c00 - 0xa0000000 __AHB3_segment_start__ = 0xa0000000 - 0xa0001000 __AHB3_segment_end__ = 0xa0001000 - 0xe0000000 __PPB_segment_start__ = 0xe0000000 - 0xe0100000 __PPB_segment_end__ = 0xe0100000 - 0x40024000 __BKPSRAM_segment_start__ = 0x40024000 - 0x40025000 __BKPSRAM_segment_end__ = 0x40025000 - 0x90000000 __PCCARD_segment_start__ = 0x90000000 - 0x90000000 __PCCARD_segment_end__ = 0x90000000 - 0x80000000 __NAND2_segment_start__ = 0x80000000 - 0x80000000 __NAND2_segment_end__ = 0x80000000 - 0x70000000 __NAND1_segment_start__ = 0x70000000 - 0x70000000 __NAND1_segment_end__ = 0x70000000 - 0x6c000000 __NOR_PSRAM4_segment_start__ = 0x6c000000 - 0x6c000000 __NOR_PSRAM4_segment_end__ = 0x6c000000 - 0x68000000 __NOR_PSRAM3_segment_start__ = 0x68000000 - 0x68000000 __NOR_PSRAM3_segment_end__ = 0x68000000 - 0x64000000 __NOR_PSRAM2_segment_start__ = 0x64000000 - 0x64000000 __NOR_PSRAM2_segment_end__ = 0x64000000 - 0x60000000 __NOR_PSRAM1_segment_start__ = 0x60000000 - 0x60000000 __NOR_PSRAM1_segment_end__ = 0x60000000 - 0xe000e000 __CM3_System_Control_Space_segment_start__ = 0xe000e000 - 0xe000f000 __CM3_System_Control_Space_segment_end__ = 0xe000f000 - 0x00000800 __STACKSIZE__ = 0x800 - 0x00000000 __STACKSIZE_PROCESS__ = 0x0 - 0x00000000 __STACKSIZE_IRQ__ = 0x0 - 0x00000000 __STACKSIZE_FIQ__ = 0x0 - 0x00000000 __STACKSIZE_SVC__ = 0x0 - 0x00000000 __STACKSIZE_ABT__ = 0x0 - 0x00000000 __STACKSIZE_UND__ = 0x0 - 0x00000800 __HEAPSIZE__ = 0x800 - 0x20000000 __vectors_ram_load_start__ = ALIGN (__RAM_segment_start__, 0x100) - -.vectors_ram 0x20000000 0x0 - 0x20000000 __vectors_ram_start__ = . - *(.vectors_ram .vectors_ram.*) - 0x20000000 __vectors_ram_end__ = (__vectors_ram_start__ + SIZEOF (.vectors_ram)) - 0x20000000 __vectors_ram_load_end__ = __vectors_ram_end__ - 0x00000001 . = ASSERT (((__vectors_ram_end__ >= __RAM_segment_start__) && (__vectors_ram_end__ <= __RAM_segment_end__)), error: .vectors_ram is too large to fit in RAM memory segment) - 0x0800c000 __vectors_load_start__ = ALIGN (__FLASH_segment_start__, 0x100) - -.vectors 0x0800c000 0x18c - 0x0800c000 __vectors_start__ = . - *(.vectors .vectors.*) - .vectors 0x0800c000 0x18c THUMB Debug/../../obj/vectors.o - 0x0800c000 _vectors - 0x0800c18c __vectors_end__ = (__vectors_start__ + SIZEOF (.vectors)) - 0x0800c18c __vectors_load_end__ = __vectors_end__ - 0x00000001 . = ASSERT (((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <= __FLASH_segment_end__)), error: .vectors is too large to fit in FLASH memory segment) - 0x0800c18c __init_load_start__ = ALIGN (__vectors_end__, 0x4) - -.init 0x0800c18c 0x154 - 0x0800c18c __init_start__ = . - *(.init .init.*) - .init 0x0800c18c 0x154 THUMB Debug/../../obj/cstart.o - 0x0800c18c _start - 0x0800c20e exit - 0x0800c232 reset_handler - 0x0800c2e0 __init_end__ = (__init_start__ + SIZEOF (.init)) - 0x0800c2e0 __init_load_end__ = __init_end__ - 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment) - 0x0800c2e0 __text_load_start__ = ALIGN (__init_end__, 0x4) - -.text 0x0800c2e0 0x3220 - 0x0800c2e0 __text_start__ = . - *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) - .glue_7 0x00000000 0x0 linker stubs - .glue_7t 0x00000000 0x0 linker stubs - .text.SystemInit - 0x0800c2e0 0x118 THUMB Debug/../../obj/system_stm32f4xx.o - 0x0800c2e0 SystemInit - .text.CAN_DeInit - 0x0800c3f8 0x44 THUMB Debug/../../obj/stm32f4xx_can.o - 0x0800c3f8 CAN_DeInit - .text.CAN_Init - 0x0800c43c 0x11c THUMB Debug/../../obj/stm32f4xx_can.o - 0x0800c43c CAN_Init - .text.CAN_FilterInit - 0x0800c558 0x134 THUMB Debug/../../obj/stm32f4xx_can.o - 0x0800c558 CAN_FilterInit - .text.CAN_StructInit - 0x0800c68c 0x28 THUMB Debug/../../obj/stm32f4xx_can.o - 0x0800c68c CAN_StructInit - .text.CAN_Receive - 0x0800c6b4 0xbc THUMB Debug/../../obj/stm32f4xx_can.o - 0x0800c6b4 CAN_Receive - .text.CAN_MessagePending - 0x0800c770 0x1c THUMB Debug/../../obj/stm32f4xx_can.o - 0x0800c770 CAN_MessagePending - .text.GPIO_Init - 0x0800c78c 0x160 THUMB Debug/../../obj/stm32f4xx_gpio.o - 0x0800c78c GPIO_Init - .text.GPIO_SetBits - 0x0800c8ec 0x4 THUMB Debug/../../obj/stm32f4xx_gpio.o - 0x0800c8ec GPIO_SetBits - .text.GPIO_ResetBits - 0x0800c8f0 0x4 THUMB Debug/../../obj/stm32f4xx_gpio.o - 0x0800c8f0 GPIO_ResetBits - .text.GPIO_PinAFConfig - 0x0800c8f4 0x38 THUMB Debug/../../obj/stm32f4xx_gpio.o - 0x0800c8f4 GPIO_PinAFConfig - .text.RCC_GetClocksFreq - 0x0800c92c 0xd8 THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x0800c92c RCC_GetClocksFreq - .text.RCC_AHB1PeriphClockCmd - 0x0800ca04 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x0800ca04 RCC_AHB1PeriphClockCmd - .text.RCC_APB1PeriphClockCmd - 0x0800ca28 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x0800ca28 RCC_APB1PeriphClockCmd - .text.RCC_APB2PeriphClockCmd - 0x0800ca4c 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x0800ca4c RCC_APB2PeriphClockCmd - .text.RCC_AHB1PeriphResetCmd - 0x0800ca70 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x0800ca70 RCC_AHB1PeriphResetCmd - .text.RCC_APB1PeriphResetCmd - 0x0800ca94 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x0800ca94 RCC_APB1PeriphResetCmd - .text.SYSCFG_ETH_MediaInterfaceConfig - 0x0800cab8 0xc THUMB Debug/../../obj/stm32f4xx_syscfg.o - 0x0800cab8 SYSCFG_ETH_MediaInterfaceConfig - .text.USART_Init - 0x0800cac4 0x108 THUMB Debug/../../obj/stm32f4xx_usart.o - 0x0800cac4 USART_Init - .text.USART_Cmd - 0x0800cbcc 0x20 THUMB Debug/../../obj/stm32f4xx_usart.o - 0x0800cbcc USART_Cmd - .text.USART_ReceiveData - 0x0800cbec 0xc THUMB Debug/../../obj/stm32f4xx_usart.o - 0x0800cbec USART_ReceiveData - .text.USART_GetFlagStatus - 0x0800cbf8 0xc THUMB Debug/../../obj/stm32f4xx_usart.o - 0x0800cbf8 USART_GetFlagStatus - .text.ETH_DeInit - 0x0800cc04 0x1c THUMB Debug/../../obj/stm32_eth.o - 0x0800cc04 ETH_DeInit - .text.ETH_StructInit - 0x0800cc20 0xa8 THUMB Debug/../../obj/stm32_eth.o - 0x0800cc20 ETH_StructInit - .text.ETH_ReadPHYRegister - 0x0800ccc8 0x78 THUMB Debug/../../obj/stm32_eth.o - 0x0800ccc8 ETH_ReadPHYRegister - .text.ETH_WritePHYRegister - 0x0800cd40 0x70 THUMB Debug/../../obj/stm32_eth.o - 0x0800cd40 ETH_WritePHYRegister - .text.ETH_Init - 0x0800cdb0 0x2f0 THUMB Debug/../../obj/stm32_eth.o - 0x0800cdb0 ETH_Init - .text.ETH_MACTransmissionCmd - 0x0800d0a0 0x28 THUMB Debug/../../obj/stm32_eth.o - 0x0800d0a0 ETH_MACTransmissionCmd - .text.ETH_MACReceptionCmd - 0x0800d0c8 0x28 THUMB Debug/../../obj/stm32_eth.o - 0x0800d0c8 ETH_MACReceptionCmd - .text.ETH_SoftwareReset - 0x0800d0f0 0x14 THUMB Debug/../../obj/stm32_eth.o - 0x0800d0f0 ETH_SoftwareReset - .text.ETH_GetSoftwareResetStatus - 0x0800d104 0x10 THUMB Debug/../../obj/stm32_eth.o - 0x0800d104 ETH_GetSoftwareResetStatus - .text.ETH_FlushTransmitFIFO - 0x0800d114 0x14 THUMB Debug/../../obj/stm32_eth.o - 0x0800d114 ETH_FlushTransmitFIFO - .text.ETH_DMATransmissionCmd - 0x0800d128 0x28 THUMB Debug/../../obj/stm32_eth.o - 0x0800d128 ETH_DMATransmissionCmd - .text.ETH_DMAReceptionCmd - 0x0800d150 0x28 THUMB Debug/../../obj/stm32_eth.o - 0x0800d150 ETH_DMAReceptionCmd - .text.ETH_Start - 0x0800d178 0x28 THUMB Debug/../../obj/stm32_eth.o - 0x0800d178 ETH_Start - .text.netdev_init - 0x0800d1a0 0x26c THUMB Debug/../../obj/netdev.o - 0x0800d1a0 netdev_init - .text.netdev_init_mac - 0x0800d40c 0x30 THUMB Debug/../../obj/netdev.o - 0x0800d40c netdev_init_mac - .text.netdev_read - 0x0800d43c 0x5c THUMB Debug/../../obj/netdev.o - 0x0800d43c netdev_read - .text.netdev_send - 0x0800d498 0x70 THUMB Debug/../../obj/netdev.o - 0x0800d498 netdev_send - .text.UartReceiveByte - 0x0800d508 0x34 THUMB Debug/../../obj/boot.o - .text.BootComInit - 0x0800d53c 0x224 THUMB Debug/../../obj/boot.o - 0x0800d53c BootComInit - .text.BootActivate - 0x0800d760 0x28 THUMB Debug/../../obj/boot.o - 0x0800d760 BootActivate - .text.BootComCheckActivationRequest - 0x0800d788 0xf0 THUMB Debug/../../obj/boot.o - 0x0800d788 BootComCheckActivationRequest - .text.LedInit 0x0800d878 0x50 THUMB Debug/../../obj/led.o - 0x0800d878 LedInit - .text.LedToggle - 0x0800d8c8 0x70 THUMB Debug/../../obj/led.o - 0x0800d8c8 LedToggle - .text.main 0x0800d938 0x24 THUMB Debug/../../obj/main.o - 0x0800d938 main - .text.TimerSet - 0x0800d95c 0xc THUMB Debug/../../obj/timer.o - 0x0800d95c TimerSet - .text.TimerInit - 0x0800d968 0x4c THUMB Debug/../../obj/timer.o - 0x0800d968 TimerInit - .text.TimerGet - 0x0800d9b4 0xc THUMB Debug/../../obj/timer.o - 0x0800d9b4 TimerGet - .text.TimerISRHandler - 0x0800d9c0 0x14 THUMB Debug/../../obj/timer.o - 0x0800d9c0 TimerISRHandler - .text.UnusedISR - 0x0800d9d4 0x4 THUMB Debug/../../obj/vectors.o - 0x0800d9d4 UnusedISR - .text.NetInit 0x0800d9d8 0x78 THUMB Debug/../../obj/net.o - 0x0800d9d8 NetInit - .text.NetApp 0x0800da50 0x38 THUMB Debug/../../obj/net.o - 0x0800da50 NetApp - .text.NetTask 0x0800da88 0x114 THUMB Debug/../../obj/net.o - 0x0800da88 NetTask - .text.chksum 0x0800db9c 0xc8 THUMB Debug/../../obj/uip.o - .text.uip_add32 - 0x0800dc64 0x7c THUMB Debug/../../obj/uip.o - 0x0800dc64 uip_add32 - .text.uip_add_rcv_nxt - 0x0800dce0 0x30 THUMB Debug/../../obj/uip.o - .text.uip_init - 0x0800dd10 0x38 THUMB Debug/../../obj/uip.o - 0x0800dd10 uip_init - .text.uip_listen - 0x0800dd48 0x38 THUMB Debug/../../obj/uip.o - 0x0800dd48 uip_listen - .text.htons 0x0800dd80 0xc THUMB Debug/../../obj/uip.o - 0x0800dd80 htons - .text.upper_layer_chksum - 0x0800dd8c 0x40 THUMB Debug/../../obj/uip.o - .text.uip_tcpchksum - 0x0800ddcc 0xc THUMB Debug/../../obj/uip.o - 0x0800ddcc uip_tcpchksum - .text.uip_ipchksum - 0x0800ddd8 0x24 THUMB Debug/../../obj/uip.o - 0x0800ddd8 uip_ipchksum - .text.uip_process - 0x0800ddfc 0xd28 THUMB Debug/../../obj/uip.o - 0x0800ddfc uip_process - .text.uip_arp_update - 0x0800eb24 0x40c THUMB Debug/../../obj/uip_arp.o - .text.uip_arp_timer - 0x0800ef30 0x74 THUMB Debug/../../obj/uip_arp.o - 0x0800ef30 uip_arp_timer - .text.uip_arp_arpin - 0x0800efa4 0x14c THUMB Debug/../../obj/uip_arp.o - 0x0800efa4 uip_arp_arpin - .text.uip_arp_out - 0x0800f0f0 0x314 THUMB Debug/../../obj/uip_arp.o - 0x0800f0f0 uip_arp_out - .text.libc.memcpy - 0x0800f404 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - 0x0800f404 __aeabi_memcpy - 0x0800f404 __aeabi_memcpy4 - 0x0800f404 __aeabi_memcpy8 - 0x0800f404 memcpy - .text.libc.memset - 0x0800f44c 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - 0x0800f44c memset - .text.libdebugio.__do_debug_operation_mempoll - 0x0800f4bc 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - 0x0800f4bc __do_debug_operation_mempoll - .text.libc.__debug_io_lock - 0x0800f4f8 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - 0x0800f4f8 __debug_io_lock - .text.libc.__debug_io_unlock - 0x0800f4fc 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - 0x0800f4fc __debug_io_unlock - 0x0800f500 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x0800f500 __text_load_end__ = __text_end__ - -.vfp11_veneer 0x00000000 0x0 - .vfp11_veneer 0x00000000 0x0 linker stubs - -.v4_bx 0x00000000 0x0 - .v4_bx 0x00000000 0x0 linker stubs - -.iplt 0x00000000 0x0 - .iplt 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f4xx.o - 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) - 0x0800f500 __dtors_load_start__ = ALIGN (__text_end__, 0x4) - -.dtors 0x0800f500 0x0 - 0x0800f500 __dtors_start__ = . - *(SORT(.dtors.*)) - *(.dtors) - *(.fini_array .fini_array.*) - 0x0800f500 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x0800f500 __dtors_load_end__ = __dtors_end__ - 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment) - 0x0800f500 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) - -.ctors 0x0800f500 0x0 - 0x0800f500 __ctors_start__ = . - *(SORT(.ctors.*)) - *(.ctors) - *(.init_array .init_array.*) - 0x0800f500 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x0800f500 __ctors_load_end__ = __ctors_end__ - 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment) - 0x0800f500 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) - -.rodata 0x0800f500 0x2c - 0x0800f500 __rodata_start__ = . - *(.rodata .rodata.* .gnu.linkonce.r.*) - .rodata.canTiming - 0x0800f500 0x24 THUMB Debug/../../obj/boot.o - .rodata.broadcast_ethaddr - 0x0800f524 0x8 THUMB Debug/../../obj/uip_arp.o - 0x0800f52c __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x0800f52c __rodata_load_end__ = __rodata_end__ - -.rel.dyn 0x0800c000 0x0 - .rel.iplt 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f4xx.o - 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment) - 0x0800f52c __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) - -.ARM.exidx 0x0800f52c 0x0 - 0x0800f52c __ARM.exidx_start__ = . - 0x0800f52c __exidx_start = __ARM.exidx_start__ - *(.ARM.exidx .ARM.exidx.*) - 0x0800f52c __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) - 0x0800f52c __exidx_end = __ARM.exidx_end__ - 0x0800f52c __ARM.exidx_load_end__ = __ARM.exidx_end__ - 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment) - 0x0800f52c __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) - -.fast 0x20000000 0x0 load address 0x0800f52c - 0x20000000 __fast_start__ = . - *(.fast .fast.*) - 0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x0800f52c __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) - 0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment) - -.fast_run 0x20000000 0x0 - 0x20000000 __fast_run_start__ = . - 0x20000000 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .) - 0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) - 0x20000000 __fast_run_load_end__ = __fast_run_end__ - 0x00000001 . = ASSERT (((__fast_run_end__ >= __RAM_segment_start__) && (__fast_run_end__ <= __RAM_segment_end__)), error: .fast_run is too large to fit in RAM memory segment) - 0x0800f52c __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) - -.data 0x20000000 0x14 load address 0x0800f52c - 0x20000000 __data_start__ = . - *(.data .data.* .gnu.linkonce.d.*) - .data.SystemCoreClock - 0x20000000 0x4 THUMB Debug/../../obj/system_stm32f4xx.o - 0x20000000 SystemCoreClock - .data.APBAHBPrescTable - 0x20000004 0x10 THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x20000014 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x0800f540 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) - -.igot.plt 0x00000000 0x0 - .igot.plt 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f4xx.o - 0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment) - -.data_run 0x20000000 0x14 load address 0x0800f52c - 0x20000000 __data_run_start__ = . - 0x20000014 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) - *fill* 0x20000000 0x14 00 - 0x20000014 __data_run_end__ = (__data_run_start__ + SIZEOF (.data_run)) - 0x20000014 __data_run_load_end__ = __data_run_end__ - 0x00000001 . = ASSERT (((__data_run_end__ >= __RAM_segment_start__) && (__data_run_end__ <= __RAM_segment_end__)), error: .data_run is too large to fit in RAM memory segment) - 0x20000014 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) - -.bss 0x20000014 0x15a0 - 0x20000014 __bss_start__ = . - *(.bss .bss.* .gnu.linkonce.b.*) - *fill* 0x20000014 0x6c 00 - .bss.EnetDmaRx - 0x20000080 0x80 THUMB Debug/../../obj/netdev.o - 0x20000080 EnetDmaRx - .bss.RxBuff 0x20000100 0x640 THUMB Debug/../../obj/netdev.o - 0x20000100 RxBuff - *fill* 0x20000740 0x40 00 - .bss.EnetDmaTx - 0x20000780 0x80 THUMB Debug/../../obj/netdev.o - 0x20000780 EnetDmaTx - .bss.TxBuff 0x20000800 0x640 THUMB Debug/../../obj/netdev.o - 0x20000800 TxBuff - .bss.xcpCtoReqPacket.7041 - 0x20000e40 0x44 THUMB Debug/../../obj/boot.o - .bss.xcpCtoRxLength.7042 - 0x20000e84 0x1 THUMB Debug/../../obj/boot.o - .bss.xcpCtoRxInProgress.7043 - 0x20000e85 0x1 THUMB Debug/../../obj/boot.o - *fill* 0x20000e86 0x2 00 - .bss.timer_counter_last.7022 - 0x20000e88 0x4 THUMB Debug/../../obj/led.o - .bss.led_toggle_state.7021 - 0x20000e8c 0x1 THUMB Debug/../../obj/led.o - *fill* 0x20000e8d 0x3 00 - .bss.millisecond_counter - 0x20000e90 0x4 THUMB Debug/../../obj/timer.o - .bss.ARPTimerTimeOut - 0x20000e94 0x4 THUMB Debug/../../obj/net.o - .bss.periodicTimerTimeOut - 0x20000e98 0x4 THUMB Debug/../../obj/net.o - .bss.uip_conn 0x20000e9c 0x4 THUMB Debug/../../obj/uip.o - 0x20000e9c uip_conn - .bss.uip_conns - 0x20000ea0 0x20 THUMB Debug/../../obj/uip.o - 0x20000ea0 uip_conns - .bss.uip_netmask - 0x20000ec0 0x4 THUMB Debug/../../obj/uip.o - 0x20000ec0 uip_netmask - .bss.uip_len 0x20000ec4 0x2 THUMB Debug/../../obj/uip.o - 0x20000ec4 uip_len - .bss.ipid 0x20000ec6 0x2 THUMB Debug/../../obj/uip.o - .bss.uip_draddr - 0x20000ec8 0x4 THUMB Debug/../../obj/uip.o - 0x20000ec8 uip_draddr - .bss.uip_slen 0x20000ecc 0x2 THUMB Debug/../../obj/uip.o - 0x20000ecc uip_slen - *fill* 0x20000ece 0x2 00 - .bss.uip_buf 0x20000ed0 0x644 THUMB Debug/../../obj/uip.o - 0x20000ed0 uip_buf - .bss.uip_appdata - 0x20001514 0x4 THUMB Debug/../../obj/uip.o - 0x20001514 uip_appdata - .bss.iss 0x20001518 0x4 THUMB Debug/../../obj/uip.o - .bss.uip_hostaddr - 0x2000151c 0x4 THUMB Debug/../../obj/uip.o - 0x2000151c uip_hostaddr - .bss.uip_flags - 0x20001520 0x1 THUMB Debug/../../obj/uip.o - 0x20001520 uip_flags - *fill* 0x20001521 0x3 00 - .bss.uip_acc32 - 0x20001524 0x4 THUMB Debug/../../obj/uip.o - 0x20001524 uip_acc32 - .bss.lastport 0x20001528 0x2 THUMB Debug/../../obj/uip.o - .bss.tmp16 0x2000152a 0x2 THUMB Debug/../../obj/uip.o - .bss.uip_ethaddr - 0x2000152c 0x8 THUMB Debug/../../obj/uip.o - 0x2000152c uip_ethaddr - .bss.c 0x20001534 0x1 THUMB Debug/../../obj/uip.o - *fill* 0x20001535 0x3 00 - .bss.uip_listenports - 0x20001538 0x4 THUMB Debug/../../obj/uip.o - 0x20001538 uip_listenports - .bss.uip_sappdata - 0x2000153c 0x4 THUMB Debug/../../obj/uip.o - 0x2000153c uip_sappdata - .bss.opt 0x20001540 0x1 THUMB Debug/../../obj/uip.o - .bss.i 0x20001541 0x1 THUMB Debug/../../obj/uip_arp.o - .bss.tmpage 0x20001542 0x1 THUMB Debug/../../obj/uip_arp.o - *fill* 0x20001543 0x1 00 - .bss.arp_table - 0x20001544 0x60 THUMB Debug/../../obj/uip_arp.o - .bss.c 0x200015a4 0x1 THUMB Debug/../../obj/uip_arp.o - .bss.arptime 0x200015a5 0x1 THUMB Debug/../../obj/uip_arp.o - *fill* 0x200015a6 0x2 00 - .bss.ipaddr 0x200015a8 0x4 THUMB Debug/../../obj/uip_arp.o - .bss.libdebugio.dbgCommWord - 0x200015ac 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - 0x200015ac dbgCommWord - .bss.libdebugio.dbgCntrlWord_mempoll - 0x200015b0 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - 0x200015b0 dbgCntrlWord_mempoll - *(COMMON) - 0x200015b4 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x200015b4 __bss_load_end__ = __bss_end__ - 0x00000001 . = ASSERT (((__bss_end__ >= __RAM_segment_start__) && (__bss_end__ <= __RAM_segment_end__)), error: .bss is too large to fit in RAM memory segment) - 0x200015b4 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) - -.non_init 0x200015b4 0x0 - 0x200015b4 __non_init_start__ = . - *(.non_init .non_init.*) - 0x200015b4 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x200015b4 __non_init_load_end__ = __non_init_end__ - 0x00000001 . = ASSERT (((__non_init_end__ >= __RAM_segment_start__) && (__non_init_end__ <= __RAM_segment_end__)), error: .non_init is too large to fit in RAM memory segment) - 0x200015b4 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) - -.heap 0x200015b4 0x800 - 0x200015b4 __heap_start__ = . - *(.heap .heap.*) - 0x20001db4 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x200015b4 0x800 00 - 0x20001db4 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x20001db4 __heap_load_end__ = __heap_end__ - 0x00000001 . = ASSERT (((__heap_end__ >= __RAM_segment_start__) && (__heap_end__ <= __RAM_segment_end__)), error: .heap is too large to fit in RAM memory segment) - 0x20001db4 __stack_load_start__ = ALIGN (__heap_end__, 0x4) - -.stack 0x20001db4 0x800 - 0x20001db4 __stack_start__ = . - *(.stack .stack.*) - 0x200025b4 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x20001db4 0x800 00 - 0x200025b4 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x200025b4 __stack_load_end__ = __stack_end__ - 0x00000001 . = ASSERT (((__stack_end__ >= __RAM_segment_start__) && (__stack_end__ <= __RAM_segment_end__)), error: .stack is too large to fit in RAM memory segment) - 0x200025b4 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) - -.stack_process 0x200025b4 0x0 - 0x200025b4 __stack_process_start__ = . - *(.stack_process .stack_process.*) - 0x200025b4 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) - 0x200025b4 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) - 0x200025b4 __stack_process_load_end__ = __stack_process_end__ - 0x00000001 . = ASSERT (((__stack_process_end__ >= __RAM_segment_start__) && (__stack_process_end__ <= __RAM_segment_end__)), error: .stack_process is too large to fit in RAM memory segment) - 0x200025b4 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) - -.tbss 0x200025b4 0x0 - 0x200025b4 __tbss_start__ = . - *(.tbss .tbss.*) - 0x200025b4 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) - 0x200025b4 __tbss_load_end__ = __tbss_end__ - 0x00000001 . = ASSERT (((__tbss_end__ >= __RAM_segment_start__) && (__tbss_end__ <= __RAM_segment_end__)), error: .tbss is too large to fit in RAM memory segment) - 0x0800f540 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) - -.tdata 0x200025b4 0x0 load address 0x0800f540 - 0x200025b4 __tdata_start__ = . - *(.tdata .tdata.*) - 0x200025b4 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) - 0x0800f540 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) - 0x0800f540 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) - 0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment) - -.tdata_run 0x200025b4 0x0 - 0x200025b4 __tdata_run_start__ = . - 0x200025b4 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) - 0x200025b4 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) - 0x200025b4 __tdata_run_load_end__ = __tdata_run_end__ - 0x200025b4 __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) - 0x00000001 . = ASSERT (((__tdata_run_end__ >= __RAM_segment_start__) && (__tdata_run_end__ <= __RAM_segment_end__)), error: .tdata_run is too large to fit in RAM memory segment) -START GROUP -LOAD THUMB Debug/../../obj/system_stm32f4xx.o -LOAD THUMB Debug/../../obj/misc.o -LOAD THUMB Debug/../../obj/stm32f4xx_adc.o -LOAD THUMB Debug/../../obj/stm32f4xx_can.o -LOAD THUMB Debug/../../obj/stm32f4xx_crc.o -LOAD THUMB Debug/../../obj/stm32f4xx_cryp.o -LOAD THUMB Debug/../../obj/stm32f4xx_cryp_aes.o -LOAD THUMB Debug/../../obj/stm32f4xx_cryp_des.o -LOAD THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o -LOAD THUMB Debug/../../obj/stm32f4xx_dac.o -LOAD THUMB Debug/../../obj/stm32f4xx_dbgmcu.o -LOAD THUMB Debug/../../obj/stm32f4xx_dcmi.o -LOAD THUMB Debug/../../obj/stm32f4xx_dma.o -LOAD THUMB Debug/../../obj/stm32f4xx_exti.o -LOAD THUMB Debug/../../obj/stm32f4xx_flash.o -LOAD THUMB Debug/../../obj/stm32f4xx_fsmc.o -LOAD THUMB Debug/../../obj/stm32f4xx_gpio.o -LOAD THUMB Debug/../../obj/stm32f4xx_hash.o -LOAD THUMB Debug/../../obj/stm32f4xx_hash_md5.o -LOAD THUMB Debug/../../obj/stm32f4xx_hash_sha1.o -LOAD THUMB Debug/../../obj/stm32f4xx_i2c.o -LOAD THUMB Debug/../../obj/stm32f4xx_iwdg.o -LOAD THUMB Debug/../../obj/stm32f4xx_pwr.o -LOAD THUMB Debug/../../obj/stm32f4xx_rcc.o -LOAD THUMB Debug/../../obj/stm32f4xx_rng.o -LOAD THUMB Debug/../../obj/stm32f4xx_rtc.o -LOAD THUMB Debug/../../obj/stm32f4xx_sdio.o -LOAD THUMB Debug/../../obj/stm32f4xx_spi.o -LOAD THUMB Debug/../../obj/stm32f4xx_syscfg.o -LOAD THUMB Debug/../../obj/stm32f4xx_tim.o -LOAD THUMB Debug/../../obj/stm32f4xx_usart.o -LOAD THUMB Debug/../../obj/stm32f4xx_wwdg.o -LOAD THUMB Debug/../../obj/stm32_eth.o -LOAD THUMB Debug/../../obj/clock-arch.o -LOAD THUMB Debug/../../obj/netdev.o -LOAD THUMB Debug/../../obj/boot.o -LOAD THUMB Debug/../../obj/cstart.o -LOAD THUMB Debug/../../obj/led.o -LOAD THUMB Debug/../../obj/main.o -LOAD THUMB Debug/../../obj/timer.o -LOAD THUMB Debug/../../obj/vectors.o -LOAD THUMB Debug/../../obj/net.o -LOAD THUMB Debug/../../obj/uip.o -LOAD THUMB Debug/../../obj/uip_arp.o -LOAD THUMB Debug/../../obj/uip_timer.o -LOAD THUMB Debug/../../obj/uip-fw.o -LOAD THUMB Debug/../../obj/uiplib.o -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcm_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libcpp_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_targetio_impl_v7em_t_le_eabi.a -LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a -END GROUP -OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/../bin/demoprog_olimex_stm32e407.elf elf32-littlearm) - -.debug_frame 0x00000000 0x1eac - .debug_frame 0x00000000 0x38 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_frame 0x00000038 0x1e4 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_frame 0x0000021c 0x124 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_frame 0x00000340 0x30c THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_frame 0x0000064c 0x88 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_frame 0x000006d4 0x224 THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_frame 0x000008f8 0x76c THUMB Debug/../../obj/stm32_eth.o - .debug_frame 0x00001064 0x94 THUMB Debug/../../obj/netdev.o - .debug_frame 0x000010f8 0x8c THUMB Debug/../../obj/boot.o - .debug_frame 0x00001184 0x50 THUMB Debug/../../obj/led.o - .debug_frame 0x000011d4 0x2c THUMB Debug/../../obj/main.o - .debug_frame 0x00001200 0x6c THUMB Debug/../../obj/timer.o - .debug_frame 0x0000126c 0x20 THUMB Debug/../../obj/vectors.o - .debug_frame 0x0000128c 0x64 THUMB Debug/../../obj/net.o - .debug_frame 0x000012f0 0x1b0 THUMB Debug/../../obj/uip.o - .debug_frame 0x000014a0 0xbc THUMB Debug/../../obj/uip_arp.o - .debug_frame 0x0000155c 0x120 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .debug_frame 0x0000167c 0x790 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_frame 0x00001e0c 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_info 0x00000000 0xab08 - .debug_info 0x00000000 0x473 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_info 0x00000473 0xdf4 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_info 0x00001267 0x809 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_info 0x00001a70 0xda0 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_info 0x00002810 0x2b7 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_info 0x00002ac7 0xc4b THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_info 0x00003712 0x1ffe THUMB Debug/../../obj/stm32_eth.o - .debug_info 0x00005710 0x1550 THUMB Debug/../../obj/netdev.o - .debug_info 0x00006c60 0x1161 THUMB Debug/../../obj/boot.o - .debug_info 0x00007dc1 0xe6 THUMB Debug/../../obj/cstart.o - .debug_info 0x00007ea7 0x3ec THUMB Debug/../../obj/led.o - .debug_info 0x00008293 0x157 THUMB Debug/../../obj/main.o - .debug_info 0x000083ea 0x775 THUMB Debug/../../obj/timer.o - .debug_info 0x00008b5f 0x102 THUMB Debug/../../obj/vectors.o - .debug_info 0x00008c61 0x551 THUMB Debug/../../obj/net.o - .debug_info 0x000091b2 0xc8d THUMB Debug/../../obj/uip.o - .debug_info 0x00009e3f 0x694 THUMB Debug/../../obj/uip_arp.o - .debug_info 0x0000a4d3 0x55f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_info 0x0000aa32 0xd6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_abbrev 0x00000000 0x1ee9 - .debug_abbrev 0x00000000 0x158 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_abbrev 0x00000158 0x23e THUMB Debug/../../obj/stm32f4xx_can.o - .debug_abbrev 0x00000396 0x210 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_abbrev 0x000005a6 0x229 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_abbrev 0x000007cf 0x177 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_abbrev 0x00000946 0x1fc THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_abbrev 0x00000b42 0x28e THUMB Debug/../../obj/stm32_eth.o - .debug_abbrev 0x00000dd0 0x32a THUMB Debug/../../obj/netdev.o - .debug_abbrev 0x000010fa 0x2d8 THUMB Debug/../../obj/boot.o - .debug_abbrev 0x000013d2 0x14 THUMB Debug/../../obj/cstart.o - .debug_abbrev 0x000013e6 0x17d THUMB Debug/../../obj/led.o - .debug_abbrev 0x00001563 0x9c THUMB Debug/../../obj/main.o - .debug_abbrev 0x000015ff 0x1db THUMB Debug/../../obj/timer.o - .debug_abbrev 0x000017da 0xd0 THUMB Debug/../../obj/vectors.o - .debug_abbrev 0x000018aa 0x17a THUMB Debug/../../obj/net.o - .debug_abbrev 0x00001a24 0x293 THUMB Debug/../../obj/uip.o - .debug_abbrev 0x00001cb7 0x1cc THUMB Debug/../../obj/uip_arp.o - .debug_abbrev 0x00001e83 0x3e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_abbrev 0x00001ec1 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_loc 0x00000000 0x607f - .debug_loc 0x00000000 0x1a7 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_loc 0x000001a7 0xf06 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_loc 0x000010ad 0x445 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_loc 0x000014f2 0xdb0 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_loc 0x000022a2 0xe6 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_loc 0x00002388 0xaeb THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_loc 0x00002e73 0x1bd0 THUMB Debug/../../obj/stm32_eth.o - .debug_loc 0x00004a43 0xaa THUMB Debug/../../obj/netdev.o - .debug_loc 0x00004aed 0x109 THUMB Debug/../../obj/boot.o - .debug_loc 0x00004bf6 0x6a THUMB Debug/../../obj/led.o - .debug_loc 0x00004c60 0x20 THUMB Debug/../../obj/main.o - .debug_loc 0x00004c80 0x20 THUMB Debug/../../obj/timer.o - .debug_loc 0x00004ca0 0xd9 THUMB Debug/../../obj/net.o - .debug_loc 0x00004d79 0x64e THUMB Debug/../../obj/uip.o - .debug_loc 0x000053c7 0x4c4 THUMB Debug/../../obj/uip_arp.o - .debug_loc 0x0000588b 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - -.debug_aranges 0x00000000 0xc40 - .debug_aranges - 0x00000000 0x28 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_aranges - 0x00000028 0xe0 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_aranges - 0x00000108 0x88 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_aranges - 0x00000190 0x180 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_aranges - 0x00000310 0x48 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_aranges - 0x00000358 0x100 THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_aranges - 0x00000458 0x330 THUMB Debug/../../obj/stm32_eth.o - .debug_aranges - 0x00000788 0x38 THUMB Debug/../../obj/netdev.o - .debug_aranges - 0x000007c0 0x38 THUMB Debug/../../obj/boot.o - .debug_aranges - 0x000007f8 0x20 THUMB Debug/../../obj/cstart.o - .debug_aranges - 0x00000818 0x28 THUMB Debug/../../obj/led.o - .debug_aranges - 0x00000840 0x20 THUMB Debug/../../obj/main.o - .debug_aranges - 0x00000860 0x40 THUMB Debug/../../obj/timer.o - .debug_aranges - 0x000008a0 0x20 THUMB Debug/../../obj/vectors.o - .debug_aranges - 0x000008c0 0x30 THUMB Debug/../../obj/net.o - .debug_aranges - 0x000008f0 0x98 THUMB Debug/../../obj/uip.o - .debug_aranges - 0x00000988 0x40 THUMB Debug/../../obj/uip_arp.o - .debug_aranges - 0x000009c8 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_aranges - 0x00000be0 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_ranges 0x00000000 0xb60 - .debug_ranges 0x00000000 0x18 THUMB Debug/../../obj/system_stm32f4xx.o - .debug_ranges 0x00000018 0xd0 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_ranges 0x000000e8 0x78 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_ranges 0x00000160 0x170 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_ranges 0x000002d0 0x38 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_ranges 0x00000308 0xf0 THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_ranges 0x000003f8 0x320 THUMB Debug/../../obj/stm32_eth.o - .debug_ranges 0x00000718 0x28 THUMB Debug/../../obj/netdev.o - .debug_ranges 0x00000740 0x88 THUMB Debug/../../obj/boot.o - .debug_ranges 0x000007c8 0x18 THUMB Debug/../../obj/led.o - .debug_ranges 0x000007e0 0x10 THUMB Debug/../../obj/main.o - .debug_ranges 0x000007f0 0x30 THUMB Debug/../../obj/timer.o - .debug_ranges 0x00000820 0x10 THUMB Debug/../../obj/vectors.o - .debug_ranges 0x00000830 0x20 THUMB Debug/../../obj/net.o - .debug_ranges 0x00000850 0x88 THUMB Debug/../../obj/uip.o - .debug_ranges 0x000008d8 0x30 THUMB Debug/../../obj/uip_arp.o - .debug_ranges 0x00000908 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_ranges 0x00000b10 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_line 0x00000000 0x4324 - .debug_line 0x00000000 0x21d THUMB Debug/../../obj/system_stm32f4xx.o - .debug_line 0x0000021d 0x560 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_line 0x0000077d 0x3b0 THUMB Debug/../../obj/stm32f4xx_gpio.o - .debug_line 0x00000b2d 0x592 THUMB Debug/../../obj/stm32f4xx_rcc.o - .debug_line 0x000010bf 0x27f THUMB Debug/../../obj/stm32f4xx_syscfg.o - .debug_line 0x0000133e 0x4a4 THUMB Debug/../../obj/stm32f4xx_usart.o - .debug_line 0x000017e2 0xcdb THUMB Debug/../../obj/stm32_eth.o - .debug_line 0x000024bd 0x35c THUMB Debug/../../obj/netdev.o - .debug_line 0x00002819 0x2f9 THUMB Debug/../../obj/boot.o - .debug_line 0x00002b12 0x129 THUMB Debug/../../obj/cstart.o - .debug_line 0x00002c3b 0x222 THUMB Debug/../../obj/led.o - .debug_line 0x00002e5d 0x1e1 THUMB Debug/../../obj/main.o - .debug_line 0x0000303e 0x20b THUMB Debug/../../obj/timer.o - .debug_line 0x00003249 0x123 THUMB Debug/../../obj/vectors.o - .debug_line 0x0000336c 0x1f0 THUMB Debug/../../obj/net.o - .debug_line 0x0000355c 0x548 THUMB Debug/../../obj/uip.o - .debug_line 0x00003aa4 0x2bc THUMB Debug/../../obj/uip_arp.o - .debug_line 0x00003d60 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .debug_line 0x000042b0 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.debug_str 0x00000000 0x423c - .debug_str 0x00000000 0x35a THUMB Debug/../../obj/system_stm32f4xx.o - 0x3a7 (size before relaxing) - .debug_str 0x0000035a 0x5b6 THUMB Debug/../../obj/stm32f4xx_can.o - 0x797 (size before relaxing) - .debug_str 0x00000910 0x38c THUMB Debug/../../obj/stm32f4xx_gpio.o - 0x50c (size before relaxing) - .debug_str 0x00000c9c 0x5be THUMB Debug/../../obj/stm32f4xx_rcc.o - 0x8bb (size before relaxing) - .debug_str 0x0000125a 0x1b6 THUMB Debug/../../obj/stm32f4xx_syscfg.o - 0x358 (size before relaxing) - .debug_str 0x00001410 0x48a THUMB Debug/../../obj/stm32f4xx_usart.o - 0x711 (size before relaxing) - .debug_str 0x0000189a 0x12bd THUMB Debug/../../obj/stm32_eth.o - 0x1569 (size before relaxing) - .debug_str 0x00002b57 0x228 THUMB Debug/../../obj/netdev.o - 0xc93 (size before relaxing) - .debug_str 0x00002d7f 0x23d THUMB Debug/../../obj/boot.o - 0x924 (size before relaxing) - .debug_str 0x00002fbc 0xb3 THUMB Debug/../../obj/led.o - 0x3f0 (size before relaxing) - .debug_str 0x0000306f 0x82 THUMB Debug/../../obj/main.o - 0x205 (size before relaxing) - .debug_str 0x000030f1 0x624 THUMB Debug/../../obj/timer.o - 0x827 (size before relaxing) - .debug_str 0x00003715 0x95 THUMB Debug/../../obj/vectors.o - 0x1cc (size before relaxing) - .debug_str 0x000037aa 0x1d6 THUMB Debug/../../obj/net.o - 0x3c1 (size before relaxing) - .debug_str 0x00003980 0x2de THUMB Debug/../../obj/uip.o - 0x552 (size before relaxing) - .debug_str 0x00003c5e 0x159 THUMB Debug/../../obj/uip_arp.o - 0x348 (size before relaxing) - .debug_str 0x00003db7 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - 0x3fc (size before relaxing) - .debug_str 0x0000416a 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - 0x11b (size before relaxing) - -.comment 0x00000000 0x4e - .comment 0x00000000 0x4e THUMB Debug/../../obj/system_stm32f4xx.o - 0x4f (size before relaxing) - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_can.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_gpio.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_rcc.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_syscfg.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_usart.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32_eth.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/netdev.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/boot.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/led.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/main.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/timer.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/vectors.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/net.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uip.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uip_arp.o - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .comment 0x00000000 0x4f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) - -.ARM.attributes - 0x00000000 0x37 - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/system_stm32f4xx.o - .ARM.attributes - 0x00000033 0x33 THUMB Debug/../../obj/stm32f4xx_can.o - .ARM.attributes - 0x00000066 0x33 THUMB Debug/../../obj/stm32f4xx_gpio.o - .ARM.attributes - 0x00000099 0x33 THUMB Debug/../../obj/stm32f4xx_rcc.o - .ARM.attributes - 0x000000cc 0x33 THUMB Debug/../../obj/stm32f4xx_syscfg.o - .ARM.attributes - 0x000000ff 0x33 THUMB Debug/../../obj/stm32f4xx_usart.o - .ARM.attributes - 0x00000132 0x33 THUMB Debug/../../obj/stm32_eth.o - .ARM.attributes - 0x00000165 0x33 THUMB Debug/../../obj/netdev.o - .ARM.attributes - 0x00000198 0x33 THUMB Debug/../../obj/boot.o - .ARM.attributes - 0x000001cb 0x27 THUMB Debug/../../obj/cstart.o - .ARM.attributes - 0x000001f2 0x33 THUMB Debug/../../obj/led.o - .ARM.attributes - 0x00000225 0x33 THUMB Debug/../../obj/main.o - .ARM.attributes - 0x00000258 0x33 THUMB Debug/../../obj/timer.o - .ARM.attributes - 0x0000028b 0x33 THUMB Debug/../../obj/vectors.o - .ARM.attributes - 0x000002be 0x33 THUMB Debug/../../obj/net.o - .ARM.attributes - 0x000002f1 0x33 THUMB Debug/../../obj/uip.o - .ARM.attributes - 0x00000324 0x33 THUMB Debug/../../obj/uip_arp.o - .ARM.attributes - 0x00000357 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) - .ARM.attributes - 0x00000375 0x2e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) - .ARM.attributes - 0x000003a3 0x2e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.srec b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.srec deleted file mode 100644 index d83faede..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.srec +++ /dev/null @@ -1,856 +0,0 @@ -S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF -S3150800C000B425002033C20008D5D90008D5D90008C0 -S3150800C010D5D90008D5D90008D5D90008D5D900083A -S3150800C020D5D90008D5D90008D5D90008D5D900082A -S3150800C030D5D90008D5D90008D5D90008C1D900082E -S3150800C040D5D90008D5D90008D5D90008D5D900080A -S3150800C050D5D90008D5D90008D5D90008D5D90008FA -S3150800C060D5D90008D5D90008D5D90008D5D90008EA -S3150800C070D5D90008D5D90008D5D90008D5D90008DA -S3150800C080D5D90008D5D90008D5D90008D5D90008CA -S3150800C090D5D90008D5D90008D5D90008D5D90008BA -S3150800C0A0D5D90008D5D90008D5D90008D5D90008AA -S3150800C0B0D5D90008D5D90008D5D90008D5D900089A -S3150800C0C0D5D90008D5D90008D5D90008D5D900088A -S3150800C0D0D5D90008D5D90008D5D90008D5D900087A -S3150800C0E0D5D90008D5D90008D5D90008D5D900086A -S3150800C0F0D5D90008D5D90008D5D90008D5D900085A -S3150800C100D5D90008D5D90008D5D90008D5D9000849 -S3150800C110D5D90008D5D90008D5D90008D5D9000839 -S3150800C120D5D90008D5D90008D5D90008D5D9000829 -S3150800C130D5D90008D5D90008D5D90008D5D9000819 -S3150800C140D5D90008D5D90008D5D90008D5D9000809 -S3150800C150D5D90008D5D90008D5D90008D5D90008F9 -S3150800C160D5D90008D5D90008D5D90008D5D90008E9 -S3150800C170D5D90008D5D90008D5D90008D5D90008D9 -S3110800C180D5D90008D5D90008EE11AA553B -S3150800C18C3A49072291438D4639483A493A4A00F0CA -S3150800C19C39F83A483A493B4A00F034F83A483B49A8 -S3150800C1AC3B4A00F02FF83B483B493C4A00F02AF83A -S3150800C1BC3B483C493C4A00F025F83C483C493D4A3A -S3150800C1CC00F020F83C483D49002200F026F83C488F -S3150800C1DC3C49091A082903DB002202600430016075 -S3150800C1EC2D482E49884205D00268043003B490477E -S3150800C1FC03BCF7E700208646EC4600200021324AAD -S3150800C20C9047FEE7884207D0521A05D003780130CA -S3150800C21C0B700131013AF9D17047884202D002708D -S3150800C22C0130FAE770474EF68850CEF200000168E6 -S3150800C23C51F47001016000BF00BF00BFF1EE100A97 -S3150800C24C50F04070E1EE100A4FF0000080F31488AD -S3150800C25C4EF63C71CEF20001086850F0407008604A -S3150800C26C1A481B490160FFF78BBF0000B425002054 -S3150800C27C2CF500080000002014000020E0C200087D -S3150800C28CE0C2000800F500082CF5000800000020A4 -S3150800C29C0000002000F5000800F5000800F500086D -S3150800C2AC00F5000800F5000800F5000800F5000880 -S3150800C2BC00F500082CF5000814000020B415002021 -S3150800C2CCB4150020B41D002039D9000808ED00E08B -S3090800C2DC00C0000888 -S3150800C2E082B04FF46053C4F202031A6842F00100A8 -S3150800C2F018604FF000029A60196821F0847020F4E3 -S3150800C3008031196043F21000C2F200405860196883 -S3150800C31021F480201860DA60009201921A6842F4CB -S3150800C320803119604FF46050C4F20200036803F4C8 -S3150800C33000320192009901F101010091019B1BB99C -S3150800C340009AB2F5A06FF1D14FF46050C4F2020022 -S3150800C350016811F4003F14BF012100210191019BDE -S3150800C360012B46D14FF46050C4F20200026C42F031 -S3150800C370805101644FF4E043C4F200031A6842F4A2 -S3150800C3804041196083688360826842F40041816095 -S3150800C390836843F4A052826045F20C41C0F24071B2 -S3150800C3A04160036843F0807202604FF46050C4F243 -S3150800C3B00200016811F0007FFBD04FF47053C4F2FD -S3150800C3C0020340F205621A604FF46050C4F202009C -S3150800C3D0816821F003038360826842F0020181606C -S3150800C3E04FF46050C4F20200836803F00C02082A76 -S3150800C3F0FAD102B0704700BF08B54FF4C843C4F27B -S3150800C400000398420CD14FF000704FF0010100F084 -S3150800C41041FB4FF000704FF0000100F03BFB08BDF8 -S3150800C4204FF080604FF0010100F034FB4FF0806060 -S3150800C4304FF0000100F02EFB08BD00BF036823F093 -S3150800C44002020260036843F001020260436813F0C7 -S3150800C450010F0BD14FF6FF73426812F0010F05D199 -S3150800C46003F1FF33426812F0010F6ED0426812F0F2 -S3150800C470010F60D08B79012B02680CBF42F0800255 -S3150800C48022F080020260CB79012B02680CBF42F0D1 -S3150800C490400222F0400202600B7A012B02680CBFB0 -S3150800C4A042F0200222F0200202604B7A012B026839 -S3150800C4B00CBF42F0100222F0100202608B7A012BA8 -S3150800C4C002680CBF42F0080222F008020260CB7A2A -S3150800C4D0012B02680CBF42F0040222F0040202603B -S3150800C4E0CA788B784FEA837343EA02630A7943EA88 -S3150800C4F002434A7943EA0252098801F1FF331A4393 -S3150800C500C261016821F001030360426812F0010F5D -S3150800C5100BD04FF6FF73416811F0010F05D003F1F8 -S3150800C520FF33426812F0010F08D1406880F001021B -S3150800C53002F0010070474FF000007047416811F0A3 -S3150800C540010FF2D0023BE6D1EFE7426812F0010F85 -S3150800C5508CD1023B80D189E770B4837A4FF0010110 -S3150800C56001FA03F14FF4C843C4F20003D3F80022DA -S3150800C57042F00104C3F80042D3F81C426FEA0102F4 -S3150800C5801440C3F81C42037BDBB94FF4C843C4F21A -S3150800C5900003D3F80C521540C3F80C52847AC688A7 -S3150800C5A0458845EA064604F1480443F83460857A26 -S3150800C5B08688048844EA064405F1480503EBC50362 -S3150800C5C05C60047B012C1CD14FF4C843C4F2000301 -S3150800C5D0D3F80C5241EA0506C3F80C62847A068839 -S3150800C5E0458845EA064604F1480443F83460857AE6 -S3150800C5F08688C48844EA064405F1480503EBC50362 -S3150800C6005C60C47A4CB94FF4C843C4F20003D3F84B -S3150800C61004421440C3F8044208E04FF4C843C4F285 -S3150800C6200003D3F804420C43C3F80442038943B910 -S3150800C6304FF4C843C4F20003D3F814422240C3F8A7 -S3150800C64014220289012A08D14FF4C843C4F2000310 -S3150800C650D3F814220A43C3F81422407B012808D1D0 -S3150800C6604FF4C843C4F20003D3F81C221143C3F89D -S3150800C6701C124FF4C841C4F20001D1F8000220F0A0 -S3150800C6800103C1F8003270BC704700BF4FF00003C9 -S3150800C6908371C371037243728372C3728370C370EA -S3150800C6A04FF0030101714FF0020242714FF001038E -S3150800C6B00380704730B401F11B034FEA0314055990 -S3150800C6C005F00403DCB2147244B901F11B034FEA06 -S3150800C6D0031405594FEA5553136007E001F11B058A -S3150800C6E04FEA0513C4584FEAD405556001F11B04F7 -S3150800C6F04FEA04154319445904F0020555725C685B -S3150800C70004F00F0595725B684FEA1324D47400EBA6 -S3150800C710011303F5DC74D3F8B851D572D3F8B851C0 -S3150800C7204FEA15251573D3F8B8514FEA15455573D1 -S3150800C730D3F8B8314FEA136393736368D3736368A6 -S3150800C7404FEA1323137463684FEA134353746368F9 -S3150800C7504FEA1363937421B9C36843F02001C1609B -S3150800C76003E0016941F02002026130BC704700BF56 -S3150800C77019B9C16801F003007047012903D100699E -S3150800C78000F0030070474FF0000070472DE9F001F4 -S3150800C7904FF000034FF001054FF0030705FA03F2C7 -S3150800C7A00C68144094423DD106684FEA430207FAE2 -S3150800C7B002F46FEA040426400660066891F804C08D -S3150800C7C00CFA02FC4CEA060606600E7906F1FF36FC -S3150800C7D0F6B2012E17D886683440846086684C798C -S3150800C7E004FA02F43443846046689CB205FA04FCF1 -S3150800C7F026EA0C064660466891F806C00CFA04F468 -S3150800C800A4B234434460C6689CB24FEA440407FAAB -S3150800C81004F426EA0406C660C468CE7906FA02F26B -S3150800C8202243C26003F101031C4605FA03F20E68AF -S3150800C8301640964253D102E0BDE8F0017047D0F8A1 -S3150800C84000804FEA430207FA02F66FEA060606EA8E -S3150800C850080CC0F800C0D0F8008091F804C00CFAA3 -S3150800C86002FC4CEA080CC0F800C091F804C00CF1B0 -S3150800C870FF3C5FFA8CFCBCF1010F0FD9C668A4B265 -S3150800C8804FEA440407FA04F426EA0406C660C468B4 -S3150800C890CE7906FA02F22243C26020E0D0F8088078 -S3150800C8A006EA08068660866891F805C00CFA02F85A -S3150800C8B048EA06068660D0F804C09EB205FA06F86D -S3150800C8C02CEA080CC0F804C0D0F804C091F8068019 -S3150800C8D008FA06F6B6B246EA0C064660CEE703F153 -S3150800C8E00103102B7FF45AAFA6E700BF01837047F8 -S3150800C8F04183704730B401F007034FEA83034FEAD8 -S3150800C900D10101F1080150F821504FF00F0404FA43 -S3150800C91003F425EA040440F8214050F8214002FABD -S3150800C92003F2144340F8214030BC704710B44FF46A -S3150800C9306053C4F20203996801F00C02042A09D074 -S3150800C940082A0DD0002A38D14FF41053C0F2F40348 -S3150800C950036037E04FF4D853C0F2B703036031E001 -S3150800C9604FF46051C4F202014C684A6802F03F0174 -S3150800C97014F4800F4FF46053C4F202035A68C2F3EA -S3150800C980881319BF4FF4D854C0F2B7044FF41054A3 -S3150800C990C0F2F404B4FBF1F404FB03F14FF4605263 -S3150800C9A0C4F202025368C3F3014404F101044FEAD6 -S3150800C9B04402B1FBF2F1016004E04FF41054C0F2F6 -S3150800C9C0F40404604FF46053C4F202039C68C4F391 -S3150800C9D0031240F20401C2F200018C5C026822FADA -S3150800C9E004F242609C68C4F382240C5D22FA04F4C3 -S3150800C9F084609B68C3F34233C95C22FA01F2C260C1 -S3150800CA0010BC704739B14FF46051C4F202010B6B88 -S3150800CA101843086370474FF46053C4F202031A6B55 -S3150800CA2022EA00001863704739B14FF46051C4F226 -S3150800CA3002010B6C1843086470474FF46053C4F244 -S3150800CA4002031A6C22EA00001864704739B14FF4E1 -S3150800CA506051C4F202014B6C1843486470474FF4A6 -S3150800CA606053C4F202035A6C22EA00005864704705 -S3150800CA7039B14FF46051C4F202010B6918430861D9 -S3150800CA8070474FF46053C4F202031A6922EA0000A1 -S3150800CA901861704739B14FF46051C4F202010B6A4C -S3150800CAA01843086270474FF46053C4F202031A6AC7 -S3150800CAB022EA0000186270474FF0DC03C4F227230D -S3150800CAC01860704730B585B004460D46038A23F4CE -S3150800CAD040504FEA00414FEA1143EA881343238244 -S3150800CAE0A08920F4B05121F00C034FEA03424FEA23 -S3150800CAF012402989AB8841EA030269890A4393B23D -S3150800CB001843A081A28A22F440714FEA01434FEAF2 -S3150800CB101340AA891043A0826846FFF707FF4FF41F -S3150800CB208051C4F201018C4205D04FF4A053C4F2DF -S3150800CB3001039C4201D1039800E00298A28911B230 -S3150800CB40002909DA00EB800101EB81002B684FEA26 -S3150800CB504305B0FBF5F208E000EB800303EB830026 -S3150800CB602D684FEA8502B0FBF2F248F21F51C5F272 -S3150800CB70EB11A1FB02104FEA50134FEA03154FF0D1 -S3150800CB80640103FB1122A08903B2002B0DDA4FEAD8 -S3150800CB90C20202F1320248F21F51C5F2EB11A1FBA3 -S3150800CBA00220C0F342132B430CE04FEA021202F1B3 -S3150800CBB0320248F21F51C5F2EB11A1FB0220C0F365 -S3150800CBC043132B439BB2238105B030BD29B181891C -S3150800CBD08AB242F4005383817047838923F4005153 -S3150800CBE04FEA01424FEA12438381704780884FEA31 -S3150800CBF0C0514FEAD1507047038819420CBF002034 -S3150800CC000120704708B54FF000704FF00101FFF79B -S3150800CC102FFF4FF000704FF00001FFF729FF08BD06 -S3150800CC204FF00003036043608360C36003614361A0 -S3150800CC308361C361036243628362C36203634363BE -S3150800CC408363C3634FF0400202644FF020014164DE -S3150800CC508364C364036543658365C36503664FF0F0 -S3150800CC60800242668366C366036743678367C36752 -S3150800CC704FF08061C0F880104FF00072C0F8842031 -S3150800CC804FF08071C0F888104FF40011C0F88C106E -S3150800CC90C0F89030C0F89430C0F89830C0F89C308E -S3150800CCA0C0F8A030C0F8A420C0F8A8304FF400326D -S3150800CCB0C0F8AC204FF48071C0F8B010C0F8B4309A -S3150800CCC0C0F8B830704700BF82B04FF00003019338 -S3150800CCD04FF40043C4F202031A6902F01C024FEA39 -S3150800CCE0C06042EA10424FEA811101F4F86002433B -S3150800CCF042F001021A614FF40040C4F202004FF6F6 -S3150800CD00FE71C0F20401019B03F10103019302695C -S3150800CD1012F0010F02D0019B8B42F4D901984FF60D -S3150800CD20FF71C0F20401884206D04FF40042C4F2F3 -S3150800CD300202536998B201E04FF0000002B0704752 -S3150800CD4010B483B04FF0000301934FF40043C4F2CC -S3150800CD5002031C6904F01C0444F003044FEAC06093 -S3150800CD6044EA10444FEA811101F4F86004435A6119 -S3150800CD701C614FF40042C4F202024FF6FE71C0F283 -S3150800CD800401019B03F101030193106910F0010FDF -S3150800CD9002D0019B8B42F4D9019A4FF6FF71C0F27B -S3150800CDA00401501A18BF012003B010BC704700BF19 -S3150800CDB0F0B587B004460D464FF00003059300937F -S3150800CDC04FF40040C4F20200066926F01C0601A8CA -S3150800CDD0FFF7ACFD02994FF45342CFF6CE628B189B -S3150800CDE04EF2BF10C0F2E400834202D846F00806AD -S3150800CDF01AE04FF24012CFF6E9528B1847F63F0079 -S3150800CE00C0F27D10834202D846F00C060CE04FF4BF -S3150800CE10F242CFF66C4289184FF4B443C0F262234B -S3150800CE20994288BF46F004064FF40040C4F2020057 -S3150800CE30066128464FF000014FF40042FFF780FFD5 -S3150800CE40002800F01C814FF080620592059931B1E7 -S3150800CE50059B03F1FF300590059A002AF8D1216851 -S3150800CE60002963D04FF001074FF6FE76C0F204069C -S3150800CE70009800F10100009028463946FFF724FF84 -S3150800CE8000F0040293B213B90099B142F0D90098A0 -S3150800CE904FF6FF72C0F20402904200F0F3804FF0A2 -S3150800CEA00001009128464FF48052FFF749FF0028F9 -S3150800CEB000F0EB804FF001074FF6FE76C0F204064D -S3150800CEC0009B03F10103009328463946FFF7FCFE51 -S3150800CED000F0200188B210B9009AB242F0D9009940 -S3150800CEE04FF6FF73C0F20403994200F0D1804FF069 -S3150800CEF00000009028464FF01001FFF7E5FE00F00D -S3150800CF00040291B219B14FF40062226202E04FF0B6 -S3150800CF100003236200F0020081B219B14FF000024B -S3150800CF2062611EE04FF4804363611AE06369206A18 -S3150800CF304FEAD00242EA530328464FF000019AB25C -S3150800CF40FFF7FEFE002800F0A6806FF07F410591EE -S3150800CF50059830B1059A02F1FF3305930599002922 -S3150800CF60F8D14FF40043C4F20203186848F20F12CE -S3150800CF70CFF620720240A06861680843E16808435A -S3150800CF802169084361690843A1690843E1690843BF -S3150800CF90216A0843616A0843A16A0843E16A0843AB -S3150800CFA0216B0843616B084302431A60E16BA06B6F -S3150800CFB00143226C1143606C0143A26C1143E06C7F -S3150800CFC00143226D1143606D01435960A26D9A6059 -S3150800CFD0E06DD8609869A16E626E1143E26E1143E6 -S3150800CFE0226F1143626F11434FF64172024041EAC4 -S3150800CFF00200216E40EA01429A61E06FA16F40EAA1 -S3150800D0000102DA6103F58053986943F62372CFF675 -S3150800D010DE020240D4F88400D4F880100843D4F81D -S3150800D02088100843D4F88C100843D4F890100843A5 -S3150800D030D4F894100843D4F898100843D4F89C10F0 -S3150800D0400843D4F8A010084302439A61D4F8A41000 -S3150800D050D4F8A800014341F40001D4F8AC201143E8 -S3150800D060D4F8B0000143D4F8B82041EA0200D4F855 -S3150800D070B41040EA81021A604FF001000DE04FF04B -S3150800D08000000AE04FF0000007E04FF0000004E05F -S3150800D0904FF0000001E04FF0000007B0F0BD00BF00 -S3150800D0A040B14FF40041C4F202010B6843F0080294 -S3150800D0B00A6070474FF40043C4F202031A6822F06C -S3150800D0C008001860704700BF40B14FF40041C4F231 -S3150800D0D002010B6843F004020A6070474FF40043EC -S3150800D0E0C4F202031A6822F004001860704700BFF1 -S3150800D0F04FF41043C4F202031A6842F001001860A4 -S3150800D100704700BF4FF41043C4F20203186800F0DA -S3150800D110010070474FF41043C4F202039A6942F4BF -S3150800D12080109861704700BF40B14FF41041C4F2B7 -S3150800D13002018B6943F400528A6170474FF4104329 -S3150800D140C4F202039A6922F400509861704700BF3E -S3150800D15040B14FF41041C4F202018B6943F0020258 -S3150800D1608A6170474FF41043C4F202039A6922F0A9 -S3150800D17002009861704700BF08B54FF00100FFF73D -S3150800D1808FFFFFF7C7FF4FF00100FFF79DFF4FF036 -S3150800D1900100FFF7C9FF4FF00100FFF7D9FF08BDEF -S3150800D1A02DE9F04FB3B04FF0F0504FF00101FFF703 -S3150800D1B029FC4FF047004FF00101FFF723FC4FF41D -S3150800D1C080404FF00101FFF741FC4FF00100FFF7E7 -S3150800D1D073FC4FF08E0330934FF000068DF8C6604F -S3150800D1E04FF002058DF8C4508DF8C7608DF8C5500C -S3150800D1F03746C4F20207384630A9FFF7C7FA384659 -S3150800D2004FF001014FF00B02FFF774FB3846294631 -S3150800D2104FF00B02FFF76EFB38464FF003014FF055 -S3150800D2200B02FFF767FB38464FF007014FF00B027A -S3150800D230FFF760FB4FF4006030908DF8C6608DF8FC -S3150800D240C4508DF8C7608DF8C5504FF4C057C4F266 -S3150800D2500207384630A9FFF799FA38464FF00B010E -S3150800D2600A46FFF747FB4FF0320130918DF8C6604A -S3150800D2708DF8C4508DF8C7608DF8C5504FF4006816 -S3150800D280C4F20208404630A9FFF780FA40464FF03C -S3150800D29001014FF00B02FFF72DFB40464FF004014A -S3150800D2A04FF00B02FFF726FB40464FF005014FF003 -S3150800D2B00B02FFF71FFB4FF4C04230928DF8C66091 -S3150800D2C08DF8C4508DF8C7608DF8C550384630A91A -S3150800D2D0FFF75CFA38464FF00D014FF00B02FFF7E7 -S3150800D2E009FB38464FF00E014FF00B02FFF702FB21 -S3150800D2F0FFF788FCFFF7FCFEFFF704FF0128FBD0C9 -S3150800D30001A8FFF78DFC4FF00005019508954FF42D -S3150800D31000730B930C954FF000460F964FF02000C4 -S3150800D32012901495159516954FF4006709974FF4C2 -S3150800D330804106914FF0020A4FF0030941F219673E -S3150800D340C0F222074CF2F108C0F20708AEB2304626 -S3150800D3505146FFF7B9FC60F31F4430464946FFF7CC -S3150800D360B3FC60F30F04BC4214D0444512D005F157 -S3150800D370010B5D461FFA8BF630465146FFF7A4FCB3 -S3150800D38060F31F4430464946FFF79EFC60F30F04DE -S3150800D390BC4234D101A8A9B2FFF70AFD40F2807356 -S3150800D3A0C2F2000340F60002C2F200029A60DB6095 -S3150800D3B04FF000021A605A604FF41041C4F202019D -S3150800D3C00B6140F28003C2F2000340F20010C2F281 -S3150800D3D0000098601A60DB605A604FF040025A718C -S3150800D3E09A884FF4C86060F30C029A804FF0800266 -S3150800D3F0DA70CB60FFF7C0FE33B0BDE8F08F444566 -S3150800D400C8D00BF10105202DA0D1C3E741F22C535A -S3150800D410C2F200034FF008021A704FF0000058706D -S3150800D4204FF0270199704FF06902DA704FF05B00F0 -S3150800D43018714FF045015971704700BF38B540F271 -S3150800D4408003C2F20003D87810F0800F1FD140F293 -S3150800D4508005C2F200056C884FEA84414FEA914480 -S3150800D46040F6D060C2F2000040F20011C2F200019C -S3150800D470224601F0C7FFEA7842F08003EB704FF4CA -S3150800D4801040C4F202004FF00101816001E04FF044 -S3150800D4900004204638BD00BF38B540F28073C2F29A -S3150800D4A00003D87810F0800F2CD140F60005C2F2A0 -S3150800D4B0000540F6C464C2F20004284640F6D0616E -S3150800D4C0C2F20001228801F09DFF40F28073C2F289 -S3150800D4D000039D604FF000021A604FF0100199702A -S3150800D4E05A6020884FEA00524FEA125199804FF04D -S3150800D4F0B000D8704FF41043C4F202034FF0010293 -S3150800D5005A6038BDFEE700BF10B504464FF4A05078 -S3150800D510C4F201004FF02001FFF76EFB012809D184 -S3150800D5204FF4A050C4F20100FFF760FB20704FF0E3 -S3150800D530010010BD4FF0000010BD00BF2DE9F04FEF -S3150800D5408DB04FF020004FF00101FFF77FFA4FF042 -S3150800D55004004FF00101FFF755FA4FF4006AC4F2D0 -S3150800D560020A50464FF006014FF00802FFF7C2F9CB -S3150800D57050464FF007014FF00802FFF7BBF94FF08E -S3150800D58000048DF81A404FF001098DF81B904FF0F2 -S3150800D59002088DF818804FF0400305938DF819801E -S3150800D5A0504605A9FFF7F2F88DF818804FF080006D -S3150800D5B00590504605A9FFF7E9F84FF4614108912F -S3150800D5C0A346ADF82440ADF82640ADF82840ADF89E -S3150800D5D02C404FF00C02ADF82A204FF4A056C4F2A6 -S3150800D5E00106304608A9FFF76DFA30464946FFF7A7 -S3150800D5F0EDFA40464946FFF705FA4FF4806AC4F249 -S3150800D600020A50464FF005014FF00902FFF772F97A -S3150800D61050464FF006014FF00902FFF76BF94FF03D -S3150800D620600303938DF810808DF811808DF81240F1 -S3150800D6308DF81390504603A9FFF7A8F84FF0C0607D -S3150800D6404946FFF7F1F94FF4D040C4F20000FEF75F -S3150800D650D3FE05A8FFF71AF822464FF20050C0F687 -S3150800D66000004FF4FA714AF2104340F2FF39145C95 -S3150800D67000EB020E9EF801E004EB0E0C0CFB011603 -S3150800D68093FBF6F806FB183636B9454608F1FF3C13 -S3150800D6901FFA8CF64E4512D902F10202845C00EBA1 -S3150800D6A0020E9EF801E004EB0E0C0CFB011693FB30 -S3150800D6B0F6F806FB1838B8F1000F4BD142E0CDF862 -S3150800D6C004E027464FF000048DF81A408DF81B40F9 -S3150800D6D08DF81C408DF81D408DF81E408DF81F40B2 -S3150800D6E08DF816408DF8174007F1FF378DF818703A -S3150800D6F0019A02F1FF368DF819600CA921F81C5D14 -S3150800D7004FF4D040C4F20000FEF798FE4FF00E002A -S3150800D7108DF82A008DF82B404FF001018DF82C105A -S3150800D720ADF82040ADF82240ADF82440ADF82640CB -S3150800D730ADF828408DF82D1008A8FEF70DFF0DB09E -S3150800D740BDE8F08F93FBF6F505F1FF3C1FFA8CF662 -S3150800D7504E45B4D902F10202242A88D1B2E700BFA5 -S3150800D760BFF34F8F4FF46D42CEF20002D16801F439 -S3150800D770E0604FF00403C0F2FA5340EA0301D160B7 -S3150800D780BFF34F8FFEE700BF00B587B040F685634D -S3150800D790C2F200031878B0B940F64060C2F2000041 -S3150800D7A0FFF7B2FE012844D140F68560C2F20000B8 -S3150800D7B04FF00102027040F68461C2F200014FF098 -S3150800D7C000030B7035E040F68461C2F200010A7866 -S3150800D7D002F1010240F64063C2F200039818FFF70F -S3150800D7E093FE012825D140F68460C2F20000017834 -S3150800D7F001F10101CBB2037040F64062C2F20002A9 -S3150800D8001078984215D140F68561C2F200014FF0B2 -S3150800D81000030B7040F64062C2F200025078FF28FF -S3150800D82007D140F64061C2F200018B780BB9FFF7C9 -S3150800D83097FF4FF4D040C4F200004FF00001FEF706 -S3150800D84097FFB0B14FF4D040C4F200004FF000018A -S3150800D85001AAFEF72FFF40F26760019A824208D1BB -S3150800D8609DF80F10FF2904D19DF810300BB9FFF76A -S3150800D87077FF07B000BD00BF30B583B04FF0040096 -S3150800D8804FF00101FFF7BEF84FF4005500954FF031 -S3150800D89001038DF804304FF000028DF806208DF84C -S3150800D8A007304FF002008DF805004FF40064C4F20B -S3150800D8B0020420466946FEF769FF20462946FFF717 -S3150800D8C015F803B030BD00BF10B500F073F8044674 -S3150800D8D040F68863C2F200031868211AB1F5FA7F88 -S3150800D8E029D340F68C62C2F2000213787BB940F65F -S3150800D8F08C63C2F200034FF001021A704FF4006005 -S3150800D900C4F202004FF40051FEF7F2FF0EE040F6B3 -S3150800D9108C60C2F200004FF0000101704FF4006005 -S3150800D920C4F202004FF40051FEF7E0FF40F68860AB -S3150800D930C2F20000046010BD08B5FEF7D1FCFFF77F -S3150800D9409BFF00F011F800F047F8FFF7F7FDFFF727 -S3150800D950BBFF00F099F8FFF717FFF8E740F690636A -S3150800D960C2F200031860704708B540F20003C2F21D -S3150800D97000031A6844F6D350C1F26200A0FB0213F2 -S3150800D9804FEA931101F1FF324EF21003CEF2000373 -S3150800D9905A604FF46D40CEF200004FF0F00180F867 -S3150800D9A023104FF0000098604FF007021A60FFF747 -S3150800D9B0D5FF08BD40F69063C2F2000318687047A9 -S3150800D9C040F69063C2F200031A6802F101021A6077 -S3150800D9D0704700BFFEE700BF08B5FFF7E1FBFFF79A -S3150800D9E0E9FF00F5FA7040F69863C2F20003186082 -S3150800D9F0FFF7E0FF00F51C5101F1100140F69462B3 -S3150800DA00C2F20002116000F083F941F21C50C2F222 -S3150800DA1000004FF6A962028043F61373438040F66E -S3150800DA20C060C2F200004FF6FF7101804FF000039C -S3150800DA30438040F6C860C2F20000028040F213122A -S3150800DA4042804EF6030000F07FF9FFF7DFFC08BDC1 -S3150800DA5008B541F22053C2F20003187800F04002DC -S3150800DA60D1B279B900F00203D8B258B141F21452D2 -S3150800DA70C2F2000211680B79FF2B03D1487908B965 -S3150800DA80FFF76EFE08BD00BF10B5FFF7D7FC0028EC -S3150800DA9041D040F6C462C2F20002108040F6D0605F -S3150800DAA0C2F2000084894FF4006000F069F98442EC -S3150800DAB015D14FF0010000F0A1F940F6C463C2F297 -S3150800DAC000031A883AB301F013FBFFF7E5FC40F6AA -S3150800DAD0C460C2F200004FF0000101801BE040F66E -S3150800DAE0D061C2F200018C8940F6060000F048F9C0 -S3150800DAF0844210D101F056FA40F6C463C2F200031C -S3150800DB001A8842B1FFF7C8FC40F6C460C2F20000AA -S3150800DB104FF000010180FFF74DFF40F69863C2F20F -S3150800DB2000031A68904224D302F5FA7040F6986109 -S3150800DB30C2F20001086040F69C63C2F2000340F698 -S3150800DB40A062C2F200021A604FF0020000F056F915 -S3150800DB5040F6C460C2F20000018851B101F0C8FA6B -S3150800DB60FFF79AFC40F6C463C2F200034FF00002C6 -S3150800DB701A80FFF71FFF40F69461C2F200010B6896 -S3150800DB8098420AD303F51C5000F1100040F694623F -S3150800DB90C2F20002106001F0CBF910BD70B402F1B8 -S3150800DBA0FF328C18A1422ED20B466FEA0105661980 -S3150800DBB0C6F340060D784A7802EB052292B2801821 -S3150800DBC080B282422FD92BE01D785A7802EB0525C0 -S3150800DBD0AAB2801880B2824284BF013080B203F1B3 -S3150800DBE002029D78537803EB05239BB2C01880B2D6 -S3150800DBF0834231D92DE06FEA0102A31823F001020E -S3150800DC0002F102028918A14208D109784FEA0123D4 -S3150800DC10181880B2834284BF013080B270BC704746 -S3150800DC2000F1010080B203F102039C42E3D9002E01 -S3150800DC30CAD01D785A7802EB052292B2801880B2B3 -S3150800DC40824284BF013080B203F102039C42BBD8F2 -S3150800DC50D1E700F1010080B202F102039C42B3D879 -S3150800DC60C9E700BF70B4C4780A19D4B241F2245384 -S3150800DC70C2F20003DC704FEA11258678AA19D2B2DF -S3150800DC809A7046785E700078187095420FD906F13A -S3150800DC900106F6B241F22453C2F200035E7036B9A9 -S3150800DCA000F1010041F22453C2F200031870C9B210 -S3150800DCB08C4212DA02F10102D2B241F22450C2F2C7 -S3150800DCC0000082704AB9437803F10103DAB2427060 -S3150800DCD01AB9017801F10101017070BC704700BFE3 -S3150800DCE010B50146084C206800F10800FFF7BAFF96 -S3150800DCF02368064A11781972507858729178997281 -S3150800DD00D278DA7210BD00BF9C0E002024150020C0 -S3150800DD104FF0000341F23851C2F200010B8040F681 -S3150800DD20A060C2F20000437641F23453C2F2000307 -S3150800DD304FF001021A7041F22851C2F200014FF465 -S3150800DD4080600880704700BF41F23453C2F2000376 -S3150800DD504FF000021A7041F23851C2F200010B88E6 -S3150800DD602BB941F23851C2F200010880704741F2DE -S3150800DD703450C2F200004FF001020270704700BF33 -S3150800DD804FEA102343EA002080B2704738B540F6C0 -S3150800DD90D064C2F20004657CA5F11405237C05EB6A -S3150800DDA003218DB2401980B204F11A014FF008021E -S3150800DDB0FFF7F4FE04F122012A46FFF7EFFE10B141 -S3150800DDC0FFF7DEFF38BD4FF6FF7038BD08B54FF0D8 -S3150800DDD00600FFF7DBFF08BD08B54FF0000006494F -S3150800DDE04FF01402FFF7DAFE10B1FFF7C9FF08BDBE -S3150800DDF04FF6FF7008BD00BFDE0E002038B540F6AE -S3150800DE009C63C2F200031C68A84941F21452C2F28C -S3150800DE100002116041F23C53C2F200031960032864 -S3150800DE2014D1637E03F00F00032840F05986228A36 -S3150800DE30002A40F0558641F22051C2F200014FF007 -S3150800DE4008030B70FFF704FE00F08FBC022840F0B1 -S3150800DE50AC8041F21852C2F20002D37803F10103F2 -S3150800DE60D8B2D070C0B941F21851C2F200018A780E -S3150800DE7002F10102D3B28B7073B941F21850C2F2A3 -S3150800DE800000417801F10101CAB2427022B9034685 -S3150800DE90007800F1010018704FF0000140F6C462E6 -S3150800DEA0C2F20002118040F6CC63C2F20003198068 -S3150800DEB0607E072801D005280CD1A07E00F101005C -S3150800DEC0C2B2A276782A40F00B864FF0000161763E -S3150800DED000F006BE002800F00386218A002955D0E6 -S3150800DEE0A27E02F1FF31A176002A40F0F985E37E91 -S3150800DEF0082B06D000F1FF32D1B2012917D8052B1D -S3150800DF0015D14FF00000607641F22055C2F20005A7 -S3150800DF104FF080022A70FFF79BFD40F6D061C2F2EF -S3150800DF2000014FF0140381F82F3000F042BD042B96 -S3150800DF309DBF03219940C9B23021A17603F101039F -S3150800DF40E37600F00F0000F1FF33072B00F2C885D7 -S3150800DF50DFE813F0DC0108001100BD03C605BD03A8 -S3150800DF60C605BD0340F6D063C2F200034FF00005B4 -S3150800DF7083F82F50D2E141F22051C2F200014FF04E -S3150800DF8004000870FFF764FD00F047BC00F00F02BC -S3150800DF90032A40F0A58541F22053C2F200034FF050 -S3150800DFA008001870FFF754FDDFE340F6D060C2F2B0 -S3150800DFB00000817B452940F0938540F6D063C2F284 -S3150800DFC000031A7C587C00EB022340F6C461C2F2B7 -S3150800DFD000010A88934200F383859CB240F6C46028 -S3150800DFE0C2F20000048040F6D063C2F20003197D35 -S3150800DFF011F03F0F40F0748540F6D062C2F200027D -S3150800E000507D002840F06C8541F21C55C2F200058F -S3150800E0102D882DB941F21C53C2F200035988A1B1CB -S3150800E02040F6D062C2F20002D08BA84240F0588572 -S3150800E03040F6D063C2F20003198C41F21C52C2F2B8 -S3150800E04000025088814240F04B85FFF7C5FE4FF627 -S3150800E050FF73984240F0448540F6D061C2F2000151 -S3150800E060CA7D062A28D0012A40F03A85104890F839 -S3150800E0702230082B40F034850D494FF0000281F814 -S3150800E0802220888C4FF6F67398428CBF09300830E8 -S3150800E090074988840648428BC283838B0384458359 -S3150800E0A004494A88828300F013BD00BF060F00208A -S3150800E0B0D00E00201C150020FFF788FE4FF6FF73D0 -S3150800E0C0984240F00D85B548417EC1B1B44A908C5E -S3150800E0D0B24B9A88904212D1B148428CAF4BD8883D -S3150800E0E082420CD1AE4A508BAC4B1A88904206D16C -S3150800E0F0AB48828BA94B5888824200F03581A849E3 -S3150800E10091F82F2002F03F03022B0FD1A448828CEE -S3150800E110A4490A80A44B4FF000001870A3490B8845 -S3150800E120934262D0A0484FF0010202709C4991F8D0 -S3150800E1302F0000F00403DAB2002A40F0D184984B8D -S3150800E1404FF0140483F82F40994D4FF02801298089 -S3150800E1504FF0500083F82E0093F8294093F82D20AD -S3150800E16083F8292093F8280093F82C5083F8285030 -S3150800E17083F82C0093F8271093F82B2083F8272090 -S3150800E18083F82B1093F82620874D2A7093F82A5087 -S3150800E19083F8265083F82A2004F10104E4B283F8B0 -S3150800E1A02D4084B900F10103DDB27D4880F82C507A -S3150800E1B04DB901F10101CCB280F82B401CB902F12E -S3150800E1C0010280F82A207648428C76490A80848C97 -S3150800E1D044848284438BC383858B0584754A11885E -S3150800E1E041835488848300F03EBC6C494B7E23B13E -S3150800E1F0072B40F0888400F080BC684B6E490B60A2 -S3150800E2004FF00300987618764FF000049C754FF08F -S3150800E2100405DD75DC769A80614C628CDA80618B48 -S3150800E2201980A08B58804FF001005876634D2A78E4 -S3150800E2301A7369785973AA789A73ED78DD73188218 -S3150800E24094F82910D97294F828209A7294F82750CD -S3150800E2505D7294F826101972FFF742FD94F82E3075 -S3150800E26003F0F004502C50DD4FEA1310A0F105021C -S3150800E2704FEA8204524D2A784FF0000348483BE0A3 -S3150800E280C21892F836202AB947490B704C4C2270AE -S3150800E290424C3BE0012A03D103F10103DBB22BE038 -S3150800E2A0022A1DD1451895F83750042D18D13E4A33 -S3150800E2B01370434D4FF002032B703948411891F8FB -S3150800E2C0384091F8392042EA0425364B1D8040F241 -S3150800E2D00A60854228BF0546304C6582A58215E04E -S3150800E2E0411891F837502DB92F480370344C2270D5 -S3150800E2F02A4C0BE0EB18DBB21946A342C0DB2A4CCA -S3150800E30023702F4B1A70254C00E0244C40F6D06140 -S3150800E310C2F200014FF0100281F82F2040F6D060BB -S3150800E320C2F2000090F82F3043F0020580F82F5013 -S3150800E3304FF0020180F836104FF0040280F83720BB -S3150800E3404FF0060380F838304FF00A0580F8395048 -S3150800E35040F6C462C2F200024FF02C0111804FF061 -S3150800E360600380F82E3033E30C4A134B1A601548C5 -S3150800E3704FF0000202700A4B93F82F3003F00400A6 -S3150800E380C2B20AB3054B4FF000025A760D484FF059 -S3150800E39020010170FFF75CFBA2E300BFA00E00207E -S3150800E3A0D00E00202A15002034150020381500202C -S3150800E3B0C40E00201C1500209C0E002018150020F5 -S3150800E3C04015002020150020A04890F82E204FEA7E -S3150800E3D012104FEA80029E480270A4F11404A21A91 -S3150800E3E092B29C48028001F00F01022903D103F082 -S3150800E3F03F00122811D012B913F0030F0DD0934A1B -S3150800E400D18C95480289914240F0CD828F49088D7A -S3150800E410914A5189884240F0C68203F01003D8B267 -S3150800E42000284FD08C4A118A00294BD002F10C00E3 -S3150800E430FFF718FC854C94F82A4088490B78A342C4 -S3150800E44040D1824890F82B00844A5178814239D1CC -S3150800E4507E4B93F82C10814A93788B4232D17B4AB3 -S3150800E46092F82D207D4BDB7893422BD17A4B1C7387 -S3150800E47058739973DA73D87ED0B9774B987D197E1D -S3150800E4809A7E891AA1EBD002D1B2CAB20818C0B2D4 -S3150800E490987512F0800F1CBF4A42D2B26E4BD97DD6 -S3150800E4A0A1EB91018A18D1B2D97501EBD000187683 -S3150800E4B06B4B4FF001021A706749087E88764FF059 -S3150800E4C000030B82644A537E03F00F0101F1FF300B -S3150800E4D0072800F20583DFE810F008002A00CD00BF -S3150800E4E0EE01370258026602DD015D4A117811F025 -S3150800E4F0010F00F0F582584C4FF003006076584B38 -S3150800E5004FF040021A704FF000012182514C2088CA -S3150800E51028B1534B4FF042021A70FFF7E1FB5148FE -S3150800E5204FF000010180FFF793FA4B4C1DE14C4A6E -S3150800E530137813F0010F7DD0444991F82F0000F0AD -S3150800E5403F02122A76D1414890F82E3003F0F002A5 -S3150800E550502A4CDD4FEA1311A1F105044FEA840451 -S3150800E560414802784FF00003384839E0C21892F85B -S3150800E570362022B9364803703B4B1A7037E0012A19 -S3150800E58003D103F10103DBB22AE0022A1DD14518A3 -S3150800E59095F83750042D18D12D4A1370324B4FF089 -S3150800E5A002001870294C611891F8382091F8393012 -S3150800E5B043EA02202D4C208040F20A61884238BF87 -S3150800E5C00146254A5182918211E0411891F8371087 -S3150800E5D021B91F480370244C227008E0CB18DBB21F -S3150800E5E01946A342C2DB1A4C23701F4B1A701A4CE9 -S3150800E5F04FF003016176154890F82620227290F8AC -S3150800E6002730637290F82810A17290F82900E072FA -S3150800E6104FF00100FFF764FB114B4FF042021A70EE -S3150800E6204FF0000121820B4801800E4B1980FFF73D -S3150800E6300FFA9AE00A4B4FF020011970FFF708FA13 -S3150800E6400B4803684FF000025A766FE5D00E00209B -S3150800E65034150020C40E0020A00E0020241500202A -S3150800E66020150020CC0E0020401500202A15002079 -S3150800E6709C0E0020AD4890F82F2012F0010F2FD0E5 -S3150800E68003F01001C8B258BBA94B188A002840F0FD -S3150800E6902782A84D2A8802F1010290B2FFF720FBD3 -S3150800E6A0A54C237843F010012170288818B143F04F -S3150800E6B01205A14A1570FFF7CBF99D4C4FF00103DF -S3150800E6C023824FF0080161764FF00000E07640F6AD -S3150800E6D0D065C2F200054FF0110285F82F2068E1D7 -S3150800E6E002F02002D1B281B1904D95F834404FEA3C -S3150800E6F0042095F83510914A40EA01051468641912 -S3150800E70014608C4A1088411B11808A4A108850B1BF -S3150800E71003F01003D9B231B9874B1A7842F00201D7 -S3150800E7201970FFF7DDFA814890F8302090F83130FB -S3150800E73003EB022188B2824A10807D4B998A88426F -S3150800E74000D808B97E4801807D4A1188784B5982DD -S3150800E7507948027812F0030F00F0C281794C4FF025 -S3150800E76000012180FFF774F9714C41F22050C2F282 -S3150800E7700000017801F02002D3B283B14FF0000007 -S3150800E78040F6CC61C2F200010880607640F6D0659A -S3150800E790C2F200054FF0140285F82F2009E101F0B6 -S3150800E7A01000C2B2B2B14FF0000540F6CC61C2F219 -S3150800E7B000010D804FF0010020824FF004036376BC -S3150800E7C0E57640F6D065C2F200054FF0110285F8ED -S3150800E7D02F20EEE040F6CC63C2F200031888C8B1D9 -S3150800E7E011F0010F03D04FF00003238201E0218AC4 -S3150800E7F059B9618A884284BF5248018040F6CC6084 -S3150800E800C2F200000288228204E040F6CC62C2F21C -S3150800E810000211804FF00003E37641F23C51C2F248 -S3150800E8200001086841F21452C2F20002106040F674 -S3150800E830CC63C2F20003198889B1208A78B100F145 -S3150800E840280040F6C465C2F20005288040F6D0606C -S3150800E850C2F200004FF0180380F82F30B0E041F202 -S3150800E8602052C2F20002137803F00201C8B200284F -S3150800E87000F0368140F6C465C2F200054FF0280361 -S3150800E8802B8040F6D061C2F200014FF0100281F8E9 -S3150800E8902F2095E0284A137813F0010F00F0208105 -S3150800E8A023494FF000004876234B4FF010021A70A8 -S3150800E8B0FFF7CEF814E11F48008808B1FFF710FAF1 -S3150800E8C01A4B93F82F1011F0010F1CD01A4D2C7803 -S3150800E8D014F0010F08D0164B4FF007025A764FF086 -S3150800E8E000059D761D8203E011494FF00600487623 -S3150800E8F04FF00100FFF7F4F90F4C4FF010012170AB -S3150800E900FFF7A6F84FE00C4A107810F0010F07D071 -S3150800E91007484FF0050242764FF000030382DFE016 -S3150800E920044B198800293ED1DAE000BFD00E00203A -S3150800E930A00E0020C40E002020150020141500206B -S3150800E9402A150020CC0E00207148008808B1FFF770 -S3150800E950C7F9704B93F82F2012F0010F11D06E4DA6 -S3150800E9604FF007046C764FF00003AB764FF00100CA -S3150800E970FFF7B6F969494FF010020A70FFF768F811 -S3150800E98011E06349088870B9AAE06449087810F06C -S3150800E990010F00F0A580604B4FF007025A764FF042 -S3150800E9A0000199769CE05B4D4FF0100485F82F40E6 -S3150800E9B0594C40F6C460C2F200004FF028030380A9 -S3150800E9C040F6D061C2F200014FF0500581F82E5092 -S3150800E9D0227A40F6D060C2F2000080F82A20637AD4 -S3150800E9E080F82B30A17A80F82C10E57A80F82D5023 -S3150800E9F0227B80F82620637B80F82730A17B80F86D -S3150800EA002810E57B80F829504FF00602C275A388C6 -S3150800EA104384E188818441F21C55C2F200052A88A4 -S3150800EA2042836B8883832188C18365880584647ED5 -S3150800EA3004F01000C2B252B140F6D064C2F200042B -S3150800EA404FF0000084F8310084F830000BE040F6FF -S3150800EA50D063C2F200034FF0060183F830104FF07E -S3150800EA600A0583F8315040F6D064C2F200044FF02C -S3150800EA704002A27540F6C463C2F2000319884FEA41 -S3150800EA801125257461744FF0000584F8355084F813 -S3150800EA9034506586FFF79AF96FEA000060864FF0F2 -S3150800EAA04502A273E5736575257540F6C661C2F21F -S3150800EAB000010B8803F1010398B208804FEA10227F -S3150800EAC0A274E0742583FFF787F96FEA00012183B2 -S3150800EAD041F22053C2F200034FF00000187038BD0F -S3150800EAE04FF0000340F6C461C2F200010B8041F208 -S3150800EAF02050C2F20000037038BD094C4FF00105E2 -S3150800EB002570FFF77ABB06484FF001020270E7E767 -S3150800EB10C40E0020D00E0020A00E002020150020D4 -S3150800EB203415002070B503460D4641F24152C2F233 -S3150800EB3000024FF00001117041F24450C2F2000089 -S3150800EB40048864B141F24452C2F20002518831B1DC -S3150800EB501888A04203D15C888C4200F0888041F274 -S3150800EB604452C2F2000294895CB141F24451C2F2A5 -S3150800EB700001C98929B11888A04202D15A888A4257 -S3150800EB807CD041F24454C2F20004228B5AB141F2BD -S3150800EB904451C2F200014C8B2CB11888904202D124 -S3150800EBA05A88A2426ED041F24451C2F200018C8CBE -S3150800EBB05CB141F24450C2F20000C18C29B11A88F6 -S3150800EBC0A24202D15C888C4260D041F24450C2F223 -S3150800EBD00000028E5AB141F24451C2F200014C8E35 -S3150800EBE02CB11888904202D15A88A24252D041F2DA -S3150800EBF04451C2F200018C8F5CB141F24450C2F21A -S3150800EC000000C18F29B11A88A24202D15C888C42C1 -S3150800EC1044D041F24450C2F20000B0F8482062B134 -S3150800EC2041F24451C2F20001B1F84A402CB11888A9 -S3150800EC30904202D15A88A24234D041F24451C2F2DB -S3150800EC400001B1F85440002C42D041F24450C2F2BF -S3150800EC500000B0F8561000293AD01A88A24237D1D7 -S3150800EC605C888C4234D14FF00700AA4C1DE04FF067 -S3150800EC70000041F24454C2F2000416E04FF00100CD -S3150800EC80A54C12E04FF00200A44C0EE04FF0030032 -S3150800EC90A34C0AE04FF00400A24C06E04FF0050032 -S3150800ECA0A14C02E04FF00600A04C41F24152C2F2DC -S3150800ECB00002107004F1040029464FF0060200F025 -S3150800ECC0A1FB41F2A553C2F200031978A17270BDE7 -S3150800ECD041F24450C2F20000018831B941F244526F -S3150800ECE0C2F200025488002C5FD041F24450C2F2AE -S3150800ECF00000818931B941F24452C2F20002D48936 -S3150800ED00002C59D041F24450C2F20000018B31B9AF -S3150800ED1041F24452C2F20002548B002C50D041F208 -S3150800ED204450C2F20000818C31B941F24452C2F219 -S3150800ED300002D48C002C47D041F24450C2F20000A5 -S3150800ED40018E31B941F24452C2F20002548E002CAF -S3150800ED503ED041F24450C2F20000818F29B941F2F7 -S3150800ED604452C2F20002D48FB4B341F24450C2F204 -S3150800ED700000B0F8481031B941F24452C2F200021C -S3150800ED80B2F84A4064B341F24450C2F20000B0F807 -S3150800ED90541071BB41F24452C2F20002B2F8564016 -S3150800EDA03CBB4FF007005B4C1DE04FF0000041F202 -S3150800EDB04454C2F2000416E04FF00100564C12E02B -S3150800EDC04FF00200554C0EE04FF00300544C0AE099 -S3150800EDD04FF00400534C06E04FF00500524C02E099 -S3150800EDE04FF00600514C41F24152C2F20002107037 -S3150800EDF07BE04FF0000441F2A556C2F200063078D7 -S3150800EE00224641F24451C2F200018E7A811BA14288 -S3150800EE10C4BF0A46D2B241F24456C2F20006B17DD8 -S3150800EE20461A964202DDF2B24FF0010441F244510D -S3150800EE30C2F2000191F82260811B914202DDCAB23A -S3150800EE404FF0020441F24456C2F2000696F82E101C -S3150800EE50461A964202DDF2B24FF0030441F24451DB -S3150800EE60C2F2000191F83A60811B914202DDCAB2F2 -S3150800EE704FF0040441F24456C2F2000696F84610D2 -S3150800EE80461A964202DDF2B24FF0050441F24451A9 -S3150800EE90C2F2000191F85260811B914202DDCAB2AA -S3150800EEA04FF0060441F24456C2F2000696F85E1088 -S3150800EEB0461A964202DDF2B24FF0070441F2425179 -S3150800EEC0C2F200010A7041F2A450C2F200000470B6 -S3150800EED041F24152C2F20002147004EB440441F2BA -S3150800EEE04451C2F2000101EB8404204619464FF052 -S3150800EEF0040200F087FA04F1040029464FF00602DE -S3150800EF0000F080FA41F2A553C2F200031978A17203 -S3150800EF1070BD00BF98150020501500205C15002014 -S3150800EF206815002074150020801500208C15002017 -S3150800EF302DE9F04141F2A553C2F200031A7802F115 -S3150800EF4001021A704FF0000141F24150C2F200006E -S3150800EF50017041F24455C2F2000541F2A556C2F2CB -S3150800EF60000688464FF00407044601EB410105EB0D -S3150800EF708100428835F8213042EA03018AB242B15B -S3150800EF803178837ACA1A772A03DD41463A4600F071 -S3150800EF905DFA207800F10100C1B221700729E4D991 -S3150800EFA0BDE8F081F8B540F6C463C2F200031888DC -S3150800EFB0292807D840F6C463C2F200034FF00002BE -S3150800EFC01A80F8BD40F6C461C2F200014FF0000293 -S3150800EFD00A8040F6D063C2F20003988AB0F5807FB3 -S3150800EFE003D0B0F5007F7FD160E040F6D061C2F271 -S3150800EFF00001CA8C41F21C53C2F2000318888242EF -S3150800F00072D140F6D061C2F200010A8D41F21C535A -S3150800F010C2F200035888824266D13448A0F1060538 -S3150800F0202946FFF77FFD40F6D064C2F200044FF090 -S3150800F030000626754FF00207677504F1200630466C -S3150800F04029464FF0060200F0DDF941F22C57C2F2CC -S3150800F0500007284639464FF0060200F0D3F904F1B6 -S3150800F060060039464FF0060200F0CCF92046314634 -S3150800F0704FF0060200F0C6F9A18BE184E28B2285E7 -S3150800F08041F21C53C2F200031888A0835988E18311 -S3150800F0904FF0080222734FF00603637340F6C4600C -S3150800F0A0C2F200004FF02A010180F8BD40F6D06197 -S3150800F0B0C2F20001CA8C41F21C53C2F2000318883E -S3150800F0C0824211D140F6D061C2F200010A8D41F2A6 -S3150800F0D01C53C2F200035888824205D103490846E8 -S3150800F0E0A1F10601FFF71EFDF8BD00BFEC0E0020DA -S3150800F0F038B540F6D063C2F20003DB8B4FF6FF72D9 -S3150800F100934215D140F6D060C2F20000018C4FF64A -S3150800F110FF7291420CD140F6D060C2F200004FF265 -S3150800F1202451C0F600014FF0060200F06BF93DE1EC -S3150800F13041F21C50C2F20000018883EA010040F641 -S3150800F140C062C2F200021188084211D140F6D060AE -S3150800F150C2F20000028C41F21C51C2F2000148883A -S3150800F160504040F6C061C2F20001498808420CD0FE -S3150800F17041F2A853C2F2000340F6C862C2F2000286 -S3150800F180118819805088588005E041F2A850C2F2CB -S3150800F19000000380428041F2A852C2F2000213889E -S3150800F1A0508841F24451C2F200010A889A4206D1B7 -S3150800F1B041F24451C2F200014A88824269D041F2C2 -S3150800F1C04451C2F200018A899A4206D141F2445159 -S3150800F1D0C2F20001CA89824262D041F24451C2F2A7 -S3150800F1E000010A8B9A4206D141F24451C2F200014B -S3150800F1F04A8B824258D041F24451C2F200018A8CAD -S3150800F2009A4206D141F24451C2F20001CA8C8242A6 -S3150800F2104ED041F24451C2F200010A8E9A4206D1FA -S3150800F22041F24451C2F200014A8E824244D041F270 -S3150800F2304451C2F200018A8F9A4206D141F24451E2 -S3150800F240C2F20001CA8F82423AD041F24451C2F258 -S3150800F2500001B1F848209A4207D141F24451C2F25E -S3150800F2600001B1F84A2082422ED041F24451C2F23E -S3150800F2700001B1F854209A4239D141F24453C2F2FE -S3150800F2800003B3F85610814231D14FF007005549B3 -S3150800F2901DE04FF0000041F24451C2F2000116E0B1 -S3150800F2A04FF00100504912E04FF002004F490EE0BE -S3150800F2B04FF003004E490AE04FF004004D4906E0BE -S3150800F2C04FF005004C4902E04FF006004B4941F269 -S3150800F2D04153C2F20003187040F6D060C2F2000033 -S3150800F2E001F104014FF0060200F08CF85EE041F2ED -S3150800F2F04154C2F200044FF00805257040F6D06468 -S3150800F300C2F2000420464FF0FF014FF0060200F05B -S3150800F3109DF804F120004FF000014FF0060200F0BE -S3150800F32095F841F22C55C2F2000504F1060029466B -S3150800F3304FF0060200F066F804F1160029464FF071 -S3150800F340060200F05FF841F2A850C2F200000288F7 -S3150800F350E2844388238541F21C51C2F200010888E1 -S3150800F360A0834A88E2834FF0000323754FF001011A -S3150800F3706175A373E1734FF00800207463744FF04E -S3150800F3800602A2744FF00403E3742073627304F157 -S3150800F390360441F21451C2F200010C6040F6C46012 -S3150800F3A0C2F200004FF02A02028038BD144841F22A -S3150800F3B02C51C2F200014FF0060200F023F840F685 -S3150800F3C0D061C2F200014FF008020A734FF0000044 -S3150800F3D0487340F6C463C2F20003198801F10E01AE -S3150800F3E0198038BD98150020501500205C1500209E -S3150800F3F06815002074150020801500208C15002043 -S3150800F400D60E0020844640EA010313F0030F40F0AD -S3150800F4101080242AC0F00D802DE9F00FB1E8F80F0E -S3150800F420A0E8F80FA2F12402242ABFF4F7AFBDE83A -S3150800F430F00F002A00F0078011F8013B00F8013BA5 -S3150800F440013A7FF4F9AF6046704700BF8446002A48 -S3150800F45000F0328010F0030F00F0078000F8011B5F -S3150800F460013A00F02980FFF7F5BF282AC0F01F806F -S3150800F470A2F128022DE9F00F01F0FF0141EA01216E -S3150800F48041EA014141EA01610B460C460D460E462A -S3150800F4900F46884689468A468B46A0E8FA0F283AD8 -S3150800F4A0BFF4FBAFBDE8F00F283200F0058000F886 -S3150800F4B0011B013A7FF4FBAF6046704738B5044636 -S3150800F4C00D4600F019F841F2AC53C2F200031D6074 -S3150800F4D044F0800441F2B050C2F2000004600246D3 -S3150800F4E011680029FCD100F009F841F2AC53C2F2C8 -S3150800F4F00003186838BD00BF704700BF704700BFDB -S3150800F50005020602060307030803090309040A0499 -S3150800F5100B040C040C050D050E050F050F06100649 -S3110800F52010071008FFFFFFFFFFFF0000A8 -S3150800F52C007A030A00000000010203040102030426 -S3090800F53C060708099F -S7050800C233FD diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/boot.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/boot.c deleted file mode 100644 index ba49f091..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/boot.c +++ /dev/null @@ -1,397 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\boot.c -* \brief Demo program bootloader interface source file. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -#if (BOOT_COM_UART_ENABLE > 0) -static void BootComUartInit(void); -static void BootComUartCheckActivationRequest(void); -#endif -#if (BOOT_COM_CAN_ENABLE > 0) -static void BootComCanInit(void); -static void BootComCanCheckActivationRequest(void); -#endif - -/************************************************************************************//** -** \brief Initializes the communication interface. -** \return none. -** -****************************************************************************************/ -void BootComInit(void) -{ -#if (BOOT_COM_UART_ENABLE > 0) - BootComUartInit(); -#endif -#if (BOOT_COM_CAN_ENABLE > 0) - BootComCanInit(); -#endif -} /*** end of BootComInit ***/ - - -/************************************************************************************//** -** \brief Receives the CONNECT request from the host, which indicates that the -** bootloader should be activated and, if so, activates it. -** \return none. -** -****************************************************************************************/ -void BootComCheckActivationRequest(void) -{ -#if (BOOT_COM_UART_ENABLE > 0) - BootComUartCheckActivationRequest(); -#endif -#if (BOOT_COM_CAN_ENABLE > 0) - BootComCanCheckActivationRequest(); -#endif -} /*** end of BootComCheckActivationRequest ***/ - - -/************************************************************************************//** -** \brief Bootloader activation function. -** \return none. -** -****************************************************************************************/ -void BootActivate(void) -{ - /* perform software reset to activate the bootoader again */ - NVIC_SystemReset(); -} /*** end of BootActivate ***/ - - -#if (BOOT_COM_UART_ENABLE > 0) -/**************************************************************************************** -* U N I V E R S A L A S Y N C H R O N O U S R X T X I N T E R F A C E -****************************************************************************************/ - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -static unsigned char UartReceiveByte(unsigned char *data); - - -/************************************************************************************//** -** \brief Initializes the UART communication interface. -** \return none. -** -****************************************************************************************/ -static void BootComUartInit(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - USART_InitTypeDef USART_InitStructure; - - /* enable UART peripheral clock */ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE); - /* enable GPIO peripheral clock for transmitter and receiver pins */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); - /* connect the pin to the peripherals alternate function */ - GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6); - /* configure USART Tx as alternate function */ - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOC, &GPIO_InitStructure); - /* configure USART Rx as alternate function */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; - GPIO_Init(GPIOC, &GPIO_InitStructure); - /* initialize the uart for the specified communication speed */ - USART_InitStructure.USART_BaudRate = BOOT_COM_UART_BAUDRATE; - 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(USART6, &USART_InitStructure); - /* enable UART */ - USART_Cmd(USART6, ENABLE); -} /*** end of BootComUartInit ***/ - - -/************************************************************************************//** -** \brief Receives the CONNECT request from the host, which indicates that the -** bootloader should be activated and, if so, activates it. -** \return none. -** -****************************************************************************************/ -static void BootComUartCheckActivationRequest(void) -{ - static unsigned char xcpCtoReqPacket[BOOT_COM_UART_RX_MAX_DATA+1]; - static unsigned char xcpCtoRxLength; - static unsigned char xcpCtoRxInProgress = 0; - - /* start of cto packet received? */ - if (xcpCtoRxInProgress == 0) - { - /* store the message length when received */ - if (UartReceiveByte(&xcpCtoReqPacket[0]) == 1) - { - /* indicate that a cto packet is being received */ - xcpCtoRxInProgress = 1; - - /* reset packet data count */ - xcpCtoRxLength = 0; - } - } - else - { - /* store the next packet byte */ - if (UartReceiveByte(&xcpCtoReqPacket[xcpCtoRxLength+1]) == 1) - { - /* increment the packet data count */ - xcpCtoRxLength++; - - /* check to see if the entire packet was received */ - if (xcpCtoRxLength == xcpCtoReqPacket[0]) - { - /* done with cto packet reception */ - xcpCtoRxInProgress = 0; - - /* check if this was an XCP CONNECT command */ - if ((xcpCtoReqPacket[1] == 0xff) && (xcpCtoReqPacket[2] == 0x00)) - { - /* connection request received so start the bootloader */ - BootActivate(); - } - } - } - } -} /*** end of BootComUartCheckActivationRequest ***/ - - -/************************************************************************************//** -** \brief Receives a communication interface byte if one is present. -** \param data Pointer to byte where the data is to be stored. -** \return 1 if a byte was received, 0 otherwise. -** -****************************************************************************************/ -static unsigned char UartReceiveByte(unsigned char *data) -{ - /* check flag to see if a byte was received */ - if (USART_GetFlagStatus(USART6, USART_FLAG_RXNE) == SET) - { - /* retrieve and store the newly received byte */ - *data = (unsigned char)USART_ReceiveData(USART6); - /* all done */ - return 1; - } - /* still here to no new byte received */ - return 0; -} /*** end of UartReceiveByte ***/ -#endif /* BOOT_COM_UART_ENABLE > 0 */ - - -#if (BOOT_COM_CAN_ENABLE > 0) -/**************************************************************************************** -* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E -****************************************************************************************/ - -/**************************************************************************************** -* Type definitions -****************************************************************************************/ -/** \brief Structure type for grouping CAN bus timing related information. */ -typedef struct t_can_bus_timing -{ - unsigned char tseg1; /**< CAN time segment 1 */ - unsigned char tseg2; /**< CAN time segment 2 */ -} tCanBusTiming; - - -/**************************************************************************************** -* Local constant declarations -****************************************************************************************/ -/** \brief CAN bittiming table for dynamically calculating the bittiming settings. - * \details According to the CAN protocol 1 bit-time can be made up of between 8..25 - * time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC - * always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) * - * 100%. This array contains possible and valid time quanta configurations with - * a sample point between 68..78%. - */ -static const tCanBusTiming canTiming[] = -{ /* TQ | TSEG1 | TSEG2 | SP */ - /* ------------------------- */ - { 5, 2 }, /* 8 | 5 | 2 | 75% */ - { 6, 2 }, /* 9 | 6 | 2 | 78% */ - { 6, 3 }, /* 10 | 6 | 3 | 70% */ - { 7, 3 }, /* 11 | 7 | 3 | 73% */ - { 8, 3 }, /* 12 | 8 | 3 | 75% */ - { 9, 3 }, /* 13 | 9 | 3 | 77% */ - { 9, 4 }, /* 14 | 9 | 4 | 71% */ - { 10, 4 }, /* 15 | 10 | 4 | 73% */ - { 11, 4 }, /* 16 | 11 | 4 | 75% */ - { 12, 4 }, /* 17 | 12 | 4 | 76% */ - { 12, 5 }, /* 18 | 12 | 5 | 72% */ - { 13, 5 }, /* 19 | 13 | 5 | 74% */ - { 14, 5 }, /* 20 | 14 | 5 | 75% */ - { 15, 5 }, /* 21 | 15 | 5 | 76% */ - { 15, 6 }, /* 22 | 15 | 6 | 73% */ - { 16, 6 }, /* 23 | 16 | 6 | 74% */ - { 16, 7 }, /* 24 | 16 | 7 | 71% */ - { 16, 8 } /* 25 | 16 | 8 | 68% */ -}; - - -/************************************************************************************//** -** \brief Search algorithm to match the desired baudrate to a possible bus -** timing configuration. -** \param baud The desired baudrate in kbps. Valid values are 10..1000. -** \param prescaler Pointer to where the value for the prescaler will be stored. -** \param tseg1 Pointer to where the value for TSEG2 will be stored. -** \param tseg2 Pointer to where the value for TSEG2 will be stored. -** \return 1 if the CAN bustiming register values were found, 0 otherwise. -** -****************************************************************************************/ -static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned short *prescaler, - unsigned char *tseg1, unsigned char *tseg2) -{ - unsigned char cnt; - - /* loop through all possible time quanta configurations to find a match */ - for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++) - { - if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0) - { - /* compute the prescaler that goes with this TQ configuration */ - *prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1)); - - /* make sure the prescaler is valid */ - if ( (*prescaler > 0) && (*prescaler <= 1024) ) - { - /* store the bustiming configuration */ - *tseg1 = canTiming[cnt].tseg1; - *tseg2 = canTiming[cnt].tseg2; - /* found a good bus timing configuration */ - return 1; - } - } - } - /* could not find a good bus timing configuration */ - return 0; -} /*** end of CanGetSpeedConfig ***/ - - -/************************************************************************************//** -** \brief Initializes the CAN communication interface. -** \return none. -** -****************************************************************************************/ -static void BootComCanInit(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - CAN_InitTypeDef CAN_InitStructure; - CAN_FilterInitTypeDef CAN_FilterInitStructure; - unsigned short prescaler; - unsigned char tseg1, tseg2; - - /* enable clocks for CAN2 transmitter and receiver pins */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); - /* select alternate function for the CAN2 pins */ - GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2); - GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2); - /* configure CAN2 RX and TX pins */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(GPIOB, &GPIO_InitStructure); - /* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2 - * the CAN1 peripheral also needs to be enabled. - */ - RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE); - /* CAN register init */ - CAN_DeInit(CAN2); - CAN_StructInit(&CAN_InitStructure); - /* obtain the bittiming configuration for this baudrate */ - CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2); - /* CAN controller init */ - CAN_InitStructure.CAN_TTCM = DISABLE; - CAN_InitStructure.CAN_ABOM = DISABLE; - CAN_InitStructure.CAN_AWUM = DISABLE; - CAN_InitStructure.CAN_NART = DISABLE; - CAN_InitStructure.CAN_RFLM = DISABLE; - CAN_InitStructure.CAN_TXFP = DISABLE; - CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; - /* CAN Baudrate init */ - CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; - CAN_InitStructure.CAN_BS1 = tseg1 - 1; - CAN_InitStructure.CAN_BS2 = tseg2 - 1; - CAN_InitStructure.CAN_Prescaler = prescaler; - CAN_Init(CAN2, &CAN_InitStructure); - /* CAN filter init - receive all messages */ - CAN_FilterInitStructure.CAN_FilterNumber = 14; - CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; - CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; - CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; - CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; - CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; - CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; - CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; - CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; - CAN_FilterInit(&CAN_FilterInitStructure); -} /*** end of BootComCanInit ***/ - - -/************************************************************************************//** -** \brief Receives the CONNECT request from the host, which indicates that the -** bootloader should be activated and, if so, activates it. -** \return none. -** -****************************************************************************************/ -static void BootComCanCheckActivationRequest(void) -{ - CanRxMsg RxMessage; - - /* check if a new message was received */ - if (CAN_MessagePending(CAN2, CAN_FIFO0) > 0) - { - /* receive the message */ - CAN_Receive(CAN2, CAN_FIFO0, &RxMessage); - if (RxMessage.StdId == BOOT_COM_CAN_RX_MSG_ID) - { - /* check if this was an XCP CONNECT command */ - if ((RxMessage.Data[0] == 0xff) && (RxMessage.Data[1] == 0x00)) - { - /* connection request received so start the bootloader */ - BootActivate(); - } - } - } -} /*** end of BootComCanCheckActivationRequest ***/ -#endif /* BOOT_COM_CAN_ENABLE > 0 */ - - -/*********************************** end of boot.c *************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/boot.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/boot.h deleted file mode 100644 index c3ed426b..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/boot.h +++ /dev/null @@ -1,40 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\boot.h -* \brief Demo program bootloader interface header file. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef BOOT_H -#define BOOT_H - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void BootComInit(void); -void BootComCheckActivationRequest(void); -void BootActivate(void); - - -#endif /* BOOT_H */ -/*********************************** end of boot.h *************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/cstart.s b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/cstart.s deleted file mode 100644 index 822dbcc7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/cstart.s +++ /dev/null @@ -1,327 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2009 Rowley Associates Limited. * - * * - * This file may be distributed under the terms of the License Agreement * - * provided with this software. * - * * - * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE * - * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - *****************************************************************************/ - -/***************************************************************************** - * Preprocessor Definitions - * ------------------------ - * APP_ENTRY_POINT - * - * Defines the application entry point function, if undefined this setting - * defaults to "main". - * - * USE_PROCESS_STACK - * - * If defined, thread mode will be configured to use the process stack if - * the size of the process stack is greater than zero bytes in length. - * - * INITIALIZE_STACK - * - * If defined, the contents of the stack will be initialized to a the - * value 0xCC. - * - * INITIALIZE_SECONDARY_SECTIONS - * - * If defined, the .data2, .text2, .rodata2 and .bss2 sections will be initialized. - * - * FULL_LIBRARY - * - * If defined then - * - argc, argv are setup by the debug_getargs. - * - the exit symbol is defined and executes on return from main. - * - the exit symbol calls destructors, atexit functions and then debug_exit. - * - * If not defined then - * - argc and argv are zero. - * - the exit symbol is defined, executes on return from main and loops - *****************************************************************************/ - -#ifndef APP_ENTRY_POINT -#define APP_ENTRY_POINT main -#endif - -#ifndef ARGSSPACE -#define ARGSSPACE 128 -#endif - - .global _start - .extern APP_ENTRY_POINT - .global exit - .global reset_handler - - .section .init, "ax" - .code 16 - .align 2 - .thumb_func - -_start: - ldr r1, =__stack_end__ -#ifdef __ARM_EABI__ - mov r2, #0x7 - bic r1, r2 -#endif - mov sp, r1 -#ifdef INITIALIZE_STACK - mov r2, #0xCC - ldr r0, =__stack_start__ - bl memory_set -#endif - -#ifdef USE_PROCESS_STACK - /* Set up process stack if size > 0 */ - ldr r1, =__stack_process_end__ - ldr r0, =__stack_process_start__ - sub r2, r1, r0 - beq 1f -#ifdef __ARM_EABI__ - mov r2, #0x7 - bic r1, r2 -#endif - msr psp, r1 - mov r2, #2 - msr control, r2 -#ifdef INITIALIZE_STACK - mov r2, #0xCC - bl memory_set -#endif -1: -#endif - /* Copy initialised memory sections into RAM (if necessary). */ - ldr r0, =__data_load_start__ - ldr r1, =__data_start__ - ldr r2, =__data_end__ - bl memory_copy - ldr r0, =__text_load_start__ - ldr r1, =__text_start__ - ldr r2, =__text_end__ - bl memory_copy - ldr r0, =__fast_load_start__ - ldr r1, =__fast_start__ - ldr r2, =__fast_end__ - bl memory_copy - ldr r0, =__ctors_load_start__ - ldr r1, =__ctors_start__ - ldr r2, =__ctors_end__ - bl memory_copy - ldr r0, =__dtors_load_start__ - ldr r1, =__dtors_start__ - ldr r2, =__dtors_end__ - bl memory_copy - ldr r0, =__rodata_load_start__ - ldr r1, =__rodata_start__ - ldr r2, =__rodata_end__ - bl memory_copy -#ifdef INITIALIZE_SECONDARY_SECTIONS - ldr r0, =__data2_load_start__ - ldr r1, =__data2_start__ - ldr r2, =__data2_end__ - bl memory_copy - ldr r0, =__text2_load_start__ - ldr r1, =__text2_start__ - ldr r2, =__text2_end__ - bl memory_copy - ldr r0, =__rodata2_load_start__ - ldr r1, =__rodata2_start__ - ldr r2, =__rodata2_end__ - bl memory_copy -#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */ - - /* Zero the bss. */ - ldr r0, =__bss_start__ - ldr r1, =__bss_end__ - mov r2, #0 - bl memory_set -#ifdef INITIALIZE_SECONDARY_SECTIONS - ldr r0, =__bss2_start__ - ldr r1, =__bss2_end__ - mov r2, #0 - bl memory_set -#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */ - - /* Initialise the heap */ - ldr r0, = __heap_start__ - ldr r1, = __heap_end__ - sub r1, r1, r0 - cmp r1, #8 - blt 1f - mov r2, #0 - str r2, [r0] - add r0, r0, #4 - str r1, [r0] -1: - - /* Call constructors */ - ldr r0, =__ctors_start__ - ldr r1, =__ctors_end__ -ctor_loop: - cmp r0, r1 - beq ctor_end - ldr r2, [r0] - add r0, #4 - push {r0-r1} - blx r2 - pop {r0-r1} - b ctor_loop -ctor_end: - - /* Setup initial call frame */ - mov r0, #0 - mov lr, r0 - mov r12, sp - - .type start, function -start: - /* Jump to application entry point */ -#ifdef FULL_LIBRARY - mov r0, #ARGSSPACE - ldr r1, =args - ldr r2, =debug_getargs - blx r2 - ldr r1, =args -#else - mov r0, #0 - mov r1, #0 -#endif - ldr r2, =APP_ENTRY_POINT - blx r2 - - .thumb_func -exit: -#ifdef FULL_LIBRARY - mov r5, r0 // save the exit parameter/return result - - /* Call destructors */ - ldr r0, =__dtors_start__ - ldr r1, =__dtors_end__ -dtor_loop: - cmp r0, r1 - beq dtor_end - ldr r2, [r0] - add r0, #4 - push {r0-r1} - blx r2 - pop {r0-r1} - b dtor_loop -dtor_end: - - /* Call atexit functions */ - ldr r2, =_execute_at_exit_fns - blx r2 - - /* Call debug_exit with return result/exit parameter */ - mov r0, r5 - ldr r2, =debug_exit - blx r2 -#endif - - /* Returned from application entry point, loop forever. */ -exit_loop: - b exit_loop - - .thumb_func -memory_copy: - cmp r0, r1 - beq 2f - sub r2, r2, r1 - beq 2f -1: - ldrb r3, [r0] - add r0, r0, #1 - strb r3, [r1] - add r1, r1, #1 - sub r2, r2, #1 - bne 1b -2: - bx lr - - .thumb_func -memory_set: - cmp r0, r1 - beq 1f - strb r2, [r0] - add r0, r0, #1 - b memory_set -1: - bx lr - - .section .init, "ax" - .syntax unified - .thumb_func - -reset_handler: - -#ifdef VECTORS_IN_RAM - ldr r0, =__vectors_load_start__ - ldr r1, =__vectors_load_end__ - ldr r2, =_vectors_ram -l0: - cmp r0, r1 - beq l1 - ldr r3, [r0] - str r3, [r2] - adds r0, r0, #4 - adds r2, r2, #4 - b l0 -l1: -#endif - -#if defined(__TARGET_F4XX) || defined(__TARGET_F30X) || defined(__TARGET_F37X) -#ifndef __NO_FPU - // Enable CP11 and CP10 with CPACR |= (0xf<<20) - movw r0, 0xED88 - movt r0, 0xE000 - ldr r1, [r0] - orrs r1, r1, #(0xf << 20) - str r1, [r0] -#ifndef __NO_RUNFAST_MODE - nop - nop - nop - vmrs r0, fpscr - orrs r0, r0, #(0x3 << 24) // FZ and DN - vmsr fpscr, r0 - // clear the CONTROL.FPCA bit - mov r0, #0 - msr control, r0 - // FPDSCR similarly - movw r1, 0xEF3C - movt r1, 0xE000 - ldr r0, [r1] - orrs r0, r0, #(0x3 << 24) // FZ and DN - str r0, [r1] -#endif -#endif -#endif - -#ifndef __TARGET_F0XX - /* Configure vector table offset register */ - ldr r0, =0xE000ED08 -#ifdef VECTORS_IN_RAM - ldr r1, =_vectors_ram -#else - ldr r1, =_vectors -#endif - str r1, [r0] -#endif - - b _start - - - -#ifdef FULL_LIBRARY - .bss -args: - .space ARGSSPACE -#endif - - /* Setup attibutes of stack and heap sections so they don't take up room in the elf file */ - .section .stack, "wa", %nobits - .section .stack_process, "wa", %nobits - .section .heap, "wa", %nobits - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/header.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/header.h deleted file mode 100644 index c86ebdf1..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/header.h +++ /dev/null @@ -1,44 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\header.h -* \brief Generic header file. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef HEADER_H -#define HEADER_H - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "../Boot/blt_conf.h" /* bootloader configuration */ -#include "stm32f4xx.h" /* STM32 registers */ -#include "stm32f4xx_conf.h" /* STM32 peripheral drivers */ -#include "boot.h" /* bootloader interface driver */ -#include "led.h" /* LED driver */ -#include "timer.h" /* Timer driver */ -#include "net.h" /* TCP/IP server application */ - - -#endif /* HEADER_H */ -/*********************************** end of header.h ***********************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/readme.txt b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/readme.txt deleted file mode 100644 index a49767fb..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -Integrated Development Environment ----------------------------------- -Rowleys CrossWorks (version 2.3.1) was used as the editor during the development of this software program. This directory contains -the CrossWorks project and solution files. More info is available at: http://www.rowley.co.uk/ \ No newline at end of file diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/stm32f407_crossworks.hzp b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/stm32f407_crossworks.hzp deleted file mode 100644 index a7feecdd..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/stm32f407_crossworks.hzp +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/stm32f407_crossworks.hzs b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/stm32f407_crossworks.hzs deleted file mode 100644 index 16d0eb86..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/ide/stm32f407_crossworks.hzs +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/led.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/led.c deleted file mode 100644 index 035fb101..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/led.c +++ /dev/null @@ -1,103 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\led.c -* \brief LED driver source file. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -/** \brief Toggle interval time in milliseconds. */ -#define LED_TOGGLE_MS (500) - - -/************************************************************************************//** -** \brief Initializes the LED. The board doesn't have a dedicted LED so an -** indicator on the LCD is used instead. -** \return none. -** -****************************************************************************************/ -void LedInit(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - /* enable the GPIO_LED Clock */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); - /* configure the GPIO_LED pin */ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOC, &GPIO_InitStructure); - GPIO_SetBits(GPIOC, GPIO_Pin_13); -} /*** end of LedInit ***/ - - -/************************************************************************************//** -** \brief Toggles the LED at a fixed time interval. -** \return none. -** -****************************************************************************************/ -void LedToggle(void) -{ - static unsigned char led_toggle_state = 0; - static unsigned long timer_counter_last = 0; - unsigned long timer_counter_now; - - /* check if toggle interval time passed */ - timer_counter_now = TimerGet(); - if ( (timer_counter_now - timer_counter_last) < LED_TOGGLE_MS) - { - /* not yet time to toggle */ - return; - } - - /* determine toggle action */ - if (led_toggle_state == 0) - { - led_toggle_state = 1; - /* turn the LED on */ - GPIO_ResetBits(GPIOC, GPIO_Pin_13); - } - else - { - led_toggle_state = 0; - /* turn the LED off */ - GPIO_SetBits(GPIOC, GPIO_Pin_13); - } - - /* store toggle time to determine next toggle interval */ - timer_counter_last = timer_counter_now; -} /*** end of LedToggle ***/ - - -/*********************************** end of led.c **************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/led.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/led.h deleted file mode 100644 index 8279bae8..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/led.h +++ /dev/null @@ -1,39 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\led.h -* \brief LED driver header file. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef LED_H -#define LED_H - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void LedInit(void); -void LedToggle(void); - - -#endif /* LED_H */ -/*********************************** end of led.h **************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/ethernetlib/inc/stm32_eth.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/ethernetlib/inc/stm32_eth.h deleted file mode 100644 index 578d8baa..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/ethernetlib/inc/stm32_eth.h +++ /dev/null @@ -1,1610 +0,0 @@ -/** - ****************************************************************************** - * @file stm32_eth.h - * @author MCD Application Team - * @version V1.0.0 - * @date 06/19/2009 - * @brief This file contains all the functions prototypes for the Ethernet - * firmware library. - ****************************************************************************** - * @copy - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, 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 2009 STMicroelectronics

- */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_ETH_H -#define __STM32_ETH_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" /* STM32 registers */ - -/** @addtogroup STM32_ETH_Driver - * @{ - */ - -/** @defgroup ETH_Exported_Types - * @{ - */ - -/** - * @brief ETH MAC Init structure definition - */ -typedef struct { -/** - * @brief / * MAC - */ - uint32_t ETH_AutoNegotiation; /*!< Selects or not the AutoNegotiation with the external PHY */ - uint32_t ETH_Watchdog; /*!< Enable/disable Watchdog timer */ - uint32_t ETH_Jabber; /*!< Enable/disable Jabber timer */ - uint32_t ETH_InterFrameGap; /*!< Selects minimum IFG between frames during transmission */ - uint32_t ETH_CarrierSense; /*!< Enable/disable Carrier Sense */ - uint32_t ETH_Speed; /*!< Indicates the Ethernet speed: 10/100 Mbps */ - uint32_t ETH_ReceiveOwn; /*!< Enable/disable the reception of frames when the TX_EN signal is asserted in Half-Duplex mode */ - uint32_t ETH_LoopbackMode; /*!< Enable/disable internal MAC MII Loopback mode */ - uint32_t ETH_Mode; /*!< Selects the MAC duplex mode: Half-Duplex or Full-Duplex mode */ - uint32_t ETH_ChecksumOffload; /*!< Enable/disable the calculation of complement sum of all received Ethernet frame payloads */ - uint32_t ETH_RetryTransmission; /*!< Enable/disable the MAC attempt retries transmission, based on the settings of BL, when a colision occurs (Half-Duplex mode) */ - uint32_t ETH_AutomaticPadCRCStrip; /*!< Enable/disable Automatic MAC Pad/CRC Stripping */ - uint32_t ETH_BackOffLimit; /*!< Selects the BackOff limit value */ - uint32_t ETH_DeferralCheck; /*!< Enable/disable deferral check function (Half-Duplex mode) */ - uint32_t ETH_ReceiveAll; /*!< Enable/disable all frames reception by the MAC (No fitering)*/ - uint32_t ETH_SourceAddrFilter; /*!< Selects EnableNormal/EnableInverse/disable Source Address Filter comparison */ - uint32_t ETH_PassControlFrames; /*!< Selects None/All/FilterPass of all control frames (including unicast and multicast PAUSE frames) */ - uint32_t ETH_BroadcastFramesReception; /*!< Enable/disable reception of Broadcast Frames */ - uint32_t ETH_DestinationAddrFilter; /*!< Selects EnableNormal/EnableInverse destination filter for both unicast and multicast frames */ - uint32_t ETH_PromiscuousMode; /*!< Enable/disable Promiscuous Mode */ - uint32_t ETH_MulticastFramesFilter; /*!< Selects the Multicast Frames filter: None/HashTableFilter/PerfectFilter/PerfectHashTableFilter */ - uint32_t ETH_UnicastFramesFilter; /*!< Selects the Unicast Frames filter: HashTableFilter/PerfectFilter/PerfectHashTableFilter */ - uint32_t ETH_HashTableHigh; /*!< This field contains the higher 32 bits of Hash table. */ - uint32_t ETH_HashTableLow; /*!< This field contains the lower 32 bits of Hash table. */ - uint32_t ETH_PauseTime; /*!< This field holds the value to be used in the Pause Time field in the transmit control frame */ - uint32_t ETH_ZeroQuantaPause; /*!< Enable/disable the automatic generation of Zero-Quanta Pause Control frames */ - uint32_t ETH_PauseLowThreshold; /*!< This field configures the threshold of the PAUSE to be checked for automatic retransmission of PAUSE Frame */ - uint32_t ETH_UnicastPauseFrameDetect; /*!< Enable/disable MAC to detect the Pause frames (with MAC Address0 unicast address and unique multicast address) */ - uint32_t ETH_ReceiveFlowControl; /*!< Enable/disable the MAC to decode the received Pause frame and disable its transmitter for a specified (Pause Time) time */ - uint32_t ETH_TransmitFlowControl; /*!< Enable/disable the MAC to transmit Pause frames (Full-Duplex mode) or the MAC back-pressure operation (Half-Duplex mode) */ - uint32_t ETH_VLANTagComparison; /*!< Selects the 12-bit VLAN identifier or the complete 16-bit VLAN tag for comparison and filtering */ - uint32_t ETH_VLANTagIdentifier; /*!< VLAN tag identifier for receive frames */ - -/** - * @brief / * DMA - */ - uint32_t ETH_DropTCPIPChecksumErrorFrame; /*!< Enable/disable Dropping of TCP/IP Checksum Error Frames */ - uint32_t ETH_ReceiveStoreForward; /*!< Enable/disable Receive store and forward */ - uint32_t ETH_FlushReceivedFrame; /*!< Enable/disable flushing of received frames */ - uint32_t ETH_TransmitStoreForward; /*!< Enable/disable Transmit store and forward */ - uint32_t ETH_TransmitThresholdControl; /*!< Selects the Transmit Threshold Control */ - uint32_t ETH_ForwardErrorFrames; /*!< Enable/disable forward to DMA of all frames except runt error frames */ - uint32_t ETH_ForwardUndersizedGoodFrames; /*!< Enable/disable Rx FIFO to forward Undersized frames (frames with no Error and length less than 64 bytes) including pad-bytes and CRC) */ - uint32_t ETH_ReceiveThresholdControl; /*!< Selects the threshold level of the Receive FIFO */ - uint32_t ETH_SecondFrameOperate; /*!< Enable/disable the DMA process of a second frame of Transmit data even before status for first frame is obtained */ - uint32_t ETH_AddressAlignedBeats; /*!< Enable/disable Address Aligned Beats */ - uint32_t ETH_FixedBurst; /*!< Enable/disable the AHB Master interface fixed burst transfers */ - uint32_t ETH_RxDMABurstLength; /*!< Indicate the maximum number of beats to be transferred in one Rx DMA transaction */ - uint32_t ETH_TxDMABurstLength; /*!< Indicate the maximum number of beats to be transferred in one Tx DMA transaction */ - uint32_t ETH_DescriptorSkipLength; /*!< Specifies the number of word to skip between two unchained descriptors (Ring mode) */ - uint32_t ETH_DMAArbitration; /*!< Selects DMA Tx/Rx arbitration */ -}ETH_InitTypeDef; - -/**--------------------------------------------------------------------------**/ -/** - * @brief DMA descriptors types - */ -/**--------------------------------------------------------------------------**/ - -/** - * @brief ETH DMA Desciptors data structure definition - */ -typedef struct { - uint32_t Status; /*!< Status */ - uint32_t ControlBufferSize; /*!< Control and Buffer1, Buffer2 lengths */ - uint32_t Buffer1Addr; /*!< Buffer1 address pointer */ - uint32_t Buffer2NextDescAddr; /*!< Buffer2 or next descriptor address pointer */ -} ETH_DMADESCTypeDef; - -/** - * @} - */ - -/** @defgroup ETH_Exported_Constants - * @{ - */ -/**--------------------------------------------------------------------------**/ -/** - * @brief ETH Frames defines - */ -/**--------------------------------------------------------------------------**/ - -/** @defgroup ENET_Buffers_setting - * @{ - */ -#define ETH_MAX_PACKET_SIZE 1520 /*!< ETH_HEADER + ETH_EXTRA + MAX_ETH_PAYLOAD + ETH_CRC */ -#define ETH_HEADER 14 /*!< 6 byte Dest addr, 6 byte Src addr, 2 byte length/type */ -#define ETH_CRC 4 /*!< Ethernet CRC */ -#define ETH_EXTRA 2 /*!< Extra bytes in some cases */ -#define VLAN_TAG 4 /*!< optional 802.1q VLAN Tag */ -#define MIN_ETH_PAYLOAD 46 /*!< Minimum Ethernet payload size */ -#define MAX_ETH_PAYLOAD 1500 /*!< Maximum Ethernet payload size */ -#define JUMBO_FRAME_PAYLOAD 9000 /*!< Jumbo frame payload size */ - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet DMA descriptors registers bits definition - */ -/**--------------------------------------------------------------------------**/ - -/* DMA Tx Desciptor -----------------------------------------------------------*/ -/**---------------------------------------------------------------------------------------------- - TDES0 | OWN(31) | CTRL[30:26] | Reserved[25:24] | CTRL[23:20] | Reserved[19:17] | Status[16:0] | - ----------------------------------------------------------------------------------------------- - TDES1 | Reserved[31:29] | Buffer2 ByteCount[28:16] | Reserved[15:13] | Buffer1 ByteCount[12:0] | - ----------------------------------------------------------------------------------------------- - TDES2 | Buffer1 Address [31:0] | - ----------------------------------------------------------------------------------------------- - TDES3 | Buffer2 Address [31:0] / Next Desciptor Address [31:0] | - ---------------------------------------------------------------------------------------------**/ - -/** - * @brief Bit definition of TDES0 register: DMA Tx descriptor status register - */ -#define ETH_DMATxDesc_OWN ((uint32_t)0x80000000) /*!< OWN bit: descriptor is owned by DMA engine */ -#define ETH_DMATxDesc_IC ((uint32_t)0x40000000) /*!< Interrupt on Completion */ -#define ETH_DMATxDesc_LS ((uint32_t)0x20000000) /*!< Last Segment */ -#define ETH_DMATxDesc_FS ((uint32_t)0x10000000) /*!< First Segment */ -#define ETH_DMATxDesc_DC ((uint32_t)0x08000000) /*!< Disable CRC */ -#define ETH_DMATxDesc_DP ((uint32_t)0x04000000) /*!< Disable Padding */ -#define ETH_DMATxDesc_TTSE ((uint32_t)0x02000000) /*!< Transmit Time Stamp Enable */ -#define ETH_DMATxDesc_CIC ((uint32_t)0x00C00000) /*!< Checksum Insertion Control: 4 cases */ -#define ETH_DMATxDesc_CIC_ByPass ((uint32_t)0x00000000) /*!< Do Nothing: Checksum Engine is bypassed */ -#define ETH_DMATxDesc_CIC_IPV4Header ((uint32_t)0x00400000) /*!< IPV4 header Checksum Insertion */ -#define ETH_DMATxDesc_CIC_TCPUDPICMP_Segment ((uint32_t)0x00800000) /*!< TCP/UDP/ICMP Checksum Insertion calculated over segment only */ -#define ETH_DMATxDesc_CIC_TCPUDPICMP_Full ((uint32_t)0x00C00000) /*!< TCP/UDP/ICMP Checksum Insertion fully calculated */ -#define ETH_DMATxDesc_TER ((uint32_t)0x00200000) /*!< Transmit End of Ring */ -#define ETH_DMATxDesc_TCH ((uint32_t)0x00100000) /*!< Second Address Chained */ -#define ETH_DMATxDesc_TTSS ((uint32_t)0x00020000) /*!< Tx Time Stamp Status */ -#define ETH_DMATxDesc_IHE ((uint32_t)0x00010000) /*!< IP Header Error */ -#define ETH_DMATxDesc_ES ((uint32_t)0x00008000) /*!< Error summary: OR of the following bits: UE || ED || EC || LCO || NC || LCA || FF || JT */ -#define ETH_DMATxDesc_JT ((uint32_t)0x00004000) /*!< Jabber Timeout */ -#define ETH_DMATxDesc_FF ((uint32_t)0x00002000) /*!< Frame Flushed: DMA/MTL flushed the frame due to SW flush */ -#define ETH_DMATxDesc_PCE ((uint32_t)0x00001000) /*!< Payload Checksum Error */ -#define ETH_DMATxDesc_LCA ((uint32_t)0x00000800) /*!< Loss of Carrier: carrier lost during tramsmission */ -#define ETH_DMATxDesc_NC ((uint32_t)0x00000400) /*!< No Carrier: no carrier signal from the tranceiver */ -#define ETH_DMATxDesc_LCO ((uint32_t)0x00000200) /*!< Late Collision: transmission aborted due to collision */ -#define ETH_DMATxDesc_EC ((uint32_t)0x00000100) /*!< Excessive Collision: transmission aborted after 16 collisions */ -#define ETH_DMATxDesc_VF ((uint32_t)0x00000080) /*!< VLAN Frame */ -#define ETH_DMATxDesc_CC ((uint32_t)0x00000078) /*!< Collision Count */ -#define ETH_DMATxDesc_ED ((uint32_t)0x00000004) /*!< Excessive Deferral */ -#define ETH_DMATxDesc_UF ((uint32_t)0x00000002) /*!< Underflow Error: late data arrival from the memory */ -#define ETH_DMATxDesc_DB ((uint32_t)0x00000001) /*!< Deferred Bit */ - -/** - * @brief Bit definition of TDES1 register - */ -#define ETH_DMATxDesc_TBS2 ((uint32_t)0x1FFF0000) /*!< Transmit Buffer2 Size */ -#define ETH_DMATxDesc_TBS1 ((uint32_t)0x00001FFF) /*!< Transmit Buffer1 Size */ - -/** - * @brief Bit definition of TDES2 register - */ -#define ETH_DMATxDesc_B1AP ((uint32_t)0xFFFFFFFF) /*!< Buffer1 Address Pointer */ - -/** - * @brief Bit definition of TDES3 register - */ -#define ETH_DMATxDesc_B2AP ((uint32_t)0xFFFFFFFF) /*!< Buffer2 Address Pointer */ - -/** - * @} - */ - - -/** @defgroup DMA_Rx_descriptor - * @{ - */ - -/**-------------------------------------------------------------------------------------------------------------------- - RDES0 | OWN(31) | Status [30:0] | - --------------------------------------------------------------------------------------------------------------------- - RDES1 | CTRL(31) | Reserved[30:29] | Buffer2 ByteCount[28:16] | CTRL[15:14] | Reserved(13) | Buffer1 ByteCount[12:0] | - --------------------------------------------------------------------------------------------------------------------- - RDES2 | Buffer1 Address [31:0] | - --------------------------------------------------------------------------------------------------------------------- - RDES3 | Buffer2 Address [31:0] / Next Desciptor Address [31:0] | - -------------------------------------------------------------------------------------------------------------------**/ - -/** - * @brief Bit definition of RDES0 register: DMA Rx descriptor status register - */ -#define ETH_DMARxDesc_OWN ((uint32_t)0x80000000) /*!< OWN bit: descriptor is owned by DMA engine */ -#define ETH_DMARxDesc_AFM ((uint32_t)0x40000000) /*!< DA Filter Fail for the rx frame */ -#define ETH_DMARxDesc_FL ((uint32_t)0x3FFF0000) /*!< Receive descriptor frame length */ -#define ETH_DMARxDesc_ES ((uint32_t)0x00008000) /*!< Error summary: OR of the following bits: DE || OE || IPC || LC || RWT || RE || CE */ -#define ETH_DMARxDesc_DE ((uint32_t)0x00004000) /*!< Desciptor error: no more descriptors for receive frame */ -#define ETH_DMARxDesc_SAF ((uint32_t)0x00002000) /*!< SA Filter Fail for the received frame */ -#define ETH_DMARxDesc_LE ((uint32_t)0x00001000) /*!< Frame size not matching with length field */ -#define ETH_DMARxDesc_OE ((uint32_t)0x00000800) /*!< Overflow Error: Frame was damaged due to buffer overflow */ -#define ETH_DMARxDesc_VLAN ((uint32_t)0x00000400) /*!< VLAN Tag: received frame is a VLAN frame */ -#define ETH_DMARxDesc_FS ((uint32_t)0x00000200) /*!< First descriptor of the frame */ -#define ETH_DMARxDesc_LS ((uint32_t)0x00000100) /*!< Last descriptor of the frame */ -#define ETH_DMARxDesc_IPV4HCE ((uint32_t)0x00000080) /*!< IPC Checksum Error: Rx Ipv4 header checksum error */ -#define ETH_DMARxDesc_LC ((uint32_t)0x00000040) /*!< Late collision occurred during reception */ -#define ETH_DMARxDesc_FT ((uint32_t)0x00000020) /*!< Frame type - Ethernet, otherwise 802.3 */ -#define ETH_DMARxDesc_RWT ((uint32_t)0x00000010) /*!< Receive Watchdog Timeout: watchdog timer expired during reception */ -#define ETH_DMARxDesc_RE ((uint32_t)0x00000008) /*!< Receive error: error reported by MII interface */ -#define ETH_DMARxDesc_DBE ((uint32_t)0x00000004) /*!< Dribble bit error: frame contains non int multiple of 8 bits */ -#define ETH_DMARxDesc_CE ((uint32_t)0x00000002) /*!< CRC error */ -#define ETH_DMARxDesc_MAMPCE ((uint32_t)0x00000001) /*!< Rx MAC Address/Payload Checksum Error: Rx MAC address matched/ Rx Payload Checksum Error */ - -/** - * @brief Bit definition of RDES1 register - */ -#define ETH_DMARxDesc_DIC ((uint32_t)0x80000000) /*!< Disable Interrupt on Completion */ -#define ETH_DMARxDesc_RBS2 ((uint32_t)0x1FFF0000) /*!< Receive Buffer2 Size */ -#define ETH_DMARxDesc_RER ((uint32_t)0x00008000) /*!< Receive End of Ring */ -#define ETH_DMARxDesc_RCH ((uint32_t)0x00004000) /*!< Second Address Chained */ -#define ETH_DMARxDesc_RBS1 ((uint32_t)0x00001FFF) /*!< Receive Buffer1 Size */ - -/** - * @brief Bit definition of RDES2 register - */ -#define ETH_DMARxDesc_B1AP ((uint32_t)0xFFFFFFFF) /*!< Buffer1 Address Pointer */ - -/** - * @brief Bit definition of RDES3 register - */ -#define ETH_DMARxDesc_B2AP ((uint32_t)0xFFFFFFFF) /*!< Buffer2 Address Pointer */ - -/**--------------------------------------------------------------------------**/ -/** - * @brief Desciption of common PHY registers - */ -/**--------------------------------------------------------------------------**/ - -/** - * @} - */ - -/** @defgroup PHY_Read_write_Timeouts - * @{ - */ -#define PHY_READ_TO ((uint32_t)0x0004FFFF) -#define PHY_WRITE_TO ((uint32_t)0x0004FFFF) - -/** - * @} - */ - -/** @defgroup PHY_Reset_Delay - * @{ - */ -#define PHY_ResetDelay ((uint32_t)0x04000000) - -/** - * @} - */ - -/** @defgroup PHY_Config_Delay - * @{ - */ -#define PHY_ConfigDelay ((uint32_t)0x00FFFFFF) - -/** - * @} - */ - -/** @defgroup PHY_Register_address - * @{ - */ -#define PHY_BCR 0 /*!< Tranceiver Basic Control Register */ -#define PHY_BSR 1 /*!< Tranceiver Basic Status Register */ - -/** - * @} - */ - -/** @defgroup PHY_basic_Control_register - * @{ - */ -#define PHY_Reset ((u16)0x8000) /*!< PHY Reset */ -#define PHY_Loopback ((u16)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((u16)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((u16)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((u16)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((u16)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AutoNegotiation ((u16)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_Restart_AutoNegotiation ((u16)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_Powerdown ((u16)0x0800) /*!< Select the power down mode */ -#define PHY_Isolate ((u16)0x0400) /*!< Isolate PHY from MII */ - -/** - * @} - */ - -/** @defgroup PHY_basic_status_register - * @{ - */ -#define PHY_AutoNego_Complete ((u16)0x0020) /*!< Auto-Negotioation process completed */ -#define PHY_Linked_Status ((u16)0x0004) /*!< Valid link established */ -#define PHY_Jabber_detection ((u16)0x0002) /*!< Jabber condition detected */ - -/** - * @} - */ - -/** @defgroup PHY_status_register - * @{ - */ -/* The PHY status register value change from a PHY to another so the user have - to update this value depending on the used external PHY */ -/** - * @brief For LAN8700 - */ -//#define PHY_SR 31 /*!< Tranceiver Status Register */ -/** - * @brief For DP83848 - */ -#define PHY_SR 16 /*!< Tranceiver Status Register */ - -/* The Speed and Duplex mask values change from a PHY to another so the user have to update - this value depending on the used external PHY */ -/** - * @brief For LAN8700 - */ -//#define PHY_Speed_Status ((u16)0x0004) /*!< Configured information of Speed: 10Mbps */ -//#define PHY_Duplex_Status ((u16)0x0010) /*!< Configured information of Duplex: Full-duplex */ - -/** - * @brief For DP83848 - */ -#define PHY_Speed_Status ((u16)0x0002) /*!< Configured information of Speed: 10Mbps */ -#define PHY_Duplex_Status ((u16)0x0004) /*!< Configured information of Duplex: Full-duplex */ -#define IS_ETH_PHY_ADDRESS(ADDRESS) ((ADDRESS) <= 0x20) -#define IS_ETH_PHY_REG(REG) (((REG) == PHY_BCR) || \ - ((REG) == PHY_BSR) || \ - ((REG) == PHY_SR)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief MAC defines - */ -/**--------------------------------------------------------------------------**/ - -/** - * @} - */ - -/** @defgroup ETH_AutoNegotiation - * @{ - */ -#define ETH_AutoNegotiation_Enable ((uint32_t)0x00000001) -#define ETH_AutoNegotiation_Disable ((uint32_t)0x00000000) -#define IS_ETH_AUTONEGOTIATION(CMD) (((CMD) == ETH_AutoNegotiation_Enable) || \ - ((CMD) == ETH_AutoNegotiation_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_watchdog - * @{ - */ -#define ETH_Watchdog_Enable ((uint32_t)0x00000000) -#define ETH_Watchdog_Disable ((uint32_t)0x00800000) -#define IS_ETH_WATCHDOG(CMD) (((CMD) == ETH_Watchdog_Enable) || \ - ((CMD) == ETH_Watchdog_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Jabber - * @{ - */ -#define ETH_Jabber_Enable ((uint32_t)0x00000000) -#define ETH_Jabber_Disable ((uint32_t)0x00400000) -#define IS_ETH_JABBER(CMD) (((CMD) == ETH_Jabber_Enable) || \ - ((CMD) == ETH_Jabber_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Inter_Frame_Gap - * @{ - */ -#define ETH_InterFrameGap_96Bit ((uint32_t)0x00000000) /*!< minimum IFG between frames during transmission is 96Bit */ -#define ETH_InterFrameGap_88Bit ((uint32_t)0x00020000) /*!< minimum IFG between frames during transmission is 88Bit */ -#define ETH_InterFrameGap_80Bit ((uint32_t)0x00040000) /*!< minimum IFG between frames during transmission is 80Bit */ -#define ETH_InterFrameGap_72Bit ((uint32_t)0x00060000) /*!< minimum IFG between frames during transmission is 72Bit */ -#define ETH_InterFrameGap_64Bit ((uint32_t)0x00080000) /*!< minimum IFG between frames during transmission is 64Bit */ -#define ETH_InterFrameGap_56Bit ((uint32_t)0x000A0000) /*!< minimum IFG between frames during transmission is 56Bit */ -#define ETH_InterFrameGap_48Bit ((uint32_t)0x000C0000) /*!< minimum IFG between frames during transmission is 48Bit */ -#define ETH_InterFrameGap_40Bit ((uint32_t)0x000E0000) /*!< minimum IFG between frames during transmission is 40Bit */ -#define IS_ETH_INTER_FRAME_GAP(GAP) (((GAP) == ETH_InterFrameGap_96Bit) || \ - ((GAP) == ETH_InterFrameGap_88Bit) || \ - ((GAP) == ETH_InterFrameGap_80Bit) || \ - ((GAP) == ETH_InterFrameGap_72Bit) || \ - ((GAP) == ETH_InterFrameGap_64Bit) || \ - ((GAP) == ETH_InterFrameGap_56Bit) || \ - ((GAP) == ETH_InterFrameGap_48Bit) || \ - ((GAP) == ETH_InterFrameGap_40Bit)) - -/** - * @} - */ - -/** @defgroup ETH_Carrier_Sense - * @{ - */ -#define ETH_CarrierSense_Enable ((uint32_t)0x00000000) -#define ETH_CarrierSense_Disable ((uint32_t)0x00010000) -#define IS_ETH_CARRIER_SENSE(CMD) (((CMD) == ETH_CarrierSense_Enable) || \ - ((CMD) == ETH_CarrierSense_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Speed - * @{ - */ -#define ETH_Speed_10M ((uint32_t)0x00000000) -#define ETH_Speed_100M ((uint32_t)0x00004000) -#define IS_ETH_SPEED(SPEED) (((SPEED) == ETH_Speed_10M) || \ - ((SPEED) == ETH_Speed_100M)) - -/** - * @} - */ - -/** @defgroup ETH_Receive_Own - * @{ - */ -#define ETH_ReceiveOwn_Enable ((uint32_t)0x00000000) -#define ETH_ReceiveOwn_Disable ((uint32_t)0x00002000) -#define IS_ETH_RECEIVE_OWN(CMD) (((CMD) == ETH_ReceiveOwn_Enable) || \ - ((CMD) == ETH_ReceiveOwn_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Loop_back_Mode - * @{ - */ -#define ETH_LoopbackMode_Enable ((uint32_t)0x00001000) -#define ETH_LoopbackMode_Disable ((uint32_t)0x00000000) -#define IS_ETH_LOOPBACK_MODE(CMD) (((CMD) == ETH_LoopbackMode_Enable) || \ - ((CMD) == ETH_LoopbackMode_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Duplex_mode - * @{ - */ -#define ETH_Mode_FullDuplex ((uint32_t)0x00000800) -#define ETH_Mode_HalfDuplex ((uint32_t)0x00000000) -#define IS_ETH_DUPLEX_MODE(MODE) (((MODE) == ETH_Mode_FullDuplex) || \ - ((MODE) == ETH_Mode_HalfDuplex)) - -/** - * @} - */ - -/** @defgroup ETH_Checksum_Offload - * @{ - */ -#define ETH_ChecksumOffload_Enable ((uint32_t)0x00000400) -#define ETH_ChecksumOffload_Disable ((uint32_t)0x00000000) -#define IS_ETH_CHECKSUM_OFFLOAD(CMD) (((CMD) == ETH_ChecksumOffload_Enable) || \ - ((CMD) == ETH_ChecksumOffload_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Retry_Transmission - * @{ - */ -#define ETH_RetryTransmission_Enable ((uint32_t)0x00000000) -#define ETH_RetryTransmission_Disable ((uint32_t)0x00000200) -#define IS_ETH_RETRY_TRANSMISSION(CMD) (((CMD) == ETH_RetryTransmission_Enable) || \ - ((CMD) == ETH_RetryTransmission_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Automatic_Pad_CRC_Strip - * @{ - */ -#define ETH_AutomaticPadCRCStrip_Enable ((uint32_t)0x00000080) -#define ETH_AutomaticPadCRCStrip_Disable ((uint32_t)0x00000000) -#define IS_ETH_AUTOMATIC_PADCRC_STRIP(CMD) (((CMD) == ETH_AutomaticPadCRCStrip_Enable) || \ - ((CMD) == ETH_AutomaticPadCRCStrip_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Back-Off_limit - * @{ - */ -#define ETH_BackOffLimit_10 ((uint32_t)0x00000000) -#define ETH_BackOffLimit_8 ((uint32_t)0x00000020) -#define ETH_BackOffLimit_4 ((uint32_t)0x00000040) -#define ETH_BackOffLimit_1 ((uint32_t)0x00000060) -#define IS_ETH_BACKOFF_LIMIT(LIMIT) (((LIMIT) == ETH_BackOffLimit_10) || \ - ((LIMIT) == ETH_BackOffLimit_8) || \ - ((LIMIT) == ETH_BackOffLimit_4) || \ - ((LIMIT) == ETH_BackOffLimit_1)) - -/** - * @} - */ - -/** @defgroup ETH_Deferral_Check - * @{ - */ -#define ETH_DeferralCheck_Enable ((uint32_t)0x00000010) -#define ETH_DeferralCheck_Disable ((uint32_t)0x00000000) -#define IS_ETH_DEFERRAL_CHECK(CMD) (((CMD) == ETH_DeferralCheck_Enable) || \ - ((CMD) == ETH_DeferralCheck_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Receive_All - * @{ - */ -#define ETH_ReceiveAll_Enable ((uint32_t)0x80000000) -#define ETH_ReceiveAll_Disable ((uint32_t)0x00000000) -#define IS_ETH_RECEIVE_ALL(CMD) (((CMD) == ETH_ReceiveAll_Enable) || \ - ((CMD) == ETH_ReceiveAll_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Source_Addr_Filter - * @{ - */ -#define ETH_SourceAddrFilter_Normal_Enable ((uint32_t)0x00000200) -#define ETH_SourceAddrFilter_Inverse_Enable ((uint32_t)0x00000300) -#define ETH_SourceAddrFilter_Disable ((uint32_t)0x00000000) -#define IS_ETH_SOURCE_ADDR_FILTER(CMD) (((CMD) == ETH_SourceAddrFilter_Normal_Enable) || \ - ((CMD) == ETH_SourceAddrFilter_Inverse_Enable) || \ - ((CMD) == ETH_SourceAddrFilter_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Pass_Control_Frames - * @{ - */ -#define ETH_PassControlFrames_BlockAll ((uint32_t)0x00000040) /*!< MAC filters all control frames from reaching the application */ -#define ETH_PassControlFrames_ForwardAll ((uint32_t)0x00000080) /*!< MAC forwards all control frames to application even if they fail the Address Filter */ -#define ETH_PassControlFrames_ForwardPassedAddrFilter ((uint32_t)0x000000C0) /*!< MAC forwards control frames that pass the Address Filter. */ -#define IS_ETH_CONTROL_FRAMES(PASS) (((PASS) == ETH_PassControlFrames_BlockAll) || \ - ((PASS) == ETH_PassControlFrames_ForwardAll) || \ - ((PASS) == ETH_PassControlFrames_ForwardPassedAddrFilter)) - -/** - * @} - */ - -/** @defgroup ETH_Broadcast_Frames_Reception - * @{ - */ -#define ETH_BroadcastFramesReception_Enable ((uint32_t)0x00000000) -#define ETH_BroadcastFramesReception_Disable ((uint32_t)0x00000020) -#define IS_ETH_BROADCAST_FRAMES_RECEPTION(CMD) (((CMD) == ETH_BroadcastFramesReception_Enable) || \ - ((CMD) == ETH_BroadcastFramesReception_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Destination_Addr_Filter - * @{ - */ -#define ETH_DestinationAddrFilter_Normal ((uint32_t)0x00000000) -#define ETH_DestinationAddrFilter_Inverse ((uint32_t)0x00000008) -#define IS_ETH_DESTINATION_ADDR_FILTER(FILTER) (((FILTER) == ETH_DestinationAddrFilter_Normal) || \ - ((FILTER) == ETH_DestinationAddrFilter_Inverse)) - -/** - * @} - */ - -/** @defgroup ETH_Promiscuous_Mode - * @{ - */ -#define ETH_PromiscuousMode_Enable ((uint32_t)0x00000001) -#define ETH_PromiscuousMode_Disable ((uint32_t)0x00000000) -#define IS_ETH_PROMISCUOUS_MODE(CMD) (((CMD) == ETH_PromiscuousMode_Enable) || \ - ((CMD) == ETH_PromiscuousMode_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_multicast_frames_filter - * @{ - */ -#define ETH_MulticastFramesFilter_PerfectHashTable ((uint32_t)0x00000404) -#define ETH_MulticastFramesFilter_HashTable ((uint32_t)0x00000004) -#define ETH_MulticastFramesFilter_Perfect ((uint32_t)0x00000000) -#define ETH_MulticastFramesFilter_None ((uint32_t)0x00000010) -#define IS_ETH_MULTICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_MulticastFramesFilter_PerfectHashTable) || \ - ((FILTER) == ETH_MulticastFramesFilter_HashTable) || \ - ((FILTER) == ETH_MulticastFramesFilter_Perfect) || \ - ((FILTER) == ETH_MulticastFramesFilter_None)) - - -/** - * @} - */ - -/** @defgroup ETH_unicast_frames_filter - * @{ - */ -#define ETH_UnicastFramesFilter_PerfectHashTable ((uint32_t)0x00000402) -#define ETH_UnicastFramesFilter_HashTable ((uint32_t)0x00000002) -#define ETH_UnicastFramesFilter_Perfect ((uint32_t)0x00000000) -#define IS_ETH_UNICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_UnicastFramesFilter_PerfectHashTable) || \ - ((FILTER) == ETH_UnicastFramesFilter_HashTable) || \ - ((FILTER) == ETH_UnicastFramesFilter_Perfect)) - -/** - * @} - */ - -/** @defgroup ETH_Pause_Time - * @{ - */ -#define IS_ETH_PAUSE_TIME(TIME) ((TIME) <= 0xFFFF) - -/** - * @} - */ - -/** @defgroup ETH_Zero_Quanta_Pause - * @{ - */ -#define ETH_ZeroQuantaPause_Enable ((uint32_t)0x00000000) -#define ETH_ZeroQuantaPause_Disable ((uint32_t)0x00000080) -#define IS_ETH_ZEROQUANTA_PAUSE(CMD) (((CMD) == ETH_ZeroQuantaPause_Enable) || \ - ((CMD) == ETH_ZeroQuantaPause_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Pause_Low_Threshold - * @{ - */ -#define ETH_PauseLowThreshold_Minus4 ((uint32_t)0x00000000) /*!< Pause time minus 4 slot times */ -#define ETH_PauseLowThreshold_Minus28 ((uint32_t)0x00000010) /*!< Pause time minus 28 slot times */ -#define ETH_PauseLowThreshold_Minus144 ((uint32_t)0x00000020) /*!< Pause time minus 144 slot times */ -#define ETH_PauseLowThreshold_Minus256 ((uint32_t)0x00000030) /*!< Pause time minus 256 slot times */ -#define IS_ETH_PAUSE_LOW_THRESHOLD(THRESHOLD) (((THRESHOLD) == ETH_PauseLowThreshold_Minus4) || \ - ((THRESHOLD) == ETH_PauseLowThreshold_Minus28) || \ - ((THRESHOLD) == ETH_PauseLowThreshold_Minus144) || \ - ((THRESHOLD) == ETH_PauseLowThreshold_Minus256)) - -/** - * @} - */ - -/** @defgroup ETH_Unicast_Pause_Frame_Detect - * @{ - */ -#define ETH_UnicastPauseFrameDetect_Enable ((uint32_t)0x00000008) -#define ETH_UnicastPauseFrameDetect_Disable ((uint32_t)0x00000000) -#define IS_ETH_UNICAST_PAUSE_FRAME_DETECT(CMD) (((CMD) == ETH_UnicastPauseFrameDetect_Enable) || \ - ((CMD) == ETH_UnicastPauseFrameDetect_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Receive_Flow_Control - * @{ - */ -#define ETH_ReceiveFlowControl_Enable ((uint32_t)0x00000004) -#define ETH_ReceiveFlowControl_Disable ((uint32_t)0x00000000) -#define IS_ETH_RECEIVE_FLOWCONTROL(CMD) (((CMD) == ETH_ReceiveFlowControl_Enable) || \ - ((CMD) == ETH_ReceiveFlowControl_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Transmit_Flow_Control - * @{ - */ -#define ETH_TransmitFlowControl_Enable ((uint32_t)0x00000002) -#define ETH_TransmitFlowControl_Disable ((uint32_t)0x00000000) -#define IS_ETH_TRANSMIT_FLOWCONTROL(CMD) (((CMD) == ETH_TransmitFlowControl_Enable) || \ - ((CMD) == ETH_TransmitFlowControl_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_VLAN_Tag_Comparison - * @{ - */ -#define ETH_VLANTagComparison_12Bit ((uint32_t)0x00010000) -#define ETH_VLANTagComparison_16Bit ((uint32_t)0x00000000) -#define IS_ETH_VLAN_TAG_COMPARISON(COMPARISON) (((COMPARISON) == ETH_VLANTagComparison_12Bit) || \ - ((COMPARISON) == ETH_VLANTagComparison_16Bit)) -#define IS_ETH_VLAN_TAG_IDENTIFIER(IDENTIFIER) ((IDENTIFIER) <= 0xFFFF) - -/** - * @} - */ - -/** @defgroup ETH_MAC_Flags - * @{ - */ -#define ETH_MAC_FLAG_TST ((uint32_t)0x00000200) /*!< Time stamp trigger flag (on MAC) */ -#define ETH_MAC_FLAG_MMCT ((uint32_t)0x00000040) /*!< MMC transmit flag */ -#define ETH_MAC_FLAG_MMCR ((uint32_t)0x00000020) /*!< MMC receive flag */ -#define ETH_MAC_FLAG_MMC ((uint32_t)0x00000010) /*!< MMC flag (on MAC) */ -#define ETH_MAC_FLAG_PMT ((uint32_t)0x00000008) /*!< PMT flag (on MAC) */ -#define IS_ETH_MAC_GET_FLAG(FLAG) (((FLAG) == ETH_MAC_FLAG_TST) || ((FLAG) == ETH_MAC_FLAG_MMCT) || \ - ((FLAG) == ETH_MAC_FLAG_MMCR) || ((FLAG) == ETH_MAC_FLAG_MMC) || \ - ((FLAG) == ETH_MAC_FLAG_PMT)) -/** - * @} - */ - -/** @defgroup ETH_MAC_Interrupts - * @{ - */ -#define ETH_MAC_IT_TST ((uint32_t)0x00000200) /*!< Time stamp trigger interrupt (on MAC) */ -#define ETH_MAC_IT_MMCT ((uint32_t)0x00000040) /*!< MMC transmit interrupt */ -#define ETH_MAC_IT_MMCR ((uint32_t)0x00000020) /*!< MMC receive interrupt */ -#define ETH_MAC_IT_MMC ((uint32_t)0x00000010) /*!< MMC interrupt (on MAC) */ -#define ETH_MAC_IT_PMT ((uint32_t)0x00000008) /*!< PMT interrupt (on MAC) */ -#define IS_ETH_MAC_IT(IT) ((((IT) & (uint32_t)0xFFFFFDF7) == 0x00) && ((IT) != 0x00)) -#define IS_ETH_MAC_GET_IT(IT) (((IT) == ETH_MAC_IT_TST) || ((IT) == ETH_MAC_IT_MMCT) || \ - ((IT) == ETH_MAC_IT_MMCR) || ((IT) == ETH_MAC_IT_MMC) || \ - ((IT) == ETH_MAC_IT_PMT)) -/** - * @} - */ - -/** @defgroup ETH_MAC_addresses - * @{ - */ -#define ETH_MAC_Address0 ((uint32_t)0x00000000) -#define ETH_MAC_Address1 ((uint32_t)0x00000008) -#define ETH_MAC_Address2 ((uint32_t)0x00000010) -#define ETH_MAC_Address3 ((uint32_t)0x00000018) -#define IS_ETH_MAC_ADDRESS0123(ADDRESS) (((ADDRESS) == ETH_MAC_Address0) || \ - ((ADDRESS) == ETH_MAC_Address1) || \ - ((ADDRESS) == ETH_MAC_Address2) || \ - ((ADDRESS) == ETH_MAC_Address3)) -#define IS_ETH_MAC_ADDRESS123(ADDRESS) (((ADDRESS) == ETH_MAC_Address1) || \ - ((ADDRESS) == ETH_MAC_Address2) || \ - ((ADDRESS) == ETH_MAC_Address3)) -/** - * @} - */ - -/** @defgroup ETH_MAC_addresses_filter:_SA_DA_filed_of_received_frames - * @{ - */ -#define ETH_MAC_AddressFilter_SA ((uint32_t)0x00000000) -#define ETH_MAC_AddressFilter_DA ((uint32_t)0x00000008) -#define IS_ETH_MAC_ADDRESS_FILTER(FILTER) (((FILTER) == ETH_MAC_AddressFilter_SA) || \ - ((FILTER) == ETH_MAC_AddressFilter_DA)) -/** - * @} - */ - -/** @defgroup ETH_MAC_addresses_filter:_Mask_bytes - * @{ - */ -#define ETH_MAC_AddressMask_Byte6 ((uint32_t)0x20000000) /*!< Mask MAC Address high reg bits [15:8] */ -#define ETH_MAC_AddressMask_Byte5 ((uint32_t)0x10000000) /*!< Mask MAC Address high reg bits [7:0] */ -#define ETH_MAC_AddressMask_Byte4 ((uint32_t)0x08000000) /*!< Mask MAC Address low reg bits [31:24] */ -#define ETH_MAC_AddressMask_Byte3 ((uint32_t)0x04000000) /*!< Mask MAC Address low reg bits [23:16] */ -#define ETH_MAC_AddressMask_Byte2 ((uint32_t)0x02000000) /*!< Mask MAC Address low reg bits [15:8] */ -#define ETH_MAC_AddressMask_Byte1 ((uint32_t)0x01000000) /*!< Mask MAC Address low reg bits [70] */ -#define IS_ETH_MAC_ADDRESS_MASK(MASK) (((MASK) == ETH_MAC_AddressMask_Byte6) || \ - ((MASK) == ETH_MAC_AddressMask_Byte5) || \ - ((MASK) == ETH_MAC_AddressMask_Byte4) || \ - ((MASK) == ETH_MAC_AddressMask_Byte3) || \ - ((MASK) == ETH_MAC_AddressMask_Byte2) || \ - ((MASK) == ETH_MAC_AddressMask_Byte1)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet DMA Desciptors defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_DMA_Tx_descriptor_flags - * @{ - */ -#define IS_ETH_DMATxDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMATxDesc_OWN) || \ - ((FLAG) == ETH_DMATxDesc_IC) || \ - ((FLAG) == ETH_DMATxDesc_LS) || \ - ((FLAG) == ETH_DMATxDesc_FS) || \ - ((FLAG) == ETH_DMATxDesc_DC) || \ - ((FLAG) == ETH_DMATxDesc_DP) || \ - ((FLAG) == ETH_DMATxDesc_TTSE) || \ - ((FLAG) == ETH_DMATxDesc_TER) || \ - ((FLAG) == ETH_DMATxDesc_TCH) || \ - ((FLAG) == ETH_DMATxDesc_TTSS) || \ - ((FLAG) == ETH_DMATxDesc_IHE) || \ - ((FLAG) == ETH_DMATxDesc_ES) || \ - ((FLAG) == ETH_DMATxDesc_JT) || \ - ((FLAG) == ETH_DMATxDesc_FF) || \ - ((FLAG) == ETH_DMATxDesc_PCE) || \ - ((FLAG) == ETH_DMATxDesc_LCA) || \ - ((FLAG) == ETH_DMATxDesc_NC) || \ - ((FLAG) == ETH_DMATxDesc_LCO) || \ - ((FLAG) == ETH_DMATxDesc_EC) || \ - ((FLAG) == ETH_DMATxDesc_VF) || \ - ((FLAG) == ETH_DMATxDesc_CC) || \ - ((FLAG) == ETH_DMATxDesc_ED) || \ - ((FLAG) == ETH_DMATxDesc_UF) || \ - ((FLAG) == ETH_DMATxDesc_DB)) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Tx_descriptor_segment - * @{ - */ -#define ETH_DMATxDesc_LastSegment ((uint32_t)0x40000000) /*!< Last Segment */ -#define ETH_DMATxDesc_FirstSegment ((uint32_t)0x20000000) /*!< First Segment */ -#define IS_ETH_DMA_TXDESC_SEGMENT(SEGMENT) (((SEGMENT) == ETH_DMATxDesc_LastSegment) || \ - ((SEGMENT) == ETH_DMATxDesc_FirstSegment)) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Tx_descriptor_Checksum_Insertion_Control - * @{ - */ -#define ETH_DMATxDesc_ChecksumByPass ((uint32_t)0x00000000) /*!< Checksum engine bypass */ -#define ETH_DMATxDesc_ChecksumIPV4Header ((uint32_t)0x00400000) /*!< IPv4 header checksum insertion */ -#define ETH_DMATxDesc_ChecksumTCPUDPICMPSegment ((uint32_t)0x00800000) /*!< TCP/UDP/ICMP checksum insertion. Pseudo header checksum is assumed to be present */ -#define ETH_DMATxDesc_ChecksumTCPUDPICMPFull ((uint32_t)0x00C00000) /*!< TCP/UDP/ICMP checksum fully in hardware including pseudo header */ -#define IS_ETH_DMA_TXDESC_CHECKSUM(CHECKSUM) (((CHECKSUM) == ETH_DMATxDesc_ChecksumByPass) || \ - ((CHECKSUM) == ETH_DMATxDesc_ChecksumIPV4Header) || \ - ((CHECKSUM) == ETH_DMATxDesc_ChecksumTCPUDPICMPSegment) || \ - ((CHECKSUM) == ETH_DMATxDesc_ChecksumTCPUDPICMPFull)) -/** - * @brief ETH DMA Tx Desciptor buffer size - */ -#define IS_ETH_DMATxDESC_BUFFER_SIZE(SIZE) ((SIZE) <= 0x1FFF) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Rx_descriptor_flags - * @{ - */ -#define IS_ETH_DMARxDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMARxDesc_OWN) || \ - ((FLAG) == ETH_DMARxDesc_AFM) || \ - ((FLAG) == ETH_DMARxDesc_ES) || \ - ((FLAG) == ETH_DMARxDesc_DE) || \ - ((FLAG) == ETH_DMARxDesc_SAF) || \ - ((FLAG) == ETH_DMARxDesc_LE) || \ - ((FLAG) == ETH_DMARxDesc_OE) || \ - ((FLAG) == ETH_DMARxDesc_VLAN) || \ - ((FLAG) == ETH_DMARxDesc_FS) || \ - ((FLAG) == ETH_DMARxDesc_LS) || \ - ((FLAG) == ETH_DMARxDesc_IPV4HCE) || \ - ((FLAG) == ETH_DMARxDesc_LC) || \ - ((FLAG) == ETH_DMARxDesc_FT) || \ - ((FLAG) == ETH_DMARxDesc_RWT) || \ - ((FLAG) == ETH_DMARxDesc_RE) || \ - ((FLAG) == ETH_DMARxDesc_DBE) || \ - ((FLAG) == ETH_DMARxDesc_CE) || \ - ((FLAG) == ETH_DMARxDesc_MAMPCE)) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Rx_descriptor_buffers_ - * @{ - */ -#define ETH_DMARxDesc_Buffer1 ((uint32_t)0x00000000) /*!< DMA Rx Desc Buffer1 */ -#define ETH_DMARxDesc_Buffer2 ((uint32_t)0x00000001) /*!< DMA Rx Desc Buffer2 */ -#define IS_ETH_DMA_RXDESC_BUFFER(BUFFER) (((BUFFER) == ETH_DMARxDesc_Buffer1) || \ - ((BUFFER) == ETH_DMARxDesc_Buffer2)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet DMA defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_Drop_TCP_IP_Checksum_Error_Frame - * @{ - */ -#define ETH_DropTCPIPChecksumErrorFrame_Enable ((uint32_t)0x00000000) -#define ETH_DropTCPIPChecksumErrorFrame_Disable ((uint32_t)0x04000000) -#define IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(CMD) (((CMD) == ETH_DropTCPIPChecksumErrorFrame_Enable) || \ - ((CMD) == ETH_DropTCPIPChecksumErrorFrame_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Receive_Store_Forward - * @{ - */ -#define ETH_ReceiveStoreForward_Enable ((uint32_t)0x02000000) -#define ETH_ReceiveStoreForward_Disable ((uint32_t)0x00000000) -#define IS_ETH_RECEIVE_STORE_FORWARD(CMD) (((CMD) == ETH_ReceiveStoreForward_Enable) || \ - ((CMD) == ETH_ReceiveStoreForward_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Flush_Received_Frame - * @{ - */ -#define ETH_FlushReceivedFrame_Enable ((uint32_t)0x00000000) -#define ETH_FlushReceivedFrame_Disable ((uint32_t)0x01000000) -#define IS_ETH_FLUSH_RECEIVE_FRAME(CMD) (((CMD) == ETH_FlushReceivedFrame_Enable) || \ - ((CMD) == ETH_FlushReceivedFrame_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Transmit_Store_Forward - * @{ - */ -#define ETH_TransmitStoreForward_Enable ((uint32_t)0x00200000) -#define ETH_TransmitStoreForward_Disable ((uint32_t)0x00000000) -#define IS_ETH_TRANSMIT_STORE_FORWARD(CMD) (((CMD) == ETH_TransmitStoreForward_Enable) || \ - ((CMD) == ETH_TransmitStoreForward_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Transmit_Threshold_Control - * @{ - */ -#define ETH_TransmitThresholdControl_64Bytes ((uint32_t)0x00000000) /*!< threshold level of the MTL Transmit FIFO is 64 Bytes */ -#define ETH_TransmitThresholdControl_128Bytes ((uint32_t)0x00004000) /*!< threshold level of the MTL Transmit FIFO is 128 Bytes */ -#define ETH_TransmitThresholdControl_192Bytes ((uint32_t)0x00008000) /*!< threshold level of the MTL Transmit FIFO is 192 Bytes */ -#define ETH_TransmitThresholdControl_256Bytes ((uint32_t)0x0000C000) /*!< threshold level of the MTL Transmit FIFO is 256 Bytes */ -#define ETH_TransmitThresholdControl_40Bytes ((uint32_t)0x00010000) /*!< threshold level of the MTL Transmit FIFO is 40 Bytes */ -#define ETH_TransmitThresholdControl_32Bytes ((uint32_t)0x00014000) /*!< threshold level of the MTL Transmit FIFO is 32 Bytes */ -#define ETH_TransmitThresholdControl_24Bytes ((uint32_t)0x00018000) /*!< threshold level of the MTL Transmit FIFO is 24 Bytes */ -#define ETH_TransmitThresholdControl_16Bytes ((uint32_t)0x0001C000) /*!< threshold level of the MTL Transmit FIFO is 16 Bytes */ -#define IS_ETH_TRANSMIT_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_TransmitThresholdControl_64Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_128Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_192Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_256Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_40Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_32Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_24Bytes) || \ - ((THRESHOLD) == ETH_TransmitThresholdControl_16Bytes)) -/** - * @} - */ - -/** @defgroup ETH_Forward_Error_Frames - * @{ - */ -#define ETH_ForwardErrorFrames_Enable ((uint32_t)0x00000080) -#define ETH_ForwardErrorFrames_Disable ((uint32_t)0x00000000) -#define IS_ETH_FORWARD_ERROR_FRAMES(CMD) (((CMD) == ETH_ForwardErrorFrames_Enable) || \ - ((CMD) == ETH_ForwardErrorFrames_Disable)) -/** - * @} - */ - -/** @defgroup ETH_Forward_Undersized_Good_Frames - * @{ - */ -#define ETH_ForwardUndersizedGoodFrames_Enable ((uint32_t)0x00000040) -#define ETH_ForwardUndersizedGoodFrames_Disable ((uint32_t)0x00000000) -#define IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(CMD) (((CMD) == ETH_ForwardUndersizedGoodFrames_Enable) || \ - ((CMD) == ETH_ForwardUndersizedGoodFrames_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Receive_Threshold_Control - * @{ - */ -#define ETH_ReceiveThresholdControl_64Bytes ((uint32_t)0x00000000) /*!< threshold level of the MTL Receive FIFO is 64 Bytes */ -#define ETH_ReceiveThresholdControl_32Bytes ((uint32_t)0x00000008) /*!< threshold level of the MTL Receive FIFO is 32 Bytes */ -#define ETH_ReceiveThresholdControl_96Bytes ((uint32_t)0x00000010) /*!< threshold level of the MTL Receive FIFO is 96 Bytes */ -#define ETH_ReceiveThresholdControl_128Bytes ((uint32_t)0x00000018) /*!< threshold level of the MTL Receive FIFO is 128 Bytes */ -#define IS_ETH_RECEIVE_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_ReceiveThresholdControl_64Bytes) || \ - ((THRESHOLD) == ETH_ReceiveThresholdControl_32Bytes) || \ - ((THRESHOLD) == ETH_ReceiveThresholdControl_96Bytes) || \ - ((THRESHOLD) == ETH_ReceiveThresholdControl_128Bytes)) -/** - * @} - */ - -/** @defgroup ETH_Second_Frame_Operate - * @{ - */ -#define ETH_SecondFrameOperate_Enable ((uint32_t)0x00000004) -#define ETH_SecondFrameOperate_Disable ((uint32_t)0x00000000) -#define IS_ETH_SECOND_FRAME_OPERATE(CMD) (((CMD) == ETH_SecondFrameOperate_Enable) || \ - ((CMD) == ETH_SecondFrameOperate_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Address_Aligned_Beats - * @{ - */ -#define ETH_AddressAlignedBeats_Enable ((uint32_t)0x02000000) -#define ETH_AddressAlignedBeats_Disable ((uint32_t)0x00000000) -#define IS_ETH_ADDRESS_ALIGNED_BEATS(CMD) (((CMD) == ETH_AddressAlignedBeats_Enable) || \ - ((CMD) == ETH_AddressAlignedBeats_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Fixed_Burst - * @{ - */ -#define ETH_FixedBurst_Enable ((uint32_t)0x00010000) -#define ETH_FixedBurst_Disable ((uint32_t)0x00000000) -#define IS_ETH_FIXED_BURST(CMD) (((CMD) == ETH_FixedBurst_Enable) || \ - ((CMD) == ETH_FixedBurst_Disable)) - -/** - * @} - */ - -/** @defgroup ETH_Rx_DMA_Burst_Length - * @{ - */ -#define ETH_RxDMABurstLength_1Beat ((uint32_t)0x00020000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 1 */ -#define ETH_RxDMABurstLength_2Beat ((uint32_t)0x00040000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 2 */ -#define ETH_RxDMABurstLength_4Beat ((uint32_t)0x00080000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */ -#define ETH_RxDMABurstLength_8Beat ((uint32_t)0x00100000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */ -#define ETH_RxDMABurstLength_16Beat ((uint32_t)0x00200000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */ -#define ETH_RxDMABurstLength_32Beat ((uint32_t)0x00400000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */ -#define ETH_RxDMABurstLength_4xPBL_4Beat ((uint32_t)0x01020000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */ -#define ETH_RxDMABurstLength_4xPBL_8Beat ((uint32_t)0x01040000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */ -#define ETH_RxDMABurstLength_4xPBL_16Beat ((uint32_t)0x01080000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */ -#define ETH_RxDMABurstLength_4xPBL_32Beat ((uint32_t)0x01100000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */ -#define ETH_RxDMABurstLength_4xPBL_64Beat ((uint32_t)0x01200000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 64 */ -#define ETH_RxDMABurstLength_4xPBL_128Beat ((uint32_t)0x01400000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 128 */ -#define IS_ETH_RXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_RxDMABurstLength_1Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_2Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_8Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_16Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_32Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_4Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_8Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_16Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_32Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_64Beat) || \ - ((LENGTH) == ETH_RxDMABurstLength_4xPBL_128Beat)) - -/** - * @} - */ - -/** @defgroup ETH_Tx_DMA_Burst_Length - * @{ - */ -#define ETH_TxDMABurstLength_1Beat ((uint32_t)0x00000100) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 1 */ -#define ETH_TxDMABurstLength_2Beat ((uint32_t)0x00000200) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 2 */ -#define ETH_TxDMABurstLength_4Beat ((uint32_t)0x00000400) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */ -#define ETH_TxDMABurstLength_8Beat ((uint32_t)0x00000800) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */ -#define ETH_TxDMABurstLength_16Beat ((uint32_t)0x00001000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */ -#define ETH_TxDMABurstLength_32Beat ((uint32_t)0x00002000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */ -#define ETH_TxDMABurstLength_4xPBL_4Beat ((uint32_t)0x01000100) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */ -#define ETH_TxDMABurstLength_4xPBL_8Beat ((uint32_t)0x01000200) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */ -#define ETH_TxDMABurstLength_4xPBL_16Beat ((uint32_t)0x01000400) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */ -#define ETH_TxDMABurstLength_4xPBL_32Beat ((uint32_t)0x01000800) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */ -#define ETH_TxDMABurstLength_4xPBL_64Beat ((uint32_t)0x01001000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 64 */ -#define ETH_TxDMABurstLength_4xPBL_128Beat ((uint32_t)0x01002000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 128 */ -#define IS_ETH_TXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_TxDMABurstLength_1Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_2Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_8Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_16Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_32Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_4Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_8Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_16Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_32Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_64Beat) || \ - ((LENGTH) == ETH_TxDMABurstLength_4xPBL_128Beat)) -/** - * @brief ETH DMA Desciptor SkipLength - */ -#define IS_ETH_DMA_DESC_SKIP_LENGTH(LENGTH) ((LENGTH) <= 0x1F) - -/** - * @} - */ - -/** @defgroup ETH_DMA_Arbitration - * @{ - */ -#define ETH_DMAArbitration_RoundRobin_RxTx_1_1 ((uint32_t)0x00000000) -#define ETH_DMAArbitration_RoundRobin_RxTx_2_1 ((uint32_t)0x00004000) -#define ETH_DMAArbitration_RoundRobin_RxTx_3_1 ((uint32_t)0x00008000) -#define ETH_DMAArbitration_RoundRobin_RxTx_4_1 ((uint32_t)0x0000C000) -#define ETH_DMAArbitration_RxPriorTx ((uint32_t)0x00000002) -#define IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(RATIO) (((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_1_1) || \ - ((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_2_1) || \ - ((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_3_1) || \ - ((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_4_1) || \ - ((RATIO) == ETH_DMAArbitration_RxPriorTx)) -/** - * @} - */ - -/** @defgroup ETH_DMA_Flags - * @{ - */ -#define ETH_DMA_FLAG_TST ((uint32_t)0x20000000) /*!< Time-stamp trigger interrupt (on DMA) */ -#define ETH_DMA_FLAG_PMT ((uint32_t)0x10000000) /*!< PMT interrupt (on DMA) */ -#define ETH_DMA_FLAG_MMC ((uint32_t)0x08000000) /*!< MMC interrupt (on DMA) */ -#define ETH_DMA_FLAG_DataTransferError ((uint32_t)0x00800000) /*!< Error bits 0-Rx DMA, 1-Tx DMA */ -#define ETH_DMA_FLAG_ReadWriteError ((uint32_t)0x01000000) /*!< Error bits 0-write trnsf, 1-read transfr */ -#define ETH_DMA_FLAG_AccessError ((uint32_t)0x02000000) /*!< Error bits 0-data buffer, 1-desc. access */ -#define ETH_DMA_FLAG_NIS ((uint32_t)0x00010000) /*!< Normal interrupt summary flag */ -#define ETH_DMA_FLAG_AIS ((uint32_t)0x00008000) /*!< Abnormal interrupt summary flag */ -#define ETH_DMA_FLAG_ER ((uint32_t)0x00004000) /*!< Early receive flag */ -#define ETH_DMA_FLAG_FBE ((uint32_t)0x00002000) /*!< Fatal bus error flag */ -#define ETH_DMA_FLAG_ET ((uint32_t)0x00000400) /*!< Early transmit flag */ -#define ETH_DMA_FLAG_RWT ((uint32_t)0x00000200) /*!< Receive watchdog timeout flag */ -#define ETH_DMA_FLAG_RPS ((uint32_t)0x00000100) /*!< Receive process stopped flag */ -#define ETH_DMA_FLAG_RBU ((uint32_t)0x00000080) /*!< Receive buffer unavailable flag */ -#define ETH_DMA_FLAG_R ((uint32_t)0x00000040) /*!< Receive flag */ -#define ETH_DMA_FLAG_TU ((uint32_t)0x00000020) /*!< Underflow flag */ -#define ETH_DMA_FLAG_RO ((uint32_t)0x00000010) /*!< Overflow flag */ -#define ETH_DMA_FLAG_TJT ((uint32_t)0x00000008) /*!< Transmit jabber timeout flag */ -#define ETH_DMA_FLAG_TBU ((uint32_t)0x00000004) /*!< Transmit buffer unavailable flag */ -#define ETH_DMA_FLAG_TPS ((uint32_t)0x00000002) /*!< Transmit process stopped flag */ -#define ETH_DMA_FLAG_T ((uint32_t)0x00000001) /*!< Transmit flag */ - -#define IS_ETH_DMA_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFE1800) == 0x00) && ((FLAG) != 0x00)) -#define IS_ETH_DMA_GET_FLAG(FLAG) (((FLAG) == ETH_DMA_FLAG_TST) || ((FLAG) == ETH_DMA_FLAG_PMT) || \ - ((FLAG) == ETH_DMA_FLAG_MMC) || ((FLAG) == ETH_DMA_FLAG_DataTransferError) || \ - ((FLAG) == ETH_DMA_FLAG_ReadWriteError) || ((FLAG) == ETH_DMA_FLAG_AccessError) || \ - ((FLAG) == ETH_DMA_FLAG_NIS) || ((FLAG) == ETH_DMA_FLAG_AIS) || \ - ((FLAG) == ETH_DMA_FLAG_ER) || ((FLAG) == ETH_DMA_FLAG_FBE) || \ - ((FLAG) == ETH_DMA_FLAG_ET) || ((FLAG) == ETH_DMA_FLAG_RWT) || \ - ((FLAG) == ETH_DMA_FLAG_RPS) || ((FLAG) == ETH_DMA_FLAG_RBU) || \ - ((FLAG) == ETH_DMA_FLAG_R) || ((FLAG) == ETH_DMA_FLAG_TU) || \ - ((FLAG) == ETH_DMA_FLAG_RO) || ((FLAG) == ETH_DMA_FLAG_TJT) || \ - ((FLAG) == ETH_DMA_FLAG_TBU) || ((FLAG) == ETH_DMA_FLAG_TPS) || \ - ((FLAG) == ETH_DMA_FLAG_T)) -/** - * @} - */ - -/** @defgroup ETH_DMA_Interrupts - * @{ - */ -#define ETH_DMA_IT_TST ((uint32_t)0x20000000) /*!< Time-stamp trigger interrupt (on DMA) */ -#define ETH_DMA_IT_PMT ((uint32_t)0x10000000) /*!< PMT interrupt (on DMA) */ -#define ETH_DMA_IT_MMC ((uint32_t)0x08000000) /*!< MMC interrupt (on DMA) */ -#define ETH_DMA_IT_NIS ((uint32_t)0x00010000) /*!< Normal interrupt summary */ -#define ETH_DMA_IT_AIS ((uint32_t)0x00008000) /*!< Abnormal interrupt summary */ -#define ETH_DMA_IT_ER ((uint32_t)0x00004000) /*!< Early receive interrupt */ -#define ETH_DMA_IT_FBE ((uint32_t)0x00002000) /*!< Fatal bus error interrupt */ -#define ETH_DMA_IT_ET ((uint32_t)0x00000400) /*!< Early transmit interrupt */ -#define ETH_DMA_IT_RWT ((uint32_t)0x00000200) /*!< Receive watchdog timeout interrupt */ -#define ETH_DMA_IT_RPS ((uint32_t)0x00000100) /*!< Receive process stopped interrupt */ -#define ETH_DMA_IT_RBU ((uint32_t)0x00000080) /*!< Receive buffer unavailable interrupt */ -#define ETH_DMA_IT_R ((uint32_t)0x00000040) /*!< Receive interrupt */ -#define ETH_DMA_IT_TU ((uint32_t)0x00000020) /*!< Underflow interrupt */ -#define ETH_DMA_IT_RO ((uint32_t)0x00000010) /*!< Overflow interrupt */ -#define ETH_DMA_IT_TJT ((uint32_t)0x00000008) /*!< Transmit jabber timeout interrupt */ -#define ETH_DMA_IT_TBU ((uint32_t)0x00000004) /*!< Transmit buffer unavailable interrupt */ -#define ETH_DMA_IT_TPS ((uint32_t)0x00000002) /*!< Transmit process stopped interrupt */ -#define ETH_DMA_IT_T ((uint32_t)0x00000001) /*!< Transmit interrupt */ - -#define IS_ETH_DMA_IT(IT) ((((IT) & (uint32_t)0xFFFE1800) == 0x00) && ((IT) != 0x00)) -#define IS_ETH_DMA_GET_IT(IT) (((IT) == ETH_DMA_IT_TST) || ((IT) == ETH_DMA_IT_PMT) || \ - ((IT) == ETH_DMA_IT_MMC) || ((IT) == ETH_DMA_IT_NIS) || \ - ((IT) == ETH_DMA_IT_AIS) || ((IT) == ETH_DMA_IT_ER) || \ - ((IT) == ETH_DMA_IT_FBE) || ((IT) == ETH_DMA_IT_ET) || \ - ((IT) == ETH_DMA_IT_RWT) || ((IT) == ETH_DMA_IT_RPS) || \ - ((IT) == ETH_DMA_IT_RBU) || ((IT) == ETH_DMA_IT_R) || \ - ((IT) == ETH_DMA_IT_TU) || ((IT) == ETH_DMA_IT_RO) || \ - ((IT) == ETH_DMA_IT_TJT) || ((IT) == ETH_DMA_IT_TBU) || \ - ((IT) == ETH_DMA_IT_TPS) || ((IT) == ETH_DMA_IT_T)) - -/** - * @} - */ - -/** @defgroup ETH_DMA_transmit_process_state_ - * @{ - */ -#define ETH_DMA_TransmitProcess_Stopped ((uint32_t)0x00000000) /*!< Stopped - Reset or Stop Tx Command issued */ -#define ETH_DMA_TransmitProcess_Fetching ((uint32_t)0x00100000) /*!< Running - fetching the Tx descriptor */ -#define ETH_DMA_TransmitProcess_Waiting ((uint32_t)0x00200000) /*!< Running - waiting for status */ -#define ETH_DMA_TransmitProcess_Reading ((uint32_t)0x00300000) /*!< Running - reading the data from host memory */ -#define ETH_DMA_TransmitProcess_Suspended ((uint32_t)0x00600000) /*!< Suspended - Tx Desciptor unavailabe */ -#define ETH_DMA_TransmitProcess_Closing ((uint32_t)0x00700000) /*!< Running - closing Rx descriptor */ - -/** - * @} - */ - - -/** @defgroup ETH_DMA_receive_process_state_ - * @{ - */ -#define ETH_DMA_ReceiveProcess_Stopped ((uint32_t)0x00000000) /*!< Stopped - Reset or Stop Rx Command issued */ -#define ETH_DMA_ReceiveProcess_Fetching ((uint32_t)0x00020000) /*!< Running - fetching the Rx descriptor */ -#define ETH_DMA_ReceiveProcess_Waiting ((uint32_t)0x00060000) /*!< Running - waiting for packet */ -#define ETH_DMA_ReceiveProcess_Suspended ((uint32_t)0x00080000) /*!< Suspended - Rx Desciptor unavailable */ -#define ETH_DMA_ReceiveProcess_Closing ((uint32_t)0x000A0000) /*!< Running - closing descriptor */ -#define ETH_DMA_ReceiveProcess_Queuing ((uint32_t)0x000E0000) /*!< Running - queuing the recieve frame into host memory */ - -/** - * @} - */ - -/** @defgroup ETH_DMA_overflow_ - * @{ - */ -#define ETH_DMA_Overflow_RxFIFOCounter ((uint32_t)0x10000000) /*!< Overflow bit for FIFO overflow counter */ -#define ETH_DMA_Overflow_MissedFrameCounter ((uint32_t)0x00010000) /*!< Overflow bit for missed frame counter */ -#define IS_ETH_DMA_GET_OVERFLOW(OVERFLOW) (((OVERFLOW) == ETH_DMA_Overflow_RxFIFOCounter) || \ - ((OVERFLOW) == ETH_DMA_Overflow_MissedFrameCounter)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet PMT defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_PMT_Flags - * @{ - */ -#define ETH_PMT_FLAG_WUFFRPR ((uint32_t)0x80000000) /*!< Wake-Up Frame Filter Register Poniter Reset */ -#define ETH_PMT_FLAG_WUFR ((uint32_t)0x00000040) /*!< Wake-Up Frame Received */ -#define ETH_PMT_FLAG_MPR ((uint32_t)0x00000020) /*!< Magic Packet Received */ -#define IS_ETH_PMT_GET_FLAG(FLAG) (((FLAG) == ETH_PMT_FLAG_WUFR) || \ - ((FLAG) == ETH_PMT_FLAG_MPR)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet MMC defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_MMC_Tx_Interrupts - * @{ - */ -#define ETH_MMC_IT_TGF ((uint32_t)0x00200000) /*!< When Tx good frame counter reaches half the maximum value */ -#define ETH_MMC_IT_TGFMSC ((uint32_t)0x00008000) /*!< When Tx good multi col counter reaches half the maximum value */ -#define ETH_MMC_IT_TGFSC ((uint32_t)0x00004000) /*!< When Tx good single col counter reaches half the maximum value */ - -/** - * @} - */ - -/** @defgroup ETH_MMC_Rx_Interrupts - * @{ - */ -#define ETH_MMC_IT_RGUF ((uint32_t)0x10020000) /*!< When Rx good unicast frames counter reaches half the maximum value */ -#define ETH_MMC_IT_RFAE ((uint32_t)0x10000040) /*!< When Rx alignment error counter reaches half the maximum value */ -#define ETH_MMC_IT_RFCE ((uint32_t)0x10000020) /*!< When Rx crc error counter reaches half the maximum value */ -#define IS_ETH_MMC_IT(IT) (((((IT) & (uint32_t)0xFFDF3FFF) == 0x00) || (((IT) & (uint32_t)0xEFFDFF9F) == 0x00)) && \ - ((IT) != 0x00)) -#define IS_ETH_MMC_GET_IT(IT) (((IT) == ETH_MMC_IT_TGF) || ((IT) == ETH_MMC_IT_TGFMSC) || \ - ((IT) == ETH_MMC_IT_TGFSC) || ((IT) == ETH_MMC_IT_RGUF) || \ - ((IT) == ETH_MMC_IT_RFAE) || ((IT) == ETH_MMC_IT_RFCE)) -/** - * @} - */ - -/** @defgroup ETH_MMC_Registers - * @{ - */ -#define ETH_MMCCR ((uint32_t)0x00000100) /*!< MMC CR register */ -#define ETH_MMCRIR ((uint32_t)0x00000104) /*!< MMC RIR register */ -#define ETH_MMCTIR ((uint32_t)0x00000108) /*!< MMC TIR register */ -#define ETH_MMCRIMR ((uint32_t)0x0000010C) /*!< MMC RIMR register */ -#define ETH_MMCTIMR ((uint32_t)0x00000110) /*!< MMC TIMR register */ -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014C) /*!< MMC TGFSCCR register */ -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150) /*!< MMC TGFMSCCR register */ -#define ETH_MMCTGFCR ((uint32_t)0x00000168) /*!< MMC TGFCR register */ -#define ETH_MMCRFCECR ((uint32_t)0x00000194) /*!< MMC RFCECR register */ -#define ETH_MMCRFAECR ((uint32_t)0x00000198) /*!< MMC RFAECR register */ -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4) /*!< MMC RGUFCR register */ - -/** - * @brief ETH MMC registers - */ -#define IS_ETH_MMC_REGISTER(REG) (((REG) == ETH_MMCCR) || ((REG) == ETH_MMCRIR) || \ - ((REG) == ETH_MMCTIR) || ((REG) == ETH_MMCRIMR) || \ - ((REG) == ETH_MMCTIMR) || ((REG) == ETH_MMCTGFSCCR) || \ - ((REG) == ETH_MMCTGFMSCCR) || ((REG) == ETH_MMCTGFCR) || \ - ((REG) == ETH_MMCRFCECR) || ((REG) == ETH_MMCRFAECR) || \ - ((REG) == ETH_MMCRGUFCR)) - -/**--------------------------------------------------------------------------**/ -/** - * @brief Ethernet PTP defines - */ -/**--------------------------------------------------------------------------**/ -/** - * @} - */ - -/** @defgroup ETH_PTP_time_update_method - * @{ - */ -#define ETH_PTP_FineUpdate ((uint32_t)0x00000001) /*!< Fine Update method */ -#define ETH_PTP_CoarseUpdate ((uint32_t)0x00000000) /*!< Coarse Update method */ -#define IS_ETH_PTP_UPDATE(UPDATE) (((UPDATE) == ETH_PTP_FineUpdate) || \ - ((UPDATE) == ETH_PTP_CoarseUpdate)) - -/** - * @} - */ - - -/** @defgroup ETH_PTP_Flags - * @{ - */ -#define ETH_PTP_FLAG_TSARU ((uint32_t)0x00000020) /*!< Addend Register Update */ -#define ETH_PTP_FLAG_TSITE ((uint32_t)0x00000010) /*!< Time Stamp Interrupt Trigger */ -#define ETH_PTP_FLAG_TSSTU ((uint32_t)0x00000008) /*!< Time Stamp Update */ -#define ETH_PTP_FLAG_TSSTI ((uint32_t)0x00000004) /*!< Time Stamp Initialize */ -#define IS_ETH_PTP_GET_FLAG(FLAG) (((FLAG) == ETH_PTP_FLAG_TSARU) || \ - ((FLAG) == ETH_PTP_FLAG_TSITE) || \ - ((FLAG) == ETH_PTP_FLAG_TSSTU) || \ - ((FLAG) == ETH_PTP_FLAG_TSSTI)) -/** - * @brief ETH PTP subsecond increment - */ -#define IS_ETH_PTP_SUBSECOND_INCREMENT(SUBSECOND) ((SUBSECOND) <= 0xFF) - -/** - * @} - */ - - -/** @defgroup ETH_PTP_time_sign - * @{ - */ -#define ETH_PTP_PositiveTime ((uint32_t)0x00000000) /*!< Positive time value */ -#define ETH_PTP_NegativeTime ((uint32_t)0x80000000) /*!< Negative time value */ -#define IS_ETH_PTP_TIME_SIGN(SIGN) (((SIGN) == ETH_PTP_PositiveTime) || \ - ((SIGN) == ETH_PTP_NegativeTime)) - -/** - * @brief ETH PTP time stamp low update - */ -#define IS_ETH_PTP_TIME_STAMP_UPDATE_SUBSECOND(SUBSECOND) ((SUBSECOND) <= 0x7FFFFFFF) - -/** - * @brief ETH PTP registers - */ -#define ETH_PTPTSCR ((uint32_t)0x00000700) /*!< PTP TSCR register */ -#define ETH_PTPSSIR ((uint32_t)0x00000704) /*!< PTP SSIR register */ -#define ETH_PTPTSHR ((uint32_t)0x00000708) /*!< PTP TSHR register */ -#define ETH_PTPTSLR ((uint32_t)0x0000070C) /*!< PTP TSLR register */ -#define ETH_PTPTSHUR ((uint32_t)0x00000710) /*!< PTP TSHUR register */ -#define ETH_PTPTSLUR ((uint32_t)0x00000714) /*!< PTP TSLUR register */ -#define ETH_PTPTSAR ((uint32_t)0x00000718) /*!< PTP TSAR register */ -#define ETH_PTPTTHR ((uint32_t)0x0000071C) /*!< PTP TTHR register */ -#define ETH_PTPTTLR ((uint32_t)0x00000720) /* PTP TTLR register */ -#define IS_ETH_PTP_REGISTER(REG) (((REG) == ETH_PTPTSCR) || ((REG) == ETH_PTPSSIR) || \ - ((REG) == ETH_PTPTSHR) || ((REG) == ETH_PTPTSLR) || \ - ((REG) == ETH_PTPTSHUR) || ((REG) == ETH_PTPTSLUR) || \ - ((REG) == ETH_PTPTSAR) || ((REG) == ETH_PTPTTHR) || \ - ((REG) == ETH_PTPTTLR)) - -/** - * @} - */ - - -/** - * @} - */ - -/** @defgroup ETH_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup ETH_Exported_Functions - * @{ - */ -void ETH_DeInit(void); -uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, u16 PHYAddress); -void ETH_StructInit(ETH_InitTypeDef* ETH_InitStruct); -void ETH_SoftwareReset(void); -FlagStatus ETH_GetSoftwareResetStatus(void); -void ETH_Start(void); -uint32_t ETH_HandleTxPkt(u8 *ppkt, u16 FrameLength); -uint32_t ETH_HandleRxPkt(u8 *ppkt); -uint32_t ETH_GetRxPktSize(void); -void ETH_DropRxPkt(void); - -/** - * @brief PHY - */ -u16 ETH_ReadPHYRegister(u16 PHYAddress, u16 PHYReg); -uint32_t ETH_WritePHYRegister(u16 PHYAddress, u16 PHYReg, u16 PHYValue); -uint32_t ETH_PHYLoopBackCmd(u16 PHYAddress, FunctionalState NewState); - -/** - * @brief MAC - */ -void ETH_MACTransmissionCmd(FunctionalState NewState); -void ETH_MACReceptionCmd(FunctionalState NewState); -FlagStatus ETH_GetFlowControlBusyStatus(void); -void ETH_InitiatePauseControlFrame(void); -void ETH_BackPressureActivationCmd(FunctionalState NewState); -FlagStatus ETH_GetMACFlagStatus(uint32_t ETH_MAC_FLAG); -ITStatus ETH_GetMACITStatus(uint32_t ETH_MAC_IT); -void ETH_MACITConfig(uint32_t ETH_MAC_IT, FunctionalState NewState); -void ETH_MACAddressConfig(uint32_t MacAddr, u8 *Addr); -void ETH_GetMACAddress(uint32_t MacAddr, u8 *Addr); -void ETH_MACAddressPerfectFilterCmd(uint32_t MacAddr, FunctionalState NewState); -void ETH_MACAddressFilterConfig(uint32_t MacAddr, uint32_t Filter); -void ETH_MACAddressMaskBytesFilterConfig(uint32_t MacAddr, uint32_t MaskByte); - -/** - * @brief DMA Tx/Rx descriptors - */ -void ETH_DMATxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, u8 *TxBuff, uint32_t TxBuffCount); -void ETH_DMATxDescRingInit(ETH_DMADESCTypeDef *DMATxDescTab, u8 *TxBuff1, u8 *TxBuff2, uint32_t TxBuffCount); -FlagStatus ETH_GetDMATxDescFlagStatus(ETH_DMADESCTypeDef *DMATxDesc, uint32_t ETH_DMATxDescFlag); -uint32_t ETH_GetDMATxDescCollisionCount(ETH_DMADESCTypeDef *DMATxDesc); -void ETH_SetDMATxDescOwnBit(ETH_DMADESCTypeDef *DMATxDesc); -void ETH_DMATxDescTransmitITConfig(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescFrameSegmentConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_FrameSegment); -void ETH_DMATxDescChecksumInsertionConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_Checksum); -void ETH_DMATxDescCRCCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescShortFramePaddingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescTimeStampCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState); -void ETH_DMATxDescBufferSizeConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t BufferSize1, uint32_t BufferSize2); -void ETH_DMARxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, u8 *RxBuff, uint32_t RxBuffCount); -void ETH_DMARxDescRingInit(ETH_DMADESCTypeDef *DMARxDescTab, u8 *RxBuff1, u8 *RxBuff2, uint32_t RxBuffCount); -FlagStatus ETH_GetDMARxDescFlagStatus(ETH_DMADESCTypeDef *DMARxDesc, uint32_t ETH_DMARxDescFlag); -void ETH_SetDMARxDescOwnBit(ETH_DMADESCTypeDef *DMARxDesc); -uint32_t ETH_GetDMARxDescFrameLength(ETH_DMADESCTypeDef *DMARxDesc); -void ETH_DMARxDescReceiveITConfig(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState); -void ETH_DMARxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState); -void ETH_DMARxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState); -uint32_t ETH_GetDMARxDescBufferSize(ETH_DMADESCTypeDef *DMARxDesc, uint32_t DMARxDesc_Buffer); - -/** - * @brief DMA - */ -FlagStatus ETH_GetDMAFlagStatus(uint32_t ETH_DMA_FLAG); -void ETH_DMAClearFlag(uint32_t ETH_DMA_FLAG); -ITStatus ETH_GetDMAITStatus(uint32_t ETH_DMA_IT); -void ETH_DMAClearITPendingBit(uint32_t ETH_DMA_IT); -uint32_t ETH_GetTransmitProcessState(void); -uint32_t ETH_GetReceiveProcessState(void); -void ETH_FlushTransmitFIFO(void); -FlagStatus ETH_GetFlushTransmitFIFOStatus(void); -void ETH_DMATransmissionCmd(FunctionalState NewState); -void ETH_DMAReceptionCmd(FunctionalState NewState); -void ETH_DMAITConfig(uint32_t ETH_DMA_IT, FunctionalState NewState); -FlagStatus ETH_GetDMAOverflowStatus(uint32_t ETH_DMA_Overflow); -uint32_t ETH_GetRxOverflowMissedFrameCounter(void); -uint32_t ETH_GetBufferUnavailableMissedFrameCounter(void); -uint32_t ETH_GetCurrentTxDescStartAddress(void); -uint32_t ETH_GetCurrentRxDescStartAddress(void); -uint32_t ETH_GetCurrentTxBufferAddress(void); -uint32_t ETH_GetCurrentRxBufferAddress(void); -void ETH_ResumeDMATransmission(void); -void ETH_ResumeDMAReception(void); - -/** - * @brief PMT - */ -void ETH_ResetWakeUpFrameFilterRegisterPointer(void); -void ETH_SetWakeUpFrameFilterRegister(uint32_t *Buffer); -void ETH_GlobalUnicastWakeUpCmd(FunctionalState NewState); -FlagStatus ETH_GetPMTFlagStatus(uint32_t ETH_PMT_FLAG); -void ETH_WakeUpFrameDetectionCmd(FunctionalState NewState); -void ETH_MagicPacketDetectionCmd(FunctionalState NewState); -void ETH_PowerDownCmd(FunctionalState NewState); - -/** - * @brief MMC - */ -void ETH_MMCCounterFreezeCmd(FunctionalState NewState); -void ETH_MMCResetOnReadCmd(FunctionalState NewState); -void ETH_MMCCounterRolloverCmd(FunctionalState NewState); -void ETH_MMCCountersReset(void); -void ETH_MMCITConfig(uint32_t ETH_MMC_IT, FunctionalState NewState); -ITStatus ETH_GetMMCITStatus(uint32_t ETH_MMC_IT); -uint32_t ETH_GetMMCRegister(uint32_t ETH_MMCReg); - -/** - * @brief PTP - */ -uint32_t ETH_HandlePTPTxPkt(u8 *ppkt, u16 FrameLength, uint32_t *PTPTxTab); -uint32_t ETH_HandlePTPRxPkt(u8 *ppkt, uint32_t *PTPRxTab); -void ETH_DMAPTPTxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, ETH_DMADESCTypeDef *DMAPTPTxDescTab, u8* TxBuff, uint32_t TxBuffCount); -void ETH_DMAPTPRxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, ETH_DMADESCTypeDef *DMAPTPRxDescTab, u8 *RxBuff, uint32_t RxBuffCount); -void ETH_EnablePTPTimeStampAddend(void); -void ETH_EnablePTPTimeStampInterruptTrigger(void); -void ETH_EnablePTPTimeStampUpdate(void); -void ETH_InitializePTPTimeStamp(void); -void ETH_PTPUpdateMethodConfig(uint32_t UpdateMethod); -void ETH_PTPTimeStampCmd(FunctionalState NewState); -FlagStatus ETH_GetPTPFlagStatus(uint32_t ETH_PTP_FLAG); -void ETH_SetPTPSubSecondIncrement(uint32_t SubSecondValue); -void ETH_SetPTPTimeStampUpdate(uint32_t Sign, uint32_t SecondValue, uint32_t SubSecondValue); -void ETH_SetPTPTimeStampAddend(uint32_t Value); -void ETH_SetPTPTargetTime(uint32_t HighValue, uint32_t LowValue); -uint32_t ETH_GetPTPRegister(uint32_t ETH_PTPReg); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32_ETH_H */ -/** - * @} - */ - - -/** - * @} - */ - -/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/ethernetlib/src/stm32_eth.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/ethernetlib/src/stm32_eth.c deleted file mode 100644 index 119b4dbf..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/ethernetlib/src/stm32_eth.c +++ /dev/null @@ -1,3056 +0,0 @@ -/** - ****************************************************************************** - * @file stm32_eth.c - * @author MCD Application Team - * @version V1.0.0 - * @date 06/19/2009 - * @brief This file provides all the ETH firmware functions. - ****************************************************************************** - * @copy - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, 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 2009 STMicroelectronics

- */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32_eth.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32_ETH_Driver - * @brief ETH driver modules - * @{ - */ - -/** @defgroup ETH_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup ETH_Private_Defines - * @{ - */ -/* Global pointers on Tx and Rx descriptor used to track transmit and receive descriptors */ -ETH_DMADESCTypeDef *DMATxDescToSet; -ETH_DMADESCTypeDef *DMARxDescToGet; -ETH_DMADESCTypeDef *DMAPTPTxDescToSet; -ETH_DMADESCTypeDef *DMAPTPRxDescToGet; - -/* ETHERNET MAC address offsets */ -#define ETH_MAC_AddrHighBase (ETH_MAC_BASE + 0x40) /* ETHERNET MAC address high offset */ -#define ETH_MAC_AddrLowBase (ETH_MAC_BASE + 0x44) /* ETHERNET MAC address low offset */ -/* ETHERNET MACMIIAR register Mask */ -#define MACMIIAR_CR_Mask ((uint32_t)0xFFFFFFE3) -/* ETHERNET MACCR register Mask */ -#define MACCR_CLEAR_Mask ((uint32_t)0xFF20810F) -/* ETHERNET MACFCR register Mask */ -#define MACFCR_CLEAR_Mask ((uint32_t)0x0000FF41) -/* ETHERNET DMAOMR register Mask */ -#define DMAOMR_CLEAR_Mask ((uint32_t)0xF8DE3F23) -/* ETHERNET Remote Wake-up frame register length */ -#define ETH_WakeupRegisterLength 8 -/* ETHERNET Missed frames counter Shift */ -#define ETH_DMA_RxOverflowMissedFramesCounterShift 17 -/* ETHERNET DMA Tx descriptors Collision Count Shift */ -#define ETH_DMATxDesc_CollisionCountShift 3 -/* ETHERNET DMA Tx descriptors Buffer2 Size Shift */ -#define ETH_DMATxDesc_BufferSize2Shift 16 -/* ETHERNET DMA Rx descriptors Frame Length Shift */ -#define ETH_DMARxDesc_FrameLengthShift 16 -/* ETHERNET DMA Rx descriptors Buffer2 Size Shift */ -#define ETH_DMARxDesc_Buffer2SizeShift 16 -/* ETHERNET errors */ -#define ETH_ERROR ((uint32_t)0) -#define ETH_SUCCESS ((uint32_t)1) -/** - * @} - */ - -/** @defgroup ETH_Private_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup ETH_Private_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup ETH_Private_FunctionPrototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup ETH_Private_Functions - * @{ - */ - -/** - * @brief Deinitializes the ETHERNET peripheral registers to their - * default reset values. - * @param None - * @retval : None - */ -void ETH_DeInit(void) -{ - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, DISABLE); -} - -/** - * @brief Initializes the ETHERNET peripheral according to the specified - * parameters in the ETH_InitStruct . - * @param ETH_InitStruct: pointer to a ETH_InitTypeDef structure - * that contains the configuration information for the - * specified ETHERNET peripheral. - * @param PHYAddress: external PHY address - * @retval : ETH_ERROR: Ethernet initialization failed - * ETH_SUCCESS: Ethernet successfully initialized - */ -uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress) -{ - uint32_t RegValue = 0, tmpreg = 0; - __IO uint32_t i = 0; - RCC_ClocksTypeDef rcc_clocks; - uint32_t hclk = 120000000; - __IO uint32_t timeout = 0; - /* Check the parameters */ - /* MAC --------------------------*/ - assert_param(IS_ETH_AUTONEGOTIATION(ETH_InitStruct->ETH_AutoNegotiation)); - assert_param(IS_ETH_WATCHDOG(ETH_InitStruct->ETH_Watchdog)); - assert_param(IS_ETH_JABBER(ETH_InitStruct->ETH_Jabber)); - assert_param(IS_ETH_INTER_FRAME_GAP(ETH_InitStruct->ETH_InterFrameGap)); - assert_param(IS_ETH_CARRIER_SENSE(ETH_InitStruct->ETH_CarrierSense)); - assert_param(IS_ETH_SPEED(ETH_InitStruct->ETH_Speed)); - assert_param(IS_ETH_RECEIVE_OWN(ETH_InitStruct->ETH_ReceiveOwn)); - assert_param(IS_ETH_LOOPBACK_MODE(ETH_InitStruct->ETH_LoopbackMode)); - assert_param(IS_ETH_DUPLEX_MODE(ETH_InitStruct->ETH_Mode)); - assert_param(IS_ETH_CHECKSUM_OFFLOAD(ETH_InitStruct->ETH_ChecksumOffload)); - assert_param(IS_ETH_RETRY_TRANSMISSION(ETH_InitStruct->ETH_RetryTransmission)); - assert_param(IS_ETH_AUTOMATIC_PADCRC_STRIP(ETH_InitStruct->ETH_AutomaticPadCRCStrip)); - assert_param(IS_ETH_BACKOFF_LIMIT(ETH_InitStruct->ETH_BackOffLimit)); - assert_param(IS_ETH_DEFERRAL_CHECK(ETH_InitStruct->ETH_DeferralCheck)); - assert_param(IS_ETH_RECEIVE_ALL(ETH_InitStruct->ETH_ReceiveAll)); - assert_param(IS_ETH_SOURCE_ADDR_FILTER(ETH_InitStruct->ETH_SourceAddrFilter)); - assert_param(IS_ETH_CONTROL_FRAMES(ETH_InitStruct->ETH_PassControlFrames)); - assert_param(IS_ETH_BROADCAST_FRAMES_RECEPTION(ETH_InitStruct->ETH_BroadcastFramesReception)); - assert_param(IS_ETH_DESTINATION_ADDR_FILTER(ETH_InitStruct->ETH_DestinationAddrFilter)); - assert_param(IS_ETH_PROMISCUOUS_MODE(ETH_InitStruct->ETH_PromiscuousMode)); - assert_param(IS_ETH_MULTICAST_FRAMES_FILTER(ETH_InitStruct->ETH_MulticastFramesFilter)); - assert_param(IS_ETH_UNICAST_FRAMES_FILTER(ETH_InitStruct->ETH_UnicastFramesFilter)); - assert_param(IS_ETH_PAUSE_TIME(ETH_InitStruct->ETH_PauseTime)); - assert_param(IS_ETH_ZEROQUANTA_PAUSE(ETH_InitStruct->ETH_ZeroQuantaPause)); - assert_param(IS_ETH_PAUSE_LOW_THRESHOLD(ETH_InitStruct->ETH_PauseLowThreshold)); - assert_param(IS_ETH_UNICAST_PAUSE_FRAME_DETECT(ETH_InitStruct->ETH_UnicastPauseFrameDetect)); - assert_param(IS_ETH_RECEIVE_FLOWCONTROL(ETH_InitStruct->ETH_ReceiveFlowControl)); - assert_param(IS_ETH_TRANSMIT_FLOWCONTROL(ETH_InitStruct->ETH_TransmitFlowControl)); - assert_param(IS_ETH_VLAN_TAG_COMPARISON(ETH_InitStruct->ETH_VLANTagComparison)); - assert_param(IS_ETH_VLAN_TAG_IDENTIFIER(ETH_InitStruct->ETH_VLANTagIdentifier)); - /* DMA --------------------------*/ - assert_param(IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame)); - assert_param(IS_ETH_RECEIVE_STORE_FORWARD(ETH_InitStruct->ETH_ReceiveStoreForward)); - assert_param(IS_ETH_FLUSH_RECEIVE_FRAME(ETH_InitStruct->ETH_FlushReceivedFrame)); - assert_param(IS_ETH_TRANSMIT_STORE_FORWARD(ETH_InitStruct->ETH_TransmitStoreForward)); - assert_param(IS_ETH_TRANSMIT_THRESHOLD_CONTROL(ETH_InitStruct->ETH_TransmitThresholdControl)); - assert_param(IS_ETH_FORWARD_ERROR_FRAMES(ETH_InitStruct->ETH_ForwardErrorFrames)); - assert_param(IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(ETH_InitStruct->ETH_ForwardUndersizedGoodFrames)); - assert_param(IS_ETH_RECEIVE_THRESHOLD_CONTROL(ETH_InitStruct->ETH_ReceiveThresholdControl)); - assert_param(IS_ETH_SECOND_FRAME_OPERATE(ETH_InitStruct->ETH_SecondFrameOperate)); - assert_param(IS_ETH_ADDRESS_ALIGNED_BEATS(ETH_InitStruct->ETH_AddressAlignedBeats)); - assert_param(IS_ETH_FIXED_BURST(ETH_InitStruct->ETH_FixedBurst)); - assert_param(IS_ETH_RXDMA_BURST_LENGTH(ETH_InitStruct->ETH_RxDMABurstLength)); - assert_param(IS_ETH_TXDMA_BURST_LENGTH(ETH_InitStruct->ETH_TxDMABurstLength)); - assert_param(IS_ETH_DMA_DESC_SKIP_LENGTH(ETH_InitStruct->ETH_DescriptorSkipLength)); - assert_param(IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(ETH_InitStruct->ETH_DMAArbitration)); - /*-------------------------------- MAC Config ------------------------------*/ - /*---------------------- ETHERNET MACMIIAR Configuration -------------------*/ - /* Get the ETHERNET MACMIIAR value */ - tmpreg = ETH->MACMIIAR; - /* Clear CSR Clock Range CR[2:0] bits */ - tmpreg &= MACMIIAR_CR_Mask; - /* Get hclk frequency value */ - RCC_GetClocksFreq(&rcc_clocks); - hclk = rcc_clocks.HCLK_Frequency; - /* Set CR bits depending on hclk value */ - if((hclk >= 20000000)&&(hclk < 35000000)) - { - /* CSR Clock Range between 20-35 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16; - } - else if((hclk >= 35000000)&&(hclk < 60000000)) - { - /* CSR Clock Range between 35-60 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26; - } - else if((hclk >= 60000000)&&(hclk <= 100000000)) - { - /* CSR Clock Range between 60-100 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42; - } - else /*if((hclk >= 100000000)&&(hclk <= 120000000)) */ - { - /* CSR Clock Range between 100-120 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62; - } - /* Write to ETHERNET MAC MIIAR: Configure the ETHERNET CSR Clock Range */ - ETH->MACMIIAR = (uint32_t)tmpreg; - /*-------------------- PHY initialization and configuration ----------------*/ - /* Put the PHY in reset mode */ - if(!(ETH_WritePHYRegister(PHYAddress, PHY_BCR, PHY_Reset))) - { - /* Return ERROR in case of write timeout */ - return ETH_ERROR; - } - - /* Delay to assure PHY reset */ - for(i = PHY_ResetDelay; i != 0; i--) - { - } - - if(ETH_InitStruct->ETH_AutoNegotiation != ETH_AutoNegotiation_Disable) - { - /* We wait for linked satus... */ - do - { - timeout++; - } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_READ_TO) - { - return ETH_ERROR; - } - /* Reset Timeout counter */ - timeout = 0; - - /* Enable Auto-Negotiation */ - if(!(ETH_WritePHYRegister(PHYAddress, PHY_BCR, PHY_AutoNegotiation))) - { - /* Return ERROR in case of write timeout */ - return ETH_ERROR; - } - - /* Wait until the autonegotiation will be completed */ - do - { - timeout++; - } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_AutoNego_Complete) && (timeout < (uint32_t)PHY_READ_TO)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_READ_TO) - { - return ETH_ERROR; - } - /* Reset Timeout counter */ - timeout = 0; - - /* Read the result of the autonegotiation */ - RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_SR); - - /* Configure the MAC with the Duplex Mode fixed by the autonegotiation process */ - if((RegValue & PHY_Duplex_Status) != (uint32_t)RESET) - { - /* Set Ethernet duplex mode to FullDuplex following the autonegotiation */ - ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex; - - } - else - { - /* Set Ethernet duplex mode to HalfDuplex following the autonegotiation */ - ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex; - } - /* Configure the MAC with the speed fixed by the autonegotiation process */ - if(RegValue & PHY_Speed_Status) - { - /* Set Ethernet speed to 10M following the autonegotiation */ - ETH_InitStruct->ETH_Speed = ETH_Speed_10M; - } - else - { - /* Set Ethernet speed to 100M following the autonegotiation */ - ETH_InitStruct->ETH_Speed = ETH_Speed_100M; - } - } - else - { - if(!ETH_WritePHYRegister(PHYAddress, PHY_BCR, ((uint16_t)(ETH_InitStruct->ETH_Mode >> 3) | - (uint16_t)(ETH_InitStruct->ETH_Speed >> 1)))) - { - /* Return ERROR in case of write timeout */ - return ETH_ERROR; - } - /* Delay to assure PHY configuration */ - for(i = PHY_ConfigDelay; i != 0; i--) - { - } - } - /*------------------------ ETHERNET MACCR Configuration --------------------*/ - /* Get the ETHERNET MACCR value */ - tmpreg = ETH->MACCR; - /* Clear WD, PCE, PS, TE and RE bits */ - tmpreg &= MACCR_CLEAR_Mask; - /* Set the WD bit according to ETH_Watchdog value */ - /* Set the JD: bit according to ETH_Jabber value */ - /* Set the IFG bit according to ETH_InterFrameGap value */ - /* Set the DCRS bit according to ETH_CarrierSense value */ - /* Set the FES bit according to ETH_Speed value */ - /* Set the DO bit according to ETH_ReceiveOwn value */ - /* Set the LM bit according to ETH_LoopbackMode value */ - /* Set the DM bit according to ETH_Mode value */ - /* Set the IPC bit according to ETH_ChecksumOffload value */ - /* Set the DR bit according to ETH_RetryTransmission value */ - /* Set the ACS bit according to ETH_AutomaticPadCRCStrip value */ - /* Set the BL bit according to ETH_BackOffLimit value */ - /* Set the DC bit according to ETH_DeferralCheck value */ - tmpreg |= (uint32_t)(ETH_InitStruct->ETH_Watchdog | - ETH_InitStruct->ETH_Jabber | - ETH_InitStruct->ETH_InterFrameGap | - ETH_InitStruct->ETH_CarrierSense | - ETH_InitStruct->ETH_Speed | - ETH_InitStruct->ETH_ReceiveOwn | - ETH_InitStruct->ETH_LoopbackMode | - ETH_InitStruct->ETH_Mode | - ETH_InitStruct->ETH_ChecksumOffload | - ETH_InitStruct->ETH_RetryTransmission | - ETH_InitStruct->ETH_AutomaticPadCRCStrip | - ETH_InitStruct->ETH_BackOffLimit | - ETH_InitStruct->ETH_DeferralCheck); - /* Write to ETHERNET MACCR */ - ETH->MACCR = (uint32_t)tmpreg; - - /*----------------------- ETHERNET MACFFR Configuration --------------------*/ - /* Set the RA bit according to ETH_ReceiveAll value */ - /* Set the SAF and SAIF bits according to ETH_SourceAddrFilter value */ - /* Set the PCF bit according to ETH_PassControlFrames value */ - /* Set the DBF bit according to ETH_BroadcastFramesReception value */ - /* Set the DAIF bit according to ETH_DestinationAddrFilter value */ - /* Set the PR bit according to ETH_PromiscuousMode value */ - /* Set the PM, HMC and HPF bits according to ETH_MulticastFramesFilter value */ - /* Set the HUC and HPF bits according to ETH_UnicastFramesFilter value */ - /* Write to ETHERNET MACFFR */ - ETH->MACFFR = (uint32_t)(ETH_InitStruct->ETH_ReceiveAll | - ETH_InitStruct->ETH_SourceAddrFilter | - ETH_InitStruct->ETH_PassControlFrames | - ETH_InitStruct->ETH_BroadcastFramesReception | - ETH_InitStruct->ETH_DestinationAddrFilter | - ETH_InitStruct->ETH_PromiscuousMode | - ETH_InitStruct->ETH_MulticastFramesFilter | - ETH_InitStruct->ETH_UnicastFramesFilter); - /*--------------- ETHERNET MACHTHR and MACHTLR Configuration ---------------*/ - /* Write to ETHERNET MACHTHR */ - ETH->MACHTHR = (uint32_t)ETH_InitStruct->ETH_HashTableHigh; - /* Write to ETHERNET MACHTLR */ - ETH->MACHTLR = (uint32_t)ETH_InitStruct->ETH_HashTableLow; - /*----------------------- ETHERNET MACFCR Configuration --------------------*/ - /* Get the ETHERNET MACFCR value */ - tmpreg = ETH->MACFCR; - /* Clear xx bits */ - tmpreg &= MACFCR_CLEAR_Mask; - - /* Set the PT bit according to ETH_PauseTime value */ - /* Set the DZPQ bit according to ETH_ZeroQuantaPause value */ - /* Set the PLT bit according to ETH_PauseLowThreshold value */ - /* Set the UP bit according to ETH_UnicastPauseFrameDetect value */ - /* Set the RFE bit according to ETH_ReceiveFlowControl value */ - /* Set the TFE bit according to ETH_TransmitFlowControl value */ - tmpreg |= (uint32_t)((ETH_InitStruct->ETH_PauseTime << 16) | - ETH_InitStruct->ETH_ZeroQuantaPause | - ETH_InitStruct->ETH_PauseLowThreshold | - ETH_InitStruct->ETH_UnicastPauseFrameDetect | - ETH_InitStruct->ETH_ReceiveFlowControl | - ETH_InitStruct->ETH_TransmitFlowControl); - /* Write to ETHERNET MACFCR */ - ETH->MACFCR = (uint32_t)tmpreg; - /*----------------------- ETHERNET MACVLANTR Configuration -----------------*/ - /* Set the ETV bit according to ETH_VLANTagComparison value */ - /* Set the VL bit according to ETH_VLANTagIdentifier value */ - ETH->MACVLANTR = (uint32_t)(ETH_InitStruct->ETH_VLANTagComparison | - ETH_InitStruct->ETH_VLANTagIdentifier); - - /*-------------------------------- DMA Config ------------------------------*/ - /*----------------------- ETHERNET DMAOMR Configuration --------------------*/ - /* Get the ETHERNET DMAOMR value */ - tmpreg = ETH->DMAOMR; - /* Clear xx bits */ - tmpreg &= DMAOMR_CLEAR_Mask; - - /* Set the DT bit according to ETH_DropTCPIPChecksumErrorFrame value */ - /* Set the RSF bit according to ETH_ReceiveStoreForward value */ - /* Set the DFF bit according to ETH_FlushReceivedFrame value */ - /* Set the TSF bit according to ETH_TransmitStoreForward value */ - /* Set the TTC bit according to ETH_TransmitThresholdControl value */ - /* Set the FEF bit according to ETH_ForwardErrorFrames value */ - /* Set the FUF bit according to ETH_ForwardUndersizedGoodFrames value */ - /* Set the RTC bit according to ETH_ReceiveThresholdControl value */ - /* Set the OSF bit according to ETH_SecondFrameOperate value */ - tmpreg |= (uint32_t)(ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame | - ETH_InitStruct->ETH_ReceiveStoreForward | - ETH_InitStruct->ETH_FlushReceivedFrame | - ETH_InitStruct->ETH_TransmitStoreForward | - ETH_InitStruct->ETH_TransmitThresholdControl | - ETH_InitStruct->ETH_ForwardErrorFrames | - ETH_InitStruct->ETH_ForwardUndersizedGoodFrames | - ETH_InitStruct->ETH_ReceiveThresholdControl | - ETH_InitStruct->ETH_SecondFrameOperate); - /* Write to ETHERNET DMAOMR */ - ETH->DMAOMR = (uint32_t)tmpreg; - - /*----------------------- ETHERNET DMABMR Configuration --------------------*/ - /* Set the AAL bit according to ETH_AddressAlignedBeats value */ - /* Set the FB bit according to ETH_FixedBurst value */ - /* Set the RPBL and 4*PBL bits according to ETH_RxDMABurstLength value */ - /* Set the PBL and 4*PBL bits according to ETH_TxDMABurstLength value */ - /* Set the DSL bit according to ETH_DesciptorSkipLength value */ - /* Set the PR and DA bits according to ETH_DMAArbitration value */ - ETH->DMABMR = (uint32_t)(ETH_InitStruct->ETH_AddressAlignedBeats | - ETH_InitStruct->ETH_FixedBurst | - ETH_InitStruct->ETH_RxDMABurstLength | /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */ - ETH_InitStruct->ETH_TxDMABurstLength | - (ETH_InitStruct->ETH_DescriptorSkipLength << 2) | - ETH_InitStruct->ETH_DMAArbitration | - ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */ - /* Return Ethernet configuration success */ - return ETH_SUCCESS; -} - -/** - * @brief Fills each ETH_InitStruct member with its default value. - * @param ETH_InitStruct: pointer to a ETH_InitTypeDef structure - * which will be initialized. - * @retval : None - */ -void ETH_StructInit(ETH_InitTypeDef* ETH_InitStruct) -{ - /* ETH_InitStruct members default value */ - /*------------------------ MAC -----------------------------------*/ - ETH_InitStruct->ETH_AutoNegotiation = ETH_AutoNegotiation_Disable; - ETH_InitStruct->ETH_Watchdog = ETH_Watchdog_Enable; - ETH_InitStruct->ETH_Jabber = ETH_Jabber_Enable; - ETH_InitStruct->ETH_InterFrameGap = ETH_InterFrameGap_96Bit; - ETH_InitStruct->ETH_CarrierSense = ETH_CarrierSense_Enable; - ETH_InitStruct->ETH_Speed = ETH_Speed_10M; - ETH_InitStruct->ETH_ReceiveOwn = ETH_ReceiveOwn_Enable; - ETH_InitStruct->ETH_LoopbackMode = ETH_LoopbackMode_Disable; - ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex; - ETH_InitStruct->ETH_ChecksumOffload = ETH_ChecksumOffload_Disable; - ETH_InitStruct->ETH_RetryTransmission = ETH_RetryTransmission_Enable; - ETH_InitStruct->ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable; - ETH_InitStruct->ETH_BackOffLimit = ETH_BackOffLimit_10; - ETH_InitStruct->ETH_DeferralCheck = ETH_DeferralCheck_Disable; - ETH_InitStruct->ETH_ReceiveAll = ETH_ReceiveAll_Disable; - ETH_InitStruct->ETH_SourceAddrFilter = ETH_SourceAddrFilter_Disable; - ETH_InitStruct->ETH_PassControlFrames = ETH_PassControlFrames_BlockAll; - ETH_InitStruct->ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Disable; - ETH_InitStruct->ETH_DestinationAddrFilter = ETH_DestinationAddrFilter_Normal; - ETH_InitStruct->ETH_PromiscuousMode = ETH_PromiscuousMode_Disable; - ETH_InitStruct->ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect; - ETH_InitStruct->ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect; - ETH_InitStruct->ETH_HashTableHigh = 0x0; - ETH_InitStruct->ETH_HashTableLow = 0x0; - ETH_InitStruct->ETH_PauseTime = 0x0; - ETH_InitStruct->ETH_ZeroQuantaPause = ETH_ZeroQuantaPause_Disable; - ETH_InitStruct->ETH_PauseLowThreshold = ETH_PauseLowThreshold_Minus4; - ETH_InitStruct->ETH_UnicastPauseFrameDetect = ETH_UnicastPauseFrameDetect_Disable; - ETH_InitStruct->ETH_ReceiveFlowControl = ETH_ReceiveFlowControl_Disable; - ETH_InitStruct->ETH_TransmitFlowControl = ETH_TransmitFlowControl_Disable; - ETH_InitStruct->ETH_VLANTagComparison = ETH_VLANTagComparison_16Bit; - ETH_InitStruct->ETH_VLANTagIdentifier = 0x0; - /*------------------------ DMA -----------------------------------*/ - ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Disable; - ETH_InitStruct->ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable; - ETH_InitStruct->ETH_FlushReceivedFrame = ETH_FlushReceivedFrame_Disable; - ETH_InitStruct->ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable; - ETH_InitStruct->ETH_TransmitThresholdControl = ETH_TransmitThresholdControl_64Bytes; - ETH_InitStruct->ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable; - ETH_InitStruct->ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable; - ETH_InitStruct->ETH_ReceiveThresholdControl = ETH_ReceiveThresholdControl_64Bytes; - ETH_InitStruct->ETH_SecondFrameOperate = ETH_SecondFrameOperate_Disable; - ETH_InitStruct->ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable; - ETH_InitStruct->ETH_FixedBurst = ETH_FixedBurst_Disable; - ETH_InitStruct->ETH_RxDMABurstLength = ETH_RxDMABurstLength_1Beat; - ETH_InitStruct->ETH_TxDMABurstLength = ETH_TxDMABurstLength_1Beat; - ETH_InitStruct->ETH_DescriptorSkipLength = 0x0; - ETH_InitStruct->ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_1_1; -} - -/** - * @brief Enables ENET MAC and DMA reception/transmission - * @param None - * @retval : None - */ -void ETH_Start(void) -{ - /* Enable transmit state machine of the MAC for transmission on the MII */ - ETH_MACTransmissionCmd(ENABLE); - /* Flush Transmit FIFO */ - ETH_FlushTransmitFIFO(); - /* Enable receive state machine of the MAC for reception from the MII */ - ETH_MACReceptionCmd(ENABLE); - - /* Start DMA transmission */ - ETH_DMATransmissionCmd(ENABLE); - /* Start DMA reception */ - ETH_DMAReceptionCmd(ENABLE); -} - -/** - * @brief Transmits a packet, from application buffer, pointed by ppkt. - * @param ppkt: pointer to application packet buffer to transmit. - * @param FrameLength: Tx Packet size. - * @retval : ETH_ERROR: in case of Tx desc owned by DMA - * ETH_SUCCESS: for correct transmission - */ -uint32_t ETH_HandleTxPkt(uint8_t *ppkt, uint16_t FrameLength) -{ - uint32_t offset = 0; - - /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */ - if((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (uint32_t)RESET) - { - /* Return ERROR: OWN bit set */ - return ETH_ERROR; - } - - /* Copy the frame to be sent into memory pointed by the current ETHERNET DMA Tx descriptor */ - for(offset=0; offsetBuffer1Addr) + offset)) = (*(ppkt + offset)); - } - - /* Setting the Frame Length: bits[12:0] */ - DMATxDescToSet->ControlBufferSize = (FrameLength & ETH_DMATxDesc_TBS1); - /* Setting the last segment and first segment bits (in this case a frame is transmitted in one descriptor) */ - DMATxDescToSet->Status |= ETH_DMATxDesc_LS | ETH_DMATxDesc_FS; - /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMATxDescToSet->Status |= ETH_DMATxDesc_OWN; - /* When Tx Buffer unavailable flag is set: clear it and resume transmission */ - if ((ETH->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET) - { - /* Clear TBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_TBUS; - /* Resume DMA transmission*/ - ETH->DMATPDR = 0; - } - - /* Update the ETHERNET DMA global Tx descriptor with next Tx decriptor */ - /* Chained Mode */ - if((DMATxDescToSet->Status & ETH_DMATxDesc_TCH) != (uint32_t)RESET) - { - /* Selects the next DMA Tx descriptor list for next buffer to send */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) (DMATxDescToSet->Buffer2NextDescAddr); - } - else /* Ring Mode */ - { - if((DMATxDescToSet->Status & ETH_DMATxDesc_TER) != (uint32_t)RESET) - { - /* Selects the first DMA Tx descriptor for next buffer to send: last Tx descriptor was used */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) (ETH->DMATDLAR); - } - else - { - /* Selects the next DMA Tx descriptor list for next buffer to send */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) ((uint32_t)DMATxDescToSet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } - /* Return SUCCESS */ - return ETH_SUCCESS; -} - -/** - * @brief Receives a packet and copies it to memory pointed by ppkt. - * @param ppkt: pointer to application packet receive buffer. - * @retval : ETH_ERROR: if there is error in reception - * framelength: received packet size if packet reception is correct - */ -uint32_t ETH_HandleRxPkt(uint8_t *ppkt) -{ - uint32_t offset = 0, framelength = 0; - /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */ - if((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) != (uint32_t)RESET) - { - /* Return error: OWN bit set */ - return ETH_ERROR; - } - - if(((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)) - { - /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */ - framelength = ((DMARxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARxDesc_FrameLengthShift) - 4; - /* Copy the received frame into buffer from memory pointed by the current ETHERNET DMA Rx descriptor */ - for(offset=0; offsetBuffer1Addr) + offset)); - } - } - else - { - /* Return ERROR */ - framelength = ETH_ERROR; - } - /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMARxDescToGet->Status = ETH_DMARxDesc_OWN; - - /* When Rx Buffer unavailable flag is set: clear it and resume reception */ - if ((ETH->DMASR & ETH_DMASR_RBUS) != (uint32_t)RESET) - { - /* Clear RBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_RBUS; - /* Resume DMA reception */ - ETH->DMARPDR = 0; - } - - /* Update the ETHERNET DMA global Rx descriptor with next Rx decriptor */ - /* Chained Mode */ - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET) - { - /* Selects the next DMA Rx descriptor list for next buffer to read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr); - } - else /* Ring Mode */ - { - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET) - { - /* Selects the first DMA Rx descriptor for next buffer to read: last Rx descriptor was used */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR); - } - else - { - /* Selects the next DMA Rx descriptor list for next buffer to read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMARxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } - - /* Return Frame Length/ERROR */ - return (framelength); -} - -/** - * @brief Get the size of received the received packet. - * @param None - * @retval : framelength: received packet size - */ -uint32_t ETH_GetRxPktSize(void) -{ - uint32_t frameLength = 0; - if(((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)) - { - /* Get the size of the packet: including 4 bytes of the CRC */ - frameLength = ETH_GetDMARxDescFrameLength(DMARxDescToGet); - } - - /* Return Frame Length */ - return frameLength; -} - -/** - * @brief Drop a Received packet (too small packet, etc...) - * @param None - * @retval : None - */ -void ETH_DropRxPkt(void) -{ - /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMARxDescToGet->Status = ETH_DMARxDesc_OWN; - /* Chained Mode */ - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET) - { - /* Selects the next DMA Rx descriptor list for next buffer read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr); - } - else /* Ring Mode */ - { - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET) - { - /* Selects the next DMA Rx descriptor list for next buffer read: this will - be the first Rx descriptor in this case */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR); - } - else - { - /* Selects the next DMA Rx descriptor list for next buffer read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMARxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } -} - -/*--------------------------------- PHY ------------------------------------*/ -/** - * @brief Read a PHY register - * @param PHYAddress: PHY device address, is the index of one of supported - * 32 PHY devices. - * This parameter can be one of the following values: 0,..,31 - * @param PHYReg: PHY register address, is the index of one of the 32 - * PHY register. - * This parameter can be one of the following values: - * @arg PHY_BCR : Tranceiver Basic Control Register - * @arg PHY_BSR : Tranceiver Basic Status Register - * @arg PHY_SR : Tranceiver Status Register - * @arg More PHY register could be read depending on the used PHY - * @retval : ETH_ERROR: in case of timeout - * MAC MIIDR register value: Data read from the selected PHY register (correct read ) - */ -uint16_t ETH_ReadPHYRegister(uint16_t PHYAddress, uint16_t PHYReg) -{ - uint32_t tmpreg = 0; -__IO uint32_t timeout = 0; - /* Check the parameters */ - assert_param(IS_ETH_PHY_ADDRESS(PHYAddress)); - assert_param(IS_ETH_PHY_REG(PHYReg)); - - /* Get the ETHERNET MACMIIAR value */ - tmpreg = ETH->MACMIIAR; - /* Keep only the CSR Clock Range CR[2:0] bits value */ - tmpreg &= ~MACMIIAR_CR_Mask; - /* Prepare the MII address register value */ - tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */ - tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */ - tmpreg &= ~ETH_MACMIIAR_MW; /* Set the read mode */ - tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ - /* Write the result value into the MII Address register */ - ETH->MACMIIAR = tmpreg; - /* Check for the Busy flag */ - do - { - timeout++; - tmpreg = ETH->MACMIIAR; - } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_READ_TO) - { - return (uint16_t)ETH_ERROR; - } - - /* Return data register value */ - return (uint16_t)(ETH->MACMIIDR); -} - -/** - * @brief Write to a PHY register - * @param PHYAddress: PHY device address, is the index of one of supported - * 32 PHY devices. - * This parameter can be one of the following values: 0,..,31 - * @param PHYReg: PHY register address, is the index of one of the 32 - * PHY register. - * This parameter can be one of the following values: - * @arg PHY_BCR : Tranceiver Control Register - * @arg More PHY register could be written depending on the used PHY - * @param PHYValue: the value to write - * @retval : ETH_ERROR: in case of timeout - * ETH_SUCCESS: for correct write - */ -uint32_t ETH_WritePHYRegister(uint16_t PHYAddress, uint16_t PHYReg, uint16_t PHYValue) -{ - uint32_t tmpreg = 0; - __IO uint32_t timeout = 0; - /* Check the parameters */ - assert_param(IS_ETH_PHY_ADDRESS(PHYAddress)); - assert_param(IS_ETH_PHY_REG(PHYReg)); - - /* Get the ETHERNET MACMIIAR value */ - tmpreg = ETH->MACMIIAR; - /* Keep only the CSR Clock Range CR[2:0] bits value */ - tmpreg &= ~MACMIIAR_CR_Mask; - /* Prepare the MII register address value */ - tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */ - tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */ - tmpreg |= ETH_MACMIIAR_MW; /* Set the write mode */ - tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ - /* Give the value to the MII data register */ - ETH->MACMIIDR = PHYValue; - /* Write the result value into the MII Address register */ - ETH->MACMIIAR = tmpreg; - /* Check for the Busy flag */ - do - { - timeout++; - tmpreg = ETH->MACMIIAR; - } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_WRITE_TO)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_WRITE_TO) - { - return ETH_ERROR; - } - - /* Return SUCCESS */ - return ETH_SUCCESS; -} - -/** - * @brief Enables or disables the PHY loopBack mode. - * @param PHYAddress: PHY device address, is the index of one of supported - * 32 PHY devices. - * This parameter can be one of the following values: - * @param NewState: new state of the PHY loopBack mode. - * This parameter can be: ENABLE or DISABLE. - * Note: Don't be confused with ETH_MACLoopBackCmd function - * which enables internal loopback at MII level - * @retval : ETH_ERROR: in case of bad PHY configuration - * ETH_SUCCESS: for correct PHY configuration - */ -uint32_t ETH_PHYLoopBackCmd(uint16_t PHYAddress, FunctionalState NewState) -{ - uint16_t tmpreg = 0; - /* Check the parameters */ - assert_param(IS_ETH_PHY_ADDRESS(PHYAddress)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Get the PHY configuration to update it */ - tmpreg = ETH_ReadPHYRegister(PHYAddress, PHY_BCR); - - if (NewState != DISABLE) - { - /* Enable the PHY loopback mode */ - tmpreg |= PHY_Loopback; - } - else - { - /* Disable the PHY loopback mode: normal mode */ - tmpreg &= (uint16_t)(~(uint16_t)PHY_Loopback); - } - /* Update the PHY control register with the new configuration */ - if(ETH_WritePHYRegister(PHYAddress, PHY_BCR, tmpreg) != (uint32_t)RESET) - { - return ETH_SUCCESS; - } - else - { - /* Return SUCCESS */ - return ETH_ERROR; - } -} - -/*--------------------------------- MAC ------------------------------------*/ -/** - * @brief Enables or disables the MAC transmission. - * @param NewState: new state of the MAC transmission. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MACTransmissionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC transmission */ - ETH->MACCR |= ETH_MACCR_TE; - } - else - { - /* Disable the MAC transmission */ - ETH->MACCR &= ~ETH_MACCR_TE; - } -} - -/** - * @brief Enables or disables the MAC reception. - * @param NewState: new state of the MAC reception. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MACReceptionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC reception */ - ETH->MACCR |= ETH_MACCR_RE; - } - else - { - /* Disable the MAC reception */ - ETH->MACCR &= ~ETH_MACCR_RE; - } -} - -/** - * @brief Checks whether the ETHERNET flow control busy bit is set or not. - * @param None - * @retval : The new state of flow control busy status bit (SET or RESET). - */ -FlagStatus ETH_GetFlowControlBusyStatus(void) -{ - FlagStatus bitstatus = RESET; - /* The Flow Control register should not be written to until this bit is cleared */ - if ((ETH->MACFCR & ETH_MACFCR_FCBBPA) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Initiate a Pause Control Frame (Full-duplex only). - * @param None - * @retval : None - */ -void ETH_InitiatePauseControlFrame(void) -{ - /* When Set In full duplex MAC initiates pause control frame */ - ETH->MACFCR |= ETH_MACFCR_FCBBPA; -} - -/** - * @brief Enables or disables the MAC BackPressure operation activation (Half-duplex only). - * @param NewState: new state of the MAC BackPressure operation activation. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_BackPressureActivationCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Activate the MAC BackPressure operation */ - /* In Half duplex: during backpressure, when the MAC receives a new frame, - the transmitter starts sending a JAM pattern resulting in a collision */ - ETH->MACFCR |= ETH_MACFCR_FCBBPA; - } - else - { - /* Desactivate the MAC BackPressure operation */ - ETH->MACFCR &= ~ETH_MACFCR_FCBBPA; - } -} - -/** - * @brief Checks whether the specified ETHERNET MAC flag is set or not. - * @param ETH_MAC_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_MAC_FLAG_TST : Time stamp trigger flag - * @arg ETH_MAC_FLAG_MMCT : MMC transmit flag - * @arg ETH_MAC_FLAG_MMCR : MMC receive flag - * @arg ETH_MAC_FLAG_MMC : MMC flag - * @arg ETH_MAC_FLAG_PMT : PMT flag - * @retval : The new state of ETHERNET MAC flag (SET or RESET). - */ -FlagStatus ETH_GetMACFlagStatus(uint32_t ETH_MAC_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_MAC_GET_FLAG(ETH_MAC_FLAG)); - if ((ETH->MACSR & ETH_MAC_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Checks whether the specified ETHERNET MAC interrupt has occurred or not. - * @param ETH_MAC_IT: specifies the interrupt source to check. - * This parameter can be one of the following values: - * @arg ETH_MAC_IT_TST : Time stamp trigger interrupt - * @arg ETH_MAC_IT_MMCT : MMC transmit interrupt - * @arg ETH_MAC_IT_MMCR : MMC receive interrupt - * @arg ETH_MAC_IT_MMC : MMC interrupt - * @arg ETH_MAC_IT_PMT : PMT interrupt - * @retval : The new state of ETHERNET MAC interrupt (SET or RESET). - */ -ITStatus ETH_GetMACITStatus(uint32_t ETH_MAC_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_MAC_GET_IT(ETH_MAC_IT)); - if ((ETH->MACSR & ETH_MAC_IT) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Enables or disables the specified ETHERNET MAC interrupts. - * @param ETH_MAC_IT: specifies the ETHERNET MAC interrupt sources to be - * enabled or disabled. - * This parameter can be any combination of the following values: - * @arg ETH_MAC_IT_TST : Time stamp trigger interrupt - * @arg ETH_MAC_IT_PMT : PMT interrupt - * @param NewState: new state of the specified ETHERNET MAC interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MACITConfig(uint32_t ETH_MAC_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ETH_MAC_IT(ETH_MAC_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET MAC interrupts */ - ETH->MACIMR &= (~(uint32_t)ETH_MAC_IT); - } - else - { - /* Disable the selected ETHERNET MAC interrupts */ - ETH->MACIMR |= ETH_MAC_IT; - } -} - -/** - * @brief Configures the selected MAC address. - * @param MacAddr: The MAC addres to configure. - * This parameter can be one of the following values: - * @arg ETH_MAC_Address0 : MAC Address0 - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param Addr: Pointer on MAC address buffer data (6 bytes). - * @retval : None - */ -void ETH_MACAddressConfig(uint32_t MacAddr, uint8_t *Addr) -{ - uint32_t tmpreg; - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS0123(MacAddr)); - - /* Calculate the selectecd MAC address high register */ - tmpreg = ((uint32_t)Addr[5] << 8) | (uint32_t)Addr[4]; - /* Load the selectecd MAC address high register */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) = tmpreg; - /* Calculate the selectecd MAC address low register */ - tmpreg = ((uint32_t)Addr[3] << 24) | ((uint32_t)Addr[2] << 16) | ((uint32_t)Addr[1] << 8) | Addr[0]; - - /* Load the selectecd MAC address low register */ - (*(__IO uint32_t *) (ETH_MAC_AddrLowBase + MacAddr)) = tmpreg; -} - -/** - * @brief Get the selected MAC address. - * @param MacAddr: The MAC addres to return. - * This parameter can be one of the following values: - * @arg ETH_MAC_Address0 : MAC Address0 - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param Addr: Pointer on MAC address buffer data (6 bytes). - * @retval : None - */ -void ETH_GetMACAddress(uint32_t MacAddr, uint8_t *Addr) -{ - uint32_t tmpreg; - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS0123(MacAddr)); - - /* Get the selectecd MAC address high register */ - tmpreg =(*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)); - - /* Calculate the selectecd MAC address buffer */ - Addr[5] = ((tmpreg >> 8) & (uint8_t)0xFF); - Addr[4] = (tmpreg & (uint8_t)0xFF); - /* Load the selectecd MAC address low register */ - tmpreg =(*(__IO uint32_t *) (ETH_MAC_AddrLowBase + MacAddr)); - /* Calculate the selectecd MAC address buffer */ - Addr[3] = ((tmpreg >> 24) & (uint8_t)0xFF); - Addr[2] = ((tmpreg >> 16) & (uint8_t)0xFF); - Addr[1] = ((tmpreg >> 8 ) & (uint8_t)0xFF); - Addr[0] = (tmpreg & (uint8_t)0xFF); -} - -/** - * @brief Enables or disables the Address filter module uses the specified - * ETHERNET MAC address for perfect filtering - * @param MacAddr: specifies the ETHERNET MAC address to be used for prfect filtering. - * This parameter can be one of the following values: - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param NewState: new state of the specified ETHERNET MAC address use. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MACAddressPerfectFilterCmd(uint32_t MacAddr, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS123(MacAddr)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET MAC address for perfect filtering */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) |= ETH_MACA1HR_AE; - } - else - { - /* Disable the selected ETHERNET MAC address for perfect filtering */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) &=(~(uint32_t)ETH_MACA1HR_AE); - } -} - -/** - * @brief Set the filter type for the specified ETHERNET MAC address - * @param MacAddr: specifies the ETHERNET MAC address - * This parameter can be one of the following values: - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param Filter: specifies the used frame received field for comparaison - * This parameter can be one of the following values: - * @arg ETH_MAC_AddressFilter_SA : MAC Address is used to compare - * with the SA fields of the received frame. - * @arg ETH_MAC_AddressFilter_DA : MAC Address is used to compare - * with the DA fields of the received frame. - * @retval : None - */ -void ETH_MACAddressFilterConfig(uint32_t MacAddr, uint32_t Filter) -{ - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS123(MacAddr)); - assert_param(IS_ETH_MAC_ADDRESS_FILTER(Filter)); - - if (Filter != ETH_MAC_AddressFilter_DA) - { - /* The selected ETHERNET MAC address is used to compare with the SA fields of the - received frame. */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) |= ETH_MACA1HR_SA; - } - else - { - /* The selected ETHERNET MAC address is used to compare with the DA fields of the - received frame. */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) &=(~(uint32_t)ETH_MACA1HR_SA); - } -} - -/** - * @brief Set the filter type for the specified ETHERNET MAC address - * @param MacAddr: specifies the ETHERNET MAC address - * This parameter can be one of the following values: - * @arg ETH_MAC_Address1 : MAC Address1 - * @arg ETH_MAC_Address2 : MAC Address2 - * @arg ETH_MAC_Address3 : MAC Address3 - * @param MaskByte: specifies the used address bytes for comparaison - * This parameter can be any combination of the following values: - * @arg ETH_MAC_AddressMask_Byte6 : Mask MAC Address high reg bits [15:8]. - * @arg ETH_MAC_AddressMask_Byte5 : Mask MAC Address high reg bits [7:0]. - * @arg ETH_MAC_AddressMask_Byte4 : Mask MAC Address low reg bits [31:24]. - * @arg ETH_MAC_AddressMask_Byte3 : Mask MAC Address low reg bits [23:16]. - * @arg ETH_MAC_AddressMask_Byte2 : Mask MAC Address low reg bits [15:8]. - * @arg ETH_MAC_AddressMask_Byte1 : Mask MAC Address low reg bits [7:0]. - * @retval : None - */ -void ETH_MACAddressMaskBytesFilterConfig(uint32_t MacAddr, uint32_t MaskByte) -{ - /* Check the parameters */ - assert_param(IS_ETH_MAC_ADDRESS123(MacAddr)); - assert_param(IS_ETH_MAC_ADDRESS_MASK(MaskByte)); - - /* Clear MBC bits in the selected MAC address high register */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) &=(~(uint32_t)ETH_MACA1HR_MBC); - /* Set the selected Filetr mask bytes */ - (*(__IO uint32_t *) (ETH_MAC_AddrHighBase + MacAddr)) |= MaskByte; -} -/*------------------------ DMA Tx/Rx Desciptors -----------------------------*/ - -/** - * @brief Initializes the DMA Tx descriptors in chain mode. - * @param DMATxDescTab: Pointer on the first Tx desc list - * @param TxBuff: Pointer on the first TxBuffer list - * @param TxBuffCount: Number of the used Tx desc in the list - * @retval : None - */ -void ETH_DMATxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMATxDesc; - - /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */ - DMATxDescToSet = DMATxDescTab; - /* Fill each DMATxDesc descriptor with the right values */ - for(i=0; i < TxBuffCount; i++) - { - /* Get the pointer on the ith member of the Tx Desc list */ - DMATxDesc = DMATxDescTab + i; - /* Set Second Address Chained bit */ - DMATxDesc->Status = ETH_DMATxDesc_TCH; - - /* Set Buffer1 address pointer */ - DMATxDesc->Buffer1Addr = (uint32_t)(&TxBuff[i*ETH_MAX_PACKET_SIZE]); - - /* Initialize the next descriptor with the Next Desciptor Polling Enable */ - if(i < (TxBuffCount-1)) - { - /* Set next descriptor address register with next descriptor base address */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t)(DMATxDescTab+i+1); - } - else - { - /* For last descriptor, set next descriptor address register equal to the first descriptor base address */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t) DMATxDescTab; - } - } - - /* Set Transmit Desciptor List Address Register */ - ETH->DMATDLAR = (uint32_t) DMATxDescTab; -} - -/** - * @brief Initializes the DMA Tx descriptors in ring mode. - * @param DMATxDescTab: Pointer on the first Tx desc list - * @param TxBuff1: Pointer on the first TxBuffer1 list - * @param TxBuff2: Pointer on the first TxBuffer2 list - * @param TxBuffCount: Number of the used Tx desc in the list - * Note: see decriptor skip length defined in ETH_DMA_InitStruct - * for the number of Words to skip between two unchained descriptors. - * @retval : None - */ -void ETH_DMATxDescRingInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t *TxBuff1, uint8_t *TxBuff2, uint32_t TxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMATxDesc; - - /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */ - DMATxDescToSet = DMATxDescTab; - /* Fill each DMATxDesc descriptor with the right values */ - for(i=0; i < TxBuffCount; i++) - { - /* Get the pointer on the ith member of the Tx Desc list */ - DMATxDesc = DMATxDescTab + i; - /* Set Buffer1 address pointer */ - DMATxDesc->Buffer1Addr = (uint32_t)(&TxBuff1[i*ETH_MAX_PACKET_SIZE]); - - /* Set Buffer2 address pointer */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t)(&TxBuff2[i*ETH_MAX_PACKET_SIZE]); - - /* Set Transmit End of Ring bit for last descriptor: The DMA returns to the base - address of the list, creating a Desciptor Ring */ - if(i == (TxBuffCount-1)) - { - /* Set Transmit End of Ring bit */ - DMATxDesc->Status = ETH_DMATxDesc_TER; - } - } - - /* Set Transmit Desciptor List Address Register */ - ETH->DMATDLAR = (uint32_t) DMATxDescTab; -} - -/** - * @brief Checks whether the specified ETHERNET DMA Tx Desc flag is set or not. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param ETH_DMATxDescFlag: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_DMATxDesc_OWN : OWN bit: descriptor is owned by DMA engine - * @arg ETH_DMATxDesc_IC : Interrupt on completetion - * @arg ETH_DMATxDesc_LS : Last Segment - * @arg ETH_DMATxDesc_FS : First Segment - * @arg ETH_DMATxDesc_DC : Disable CRC - * @arg ETH_DMATxDesc_DP : Disable Pad - * @arg ETH_DMATxDesc_TTSE: Transmit Time Stamp Enable - * @arg ETH_DMATxDesc_TER : Transmit End of Ring - * @arg ETH_DMATxDesc_TCH : Second Address Chained - * @arg ETH_DMATxDesc_TTSS: Tx Time Stamp Status - * @arg ETH_DMATxDesc_IHE : IP Header Error - * @arg ETH_DMATxDesc_ES : Error summary - * @arg ETH_DMATxDesc_JT : Jabber Timeout - * @arg ETH_DMATxDesc_FF : Frame Flushed: DMA/MTL flushed the frame due to SW flush - * @arg ETH_DMATxDesc_PCE : Payload Checksum Error - * @arg ETH_DMATxDesc_LCA : Loss of Carrier: carrier lost during tramsmission - * @arg ETH_DMATxDesc_NC : No Carrier: no carrier signal from the tranceiver - * @arg ETH_DMATxDesc_LCO : Late Collision: transmission aborted due to collision - * @arg ETH_DMATxDesc_EC : Excessive Collision: transmission aborted after 16 collisions - * @arg ETH_DMATxDesc_VF : VLAN Frame - * @arg ETH_DMATxDesc_CC : Collision Count - * @arg ETH_DMATxDesc_ED : Excessive Deferral - * @arg ETH_DMATxDesc_UF : Underflow Error: late data arrival from the memory - * @arg ETH_DMATxDesc_DB : Deferred Bit - * @retval : The new state of ETH_DMATxDescFlag (SET or RESET). - */ -FlagStatus ETH_GetDMATxDescFlagStatus(ETH_DMADESCTypeDef *DMATxDesc, uint32_t ETH_DMATxDescFlag) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMATxDESC_GET_FLAG(ETH_DMATxDescFlag)); - - if ((DMATxDesc->Status & ETH_DMATxDescFlag) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Returns the specified ETHERNET DMA Tx Desc collision count. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @retval : The Transmit descriptor collision counter value. - */ -uint32_t ETH_GetDMATxDescCollisionCount(ETH_DMADESCTypeDef *DMATxDesc) -{ - /* Return the Receive descriptor frame length */ - return ((DMATxDesc->Status & ETH_DMATxDesc_CC) >> ETH_DMATxDesc_CollisionCountShift); -} - -/** - * @brief Set the specified DMA Tx Desc Own bit. - * @param DMATxDesc: Pointer on a Tx desc - * @retval : None - */ -void ETH_SetDMATxDescOwnBit(ETH_DMADESCTypeDef *DMATxDesc) -{ - /* Set the DMA Tx Desc Own bit */ - DMATxDesc->Status |= ETH_DMATxDesc_OWN; -} - -/** - * @brief Enables or disables the specified DMA Tx Desc Transmit interrupt. - * @param DMATxDesc: Pointer on a Tx desc - * @param NewState: new state of the DMA Tx Desc transmit interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescTransmitITConfig(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA Tx Desc Transmit interrupt */ - DMATxDesc->Status |= ETH_DMATxDesc_IC; - } - else - { - /* Disable the DMA Tx Desc Transmit interrupt */ - DMATxDesc->Status &=(~(uint32_t)ETH_DMATxDesc_IC); - } -} - -/** - * @brief Enables or disables the specified DMA Tx Desc Transmit interrupt. - * @param DMATxDesc: Pointer on a Tx desc - * @param DMATxDesc_FrameSegment: specifies is the actual Tx desc contain last or first segment. - * This parameter can be one of the following values: - * @arg ETH_DMATxDesc_LastSegment : actual Tx desc contain last segment - * @arg ETH_DMATxDesc_FirstSegment : actual Tx desc contain first segment - * @retval : None - */ -void ETH_DMATxDescFrameSegmentConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_FrameSegment) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_TXDESC_SEGMENT(DMATxDesc_FrameSegment)); - - /* Selects the DMA Tx Desc Frame segment */ - DMATxDesc->Status |= DMATxDesc_FrameSegment; -} - -/** - * @brief Selects the specified ETHERNET DMA Tx Desc Checksum Insertion. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param DMATxDesc_Checksum: specifies is the DMA Tx desc checksum insertion. - * This parameter can be one of the following values: - * @arg ETH_DMATxDesc_ChecksumByPass : Checksum bypass - * @arg ETH_DMATxDesc_ChecksumIPV4Header : IPv4 header checksum - * @arg ETH_DMATxDesc_ChecksumTCPUDPICMPSegment : TCP/UDP/ICMP checksum. Pseudo header checksum is assumed to be present - * @arg ETH_DMATxDesc_ChecksumTCPUDPICMPFull : TCP/UDP/ICMP checksum fully in hardware including pseudo header - * @retval : None - */ -void ETH_DMATxDescChecksumInsertionConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_Checksum) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_TXDESC_CHECKSUM(DMATxDesc_Checksum)); - - /* Set the selected DMA Tx desc checksum insertion control */ - DMATxDesc->Status |= DMATxDesc_Checksum; -} - -/** - * @brief Enables or disables the DMA Tx Desc CRC. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc CRC. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescCRCCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc CRC */ - DMATxDesc->Status &= (~(uint32_t)ETH_DMATxDesc_DC); - } - else - { - /* Disable the selected DMA Tx Desc CRC */ - DMATxDesc->Status |= ETH_DMATxDesc_DC; - } -} - -/** - * @brief Enables or disables the DMA Tx Desc end of ring. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc end of ring. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc end of ring */ - DMATxDesc->Status |= ETH_DMATxDesc_TER; - } - else - { - /* Disable the selected DMA Tx Desc end of ring */ - DMATxDesc->Status &= (~(uint32_t)ETH_DMATxDesc_TER); - } -} - -/** - * @brief Enables or disables the DMA Tx Desc second address chained. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc second address chained. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc second address chained */ - DMATxDesc->Status |= ETH_DMATxDesc_TCH; - } - else - { - /* Disable the selected DMA Tx Desc second address chained */ - DMATxDesc->Status &=(~(uint32_t)ETH_DMATxDesc_TCH); - } -} - -/** - * @brief Enables or disables the DMA Tx Desc padding for frame shorter than 64 bytes. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc padding for - * frame shorter than 64 bytes. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescShortFramePaddingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc padding for frame shorter than 64 bytes */ - DMATxDesc->Status &= (~(uint32_t)ETH_DMATxDesc_DP); - } - else - { - /* Disable the selected DMA Tx Desc padding for frame shorter than 64 bytes*/ - DMATxDesc->Status |= ETH_DMATxDesc_DP; - } -} - -/** - * @brief Enables or disables the DMA Tx Desc time stamp. - * @param DMATxDesc: pointer on a DMA Tx descriptor - * @param NewState: new state of the specified DMA Tx Desc time stamp. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATxDescTimeStampCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Tx Desc time stamp */ - DMATxDesc->Status |= ETH_DMATxDesc_TTSE; - } - else - { - /* Disable the selected DMA Tx Desc time stamp */ - DMATxDesc->Status &=(~(uint32_t)ETH_DMATxDesc_TTSE); - } -} - -/** - * @brief Configures the specified DMA Tx Desc buffer1 and buffer2 sizes. - * @param DMATxDesc: Pointer on a Tx desc - * @param BufferSize1: specifies the Tx desc buffer1 size. - * @param BufferSize2: specifies the Tx desc buffer2 size (put "0" if not used). - * @retval : None - */ -void ETH_DMATxDescBufferSizeConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t BufferSize1, uint32_t BufferSize2) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMATxDESC_BUFFER_SIZE(BufferSize1)); - assert_param(IS_ETH_DMATxDESC_BUFFER_SIZE(BufferSize2)); - - /* Set the DMA Tx Desc buffer1 and buffer2 sizes values */ - DMATxDesc->ControlBufferSize |= (BufferSize1 | (BufferSize2 << ETH_DMATxDesc_BufferSize2Shift)); -} - -/** - * @brief Initializes the DMA Rx descriptors in chain mode. - * @param DMARxDescTab: Pointer on the first Rx desc list - * @param RxBuff: Pointer on the first RxBuffer list - * @param RxBuffCount: Number of the used Rx desc in the list - * @retval : None - */ -void ETH_DMARxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMARxDesc; - - /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */ - DMARxDescToGet = DMARxDescTab; - /* Fill each DMARxDesc descriptor with the right values */ - for(i=0; i < RxBuffCount; i++) - { - /* Get the pointer on the ith member of the Rx Desc list */ - DMARxDesc = DMARxDescTab+i; - /* Set Own bit of the Rx descriptor Status */ - DMARxDesc->Status = ETH_DMARxDesc_OWN; - - /* Set Buffer1 size and Second Address Chained bit */ - DMARxDesc->ControlBufferSize = ETH_DMARxDesc_RCH | (uint32_t)ETH_MAX_PACKET_SIZE; - /* Set Buffer1 address pointer */ - DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff[i*ETH_MAX_PACKET_SIZE]); - - /* Initialize the next descriptor with the Next Desciptor Polling Enable */ - if(i < (RxBuffCount-1)) - { - /* Set next descriptor address register with next descriptor base address */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab+i+1); - } - else - { - /* For last descriptor, set next descriptor address register equal to the first descriptor base address */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab); - } - } - - /* Set Receive Desciptor List Address Register */ - ETH->DMARDLAR = (uint32_t) DMARxDescTab; -} - -/** - * @brief Initializes the DMA Rx descriptors in ring mode. - * @param DMARxDescTab: Pointer on the first Rx desc list - * @param RxBuff1: Pointer on the first RxBuffer1 list - * @param RxBuff2: Pointer on the first RxBuffer2 list - * @param RxBuffCount: Number of the used Rx desc in the list - * Note: see decriptor skip length defined in ETH_DMA_InitStruct - * for the number of Words to skip between two unchained descriptors. - * @retval : None - */ -void ETH_DMARxDescRingInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff1, uint8_t *RxBuff2, uint32_t RxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMARxDesc; - /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */ - DMARxDescToGet = DMARxDescTab; - /* Fill each DMARxDesc descriptor with the right values */ - for(i=0; i < RxBuffCount; i++) - { - /* Get the pointer on the ith member of the Rx Desc list */ - DMARxDesc = DMARxDescTab+i; - /* Set Own bit of the Rx descriptor Status */ - DMARxDesc->Status = ETH_DMARxDesc_OWN; - /* Set Buffer1 size */ - DMARxDesc->ControlBufferSize = ETH_MAX_PACKET_SIZE; - /* Set Buffer1 address pointer */ - DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff1[i*ETH_MAX_PACKET_SIZE]); - - /* Set Buffer2 address pointer */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(&RxBuff2[i*ETH_MAX_PACKET_SIZE]); - - /* Set Receive End of Ring bit for last descriptor: The DMA returns to the base - address of the list, creating a Desciptor Ring */ - if(i == (RxBuffCount-1)) - { - /* Set Receive End of Ring bit */ - DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_RER; - } - } - - /* Set Receive Desciptor List Address Register */ - ETH->DMARDLAR = (uint32_t) DMARxDescTab; -} - -/** - * @brief Checks whether the specified ETHERNET Rx Desc flag is set or not. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @param ETH_DMARxDescFlag: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_DMARxDesc_OWN: OWN bit: descriptor is owned by DMA engine - * @arg ETH_DMARxDesc_AFM: DA Filter Fail for the rx frame - * @arg ETH_DMARxDesc_ES: Error summary - * @arg ETH_DMARxDesc_DE: Desciptor error: no more descriptors for receive frame - * @arg ETH_DMARxDesc_SAF: SA Filter Fail for the received frame - * @arg ETH_DMARxDesc_LE: Frame size not matching with length field - * @arg ETH_DMARxDesc_OE: Overflow Error: Frame was damaged due to buffer overflow - * @arg ETH_DMARxDesc_VLAN: VLAN Tag: received frame is a VLAN frame - * @arg ETH_DMARxDesc_FS: First descriptor of the frame - * @arg ETH_DMARxDesc_LS: Last descriptor of the frame - * @arg ETH_DMARxDesc_IPV4HCE: IPC Checksum Error/Giant Frame: Rx Ipv4 header checksum error - * @arg ETH_DMARxDesc_LC: Late collision occurred during reception - * @arg ETH_DMARxDesc_FT: Frame type - Ethernet, otherwise 802.3 - * @arg ETH_DMARxDesc_RWT: Receive Watchdog Timeout: watchdog timer expired during reception - * @arg ETH_DMARxDesc_RE: Receive error: error reported by MII interface - * @arg ETH_DMARxDesc_DE: Dribble bit error: frame contains non int multiple of 8 bits - * @arg ETH_DMARxDesc_CE: CRC error - * @arg ETH_DMARxDesc_MAMPCE: Rx MAC Address/Payload Checksum Error: Rx MAC address matched/ Rx Payload Checksum Error - * @retval : The new state of ETH_DMARxDescFlag (SET or RESET). - */ -FlagStatus ETH_GetDMARxDescFlagStatus(ETH_DMADESCTypeDef *DMARxDesc, uint32_t ETH_DMARxDescFlag) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMARxDESC_GET_FLAG(ETH_DMARxDescFlag)); - if ((DMARxDesc->Status & ETH_DMARxDescFlag) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Set the specified DMA Rx Desc Own bit. - * @param DMARxDesc: Pointer on a Rx desc - * @retval : None - */ -void ETH_SetDMARxDescOwnBit(ETH_DMADESCTypeDef *DMARxDesc) -{ - /* Set the DMA Rx Desc Own bit */ - DMARxDesc->Status |= ETH_DMARxDesc_OWN; -} - -/** - * @brief Returns the specified DMA Rx Desc frame length. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @retval : The Rx descriptor received frame length. - */ -uint32_t ETH_GetDMARxDescFrameLength(ETH_DMADESCTypeDef *DMARxDesc) -{ - /* Return the Receive descriptor frame length */ - return ((DMARxDesc->Status & ETH_DMARxDesc_FL) >> ETH_DMARxDesc_FrameLengthShift); -} - -/** - * @brief Enables or disables the specified DMA Rx Desc receive interrupt. - * @param DMARxDesc: Pointer on a Rx desc - * @param NewState: new state of the specified DMA Rx Desc interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMARxDescReceiveITConfig(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA Rx Desc receive interrupt */ - DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_DIC); - } - else - { - /* Disable the DMA Rx Desc receive interrupt */ - DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_DIC; - } -} - -/** - * @brief Enables or disables the DMA Rx Desc end of ring. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @param NewState: new state of the specified DMA Rx Desc end of ring. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMARxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Rx Desc end of ring */ - DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_RER; - } - else - { - /* Disable the selected DMA Rx Desc end of ring */ - DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_RER); - } -} - -/** - * @brief Enables or disables the DMA Rx Desc second address chained. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @param NewState: new state of the specified DMA Rx Desc second address chained. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMARxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMA Rx Desc second address chained */ - DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_RCH; - } - else - { - /* Disable the selected DMA Rx Desc second address chained */ - DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_RCH); - } -} - -/** - * @brief Returns the specified ETHERNET DMA Rx Desc buffer size. - * @param DMARxDesc: pointer on a DMA Rx descriptor - * @param DMARxDesc_Buffer: specifies the DMA Rx Desc buffer. - * This parameter can be any one of the following values: - * @arg ETH_DMARxDesc_Buffer1 : DMA Rx Desc Buffer1 - * @arg ETH_DMARxDesc_Buffer2 : DMA Rx Desc Buffer2 - * @retval : The Receive descriptor frame length. - */ -uint32_t ETH_GetDMARxDescBufferSize(ETH_DMADESCTypeDef *DMARxDesc, uint32_t DMARxDesc_Buffer) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_RXDESC_BUFFER(DMARxDesc_Buffer)); - - if(DMARxDesc_Buffer != ETH_DMARxDesc_Buffer1) - { - /* Return the DMA Rx Desc buffer2 size */ - return ((DMARxDesc->ControlBufferSize & ETH_DMARxDesc_RBS2) >> ETH_DMARxDesc_Buffer2SizeShift); - } - else - { - /* Return the DMA Rx Desc buffer1 size */ - return (DMARxDesc->ControlBufferSize & ETH_DMARxDesc_RBS1); - } -} - -/*--------------------------------- DMA ------------------------------------*/ -/** - * @brief Resets all MAC subsystem internal registers and logic. - * @param None - * @retval : None - */ -void ETH_SoftwareReset(void) -{ - /* Set the SWR bit: resets all MAC subsystem internal registers and logic */ - /* After reset all the registers holds their respective reset values */ - ETH->DMABMR |= ETH_DMABMR_SR; -} - -/** - * @brief Checks whether the ETHERNET software reset bit is set or not. - * @param None - * @retval : The new state of DMA Bus Mode register SR bit (SET or RESET). - */ -FlagStatus ETH_GetSoftwareResetStatus(void) -{ - FlagStatus bitstatus = RESET; - if((ETH->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Checks whether the specified ETHERNET DMA flag is set or not. - * @param ETH_DMA_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_DMA_FLAG_TST : Time-stamp trigger flag - * @arg ETH_DMA_FLAG_PMT : PMT flag - * @arg ETH_DMA_FLAG_MMC : MMC flag - * @arg ETH_DMA_FLAG_DataTransferError : Error bits 0-data buffer, 1-desc. access - * @arg ETH_DMA_FLAG_ReadWriteError : Error bits 0-write trnsf, 1-read transfr - * @arg ETH_DMA_FLAG_AccessError : Error bits 0-Rx DMA, 1-Tx DMA - * @arg ETH_DMA_FLAG_NIS : Normal interrupt summary flag - * @arg ETH_DMA_FLAG_AIS : Abnormal interrupt summary flag - * @arg ETH_DMA_FLAG_ER : Early receive flag - * @arg ETH_DMA_FLAG_FBE : Fatal bus error flag - * @arg ETH_DMA_FLAG_ET : Early transmit flag - * @arg ETH_DMA_FLAG_RWT : Receive watchdog timeout flag - * @arg ETH_DMA_FLAG_RPS : Receive process stopped flag - * @arg ETH_DMA_FLAG_RBU : Receive buffer unavailable flag - * @arg ETH_DMA_FLAG_R : Receive flag - * @arg ETH_DMA_FLAG_TU : Underflow flag - * @arg ETH_DMA_FLAG_RO : Overflow flag - * @arg ETH_DMA_FLAG_TJT : Transmit jabber timeout flag - * @arg ETH_DMA_FLAG_TBU : Transmit buffer unavailable flag - * @arg ETH_DMA_FLAG_TPS : Transmit process stopped flag - * @arg ETH_DMA_FLAG_T : Transmit flag - * @retval : The new state of ETH_DMA_FLAG (SET or RESET). - */ -FlagStatus ETH_GetDMAFlagStatus(uint32_t ETH_DMA_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMA_GET_IT(ETH_DMA_FLAG)); - if ((ETH->DMASR & ETH_DMA_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the ETHERNET’s DMA pending flag. - * @param ETH_DMA_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg ETH_DMA_FLAG_NIS : Normal interrupt summary flag - * @arg ETH_DMA_FLAG_AIS : Abnormal interrupt summary flag - * @arg ETH_DMA_FLAG_ER : Early receive flag - * @arg ETH_DMA_FLAG_FBE : Fatal bus error flag - * @arg ETH_DMA_FLAG_ETI : Early transmit flag - * @arg ETH_DMA_FLAG_RWT : Receive watchdog timeout flag - * @arg ETH_DMA_FLAG_RPS : Receive process stopped flag - * @arg ETH_DMA_FLAG_RBU : Receive buffer unavailable flag - * @arg ETH_DMA_FLAG_R : Receive flag - * @arg ETH_DMA_FLAG_TU : Transmit Underflow flag - * @arg ETH_DMA_FLAG_RO : Receive Overflow flag - * @arg ETH_DMA_FLAG_TJT : Transmit jabber timeout flag - * @arg ETH_DMA_FLAG_TBU : Transmit buffer unavailable flag - * @arg ETH_DMA_FLAG_TPS : Transmit process stopped flag - * @arg ETH_DMA_FLAG_T : Transmit flag - * @retval : None - */ -void ETH_DMAClearFlag(uint32_t ETH_DMA_FLAG) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_FLAG(ETH_DMA_FLAG)); - - /* Clear the selected ETHERNET DMA FLAG */ - ETH->DMASR = (uint32_t) ETH_DMA_FLAG; -} - -/** - * @brief Checks whether the specified ETHERNET DMA interrupt has occured or not. - * @param ETH_DMA_IT: specifies the interrupt source to check. - * This parameter can be one of the following values: - * @arg ETH_DMA_IT_TST : Time-stamp trigger interrupt - * @arg ETH_DMA_IT_PMT : PMT interrupt - * @arg ETH_DMA_IT_MMC : MMC interrupt - * @arg ETH_DMA_IT_NIS : Normal interrupt summary - * @arg ETH_DMA_IT_AIS : Abnormal interrupt summary - * @arg ETH_DMA_IT_ER : Early receive interrupt - * @arg ETH_DMA_IT_FBE : Fatal bus error interrupt - * @arg ETH_DMA_IT_ET : Early transmit interrupt - * @arg ETH_DMA_IT_RWT : Receive watchdog timeout interrupt - * @arg ETH_DMA_IT_RPS : Receive process stopped interrupt - * @arg ETH_DMA_IT_RBU : Receive buffer unavailable interrupt - * @arg ETH_DMA_IT_R : Receive interrupt - * @arg ETH_DMA_IT_TU : Underflow interrupt - * @arg ETH_DMA_IT_RO : Overflow interrupt - * @arg ETH_DMA_IT_TJT : Transmit jabber timeout interrupt - * @arg ETH_DMA_IT_TBU : Transmit buffer unavailable interrupt - * @arg ETH_DMA_IT_TPS : Transmit process stopped interrupt - * @arg ETH_DMA_IT_T : Transmit interrupt - * @retval : The new state of ETH_DMA_IT (SET or RESET). - */ -ITStatus ETH_GetDMAITStatus(uint32_t ETH_DMA_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMA_GET_IT(ETH_DMA_IT)); - if ((ETH->DMASR & ETH_DMA_IT) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the ETHERNET’s DMA IT pending bit. - * @param ETH_DMA_IT: specifies the interrupt pending bit to clear. - * This parameter can be any combination of the following values: - * @arg ETH_DMA_IT_NIS : Normal interrupt summary - * @arg ETH_DMA_IT_AIS : Abnormal interrupt summary - * @arg ETH_DMA_IT_ER : Early receive interrupt - * @arg ETH_DMA_IT_FBE : Fatal bus error interrupt - * @arg ETH_DMA_IT_ETI : Early transmit interrupt - * @arg ETH_DMA_IT_RWT : Receive watchdog timeout interrupt - * @arg ETH_DMA_IT_RPS : Receive process stopped interrupt - * @arg ETH_DMA_IT_RBU : Receive buffer unavailable interrupt - * @arg ETH_DMA_IT_R : Receive interrupt - * @arg ETH_DMA_IT_TU : Transmit Underflow interrupt - * @arg ETH_DMA_IT_RO : Receive Overflow interrupt - * @arg ETH_DMA_IT_TJT : Transmit jabber timeout interrupt - * @arg ETH_DMA_IT_TBU : Transmit buffer unavailable interrupt - * @arg ETH_DMA_IT_TPS : Transmit process stopped interrupt - * @arg ETH_DMA_IT_T : Transmit interrupt - * @retval : None - */ -void ETH_DMAClearITPendingBit(uint32_t ETH_DMA_IT) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_IT(ETH_DMA_IT)); - - /* Clear the selected ETHERNET DMA IT */ - ETH->DMASR = (uint32_t) ETH_DMA_IT; -} - -/** - * @brief Returns the ETHERNET DMA Transmit Process State. - * @param None - * @retval : The new ETHERNET DMA Transmit Process State: - * This can be one of the following values: - * - ETH_DMA_TransmitProcess_Stopped : Stopped - Reset or Stop Tx Command issued - * - ETH_DMA_TransmitProcess_Fetching : Running - fetching the Tx descriptor - * - ETH_DMA_TransmitProcess_Waiting : Running - waiting for status - * - ETH_DMA_TransmitProcess_Reading : unning - reading the data from host memory - * - ETH_DMA_TransmitProcess_Suspended : Suspended - Tx Desciptor unavailabe - * - ETH_DMA_TransmitProcess_Closing : Running - closing Rx descriptor - */ -uint32_t ETH_GetTransmitProcessState(void) -{ - return ((uint32_t)(ETH->DMASR & ETH_DMASR_TS)); -} - -/** - * @brief Returns the ETHERNET DMA Receive Process State. - * @param None - * @retval : The new ETHERNET DMA Receive Process State: - * This can be one of the following values: - * - ETH_DMA_ReceiveProcess_Stopped : Stopped - Reset or Stop Rx Command issued - * - ETH_DMA_ReceiveProcess_Fetching : Running - fetching the Rx descriptor - * - ETH_DMA_ReceiveProcess_Waiting : Running - waiting for packet - * - ETH_DMA_ReceiveProcess_Suspended : Suspended - Rx Desciptor unavailable - * - ETH_DMA_ReceiveProcess_Closing : Running - closing descriptor - * - ETH_DMA_ReceiveProcess_Queuing : Running - queuing the recieve frame into host memory - */ -uint32_t ETH_GetReceiveProcessState(void) -{ - return ((uint32_t)(ETH->DMASR & ETH_DMASR_RS)); -} - -/** - * @brief Clears the ETHERNET transmit FIFO. - * @param None - * @retval : None - */ -void ETH_FlushTransmitFIFO(void) -{ - /* Set the Flush Transmit FIFO bit */ - ETH->DMAOMR |= ETH_DMAOMR_FTF; -} - -/** - * @brief Checks whether the ETHERNET transmit FIFO bit is cleared or not. - * @param None - * @retval : The new state of ETHERNET flush transmit FIFO bit (SET or RESET). - */ -FlagStatus ETH_GetFlushTransmitFIFOStatus(void) -{ - FlagStatus bitstatus = RESET; - if ((ETH->DMAOMR & ETH_DMAOMR_FTF) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Enables or disables the DMA transmission. - * @param NewState: new state of the DMA transmission. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMATransmissionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA transmission */ - ETH->DMAOMR |= ETH_DMAOMR_ST; - } - else - { - /* Disable the DMA transmission */ - ETH->DMAOMR &= ~ETH_DMAOMR_ST; - } -} - -/** - * @brief Enables or disables the DMA reception. - * @param NewState: new state of the DMA reception. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMAReceptionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA reception */ - ETH->DMAOMR |= ETH_DMAOMR_SR; - } - else - { - /* Disable the DMA reception */ - ETH->DMAOMR &= ~ETH_DMAOMR_SR; - } -} - -/** - * @brief Enables or disables the specified ETHERNET DMA interrupts. - * @param ETH_DMA_IT: specifies the ETHERNET DMA interrupt sources to be - * enabled or disabled. - * This parameter can be any combination of the following values: - * @arg ETH_DMA_IT_NIS : Normal interrupt summary - * @arg ETH_DMA_IT_AIS : Abnormal interrupt summary - * @arg ETH_DMA_IT_ER : Early receive interrupt - * @arg ETH_DMA_IT_FBE : Fatal bus error interrupt - * @arg ETH_DMA_IT_ET : Early transmit interrupt - * @arg ETH_DMA_IT_RWT : Receive watchdog timeout interrupt - * @arg ETH_DMA_IT_RPS : Receive process stopped interrupt - * @arg ETH_DMA_IT_RBU : Receive buffer unavailable interrupt - * @arg ETH_DMA_IT_R : Receive interrupt - * @arg ETH_DMA_IT_TU : Underflow interrupt - * @arg ETH_DMA_IT_RO : Overflow interrupt - * @arg ETH_DMA_IT_TJT : Transmit jabber timeout interrupt - * @arg ETH_DMA_IT_TBU : Transmit buffer unavailable interrupt - * @arg ETH_DMA_IT_TPS : Transmit process stopped interrupt - * @arg ETH_DMA_IT_T : Transmit interrupt - * @param NewState: new state of the specified ETHERNET DMA interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_DMAITConfig(uint32_t ETH_DMA_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ETH_DMA_IT(ETH_DMA_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET DMA interrupts */ - ETH->DMAIER |= ETH_DMA_IT; - } - else - { - /* Disable the selected ETHERNET DMA interrupts */ - ETH->DMAIER &=(~(uint32_t)ETH_DMA_IT); - } -} - -/** - * @brief Checks whether the specified ETHERNET DMA overflow flag is set or not. - * @param ETH_DMA_Overflow: specifies the DMA overflow flag to check. - * This parameter can be one of the following values: - * @arg ETH_DMA_Overflow_RxFIFOCounter : Overflow for FIFO Overflow Counter - * @arg ETH_DMA_Overflow_MissedFrameCounter : Overflow for Missed Frame Counter - * @retval : The new state of ETHERNET DMA overflow Flag (SET or RESET). - */ -FlagStatus ETH_GetDMAOverflowStatus(uint32_t ETH_DMA_Overflow) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_DMA_GET_OVERFLOW(ETH_DMA_Overflow)); - - if ((ETH->DMAMFBOCR & ETH_DMA_Overflow) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Get the ETHERNET DMA Rx Overflow Missed Frame Counter value. - * @param None - * @retval : The value of Rx overflow Missed Frame Counter. - */ -uint32_t ETH_GetRxOverflowMissedFrameCounter(void) -{ - return ((uint32_t)((ETH->DMAMFBOCR & ETH_DMAMFBOCR_MFA)>>ETH_DMA_RxOverflowMissedFramesCounterShift)); -} - -/** - * @brief Get the ETHERNET DMA Buffer Unavailable Missed Frame Counter value. - * @param None - * @retval : The value of Buffer unavailable Missed Frame Counter. - */ -uint32_t ETH_GetBufferUnavailableMissedFrameCounter(void) -{ - return ((uint32_t)(ETH->DMAMFBOCR) & ETH_DMAMFBOCR_MFC); -} - -/** - * @brief Get the ETHERNET DMA DMACHTDR register value. - * @param None - * @retval : The value of the current Tx desc start address. - */ -uint32_t ETH_GetCurrentTxDescStartAddress(void) -{ - return ((uint32_t)(ETH->DMACHTDR)); -} - -/** - * @brief Get the ETHERNET DMA DMACHRDR register value. - * @param None - * @retval : The value of the current Rx desc start address. - */ -uint32_t ETH_GetCurrentRxDescStartAddress(void) -{ - return ((uint32_t)(ETH->DMACHRDR)); -} - -/** - * @brief Get the ETHERNET DMA DMACHTBAR register value. - * @param None - * @retval : The value of the current Tx desc buffer address. - */ -uint32_t ETH_GetCurrentTxBufferAddress(void) -{ - return ((uint32_t)(ETH->DMACHTBAR)); -} - -/** - * @brief Get the ETHERNET DMA DMACHRBAR register value. - * @param None - * @retval : The value of the current Rx desc buffer address. - */ -uint32_t ETH_GetCurrentRxBufferAddress(void) -{ - return ((uint32_t)(ETH->DMACHRBAR)); -} - -/** - * @brief Resumes the DMA Transmission by writing to the DmaTxPollDemand - * register: (the data written could be anything). This forces - * the DMA to resume transmission. - * @param None - * @retval : None. - */ -void ETH_ResumeDMATransmission(void) -{ - ETH->DMATPDR = 0; -} - -/** - * @brief Resumes the DMA Transmission by writing to the DmaRxPollDemand - * register: (the data written could be anything). This forces - * the DMA to resume reception. - * @param None - * @retval : None. - */ -void ETH_ResumeDMAReception(void) -{ - ETH->DMARPDR = 0; -} - -/*--------------------------------- PMT ------------------------------------*/ -/** - * @brief Reset Wakeup frame filter register pointer. - * @param None - * @retval : None - */ -void ETH_ResetWakeUpFrameFilterRegisterPointer(void) -{ - /* Resets the Remote Wake-up Frame Filter register pointer to 0x0000 */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_WFFRPR; -} - -/** - * @brief Populates the remote wakeup frame registers. - * @param Buffer: Pointer on remote WakeUp Frame Filter Register buffer - * data (8 words). - * @retval : None - */ -void ETH_SetWakeUpFrameFilterRegister(uint32_t *Buffer) -{ - uint32_t i = 0; - - /* Fill Remote Wake-up Frame Filter register with Buffer data */ - for(i =0; iMACRWUFFR = Buffer[i]; - } -} - -/** - * @brief Enables or disables any unicast packet filtered by the MAC - * (DAF) address recognition to be a wake-up frame. - * @param NewState: new state of the MAC Global Unicast Wake-Up. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_GlobalUnicastWakeUpCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC Global Unicast Wake-Up */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_GU; - } - else - { - /* Disable the MAC Global Unicast Wake-Up */ - ETH->MACPMTCSR &= ~ETH_MACPMTCSR_GU; - } -} - -/** - * @brief Checks whether the specified ETHERNET PMT flag is set or not. - * @param ETH_PMT_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_PMT_FLAG_WUFFRPR : Wake-Up Frame Filter Register Poniter Reset - * @arg ETH_PMT_FLAG_WUFR : Wake-Up Frame Received - * @arg ETH_PMT_FLAG_MPR : Magic Packet Received - * @retval : The new state of ETHERNET PMT Flag (SET or RESET). - */ -FlagStatus ETH_GetPMTFlagStatus(uint32_t ETH_PMT_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_PMT_GET_FLAG(ETH_PMT_FLAG)); - - if ((ETH->MACPMTCSR & ETH_PMT_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Enables or disables the MAC Wake-Up Frame Detection. - * @param NewState: new state of the MAC Wake-Up Frame Detection. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_WakeUpFrameDetectionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC Wake-Up Frame Detection */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_WFE; - } - else - { - /* Disable the MAC Wake-Up Frame Detection */ - ETH->MACPMTCSR &= ~ETH_MACPMTCSR_WFE; - } -} - -/** - * @brief Enables or disables the MAC Magic Packet Detection. - * @param NewState: new state of the MAC Magic Packet Detection. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MagicPacketDetectionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC Magic Packet Detection */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_MPE; - } - else - { - /* Disable the MAC Magic Packet Detection */ - ETH->MACPMTCSR &= ~ETH_MACPMTCSR_MPE; - } -} - -/** - * @brief Enables or disables the MAC Power Down. - * @param NewState: new state of the MAC Power Down. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_PowerDownCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MAC Power Down */ - /* This puts the MAC in power down mode */ - ETH->MACPMTCSR |= ETH_MACPMTCSR_PD; - } - else - { - /* Disable the MAC Power Down */ - ETH->MACPMTCSR &= ~ETH_MACPMTCSR_PD; - } -} - -/*--------------------------------- MMC ------------------------------------*/ -/** - * @brief Enables or disables the MMC Counter Freeze. - * @param NewState: new state of the MMC Counter Freeze. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MMCCounterFreezeCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MMC Counter Freeze */ - ETH->MMCCR |= ETH_MMCCR_MCF; - } - else - { - /* Disable the MMC Counter Freeze */ - ETH->MMCCR &= ~ETH_MMCCR_MCF; - } -} - -/** - * @brief Enables or disables the MMC Reset On Read. - * @param NewState: new state of the MMC Reset On Read. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MMCResetOnReadCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the MMC Counter reset on read */ - ETH->MMCCR |= ETH_MMCCR_ROR; - } - else - { - /* Disable the MMC Counter reset on read */ - ETH->MMCCR &= ~ETH_MMCCR_ROR; - } -} - -/** - * @brief Enables or disables the MMC Counter Stop Rollover. - * @param NewState: new state of the MMC Counter Stop Rollover. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MMCCounterRolloverCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Disable the MMC Counter Stop Rollover */ - ETH->MMCCR &= ~ETH_MMCCR_CSR; - } - else - { - /* Enable the MMC Counter Stop Rollover */ - ETH->MMCCR |= ETH_MMCCR_CSR; - } -} - -/** - * @brief Resets the MMC Counters. - * @param None - * @retval : None - */ -void ETH_MMCCountersReset(void) -{ - /* Resets the MMC Counters */ - ETH->MMCCR |= ETH_MMCCR_CR; -} - -/** - * @brief Enables or disables the specified ETHERNET MMC interrupts. - * @param ETH_MMC_IT: specifies the ETHERNET MMC interrupt - * sources to be enabled or disabled. - * This parameter can be any combination of Tx interrupt or - * any combination of Rx interrupt (but not both)of the following values: - * @arg ETH_MMC_IT_TGF : When Tx good frame counter reaches half the maximum value - * @arg ETH_MMC_IT_TGFMSC: When Tx good multi col counter reaches half the maximum value - * @arg ETH_MMC_IT_TGFSC : When Tx good single col counter reaches half the maximum value - * @arg ETH_MMC_IT_RGUF : When Rx good unicast frames counter reaches half the maximum value - * @arg ETH_MMC_IT_RFAE : When Rx alignment error counter reaches half the maximum value - * @arg ETH_MMC_IT_RFCE : When Rx crc error counter reaches half the maximum value - * @param NewState: new state of the specified ETHERNET MMC interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_MMCITConfig(uint32_t ETH_MMC_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ETH_MMC_IT(ETH_MMC_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if ((ETH_MMC_IT & (uint32_t)0x10000000) != (uint32_t)RESET) - { - /* Remove egister mak from IT */ - ETH_MMC_IT &= 0xEFFFFFFF; - - /* ETHERNET MMC Rx interrupts selected */ - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET MMC interrupts */ - ETH->MMCRIMR &=(~(uint32_t)ETH_MMC_IT); - } - else - { - /* Disable the selected ETHERNET MMC interrupts */ - ETH->MMCRIMR |= ETH_MMC_IT; - } - } - else - { - /* ETHERNET MMC Tx interrupts selected */ - if (NewState != DISABLE) - { - /* Enable the selected ETHERNET MMC interrupts */ - ETH->MMCTIMR &=(~(uint32_t)ETH_MMC_IT); - } - else - { - /* Disable the selected ETHERNET MMC interrupts */ - ETH->MMCTIMR |= ETH_MMC_IT; - } - } -} - -/** - * @brief Checks whether the specified ETHERNET MMC IT is set or not. - * @param ETH_MMC_IT: specifies the ETHERNET MMC interrupt. - * This parameter can be one of the following values: - * @arg ETH_MMC_IT_TxFCGC: When Tx good frame counter reaches half the maximum value - * @arg ETH_MMC_IT_TxMCGC: When Tx good multi col counter reaches half the maximum value - * @arg ETH_MMC_IT_TxSCGC: When Tx good single col counter reaches half the maximum value - * @arg ETH_MMC_IT_RxUGFC: When Rx good unicast frames counter reaches half the maximum value - * @arg ETH_MMC_IT_RxAEC : When Rx alignment error counter reaches half the maximum value - * @arg ETH_MMC_IT_RxCEC : When Rx crc error counter reaches half the maximum value - * @retval : The value of ETHERNET MMC IT (SET or RESET). - */ -ITStatus ETH_GetMMCITStatus(uint32_t ETH_MMC_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_MMC_GET_IT(ETH_MMC_IT)); - - if ((ETH_MMC_IT & (uint32_t)0x10000000) != (uint32_t)RESET) - { - /* ETHERNET MMC Rx interrupts selected */ - /* Check if the ETHERNET MMC Rx selected interrupt is enabled and occured */ - if ((((ETH->MMCRIR & ETH_MMC_IT) != (uint32_t)RESET)) && ((ETH->MMCRIMR & ETH_MMC_IT) != (uint32_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - else - { - /* ETHERNET MMC Tx interrupts selected */ - /* Check if the ETHERNET MMC Tx selected interrupt is enabled and occured */ - if ((((ETH->MMCTIR & ETH_MMC_IT) != (uint32_t)RESET)) && ((ETH->MMCRIMR & ETH_MMC_IT) != (uint32_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - - return bitstatus; -} - -/** - * @brief Get the specified ETHERNET MMC register value. - * @param ETH_MMCReg: specifies the ETHERNET MMC register. - * This parameter can be one of the following values: - * @arg ETH_MMCCR : MMC CR register - * @arg ETH_MMCRIR : MMC RIR register - * @arg ETH_MMCTIR : MMC TIR register - * @arg ETH_MMCRIMR : MMC RIMR register - * @arg ETH_MMCTIMR : MMC TIMR register - * @arg ETH_MMCTGFSCCR : MMC TGFSCCR register - * @arg ETH_MMCTGFMSCCR: MMC TGFMSCCR register - * @arg ETH_MMCTGFCR : MMC TGFCR register - * @arg ETH_MMCRFCECR : MMC RFCECR register - * @arg ETH_MMCRFAECR : MMC RFAECR register - * @arg ETH_MMCRGUFCR : MMC RGUFCRregister - * @retval : The value of ETHERNET MMC Register value. - */ -uint32_t ETH_GetMMCRegister(uint32_t ETH_MMCReg) -{ - /* Check the parameters */ - assert_param(IS_ETH_MMC_REGISTER(ETH_MMCReg)); - - /* Return the selected register value */ - return (*(__IO uint32_t *)(ETH_MAC_BASE + ETH_MMCReg)); -} -/*--------------------------------- PTP ------------------------------------*/ - -/** - * @brief Updated the PTP block for fine correction with the Time Stamp - * Addend register value. - * @param None - * @retval : None - */ -void ETH_EnablePTPTimeStampAddend(void) -{ - /* Enable the PTP block update with the Time Stamp Addend register value */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSARU; -} - -/** - * @brief Enable the PTP Time Stamp interrupt trigger - * @param None - * @retval : None - */ -void ETH_EnablePTPTimeStampInterruptTrigger(void) -{ - /* Enable the PTP target time interrupt */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSITE; -} - -/** - * @brief Updated the PTP system time with the Time Stamp Update register - * value. - * @param None - * @retval : None - */ -void ETH_EnablePTPTimeStampUpdate(void) -{ - /* Enable the PTP system time update with the Time Stamp Update register value */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSSTU; -} - -/** - * @brief Initialize the PTP Time Stamp - * @param None - * @retval : None - */ -void ETH_InitializePTPTimeStamp(void) -{ - /* Initialize the PTP Time Stamp */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSSTI; -} - -/** - * @brief Selects the PTP Update method - * @param UpdateMethod: the PTP Update method - * This parameter can be one of the following values: - * @arg ETH_PTP_FineUpdate : Fine Update method - * @arg ETH_PTP_CoarseUpdate : Coarse Update method - * @retval : None - */ -void ETH_PTPUpdateMethodConfig(uint32_t UpdateMethod) -{ - /* Check the parameters */ - assert_param(IS_ETH_PTP_UPDATE(UpdateMethod)); - - if (UpdateMethod != ETH_PTP_CoarseUpdate) - { - /* Enable the PTP Fine Update method */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSFCU; - } - else - { - /* Disable the PTP Coarse Update method */ - ETH->PTPTSCR &= (~(uint32_t)ETH_PTPTSCR_TSFCU); - } -} - -/** - * @brief Enables or disables the PTP time stamp for transmit and receive frames. - * @param NewState: new state of the PTP time stamp for transmit and receive frames - * This parameter can be: ENABLE or DISABLE. - * @retval : None - */ -void ETH_PTPTimeStampCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the PTP time stamp for transmit and receive frames */ - ETH->PTPTSCR |= ETH_PTPTSCR_TSE; - } - else - { - /* Disable the PTP time stamp for transmit and receive frames */ - ETH->PTPTSCR &= (~(uint32_t)ETH_PTPTSCR_TSE); - } -} - -/** - * @brief Checks whether the specified ETHERNET PTP flag is set or not. - * @param ETH_PTP_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg ETH_PTP_FLAG_TSARU : Addend Register Update - * @arg ETH_PTP_FLAG_TSITE : Time Stamp Interrupt Trigger Enable - * @arg ETH_PTP_FLAG_TSSTU : Time Stamp Update - * @arg ETH_PTP_FLAG_TSSTI : Time Stamp Initialize - * @retval : The new state of ETHERNET PTP Flag (SET or RESET). - */ -FlagStatus ETH_GetPTPFlagStatus(uint32_t ETH_PTP_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_ETH_PTP_GET_FLAG(ETH_PTP_FLAG)); - - if ((ETH->PTPTSCR & ETH_PTP_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Sets the system time Sub-Second Increment value. - * @param SubSecondValue: specifies the PTP Sub-Second Increment Register value. - * @retval : None - */ -void ETH_SetPTPSubSecondIncrement(uint32_t SubSecondValue) -{ - /* Check the parameters */ - assert_param(IS_ETH_PTP_SUBSECOND_INCREMENT(SubSecondValue)); - /* Set the PTP Sub-Second Increment Register */ - ETH->PTPSSIR = SubSecondValue; -} - -/** - * @brief Sets the Time Stamp update sign and values. - * @param Sign: specifies the PTP Time update value sign. - * This parameter can be one of the following values: - * @arg ETH_PTP_PositiveTime : positive time value. - * @arg ETH_PTP_NegativeTime : negative time value. - * @param SecondValue: specifies the PTP Time update second value. - * @param SubSecondValue: specifies the PTP Time update sub-second value. - * this is a 31 bit value. bit32 correspond to the sign. - * @retval : None - */ -void ETH_SetPTPTimeStampUpdate(uint32_t Sign, uint32_t SecondValue, uint32_t SubSecondValue) -{ - /* Check the parameters */ - assert_param(IS_ETH_PTP_TIME_SIGN(Sign)); - assert_param(IS_ETH_PTP_TIME_STAMP_UPDATE_SUBSECOND(SubSecondValue)); - /* Set the PTP Time Update High Register */ - ETH->PTPTSHUR = SecondValue; - - /* Set the PTP Time Update Low Register with sign */ - ETH->PTPTSLUR = Sign | SubSecondValue; -} - -/** - * @brief Sets the Time Stamp Addend value. - * @param Value: specifies the PTP Time Stamp Addend Register value. - * @retval : None - */ -void ETH_SetPTPTimeStampAddend(uint32_t Value) -{ - /* Set the PTP Time Stamp Addend Register */ - ETH->PTPTSAR = Value; -} - -/** - * @brief Sets the Target Time registers values. - * @param HighValue: specifies the PTP Target Time High Register value. - * @param LowValue: specifies the PTP Target Time Low Register value. - * @retval : None - */ -void ETH_SetPTPTargetTime(uint32_t HighValue, uint32_t LowValue) -{ - /* Set the PTP Target Time High Register */ - ETH->PTPTTHR = HighValue; - /* Set the PTP Target Time Low Register */ - ETH->PTPTTLR = LowValue; -} - -/** - * @brief Get the specified ETHERNET PTP register value. - * @param ETH_PTPReg: specifies the ETHERNET PTP register. - * This parameter can be one of the following values: - * @arg ETH_PTPTSCR : Sub-Second Increment Register - * @arg ETH_PTPSSIR : Sub-Second Increment Register - * @arg ETH_PTPTSHR : Time Stamp High Register - * @arg ETH_PTPTSLR : Time Stamp Low Register - * @arg ETH_PTPTSHUR : Time Stamp High Update Register - * @arg ETH_PTPTSLUR : Time Stamp Low Update Register - * @arg ETH_PTPTSAR : Time Stamp Addend Register - * @arg ETH_PTPTTHR : Target Time High Register - * @arg ETH_PTPTTLR : Target Time Low Register - * @retval : The value of ETHERNET PTP Register value. - */ -uint32_t ETH_GetPTPRegister(uint32_t ETH_PTPReg) -{ - /* Check the parameters */ - assert_param(IS_ETH_PTP_REGISTER(ETH_PTPReg)); - - /* Return the selected register value */ - return (*(__IO uint32_t *)(ETH_MAC_BASE + ETH_PTPReg)); -} - -/** - * @brief Initializes the DMA Tx descriptors in chain mode with PTP. - * @param DMATxDescTab: Pointer on the first Tx desc list - * @param DMAPTPTxDescTab: Pointer on the first PTP Tx desc list - * @param TxBuff: Pointer on the first TxBuffer list - * @param TxBuffCount: Number of the used Tx desc in the list - * @retval : None - */ -void ETH_DMAPTPTxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, ETH_DMADESCTypeDef *DMAPTPTxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMATxDesc; - - /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */ - DMATxDescToSet = DMATxDescTab; - DMAPTPTxDescToSet = DMAPTPTxDescTab; - /* Fill each DMATxDesc descriptor with the right values */ - for(i=0; i < TxBuffCount; i++) - { - /* Get the pointer on the ith member of the Tx Desc list */ - DMATxDesc = DMATxDescTab+i; - /* Set Second Address Chained bit and enable PTP */ - DMATxDesc->Status = ETH_DMATxDesc_TCH | ETH_DMATxDesc_TTSE; - - /* Set Buffer1 address pointer */ - DMATxDesc->Buffer1Addr =(uint32_t)(&TxBuff[i*ETH_MAX_PACKET_SIZE]); - - /* Initialize the next descriptor with the Next Desciptor Polling Enable */ - if(i < (TxBuffCount-1)) - { - /* Set next descriptor address register with next descriptor base address */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t)(DMATxDescTab+i+1); - } - else - { - /* For last descriptor, set next descriptor address register equal to the first descriptor base address */ - DMATxDesc->Buffer2NextDescAddr = (uint32_t) DMATxDescTab; - } - /* make DMAPTPTxDescTab points to the same addresses as DMATxDescTab */ - (&DMAPTPTxDescTab[i])->Buffer1Addr = DMATxDesc->Buffer1Addr; - (&DMAPTPTxDescTab[i])->Buffer2NextDescAddr = DMATxDesc->Buffer2NextDescAddr; - } - /* Store on the last DMAPTPTxDescTab desc status record the first list address */ - (&DMAPTPTxDescTab[i-1])->Status = (uint32_t) DMAPTPTxDescTab; - - /* Set Transmit Desciptor List Address Register */ - ETH->DMATDLAR = (uint32_t) DMATxDescTab; -} - -/** - * @brief Initializes the DMA Rx descriptors in chain mode. - * @param DMARxDescTab: Pointer on the first Rx desc list - * @param DMAPTPRxDescTab: Pointer on the first PTP Rx desc list - * @param RxBuff: Pointer on the first RxBuffer list - * @param RxBuffCount: Number of the used Rx desc in the list - * @retval : None - */ -void ETH_DMAPTPRxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, ETH_DMADESCTypeDef *DMAPTPRxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount) -{ - uint32_t i = 0; - ETH_DMADESCTypeDef *DMARxDesc; - - /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */ - DMARxDescToGet = DMARxDescTab; - DMAPTPRxDescToGet = DMAPTPRxDescTab; - /* Fill each DMARxDesc descriptor with the right values */ - for(i=0; i < RxBuffCount; i++) - { - /* Get the pointer on the ith member of the Rx Desc list */ - DMARxDesc = DMARxDescTab+i; - /* Set Own bit of the Rx descriptor Status */ - DMARxDesc->Status = ETH_DMARxDesc_OWN; - - /* Set Buffer1 size and Second Address Chained bit */ - DMARxDesc->ControlBufferSize = ETH_DMARxDesc_RCH | (uint32_t)ETH_MAX_PACKET_SIZE; - /* Set Buffer1 address pointer */ - DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff[i*ETH_MAX_PACKET_SIZE]); - - /* Initialize the next descriptor with the Next Desciptor Polling Enable */ - if(i < (RxBuffCount-1)) - { - /* Set next descriptor address register with next descriptor base address */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab+i+1); - } - else - { - /* For last descriptor, set next descriptor address register equal to the first descriptor base address */ - DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab); - } - /* Make DMAPTPRxDescTab points to the same addresses as DMARxDescTab */ - (&DMAPTPRxDescTab[i])->Buffer1Addr = DMARxDesc->Buffer1Addr; - (&DMAPTPRxDescTab[i])->Buffer2NextDescAddr = DMARxDesc->Buffer2NextDescAddr; - } - /* Store on the last DMAPTPRxDescTab desc status record the first list address */ - (&DMAPTPRxDescTab[i-1])->Status = (uint32_t) DMAPTPRxDescTab; - - /* Set Receive Desciptor List Address Register */ - ETH->DMARDLAR = (uint32_t) DMARxDescTab; -} - -/** - * @brief Transmits a packet, from application buffer, pointed by ppkt with - * Time Stamp values. - * @param ppkt: pointer to application packet buffer to transmit. - * @param FrameLength: Tx Packet size. - * @param PTPTxTab: Pointer on the first PTP Tx table to store Time stamp values. - * @retval : ETH_ERROR: in case of Tx desc owned by DMA - * ETH_SUCCESS: for correct transmission - */ -uint32_t ETH_HandlePTPTxPkt(uint8_t *ppkt, uint16_t FrameLength, uint32_t *PTPTxTab) -{ - uint32_t offset = 0, timeout = 0; - /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */ - if((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (uint32_t)RESET) - { - /* Return ERROR: OWN bit set */ - return ETH_ERROR; - } - /* Copy the frame to be sent into memory pointed by the current ETHERNET DMA Tx descriptor */ - for(offset=0; offsetBuffer1Addr) + offset)) = (*(ppkt + offset)); - } - /* Setting the Frame Length: bits[12:0] */ - DMATxDescToSet->ControlBufferSize = (FrameLength & (uint32_t)0x1FFF); - /* Setting the last segment and first segment bits (in this case a frame is transmitted in one descriptor) */ - DMATxDescToSet->Status |= ETH_DMATxDesc_LS | ETH_DMATxDesc_FS; - /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMATxDescToSet->Status |= ETH_DMATxDesc_OWN; - /* When Tx Buffer unavailable flag is set: clear it and resume transmission */ - if ((ETH->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET) - { - /* Clear TBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_TBUS; - /* Resume DMA transmission*/ - ETH->DMATPDR = 0; - } - /* Wait for ETH_DMATxDesc_TTSS flag to be set */ - do - { - timeout++; - } while (!(DMATxDescToSet->Status & ETH_DMATxDesc_TTSS) && (timeout < 0xFFFF)); - /* Return ERROR in case of timeout */ - if(timeout == PHY_READ_TO) - { - return ETH_ERROR; - } - /* Clear the DMATxDescToSet status register TTSS flag */ - DMATxDescToSet->Status &= ~ETH_DMATxDesc_TTSS; - *PTPTxTab++ = DMATxDescToSet->Buffer1Addr; - *PTPTxTab = DMATxDescToSet->Buffer2NextDescAddr; - /* Update the ENET DMA current descriptor */ - /* Chained Mode */ - if((DMATxDescToSet->Status & ETH_DMATxDesc_TCH) != (uint32_t)RESET) - { - /* Selects the next DMA Tx descriptor list for next buffer read */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) (DMAPTPTxDescToSet->Buffer2NextDescAddr); - if(DMAPTPTxDescToSet->Status != 0) - { - DMAPTPTxDescToSet = (ETH_DMADESCTypeDef*) (DMAPTPTxDescToSet->Status); - } - else - { - DMAPTPTxDescToSet++; - } - } - else /* Ring Mode */ - { - if((DMATxDescToSet->Status & ETH_DMATxDesc_TER) != (uint32_t)RESET) - { - /* Selects the next DMA Tx descriptor list for next buffer read: this will - be the first Tx descriptor in this case */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) (ETH->DMATDLAR); - DMAPTPTxDescToSet = (ETH_DMADESCTypeDef*) (ETH->DMATDLAR); - } - else - { - /* Selects the next DMA Tx descriptor list for next buffer read */ - DMATxDescToSet = (ETH_DMADESCTypeDef*) ((uint32_t)DMATxDescToSet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - DMAPTPTxDescToSet = (ETH_DMADESCTypeDef*) ((uint32_t)DMAPTPTxDescToSet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } - /* Return SUCCESS */ - return ETH_SUCCESS; -} - -/** - * @brief Receives a packet and copies it to memory pointed by ppkt with - * Time Stamp values. - * @param ppkt: pointer to application packet receive buffer. - * @param PTPRxTab: Pointer on the first PTP Rx table to store Time stamp values. - * @retval : ETH_ERROR: if there is error in reception - * framelength: received packet size if packet reception is correct - */ -uint32_t ETH_HandlePTPRxPkt(uint8_t *ppkt, uint32_t *PTPRxTab) -{ - uint32_t offset = 0, framelength = 0; - /* Check if the descriptor is owned by the ENET or CPU */ - if((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) != (uint32_t)RESET) - { - /* Return error: OWN bit set */ - return ETH_ERROR; - } - if(((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) && - ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)) - { - /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */ - framelength = ((DMARxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARxDesc_FrameLengthShift) - 4; - /* Copy the received frame into buffer from memory pointed by the current ETHERNET DMA Rx descriptor */ - for(offset=0; offsetBuffer1Addr) + offset)); - } - } - else - { - /* Return ERROR */ - framelength = ETH_ERROR; - } - /* When Rx Buffer unavailable flag is set: clear it and resume reception */ - if ((ETH->DMASR & ETH_DMASR_RBUS) != (uint32_t)RESET) - { - /* Clear RBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_RBUS; - /* Resume DMA reception */ - ETH->DMARPDR = 0; - } - *PTPRxTab++ = DMARxDescToGet->Buffer1Addr; - *PTPRxTab = DMARxDescToGet->Buffer2NextDescAddr; - /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */ - DMARxDescToGet->Status |= ETH_DMARxDesc_OWN; - /* Update the ETHERNET DMA global Rx descriptor with next Rx decriptor */ - /* Chained Mode */ - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET) - { - /* Selects the next DMA Rx descriptor list for next buffer read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMAPTPRxDescToGet->Buffer2NextDescAddr); - if(DMAPTPRxDescToGet->Status != 0) - { - DMAPTPRxDescToGet = (ETH_DMADESCTypeDef*) (DMAPTPRxDescToGet->Status); - } - else - { - DMAPTPRxDescToGet++; - } - } - else /* Ring Mode */ - { - if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET) - { - /* Selects the first DMA Rx descriptor for next buffer to read: last Rx descriptor was used */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR); - } - else - { - /* Selects the next DMA Rx descriptor list for next buffer to read */ - DMARxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMARxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2)); - } - } - /* Return Frame Length/ERROR */ - return (framelength); -} -/** - * @} - */ - -/** - * @} - */ - -/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf deleted file mode 100644 index c8feab483c7aee07b235b93666803151e052e8c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46999 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 QQc9AHn2Sr@P=oA$0ObL?h5!Hn diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h deleted file mode 100644 index 082a18e7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h +++ /dev/null @@ -1,7155 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief CMSIS Cortex-M4 Device Peripheral Access Layer Header File. - * This file contains all the peripheral register's definitions, bits - * definitions and memory mapping for STM32F4xx 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 peripheral’s drivers in application code(i.e. - * code will be based on direct access to peripheral’s 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 peripheral’s registers hardware - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f4xx - * @{ - */ - -#ifndef __STM32F4xx_H -#define __STM32F4xx_H - -#ifdef __cplusplus - extern "C" { -#endif /* __cplusplus */ - -/** @addtogroup Library_configuration_section - * @{ - */ - -/* Uncomment the line below according to the target STM32 device used in your - application - */ - -#if !defined (STM32F4XX) && !defined (STM32F40XX) && !defined (STM32F427X) - /* #define STM32F40XX */ /*!< STM32F40xx/41xx Devices */ - /* #define STM32F427X */ /*!< STM32F427x/437x 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. - */ - -#if !defined (STM32F4XX) && !defined (STM32F40XX) && !defined (STM32F427X) - #error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.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 /* USE_STDPERIPH_DRIVER */ - -/** - * @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) - #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */ -#endif /* HSE_STARTUP_TIMEOUT */ - -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief STM32F4XX Standard Peripherals Library version number V1.1.0 - */ -#define __STM32F4XX_STDPERIPH_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __STM32F4XX_STDPERIPH_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ -#define __STM32F4XX_STDPERIPH_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ -#define __STM32F4XX_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F4XX_STDPERIPH_VERSION ((__STM32F4XX_STDPERIPH_VERSION_MAIN << 24)\ - |(__STM32F4XX_STDPERIPH_VERSION_SUB1 << 16)\ - |(__STM32F4XX_STDPERIPH_VERSION_SUB2 << 8)\ - |(__STM32F4XX_STDPERIPH_VERSION_RC)) - -/** - * @} - */ - -/** @addtogroup Configuration_section_for_CMSIS - * @{ - */ - -/** - * @brief Configuration of the Cortex-M4 Processor and Core Peripherals - */ -#define __CM4_REV 0x0001 /*!< Core revision r0p1 */ -#define __MPU_PRESENT 1 /*!< STM32F4XX provides an MPU */ -#define __NVIC_PRIO_BITS 4 /*!< STM32F4XX uses 4 Bits for the Priority Levels */ -#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ -#define __FPU_PRESENT 1 /*!< FPU present */ - -/** - * @brief STM32F4XX Interrupt Number Definition, according to the selected device - * in @ref Library_configuration_section - */ -typedef enum IRQn -{ -/****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ -/****** STM32 specific Interrupt Numbers **********************************************************************/ - WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ - PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ - TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */ - RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */ - FLASH_IRQn = 4, /*!< FLASH global Interrupt */ - RCC_IRQn = 5, /*!< RCC global Interrupt */ - EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ - EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ - EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ - EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ - EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ - DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */ - DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */ - DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */ - DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */ - DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */ - DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */ - DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */ - ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */ - CAN1_TX_IRQn = 19, /*!< CAN1 TX Interrupt */ - CAN1_RX0_IRQn = 20, /*!< CAN1 RX0 Interrupt */ - 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 */ - RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */ - OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */ - 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 */ - DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 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_DAC_IRQn = 54, /*!< TIM6 global and DAC1&2 underrun error interrupts */ - TIM7_IRQn = 55, /*!< TIM7 global interrupt */ - DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt */ - DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt */ - DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt */ - DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt */ - DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt */ - 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 */ - DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt */ - DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt */ - DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt */ - USART6_IRQn = 71, /*!< USART6 global interrupt */ - I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */ - I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */ - OTG_HS_EP1_OUT_IRQn = 74, /*!< USB OTG HS End Point 1 Out global interrupt */ - OTG_HS_EP1_IN_IRQn = 75, /*!< USB OTG HS End Point 1 In global interrupt */ - OTG_HS_WKUP_IRQn = 76, /*!< USB OTG HS Wakeup through EXTI interrupt */ - OTG_HS_IRQn = 77, /*!< USB OTG HS global interrupt */ - DCMI_IRQn = 78, /*!< DCMI global interrupt */ - CRYP_IRQn = 79, /*!< CRYP crypto global interrupt */ - HASH_RNG_IRQn = 80, /*!< Hash and Rng global interrupt */ - -#ifdef STM32F40XX - FPU_IRQn = 81 /*!< FPU global interrupt */ -#endif /* STM32F40XX */ - -#ifdef STM32F427X - FPU_IRQn = 81, /*!< FPU global interrupt */ - UART7_IRQn = 82, /*!< UART7 global interrupt */ - UART8_IRQn = 83, /*!< UART8 global interrupt */ - SPI4_IRQn = 84, /*!< SPI4 global Interrupt */ - SPI5_IRQn = 85, /*!< SPI5 global Interrupt */ - SPI6_IRQn = 86 /*!< SPI6 global Interrupt */ -#endif /* STM32F427X */ - -} IRQn_Type; - -/** - * @} - */ - -#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */ -#include "system_stm32f4xx.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; - -/** - * @} - */ - -/** @addtogroup Peripheral_registers_structures - * @{ - */ - -/** - * @brief Analog to Digital Converter - */ - -typedef struct -{ - __IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */ - __IO uint32_t CR1; /*!< ADC control register 1, Address offset: 0x04 */ - __IO uint32_t CR2; /*!< ADC control register 2, Address offset: 0x08 */ - __IO uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x0C */ - __IO uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x10 */ - __IO uint32_t JOFR1; /*!< ADC injected channel data offset register 1, Address offset: 0x14 */ - __IO uint32_t JOFR2; /*!< ADC injected channel data offset register 2, Address offset: 0x18 */ - __IO uint32_t JOFR3; /*!< ADC injected channel data offset register 3, Address offset: 0x1C */ - __IO uint32_t JOFR4; /*!< ADC injected channel data offset register 4, Address offset: 0x20 */ - __IO uint32_t HTR; /*!< ADC watchdog higher threshold register, Address offset: 0x24 */ - __IO uint32_t LTR; /*!< ADC watchdog lower threshold register, Address offset: 0x28 */ - __IO uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x2C */ - __IO uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x30 */ - __IO uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x34 */ - __IO uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x38*/ - __IO uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x3C */ - __IO uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x40 */ - __IO uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x44 */ - __IO uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x48 */ - __IO uint32_t DR; /*!< ADC regular data register, Address offset: 0x4C */ -} ADC_TypeDef; - -typedef struct -{ - __IO uint32_t CSR; /*!< ADC Common status register, Address offset: ADC1 base address + 0x300 */ - __IO uint32_t CCR; /*!< ADC common control register, Address offset: ADC1 base address + 0x304 */ - __IO uint32_t CDR; /*!< ADC common regular data register for dual - AND triple modes, Address offset: ADC1 base address + 0x308 */ -} ADC_Common_TypeDef; - - -/** - * @brief Controller Area Network TxMailBox - */ - -typedef struct -{ - __IO uint32_t TIR; /*!< CAN TX mailbox identifier register */ - __IO uint32_t TDTR; /*!< CAN mailbox data length control and time stamp register */ - __IO uint32_t TDLR; /*!< CAN mailbox data low register */ - __IO uint32_t TDHR; /*!< CAN mailbox data high register */ -} CAN_TxMailBox_TypeDef; - -/** - * @brief Controller Area Network FIFOMailBox - */ - -typedef struct -{ - __IO uint32_t RIR; /*!< CAN receive FIFO mailbox identifier register */ - __IO uint32_t RDTR; /*!< CAN receive FIFO mailbox data length control and time stamp register */ - __IO uint32_t RDLR; /*!< CAN receive FIFO mailbox data low register */ - __IO uint32_t RDHR; /*!< CAN receive FIFO mailbox data high register */ -} CAN_FIFOMailBox_TypeDef; - -/** - * @brief Controller Area Network FilterRegister - */ - -typedef struct -{ - __IO uint32_t FR1; /*!< CAN Filter bank register 1 */ - __IO uint32_t FR2; /*!< CAN Filter bank register 1 */ -} CAN_FilterRegister_TypeDef; - -/** - * @brief Controller Area Network - */ - -typedef struct -{ - __IO uint32_t MCR; /*!< CAN master control register, Address offset: 0x00 */ - __IO uint32_t MSR; /*!< CAN master status register, Address offset: 0x04 */ - __IO uint32_t TSR; /*!< CAN transmit status register, Address offset: 0x08 */ - __IO uint32_t RF0R; /*!< CAN receive FIFO 0 register, Address offset: 0x0C */ - __IO uint32_t RF1R; /*!< CAN receive FIFO 1 register, Address offset: 0x10 */ - __IO uint32_t IER; /*!< CAN interrupt enable register, Address offset: 0x14 */ - __IO uint32_t ESR; /*!< CAN error status register, Address offset: 0x18 */ - __IO uint32_t BTR; /*!< CAN bit timing register, Address offset: 0x1C */ - uint32_t RESERVED0[88]; /*!< Reserved, 0x020 - 0x17F */ - CAN_TxMailBox_TypeDef sTxMailBox[3]; /*!< CAN Tx MailBox, Address offset: 0x180 - 0x1AC */ - CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; /*!< CAN FIFO MailBox, Address offset: 0x1B0 - 0x1CC */ - uint32_t RESERVED1[12]; /*!< Reserved, 0x1D0 - 0x1FF */ - __IO uint32_t FMR; /*!< CAN filter master register, Address offset: 0x200 */ - __IO uint32_t FM1R; /*!< CAN filter mode register, Address offset: 0x204 */ - uint32_t RESERVED2; /*!< Reserved, 0x208 */ - __IO uint32_t FS1R; /*!< CAN filter scale register, Address offset: 0x20C */ - uint32_t RESERVED3; /*!< Reserved, 0x210 */ - __IO uint32_t FFA1R; /*!< CAN filter FIFO assignment register, Address offset: 0x214 */ - uint32_t RESERVED4; /*!< Reserved, 0x218 */ - __IO uint32_t FA1R; /*!< CAN filter activation register, Address offset: 0x21C */ - uint32_t RESERVED5[8]; /*!< Reserved, 0x220-0x23F */ - CAN_FilterRegister_TypeDef sFilterRegister[28]; /*!< CAN Filter Register, Address offset: 0x240-0x31C */ -} CAN_TypeDef; - -/** - * @brief CRC calculation unit - */ - -typedef struct -{ - __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ - __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ - uint8_t RESERVED0; /*!< Reserved, 0x05 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ -} CRC_TypeDef; - -/** - * @brief Digital to Analog Converter - */ - -typedef struct -{ - __IO uint32_t CR; /*!< DAC control register, Address offset: 0x00 */ - __IO uint32_t SWTRIGR; /*!< DAC software trigger register, Address offset: 0x04 */ - __IO uint32_t DHR12R1; /*!< DAC channel1 12-bit right-aligned data holding register, Address offset: 0x08 */ - __IO uint32_t DHR12L1; /*!< DAC channel1 12-bit left aligned data holding register, Address offset: 0x0C */ - __IO uint32_t DHR8R1; /*!< DAC channel1 8-bit right aligned data holding register, Address offset: 0x10 */ - __IO uint32_t DHR12R2; /*!< DAC channel2 12-bit right aligned data holding register, Address offset: 0x14 */ - __IO uint32_t DHR12L2; /*!< DAC channel2 12-bit left aligned data holding register, Address offset: 0x18 */ - __IO uint32_t DHR8R2; /*!< DAC channel2 8-bit right-aligned data holding register, Address offset: 0x1C */ - __IO uint32_t DHR12RD; /*!< Dual DAC 12-bit right-aligned data holding register, Address offset: 0x20 */ - __IO uint32_t DHR12LD; /*!< DUAL DAC 12-bit left aligned data holding register, Address offset: 0x24 */ - __IO uint32_t DHR8RD; /*!< DUAL DAC 8-bit right aligned data holding register, Address offset: 0x28 */ - __IO uint32_t DOR1; /*!< DAC channel1 data output register, Address offset: 0x2C */ - __IO uint32_t DOR2; /*!< DAC channel2 data output register, Address offset: 0x30 */ - __IO uint32_t SR; /*!< DAC status register, Address offset: 0x34 */ -} DAC_TypeDef; - -/** - * @brief Debug MCU - */ - -typedef struct -{ - __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ - __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ - __IO uint32_t APB1FZ; /*!< Debug MCU APB1 freeze register, Address offset: 0x08 */ - __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x0C */ -}DBGMCU_TypeDef; - -/** - * @brief DCMI - */ - -typedef struct -{ - __IO uint32_t CR; /*!< DCMI control register 1, Address offset: 0x00 */ - __IO uint32_t SR; /*!< DCMI status register, Address offset: 0x04 */ - __IO uint32_t RISR; /*!< DCMI raw interrupt status register, Address offset: 0x08 */ - __IO uint32_t IER; /*!< DCMI interrupt enable register, Address offset: 0x0C */ - __IO uint32_t MISR; /*!< DCMI masked interrupt status register, Address offset: 0x10 */ - __IO uint32_t ICR; /*!< DCMI interrupt clear register, Address offset: 0x14 */ - __IO uint32_t ESCR; /*!< DCMI embedded synchronization code register, Address offset: 0x18 */ - __IO uint32_t ESUR; /*!< DCMI embedded synchronization unmask register, Address offset: 0x1C */ - __IO uint32_t CWSTRTR; /*!< DCMI crop window start, Address offset: 0x20 */ - __IO uint32_t CWSIZER; /*!< DCMI crop window size, Address offset: 0x24 */ - __IO uint32_t DR; /*!< DCMI data register, Address offset: 0x28 */ -} DCMI_TypeDef; - -/** - * @brief DMA Controller - */ - -typedef struct -{ - __IO uint32_t CR; /*!< DMA stream x configuration register */ - __IO uint32_t NDTR; /*!< DMA stream x number of data register */ - __IO uint32_t PAR; /*!< DMA stream x peripheral address register */ - __IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */ - __IO uint32_t M1AR; /*!< DMA stream x memory 1 address register */ - __IO uint32_t FCR; /*!< DMA stream x FIFO control register */ -} DMA_Stream_TypeDef; - -typedef struct -{ - __IO uint32_t LISR; /*!< DMA low interrupt status register, Address offset: 0x00 */ - __IO uint32_t HISR; /*!< DMA high interrupt status register, Address offset: 0x04 */ - __IO uint32_t LIFCR; /*!< DMA low interrupt flag clear register, Address offset: 0x08 */ - __IO uint32_t HIFCR; /*!< DMA high interrupt flag clear register, Address offset: 0x0C */ -} DMA_TypeDef; - -/** - * @brief 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; - __IO uint32_t RESERVED8; - __IO uint32_t PTPTSSR; - uint32_t RESERVED9[565]; - __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; - __IO uint32_t DMARSWTR; - uint32_t RESERVED10[8]; - __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; /*!< EXTI Interrupt mask register, Address offset: 0x00 */ - __IO uint32_t EMR; /*!< EXTI Event mask register, Address offset: 0x04 */ - __IO uint32_t RTSR; /*!< EXTI Rising trigger selection register, Address offset: 0x08 */ - __IO uint32_t FTSR; /*!< EXTI Falling trigger selection register, Address offset: 0x0C */ - __IO uint32_t SWIER; /*!< EXTI Software interrupt event register, Address offset: 0x10 */ - __IO uint32_t PR; /*!< EXTI Pending register, Address offset: 0x14 */ -} EXTI_TypeDef; - -/** - * @brief FLASH Registers - */ - -typedef struct -{ - __IO uint32_t ACR; /*!< FLASH access control register, Address offset: 0x00 */ - __IO uint32_t KEYR; /*!< FLASH key register, Address offset: 0x04 */ - __IO uint32_t OPTKEYR; /*!< FLASH option key register, Address offset: 0x08 */ - __IO uint32_t SR; /*!< FLASH status register, Address offset: 0x0C */ - __IO uint32_t CR; /*!< FLASH control register, Address offset: 0x10 */ - __IO uint32_t OPTCR; /*!< FLASH option control register , Address offset: 0x14 */ - __IO uint32_t OPTCR1; /*!< FLASH option control register 1, Address offset: 0x18 */ -} FLASH_TypeDef; - -/** - * @brief Flexible Static Memory Controller - */ - -typedef struct -{ - __IO uint32_t BTCR[8]; /*!< NOR/PSRAM chip-select control register(BCR) and chip-select timing register(BTR), Address offset: 0x00-1C */ -} FSMC_Bank1_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank1E - */ - -typedef struct -{ - __IO uint32_t BWTR[7]; /*!< NOR/PSRAM write timing registers, Address offset: 0x104-0x11C */ -} FSMC_Bank1E_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank2 - */ - -typedef struct -{ - __IO uint32_t PCR2; /*!< NAND Flash control register 2, Address offset: 0x60 */ - __IO uint32_t SR2; /*!< NAND Flash FIFO status and interrupt register 2, Address offset: 0x64 */ - __IO uint32_t PMEM2; /*!< NAND Flash Common memory space timing register 2, Address offset: 0x68 */ - __IO uint32_t PATT2; /*!< NAND Flash Attribute memory space timing register 2, Address offset: 0x6C */ - uint32_t RESERVED0; /*!< Reserved, 0x70 */ - __IO uint32_t ECCR2; /*!< NAND Flash ECC result registers 2, Address offset: 0x74 */ -} FSMC_Bank2_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank3 - */ - -typedef struct -{ - __IO uint32_t PCR3; /*!< NAND Flash control register 3, Address offset: 0x80 */ - __IO uint32_t SR3; /*!< NAND Flash FIFO status and interrupt register 3, Address offset: 0x84 */ - __IO uint32_t PMEM3; /*!< NAND Flash Common memory space timing register 3, Address offset: 0x88 */ - __IO uint32_t PATT3; /*!< NAND Flash Attribute memory space timing register 3, Address offset: 0x8C */ - uint32_t RESERVED0; /*!< Reserved, 0x90 */ - __IO uint32_t ECCR3; /*!< NAND Flash ECC result registers 3, Address offset: 0x94 */ -} FSMC_Bank3_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank4 - */ - -typedef struct -{ - __IO uint32_t PCR4; /*!< PC Card control register 4, Address offset: 0xA0 */ - __IO uint32_t SR4; /*!< PC Card FIFO status and interrupt register 4, Address offset: 0xA4 */ - __IO uint32_t PMEM4; /*!< PC Card Common memory space timing register 4, Address offset: 0xA8 */ - __IO uint32_t PATT4; /*!< PC Card Attribute memory space timing register 4, Address offset: 0xAC */ - __IO uint32_t PIO4; /*!< PC Card I/O space timing register 4, Address offset: 0xB0 */ -} FSMC_Bank4_TypeDef; - -/** - * @brief General Purpose I/O - */ - -typedef struct -{ - __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */ - __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */ - __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */ - __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */ - __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */ - __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */ - __IO uint16_t BSRRL; /*!< GPIO port bit set/reset low register, Address offset: 0x18 */ - __IO uint16_t BSRRH; /*!< GPIO port bit set/reset high register, Address offset: 0x1A */ - __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */ - __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ -} GPIO_TypeDef; - -/** - * @brief System configuration controller - */ - -typedef struct -{ - __IO uint32_t MEMRMP; /*!< SYSCFG memory remap register, Address offset: 0x00 */ - __IO uint32_t PMC; /*!< SYSCFG peripheral mode configuration register, Address offset: 0x04 */ - __IO uint32_t EXTICR[4]; /*!< SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */ - uint32_t RESERVED[2]; /*!< Reserved, 0x18-0x1C */ - __IO uint32_t CMPCR; /*!< SYSCFG Compensation cell control register, Address offset: 0x20 */ -} SYSCFG_TypeDef; - -/** - * @brief Inter-integrated Circuit Interface - */ - -typedef struct -{ - __IO uint16_t CR1; /*!< I2C Control register 1, Address offset: 0x00 */ - uint16_t RESERVED0; /*!< Reserved, 0x02 */ - __IO uint16_t CR2; /*!< I2C Control register 2, Address offset: 0x04 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint16_t OAR1; /*!< I2C Own address register 1, Address offset: 0x08 */ - uint16_t RESERVED2; /*!< Reserved, 0x0A */ - __IO uint16_t OAR2; /*!< I2C Own address register 2, Address offset: 0x0C */ - uint16_t RESERVED3; /*!< Reserved, 0x0E */ - __IO uint16_t DR; /*!< I2C Data register, Address offset: 0x10 */ - uint16_t RESERVED4; /*!< Reserved, 0x12 */ - __IO uint16_t SR1; /*!< I2C Status register 1, Address offset: 0x14 */ - uint16_t RESERVED5; /*!< Reserved, 0x16 */ - __IO uint16_t SR2; /*!< I2C Status register 2, Address offset: 0x18 */ - uint16_t RESERVED6; /*!< Reserved, 0x1A */ - __IO uint16_t CCR; /*!< I2C Clock control register, Address offset: 0x1C */ - uint16_t RESERVED7; /*!< Reserved, 0x1E */ - __IO uint16_t TRISE; /*!< I2C TRISE register, Address offset: 0x20 */ - uint16_t RESERVED8; /*!< Reserved, 0x22 */ - __IO uint16_t FLTR; /*!< I2C FLTR register, Address offset: 0x24 */ - uint16_t RESERVED9; /*!< Reserved, 0x26 */ -} I2C_TypeDef; - -/** - * @brief Independent WATCHDOG - */ - -typedef struct -{ - __IO uint32_t KR; /*!< IWDG Key register, Address offset: 0x00 */ - __IO uint32_t PR; /*!< IWDG Prescaler register, Address offset: 0x04 */ - __IO uint32_t RLR; /*!< IWDG Reload register, Address offset: 0x08 */ - __IO uint32_t SR; /*!< IWDG Status register, Address offset: 0x0C */ -} IWDG_TypeDef; - -/** - * @brief Power Control - */ - -typedef struct -{ - __IO uint32_t CR; /*!< PWR power control register, Address offset: 0x00 */ - __IO uint32_t CSR; /*!< PWR power control/status register, Address offset: 0x04 */ -} PWR_TypeDef; - -/** - * @brief Reset and Clock Control - */ - -typedef struct -{ - __IO uint32_t CR; /*!< RCC clock control register, Address offset: 0x00 */ - __IO uint32_t PLLCFGR; /*!< RCC PLL configuration register, Address offset: 0x04 */ - __IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x08 */ - __IO uint32_t CIR; /*!< RCC clock interrupt register, Address offset: 0x0C */ - __IO uint32_t AHB1RSTR; /*!< RCC AHB1 peripheral reset register, Address offset: 0x10 */ - __IO uint32_t AHB2RSTR; /*!< RCC AHB2 peripheral reset register, Address offset: 0x14 */ - __IO uint32_t AHB3RSTR; /*!< RCC AHB3 peripheral reset register, Address offset: 0x18 */ - uint32_t RESERVED0; /*!< Reserved, 0x1C */ - __IO uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x20 */ - __IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x24 */ - uint32_t RESERVED1[2]; /*!< Reserved, 0x28-0x2C */ - __IO uint32_t AHB1ENR; /*!< RCC AHB1 peripheral clock register, Address offset: 0x30 */ - __IO uint32_t AHB2ENR; /*!< RCC AHB2 peripheral clock register, Address offset: 0x34 */ - __IO uint32_t AHB3ENR; /*!< RCC AHB3 peripheral clock register, Address offset: 0x38 */ - uint32_t RESERVED2; /*!< Reserved, 0x3C */ - __IO uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x40 */ - __IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x44 */ - uint32_t RESERVED3[2]; /*!< Reserved, 0x48-0x4C */ - __IO uint32_t AHB1LPENR; /*!< RCC AHB1 peripheral clock enable in low power mode register, Address offset: 0x50 */ - __IO uint32_t AHB2LPENR; /*!< RCC AHB2 peripheral clock enable in low power mode register, Address offset: 0x54 */ - __IO uint32_t AHB3LPENR; /*!< RCC AHB3 peripheral clock enable in low power mode register, Address offset: 0x58 */ - uint32_t RESERVED4; /*!< Reserved, 0x5C */ - __IO uint32_t APB1LPENR; /*!< RCC APB1 peripheral clock enable in low power mode register, Address offset: 0x60 */ - __IO uint32_t APB2LPENR; /*!< RCC APB2 peripheral clock enable in low power mode register, Address offset: 0x64 */ - uint32_t RESERVED5[2]; /*!< Reserved, 0x68-0x6C */ - __IO uint32_t BDCR; /*!< RCC Backup domain control register, Address offset: 0x70 */ - __IO uint32_t CSR; /*!< RCC clock control & status register, Address offset: 0x74 */ - uint32_t RESERVED6[2]; /*!< Reserved, 0x78-0x7C */ - __IO uint32_t SSCGR; /*!< RCC spread spectrum clock generation register, Address offset: 0x80 */ - __IO uint32_t PLLI2SCFGR; /*!< RCC PLLI2S configuration register, Address offset: 0x84 */ - -#ifdef STM32F427X - uint32_t RESERVED7; /*!< Reserved, 0x88 */ - __IO uint32_t DCKCFGR; /*!< RCC Dedicated Clocks configuration register, Address offset: 0x8C */ -#endif /* STM32F427X */ - -} RCC_TypeDef; - -/** - * @brief Real-Time Clock - */ - -typedef struct -{ - __IO uint32_t TR; /*!< RTC time register, Address offset: 0x00 */ - __IO uint32_t DR; /*!< RTC date register, Address offset: 0x04 */ - __IO uint32_t CR; /*!< RTC control register, Address offset: 0x08 */ - __IO uint32_t ISR; /*!< RTC initialization and status register, Address offset: 0x0C */ - __IO uint32_t PRER; /*!< RTC prescaler register, Address offset: 0x10 */ - __IO uint32_t WUTR; /*!< RTC wakeup timer register, Address offset: 0x14 */ - __IO uint32_t CALIBR; /*!< RTC calibration register, Address offset: 0x18 */ - __IO uint32_t ALRMAR; /*!< RTC alarm A register, Address offset: 0x1C */ - __IO uint32_t ALRMBR; /*!< RTC alarm B register, Address offset: 0x20 */ - __IO uint32_t WPR; /*!< RTC write protection register, Address offset: 0x24 */ - __IO uint32_t SSR; /*!< RTC sub second register, Address offset: 0x28 */ - __IO uint32_t SHIFTR; /*!< RTC shift control register, Address offset: 0x2C */ - __IO uint32_t TSTR; /*!< RTC time stamp time register, Address offset: 0x30 */ - __IO uint32_t TSDR; /*!< RTC time stamp date register, Address offset: 0x34 */ - __IO uint32_t TSSSR; /*!< RTC time-stamp sub second register, Address offset: 0x38 */ - __IO uint32_t CALR; /*!< RTC calibration register, Address offset: 0x3C */ - __IO uint32_t TAFCR; /*!< RTC tamper and alternate function configuration register, Address offset: 0x40 */ - __IO uint32_t ALRMASSR;/*!< RTC alarm A sub second register, Address offset: 0x44 */ - __IO uint32_t ALRMBSSR;/*!< RTC alarm B sub second register, Address offset: 0x48 */ - uint32_t RESERVED7; /*!< Reserved, 0x4C */ - __IO uint32_t BKP0R; /*!< RTC backup register 1, Address offset: 0x50 */ - __IO uint32_t BKP1R; /*!< RTC backup register 1, Address offset: 0x54 */ - __IO uint32_t BKP2R; /*!< RTC backup register 2, Address offset: 0x58 */ - __IO uint32_t BKP3R; /*!< RTC backup register 3, Address offset: 0x5C */ - __IO uint32_t BKP4R; /*!< RTC backup register 4, Address offset: 0x60 */ - __IO uint32_t BKP5R; /*!< RTC backup register 5, Address offset: 0x64 */ - __IO uint32_t BKP6R; /*!< RTC backup register 6, Address offset: 0x68 */ - __IO uint32_t BKP7R; /*!< RTC backup register 7, Address offset: 0x6C */ - __IO uint32_t BKP8R; /*!< RTC backup register 8, Address offset: 0x70 */ - __IO uint32_t BKP9R; /*!< RTC backup register 9, Address offset: 0x74 */ - __IO uint32_t BKP10R; /*!< RTC backup register 10, Address offset: 0x78 */ - __IO uint32_t BKP11R; /*!< RTC backup register 11, Address offset: 0x7C */ - __IO uint32_t BKP12R; /*!< RTC backup register 12, Address offset: 0x80 */ - __IO uint32_t BKP13R; /*!< RTC backup register 13, Address offset: 0x84 */ - __IO uint32_t BKP14R; /*!< RTC backup register 14, Address offset: 0x88 */ - __IO uint32_t BKP15R; /*!< RTC backup register 15, Address offset: 0x8C */ - __IO uint32_t BKP16R; /*!< RTC backup register 16, Address offset: 0x90 */ - __IO uint32_t BKP17R; /*!< RTC backup register 17, Address offset: 0x94 */ - __IO uint32_t BKP18R; /*!< RTC backup register 18, Address offset: 0x98 */ - __IO uint32_t BKP19R; /*!< RTC backup register 19, Address offset: 0x9C */ -} RTC_TypeDef; - -/** - * @brief SD host Interface - */ - -typedef struct -{ - __IO uint32_t POWER; /*!< SDIO power control register, Address offset: 0x00 */ - __IO uint32_t CLKCR; /*!< SDI clock control register, Address offset: 0x04 */ - __IO uint32_t ARG; /*!< SDIO argument register, Address offset: 0x08 */ - __IO uint32_t CMD; /*!< SDIO command register, Address offset: 0x0C */ - __I uint32_t RESPCMD; /*!< SDIO command response register, Address offset: 0x10 */ - __I uint32_t RESP1; /*!< SDIO response 1 register, Address offset: 0x14 */ - __I uint32_t RESP2; /*!< SDIO response 2 register, Address offset: 0x18 */ - __I uint32_t RESP3; /*!< SDIO response 3 register, Address offset: 0x1C */ - __I uint32_t RESP4; /*!< SDIO response 4 register, Address offset: 0x20 */ - __IO uint32_t DTIMER; /*!< SDIO data timer register, Address offset: 0x24 */ - __IO uint32_t DLEN; /*!< SDIO data length register, Address offset: 0x28 */ - __IO uint32_t DCTRL; /*!< SDIO data control register, Address offset: 0x2C */ - __I uint32_t DCOUNT; /*!< SDIO data counter register, Address offset: 0x30 */ - __I uint32_t STA; /*!< SDIO status register, Address offset: 0x34 */ - __IO uint32_t ICR; /*!< SDIO interrupt clear register, Address offset: 0x38 */ - __IO uint32_t MASK; /*!< SDIO mask register, Address offset: 0x3C */ - uint32_t RESERVED0[2]; /*!< Reserved, 0x40-0x44 */ - __I uint32_t FIFOCNT; /*!< SDIO FIFO counter register, Address offset: 0x48 */ - uint32_t RESERVED1[13]; /*!< Reserved, 0x4C-0x7C */ - __IO uint32_t FIFO; /*!< SDIO data FIFO register, Address offset: 0x80 */ -} SDIO_TypeDef; - -/** - * @brief Serial Peripheral Interface - */ - -typedef struct -{ - __IO uint16_t CR1; /*!< SPI control register 1 (not used in I2S mode), Address offset: 0x00 */ - uint16_t RESERVED0; /*!< Reserved, 0x02 */ - __IO uint16_t CR2; /*!< SPI control register 2, Address offset: 0x04 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint16_t SR; /*!< SPI status register, Address offset: 0x08 */ - uint16_t RESERVED2; /*!< Reserved, 0x0A */ - __IO uint16_t DR; /*!< SPI data register, Address offset: 0x0C */ - uint16_t RESERVED3; /*!< Reserved, 0x0E */ - __IO uint16_t CRCPR; /*!< SPI CRC polynomial register (not used in I2S mode), Address offset: 0x10 */ - uint16_t RESERVED4; /*!< Reserved, 0x12 */ - __IO uint16_t RXCRCR; /*!< SPI RX CRC register (not used in I2S mode), Address offset: 0x14 */ - uint16_t RESERVED5; /*!< Reserved, 0x16 */ - __IO uint16_t TXCRCR; /*!< SPI TX CRC register (not used in I2S mode), Address offset: 0x18 */ - uint16_t RESERVED6; /*!< Reserved, 0x1A */ - __IO uint16_t I2SCFGR; /*!< SPI_I2S configuration register, Address offset: 0x1C */ - uint16_t RESERVED7; /*!< Reserved, 0x1E */ - __IO uint16_t I2SPR; /*!< SPI_I2S prescaler register, Address offset: 0x20 */ - uint16_t RESERVED8; /*!< Reserved, 0x22 */ -} SPI_TypeDef; - -/** - * @brief TIM - */ - -typedef struct -{ - __IO uint16_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ - uint16_t RESERVED0; /*!< Reserved, 0x02 */ - __IO uint16_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint16_t SMCR; /*!< TIM slave mode control register, Address offset: 0x08 */ - uint16_t RESERVED2; /*!< Reserved, 0x0A */ - __IO uint16_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ - uint16_t RESERVED3; /*!< Reserved, 0x0E */ - __IO uint16_t SR; /*!< TIM status register, Address offset: 0x10 */ - uint16_t RESERVED4; /*!< Reserved, 0x12 */ - __IO uint16_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ - uint16_t RESERVED5; /*!< Reserved, 0x16 */ - __IO uint16_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ - uint16_t RESERVED6; /*!< Reserved, 0x1A */ - __IO uint16_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ - uint16_t RESERVED7; /*!< Reserved, 0x1E */ - __IO uint16_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ - uint16_t RESERVED8; /*!< Reserved, 0x22 */ - __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ - __IO uint16_t PSC; /*!< TIM prescaler, Address offset: 0x28 */ - uint16_t RESERVED9; /*!< Reserved, 0x2A */ - __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ - __IO uint16_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ - uint16_t RESERVED10; /*!< Reserved, 0x32 */ - __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ - __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ - __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ - __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ - __IO uint16_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ - uint16_t RESERVED11; /*!< Reserved, 0x46 */ - __IO uint16_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ - uint16_t RESERVED12; /*!< Reserved, 0x4A */ - __IO uint16_t DMAR; /*!< TIM DMA address for full transfer, Address offset: 0x4C */ - uint16_t RESERVED13; /*!< Reserved, 0x4E */ - __IO uint16_t OR; /*!< TIM option register, Address offset: 0x50 */ - uint16_t RESERVED14; /*!< Reserved, 0x52 */ -} TIM_TypeDef; - -/** - * @brief Universal Synchronous Asynchronous Receiver Transmitter - */ - -typedef struct -{ - __IO uint16_t SR; /*!< USART Status register, Address offset: 0x00 */ - uint16_t RESERVED0; /*!< Reserved, 0x02 */ - __IO uint16_t DR; /*!< USART Data register, Address offset: 0x04 */ - uint16_t RESERVED1; /*!< Reserved, 0x06 */ - __IO uint16_t BRR; /*!< USART Baud rate register, Address offset: 0x08 */ - uint16_t RESERVED2; /*!< Reserved, 0x0A */ - __IO uint16_t CR1; /*!< USART Control register 1, Address offset: 0x0C */ - uint16_t RESERVED3; /*!< Reserved, 0x0E */ - __IO uint16_t CR2; /*!< USART Control register 2, Address offset: 0x10 */ - uint16_t RESERVED4; /*!< Reserved, 0x12 */ - __IO uint16_t CR3; /*!< USART Control register 3, Address offset: 0x14 */ - uint16_t RESERVED5; /*!< Reserved, 0x16 */ - __IO uint16_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */ - uint16_t RESERVED6; /*!< Reserved, 0x1A */ -} USART_TypeDef; - -/** - * @brief Window WATCHDOG - */ - -typedef struct -{ - __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ - __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ - __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ -} WWDG_TypeDef; - -/** - * @brief Crypto Processor - */ - -typedef struct -{ - __IO uint32_t CR; /*!< CRYP control register, Address offset: 0x00 */ - __IO uint32_t SR; /*!< CRYP status register, Address offset: 0x04 */ - __IO uint32_t DR; /*!< CRYP data input register, Address offset: 0x08 */ - __IO uint32_t DOUT; /*!< CRYP data output register, Address offset: 0x0C */ - __IO uint32_t DMACR; /*!< CRYP DMA control register, Address offset: 0x10 */ - __IO uint32_t IMSCR; /*!< CRYP interrupt mask set/clear register, Address offset: 0x14 */ - __IO uint32_t RISR; /*!< CRYP raw interrupt status register, Address offset: 0x18 */ - __IO uint32_t MISR; /*!< CRYP masked interrupt status register, Address offset: 0x1C */ - __IO uint32_t K0LR; /*!< CRYP key left register 0, Address offset: 0x20 */ - __IO uint32_t K0RR; /*!< CRYP key right register 0, Address offset: 0x24 */ - __IO uint32_t K1LR; /*!< CRYP key left register 1, Address offset: 0x28 */ - __IO uint32_t K1RR; /*!< CRYP key right register 1, Address offset: 0x2C */ - __IO uint32_t K2LR; /*!< CRYP key left register 2, Address offset: 0x30 */ - __IO uint32_t K2RR; /*!< CRYP key right register 2, Address offset: 0x34 */ - __IO uint32_t K3LR; /*!< CRYP key left register 3, Address offset: 0x38 */ - __IO uint32_t K3RR; /*!< CRYP key right register 3, Address offset: 0x3C */ - __IO uint32_t IV0LR; /*!< CRYP initialization vector left-word register 0, Address offset: 0x40 */ - __IO uint32_t IV0RR; /*!< CRYP initialization vector right-word register 0, Address offset: 0x44 */ - __IO uint32_t IV1LR; /*!< CRYP initialization vector left-word register 1, Address offset: 0x48 */ - __IO uint32_t IV1RR; /*!< CRYP initialization vector right-word register 1, Address offset: 0x4C */ - __IO uint32_t CSGCMCCM0R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 0, Address offset: 0x50 */ - __IO uint32_t CSGCMCCM1R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 1, Address offset: 0x54 */ - __IO uint32_t CSGCMCCM2R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 2, Address offset: 0x58 */ - __IO uint32_t CSGCMCCM3R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 3, Address offset: 0x5C */ - __IO uint32_t CSGCMCCM4R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 4, Address offset: 0x60 */ - __IO uint32_t CSGCMCCM5R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 5, Address offset: 0x64 */ - __IO uint32_t CSGCMCCM6R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 6, Address offset: 0x68 */ - __IO uint32_t CSGCMCCM7R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 7, Address offset: 0x6C */ - __IO uint32_t CSGCM0R; /*!< CRYP GCM/GMAC context swap register 0, Address offset: 0x70 */ - __IO uint32_t CSGCM1R; /*!< CRYP GCM/GMAC context swap register 1, Address offset: 0x74 */ - __IO uint32_t CSGCM2R; /*!< CRYP GCM/GMAC context swap register 2, Address offset: 0x78 */ - __IO uint32_t CSGCM3R; /*!< CRYP GCM/GMAC context swap register 3, Address offset: 0x7C */ - __IO uint32_t CSGCM4R; /*!< CRYP GCM/GMAC context swap register 4, Address offset: 0x80 */ - __IO uint32_t CSGCM5R; /*!< CRYP GCM/GMAC context swap register 5, Address offset: 0x84 */ - __IO uint32_t CSGCM6R; /*!< CRYP GCM/GMAC context swap register 6, Address offset: 0x88 */ - __IO uint32_t CSGCM7R; /*!< CRYP GCM/GMAC context swap register 7, Address offset: 0x8C */ -} CRYP_TypeDef; - -/** - * @brief HASH - */ - -typedef struct -{ - __IO uint32_t CR; /*!< HASH control register, Address offset: 0x00 */ - __IO uint32_t DIN; /*!< HASH data input register, Address offset: 0x04 */ - __IO uint32_t STR; /*!< HASH start register, Address offset: 0x08 */ - __IO uint32_t HR[5]; /*!< HASH digest registers, Address offset: 0x0C-0x1C */ - __IO uint32_t IMR; /*!< HASH interrupt enable register, Address offset: 0x20 */ - __IO uint32_t SR; /*!< HASH status register, Address offset: 0x24 */ - uint32_t RESERVED[52]; /*!< Reserved, 0x28-0xF4 */ - __IO uint32_t CSR[54]; /*!< HASH context swap registers, Address offset: 0x0F8-0x1CC */ -} HASH_TypeDef; - -/** - * @brief HASH_DIGEST - */ - -typedef struct -{ - __IO uint32_t HR[8]; /*!< HASH digest registers, Address offset: 0x310-0x32C */ -} HASH_DIGEST_TypeDef; - -/** - * @brief RNG - */ - -typedef struct -{ - __IO uint32_t CR; /*!< RNG control register, Address offset: 0x00 */ - __IO uint32_t SR; /*!< RNG status register, Address offset: 0x04 */ - __IO uint32_t DR; /*!< RNG data register, Address offset: 0x08 */ -} RNG_TypeDef; - -/** - * @} - */ - -/** @addtogroup Peripheral_memory_map - * @{ - */ -#define FLASH_BASE ((uint32_t)0x08000000) /*!< FLASH(up to 1 MB) base address in the alias region */ -#define CCMDATARAM_BASE ((uint32_t)0x10000000) /*!< CCM(core coupled memory) data RAM(64 KB) base address in the alias region */ -#define SRAM1_BASE ((uint32_t)0x20000000) /*!< SRAM1(112 KB) base address in the alias region */ -#define SRAM2_BASE ((uint32_t)0x2001C000) /*!< SRAM2(16 KB) base address in the alias region */ -#define SRAM3_BASE ((uint32_t)0x20020000) /*!< SRAM3(64 KB) base address in the alias region */ -#define PERIPH_BASE ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */ -#define BKPSRAM_BASE ((uint32_t)0x40024000) /*!< Backup SRAM(4 KB) base address in the alias region */ -#define FSMC_R_BASE ((uint32_t)0xA0000000) /*!< FSMC registers base address */ - -#define CCMDATARAM_BB_BASE ((uint32_t)0x12000000) /*!< CCM(core coupled memory) data RAM(64 KB) base address in the bit-band region */ -#define SRAM1_BB_BASE ((uint32_t)0x22000000) /*!< SRAM1(112 KB) base address in the bit-band region */ -#define SRAM2_BB_BASE ((uint32_t)0x2201C000) /*!< SRAM2(16 KB) base address in the bit-band region */ -#define SRAM3_BB_BASE ((uint32_t)0x22020000) /*!< SRAM3(64 KB) base address in the bit-band region */ -#define PERIPH_BB_BASE ((uint32_t)0x42000000) /*!< Peripheral base address in the bit-band region */ -#define BKPSRAM_BB_BASE ((uint32_t)0x42024000) /*!< Backup SRAM(4 KB) base address in the bit-band region */ - -/* Legacy defines */ -#define SRAM_BASE SRAM1_BASE -#define SRAM_BB_BASE SRAM1_BB_BASE - -/*!< Peripheral memory map */ -#define APB1PERIPH_BASE PERIPH_BASE -#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) -#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000) -#define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000) - -/*!< APB1 peripherals */ -#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 I2S2ext_BASE (APB1PERIPH_BASE + 0x3400) -#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) -#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00) -#define I2S3ext_BASE (APB1PERIPH_BASE + 0x4000) -#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 I2C3_BASE (APB1PERIPH_BASE + 0x5C00) -#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) -#define CAN2_BASE (APB1PERIPH_BASE + 0x6800) -#define PWR_BASE (APB1PERIPH_BASE + 0x7000) -#define DAC_BASE (APB1PERIPH_BASE + 0x7400) -#define UART7_BASE (APB1PERIPH_BASE + 0x7800) -#define UART8_BASE (APB1PERIPH_BASE + 0x7C00) - -/*!< APB2 peripherals */ -#define TIM1_BASE (APB2PERIPH_BASE + 0x0000) -#define TIM8_BASE (APB2PERIPH_BASE + 0x0400) -#define USART1_BASE (APB2PERIPH_BASE + 0x1000) -#define USART6_BASE (APB2PERIPH_BASE + 0x1400) -#define ADC1_BASE (APB2PERIPH_BASE + 0x2000) -#define ADC2_BASE (APB2PERIPH_BASE + 0x2100) -#define ADC3_BASE (APB2PERIPH_BASE + 0x2200) -#define ADC_BASE (APB2PERIPH_BASE + 0x2300) -#define SDIO_BASE (APB2PERIPH_BASE + 0x2C00) -#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) -#define SPI4_BASE (APB2PERIPH_BASE + 0x3400) -#define SYSCFG_BASE (APB2PERIPH_BASE + 0x3800) -#define EXTI_BASE (APB2PERIPH_BASE + 0x3C00) -#define TIM9_BASE (APB2PERIPH_BASE + 0x4000) -#define TIM10_BASE (APB2PERIPH_BASE + 0x4400) -#define TIM11_BASE (APB2PERIPH_BASE + 0x4800) -#define SPI5_BASE (APB2PERIPH_BASE + 0x5000) -#define SPI6_BASE (APB2PERIPH_BASE + 0x5400) - -/*!< AHB1 peripherals */ -#define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000) -#define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400) -#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800) -#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00) -#define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000) -#define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400) -#define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800) -#define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00) -#define GPIOI_BASE (AHB1PERIPH_BASE + 0x2000) - -#define CRC_BASE (AHB1PERIPH_BASE + 0x3000) -#define RCC_BASE (AHB1PERIPH_BASE + 0x3800) -#define FLASH_R_BASE (AHB1PERIPH_BASE + 0x3C00) -#define DMA1_BASE (AHB1PERIPH_BASE + 0x6000) -#define DMA1_Stream0_BASE (DMA1_BASE + 0x010) -#define DMA1_Stream1_BASE (DMA1_BASE + 0x028) -#define DMA1_Stream2_BASE (DMA1_BASE + 0x040) -#define DMA1_Stream3_BASE (DMA1_BASE + 0x058) -#define DMA1_Stream4_BASE (DMA1_BASE + 0x070) -#define DMA1_Stream5_BASE (DMA1_BASE + 0x088) -#define DMA1_Stream6_BASE (DMA1_BASE + 0x0A0) -#define DMA1_Stream7_BASE (DMA1_BASE + 0x0B8) -#define DMA2_BASE (AHB1PERIPH_BASE + 0x6400) -#define DMA2_Stream0_BASE (DMA2_BASE + 0x010) -#define DMA2_Stream1_BASE (DMA2_BASE + 0x028) -#define DMA2_Stream2_BASE (DMA2_BASE + 0x040) -#define DMA2_Stream3_BASE (DMA2_BASE + 0x058) -#define DMA2_Stream4_BASE (DMA2_BASE + 0x070) -#define DMA2_Stream5_BASE (DMA2_BASE + 0x088) -#define DMA2_Stream6_BASE (DMA2_BASE + 0x0A0) -#define DMA2_Stream7_BASE (DMA2_BASE + 0x0B8) -#define ETH_BASE (AHB1PERIPH_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) - -/*!< AHB2 peripherals */ -#define DCMI_BASE (AHB2PERIPH_BASE + 0x50000) -#define CRYP_BASE (AHB2PERIPH_BASE + 0x60000) -#define HASH_BASE (AHB2PERIPH_BASE + 0x60400) -#define HASH_DIGEST_BASE (AHB2PERIPH_BASE + 0x60710) -#define RNG_BASE (AHB2PERIPH_BASE + 0x60800) - -/*!< FSMC Bankx registers base address */ -#define FSMC_Bank1_R_BASE (FSMC_R_BASE + 0x0000) -#define FSMC_Bank1E_R_BASE (FSMC_R_BASE + 0x0104) -#define FSMC_Bank2_R_BASE (FSMC_R_BASE + 0x0060) -#define FSMC_Bank3_R_BASE (FSMC_R_BASE + 0x0080) -#define FSMC_Bank4_R_BASE (FSMC_R_BASE + 0x00A0) - -/* Debug MCU registers base address */ -#define DBGMCU_BASE ((uint32_t )0xE0042000) - -/** - * @} - */ - -/** @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 I2S2ext ((SPI_TypeDef *) I2S2ext_BASE) -#define SPI2 ((SPI_TypeDef *) SPI2_BASE) -#define SPI3 ((SPI_TypeDef *) SPI3_BASE) -#define I2S3ext ((SPI_TypeDef *) I2S3ext_BASE) -#define USART2 ((USART_TypeDef *) USART2_BASE) -#define 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 I2C3 ((I2C_TypeDef *) I2C3_BASE) -#define CAN1 ((CAN_TypeDef *) CAN1_BASE) -#define CAN2 ((CAN_TypeDef *) CAN2_BASE) -#define PWR ((PWR_TypeDef *) PWR_BASE) -#define DAC ((DAC_TypeDef *) DAC_BASE) -#define UART7 ((USART_TypeDef *) UART7_BASE) -#define UART8 ((USART_TypeDef *) UART8_BASE) -#define TIM1 ((TIM_TypeDef *) TIM1_BASE) -#define TIM8 ((TIM_TypeDef *) TIM8_BASE) -#define USART1 ((USART_TypeDef *) USART1_BASE) -#define USART6 ((USART_TypeDef *) USART6_BASE) -#define ADC ((ADC_Common_TypeDef *) ADC_BASE) -#define ADC1 ((ADC_TypeDef *) ADC1_BASE) -#define ADC2 ((ADC_TypeDef *) ADC2_BASE) -#define ADC3 ((ADC_TypeDef *) ADC3_BASE) -#define SDIO ((SDIO_TypeDef *) SDIO_BASE) -#define SPI1 ((SPI_TypeDef *) SPI1_BASE) -#define SPI4 ((SPI_TypeDef *) SPI4_BASE) -#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) -#define EXTI ((EXTI_TypeDef *) EXTI_BASE) -#define TIM9 ((TIM_TypeDef *) TIM9_BASE) -#define TIM10 ((TIM_TypeDef *) TIM10_BASE) -#define TIM11 ((TIM_TypeDef *) TIM11_BASE) -#define SPI5 ((SPI_TypeDef *) SPI5_BASE) -#define SPI6 ((SPI_TypeDef *) SPI6_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 GPIOH ((GPIO_TypeDef *) GPIOH_BASE) -#define GPIOI ((GPIO_TypeDef *) GPIOI_BASE) - -#define CRC ((CRC_TypeDef *) CRC_BASE) -#define RCC ((RCC_TypeDef *) RCC_BASE) -#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) -#define DMA1 ((DMA_TypeDef *) DMA1_BASE) -#define DMA1_Stream0 ((DMA_Stream_TypeDef *) DMA1_Stream0_BASE) -#define DMA1_Stream1 ((DMA_Stream_TypeDef *) DMA1_Stream1_BASE) -#define DMA1_Stream2 ((DMA_Stream_TypeDef *) DMA1_Stream2_BASE) -#define DMA1_Stream3 ((DMA_Stream_TypeDef *) DMA1_Stream3_BASE) -#define DMA1_Stream4 ((DMA_Stream_TypeDef *) DMA1_Stream4_BASE) -#define DMA1_Stream5 ((DMA_Stream_TypeDef *) DMA1_Stream5_BASE) -#define DMA1_Stream6 ((DMA_Stream_TypeDef *) DMA1_Stream6_BASE) -#define DMA1_Stream7 ((DMA_Stream_TypeDef *) DMA1_Stream7_BASE) -#define DMA2 ((DMA_TypeDef *) DMA2_BASE) -#define DMA2_Stream0 ((DMA_Stream_TypeDef *) DMA2_Stream0_BASE) -#define DMA2_Stream1 ((DMA_Stream_TypeDef *) DMA2_Stream1_BASE) -#define DMA2_Stream2 ((DMA_Stream_TypeDef *) DMA2_Stream2_BASE) -#define DMA2_Stream3 ((DMA_Stream_TypeDef *) DMA2_Stream3_BASE) -#define DMA2_Stream4 ((DMA_Stream_TypeDef *) DMA2_Stream4_BASE) -#define DMA2_Stream5 ((DMA_Stream_TypeDef *) DMA2_Stream5_BASE) -#define DMA2_Stream6 ((DMA_Stream_TypeDef *) DMA2_Stream6_BASE) -#define DMA2_Stream7 ((DMA_Stream_TypeDef *) DMA2_Stream7_BASE) -#define ETH ((ETH_TypeDef *) ETH_BASE) -#define DCMI ((DCMI_TypeDef *) DCMI_BASE) -#define CRYP ((CRYP_TypeDef *) CRYP_BASE) -#define HASH ((HASH_TypeDef *) HASH_BASE) -#define HASH_DIGEST ((HASH_DIGEST_TypeDef *) HASH_DIGEST_BASE) -#define RNG ((RNG_TypeDef *) RNG_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 */ -/******************************************************************************/ - -/******************************************************************************/ -/* */ -/* Analog to Digital Converter */ -/* */ -/******************************************************************************/ -/******************** Bit definition for ADC_SR register ********************/ -#define ADC_SR_AWD ((uint8_t)0x01) /*!
© COPYRIGHT 2013 STMicroelectronics
- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f4xx_system - * @{ - */ - -/** - * @brief Define to prevent recursive inclusion - */ -#ifndef __SYSTEM_STM32F4XX_H -#define __SYSTEM_STM32F4XX_H - -#ifdef __cplusplus - extern "C" { -#endif - -/** @addtogroup STM32F4xx_System_Includes - * @{ - */ - -/** - * @} - */ - - -/** @addtogroup STM32F4xx_System_Exported_types - * @{ - */ - -extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ - - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Exported_Constants - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Exported_Functions - * @{ - */ - -extern void SystemInit(void); -extern void SystemCoreClockUpdate(void); -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /*__SYSTEM_STM32F4XX_H */ - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Release_Notes.html b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Release_Notes.html deleted file mode 100644 index f9a7a6c6..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Release_Notes.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Release Notes for STM32F4xx CMSIS - - - - - -
-


-

-
- - - - - - -
- - - - - - - - - -
Back to Release page
-

Release -Notes for STM32F4xx CMSIS

-

Copyright 2013 STMicroelectronics

-

-
-

 

- - - - - - -
-

Contents

-
    -
  1. STM32F4xx CMSIS -update History
  2. -
  3. License
  4. -
- -

STM32F4xx CMSIS -update History

- -

V1.1.0 / 11-January-2013

Main -Changes

- -
  • Official release for STM32F427x/437x devices.
  • stm32f4xx.h
    -
    • Update product define: replace "#define STM32F4XX" by "#define -STM32F40XX" for STM32F40x/41x devices
    •  Add new product define: "#define -STM32F427X" for STM32F427x/437x devices.
  • Add new startup files "startup_stm32f427x.s" for -all toolchains
  • rename startup files "startup_stm32f4xx.s" by "startup_stm32f40xx.s" for -all toolchains -
  • system_stm32f4xx.c
    • Prefetch Buffer enabled
    • Add reference to STM32F427x/437x devices and STM324x7I_EVAL board
    • SystemInit_ExtMemCtl() function
      -
      • Add configuration of missing FSMC address and data lines
        -
      • Change memory type to SRAM instead of PSRAM (PSRAM is available only on STM324xG-EVAL RevA) and update timing values

V1.0.2 / 05-March-2012

-

Main -Changes

- -
  • All source files: license disclaimer text update and add link to the License file on ST Internet.

V1.0.1 / 28-December-2011

Main -Changes

-
  • All source files: update disclaimer to add reference to the new license agreement
  • stm32f4xx.h
    • Correct bit definition: RCC_AHB2RSTR_HSAHRST changed to RCC_AHB2RSTR_HASHRST

V1.0.0 / 30-September-2011

Main -Changes

-
  • First official release for STM32F40x/41x devices
  • Add startup file for TASKING toolchain
  • system_stm32f4xx.c: driver's comments update

V1.0.0RC2 / 26-September-2011

Main -Changes

-
  • Official version (V1.0.0) Release Candidate2 for STM32F40x/41x devices
  • stm32f4xx.h
    • Add define for Cortex-M4 revision __CM4_REV
    • Correct RCC_CFGR_PPRE2_DIV16 bit (in RCC_CFGR register) value to 0x0000E000
    • Correct some bits definition to be in line with naming used in the Reference Manual (RM0090)
      • GPIO_OTYPER_IDR_x changed to GPIO_IDR_IDR_x
      • GPIO_OTYPER_ODR_x changed to GPIO_ODR_ODR_x
      • SYSCFG_PMC_MII_RMII changed to SYSCFG_PMC_MII_RMII_SEL
      • RCC_APB2RSTR_SPI1 changed to RCC_APB2RSTR_SPI1RST
      • DBGMCU_APB1_FZ_DBG_IWDEG_STOP changed to DBGMCU_APB1_FZ_DBG_IWDG_STOP
      • PWR_CR_PMODE changed to PWR_CR_VOS
      • PWR_CSR_REGRDY changed to PWR_CSR_VOSRDY
      • Add new define RCC_AHB1ENR_CCMDATARAMEN
      • Add new defines SRAM2_BASE, CCMDATARAM_BASE and BKPSRAM_BASE
    • GPIO_TypeDef structure: in the comment change AFR[2] address mapping to 0x20-0x24 instead of 0x24-0x28
  • system_stm32f4xx.c
    • SystemInit(): add code to enable the FPU
    • SetSysClock(): change PWR_CR_PMODE by PWR_CR_VOS
    • SystemInit_ExtMemCtl(): remove commented values
  • startup (for all compilers)
    • Delete code used to enable the FPU (moved to system_stm32f4xx.c file)
    • File’s header updated

V1.0.0RC1 / 25-August-2011

Main -Changes

-
  • Official version (V1.0.0) Release Candidate1 for STM32F4xx devices
- -
    -
-

License

- - -

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless -required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See -the License for the specific language governing permissions and -limitations under the License.
-
-
-

For -complete documentation on STM32 Microcontrollers -visit www.st.com/STM32

-
-

-
-
-

 

-
- \ No newline at end of file diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Source/system_stm32f4xx.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Source/system_stm32f4xx.c deleted file mode 100644 index c839011c..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Device/ST/STM32F4xx/Source/system_stm32f4xx.c +++ /dev/null @@ -1,562 +0,0 @@ -/** - ****************************************************************************** - * @file system_stm32f4xx.c - * @author MCD Application Team - * @version V1.1.0 - * @date 24-May-2013 - * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. - * This file contains the system clock configuration for STM32F4xx devices, - * and is generated by the clock configuration tool - * stm32f4xx_Clock_Configuration_V1.1.0.xls - * - * 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 - * and Divider factors, AHB/APBx prescalers and Flash settings), - * depending on the configuration made in the clock xls tool. - * This function is called at startup just after reset and - * before branch to main program. This call is made inside - * the "startup_stm32f4xx.s" file. - * - * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used - * by the user application to setup the SysTick - * timer or configure other parameters. - * - * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must - * be called whenever the core clock is changed - * during program execution. - * - * 2. After each device reset the HSI (16 MHz) is used as system clock source. - * Then SystemInit() function is called, in "startup_stm32f4xx.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 25MHz, refer to "HSE_VALUE" define - * in "stm32f4xx.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. - * - * 5. This file configures the system clock as follows: - *============================================================================= - *============================================================================= - * Supported STM32F40xx/41xx/427x/437x devices - *----------------------------------------------------------------------------- - * System Clock source | PLL (HSE) - *----------------------------------------------------------------------------- - * SYSCLK(Hz) | 168000000 - *----------------------------------------------------------------------------- - * HCLK(Hz) | 168000000 - *----------------------------------------------------------------------------- - * AHB Prescaler | 1 - *----------------------------------------------------------------------------- - * APB1 Prescaler | 4 - *----------------------------------------------------------------------------- - * APB2 Prescaler | 2 - *----------------------------------------------------------------------------- - * HSE Frequency(Hz) | 12000000 - *----------------------------------------------------------------------------- - * PLL_M | 12 - *----------------------------------------------------------------------------- - * PLL_N | 336 - *----------------------------------------------------------------------------- - * PLL_P | 2 - *----------------------------------------------------------------------------- - * PLL_Q | 7 - *----------------------------------------------------------------------------- - * PLLI2S_N | NA - *----------------------------------------------------------------------------- - * PLLI2S_R | NA - *----------------------------------------------------------------------------- - * I2S input clock | NA - *----------------------------------------------------------------------------- - * VDD(V) | 3,3 - *----------------------------------------------------------------------------- - * Main regulator output voltage | Scale1 mode - *----------------------------------------------------------------------------- - * Flash Latency(WS) | 5 - *----------------------------------------------------------------------------- - * Prefetch Buffer | OFF - *----------------------------------------------------------------------------- - * Instruction cache | ON - *----------------------------------------------------------------------------- - * Data cache | ON - *----------------------------------------------------------------------------- - * Require 48MHz for USB OTG FS, | Enabled - * SDIO and RNG clock | - *----------------------------------------------------------------------------- - *============================================================================= - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f4xx_system - * @{ - */ - -/** @addtogroup STM32F4xx_System_Private_Includes - * @{ - */ - -#include "stm32f4xx.h" - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Defines - * @{ - */ - -/************************* Miscellaneous Configuration ************************/ -/*!< Uncomment the following line if you need to use external SRAM mounted - on STM324xG_EVAL/STM324x7I_EVAL board as data memory */ -/* #define DATA_IN_ExtSRAM */ - -/*!< Uncomment the following line if you need to relocate your vector Table in - Internal SRAM. */ -/* #define VECT_TAB_SRAM */ -#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ -/******************************************************************************/ - -/************************* PLL Parameters *************************************/ -/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ -#define PLL_M 12 -#define PLL_N 336 - -/* SYSCLK = PLL_VCO / PLL_P */ -#define PLL_P 2 - -/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ -#define PLL_Q 7 - -/******************************************************************************/ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Variables - * @{ - */ - - uint32_t SystemCoreClock = 168000000; - - __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes - * @{ - */ - -static void SetSysClock(void); -#ifdef DATA_IN_ExtSRAM - static void SystemInit_ExtMemCtl(void); -#endif /* DATA_IN_ExtSRAM */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Functions - * @{ - */ - -/** - * @brief Setup the microcontroller system - * Initialize the Embedded Flash Interface, the PLL and update the - * SystemFrequency variable. - * @param None - * @retval None - */ -void SystemInit(void) -{ - /* FPU settings ------------------------------------------------------------*/ - #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ - #endif - /* Reset the RCC clock configuration to the default reset state ------------*/ - /* Set HSION bit */ - RCC->CR |= (uint32_t)0x00000001; - - /* Reset CFGR register */ - RCC->CFGR = 0x00000000; - - /* Reset HSEON, CSSON and PLLON bits */ - RCC->CR &= (uint32_t)0xFEF6FFFF; - - /* Reset PLLCFGR register */ - RCC->PLLCFGR = 0x24003010; - - /* Reset HSEBYP bit */ - RCC->CR &= (uint32_t)0xFFFBFFFF; - - /* Disable all interrupts */ - RCC->CIR = 0x00000000; - -#ifdef DATA_IN_ExtSRAM - SystemInit_ExtMemCtl(); -#endif /* DATA_IN_ExtSRAM */ - - /* Configure the System clock source, PLL Multiplier and Divider factors, - AHB/APBx prescalers and Flash settings ----------------------------------*/ - SetSysClock(); - - /* Configure the Vector Table location add offset address ------------------*/ - /* vector table location is handled by the OpenBLT bootloader */ -#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/divided by the PLL factors. - * - * (*) HSI_VALUE is a constant defined in stm32f4xx.h file (default value - * 16 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * - * (**) HSE_VALUE is a constant defined in stm32f4xx.h file (default value - * 25 MHz), user has to ensure that HSE_VALUE is same as the real - * frequency of the crystal used. Otherwise, this function may - * have wrong result. - * - * - The result of this function could be not correct when using fractional - * value for HSE crystal. - * - * @param None - * @retval None - */ -void SystemCoreClockUpdate(void) -{ - uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFGR & RCC_CFGR_SWS; - - switch (tmp) - { - case 0x00: /* HSI used as system clock source */ - SystemCoreClock = HSI_VALUE; - break; - case 0x04: /* HSE used as system clock source */ - SystemCoreClock = HSE_VALUE; - break; - case 0x08: /* PLL used as system clock source */ - - /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N - SYSCLK = PLL_VCO / PLL_P - */ - pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; - pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; - - if (pllsource != 0) - { - /* HSE used as PLL clock source */ - pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - else - { - /* HSI used as PLL clock source */ - pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - - pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; - SystemCoreClock = pllvco/pllp; - break; - default: - SystemCoreClock = HSI_VALUE; - break; - } - /* Compute HCLK frequency --------------------------------------------------*/ - /* Get HCLK prescaler */ - tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; - /* HCLK frequency */ - SystemCoreClock >>= tmp; -} - -/** - * @brief Configures the System clock source, PLL Multiplier and Divider factors, - * AHB/APBx prescalers and Flash settings - * @Note This function should be called only once the RCC clock configuration - * is reset to the default reset state (done in SystemInit() function). - * @param None - * @retval None - */ -static void SetSysClock(void) -{ -/******************************************************************************/ -/* PLL (clocked by HSE) used as System clock source */ -/******************************************************************************/ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* 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) - { - /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */ - RCC->APB1ENR |= RCC_APB1ENR_PWREN; - PWR->CR |= PWR_CR_VOS; - - /* HCLK = SYSCLK / 1*/ - RCC->CFGR |= RCC_CFGR_HPRE_DIV1; - - /* PCLK2 = HCLK / 2*/ - RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; - - /* PCLK1 = HCLK / 4*/ - RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; - - /* Configure the main PLL */ - RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | - (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); - - /* Enable the main PLL */ - RCC->CR |= RCC_CR_PLLON; - - /* Wait till the main PLL is ready */ - while((RCC->CR & RCC_CR_PLLRDY) == 0) - { - } - - /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ - FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; - - /* Select the main PLL as system clock source */ - RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); - RCC->CFGR |= RCC_CFGR_SW_PLL; - - /* Wait till the main PLL is used as system clock source */ - while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); - { - } - } - 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 */ - } - -} - -/** - * @brief Setup the external memory controller. Called in startup_stm32f4xx.s - * before jump to __main - * @param None - * @retval None - */ -#ifdef DATA_IN_ExtSRAM -/** - * @brief Setup the external memory controller. - * Called in startup_stm32f4xx.s before jump to main. - * This function configures the external SRAM mounted on STM324xG_EVAL/STM324x7I_EVAL board - * This SRAM will be used as program data memory (including heap and stack). - * @param None - * @retval None - */ -void SystemInit_ExtMemCtl(void) -{ -/*-- GPIOs Configuration -----------------------------------------------------*/ -/* - +-------------------+--------------------+------------------+------------------+ - + SRAM pins assignment + - +-------------------+--------------------+------------------+------------------+ - | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | - | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | - | PD4 <-> FSMC_NOE | PE2 <-> FSMC_A23 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | - | PD5 <-> FSMC_NWE | PE3 <-> FSMC_A19 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | - | PD8 <-> FSMC_D13 | PE4 <-> FSMC_A20 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | - | PD9 <-> FSMC_D14 | PE5 <-> FSMC_A21 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | - | PD10 <-> FSMC_D15 | PE6 <-> FSMC_A22 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | - | PD11 <-> FSMC_A16 | PE7 <-> FSMC_D4 | PF13 <-> FSMC_A7 |------------------+ - | PD12 <-> FSMC_A17 | PE8 <-> FSMC_D5 | PF14 <-> FSMC_A8 | - | PD13 <-> FSMC_A18 | PE9 <-> FSMC_D6 | PF15 <-> FSMC_A9 | - | PD14 <-> FSMC_D0 | PE10 <-> FSMC_D7 |------------------+ - | PD15 <-> FSMC_D1 | PE11 <-> FSMC_D8 | - +-------------------| PE12 <-> FSMC_D9 | - | PE13 <-> FSMC_D10 | - | PE14 <-> FSMC_D11 | - | PE15 <-> FSMC_D12 | - +--------------------+ -*/ - /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ - RCC->AHB1ENR |= 0x00000078; - - /* Connect PDx pins to FSMC Alternate function */ - GPIOD->AFR[0] = 0x00cc00cc; - GPIOD->AFR[1] = 0xcccccccc; - /* Configure PDx pins in Alternate function mode */ - GPIOD->MODER = 0xaaaa0a0a; - /* Configure PDx pins speed to 100 MHz */ - GPIOD->OSPEEDR = 0xffff0f0f; - /* Configure PDx pins Output type to push-pull */ - GPIOD->OTYPER = 0x00000000; - /* No pull-up, pull-down for PDx pins */ - GPIOD->PUPDR = 0x00000000; - - /* Connect PEx pins to FSMC Alternate function */ - GPIOE->AFR[0] = 0xcccccccc; - GPIOE->AFR[1] = 0xcccccccc; - /* Configure PEx pins in Alternate function mode */ - GPIOE->MODER = 0xaaaaaaaa; - /* Configure PEx pins speed to 100 MHz */ - GPIOE->OSPEEDR = 0xffffffff; - /* Configure PEx pins Output type to push-pull */ - GPIOE->OTYPER = 0x00000000; - /* No pull-up, pull-down for PEx pins */ - GPIOE->PUPDR = 0x00000000; - - /* Connect PFx pins to FSMC Alternate function */ - GPIOF->AFR[0] = 0x00cccccc; - GPIOF->AFR[1] = 0xcccc0000; - /* Configure PFx pins in Alternate function mode */ - GPIOF->MODER = 0xaa000aaa; - /* Configure PFx pins speed to 100 MHz */ - GPIOF->OSPEEDR = 0xff000fff; - /* Configure PFx pins Output type to push-pull */ - GPIOF->OTYPER = 0x00000000; - /* No pull-up, pull-down for PFx pins */ - GPIOF->PUPDR = 0x00000000; - - /* Connect PGx pins to FSMC Alternate function */ - GPIOG->AFR[0] = 0x00cccccc; - GPIOG->AFR[1] = 0x000000c0; - /* Configure PGx pins in Alternate function mode */ - GPIOG->MODER = 0x00080aaa; - /* Configure PGx pins speed to 100 MHz */ - GPIOG->OSPEEDR = 0x000c0fff; - /* Configure PGx pins Output type to push-pull */ - GPIOG->OTYPER = 0x00000000; - /* No pull-up, pull-down for PGx pins */ - GPIOG->PUPDR = 0x00000000; - -/*-- FSMC Configuration ------------------------------------------------------*/ - /* Enable the FSMC interface clock */ - RCC->AHB3ENR |= 0x00000001; - - /* Configure and enable Bank1_SRAM2 */ - FSMC_Bank1->BTCR[2] = 0x00001011; - FSMC_Bank1->BTCR[3] = 0x00000201; - FSMC_Bank1E->BWTR[2] = 0x0fffffff; -/* - Bank1_SRAM2 is configured as follow: - - p.FSMC_AddressSetupTime = 1; - p.FSMC_AddressHoldTime = 0; - p.FSMC_DataSetupTime = 2; - p.FSMC_BusTurnAroundDuration = 0; - p.FSMC_CLKDivision = 0; - p.FSMC_DataLatency = 0; - p.FSMC_AccessMode = FSMC_AccessMode_A; - - FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; - FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; - FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; - FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; - FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; - FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; - FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; - FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; - FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; - FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; - FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; - FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; - FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; - FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; - FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; -*/ -} -#endif /* DATA_IN_ExtSRAM */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cm4.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cm4.h deleted file mode 100644 index 024302e4..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cm4.h +++ /dev/null @@ -1,1757 +0,0 @@ -/**************************************************************************//** - * @file core_cm4.h - * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File - * @version V3.01 - * @date 22. March 2012 - * - * @note - * Copyright (C) 2009-2012 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#endif - -#ifdef __cplusplus - extern "C" { -#endif - -#ifndef __CORE_CM4_H_GENERIC -#define __CORE_CM4_H_GENERIC - -/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** \ingroup Cortex_M4 - @{ - */ - -/* CMSIS CM4 definitions */ -#define __CM4_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ -#define __CM4_CMSIS_VERSION_SUB (0x01) /*!< [15:0] CMSIS HAL sub version */ -#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16) | \ - __CM4_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ - -#define __CORTEX_M (0x04) /*!< Cortex-M Core */ - - -#if defined ( __CC_ARM ) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - #define __STATIC_INLINE static __inline - -#elif defined ( __ICCARM__ ) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ - #define __STATIC_INLINE static inline - -#elif defined ( __TMS470__ ) - #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ - #define __STATIC_INLINE static inline - -#elif defined ( __GNUC__ ) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - #define __STATIC_INLINE static inline - -#elif defined ( __TASKING__ ) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - #define __STATIC_INLINE static inline - -#endif - -/** __FPU_USED indicates whether an FPU is used or not. For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. -*/ -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __TMS470__ ) - #if defined __TI_VFP_SUPPORT__ - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif -#endif - -#include /* standard types definitions */ -#include /* Core Instruction Access */ -#include /* Core Function Access */ -#include /* Compiler specific SIMD Intrinsics */ - -#endif /* __CORE_CM4_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM4_H_DEPENDANT -#define __CORE_CM4_H_DEPENDANT - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM4_REV - #define __CM4_REV 0x0000 - #warning "__CM4_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0 - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0 - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0 - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#ifdef __cplusplus - #define __I volatile /*!< Defines 'read only' permissions */ -#else - #define __I volatile const /*!< Defines 'read only' permissions */ -#endif -#define __O volatile /*!< Defines 'write only' permissions */ -#define __IO volatile /*!< Defines 'read / write' permissions */ - -/*@} end of group Cortex_M4 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core FPU Register - ******************************************************************************/ -/** \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ -#else - uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ -#endif - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - - -/** \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - - -/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ -#else - uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ -#endif - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - - -/** \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ - uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/*@} end of group CMSIS_CORE */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[24]; - __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[24]; - __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[24]; - __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[24]; - __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[56]; - __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644]; - __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[5]; - __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ -#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ -#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Registers Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* SCB Hard Fault Status Registers Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1]; - __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ - -/* Auxiliary Control Register Definitions */ -#define SCnSCB_ACTLR_DISOOFP_Pos 9 /*!< ACTLR: DISOOFP Position */ -#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ - -#define SCnSCB_ACTLR_DISFPCA_Pos 8 /*!< ACTLR: DISFPCA Position */ -#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ - -#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ -#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ - -#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ -#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ - -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ -#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __O union - { - __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864]; - __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15]; - __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15]; - __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[29]; - __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ - __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ - __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ - uint32_t RESERVED4[43]; - __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[6]; - __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Integration Write Register Definitions */ -#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ -#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ - -/* ITM Integration Read Register Definitions */ -#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ -#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ - -/* ITM Integration Mode Control Register Definitions */ -#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ -#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1]; - __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1]; - __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1]; - __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Mask Register Definitions */ -#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ -#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ -#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ - -#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ -#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ -#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ - -#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ -#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ - -#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ -#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ - -#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ -#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ - -#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ -#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2]; - __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55]; - __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131]; - __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759]; - __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ - __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1]; - __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39]; - __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8]; - __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration ETM Data Register Definitions (FIFO0) */ -#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ -#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ - -#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ -#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ - -#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ -#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ - -#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ -#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ - -#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ - -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ - -/* TPI Integration ITM Data Register Definitions (FIFO1) */ -#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ -#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ - -#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ -#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ - -#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ -#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ - -#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ -#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ - -#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ - -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if (__MPU_PRESENT == 1) -/** \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ - __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ - __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ - __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ - __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ - __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ - __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -/* MPU Type Register */ -#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register */ -#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register */ -#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register */ -#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register */ -#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ -#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ - -#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ -#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ - -#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ -#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ - -#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ -#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ - -#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ -#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ - -#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ -#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ - -#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ -#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ - -#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -#if (__FPU_PRESENT == 1) -/** \ingroup CMSIS_core_register - \defgroup CMSIS_FPU Floating Point Unit (FPU) - \brief Type definitions for the Floating Point Unit (FPU) - @{ - */ - -/** \brief Structure type to access the Floating Point Unit (FPU). - */ -typedef struct -{ - uint32_t RESERVED0[1]; - __IO uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ - __IO uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ - __IO uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ - __I uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ - __I uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ -} FPU_Type; - -/* Floating-Point Context Control Register */ -#define FPU_FPCCR_ASPEN_Pos 31 /*!< FPCCR: ASPEN bit Position */ -#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ - -#define FPU_FPCCR_LSPEN_Pos 30 /*!< FPCCR: LSPEN Position */ -#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ - -#define FPU_FPCCR_MONRDY_Pos 8 /*!< FPCCR: MONRDY Position */ -#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ - -#define FPU_FPCCR_BFRDY_Pos 6 /*!< FPCCR: BFRDY Position */ -#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ - -#define FPU_FPCCR_MMRDY_Pos 5 /*!< FPCCR: MMRDY Position */ -#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ - -#define FPU_FPCCR_HFRDY_Pos 4 /*!< FPCCR: HFRDY Position */ -#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ - -#define FPU_FPCCR_THREAD_Pos 3 /*!< FPCCR: processor mode bit Position */ -#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ - -#define FPU_FPCCR_USER_Pos 1 /*!< FPCCR: privilege level bit Position */ -#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ - -#define FPU_FPCCR_LSPACT_Pos 0 /*!< FPCCR: Lazy state preservation active bit Position */ -#define FPU_FPCCR_LSPACT_Msk (1UL << FPU_FPCCR_LSPACT_Pos) /*!< FPCCR: Lazy state preservation active bit Mask */ - -/* Floating-Point Context Address Register */ -#define FPU_FPCAR_ADDRESS_Pos 3 /*!< FPCAR: ADDRESS bit Position */ -#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ - -/* Floating-Point Default Status Control Register */ -#define FPU_FPDSCR_AHP_Pos 26 /*!< FPDSCR: AHP bit Position */ -#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ - -#define FPU_FPDSCR_DN_Pos 25 /*!< FPDSCR: DN bit Position */ -#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ - -#define FPU_FPDSCR_FZ_Pos 24 /*!< FPDSCR: FZ bit Position */ -#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ - -#define FPU_FPDSCR_RMode_Pos 22 /*!< FPDSCR: RMode bit Position */ -#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ - -/* Media and FP Feature Register 0 */ -#define FPU_MVFR0_FP_rounding_modes_Pos 28 /*!< MVFR0: FP rounding modes bits Position */ -#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ - -#define FPU_MVFR0_Short_vectors_Pos 24 /*!< MVFR0: Short vectors bits Position */ -#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ - -#define FPU_MVFR0_Square_root_Pos 20 /*!< MVFR0: Square root bits Position */ -#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ - -#define FPU_MVFR0_Divide_Pos 16 /*!< MVFR0: Divide bits Position */ -#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ - -#define FPU_MVFR0_FP_excep_trapping_Pos 12 /*!< MVFR0: FP exception trapping bits Position */ -#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ - -#define FPU_MVFR0_Double_precision_Pos 8 /*!< MVFR0: Double-precision bits Position */ -#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ - -#define FPU_MVFR0_Single_precision_Pos 4 /*!< MVFR0: Single-precision bits Position */ -#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ - -#define FPU_MVFR0_A_SIMD_registers_Pos 0 /*!< MVFR0: A_SIMD registers bits Position */ -#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL << FPU_MVFR0_A_SIMD_registers_Pos) /*!< MVFR0: A_SIMD registers bits Mask */ - -/* Media and FP Feature Register 1 */ -#define FPU_MVFR1_FP_fused_MAC_Pos 28 /*!< MVFR1: FP fused MAC bits Position */ -#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ - -#define FPU_MVFR1_FP_HPFP_Pos 24 /*!< MVFR1: FP HPFP bits Position */ -#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ - -#define FPU_MVFR1_D_NaN_mode_Pos 4 /*!< MVFR1: D_NaN mode bits Position */ -#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ - -#define FPU_MVFR1_FtZ_mode_Pos 0 /*!< MVFR1: FtZ mode bits Position */ -#define FPU_MVFR1_FtZ_mode_Msk (0xFUL << FPU_MVFR1_FtZ_mode_Pos) /*!< MVFR1: FtZ mode bits Mask */ - -/*@} end of group CMSIS_FPU */ -#endif - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register */ -#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register */ -#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Cortex-M4 Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ -#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ -#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ -#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ -#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ -#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ -#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -#if (__MPU_PRESENT == 1) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -#if (__FPU_PRESENT == 1) - #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ - #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ -#endif - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -/** \brief Set Priority Grouping - - The function sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ - SCB->AIRCR = reg_value; -} - - -/** \brief Get Priority Grouping - - The function reads the priority grouping field from the NVIC Interrupt Controller. - - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) -{ - return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ -} - - -/** \brief Enable External Interrupt - - The function enables a device-specific interrupt in the NVIC interrupt controller. - - \param [in] IRQn External interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) -{ -/* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */ - NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */ -} - - -/** \brief Disable External Interrupt - - The function disables a device-specific interrupt in the NVIC interrupt controller. - - \param [in] IRQn External interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) -{ - NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ -} - - -/** \brief Get Pending Interrupt - - The function reads the pending register in the NVIC and returns the pending bit - for the specified interrupt. - - \param [in] IRQn Interrupt number. - - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - */ -__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ -} - - -/** \brief Set Pending Interrupt - - The function sets the pending bit of an external interrupt. - - \param [in] IRQn Interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ -} - - -/** \brief Clear Pending Interrupt - - The function clears the pending bit of an external interrupt. - - \param [in] IRQn External interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ -} - - -/** \brief Get Active Interrupt - - The function reads the active register in NVIC and returns the active bit. - - \param [in] IRQn Interrupt number. - - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - */ -__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) -{ - return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ -} - - -/** \brief Set Interrupt Priority - - The function sets the priority of an interrupt. - - \note The priority cannot be set for every core interrupt. - - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - */ -__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if(IRQn < 0) { - SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ - else { - NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ -} - - -/** \brief Get Interrupt Priority - - The function reads the priority of an interrupt. The interrupt - number can be positive to specify an external (device specific) - interrupt, or negative to specify an internal (core) interrupt. - - - \param [in] IRQn Interrupt number. - \return Interrupt Priority. Value is aligned automatically to the implemented - priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) -{ - - if(IRQn < 0) { - return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ - else { - return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ -} - - -/** \brief Encode Priority - - The function encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. - - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - return ( - ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | - ((SubPriority & ((1 << (SubPriorityBits )) - 1))) - ); -} - - -/** \brief Decode Priority - - The function decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. - - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); - *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); -} - - -/** \brief System Reset - - The function initiates a system reset request to reset the MCU. - */ -__STATIC_INLINE void NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - while(1); /* wait until reset */ -} - -/*@} end of CMSIS_Core_NVICFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if (__Vendor_SysTickConfig == 0) - -/** \brief System Tick Configuration - - The function initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - - \param [in] ticks Number of ticks between two interrupts. - - \return 0 Function succeeded. - \return 1 Function failed. - - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if (ticks > 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 Systick Interrupt */ - SysTick->VAL = 0; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** \brief ITM Send Character - - The function transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - - \param [in] ch Character to transmit. - - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ - (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0].u32 == 0); - ITM->PORT[0].u8 = (uint8_t) ch; - } - return (ch); -} - - -/** \brief ITM Receive Character - - The function inputs a character via the external variable \ref ITM_RxBuffer. - - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) { - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** \brief ITM Check Character - - The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) { - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { - return (0); /* no character available */ - } else { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - -#endif /* __CORE_CM4_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ - -#ifdef __cplusplus -} -#endif diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cm4_simd.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cm4_simd.h deleted file mode 100644 index b5140073..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/Include/core_cm4_simd.h +++ /dev/null @@ -1,649 +0,0 @@ -/**************************************************************************//** - * @file core_cm4_simd.h - * @brief CMSIS Cortex-M4 SIMD Header File - * @version V3.01 - * @date 06. March 2012 - * - * @note - * Copyright (C) 2010-2012 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#ifdef __cplusplus - extern "C" { -#endif - -#ifndef __CORE_CM4_SIMD_H -#define __CORE_CM4_SIMD_H - - -/******************************************************************************* - * Hardware Abstraction Layer - ******************************************************************************/ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -#define __SADD8 __sadd8 -#define __QADD8 __qadd8 -#define __SHADD8 __shadd8 -#define __UADD8 __uadd8 -#define __UQADD8 __uqadd8 -#define __UHADD8 __uhadd8 -#define __SSUB8 __ssub8 -#define __QSUB8 __qsub8 -#define __SHSUB8 __shsub8 -#define __USUB8 __usub8 -#define __UQSUB8 __uqsub8 -#define __UHSUB8 __uhsub8 -#define __SADD16 __sadd16 -#define __QADD16 __qadd16 -#define __SHADD16 __shadd16 -#define __UADD16 __uadd16 -#define __UQADD16 __uqadd16 -#define __UHADD16 __uhadd16 -#define __SSUB16 __ssub16 -#define __QSUB16 __qsub16 -#define __SHSUB16 __shsub16 -#define __USUB16 __usub16 -#define __UQSUB16 __uqsub16 -#define __UHSUB16 __uhsub16 -#define __SASX __sasx -#define __QASX __qasx -#define __SHASX __shasx -#define __UASX __uasx -#define __UQASX __uqasx -#define __UHASX __uhasx -#define __SSAX __ssax -#define __QSAX __qsax -#define __SHSAX __shsax -#define __USAX __usax -#define __UQSAX __uqsax -#define __UHSAX __uhsax -#define __USAD8 __usad8 -#define __USADA8 __usada8 -#define __SSAT16 __ssat16 -#define __USAT16 __usat16 -#define __UXTB16 __uxtb16 -#define __UXTAB16 __uxtab16 -#define __SXTB16 __sxtb16 -#define __SXTAB16 __sxtab16 -#define __SMUAD __smuad -#define __SMUADX __smuadx -#define __SMLAD __smlad -#define __SMLADX __smladx -#define __SMLALD __smlald -#define __SMLALDX __smlaldx -#define __SMUSD __smusd -#define __SMUSDX __smusdx -#define __SMLSD __smlsd -#define __SMLSDX __smlsdx -#define __SMLSLD __smlsld -#define __SMLSLDX __smlsldx -#define __SEL __sel -#define __QADD __qadd -#define __QSUB __qsub - -#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) - -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) - - -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - - -#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -#include - -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - - -#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ -/* TI CCS specific functions */ - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -#include - -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - - -#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#define __SSAT16(ARG1,ARG2) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - -#define __USAT16(ARG1,ARG2) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#define __SMLALD(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ - __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ - (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ - }) - -#define __SMLALDX(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ - __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ - (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ - }) - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#define __SMLSLD(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ - __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ - (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ - }) - -#define __SMLSLDX(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ - __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ - (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ - }) - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SEL (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -#define __PKHBT(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ - __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ - __RES; \ - }) - -#define __PKHTB(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ - if (ARG3 == 0) \ - __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ - else \ - __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ - __RES; \ - }) - -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - - -#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ -/* TASKING carm specific functions */ - - -/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ -/* not yet supported */ -/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ - - -#endif - -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CORE_CM4_SIMD_H */ - -#ifdef __cplusplus -} -#endif diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/Release_Notes.html b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/Release_Notes.html deleted file mode 100644 index 79cb078b..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/Release_Notes.html +++ /dev/null @@ -1,978 +0,0 @@ - - - - - - - - -Release Notes for STM32F4xx Standard Peripherals Drivers - - - - - -
- -

 

- -
- - - - - -
- - - - - - - -
-

Back to Release page

-
-

Release Notes for STM32F4xx Standard - Peripherals  Drivers

-

Copyright - 2013 STMicroelectronics

-

-
-

 

- - - - -
-

Contents

-
    -
  1. STM32F4xx Standard Peripherals Drivers - update History
  2. -
  3. License
  4. -
-

STM32F4xx - Standard Peripherals Drivers  update History

V1.1.0 / 11-Janury-2013

Main -Changes

- -
  • Official release for STM32F427x/437x devices.
  • stm32f4xx_cryp.c/.h
    • Update CRYP_Init() function : add the support for new algorithms (GCM/CCM).
    • Add new function : CRYP_PhaseConfig() used for new AES-GCM and AES-CCM algorithms.
    • CRYP_InitTypeDef structure : update all structure fields from uint16_t to uint32_t and update all driver functions  parameters and the correpondant define to be declared with uint32_t type.
    • Replace the "CRYP_ContextSave->CR_bits9to2" by "CRYP_ContextSave->CurrentConfig".
  • stm32f4xx_flash.c/.h
    • Update FLASH sectors numbers "FLASH_Sector_x" with x = 0..23.
    • Update FLASH_EraseAllSectors() function to support mass erase for STM32F427x/437x devices.
  • stm32f4xx_gpio.c/.h
    • Add Alternate functions for new peripherals: SPI4, SPI5, SPI6, UART7, UART8.
    • Update all functions header -comment.
  • stm32f4xx_hash.c/.h
    • Update HASH_GetDigest() function : add the HASH_DIGEST structure.
    • Add new function HASH_AutoStartDigest().
    • Update HASH_MsgDigest structure: to support SHA-224 and SHA-256 modes.
    •  Update HASH_Context structure.
    • Update some define using bit definitions already declared in stm32f4xx.h.
  • stm32f'xx_i2c.c/.h
    • Add new functions:
      • I2C_AnalogFilterCmd(): enable/disable the analog I2C filters.
      • I2C_DigitalFilterConfig(): configure the digital I2C filters.
  • stm32f4xx_pwr.c/.h -
    • Add new argument "PWR_Regulator_Voltage_Scale3" -  to PWR_MainRegulatorModeConfig() function to be in line with - Reference Manual description.
  • stm32f4xx_rcc.c/.h
    • Add new definitions for new -peripherals: SPI4, SPI5, SPI6, SAI1, UART7, UART8.
    • Add a new parameter in RCC_PLLI2SConfig() function : PLLI2SQ to specifies the division factor for SAI1 clock.
    • Add RCC_TIMCLKPresConfig() function : TIMER Prescaler selection. 
  • stm32l1xx_spi.c/.h
    • Update to support SPI4, SPI5, SPI6. -
    • Update all functions header -comment.
  • stm32l1xx_usart.c/.h
    • Update to support UART7 and -UART8. -
    • Update all functions header -comment.

V1.0.2 / 05-March-2012

-

Main -Changes

- -
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • stm32f4xx_dcmi.c
    • DCMI_GetFlagStatus() function: fix test condition on RISR register, use if (dcmireg == 0x00) instead of if (dcmireg == 0x01)
  • stm32f4xx_pwr.c
    • PWR_PVDLevelConfig() -function: remove value of the voltage threshold corresponding to each -PVD detection level, user should refer to the electrical -characteristics of the STM32 device datasheet to have the correct -value

V1.0.1 / 28-December-2011

Main -Changes

-
  • All source files: update disclaimer to add reference to the new license agreement
  • stm32f4xx_rtc.c: 
    • In “RTC_FLAGS_MASK” define: add RTC_FLAG_RECALPF and RTC_FLAG_SHPF
    • RTC_DeInit() function: add reset of the following registers: SHIFTRCALRALRMASSR and ALRMBSSR
    • RTC_SetTime() and RTC_SetDate() functions: add test condition on BYPSHAD flag before to test RSF flag (when Bypass mode is enabled, the RSF bit is never set).

V1.0.0 / 30-September-2011

Main -Changes

-
  • First official release for STM32F40x/41x devices
  • stm32f4xx_rtc.c: remove useless code from RTC_GetDate() function
  • stm32f4xx_rcc.c, stm32f4xx_spi.c, stm32f4xx_wwdg.c and stm32f4xx_syscfg.c: driver's comments update

V1.0.0RC2 / 26-September-2011

Main -Changes

-
  • Official version (V1.0.0) Release Candidate1 for STM32F40x/STM32F41x devices
  • stm32f4xx_usart.h/.c
    • Update procedure to check on overrun error interrupt pending bit, defines for the following flag are added:
      • USART_IT_ORE_RX: this flag is set if overrun error interrupt occurs and RXNEIE bit is set
      • USART_IT_ORE_ER: this flag is set if overrun error interrupt occurs and EIE bit is set
  • stm32f4xx_tim.c
    • TIM_UpdateRequestConfig(): correct function header's comment 
    • TIM_ICInit(): add assert macros to test if the passed TIM parameter has channel 2, 3 or 4
  • stm32f4xx_pwr.h/.c
    • Rename PWR_FLAG_REGRDY constant to PWR_CSR_REGRDY
    • Rename PWR_FLAG_VOSRDY constant to PWR_CSR_VOSRDY
    • Rename PWR_HighPerformanceModeCmd(FunctionalState NewState) function to PWR_MainRegulatorModeConfig(uint32_t PWR_Regulator_Voltage)
  • stm32f4xx_rcc.h/.c
    • RCC_AHB1PeriphClockCmd(): add new constant RCC_AHB1Periph_CCMDATARAMEN as value for RCC_AHB1Periph parameter
  • stm32f4xx_spi.h
    • IS_I2S_EXT_PERIPH(): add check on I2S3ext peripheral

V1.0.0RC1 / 25-August-2011

Main -Changes

-
  • Official version (V1.0.0) Release Candidate1 for STM32F4xx devices
-

License

- - -

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless -required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See -the License for the specific language governing permissions and -limitations under the License.
-
-
-
-

For - complete documentation on STM32 - Microcontrollers visit www.st.com/STM32

-
-

-
- -
- -

 

- -
- - \ No newline at end of file diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/misc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/misc.h deleted file mode 100644 index dec96ec2..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/misc.h +++ /dev/null @@ -1,178 +0,0 @@ -/** - ****************************************************************************** - * @file misc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the miscellaneous - * firmware library functions (add-on to CMSIS functions). - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MISC_H -#define __MISC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 an enumerator of @ref IRQn_Type - enumeration (For the complete STM32 Devices IRQ Channels - list, please refer to stm32f4xx.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 MISC_NVIC_Priority_Table - A lower priority value indicates a higher priority */ - - 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 MISC_NVIC_Priority_Table - A lower priority value indicates a higher priority */ - - 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup MISC_Exported_Constants - * @{ - */ - -/** @defgroup MISC_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 MISC_System_Low_Power - * @{ - */ - -#define NVIC_LP_SEVONPEND ((uint8_t)0x10) -#define NVIC_LP_SLEEPDEEP ((uint8_t)0x04) -#define NVIC_LP_SLEEPONEXIT ((uint8_t)0x02) -#define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \ - ((LP) == NVIC_LP_SLEEPDEEP) || \ - ((LP) == NVIC_LP_SLEEPONEXIT)) -/** - * @} - */ - -/** @defgroup MISC_Preemption_Priority_Group - * @{ - */ - -#define 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 MISC_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)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_adc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_adc.h deleted file mode 100644 index bfeb4eca..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_adc.h +++ /dev/null @@ -1,649 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_adc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the ADC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_ADC_H -#define __STM32F4xx_ADC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup ADC - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief ADC Init structure definition - */ -typedef struct -{ - uint32_t ADC_Resolution; /*!< Configures the ADC resolution dual mode. - This parameter can be a value of @ref ADC_resolution */ - 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_ExternalTrigConvEdge; /*!< Select the external trigger edge and - enable the trigger of a regular group. - This parameter can be a value of - @ref ADC_external_trigger_edge_for_regular_channels_conversion */ - uint32_t ADC_ExternalTrigConv; /*!< Select the external event used to trigger - the start of conversion of a regular group. - This parameter can be a value of - @ref ADC_extrenal_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_NbrOfConversion; /*!< Specifies the number of ADC conversions - that will be done using the sequencer for - regular channel group. - This parameter must range from 1 to 16. */ -}ADC_InitTypeDef; - -/** - * @brief ADC Common Init structure definition - */ -typedef struct -{ - uint32_t ADC_Mode; /*!< Configures the ADC to operate in - independent or multi mode. - This parameter can be a value of @ref ADC_Common_mode */ - uint32_t ADC_Prescaler; /*!< Select the frequency of the clock - to the ADC. The clock is common for all the ADCs. - This parameter can be a value of @ref ADC_Prescaler */ - uint32_t ADC_DMAAccessMode; /*!< Configures the Direct memory access - mode for multi ADC mode. - This parameter can be a value of - @ref ADC_Direct_memory_access_mode_for_multi_mode */ - uint32_t ADC_TwoSamplingDelay; /*!< Configures the Delay between 2 sampling phases. - This parameter can be a value of - @ref ADC_delay_between_2_sampling_phases */ - -}ADC_CommonInitTypeDef; - - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup ADC_Exported_Constants - * @{ - */ -#define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC1) || \ - ((PERIPH) == ADC2) || \ - ((PERIPH) == ADC3)) - -/** @defgroup ADC_Common_mode - * @{ - */ -#define ADC_Mode_Independent ((uint32_t)0x00000000) -#define ADC_DualMode_RegSimult_InjecSimult ((uint32_t)0x00000001) -#define ADC_DualMode_RegSimult_AlterTrig ((uint32_t)0x00000002) -#define ADC_DualMode_InjecSimult ((uint32_t)0x00000005) -#define ADC_DualMode_RegSimult ((uint32_t)0x00000006) -#define ADC_DualMode_Interl ((uint32_t)0x00000007) -#define ADC_DualMode_AlterTrig ((uint32_t)0x00000009) -#define ADC_TripleMode_RegSimult_InjecSimult ((uint32_t)0x00000011) -#define ADC_TripleMode_RegSimult_AlterTrig ((uint32_t)0x00000012) -#define ADC_TripleMode_InjecSimult ((uint32_t)0x00000015) -#define ADC_TripleMode_RegSimult ((uint32_t)0x00000016) -#define ADC_TripleMode_Interl ((uint32_t)0x00000017) -#define ADC_TripleMode_AlterTrig ((uint32_t)0x00000019) -#define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Independent) || \ - ((MODE) == ADC_DualMode_RegSimult_InjecSimult) || \ - ((MODE) == ADC_DualMode_RegSimult_AlterTrig) || \ - ((MODE) == ADC_DualMode_InjecSimult) || \ - ((MODE) == ADC_DualMode_RegSimult) || \ - ((MODE) == ADC_DualMode_Interl) || \ - ((MODE) == ADC_DualMode_AlterTrig) || \ - ((MODE) == ADC_TripleMode_RegSimult_InjecSimult) || \ - ((MODE) == ADC_TripleMode_RegSimult_AlterTrig) || \ - ((MODE) == ADC_TripleMode_InjecSimult) || \ - ((MODE) == ADC_TripleMode_RegSimult) || \ - ((MODE) == ADC_TripleMode_Interl) || \ - ((MODE) == ADC_TripleMode_AlterTrig)) -/** - * @} - */ - - -/** @defgroup ADC_Prescaler - * @{ - */ -#define ADC_Prescaler_Div2 ((uint32_t)0x00000000) -#define ADC_Prescaler_Div4 ((uint32_t)0x00010000) -#define ADC_Prescaler_Div6 ((uint32_t)0x00020000) -#define ADC_Prescaler_Div8 ((uint32_t)0x00030000) -#define IS_ADC_PRESCALER(PRESCALER) (((PRESCALER) == ADC_Prescaler_Div2) || \ - ((PRESCALER) == ADC_Prescaler_Div4) || \ - ((PRESCALER) == ADC_Prescaler_Div6) || \ - ((PRESCALER) == ADC_Prescaler_Div8)) -/** - * @} - */ - - -/** @defgroup ADC_Direct_memory_access_mode_for_multi_mode - * @{ - */ -#define ADC_DMAAccessMode_Disabled ((uint32_t)0x00000000) /* DMA mode disabled */ -#define ADC_DMAAccessMode_1 ((uint32_t)0x00004000) /* DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)*/ -#define ADC_DMAAccessMode_2 ((uint32_t)0x00008000) /* DMA mode 2 enabled (2 / 3 half-words by pairs - 2&1 then 1&3 then 3&2)*/ -#define ADC_DMAAccessMode_3 ((uint32_t)0x0000C000) /* DMA mode 3 enabled (2 / 3 bytes by pairs - 2&1 then 1&3 then 3&2) */ -#define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAAccessMode_Disabled) || \ - ((MODE) == ADC_DMAAccessMode_1) || \ - ((MODE) == ADC_DMAAccessMode_2) || \ - ((MODE) == ADC_DMAAccessMode_3)) - -/** - * @} - */ - - -/** @defgroup ADC_delay_between_2_sampling_phases - * @{ - */ -#define ADC_TwoSamplingDelay_5Cycles ((uint32_t)0x00000000) -#define ADC_TwoSamplingDelay_6Cycles ((uint32_t)0x00000100) -#define ADC_TwoSamplingDelay_7Cycles ((uint32_t)0x00000200) -#define ADC_TwoSamplingDelay_8Cycles ((uint32_t)0x00000300) -#define ADC_TwoSamplingDelay_9Cycles ((uint32_t)0x00000400) -#define ADC_TwoSamplingDelay_10Cycles ((uint32_t)0x00000500) -#define ADC_TwoSamplingDelay_11Cycles ((uint32_t)0x00000600) -#define ADC_TwoSamplingDelay_12Cycles ((uint32_t)0x00000700) -#define ADC_TwoSamplingDelay_13Cycles ((uint32_t)0x00000800) -#define ADC_TwoSamplingDelay_14Cycles ((uint32_t)0x00000900) -#define ADC_TwoSamplingDelay_15Cycles ((uint32_t)0x00000A00) -#define ADC_TwoSamplingDelay_16Cycles ((uint32_t)0x00000B00) -#define ADC_TwoSamplingDelay_17Cycles ((uint32_t)0x00000C00) -#define ADC_TwoSamplingDelay_18Cycles ((uint32_t)0x00000D00) -#define ADC_TwoSamplingDelay_19Cycles ((uint32_t)0x00000E00) -#define ADC_TwoSamplingDelay_20Cycles ((uint32_t)0x00000F00) -#define IS_ADC_SAMPLING_DELAY(DELAY) (((DELAY) == ADC_TwoSamplingDelay_5Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_6Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_7Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_8Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_9Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_10Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_11Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_12Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_13Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_14Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_15Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_16Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_17Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_18Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_19Cycles) || \ - ((DELAY) == ADC_TwoSamplingDelay_20Cycles)) - -/** - * @} - */ - - -/** @defgroup ADC_resolution - * @{ - */ -#define ADC_Resolution_12b ((uint32_t)0x00000000) -#define ADC_Resolution_10b ((uint32_t)0x01000000) -#define ADC_Resolution_8b ((uint32_t)0x02000000) -#define ADC_Resolution_6b ((uint32_t)0x03000000) -#define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_Resolution_12b) || \ - ((RESOLUTION) == ADC_Resolution_10b) || \ - ((RESOLUTION) == ADC_Resolution_8b) || \ - ((RESOLUTION) == ADC_Resolution_6b)) - -/** - * @} - */ - - -/** @defgroup ADC_external_trigger_edge_for_regular_channels_conversion - * @{ - */ -#define ADC_ExternalTrigConvEdge_None ((uint32_t)0x00000000) -#define ADC_ExternalTrigConvEdge_Rising ((uint32_t)0x10000000) -#define ADC_ExternalTrigConvEdge_Falling ((uint32_t)0x20000000) -#define ADC_ExternalTrigConvEdge_RisingFalling ((uint32_t)0x30000000) -#define IS_ADC_EXT_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigConvEdge_None) || \ - ((EDGE) == ADC_ExternalTrigConvEdge_Rising) || \ - ((EDGE) == ADC_ExternalTrigConvEdge_Falling) || \ - ((EDGE) == ADC_ExternalTrigConvEdge_RisingFalling)) -/** - * @} - */ - - -/** @defgroup ADC_extrenal_trigger_sources_for_regular_channels_conversion - * @{ - */ -#define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000) -#define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x01000000) -#define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x02000000) -#define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x03000000) -#define ADC_ExternalTrigConv_T2_CC3 ((uint32_t)0x04000000) -#define ADC_ExternalTrigConv_T2_CC4 ((uint32_t)0x05000000) -#define ADC_ExternalTrigConv_T2_TRGO ((uint32_t)0x06000000) -#define ADC_ExternalTrigConv_T3_CC1 ((uint32_t)0x07000000) -#define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x08000000) -#define ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x09000000) -#define ADC_ExternalTrigConv_T5_CC1 ((uint32_t)0x0A000000) -#define ADC_ExternalTrigConv_T5_CC2 ((uint32_t)0x0B000000) -#define ADC_ExternalTrigConv_T5_CC3 ((uint32_t)0x0C000000) -#define ADC_ExternalTrigConv_T8_CC1 ((uint32_t)0x0D000000) -#define ADC_ExternalTrigConv_T8_TRGO ((uint32_t)0x0E000000) -#define ADC_ExternalTrigConv_Ext_IT11 ((uint32_t)0x0F000000) -#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_T2_CC3) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T2_CC4) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T2_TRGO) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T5_CC1) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T5_CC2) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T5_CC3) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T8_CC1) || \ - ((REGTRIG) == ADC_ExternalTrigConv_T8_TRGO) || \ - ((REGTRIG) == ADC_ExternalTrigConv_Ext_IT11)) -/** - * @} - */ - - -/** @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_18 ((uint8_t)0x12) - -#define ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16) -#define ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17) -#define ADC_Channel_Vbat ((uint8_t)ADC_Channel_18) - -#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) || \ - ((CHANNEL) == ADC_Channel_18)) -/** - * @} - */ - - -/** @defgroup ADC_sampling_times - * @{ - */ -#define ADC_SampleTime_3Cycles ((uint8_t)0x00) -#define ADC_SampleTime_15Cycles ((uint8_t)0x01) -#define ADC_SampleTime_28Cycles ((uint8_t)0x02) -#define ADC_SampleTime_56Cycles ((uint8_t)0x03) -#define ADC_SampleTime_84Cycles ((uint8_t)0x04) -#define ADC_SampleTime_112Cycles ((uint8_t)0x05) -#define ADC_SampleTime_144Cycles ((uint8_t)0x06) -#define ADC_SampleTime_480Cycles ((uint8_t)0x07) -#define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_3Cycles) || \ - ((TIME) == ADC_SampleTime_15Cycles) || \ - ((TIME) == ADC_SampleTime_28Cycles) || \ - ((TIME) == ADC_SampleTime_56Cycles) || \ - ((TIME) == ADC_SampleTime_84Cycles) || \ - ((TIME) == ADC_SampleTime_112Cycles) || \ - ((TIME) == ADC_SampleTime_144Cycles) || \ - ((TIME) == ADC_SampleTime_480Cycles)) -/** - * @} - */ - - -/** @defgroup ADC_external_trigger_edge_for_injected_channels_conversion - * @{ - */ -#define ADC_ExternalTrigInjecConvEdge_None ((uint32_t)0x00000000) -#define ADC_ExternalTrigInjecConvEdge_Rising ((uint32_t)0x00100000) -#define ADC_ExternalTrigInjecConvEdge_Falling ((uint32_t)0x00200000) -#define ADC_ExternalTrigInjecConvEdge_RisingFalling ((uint32_t)0x00300000) -#define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigInjecConvEdge_None) || \ - ((EDGE) == ADC_ExternalTrigInjecConvEdge_Rising) || \ - ((EDGE) == ADC_ExternalTrigInjecConvEdge_Falling) || \ - ((EDGE) == ADC_ExternalTrigInjecConvEdge_RisingFalling)) - -/** - * @} - */ - - -/** @defgroup ADC_extrenal_trigger_sources_for_injected_channels_conversion - * @{ - */ -#define ADC_ExternalTrigInjecConv_T1_CC4 ((uint32_t)0x00000000) -#define ADC_ExternalTrigInjecConv_T1_TRGO ((uint32_t)0x00010000) -#define ADC_ExternalTrigInjecConv_T2_CC1 ((uint32_t)0x00020000) -#define ADC_ExternalTrigInjecConv_T2_TRGO ((uint32_t)0x00030000) -#define ADC_ExternalTrigInjecConv_T3_CC2 ((uint32_t)0x00040000) -#define ADC_ExternalTrigInjecConv_T3_CC4 ((uint32_t)0x00050000) -#define ADC_ExternalTrigInjecConv_T4_CC1 ((uint32_t)0x00060000) -#define ADC_ExternalTrigInjecConv_T4_CC2 ((uint32_t)0x00070000) -#define ADC_ExternalTrigInjecConv_T4_CC3 ((uint32_t)0x00080000) -#define ADC_ExternalTrigInjecConv_T4_TRGO ((uint32_t)0x00090000) -#define ADC_ExternalTrigInjecConv_T5_CC4 ((uint32_t)0x000A0000) -#define ADC_ExternalTrigInjecConv_T5_TRGO ((uint32_t)0x000B0000) -#define ADC_ExternalTrigInjecConv_T8_CC2 ((uint32_t)0x000C0000) -#define ADC_ExternalTrigInjecConv_T8_CC3 ((uint32_t)0x000D0000) -#define ADC_ExternalTrigInjecConv_T8_CC4 ((uint32_t)0x000E0000) -#define ADC_ExternalTrigInjecConv_Ext_IT15 ((uint32_t)0x000F0000) -#define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_ExternalTrigInjecConv_T1_CC4) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T1_TRGO) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_CC1) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_TRGO) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC2) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC4) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC1) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC2) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC3) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_TRGO) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_CC4) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_TRGO) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC2) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC3) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC4) || \ - ((INJTRIG) == ADC_ExternalTrigInjecConv_Ext_IT15)) -/** - * @} - */ - - -/** @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)0x0205) -#define ADC_IT_AWD ((uint16_t)0x0106) -#define ADC_IT_JEOC ((uint16_t)0x0407) -#define ADC_IT_OVR ((uint16_t)0x201A) -#define IS_ADC_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD) || \ - ((IT) == ADC_IT_JEOC)|| ((IT) == ADC_IT_OVR)) -/** - * @} - */ - - -/** @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 ADC_FLAG_OVR ((uint8_t)0x20) - -#define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xC0) == 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) || \ - ((FLAG)== ADC_FLAG_OVR)) -/** - * @} - */ - - -/** @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)) -/** - * @} - */ - - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the ADC configuration to the default reset state *****/ -void ADC_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); -void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct); -void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); -void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); -void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState); - -/* Analog Watchdog configuration functions ************************************/ -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); - -/* Temperature Sensor, Vrefint and VBAT management functions ******************/ -void ADC_TempSensorVrefintCmd(FunctionalState NewState); -void ADC_VBATCmd(FunctionalState NewState); - -/* Regular Channels Configuration functions ***********************************/ -void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); -void ADC_SoftwareStartConv(ADC_TypeDef* ADCx); -FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx); -void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number); -void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); -uint32_t ADC_GetMultiModeConversionValue(void); - -/* Regular Channels DMA Configuration functions *******************************/ -void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState); - -/* Injected channels Configuration functions **********************************/ -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); -void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv); -void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge); -void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx); -FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx); -void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel); - -/* Interrupts and flags management functions **********************************/ -void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, 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 /*__STM32F4xx_ADC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_can.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_can.h deleted file mode 100644 index 938cd414..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_can.h +++ /dev/null @@ -1,644 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_can.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the CAN firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_CAN_H -#define __STM32F4xx_CAN_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 non-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; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup CAN_Exported_Constants - * @{ - */ - -/** @defgroup CAN_InitStatus - * @{ - */ - -#define CAN_InitStatus_Failed ((uint8_t)0x00) /*!< CAN initialization failed */ -#define CAN_InitStatus_Success ((uint8_t)0x01) /*!< CAN initialization OK */ - - -/* Legacy defines */ -#define CANINITFAILED CAN_InitStatus_Failed -#define CANINITOK CAN_InitStatus_Success -/** - * @} - */ - -/** @defgroup CAN_operating_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_operating_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 - * @{ - */ -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27) -/** - * @} - */ - -/** @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)) - -/* Legacy defines */ -#define CAN_FilterFIFO0 CAN_Filter_FIFO0 -#define CAN_FilterFIFO1 CAN_Filter_FIFO1 -/** - * @} - */ - -/** @defgroup CAN_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)) - -/* Legacy defines */ -#define CAN_ID_STD CAN_Id_Standard -#define CAN_ID_EXT 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)) - -/* Legacy defines */ -#define CAN_RTR_DATA CAN_RTR_Data -#define CAN_RTR_REMOTE 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 */ -/* Legacy defines */ -#define CANTXFAILED CAN_TxStatus_Failed -#define CANTXOK CAN_TxStatus_Ok -#define CANTXPENDING CAN_TxStatus_Pending -#define CAN_NO_MB CAN_TxStatus_NoMailBox -/** - * @} - */ - -/** @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 */ - -/* Legacy defines */ -#define CANSLEEPFAILED CAN_Sleep_Failed -#define CANSLEEPOK CAN_Sleep_Ok -/** - * @} - */ - -/** @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 */ - -/* Legacy defines */ -#define CANWAKEUPFAILED CAN_WakeUp_Failed -#define CANWAKEUPOK CAN_WakeUp_Ok -/** - * @} - */ - -/** - * @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 interrupt 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)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* 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); - -/* CAN Frames Transmission 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); - -/* CAN Frames Reception 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); - -/* CAN Bus 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 /* __STM32F4xx_CAN_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_crc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_crc.h deleted file mode 100644 index 38d29a3f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_crc.h +++ /dev/null @@ -1,83 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_crc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the CRC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_CRC_H -#define __STM32F4xx_CRC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup CRC - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup CRC_Exported_Constants - * @{ - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* 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 /* __STM32F4xx_CRC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h deleted file mode 100644 index 189744f5..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h +++ /dev/null @@ -1,384 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_cryp.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the Cryptographic - * processor(CRYP) firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_CRYP_H -#define __STM32F4xx_CRYP_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup CRYP - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief CRYP Init structure definition - */ -typedef struct -{ - uint32_t CRYP_AlgoDir; /*!< Encrypt or Decrypt. This parameter can be a - value of @ref CRYP_Algorithm_Direction */ - uint32_t CRYP_AlgoMode; /*!< TDES-ECB, TDES-CBC, DES-ECB, DES-CBC, AES-ECB, - AES-CBC, AES-CTR, AES-Key, AES-GCM and AES-CCM. - This parameter can be a value of @ref CRYP_Algorithm_Mode */ - uint32_t CRYP_DataType; /*!< 32-bit data, 16-bit data, bit data or bit string. - This parameter can be a value of @ref CRYP_Data_Type */ - uint32_t CRYP_KeySize; /*!< Used only in AES mode only : 128, 192 or 256 bit - key length. This parameter can be a value of - @ref CRYP_Key_Size_for_AES_only */ -}CRYP_InitTypeDef; - -/** - * @brief CRYP Key(s) structure definition - */ -typedef struct -{ - uint32_t CRYP_Key0Left; /*!< Key 0 Left */ - uint32_t CRYP_Key0Right; /*!< Key 0 Right */ - uint32_t CRYP_Key1Left; /*!< Key 1 left */ - uint32_t CRYP_Key1Right; /*!< Key 1 Right */ - uint32_t CRYP_Key2Left; /*!< Key 2 left */ - uint32_t CRYP_Key2Right; /*!< Key 2 Right */ - uint32_t CRYP_Key3Left; /*!< Key 3 left */ - uint32_t CRYP_Key3Right; /*!< Key 3 Right */ -}CRYP_KeyInitTypeDef; -/** - * @brief CRYP Initialization Vectors (IV) structure definition - */ -typedef struct -{ - uint32_t CRYP_IV0Left; /*!< Init Vector 0 Left */ - uint32_t CRYP_IV0Right; /*!< Init Vector 0 Right */ - uint32_t CRYP_IV1Left; /*!< Init Vector 1 left */ - uint32_t CRYP_IV1Right; /*!< Init Vector 1 Right */ -}CRYP_IVInitTypeDef; - -/** - * @brief CRYP context swapping structure definition - */ -typedef struct -{ - /*!< Current Configuration */ - uint32_t CR_CurrentConfig; - /*!< IV */ - uint32_t CRYP_IV0LR; - uint32_t CRYP_IV0RR; - uint32_t CRYP_IV1LR; - uint32_t CRYP_IV1RR; - /*!< KEY */ - uint32_t CRYP_K0LR; - uint32_t CRYP_K0RR; - uint32_t CRYP_K1LR; - uint32_t CRYP_K1RR; - uint32_t CRYP_K2LR; - uint32_t CRYP_K2RR; - uint32_t CRYP_K3LR; - uint32_t CRYP_K3RR; - uint32_t CRYP_CSGCMCCMR[8]; - uint32_t CRYP_CSGCMR[8]; -}CRYP_Context; - - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup CRYP_Exported_Constants - * @{ - */ - -/** @defgroup CRYP_Algorithm_Direction - * @{ - */ -#define CRYP_AlgoDir_Encrypt ((uint16_t)0x0000) -#define CRYP_AlgoDir_Decrypt ((uint16_t)0x0004) -#define IS_CRYP_ALGODIR(ALGODIR) (((ALGODIR) == CRYP_AlgoDir_Encrypt) || \ - ((ALGODIR) == CRYP_AlgoDir_Decrypt)) - -/** - * @} - */ - -/** @defgroup CRYP_Algorithm_Mode - * @{ - */ - -/*!< TDES Modes */ -#define CRYP_AlgoMode_TDES_ECB ((uint32_t)0x00000000) -#define CRYP_AlgoMode_TDES_CBC ((uint32_t)0x00000008) - -/*!< DES Modes */ -#define CRYP_AlgoMode_DES_ECB ((uint32_t)0x00000010) -#define CRYP_AlgoMode_DES_CBC ((uint32_t)0x00000018) - -/*!< AES Modes */ -#define CRYP_AlgoMode_AES_ECB ((uint32_t)0x00000020) -#define CRYP_AlgoMode_AES_CBC ((uint32_t)0x00000028) -#define CRYP_AlgoMode_AES_CTR ((uint32_t)0x00000030) -#define CRYP_AlgoMode_AES_Key ((uint32_t)0x00000038) -#define CRYP_AlgoMode_AES_GCM ((uint32_t)0x00080000) -#define CRYP_AlgoMode_AES_CCM ((uint32_t)0x00080008) - -#define IS_CRYP_ALGOMODE(ALGOMODE) (((ALGOMODE) == CRYP_AlgoMode_TDES_ECB) || \ - ((ALGOMODE) == CRYP_AlgoMode_TDES_CBC)|| \ - ((ALGOMODE) == CRYP_AlgoMode_DES_ECB) || \ - ((ALGOMODE) == CRYP_AlgoMode_DES_CBC) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_ECB) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_CBC) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_CTR) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_Key) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_GCM) || \ - ((ALGOMODE) == CRYP_AlgoMode_AES_CCM)) -/** - * @} - */ - -/** @defgroup CRYP_Phase - * @{ - */ - -/*!< The phases are valid only for AES-GCM and AES-CCM modes */ -#define CRYP_Phase_Init ((uint32_t)0x00000000) -#define CRYP_Phase_Header CRYP_CR_GCM_CCMPH_0 -#define CRYP_Phase_Payload CRYP_CR_GCM_CCMPH_1 -#define CRYP_Phase_Final CRYP_CR_GCM_CCMPH - -#define IS_CRYP_PHASE(PHASE) (((PHASE) == CRYP_Phase_Init) || \ - ((PHASE) == CRYP_Phase_Header) || \ - ((PHASE) == CRYP_Phase_Payload) || \ - ((PHASE) == CRYP_Phase_Final)) - -/** - * @} - */ - -/** @defgroup CRYP_Data_Type - * @{ - */ -#define CRYP_DataType_32b ((uint16_t)0x0000) -#define CRYP_DataType_16b ((uint16_t)0x0040) -#define CRYP_DataType_8b ((uint16_t)0x0080) -#define CRYP_DataType_1b ((uint16_t)0x00C0) -#define IS_CRYP_DATATYPE(DATATYPE) (((DATATYPE) == CRYP_DataType_32b) || \ - ((DATATYPE) == CRYP_DataType_16b)|| \ - ((DATATYPE) == CRYP_DataType_8b)|| \ - ((DATATYPE) == CRYP_DataType_1b)) -/** - * @} - */ - -/** @defgroup CRYP_Key_Size_for_AES_only - * @{ - */ -#define CRYP_KeySize_128b ((uint16_t)0x0000) -#define CRYP_KeySize_192b ((uint16_t)0x0100) -#define CRYP_KeySize_256b ((uint16_t)0x0200) -#define IS_CRYP_KEYSIZE(KEYSIZE) (((KEYSIZE) == CRYP_KeySize_128b)|| \ - ((KEYSIZE) == CRYP_KeySize_192b)|| \ - ((KEYSIZE) == CRYP_KeySize_256b)) -/** - * @} - */ - -/** @defgroup CRYP_flags_definition - * @{ - */ -#define CRYP_FLAG_BUSY ((uint8_t)0x10) /*!< The CRYP core is currently - processing a block of data - or a key preparation (for - AES decryption). */ -#define CRYP_FLAG_IFEM ((uint8_t)0x01) /*!< Input Fifo Empty */ -#define CRYP_FLAG_IFNF ((uint8_t)0x02) /*!< Input Fifo is Not Full */ -#define CRYP_FLAG_INRIS ((uint8_t)0x22) /*!< Raw interrupt pending */ -#define CRYP_FLAG_OFNE ((uint8_t)0x04) /*!< Input Fifo service raw - interrupt status */ -#define CRYP_FLAG_OFFU ((uint8_t)0x08) /*!< Output Fifo is Full */ -#define CRYP_FLAG_OUTRIS ((uint8_t)0x21) /*!< Output Fifo service raw - interrupt status */ - -#define IS_CRYP_GET_FLAG(FLAG) (((FLAG) == CRYP_FLAG_IFEM) || \ - ((FLAG) == CRYP_FLAG_IFNF) || \ - ((FLAG) == CRYP_FLAG_OFNE) || \ - ((FLAG) == CRYP_FLAG_OFFU) || \ - ((FLAG) == CRYP_FLAG_BUSY) || \ - ((FLAG) == CRYP_FLAG_OUTRIS)|| \ - ((FLAG) == CRYP_FLAG_INRIS)) -/** - * @} - */ - -/** @defgroup CRYP_interrupts_definition - * @{ - */ -#define CRYP_IT_INI ((uint8_t)0x01) /*!< IN Fifo Interrupt */ -#define CRYP_IT_OUTI ((uint8_t)0x02) /*!< OUT Fifo Interrupt */ -#define IS_CRYP_CONFIG_IT(IT) ((((IT) & (uint8_t)0xFC) == 0x00) && ((IT) != 0x00)) -#define IS_CRYP_GET_IT(IT) (((IT) == CRYP_IT_INI) || ((IT) == CRYP_IT_OUTI)) - -/** - * @} - */ - -/** @defgroup CRYP_Encryption_Decryption_modes_definition - * @{ - */ -#define MODE_ENCRYPT ((uint8_t)0x01) -#define MODE_DECRYPT ((uint8_t)0x00) - -/** - * @} - */ - -/** @defgroup CRYP_DMA_transfer_requests - * @{ - */ -#define CRYP_DMAReq_DataIN ((uint8_t)0x01) -#define CRYP_DMAReq_DataOUT ((uint8_t)0x02) -#define IS_CRYP_DMAREQ(DMAREQ) ((((DMAREQ) & (uint8_t)0xFC) == 0x00) && ((DMAREQ) != 0x00)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the CRYP configuration to the default reset state ****/ -void CRYP_DeInit(void); - -/* CRYP Initialization and Configuration functions ****************************/ -void CRYP_Init(CRYP_InitTypeDef* CRYP_InitStruct); -void CRYP_StructInit(CRYP_InitTypeDef* CRYP_InitStruct); -void CRYP_KeyInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); -void CRYP_KeyStructInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); -void CRYP_IVInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct); -void CRYP_IVStructInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct); -void CRYP_Cmd(FunctionalState NewState); -void CRYP_PhaseConfig(uint32_t CRYP_Phase); -void CRYP_FIFOFlush(void); -/* CRYP Data processing functions *********************************************/ -void CRYP_DataIn(uint32_t Data); -uint32_t CRYP_DataOut(void); - -/* CRYP Context swapping functions ********************************************/ -ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave, - CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); -void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore); - -/* CRYP DMA interface function ************************************************/ -void CRYP_DMACmd(uint8_t CRYP_DMAReq, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void CRYP_ITConfig(uint8_t CRYP_IT, FunctionalState NewState); -ITStatus CRYP_GetITStatus(uint8_t CRYP_IT); -FunctionalState CRYP_GetCmdStatus(void); -FlagStatus CRYP_GetFlagStatus(uint8_t CRYP_FLAG); - -/* High Level AES functions **************************************************/ -ErrorStatus CRYP_AES_ECB(uint8_t Mode, - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_AES_CBC(uint8_t Mode, - uint8_t InitVectors[16], - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_AES_CTR(uint8_t Mode, - uint8_t InitVectors[16], - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_AES_GCM(uint8_t Mode, uint8_t InitVectors[16], - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t ILength, - uint8_t *Header, uint32_t HLength, - uint8_t *Output, uint8_t *AuthTAG); - -ErrorStatus CRYP_AES_CCM(uint8_t Mode, - uint8_t* Nonce, uint32_t NonceSize, - uint8_t* Key, uint16_t Keysize, - uint8_t* Input, uint32_t ILength, - uint8_t* Header, uint32_t HLength, uint8_t *HBuffer, - uint8_t* Output, - uint8_t* AuthTAG, uint32_t TAGSize); - -/* High Level TDES functions **************************************************/ -ErrorStatus CRYP_TDES_ECB(uint8_t Mode, - uint8_t Key[24], - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_TDES_CBC(uint8_t Mode, - uint8_t Key[24], - uint8_t InitVectors[8], - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -/* High Level DES functions **************************************************/ -ErrorStatus CRYP_DES_ECB(uint8_t Mode, - uint8_t Key[8], - uint8_t *Input, uint32_t Ilength, - uint8_t *Output); - -ErrorStatus CRYP_DES_CBC(uint8_t Mode, - uint8_t Key[8], - uint8_t InitVectors[8], - uint8_t *Input,uint32_t Ilength, - uint8_t *Output); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_CRYP_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dac.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dac.h deleted file mode 100644 index 62c0c872..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dac.h +++ /dev/null @@ -1,304 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dac.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the DAC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_DAC_H -#define __STM32F4xx_DAC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @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_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_T5_TRGO ((uint32_t)0x0000001C) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_T6_TRGO ((uint32_t)0x00000004) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_T7_TRGO ((uint32_t)0x00000014) /*!< TIM7 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 */ - -#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_alignement - * @{ - */ - -#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) -/** - * @} - */ - -/** @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)) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the DAC configuration to the default reset state *****/ -void DAC_DeInit(void); - -/* DAC channels configuration: trigger, output buffer, data format functions */ -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); -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); - -/* DMA management functions ***************************************************/ -void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState); -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); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_DAC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dbgmcu.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dbgmcu.h deleted file mode 100644 index e041e32a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dbgmcu.h +++ /dev/null @@ -1,109 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dbgmcu.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the DBGMCU firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_DBGMCU_H -#define __STM32F4xx_DBGMCU_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup DBGMCU - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup DBGMCU_Exported_Constants - * @{ - */ -#define DBGMCU_SLEEP ((uint32_t)0x00000001) -#define DBGMCU_STOP ((uint32_t)0x00000002) -#define DBGMCU_STANDBY ((uint32_t)0x00000004) -#define IS_DBGMCU_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFFF8) == 0x00) && ((PERIPH) != 0x00)) - -#define DBGMCU_TIM2_STOP ((uint32_t)0x00000001) -#define DBGMCU_TIM3_STOP ((uint32_t)0x00000002) -#define DBGMCU_TIM4_STOP ((uint32_t)0x00000004) -#define DBGMCU_TIM5_STOP ((uint32_t)0x00000008) -#define DBGMCU_TIM6_STOP ((uint32_t)0x00000010) -#define DBGMCU_TIM7_STOP ((uint32_t)0x00000020) -#define DBGMCU_TIM12_STOP ((uint32_t)0x00000040) -#define DBGMCU_TIM13_STOP ((uint32_t)0x00000080) -#define DBGMCU_TIM14_STOP ((uint32_t)0x00000100) -#define DBGMCU_RTC_STOP ((uint32_t)0x00000400) -#define DBGMCU_WWDG_STOP ((uint32_t)0x00000800) -#define DBGMCU_IWDG_STOP ((uint32_t)0x00001000) -#define DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00200000) -#define DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00400000) -#define DBGMCU_I2C3_SMBUS_TIMEOUT ((uint32_t)0x00800000) -#define DBGMCU_CAN1_STOP ((uint32_t)0x02000000) -#define DBGMCU_CAN2_STOP ((uint32_t)0x04000000) -#define IS_DBGMCU_APB1PERIPH(PERIPH) ((((PERIPH) & 0xF91FE200) == 0x00) && ((PERIPH) != 0x00)) - -#define DBGMCU_TIM1_STOP ((uint32_t)0x00000001) -#define DBGMCU_TIM8_STOP ((uint32_t)0x00000002) -#define DBGMCU_TIM9_STOP ((uint32_t)0x00010000) -#define DBGMCU_TIM10_STOP ((uint32_t)0x00020000) -#define DBGMCU_TIM11_STOP ((uint32_t)0x00040000) -#define IS_DBGMCU_APB2PERIPH(PERIPH) ((((PERIPH) & 0xFFF8FFFC) == 0x00) && ((PERIPH) != 0x00)) -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ -uint32_t DBGMCU_GetREVID(void); -uint32_t DBGMCU_GetDEVID(void); -void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState); -void DBGMCU_APB1PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState); -void DBGMCU_APB2PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_DBGMCU_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dcmi.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dcmi.h deleted file mode 100644 index 518a5761..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dcmi.h +++ /dev/null @@ -1,312 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dcmi.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the DCMI firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_DCMI_H -#define __STM32F4xx_DCMI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup DCMI - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/** - * @brief DCMI Init structure definition - */ -typedef struct -{ - uint16_t DCMI_CaptureMode; /*!< Specifies the Capture Mode: Continuous or Snapshot. - This parameter can be a value of @ref DCMI_Capture_Mode */ - - uint16_t DCMI_SynchroMode; /*!< Specifies the Synchronization Mode: Hardware or Embedded. - This parameter can be a value of @ref DCMI_Synchronization_Mode */ - - uint16_t DCMI_PCKPolarity; /*!< Specifies the Pixel clock polarity: Falling or Rising. - This parameter can be a value of @ref DCMI_PIXCK_Polarity */ - - uint16_t DCMI_VSPolarity; /*!< Specifies the Vertical synchronization polarity: High or Low. - This parameter can be a value of @ref DCMI_VSYNC_Polarity */ - - uint16_t DCMI_HSPolarity; /*!< Specifies the Horizontal synchronization polarity: High or Low. - This parameter can be a value of @ref DCMI_HSYNC_Polarity */ - - uint16_t DCMI_CaptureRate; /*!< Specifies the frequency of frame capture: All, 1/2 or 1/4. - This parameter can be a value of @ref DCMI_Capture_Rate */ - - uint16_t DCMI_ExtendedDataMode; /*!< Specifies the data width: 8-bit, 10-bit, 12-bit or 14-bit. - This parameter can be a value of @ref DCMI_Extended_Data_Mode */ -} DCMI_InitTypeDef; - -/** - * @brief DCMI CROP Init structure definition - */ -typedef struct -{ - uint16_t DCMI_VerticalStartLine; /*!< Specifies the Vertical start line count from which the image capture - will start. This parameter can be a value between 0x00 and 0x1FFF */ - - uint16_t DCMI_HorizontalOffsetCount; /*!< Specifies the number of pixel clocks to count before starting a capture. - This parameter can be a value between 0x00 and 0x3FFF */ - - uint16_t DCMI_VerticalLineCount; /*!< Specifies the number of lines to be captured from the starting point. - This parameter can be a value between 0x00 and 0x3FFF */ - - uint16_t DCMI_CaptureCount; /*!< Specifies the number of pixel clocks to be captured from the starting - point on the same line. - This parameter can be a value between 0x00 and 0x3FFF */ -} DCMI_CROPInitTypeDef; - -/** - * @brief DCMI Embedded Synchronisation CODE Init structure definition - */ -typedef struct -{ - uint8_t DCMI_FrameStartCode; /*!< Specifies the code of the frame start delimiter. */ - uint8_t DCMI_LineStartCode; /*!< Specifies the code of the line start delimiter. */ - uint8_t DCMI_LineEndCode; /*!< Specifies the code of the line end delimiter. */ - uint8_t DCMI_FrameEndCode; /*!< Specifies the code of the frame end delimiter. */ -} DCMI_CodesInitTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup DCMI_Exported_Constants - * @{ - */ - -/** @defgroup DCMI_Capture_Mode - * @{ - */ -#define DCMI_CaptureMode_Continuous ((uint16_t)0x0000) /*!< The received data are transferred continuously - into the destination memory through the DMA */ -#define DCMI_CaptureMode_SnapShot ((uint16_t)0x0002) /*!< Once activated, the interface waits for the start of - frame and then transfers a single frame through the DMA */ -#define IS_DCMI_CAPTURE_MODE(MODE)(((MODE) == DCMI_CaptureMode_Continuous) || \ - ((MODE) == DCMI_CaptureMode_SnapShot)) -/** - * @} - */ - - -/** @defgroup DCMI_Synchronization_Mode - * @{ - */ -#define DCMI_SynchroMode_Hardware ((uint16_t)0x0000) /*!< Hardware synchronization data capture (frame/line start/stop) - is synchronized with the HSYNC/VSYNC signals */ -#define DCMI_SynchroMode_Embedded ((uint16_t)0x0010) /*!< Embedded synchronization data capture is synchronized with - synchronization codes embedded in the data flow */ -#define IS_DCMI_SYNCHRO(MODE)(((MODE) == DCMI_SynchroMode_Hardware) || \ - ((MODE) == DCMI_SynchroMode_Embedded)) -/** - * @} - */ - - -/** @defgroup DCMI_PIXCK_Polarity - * @{ - */ -#define DCMI_PCKPolarity_Falling ((uint16_t)0x0000) /*!< Pixel clock active on Falling edge */ -#define DCMI_PCKPolarity_Rising ((uint16_t)0x0020) /*!< Pixel clock active on Rising edge */ -#define IS_DCMI_PCKPOLARITY(POLARITY)(((POLARITY) == DCMI_PCKPolarity_Falling) || \ - ((POLARITY) == DCMI_PCKPolarity_Rising)) -/** - * @} - */ - - -/** @defgroup DCMI_VSYNC_Polarity - * @{ - */ -#define DCMI_VSPolarity_Low ((uint16_t)0x0000) /*!< Vertical synchronization active Low */ -#define DCMI_VSPolarity_High ((uint16_t)0x0080) /*!< Vertical synchronization active High */ -#define IS_DCMI_VSPOLARITY(POLARITY)(((POLARITY) == DCMI_VSPolarity_Low) || \ - ((POLARITY) == DCMI_VSPolarity_High)) -/** - * @} - */ - - -/** @defgroup DCMI_HSYNC_Polarity - * @{ - */ -#define DCMI_HSPolarity_Low ((uint16_t)0x0000) /*!< Horizontal synchronization active Low */ -#define DCMI_HSPolarity_High ((uint16_t)0x0040) /*!< Horizontal synchronization active High */ -#define IS_DCMI_HSPOLARITY(POLARITY)(((POLARITY) == DCMI_HSPolarity_Low) || \ - ((POLARITY) == DCMI_HSPolarity_High)) -/** - * @} - */ - - -/** @defgroup DCMI_Capture_Rate - * @{ - */ -#define DCMI_CaptureRate_All_Frame ((uint16_t)0x0000) /*!< All frames are captured */ -#define DCMI_CaptureRate_1of2_Frame ((uint16_t)0x0100) /*!< Every alternate frame captured */ -#define DCMI_CaptureRate_1of4_Frame ((uint16_t)0x0200) /*!< One frame in 4 frames captured */ -#define IS_DCMI_CAPTURE_RATE(RATE) (((RATE) == DCMI_CaptureRate_All_Frame) || \ - ((RATE) == DCMI_CaptureRate_1of2_Frame) ||\ - ((RATE) == DCMI_CaptureRate_1of4_Frame)) -/** - * @} - */ - - -/** @defgroup DCMI_Extended_Data_Mode - * @{ - */ -#define DCMI_ExtendedDataMode_8b ((uint16_t)0x0000) /*!< Interface captures 8-bit data on every pixel clock */ -#define DCMI_ExtendedDataMode_10b ((uint16_t)0x0400) /*!< Interface captures 10-bit data on every pixel clock */ -#define DCMI_ExtendedDataMode_12b ((uint16_t)0x0800) /*!< Interface captures 12-bit data on every pixel clock */ -#define DCMI_ExtendedDataMode_14b ((uint16_t)0x0C00) /*!< Interface captures 14-bit data on every pixel clock */ -#define IS_DCMI_EXTENDED_DATA(DATA)(((DATA) == DCMI_ExtendedDataMode_8b) || \ - ((DATA) == DCMI_ExtendedDataMode_10b) ||\ - ((DATA) == DCMI_ExtendedDataMode_12b) ||\ - ((DATA) == DCMI_ExtendedDataMode_14b)) -/** - * @} - */ - - -/** @defgroup DCMI_interrupt_sources - * @{ - */ -#define DCMI_IT_FRAME ((uint16_t)0x0001) -#define DCMI_IT_OVF ((uint16_t)0x0002) -#define DCMI_IT_ERR ((uint16_t)0x0004) -#define DCMI_IT_VSYNC ((uint16_t)0x0008) -#define DCMI_IT_LINE ((uint16_t)0x0010) -#define IS_DCMI_CONFIG_IT(IT) ((((IT) & (uint16_t)0xFFE0) == 0x0000) && ((IT) != 0x0000)) -#define IS_DCMI_GET_IT(IT) (((IT) == DCMI_IT_FRAME) || \ - ((IT) == DCMI_IT_OVF) || \ - ((IT) == DCMI_IT_ERR) || \ - ((IT) == DCMI_IT_VSYNC) || \ - ((IT) == DCMI_IT_LINE)) -/** - * @} - */ - - -/** @defgroup DCMI_Flags - * @{ - */ -/** - * @brief DCMI SR register - */ -#define DCMI_FLAG_HSYNC ((uint16_t)0x2001) -#define DCMI_FLAG_VSYNC ((uint16_t)0x2002) -#define DCMI_FLAG_FNE ((uint16_t)0x2004) -/** - * @brief DCMI RISR register - */ -#define DCMI_FLAG_FRAMERI ((uint16_t)0x0001) -#define DCMI_FLAG_OVFRI ((uint16_t)0x0002) -#define DCMI_FLAG_ERRRI ((uint16_t)0x0004) -#define DCMI_FLAG_VSYNCRI ((uint16_t)0x0008) -#define DCMI_FLAG_LINERI ((uint16_t)0x0010) -/** - * @brief DCMI MISR register - */ -#define DCMI_FLAG_FRAMEMI ((uint16_t)0x1001) -#define DCMI_FLAG_OVFMI ((uint16_t)0x1002) -#define DCMI_FLAG_ERRMI ((uint16_t)0x1004) -#define DCMI_FLAG_VSYNCMI ((uint16_t)0x1008) -#define DCMI_FLAG_LINEMI ((uint16_t)0x1010) -#define IS_DCMI_GET_FLAG(FLAG) (((FLAG) == DCMI_FLAG_HSYNC) || \ - ((FLAG) == DCMI_FLAG_VSYNC) || \ - ((FLAG) == DCMI_FLAG_FNE) || \ - ((FLAG) == DCMI_FLAG_FRAMERI) || \ - ((FLAG) == DCMI_FLAG_OVFRI) || \ - ((FLAG) == DCMI_FLAG_ERRRI) || \ - ((FLAG) == DCMI_FLAG_VSYNCRI) || \ - ((FLAG) == DCMI_FLAG_LINERI) || \ - ((FLAG) == DCMI_FLAG_FRAMEMI) || \ - ((FLAG) == DCMI_FLAG_OVFMI) || \ - ((FLAG) == DCMI_FLAG_ERRMI) || \ - ((FLAG) == DCMI_FLAG_VSYNCMI) || \ - ((FLAG) == DCMI_FLAG_LINEMI)) - -#define IS_DCMI_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFFE0) == 0x0000) && ((FLAG) != 0x0000)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the DCMI configuration to the default reset state ****/ -void DCMI_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -void DCMI_Init(DCMI_InitTypeDef* DCMI_InitStruct); -void DCMI_StructInit(DCMI_InitTypeDef* DCMI_InitStruct); -void DCMI_CROPConfig(DCMI_CROPInitTypeDef* DCMI_CROPInitStruct); -void DCMI_CROPCmd(FunctionalState NewState); -void DCMI_SetEmbeddedSynchroCodes(DCMI_CodesInitTypeDef* DCMI_CodesInitStruct); -void DCMI_JPEGCmd(FunctionalState NewState); - -/* Image capture functions ****************************************************/ -void DCMI_Cmd(FunctionalState NewState); -void DCMI_CaptureCmd(FunctionalState NewState); -uint32_t DCMI_ReadData(void); - -/* Interrupts and flags management functions **********************************/ -void DCMI_ITConfig(uint16_t DCMI_IT, FunctionalState NewState); -FlagStatus DCMI_GetFlagStatus(uint16_t DCMI_FLAG); -void DCMI_ClearFlag(uint16_t DCMI_FLAG); -ITStatus DCMI_GetITStatus(uint16_t DCMI_IT); -void DCMI_ClearITPendingBit(uint16_t DCMI_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_DCMI_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dma.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dma.h deleted file mode 100644 index d7e987e4..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dma.h +++ /dev/null @@ -1,609 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dma.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the DMA firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_DMA_H -#define __STM32F4xx_DMA_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup DMA - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief DMA Init structure definition - */ - -typedef struct -{ - uint32_t DMA_Channel; /*!< Specifies the channel used for the specified stream. - This parameter can be a value of @ref DMA_channel */ - - uint32_t DMA_PeripheralBaseAddr; /*!< Specifies the peripheral base address for DMAy Streamx. */ - - uint32_t DMA_Memory0BaseAddr; /*!< Specifies the memory 0 base address for DMAy Streamx. - This memory is the default memory used when double buffer mode is - not enabled. */ - - uint32_t DMA_DIR; /*!< Specifies if the data will be transferred from memory to peripheral, - from memory to memory or from peripheral to memory. - This parameter can be a value of @ref DMA_data_transfer_direction */ - - uint32_t DMA_BufferSize; /*!< Specifies the buffer size, in data unit, of the specified Stream. - 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 should be 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 should be 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 Streamx. - 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 Stream */ - - uint32_t DMA_Priority; /*!< Specifies the software priority for the DMAy Streamx. - This parameter can be a value of @ref DMA_priority_level */ - - uint32_t DMA_FIFOMode; /*!< Specifies if the FIFO mode or Direct mode will be used for the specified Stream. - This parameter can be a value of @ref DMA_fifo_direct_mode - @note The Direct mode (FIFO mode disabled) cannot be used if the - memory-to-memory data transfer is configured on the selected Stream */ - - uint32_t DMA_FIFOThreshold; /*!< Specifies the FIFO threshold level. - This parameter can be a value of @ref DMA_fifo_threshold_level */ - - uint32_t DMA_MemoryBurst; /*!< Specifies the Burst transfer configuration for the memory transfers. - It specifies the amount of data to be transferred in a single non interruptable - transaction. This parameter can be a value of @ref DMA_memory_burst - @note The burst mode is possible only if the address Increment mode is enabled. */ - - uint32_t DMA_PeripheralBurst; /*!< Specifies the Burst transfer configuration for the peripheral transfers. - It specifies the amount of data to be transferred in a single non interruptable - transaction. This parameter can be a value of @ref DMA_peripheral_burst - @note The burst mode is possible only if the address Increment mode is enabled. */ -}DMA_InitTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup DMA_Exported_Constants - * @{ - */ - -#define IS_DMA_ALL_PERIPH(PERIPH) (((PERIPH) == DMA1_Stream0) || \ - ((PERIPH) == DMA1_Stream1) || \ - ((PERIPH) == DMA1_Stream2) || \ - ((PERIPH) == DMA1_Stream3) || \ - ((PERIPH) == DMA1_Stream4) || \ - ((PERIPH) == DMA1_Stream5) || \ - ((PERIPH) == DMA1_Stream6) || \ - ((PERIPH) == DMA1_Stream7) || \ - ((PERIPH) == DMA2_Stream0) || \ - ((PERIPH) == DMA2_Stream1) || \ - ((PERIPH) == DMA2_Stream2) || \ - ((PERIPH) == DMA2_Stream3) || \ - ((PERIPH) == DMA2_Stream4) || \ - ((PERIPH) == DMA2_Stream5) || \ - ((PERIPH) == DMA2_Stream6) || \ - ((PERIPH) == DMA2_Stream7)) - -#define IS_DMA_ALL_CONTROLLER(CONTROLLER) (((CONTROLLER) == DMA1) || \ - ((CONTROLLER) == DMA2)) - -/** @defgroup DMA_channel - * @{ - */ -#define DMA_Channel_0 ((uint32_t)0x00000000) -#define DMA_Channel_1 ((uint32_t)0x02000000) -#define DMA_Channel_2 ((uint32_t)0x04000000) -#define DMA_Channel_3 ((uint32_t)0x06000000) -#define DMA_Channel_4 ((uint32_t)0x08000000) -#define DMA_Channel_5 ((uint32_t)0x0A000000) -#define DMA_Channel_6 ((uint32_t)0x0C000000) -#define DMA_Channel_7 ((uint32_t)0x0E000000) - -#define IS_DMA_CHANNEL(CHANNEL) (((CHANNEL) == DMA_Channel_0) || \ - ((CHANNEL) == DMA_Channel_1) || \ - ((CHANNEL) == DMA_Channel_2) || \ - ((CHANNEL) == DMA_Channel_3) || \ - ((CHANNEL) == DMA_Channel_4) || \ - ((CHANNEL) == DMA_Channel_5) || \ - ((CHANNEL) == DMA_Channel_6) || \ - ((CHANNEL) == DMA_Channel_7)) -/** - * @} - */ - - -/** @defgroup DMA_data_transfer_direction - * @{ - */ -#define DMA_DIR_PeripheralToMemory ((uint32_t)0x00000000) -#define DMA_DIR_MemoryToPeripheral ((uint32_t)0x00000040) -#define DMA_DIR_MemoryToMemory ((uint32_t)0x00000080) - -#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_DIR_PeripheralToMemory ) || \ - ((DIRECTION) == DMA_DIR_MemoryToPeripheral) || \ - ((DIRECTION) == DMA_DIR_MemoryToMemory)) -/** - * @} - */ - - -/** @defgroup DMA_data_buffer_size - * @{ - */ -#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000)) -/** - * @} - */ - - -/** @defgroup DMA_peripheral_incremented_mode - * @{ - */ -#define DMA_PeripheralInc_Enable ((uint32_t)0x00000200) -#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)0x00000400) -#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)0x00000800) -#define DMA_PeripheralDataSize_Word ((uint32_t)0x00001000) - -#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)0x00002000) -#define DMA_MemoryDataSize_Word ((uint32_t)0x00004000) - -#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_Normal ((uint32_t)0x00000000) -#define DMA_Mode_Circular ((uint32_t)0x00000100) - -#define IS_DMA_MODE(MODE) (((MODE) == DMA_Mode_Normal ) || \ - ((MODE) == DMA_Mode_Circular)) -/** - * @} - */ - - -/** @defgroup DMA_priority_level - * @{ - */ -#define DMA_Priority_Low ((uint32_t)0x00000000) -#define DMA_Priority_Medium ((uint32_t)0x00010000) -#define DMA_Priority_High ((uint32_t)0x00020000) -#define DMA_Priority_VeryHigh ((uint32_t)0x00030000) - -#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_Priority_Low ) || \ - ((PRIORITY) == DMA_Priority_Medium) || \ - ((PRIORITY) == DMA_Priority_High) || \ - ((PRIORITY) == DMA_Priority_VeryHigh)) -/** - * @} - */ - - -/** @defgroup DMA_fifo_direct_mode - * @{ - */ -#define DMA_FIFOMode_Disable ((uint32_t)0x00000000) -#define DMA_FIFOMode_Enable ((uint32_t)0x00000004) - -#define IS_DMA_FIFO_MODE_STATE(STATE) (((STATE) == DMA_FIFOMode_Disable ) || \ - ((STATE) == DMA_FIFOMode_Enable)) -/** - * @} - */ - - -/** @defgroup DMA_fifo_threshold_level - * @{ - */ -#define DMA_FIFOThreshold_1QuarterFull ((uint32_t)0x00000000) -#define DMA_FIFOThreshold_HalfFull ((uint32_t)0x00000001) -#define DMA_FIFOThreshold_3QuartersFull ((uint32_t)0x00000002) -#define DMA_FIFOThreshold_Full ((uint32_t)0x00000003) - -#define IS_DMA_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == DMA_FIFOThreshold_1QuarterFull ) || \ - ((THRESHOLD) == DMA_FIFOThreshold_HalfFull) || \ - ((THRESHOLD) == DMA_FIFOThreshold_3QuartersFull) || \ - ((THRESHOLD) == DMA_FIFOThreshold_Full)) -/** - * @} - */ - - -/** @defgroup DMA_memory_burst - * @{ - */ -#define DMA_MemoryBurst_Single ((uint32_t)0x00000000) -#define DMA_MemoryBurst_INC4 ((uint32_t)0x00800000) -#define DMA_MemoryBurst_INC8 ((uint32_t)0x01000000) -#define DMA_MemoryBurst_INC16 ((uint32_t)0x01800000) - -#define IS_DMA_MEMORY_BURST(BURST) (((BURST) == DMA_MemoryBurst_Single) || \ - ((BURST) == DMA_MemoryBurst_INC4) || \ - ((BURST) == DMA_MemoryBurst_INC8) || \ - ((BURST) == DMA_MemoryBurst_INC16)) -/** - * @} - */ - - -/** @defgroup DMA_peripheral_burst - * @{ - */ -#define DMA_PeripheralBurst_Single ((uint32_t)0x00000000) -#define DMA_PeripheralBurst_INC4 ((uint32_t)0x00200000) -#define DMA_PeripheralBurst_INC8 ((uint32_t)0x00400000) -#define DMA_PeripheralBurst_INC16 ((uint32_t)0x00600000) - -#define IS_DMA_PERIPHERAL_BURST(BURST) (((BURST) == DMA_PeripheralBurst_Single) || \ - ((BURST) == DMA_PeripheralBurst_INC4) || \ - ((BURST) == DMA_PeripheralBurst_INC8) || \ - ((BURST) == DMA_PeripheralBurst_INC16)) -/** - * @} - */ - - -/** @defgroup DMA_fifo_status_level - * @{ - */ -#define DMA_FIFOStatus_Less1QuarterFull ((uint32_t)0x00000000 << 3) -#define DMA_FIFOStatus_1QuarterFull ((uint32_t)0x00000001 << 3) -#define DMA_FIFOStatus_HalfFull ((uint32_t)0x00000002 << 3) -#define DMA_FIFOStatus_3QuartersFull ((uint32_t)0x00000003 << 3) -#define DMA_FIFOStatus_Empty ((uint32_t)0x00000004 << 3) -#define DMA_FIFOStatus_Full ((uint32_t)0x00000005 << 3) - -#define IS_DMA_FIFO_STATUS(STATUS) (((STATUS) == DMA_FIFOStatus_Less1QuarterFull ) || \ - ((STATUS) == DMA_FIFOStatus_HalfFull) || \ - ((STATUS) == DMA_FIFOStatus_1QuarterFull) || \ - ((STATUS) == DMA_FIFOStatus_3QuartersFull) || \ - ((STATUS) == DMA_FIFOStatus_Full) || \ - ((STATUS) == DMA_FIFOStatus_Empty)) -/** - * @} - */ - -/** @defgroup DMA_flags_definition - * @{ - */ -#define DMA_FLAG_FEIF0 ((uint32_t)0x10800001) -#define DMA_FLAG_DMEIF0 ((uint32_t)0x10800004) -#define DMA_FLAG_TEIF0 ((uint32_t)0x10000008) -#define DMA_FLAG_HTIF0 ((uint32_t)0x10000010) -#define DMA_FLAG_TCIF0 ((uint32_t)0x10000020) -#define DMA_FLAG_FEIF1 ((uint32_t)0x10000040) -#define DMA_FLAG_DMEIF1 ((uint32_t)0x10000100) -#define DMA_FLAG_TEIF1 ((uint32_t)0x10000200) -#define DMA_FLAG_HTIF1 ((uint32_t)0x10000400) -#define DMA_FLAG_TCIF1 ((uint32_t)0x10000800) -#define DMA_FLAG_FEIF2 ((uint32_t)0x10010000) -#define DMA_FLAG_DMEIF2 ((uint32_t)0x10040000) -#define DMA_FLAG_TEIF2 ((uint32_t)0x10080000) -#define DMA_FLAG_HTIF2 ((uint32_t)0x10100000) -#define DMA_FLAG_TCIF2 ((uint32_t)0x10200000) -#define DMA_FLAG_FEIF3 ((uint32_t)0x10400000) -#define DMA_FLAG_DMEIF3 ((uint32_t)0x11000000) -#define DMA_FLAG_TEIF3 ((uint32_t)0x12000000) -#define DMA_FLAG_HTIF3 ((uint32_t)0x14000000) -#define DMA_FLAG_TCIF3 ((uint32_t)0x18000000) -#define DMA_FLAG_FEIF4 ((uint32_t)0x20000001) -#define DMA_FLAG_DMEIF4 ((uint32_t)0x20000004) -#define DMA_FLAG_TEIF4 ((uint32_t)0x20000008) -#define DMA_FLAG_HTIF4 ((uint32_t)0x20000010) -#define DMA_FLAG_TCIF4 ((uint32_t)0x20000020) -#define DMA_FLAG_FEIF5 ((uint32_t)0x20000040) -#define DMA_FLAG_DMEIF5 ((uint32_t)0x20000100) -#define DMA_FLAG_TEIF5 ((uint32_t)0x20000200) -#define DMA_FLAG_HTIF5 ((uint32_t)0x20000400) -#define DMA_FLAG_TCIF5 ((uint32_t)0x20000800) -#define DMA_FLAG_FEIF6 ((uint32_t)0x20010000) -#define DMA_FLAG_DMEIF6 ((uint32_t)0x20040000) -#define DMA_FLAG_TEIF6 ((uint32_t)0x20080000) -#define DMA_FLAG_HTIF6 ((uint32_t)0x20100000) -#define DMA_FLAG_TCIF6 ((uint32_t)0x20200000) -#define DMA_FLAG_FEIF7 ((uint32_t)0x20400000) -#define DMA_FLAG_DMEIF7 ((uint32_t)0x21000000) -#define DMA_FLAG_TEIF7 ((uint32_t)0x22000000) -#define DMA_FLAG_HTIF7 ((uint32_t)0x24000000) -#define DMA_FLAG_TCIF7 ((uint32_t)0x28000000) - -#define IS_DMA_CLEAR_FLAG(FLAG) ((((FLAG) & 0x30000000) != 0x30000000) && (((FLAG) & 0x30000000) != 0) && \ - (((FLAG) & 0xC002F082) == 0x00) && ((FLAG) != 0x00)) - -#define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA_FLAG_TCIF0) || ((FLAG) == DMA_FLAG_HTIF0) || \ - ((FLAG) == DMA_FLAG_TEIF0) || ((FLAG) == DMA_FLAG_DMEIF0) || \ - ((FLAG) == DMA_FLAG_FEIF0) || ((FLAG) == DMA_FLAG_TCIF1) || \ - ((FLAG) == DMA_FLAG_HTIF1) || ((FLAG) == DMA_FLAG_TEIF1) || \ - ((FLAG) == DMA_FLAG_DMEIF1) || ((FLAG) == DMA_FLAG_FEIF1) || \ - ((FLAG) == DMA_FLAG_TCIF2) || ((FLAG) == DMA_FLAG_HTIF2) || \ - ((FLAG) == DMA_FLAG_TEIF2) || ((FLAG) == DMA_FLAG_DMEIF2) || \ - ((FLAG) == DMA_FLAG_FEIF2) || ((FLAG) == DMA_FLAG_TCIF3) || \ - ((FLAG) == DMA_FLAG_HTIF3) || ((FLAG) == DMA_FLAG_TEIF3) || \ - ((FLAG) == DMA_FLAG_DMEIF3) || ((FLAG) == DMA_FLAG_FEIF3) || \ - ((FLAG) == DMA_FLAG_TCIF4) || ((FLAG) == DMA_FLAG_HTIF4) || \ - ((FLAG) == DMA_FLAG_TEIF4) || ((FLAG) == DMA_FLAG_DMEIF4) || \ - ((FLAG) == DMA_FLAG_FEIF4) || ((FLAG) == DMA_FLAG_TCIF5) || \ - ((FLAG) == DMA_FLAG_HTIF5) || ((FLAG) == DMA_FLAG_TEIF5) || \ - ((FLAG) == DMA_FLAG_DMEIF5) || ((FLAG) == DMA_FLAG_FEIF5) || \ - ((FLAG) == DMA_FLAG_TCIF6) || ((FLAG) == DMA_FLAG_HTIF6) || \ - ((FLAG) == DMA_FLAG_TEIF6) || ((FLAG) == DMA_FLAG_DMEIF6) || \ - ((FLAG) == DMA_FLAG_FEIF6) || ((FLAG) == DMA_FLAG_TCIF7) || \ - ((FLAG) == DMA_FLAG_HTIF7) || ((FLAG) == DMA_FLAG_TEIF7) || \ - ((FLAG) == DMA_FLAG_DMEIF7) || ((FLAG) == DMA_FLAG_FEIF7)) -/** - * @} - */ - - -/** @defgroup DMA_interrupt_enable_definitions - * @{ - */ -#define DMA_IT_TC ((uint32_t)0x00000010) -#define DMA_IT_HT ((uint32_t)0x00000008) -#define DMA_IT_TE ((uint32_t)0x00000004) -#define DMA_IT_DME ((uint32_t)0x00000002) -#define DMA_IT_FE ((uint32_t)0x00000080) - -#define IS_DMA_CONFIG_IT(IT) ((((IT) & 0xFFFFFF61) == 0x00) && ((IT) != 0x00)) -/** - * @} - */ - - -/** @defgroup DMA_interrupts_definitions - * @{ - */ -#define DMA_IT_FEIF0 ((uint32_t)0x90000001) -#define DMA_IT_DMEIF0 ((uint32_t)0x10001004) -#define DMA_IT_TEIF0 ((uint32_t)0x10002008) -#define DMA_IT_HTIF0 ((uint32_t)0x10004010) -#define DMA_IT_TCIF0 ((uint32_t)0x10008020) -#define DMA_IT_FEIF1 ((uint32_t)0x90000040) -#define DMA_IT_DMEIF1 ((uint32_t)0x10001100) -#define DMA_IT_TEIF1 ((uint32_t)0x10002200) -#define DMA_IT_HTIF1 ((uint32_t)0x10004400) -#define DMA_IT_TCIF1 ((uint32_t)0x10008800) -#define DMA_IT_FEIF2 ((uint32_t)0x90010000) -#define DMA_IT_DMEIF2 ((uint32_t)0x10041000) -#define DMA_IT_TEIF2 ((uint32_t)0x10082000) -#define DMA_IT_HTIF2 ((uint32_t)0x10104000) -#define DMA_IT_TCIF2 ((uint32_t)0x10208000) -#define DMA_IT_FEIF3 ((uint32_t)0x90400000) -#define DMA_IT_DMEIF3 ((uint32_t)0x11001000) -#define DMA_IT_TEIF3 ((uint32_t)0x12002000) -#define DMA_IT_HTIF3 ((uint32_t)0x14004000) -#define DMA_IT_TCIF3 ((uint32_t)0x18008000) -#define DMA_IT_FEIF4 ((uint32_t)0xA0000001) -#define DMA_IT_DMEIF4 ((uint32_t)0x20001004) -#define DMA_IT_TEIF4 ((uint32_t)0x20002008) -#define DMA_IT_HTIF4 ((uint32_t)0x20004010) -#define DMA_IT_TCIF4 ((uint32_t)0x20008020) -#define DMA_IT_FEIF5 ((uint32_t)0xA0000040) -#define DMA_IT_DMEIF5 ((uint32_t)0x20001100) -#define DMA_IT_TEIF5 ((uint32_t)0x20002200) -#define DMA_IT_HTIF5 ((uint32_t)0x20004400) -#define DMA_IT_TCIF5 ((uint32_t)0x20008800) -#define DMA_IT_FEIF6 ((uint32_t)0xA0010000) -#define DMA_IT_DMEIF6 ((uint32_t)0x20041000) -#define DMA_IT_TEIF6 ((uint32_t)0x20082000) -#define DMA_IT_HTIF6 ((uint32_t)0x20104000) -#define DMA_IT_TCIF6 ((uint32_t)0x20208000) -#define DMA_IT_FEIF7 ((uint32_t)0xA0400000) -#define DMA_IT_DMEIF7 ((uint32_t)0x21001000) -#define DMA_IT_TEIF7 ((uint32_t)0x22002000) -#define DMA_IT_HTIF7 ((uint32_t)0x24004000) -#define DMA_IT_TCIF7 ((uint32_t)0x28008000) - -#define IS_DMA_CLEAR_IT(IT) ((((IT) & 0x30000000) != 0x30000000) && \ - (((IT) & 0x30000000) != 0) && ((IT) != 0x00) && \ - (((IT) & 0x40820082) == 0x00)) - -#define IS_DMA_GET_IT(IT) (((IT) == DMA_IT_TCIF0) || ((IT) == DMA_IT_HTIF0) || \ - ((IT) == DMA_IT_TEIF0) || ((IT) == DMA_IT_DMEIF0) || \ - ((IT) == DMA_IT_FEIF0) || ((IT) == DMA_IT_TCIF1) || \ - ((IT) == DMA_IT_HTIF1) || ((IT) == DMA_IT_TEIF1) || \ - ((IT) == DMA_IT_DMEIF1)|| ((IT) == DMA_IT_FEIF1) || \ - ((IT) == DMA_IT_TCIF2) || ((IT) == DMA_IT_HTIF2) || \ - ((IT) == DMA_IT_TEIF2) || ((IT) == DMA_IT_DMEIF2) || \ - ((IT) == DMA_IT_FEIF2) || ((IT) == DMA_IT_TCIF3) || \ - ((IT) == DMA_IT_HTIF3) || ((IT) == DMA_IT_TEIF3) || \ - ((IT) == DMA_IT_DMEIF3)|| ((IT) == DMA_IT_FEIF3) || \ - ((IT) == DMA_IT_TCIF4) || ((IT) == DMA_IT_HTIF4) || \ - ((IT) == DMA_IT_TEIF4) || ((IT) == DMA_IT_DMEIF4) || \ - ((IT) == DMA_IT_FEIF4) || ((IT) == DMA_IT_TCIF5) || \ - ((IT) == DMA_IT_HTIF5) || ((IT) == DMA_IT_TEIF5) || \ - ((IT) == DMA_IT_DMEIF5)|| ((IT) == DMA_IT_FEIF5) || \ - ((IT) == DMA_IT_TCIF6) || ((IT) == DMA_IT_HTIF6) || \ - ((IT) == DMA_IT_TEIF6) || ((IT) == DMA_IT_DMEIF6) || \ - ((IT) == DMA_IT_FEIF6) || ((IT) == DMA_IT_TCIF7) || \ - ((IT) == DMA_IT_HTIF7) || ((IT) == DMA_IT_TEIF7) || \ - ((IT) == DMA_IT_DMEIF7)|| ((IT) == DMA_IT_FEIF7)) -/** - * @} - */ - - -/** @defgroup DMA_peripheral_increment_offset - * @{ - */ -#define DMA_PINCOS_Psize ((uint32_t)0x00000000) -#define DMA_PINCOS_WordAligned ((uint32_t)0x00008000) - -#define IS_DMA_PINCOS_SIZE(SIZE) (((SIZE) == DMA_PINCOS_Psize) || \ - ((SIZE) == DMA_PINCOS_WordAligned)) -/** - * @} - */ - - -/** @defgroup DMA_flow_controller_definitions - * @{ - */ -#define DMA_FlowCtrl_Memory ((uint32_t)0x00000000) -#define DMA_FlowCtrl_Peripheral ((uint32_t)0x00000020) - -#define IS_DMA_FLOW_CTRL(CTRL) (((CTRL) == DMA_FlowCtrl_Memory) || \ - ((CTRL) == DMA_FlowCtrl_Peripheral)) -/** - * @} - */ - - -/** @defgroup DMA_memory_targets_definitions - * @{ - */ -#define DMA_Memory_0 ((uint32_t)0x00000000) -#define DMA_Memory_1 ((uint32_t)0x00080000) - -#define IS_DMA_CURRENT_MEM(MEM) (((MEM) == DMA_Memory_0) || ((MEM) == DMA_Memory_1)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the DMA configuration to the default reset state *****/ -void DMA_DeInit(DMA_Stream_TypeDef* DMAy_Streamx); - -/* Initialization and Configuration functions *********************************/ -void DMA_Init(DMA_Stream_TypeDef* DMAy_Streamx, DMA_InitTypeDef* DMA_InitStruct); -void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct); -void DMA_Cmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); - -/* Optional Configuration functions *******************************************/ -void DMA_PeriphIncOffsetSizeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_Pincos); -void DMA_FlowControllerConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FlowCtrl); - -/* Data Counter functions *****************************************************/ -void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter); -uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx); - -/* Double Buffer mode functions ***********************************************/ -void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t Memory1BaseAddr, - uint32_t DMA_CurrentMemory); -void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); -void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t MemoryBaseAddr, - uint32_t DMA_MemoryTarget); -uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx); - -/* Interrupts and flags management functions **********************************/ -FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx); -uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx); -FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); -void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); -void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState); -ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); -void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_DMA_H */ - -/** - * @} - */ - -/** - * @} - */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_exti.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_exti.h deleted file mode 100644 index b6eb8539..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_exti.h +++ /dev/null @@ -1,183 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_exti.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the EXTI firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_EXTI_H -#define __STM32F4xx_EXTI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 value 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 EXTITrigger_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; - -/* Exported constants --------------------------------------------------------*/ - -/** @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 OTG FS Wakeup from suspend event */ -#define EXTI_Line19 ((uint32_t)0x80000) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */ -#define EXTI_Line20 ((uint32_t)0x00100000) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */ -#define EXTI_Line21 ((uint32_t)0x00200000) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */ -#define EXTI_Line22 ((uint32_t)0x00400000) /*!< External interrupt line 22 Connected to the RTC Wakeup event */ - -#define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFF800000) == 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) || \ - ((LINE) == EXTI_Line20) || ((LINE) == EXTI_Line21) ||\ - ((LINE) == EXTI_Line22)) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the EXTI configuration to the default reset state *****/ -void EXTI_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); -void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct); -void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); - -/* Interrupts and flags management functions **********************************/ -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 /* __STM32F4xx_EXTI_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_flash.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_flash.h deleted file mode 100644 index 55380b7a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_flash.h +++ /dev/null @@ -1,390 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_flash.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the FLASH - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_FLASH_H -#define __STM32F4xx_FLASH_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup FLASH - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/** - * @brief FLASH Status - */ -typedef enum -{ - FLASH_BUSY = 1, - FLASH_ERROR_PGS, - FLASH_ERROR_PGP, - FLASH_ERROR_PGA, - FLASH_ERROR_WRP, - FLASH_ERROR_PROGRAM, - FLASH_ERROR_OPERATION, - FLASH_COMPLETE -}FLASH_Status; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup FLASH_Exported_Constants - * @{ - */ - -/** @defgroup Flash_Latency - * @{ - */ -#define FLASH_Latency_0 ((uint8_t)0x0000) /*!< FLASH Zero Latency cycle */ -#define FLASH_Latency_1 ((uint8_t)0x0001) /*!< FLASH One Latency cycle */ -#define FLASH_Latency_2 ((uint8_t)0x0002) /*!< FLASH Two Latency cycles */ -#define FLASH_Latency_3 ((uint8_t)0x0003) /*!< FLASH Three Latency cycles */ -#define FLASH_Latency_4 ((uint8_t)0x0004) /*!< FLASH Four Latency cycles */ -#define FLASH_Latency_5 ((uint8_t)0x0005) /*!< FLASH Five Latency cycles */ -#define FLASH_Latency_6 ((uint8_t)0x0006) /*!< FLASH Six Latency cycles */ -#define FLASH_Latency_7 ((uint8_t)0x0007) /*!< FLASH Seven Latency cycles */ - -#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_Latency_0) || \ - ((LATENCY) == FLASH_Latency_1) || \ - ((LATENCY) == FLASH_Latency_2) || \ - ((LATENCY) == FLASH_Latency_3) || \ - ((LATENCY) == FLASH_Latency_4) || \ - ((LATENCY) == FLASH_Latency_5) || \ - ((LATENCY) == FLASH_Latency_6) || \ - ((LATENCY) == FLASH_Latency_7)) - -/** - * @} - */ - -/** @defgroup FLASH_Voltage_Range - * @{ - */ -#define VoltageRange_1 ((uint8_t)0x00) /*!< Device operating range: 1.8V to 2.1V */ -#define VoltageRange_2 ((uint8_t)0x01) /*!= 0x08000000) && ((ADDRESS) < 0x081FFFFF)) ||\ - (((ADDRESS) >= 0x1FFF7800) && ((ADDRESS) < 0x1FFF7A0F))) -/** - * @} - */ - -/** @defgroup Option_Bytes_Write_Protection - * @{ - */ -#define OB_WRP_Sector_0 ((uint32_t)0x00000001) /*!< Write protection of Sector0 */ -#define OB_WRP_Sector_1 ((uint32_t)0x00000002) /*!< Write protection of Sector1 */ -#define OB_WRP_Sector_2 ((uint32_t)0x00000004) /*!< Write protection of Sector2 */ -#define OB_WRP_Sector_3 ((uint32_t)0x00000008) /*!< Write protection of Sector3 */ -#define OB_WRP_Sector_4 ((uint32_t)0x00000010) /*!< Write protection of Sector4 */ -#define OB_WRP_Sector_5 ((uint32_t)0x00000020) /*!< Write protection of Sector5 */ -#define OB_WRP_Sector_6 ((uint32_t)0x00000040) /*!< Write protection of Sector6 */ -#define OB_WRP_Sector_7 ((uint32_t)0x00000080) /*!< Write protection of Sector7 */ -#define OB_WRP_Sector_8 ((uint32_t)0x00000100) /*!< Write protection of Sector8 */ -#define OB_WRP_Sector_9 ((uint32_t)0x00000200) /*!< Write protection of Sector9 */ -#define OB_WRP_Sector_10 ((uint32_t)0x00000400) /*!< Write protection of Sector10 */ -#define OB_WRP_Sector_11 ((uint32_t)0x00000800) /*!< Write protection of Sector11 */ -#define OB_WRP_Sector_12 ((uint32_t)0x00000001) /*!< Write protection of Sector12 */ -#define OB_WRP_Sector_13 ((uint32_t)0x00000002) /*!< Write protection of Sector13 */ -#define OB_WRP_Sector_14 ((uint32_t)0x00000004) /*!< Write protection of Sector14 */ -#define OB_WRP_Sector_15 ((uint32_t)0x00000008) /*!< Write protection of Sector15 */ -#define OB_WRP_Sector_16 ((uint32_t)0x00000010) /*!< Write protection of Sector16 */ -#define OB_WRP_Sector_17 ((uint32_t)0x00000020) /*!< Write protection of Sector17 */ -#define OB_WRP_Sector_18 ((uint32_t)0x00000040) /*!< Write protection of Sector18 */ -#define OB_WRP_Sector_19 ((uint32_t)0x00000080) /*!< Write protection of Sector19 */ -#define OB_WRP_Sector_20 ((uint32_t)0x00000100) /*!< Write protection of Sector20 */ -#define OB_WRP_Sector_21 ((uint32_t)0x00000200) /*!< Write protection of Sector21 */ -#define OB_WRP_Sector_22 ((uint32_t)0x00000400) /*!< Write protection of Sector22 */ -#define OB_WRP_Sector_23 ((uint32_t)0x00000800) /*!< Write protection of Sector23 */ -#define OB_WRP_Sector_All ((uint32_t)0x00000FFF) /*!< Write protection of all Sectors */ - -#define IS_OB_WRP(SECTOR)((((SECTOR) & (uint32_t)0xFFFFF000) == 0x00000000) && ((SECTOR) != 0x00000000)) -/** - * @} - */ - -/** @defgroup FLASH_Option_Bytes_Read_Protection - * @{ - */ -#define OB_RDP_Level_0 ((uint8_t)0xAA) -#define OB_RDP_Level_1 ((uint8_t)0x55) -/*#define OB_RDP_Level_2 ((uint8_t)0xCC)*/ /*!< Warning: When enabling read protection level 2 - it's no more possible to go back to level 1 or 0 */ -#define IS_OB_RDP(LEVEL) (((LEVEL) == OB_RDP_Level_0)||\ - ((LEVEL) == OB_RDP_Level_1))/*||\ - ((LEVEL) == OB_RDP_Level_2))*/ -/** - * @} - */ - -/** @defgroup FLASH_Option_Bytes_IWatchdog - * @{ - */ -#define OB_IWDG_SW ((uint8_t)0x20) /*!< Software IWDG selected */ -#define OB_IWDG_HW ((uint8_t)0x00) /*!< Hardware IWDG selected */ -#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) -/** - * @} - */ - -/** @defgroup FLASH_Option_Bytes_nRST_STOP - * @{ - */ -#define OB_STOP_NoRST ((uint8_t)0x40) /*!< No reset generated when entering in STOP */ -#define OB_STOP_RST ((uint8_t)0x00) /*!< Reset generated when entering in STOP */ -#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NoRST) || ((SOURCE) == OB_STOP_RST)) -/** - * @} - */ - - -/** @defgroup FLASH_Option_Bytes_nRST_STDBY - * @{ - */ -#define OB_STDBY_NoRST ((uint8_t)0x80) /*!< No reset generated when entering in STANDBY */ -#define OB_STDBY_RST ((uint8_t)0x00) /*!< Reset generated when entering in STANDBY */ -#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NoRST) || ((SOURCE) == OB_STDBY_RST)) -/** - * @} - */ - -/** @defgroup FLASH_BOR_Reset_Level - * @{ - */ -#define OB_BOR_LEVEL3 ((uint8_t)0x00) /*!< Supply voltage ranges from 2.70 to 3.60 V */ -#define OB_BOR_LEVEL2 ((uint8_t)0x04) /*!< Supply voltage ranges from 2.40 to 2.70 V */ -#define OB_BOR_LEVEL1 ((uint8_t)0x08) /*!< Supply voltage ranges from 2.10 to 2.40 V */ -#define OB_BOR_OFF ((uint8_t)0x0C) /*!< Supply voltage ranges from 1.62 to 2.10 V */ -#define IS_OB_BOR(LEVEL) (((LEVEL) == OB_BOR_LEVEL1) || ((LEVEL) == OB_BOR_LEVEL2) ||\ - ((LEVEL) == OB_BOR_LEVEL3) || ((LEVEL) == OB_BOR_OFF)) -/** - * @} - */ - -/** @defgroup FLASH_Interrupts - * @{ - */ -#define FLASH_IT_EOP ((uint32_t)0x01000000) /*!< End of FLASH Operation Interrupt source */ -#define FLASH_IT_ERR ((uint32_t)0x02000000) /*!< Error Interrupt source */ -#define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0xFCFFFFFF) == 0x00000000) && ((IT) != 0x00000000)) -/** - * @} - */ - -/** @defgroup FLASH_Flags - * @{ - */ -#define FLASH_FLAG_EOP ((uint32_t)0x00000001) /*!< FLASH End of Operation flag */ -#define FLASH_FLAG_OPERR ((uint32_t)0x00000002) /*!< FLASH operation Error flag */ -#define FLASH_FLAG_WRPERR ((uint32_t)0x00000010) /*!< FLASH Write protected error flag */ -#define FLASH_FLAG_PGAERR ((uint32_t)0x00000020) /*!< FLASH Programming Alignment error flag */ -#define FLASH_FLAG_PGPERR ((uint32_t)0x00000040) /*!< FLASH Programming Parallelism error flag */ -#define FLASH_FLAG_PGSERR ((uint32_t)0x00000080) /*!< FLASH Programming Sequence error flag */ -#define FLASH_FLAG_BSY ((uint32_t)0x00010000) /*!< FLASH Busy flag */ -#define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFE0C) == 0x00000000) && ((FLAG) != 0x00000000)) -#define IS_FLASH_GET_FLAG(FLAG) (((FLAG) == FLASH_FLAG_EOP) || ((FLAG) == FLASH_FLAG_OPERR) || \ - ((FLAG) == FLASH_FLAG_WRPERR) || ((FLAG) == FLASH_FLAG_PGAERR) || \ - ((FLAG) == FLASH_FLAG_PGPERR) || ((FLAG) == FLASH_FLAG_PGSERR) || \ - ((FLAG) == FLASH_FLAG_BSY)) -/** - * @} - */ - -/** @defgroup FLASH_Program_Parallelism - * @{ - */ -#define FLASH_PSIZE_BYTE ((uint32_t)0x00000000) -#define FLASH_PSIZE_HALF_WORD ((uint32_t)0x00000100) -#define FLASH_PSIZE_WORD ((uint32_t)0x00000200) -#define FLASH_PSIZE_DOUBLE_WORD ((uint32_t)0x00000300) -#define CR_PSIZE_MASK ((uint32_t)0xFFFFFCFF) -/** - * @} - */ - -/** @defgroup FLASH_Keys - * @{ - */ -#define RDP_KEY ((uint16_t)0x00A5) -#define FLASH_KEY1 ((uint32_t)0x45670123) -#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) -#define FLASH_OPT_KEY1 ((uint32_t)0x08192A3B) -#define FLASH_OPT_KEY2 ((uint32_t)0x4C5D6E7F) -/** - * @} - */ - -/** - * @brief ACR register byte 0 (Bits[7:0]) base address - */ -#define ACR_BYTE0_ADDRESS ((uint32_t)0x40023C00) -/** - * @brief OPTCR register byte 0 (Bits[7:0]) base address - */ -#define OPTCR_BYTE0_ADDRESS ((uint32_t)0x40023C14) -/** - * @brief OPTCR register byte 1 (Bits[15:8]) base address - */ -#define OPTCR_BYTE1_ADDRESS ((uint32_t)0x40023C15) -/** - * @brief OPTCR register byte 2 (Bits[23:16]) base address - */ -#define OPTCR_BYTE2_ADDRESS ((uint32_t)0x40023C16) -/** - * @brief OPTCR register byte 3 (Bits[31:24]) base address - */ -#define OPTCR_BYTE3_ADDRESS ((uint32_t)0x40023C17) - -/** - * @brief OPTCR1 register byte 0 (Bits[7:0]) base address - */ -#define OPTCR1_BYTE2_ADDRESS ((uint32_t)0x40023C1A) - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* FLASH Interface configuration functions ************************************/ -void FLASH_SetLatency(uint32_t FLASH_Latency); -void FLASH_PrefetchBufferCmd(FunctionalState NewState); -void FLASH_InstructionCacheCmd(FunctionalState NewState); -void FLASH_DataCacheCmd(FunctionalState NewState); -void FLASH_InstructionCacheReset(void); -void FLASH_DataCacheReset(void); - -/* FLASH Memory Programming functions *****************************************/ -void FLASH_Unlock(void); -void FLASH_Lock(void); -FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange); -FLASH_Status FLASH_EraseAllSectors(uint8_t VoltageRange); -FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data); -FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); -FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data); -FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data); - -/* Option Bytes Programming functions *****************************************/ -void FLASH_OB_Unlock(void); -void FLASH_OB_Lock(void); -void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState); -void FLASH_OB_WRP1Config(uint32_t OB_WRP, FunctionalState NewState); -void FLASH_OB_RDPConfig(uint8_t OB_RDP); -void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY); -void FLASH_OB_BORConfig(uint8_t OB_BOR); -FLASH_Status FLASH_OB_Launch(void); -uint8_t FLASH_OB_GetUser(void); -uint16_t FLASH_OB_GetWRP(void); -uint16_t FLASH_OB_GetWRP1(void); -FlagStatus FLASH_OB_GetRDP(void); -uint8_t FLASH_OB_GetBOR(void); - -/* Interrupts and flags management functions **********************************/ -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(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_FLASH_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_fsmc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_fsmc.h deleted file mode 100644 index bd89a4b0..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_fsmc.h +++ /dev/null @@ -1,675 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_fsmc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the FSMC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_FSMC_H -#define __STM32F4xx_FSMC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 This parameter 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 This parameter 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 This parameter 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 This parameter 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 parameter value 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 data bus 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 Extended Mode is not used*/ - - FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct; /*!< Timing Parameters for write access if the Extended Mode 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 de-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 number between 0x00 and 0xFF */ - - uint32_t FSMC_HiZSetupTime; /*!< Defines the number of HCLK clock cycles during which the - data bus 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @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 FSMC_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 FSMC_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)) -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* NOR/SRAM Controller functions **********************************************/ -void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank); -void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); -void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); -void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState); - -/* NAND Controller functions **************************************************/ -void FSMC_NANDDeInit(uint32_t FSMC_Bank); -void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct); -void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct); -void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState); -void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState); -uint32_t FSMC_GetECC(uint32_t FSMC_Bank); - -/* PCCARD Controller functions ************************************************/ -void FSMC_PCCARDDeInit(void); -void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct); -void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct); -void FSMC_PCCARDCmd(FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -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 /*__STM32F4xx_FSMC_H */ -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h deleted file mode 100644 index 0cf96c5b..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h +++ /dev/null @@ -1,423 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_gpio.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the GPIO firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_GPIO_H -#define __STM32F4xx_GPIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup GPIO - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \ - ((PERIPH) == GPIOB) || \ - ((PERIPH) == GPIOC) || \ - ((PERIPH) == GPIOD) || \ - ((PERIPH) == GPIOE) || \ - ((PERIPH) == GPIOF) || \ - ((PERIPH) == GPIOG) || \ - ((PERIPH) == GPIOH) || \ - ((PERIPH) == GPIOI)) - - -/** - * @brief GPIO Configuration Mode enumeration - */ -typedef enum -{ - GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */ - GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */ - GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */ - GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */ -}GPIOMode_TypeDef; -#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN) || ((MODE) == GPIO_Mode_OUT) || \ - ((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN)) - -/** - * @brief GPIO Output type enumeration - */ -typedef enum -{ - GPIO_OType_PP = 0x00, - GPIO_OType_OD = 0x01 -}GPIOOType_TypeDef; -#define IS_GPIO_OTYPE(OTYPE) (((OTYPE) == GPIO_OType_PP) || ((OTYPE) == GPIO_OType_OD)) - - -/** - * @brief GPIO Output Maximum frequency enumeration - */ -typedef enum -{ - GPIO_Speed_2MHz = 0x00, /*!< Low speed */ - GPIO_Speed_25MHz = 0x01, /*!< Medium speed */ - GPIO_Speed_50MHz = 0x02, /*!< Fast speed */ - GPIO_Speed_100MHz = 0x03 /*!< High speed on 30 pF (80 MHz Output max speed on 15 pF) */ -}GPIOSpeed_TypeDef; -#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_2MHz) || ((SPEED) == GPIO_Speed_25MHz) || \ - ((SPEED) == GPIO_Speed_50MHz)|| ((SPEED) == GPIO_Speed_100MHz)) - -/** - * @brief GPIO Configuration PullUp PullDown enumeration - */ -typedef enum -{ - GPIO_PuPd_NOPULL = 0x00, - GPIO_PuPd_UP = 0x01, - GPIO_PuPd_DOWN = 0x02 -}GPIOPuPd_TypeDef; -#define IS_GPIO_PUPD(PUPD) (((PUPD) == GPIO_PuPd_NOPULL) || ((PUPD) == GPIO_PuPd_UP) || \ - ((PUPD) == GPIO_PuPd_DOWN)) - -/** - * @brief GPIO 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)) - - -/** - * @brief GPIO Init structure definition - */ -typedef struct -{ - uint32_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured. - This parameter can be any value of @ref GPIO_pins_define */ - - GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins. - This parameter can be a value of @ref GPIOMode_TypeDef */ - - GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins. - This parameter can be a value of @ref GPIOSpeed_TypeDef */ - - GPIOOType_TypeDef GPIO_OType; /*!< Specifies the operating output type for the selected pins. - This parameter can be a value of @ref GPIOOType_TypeDef */ - - GPIOPuPd_TypeDef GPIO_PuPd; /*!< Specifies the operating Pull-up/Pull down for the selected pins. - This parameter can be a value of @ref GPIOPuPd_TypeDef */ -}GPIO_InitTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @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_Pin_sources - * @{ - */ -#define GPIO_PinSource0 ((uint8_t)0x00) -#define GPIO_PinSource1 ((uint8_t)0x01) -#define GPIO_PinSource2 ((uint8_t)0x02) -#define GPIO_PinSource3 ((uint8_t)0x03) -#define GPIO_PinSource4 ((uint8_t)0x04) -#define GPIO_PinSource5 ((uint8_t)0x05) -#define GPIO_PinSource6 ((uint8_t)0x06) -#define GPIO_PinSource7 ((uint8_t)0x07) -#define GPIO_PinSource8 ((uint8_t)0x08) -#define GPIO_PinSource9 ((uint8_t)0x09) -#define GPIO_PinSource10 ((uint8_t)0x0A) -#define GPIO_PinSource11 ((uint8_t)0x0B) -#define GPIO_PinSource12 ((uint8_t)0x0C) -#define GPIO_PinSource13 ((uint8_t)0x0D) -#define GPIO_PinSource14 ((uint8_t)0x0E) -#define GPIO_PinSource15 ((uint8_t)0x0F) - -#define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \ - ((PINSOURCE) == GPIO_PinSource1) || \ - ((PINSOURCE) == GPIO_PinSource2) || \ - ((PINSOURCE) == GPIO_PinSource3) || \ - ((PINSOURCE) == GPIO_PinSource4) || \ - ((PINSOURCE) == GPIO_PinSource5) || \ - ((PINSOURCE) == GPIO_PinSource6) || \ - ((PINSOURCE) == GPIO_PinSource7) || \ - ((PINSOURCE) == GPIO_PinSource8) || \ - ((PINSOURCE) == GPIO_PinSource9) || \ - ((PINSOURCE) == GPIO_PinSource10) || \ - ((PINSOURCE) == GPIO_PinSource11) || \ - ((PINSOURCE) == GPIO_PinSource12) || \ - ((PINSOURCE) == GPIO_PinSource13) || \ - ((PINSOURCE) == GPIO_PinSource14) || \ - ((PINSOURCE) == GPIO_PinSource15)) -/** - * @} - */ - -/** @defgroup GPIO_Alternat_function_selection_define - * @{ - */ -/** - * @brief AF 0 selection - */ -#define GPIO_AF_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ -#define GPIO_AF_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ -#define GPIO_AF_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ -#define GPIO_AF_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ -#define GPIO_AF_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ - -/** - * @brief AF 1 selection - */ -#define GPIO_AF_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ -#define GPIO_AF_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ - -/** - * @brief AF 2 selection - */ -#define GPIO_AF_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ -#define GPIO_AF_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ -#define GPIO_AF_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ - -/** - * @brief AF 3 selection - */ -#define GPIO_AF_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ -#define GPIO_AF_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ -#define GPIO_AF_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ -#define GPIO_AF_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ - -/** - * @brief AF 4 selection - */ -#define GPIO_AF_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ -#define GPIO_AF_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ -#define GPIO_AF_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ - -/** - * @brief AF 5 selection - */ -#define GPIO_AF_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ -#define GPIO_AF_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ -#define GPIO_AF_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ -#define GPIO_AF_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */ -#define GPIO_AF_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */ - -/** - * @brief AF 6 selection - */ -#define GPIO_AF_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ - -/** - * @brief AF 7 selection - */ -#define GPIO_AF_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ -#define GPIO_AF_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ -#define GPIO_AF_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ -#define GPIO_AF_I2S3ext ((uint8_t)0x07) /* I2S3ext Alternate Function mapping */ - -/** - * @brief AF 8 selection - */ -#define GPIO_AF_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ -#define GPIO_AF_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ -#define GPIO_AF_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ -#define GPIO_AF_UART7 ((uint8_t)0x08) /* UART7 Alternate Function mapping */ -#define GPIO_AF_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ - -/** - * @brief AF 9 selection - */ -#define GPIO_AF_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ -#define GPIO_AF_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ -#define GPIO_AF_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ -#define GPIO_AF_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ -#define GPIO_AF_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ - -/** - * @brief AF 10 selection - */ -#define GPIO_AF_OTG_FS ((uint8_t)0xA) /* OTG_FS Alternate Function mapping */ -#define GPIO_AF_OTG_HS ((uint8_t)0xA) /* OTG_HS Alternate Function mapping */ - -/** - * @brief AF 11 selection - */ -#define GPIO_AF_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ - -/** - * @brief AF 12 selection - */ -#define GPIO_AF_FSMC ((uint8_t)0xC) /* FSMC Alternate Function mapping */ - -#define GPIO_AF_OTG_HS_FS ((uint8_t)0xC) /* OTG HS configured in FS, Alternate Function mapping */ -#define GPIO_AF_SDIO ((uint8_t)0xC) /* SDIO Alternate Function mapping */ - -/** - * @brief AF 13 selection - */ -#define GPIO_AF_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ - -/** - * @brief AF 15 selection - */ -#define GPIO_AF_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ - -#define IS_GPIO_AF(AF) (((AF) == GPIO_AF_RTC_50Hz) || ((AF) == GPIO_AF_TIM14) || \ - ((AF) == GPIO_AF_MCO) || ((AF) == GPIO_AF_TAMPER) || \ - ((AF) == GPIO_AF_SWJ) || ((AF) == GPIO_AF_TRACE) || \ - ((AF) == GPIO_AF_TIM1) || ((AF) == GPIO_AF_TIM2) || \ - ((AF) == GPIO_AF_TIM3) || ((AF) == GPIO_AF_TIM4) || \ - ((AF) == GPIO_AF_TIM5) || ((AF) == GPIO_AF_TIM8) || \ - ((AF) == GPIO_AF_I2C1) || ((AF) == GPIO_AF_I2C2) || \ - ((AF) == GPIO_AF_I2C3) || ((AF) == GPIO_AF_SPI1) || \ - ((AF) == GPIO_AF_SPI2) || ((AF) == GPIO_AF_TIM13) || \ - ((AF) == GPIO_AF_SPI3) || ((AF) == GPIO_AF_TIM14) || \ - ((AF) == GPIO_AF_USART1) || ((AF) == GPIO_AF_USART2) || \ - ((AF) == GPIO_AF_USART3) || ((AF) == GPIO_AF_UART4) || \ - ((AF) == GPIO_AF_UART5) || ((AF) == GPIO_AF_USART6) || \ - ((AF) == GPIO_AF_CAN1) || ((AF) == GPIO_AF_CAN2) || \ - ((AF) == GPIO_AF_OTG_FS) || ((AF) == GPIO_AF_OTG_HS) || \ - ((AF) == GPIO_AF_ETH) || ((AF) == GPIO_AF_OTG_HS_FS) || \ - ((AF) == GPIO_AF_SDIO) || ((AF) == GPIO_AF_DCMI) || \ - ((AF) == GPIO_AF_EVENTOUT) || ((AF) == GPIO_AF_SPI4) || \ - ((AF) == GPIO_AF_SPI5) || ((AF) == GPIO_AF_SPI6) || \ - ((AF) == GPIO_AF_UART7) || ((AF) == GPIO_AF_UART8) || \ - ((AF) == GPIO_AF_FSMC)) - -/** - * @} - */ - -/** @defgroup GPIO_Legacy - * @{ - */ - -#define GPIO_Mode_AIN GPIO_Mode_AN - -#define GPIO_AF_OTG1_FS GPIO_AF_OTG_FS -#define GPIO_AF_OTG2_HS GPIO_AF_OTG_HS -#define GPIO_AF_OTG2_FS GPIO_AF_OTG_HS_FS - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the GPIO configuration to the default reset state ****/ -void GPIO_DeInit(GPIO_TypeDef* GPIOx); - -/* Initialization and Configuration functions *********************************/ -void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); -void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); -void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); - -/* GPIO Read and Write functions **********************************************/ -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_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); - -/* GPIO Alternate functions configuration function ****************************/ -void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_GPIO_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_hash.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_hash.h deleted file mode 100644 index 8a05ed5d..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_hash.h +++ /dev/null @@ -1,257 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hash.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the HASH - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HASH_H -#define __STM32F4xx_HASH_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup HASH - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief HASH Init structure definition - */ -typedef struct -{ - uint32_t HASH_AlgoSelection; /*!< SHA-1, SHA-224, SHA-256 or MD5. This parameter - can be a value of @ref HASH_Algo_Selection */ - uint32_t HASH_AlgoMode; /*!< HASH or HMAC. This parameter can be a value - of @ref HASH_processor_Algorithm_Mode */ - uint32_t HASH_DataType; /*!< 32-bit data, 16-bit data, 8-bit data or - bit string. This parameter can be a value of - @ref HASH_Data_Type */ - uint32_t HASH_HMACKeyType; /*!< HMAC Short key or HMAC Long Key. This parameter - can be a value of @ref HASH_HMAC_Long_key_only_for_HMAC_mode */ -}HASH_InitTypeDef; - -/** - * @brief HASH message digest result structure definition - */ -typedef struct -{ - uint32_t Data[8]; /*!< Message digest result : 8x 32bit wors for SHA-256, - 7x 32bit wors for SHA-224, - 5x 32bit words for SHA-1 or - 4x 32bit words for MD5 */ -} HASH_MsgDigest; - -/** - * @brief HASH context swapping structure definition - */ -typedef struct -{ - uint32_t HASH_IMR; - uint32_t HASH_STR; - uint32_t HASH_CR; - uint32_t HASH_CSR[54]; -}HASH_Context; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup HASH_Exported_Constants - * @{ - */ - -/** @defgroup HASH_Algo_Selection - * @{ - */ -#define HASH_AlgoSelection_SHA1 ((uint32_t)0x0000) /*!< HASH function is SHA1 */ -#define HASH_AlgoSelection_SHA224 HASH_CR_ALGO_1 /*!< HASH function is SHA224 */ -#define HASH_AlgoSelection_SHA256 HASH_CR_ALGO /*!< HASH function is SHA256 */ -#define HASH_AlgoSelection_MD5 HASH_CR_ALGO_0 /*!< HASH function is MD5 */ - -#define IS_HASH_ALGOSELECTION(ALGOSELECTION) (((ALGOSELECTION) == HASH_AlgoSelection_SHA1) || \ - ((ALGOSELECTION) == HASH_AlgoSelection_SHA224) || \ - ((ALGOSELECTION) == HASH_AlgoSelection_SHA256) || \ - ((ALGOSELECTION) == HASH_AlgoSelection_MD5)) -/** - * @} - */ - -/** @defgroup HASH_processor_Algorithm_Mode - * @{ - */ -#define HASH_AlgoMode_HASH ((uint32_t)0x00000000) /*!< Algorithm is HASH */ -#define HASH_AlgoMode_HMAC HASH_CR_MODE /*!< Algorithm is HMAC */ - -#define IS_HASH_ALGOMODE(ALGOMODE) (((ALGOMODE) == HASH_AlgoMode_HASH) || \ - ((ALGOMODE) == HASH_AlgoMode_HMAC)) -/** - * @} - */ - -/** @defgroup HASH_Data_Type - * @{ - */ -#define HASH_DataType_32b ((uint32_t)0x0000) /*!< 32-bit data. No swapping */ -#define HASH_DataType_16b HASH_CR_DATATYPE_0 /*!< 16-bit data. Each half word is swapped */ -#define HASH_DataType_8b HASH_CR_DATATYPE_1 /*!< 8-bit data. All bytes are swapped */ -#define HASH_DataType_1b HASH_CR_DATATYPE /*!< 1-bit data. In the word all bits are swapped */ - -#define IS_HASH_DATATYPE(DATATYPE) (((DATATYPE) == HASH_DataType_32b)|| \ - ((DATATYPE) == HASH_DataType_16b)|| \ - ((DATATYPE) == HASH_DataType_8b) || \ - ((DATATYPE) == HASH_DataType_1b)) -/** - * @} - */ - -/** @defgroup HASH_HMAC_Long_key_only_for_HMAC_mode - * @{ - */ -#define HASH_HMACKeyType_ShortKey ((uint32_t)0x00000000) /*!< HMAC Key is <= 64 bytes */ -#define HASH_HMACKeyType_LongKey HASH_CR_LKEY /*!< HMAC Key is > 64 bytes */ - -#define IS_HASH_HMAC_KEYTYPE(KEYTYPE) (((KEYTYPE) == HASH_HMACKeyType_ShortKey) || \ - ((KEYTYPE) == HASH_HMACKeyType_LongKey)) -/** - * @} - */ - -/** @defgroup Number_of_valid_bits_in_last_word_of_the_message - * @{ - */ -#define IS_HASH_VALIDBITSNUMBER(VALIDBITS) ((VALIDBITS) <= 0x1F) - -/** - * @} - */ - -/** @defgroup HASH_interrupts_definition - * @{ - */ -#define HASH_IT_DINI HASH_IMR_DINIM /*!< A new block can be entered into the input buffer (DIN) */ -#define HASH_IT_DCI HASH_IMR_DCIM /*!< Digest calculation complete */ - -#define IS_HASH_IT(IT) ((((IT) & (uint32_t)0xFFFFFFFC) == 0x00000000) && ((IT) != 0x00000000)) -#define IS_HASH_GET_IT(IT) (((IT) == HASH_IT_DINI) || ((IT) == HASH_IT_DCI)) - -/** - * @} - */ - -/** @defgroup HASH_flags_definition - * @{ - */ -#define HASH_FLAG_DINIS HASH_SR_DINIS /*!< 16 locations are free in the DIN : A new block can be entered into the input buffer */ -#define HASH_FLAG_DCIS HASH_SR_DCIS /*!< Digest calculation complete */ -#define HASH_FLAG_DMAS HASH_SR_DMAS /*!< DMA interface is enabled (DMAE=1) or a transfer is ongoing */ -#define HASH_FLAG_BUSY HASH_SR_BUSY /*!< The hash core is Busy : processing a block of data */ -#define HASH_FLAG_DINNE HASH_CR_DINNE /*!< DIN not empty : The input buffer contains at least one word of data */ - -#define IS_HASH_GET_FLAG(FLAG) (((FLAG) == HASH_FLAG_DINIS) || \ - ((FLAG) == HASH_FLAG_DCIS) || \ - ((FLAG) == HASH_FLAG_DMAS) || \ - ((FLAG) == HASH_FLAG_BUSY) || \ - ((FLAG) == HASH_FLAG_DINNE)) - -#define IS_HASH_CLEAR_FLAG(FLAG)(((FLAG) == HASH_FLAG_DINIS) || \ - ((FLAG) == HASH_FLAG_DCIS)) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the HASH configuration to the default reset state ****/ -void HASH_DeInit(void); - -/* HASH Configuration function ************************************************/ -void HASH_Init(HASH_InitTypeDef* HASH_InitStruct); -void HASH_StructInit(HASH_InitTypeDef* HASH_InitStruct); -void HASH_Reset(void); - -/* HASH Message Digest generation functions ***********************************/ -void HASH_DataIn(uint32_t Data); -uint8_t HASH_GetInFIFOWordsNbr(void); -void HASH_SetLastWordValidBitsNbr(uint16_t ValidNumber); -void HASH_StartDigest(void); -void HASH_AutoStartDigest(FunctionalState NewState); -void HASH_GetDigest(HASH_MsgDigest* HASH_MessageDigest); - -/* HASH Context swapping functions ********************************************/ -void HASH_SaveContext(HASH_Context* HASH_ContextSave); -void HASH_RestoreContext(HASH_Context* HASH_ContextRestore); - -/* HASH DMA interface function ************************************************/ -void HASH_DMACmd(FunctionalState NewState); - -/* HASH Interrupts and flags management functions *****************************/ -void HASH_ITConfig(uint32_t HASH_IT, FunctionalState NewState); -FlagStatus HASH_GetFlagStatus(uint32_t HASH_FLAG); -void HASH_ClearFlag(uint32_t HASH_FLAG); -ITStatus HASH_GetITStatus(uint32_t HASH_IT); -void HASH_ClearITPendingBit(uint32_t HASH_IT); - -/* High Level SHA1 functions **************************************************/ -ErrorStatus HASH_SHA1(uint8_t *Input, uint32_t Ilen, uint8_t Output[20]); -ErrorStatus HMAC_SHA1(uint8_t *Key, uint32_t Keylen, - uint8_t *Input, uint32_t Ilen, - uint8_t Output[20]); - -/* High Level MD5 functions ***************************************************/ -ErrorStatus HASH_MD5(uint8_t *Input, uint32_t Ilen, uint8_t Output[16]); -ErrorStatus HMAC_MD5(uint8_t *Key, uint32_t Keylen, - uint8_t *Input, uint32_t Ilen, - uint8_t Output[16]); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_HASH_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h deleted file mode 100644 index 26f836d7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h +++ /dev/null @@ -1,711 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_i2c.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the I2C firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_I2C_H -#define __STM32F4xx_I2C_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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; - -/* Exported constants --------------------------------------------------------*/ - - -/** @defgroup I2C_Exported_Constants - * @{ - */ - -#define IS_I2C_ALL_PERIPH(PERIPH) (((PERIPH) == I2C1) || \ - ((PERIPH) == I2C2) || \ - ((PERIPH) == I2C3)) - -/** @defgroup I2C_Digital_Filter - * @{ - */ - -#define IS_I2C_DIGITAL_FILTER(FILTER) ((FILTER) <= 0x0000000F) -/** - * @} - */ - - -/** @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_NACK_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_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_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)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the I2C configuration to the default reset state *****/ -void I2C_DeInit(I2C_TypeDef* I2Cx); - -/* Initialization and Configuration functions *********************************/ -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_DigitalFilterConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DigitalFilter); -void I2C_AnalogFilterCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction); -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_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle); -void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition); -void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert); -void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); - -/* Data transfers functions ***************************************************/ -void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data); -uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx); - -/* PEC management functions ***************************************************/ -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); - -/* DMA transfers management functions *****************************************/ -void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); - -/* Interrupts, events and flags management functions **************************/ -uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register); -void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState); - -/* - =============================================================================== - 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 (RM0090). - - 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 the - I2Cx_ER_IRQHandler() function 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()) - -------------------------------------------------------------------- - 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 - this file 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()) - ----------------------------------------------------------------------- - - 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 /*__STM32F4xx_I2C_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_iwdg.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_iwdg.h deleted file mode 100644 index e0e69661..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_iwdg.h +++ /dev/null @@ -1,131 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_iwdg.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the IWDG - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_IWDG_H -#define __STM32F4xx_IWDG_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup IWDG - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @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) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Prescaler and Counter configuration 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); - -/* IWDG activation function ***************************************************/ -void IWDG_Enable(void); - -/* Flag management function ***************************************************/ -FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_IWDG_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_pwr.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_pwr.h deleted file mode 100644 index 0212501f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_pwr.h +++ /dev/null @@ -1,188 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_pwr.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the PWR firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_PWR_H -#define __STM32F4xx_PWR_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup PWR - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup PWR_Exported_Constants - * @{ - */ - -/** @defgroup PWR_PVD_detection_level - * @{ - */ - -#define PWR_PVDLevel_0 PWR_CR_PLS_LEV0 -#define PWR_PVDLevel_1 PWR_CR_PLS_LEV1 -#define PWR_PVDLevel_2 PWR_CR_PLS_LEV2 -#define PWR_PVDLevel_3 PWR_CR_PLS_LEV3 -#define PWR_PVDLevel_4 PWR_CR_PLS_LEV4 -#define PWR_PVDLevel_5 PWR_CR_PLS_LEV5 -#define PWR_PVDLevel_6 PWR_CR_PLS_LEV6 -#define PWR_PVDLevel_7 PWR_CR_PLS_LEV7 - -#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLevel_0) || ((LEVEL) == PWR_PVDLevel_1)|| \ - ((LEVEL) == PWR_PVDLevel_2) || ((LEVEL) == PWR_PVDLevel_3)|| \ - ((LEVEL) == PWR_PVDLevel_4) || ((LEVEL) == PWR_PVDLevel_5)|| \ - ((LEVEL) == PWR_PVDLevel_6) || ((LEVEL) == PWR_PVDLevel_7)) -/** - * @} - */ - - -/** @defgroup PWR_Regulator_state_in_STOP_mode - * @{ - */ - -#define PWR_Regulator_ON ((uint32_t)0x00000000) -#define PWR_Regulator_LowPower PWR_CR_LPDS -#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_Regulator_ON) || \ - ((REGULATOR) == PWR_Regulator_LowPower)) -/** - * @} - */ - -/** @defgroup PWR_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_Regulator_Voltage_Scale - * @{ - */ - -#define PWR_Regulator_Voltage_Scale1 ((uint32_t)0x0000C000) -#define PWR_Regulator_Voltage_Scale2 ((uint32_t)0x00008000) -#define PWR_Regulator_Voltage_Scale3 ((uint32_t)0x00004000) -#define IS_PWR_REGULATOR_VOLTAGE(VOLTAGE) (((VOLTAGE) == PWR_Regulator_Voltage_Scale1) || \ - ((VOLTAGE) == PWR_Regulator_Voltage_Scale2) || \ - ((VOLTAGE) == PWR_Regulator_Voltage_Scale3)) - -/** - * @} - */ - -/** @defgroup PWR_Flag - * @{ - */ - -#define PWR_FLAG_WU PWR_CSR_WUF -#define PWR_FLAG_SB PWR_CSR_SBF -#define PWR_FLAG_PVDO PWR_CSR_PVDO -#define PWR_FLAG_BRR PWR_CSR_BRR -#define PWR_FLAG_VOSRDY PWR_CSR_VOSRDY - -/** @defgroup PWR_Flag_Legacy - * @{ - */ -#define PWR_FLAG_REGRDY PWR_FLAG_VOSRDY -/** - * @} - */ - -#define IS_PWR_GET_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB) || \ - ((FLAG) == PWR_FLAG_PVDO) || ((FLAG) == PWR_FLAG_BRR) || \ - ((FLAG) == PWR_FLAG_VOSRDY)) - -#define IS_PWR_CLEAR_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the PWR configuration to the default reset state ******/ -void PWR_DeInit(void); - -/* Backup Domain Access function **********************************************/ -void PWR_BackupAccessCmd(FunctionalState NewState); - -/* PVD configuration functions ************************************************/ -void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); -void PWR_PVDCmd(FunctionalState NewState); - -/* WakeUp pins configuration functions ****************************************/ -void PWR_WakeUpPinCmd(FunctionalState NewState); - -/* Main and Backup Regulators configuration functions *************************/ -void PWR_BackupRegulatorCmd(FunctionalState NewState); -void PWR_MainRegulatorModeConfig(uint32_t PWR_Regulator_Voltage); - -/* FLASH Power Down configuration functions ***********************************/ -void PWR_FlashPowerDownCmd(FunctionalState NewState); - -/* Low Power modes configuration functions ************************************/ -void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); -void PWR_EnterSTANDBYMode(void); - -/* Flags management functions *************************************************/ -FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); -void PWR_ClearFlag(uint32_t PWR_FLAG); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_PWR_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h deleted file mode 100644 index 0cbeab2f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h +++ /dev/null @@ -1,545 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rcc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the RCC firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_RCC_H -#define __STM32F4xx_RCC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup RCC - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -typedef struct -{ - uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency expressed in Hz */ - uint32_t HCLK_Frequency; /*!< HCLK clock frequency expressed in Hz */ - uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency expressed in Hz */ - uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency expressed in Hz */ -}RCC_ClocksTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup RCC_Exported_Constants - * @{ - */ - -/** @defgroup RCC_HSE_configuration - * @{ - */ -#define RCC_HSE_OFF ((uint8_t)0x00) -#define RCC_HSE_ON ((uint8_t)0x01) -#define RCC_HSE_Bypass ((uint8_t)0x05) -#define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \ - ((HSE) == RCC_HSE_Bypass)) -/** - * @} - */ - -/** @defgroup RCC_PLL_Clock_Source - * @{ - */ -#define RCC_PLLSource_HSI ((uint32_t)0x00000000) -#define RCC_PLLSource_HSE ((uint32_t)0x00400000) -#define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI) || \ - ((SOURCE) == RCC_PLLSource_HSE)) -#define IS_RCC_PLLM_VALUE(VALUE) ((VALUE) <= 63) -#define IS_RCC_PLLN_VALUE(VALUE) ((192 <= (VALUE)) && ((VALUE) <= 432)) -#define IS_RCC_PLLP_VALUE(VALUE) (((VALUE) == 2) || ((VALUE) == 4) || ((VALUE) == 6) || ((VALUE) == 8)) -#define IS_RCC_PLLQ_VALUE(VALUE) ((4 <= (VALUE)) && ((VALUE) <= 15)) - -#define IS_RCC_PLLI2SN_VALUE(VALUE) ((192 <= (VALUE)) && ((VALUE) <= 432)) -#define IS_RCC_PLLI2SR_VALUE(VALUE) ((2 <= (VALUE)) && ((VALUE) <= 7)) - -/** - * @} - */ - -/** @defgroup RCC_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 RCC_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 RCC_APB1_APB2_Clock_Source - * @{ - */ -#define RCC_HCLK_Div1 ((uint32_t)0x00000000) -#define RCC_HCLK_Div2 ((uint32_t)0x00001000) -#define RCC_HCLK_Div4 ((uint32_t)0x00001400) -#define RCC_HCLK_Div8 ((uint32_t)0x00001800) -#define RCC_HCLK_Div16 ((uint32_t)0x00001C00) -#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_PLLI2SRDY ((uint8_t)0x20) -#define RCC_IT_CSS ((uint8_t)0x80) - -#define IS_RCC_IT(IT) ((((IT) & (uint8_t)0xC0) == 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_PLLI2SRDY)) -#define IS_RCC_CLEAR_IT(IT) ((((IT) & (uint8_t)0x40) == 0x00) && ((IT) != 0x00)) - -/** - * @} - */ - -/** @defgroup RCC_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 RCC_RTC_Clock_Source - * @{ - */ -#define RCC_RTCCLKSource_LSE ((uint32_t)0x00000100) -#define RCC_RTCCLKSource_LSI ((uint32_t)0x00000200) -#define RCC_RTCCLKSource_HSE_Div2 ((uint32_t)0x00020300) -#define RCC_RTCCLKSource_HSE_Div3 ((uint32_t)0x00030300) -#define RCC_RTCCLKSource_HSE_Div4 ((uint32_t)0x00040300) -#define RCC_RTCCLKSource_HSE_Div5 ((uint32_t)0x00050300) -#define RCC_RTCCLKSource_HSE_Div6 ((uint32_t)0x00060300) -#define RCC_RTCCLKSource_HSE_Div7 ((uint32_t)0x00070300) -#define RCC_RTCCLKSource_HSE_Div8 ((uint32_t)0x00080300) -#define RCC_RTCCLKSource_HSE_Div9 ((uint32_t)0x00090300) -#define RCC_RTCCLKSource_HSE_Div10 ((uint32_t)0x000A0300) -#define RCC_RTCCLKSource_HSE_Div11 ((uint32_t)0x000B0300) -#define RCC_RTCCLKSource_HSE_Div12 ((uint32_t)0x000C0300) -#define RCC_RTCCLKSource_HSE_Div13 ((uint32_t)0x000D0300) -#define RCC_RTCCLKSource_HSE_Div14 ((uint32_t)0x000E0300) -#define RCC_RTCCLKSource_HSE_Div15 ((uint32_t)0x000F0300) -#define RCC_RTCCLKSource_HSE_Div16 ((uint32_t)0x00100300) -#define RCC_RTCCLKSource_HSE_Div17 ((uint32_t)0x00110300) -#define RCC_RTCCLKSource_HSE_Div18 ((uint32_t)0x00120300) -#define RCC_RTCCLKSource_HSE_Div19 ((uint32_t)0x00130300) -#define RCC_RTCCLKSource_HSE_Div20 ((uint32_t)0x00140300) -#define RCC_RTCCLKSource_HSE_Div21 ((uint32_t)0x00150300) -#define RCC_RTCCLKSource_HSE_Div22 ((uint32_t)0x00160300) -#define RCC_RTCCLKSource_HSE_Div23 ((uint32_t)0x00170300) -#define RCC_RTCCLKSource_HSE_Div24 ((uint32_t)0x00180300) -#define RCC_RTCCLKSource_HSE_Div25 ((uint32_t)0x00190300) -#define RCC_RTCCLKSource_HSE_Div26 ((uint32_t)0x001A0300) -#define RCC_RTCCLKSource_HSE_Div27 ((uint32_t)0x001B0300) -#define RCC_RTCCLKSource_HSE_Div28 ((uint32_t)0x001C0300) -#define RCC_RTCCLKSource_HSE_Div29 ((uint32_t)0x001D0300) -#define RCC_RTCCLKSource_HSE_Div30 ((uint32_t)0x001E0300) -#define RCC_RTCCLKSource_HSE_Div31 ((uint32_t)0x001F0300) -#define IS_RCC_RTCCLK_SOURCE(SOURCE) (((SOURCE) == RCC_RTCCLKSource_LSE) || \ - ((SOURCE) == RCC_RTCCLKSource_LSI) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div2) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div3) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div4) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div5) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div6) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div7) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div8) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div9) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div10) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div11) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div12) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div13) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div14) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div15) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div16) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div17) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div18) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div19) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div20) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div21) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div22) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div23) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div24) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div25) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div26) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div27) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div28) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div29) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div30) || \ - ((SOURCE) == RCC_RTCCLKSource_HSE_Div31)) -/** - * @} - */ - -/** @defgroup RCC_I2S_Clock_Source - * @{ - */ -#define RCC_I2S2CLKSource_PLLI2S ((uint8_t)0x00) -#define RCC_I2S2CLKSource_Ext ((uint8_t)0x01) - -#define IS_RCC_I2SCLK_SOURCE(SOURCE) (((SOURCE) == RCC_I2S2CLKSource_PLLI2S) || ((SOURCE) == RCC_I2S2CLKSource_Ext)) -/** - * @} - */ - -/** @defgroup RCC_TIM_PRescaler_Selection - * @{ - */ -#define RCC_TIMPrescDesactivated ((uint8_t)0x00) -#define RCC_TIMPrescActivated ((uint8_t)0x01) - -#define IS_RCC_TIMCLK_PRESCALER(VALUE) (((VALUE) == RCC_TIMPrescDesactivated) || ((VALUE) == RCC_TIMPrescActivated)) -/** - * @} - */ - -/** @defgroup RCC_AHB1_Peripherals - * @{ - */ -#define RCC_AHB1Periph_GPIOA ((uint32_t)0x00000001) -#define RCC_AHB1Periph_GPIOB ((uint32_t)0x00000002) -#define RCC_AHB1Periph_GPIOC ((uint32_t)0x00000004) -#define RCC_AHB1Periph_GPIOD ((uint32_t)0x00000008) -#define RCC_AHB1Periph_GPIOE ((uint32_t)0x00000010) -#define RCC_AHB1Periph_GPIOF ((uint32_t)0x00000020) -#define RCC_AHB1Periph_GPIOG ((uint32_t)0x00000040) -#define RCC_AHB1Periph_GPIOH ((uint32_t)0x00000080) -#define RCC_AHB1Periph_GPIOI ((uint32_t)0x00000100) -#define RCC_AHB1Periph_CRC ((uint32_t)0x00001000) -#define RCC_AHB1Periph_FLITF ((uint32_t)0x00008000) -#define RCC_AHB1Periph_SRAM1 ((uint32_t)0x00010000) -#define RCC_AHB1Periph_SRAM2 ((uint32_t)0x00020000) -#define RCC_AHB1Periph_BKPSRAM ((uint32_t)0x00040000) -#define RCC_AHB1Periph_SRAM3 ((uint32_t)0x00080000) -#define RCC_AHB1Periph_CCMDATARAMEN ((uint32_t)0x00100000) -#define RCC_AHB1Periph_DMA1 ((uint32_t)0x00200000) -#define RCC_AHB1Periph_DMA2 ((uint32_t)0x00400000) -#define RCC_AHB1Periph_ETH_MAC ((uint32_t)0x02000000) -#define RCC_AHB1Periph_ETH_MAC_Tx ((uint32_t)0x04000000) -#define RCC_AHB1Periph_ETH_MAC_Rx ((uint32_t)0x08000000) -#define RCC_AHB1Periph_ETH_MAC_PTP ((uint32_t)0x10000000) -#define RCC_AHB1Periph_OTG_HS ((uint32_t)0x20000000) -#define RCC_AHB1Periph_OTG_HS_ULPI ((uint32_t)0x40000000) - -#define IS_RCC_AHB1_CLOCK_PERIPH(PERIPH) ((((PERIPH) & 0x818BEE00) == 0x00) && ((PERIPH) != 0x00)) -#define IS_RCC_AHB1_RESET_PERIPH(PERIPH) ((((PERIPH) & 0xDD9FEE00) == 0x00) && ((PERIPH) != 0x00)) -#define IS_RCC_AHB1_LPMODE_PERIPH(PERIPH) ((((PERIPH) & 0x81906E00) == 0x00) && ((PERIPH) != 0x00)) - - -/** - * @} - */ - -/** @defgroup RCC_AHB2_Peripherals - * @{ - */ -#define RCC_AHB2Periph_DCMI ((uint32_t)0x00000001) -#define RCC_AHB2Periph_CRYP ((uint32_t)0x00000010) -#define RCC_AHB2Periph_HASH ((uint32_t)0x00000020) -#define RCC_AHB2Periph_RNG ((uint32_t)0x00000040) -#define RCC_AHB2Periph_OTG_FS ((uint32_t)0x00000080) -#define IS_RCC_AHB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFF0E) == 0x00) && ((PERIPH) != 0x00)) -/** - * @} - */ - -/** @defgroup RCC_AHB3_Peripherals - * @{ - */ -#define RCC_AHB3Periph_FSMC ((uint32_t)0x00000001) - -#define IS_RCC_AHB3_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFFFE) == 0x00) && ((PERIPH) != 0x00)) -/** - * @} - */ - -/** @defgroup RCC_APB1_Peripherals - * @{ - */ -#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_I2C3 ((uint32_t)0x00800000) -#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000) -#define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000) -#define RCC_APB1Periph_PWR ((uint32_t)0x10000000) -#define RCC_APB1Periph_DAC ((uint32_t)0x20000000) -#define RCC_APB1Periph_UART7 ((uint32_t)0x40000000) -#define RCC_APB1Periph_UART8 ((uint32_t)0x80000000) -#define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x09013600) == 0x00) && ((PERIPH) != 0x00)) -/** - * @} - */ - -/** @defgroup RCC_APB2_Peripherals - * @{ - */ -#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000001) -#define RCC_APB2Periph_TIM8 ((uint32_t)0x00000002) -#define RCC_APB2Periph_USART1 ((uint32_t)0x00000010) -#define RCC_APB2Periph_USART6 ((uint32_t)0x00000020) -#define RCC_APB2Periph_ADC ((uint32_t)0x00000100) -#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000100) -#define RCC_APB2Periph_ADC2 ((uint32_t)0x00000200) -#define RCC_APB2Periph_ADC3 ((uint32_t)0x00000400) -#define RCC_APB2Periph_SDIO ((uint32_t)0x00000800) -#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000) -#define RCC_APB2Periph_SPI4 ((uint32_t)0x00002000) -#define RCC_APB2Periph_SYSCFG ((uint32_t)0x00004000) -#define RCC_APB2Periph_TIM9 ((uint32_t)0x00010000) -#define RCC_APB2Periph_TIM10 ((uint32_t)0x00020000) -#define RCC_APB2Periph_TIM11 ((uint32_t)0x00040000) -#define RCC_APB2Periph_SPI5 ((uint32_t)0x00100000) -#define RCC_APB2Periph_SPI6 ((uint32_t)0x00200000) - -#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC880CC) == 0x00) && ((PERIPH) != 0x00)) -#define IS_RCC_APB2_RESET_PERIPH(PERIPH) ((((PERIPH) & 0xFFC886CC) == 0x00) && ((PERIPH) != 0x00)) - - -/** - * @} - */ - -/** @defgroup RCC_MCO1_Clock_Source_Prescaler - * @{ - */ -#define RCC_MCO1Source_HSI ((uint32_t)0x00000000) -#define RCC_MCO1Source_LSE ((uint32_t)0x00200000) -#define RCC_MCO1Source_HSE ((uint32_t)0x00400000) -#define RCC_MCO1Source_PLLCLK ((uint32_t)0x00600000) -#define RCC_MCO1Div_1 ((uint32_t)0x00000000) -#define RCC_MCO1Div_2 ((uint32_t)0x04000000) -#define RCC_MCO1Div_3 ((uint32_t)0x05000000) -#define RCC_MCO1Div_4 ((uint32_t)0x06000000) -#define RCC_MCO1Div_5 ((uint32_t)0x07000000) -#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1Source_HSI) || ((SOURCE) == RCC_MCO1Source_LSE) || \ - ((SOURCE) == RCC_MCO1Source_HSE) || ((SOURCE) == RCC_MCO1Source_PLLCLK)) - -#define IS_RCC_MCO1DIV(DIV) (((DIV) == RCC_MCO1Div_1) || ((DIV) == RCC_MCO1Div_2) || \ - ((DIV) == RCC_MCO1Div_3) || ((DIV) == RCC_MCO1Div_4) || \ - ((DIV) == RCC_MCO1Div_5)) -/** - * @} - */ - -/** @defgroup RCC_MCO2_Clock_Source_Prescaler - * @{ - */ -#define RCC_MCO2Source_SYSCLK ((uint32_t)0x00000000) -#define RCC_MCO2Source_PLLI2SCLK ((uint32_t)0x40000000) -#define RCC_MCO2Source_HSE ((uint32_t)0x80000000) -#define RCC_MCO2Source_PLLCLK ((uint32_t)0xC0000000) -#define RCC_MCO2Div_1 ((uint32_t)0x00000000) -#define RCC_MCO2Div_2 ((uint32_t)0x20000000) -#define RCC_MCO2Div_3 ((uint32_t)0x28000000) -#define RCC_MCO2Div_4 ((uint32_t)0x30000000) -#define RCC_MCO2Div_5 ((uint32_t)0x38000000) -#define IS_RCC_MCO2SOURCE(SOURCE) (((SOURCE) == RCC_MCO2Source_SYSCLK) || ((SOURCE) == RCC_MCO2Source_PLLI2SCLK)|| \ - ((SOURCE) == RCC_MCO2Source_HSE) || ((SOURCE) == RCC_MCO2Source_PLLCLK)) - -#define IS_RCC_MCO2DIV(DIV) (((DIV) == RCC_MCO2Div_1) || ((DIV) == RCC_MCO2Div_2) || \ - ((DIV) == RCC_MCO2Div_3) || ((DIV) == RCC_MCO2Div_4) || \ - ((DIV) == RCC_MCO2Div_5)) -/** - * @} - */ - -/** @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_PLLI2SRDY ((uint8_t)0x3B) -#define RCC_FLAG_LSERDY ((uint8_t)0x41) -#define RCC_FLAG_LSIRDY ((uint8_t)0x61) -#define RCC_FLAG_BORRST ((uint8_t)0x79) -#define RCC_FLAG_PINRST ((uint8_t)0x7A) -#define RCC_FLAG_PORRST ((uint8_t)0x7B) -#define RCC_FLAG_SFTRST ((uint8_t)0x7C) -#define RCC_FLAG_IWDGRST ((uint8_t)0x7D) -#define RCC_FLAG_WWDGRST ((uint8_t)0x7E) -#define RCC_FLAG_LPWRRST ((uint8_t)0x7F) - -#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_BORRST) || \ - ((FLAG) == RCC_FLAG_PINRST) || ((FLAG) == RCC_FLAG_PORRST) || \ - ((FLAG) == RCC_FLAG_SFTRST) || ((FLAG) == RCC_FLAG_IWDGRST)|| \ - ((FLAG) == RCC_FLAG_WWDGRST)|| ((FLAG) == RCC_FLAG_LPWRRST)|| \ - ((FLAG) == RCC_FLAG_PLLI2SRDY)) - -#define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1F) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the RCC clock configuration to the default reset state */ -void RCC_DeInit(void); - -/* Internal/external clocks, PLL, CSS and MCO configuration functions *********/ -void RCC_HSEConfig(uint8_t RCC_HSE); -ErrorStatus RCC_WaitForHSEStartUp(void); -void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue); -void RCC_HSICmd(FunctionalState NewState); -void RCC_LSEConfig(uint8_t RCC_LSE); -void RCC_LSICmd(FunctionalState NewState); - -void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ); -void RCC_PLLCmd(FunctionalState NewState); -void RCC_PLLI2SConfig(uint32_t PLLI2SN, uint32_t PLLI2SR); -void RCC_PLLI2SCmd(FunctionalState NewState); -void RCC_ClockSecuritySystemCmd(FunctionalState NewState); -void RCC_MCO1Config(uint32_t RCC_MCO1Source, uint32_t RCC_MCO1Div); -void RCC_MCO2Config(uint32_t RCC_MCO2Source, uint32_t RCC_MCO2Div); - -/* System, AHB and APB busses clocks configuration functions ******************/ -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_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks); - -/* Peripheral clocks configuration functions **********************************/ -void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource); -void RCC_RTCCLKCmd(FunctionalState NewState); -void RCC_BackupResetCmd(FunctionalState NewState); -void RCC_I2SCLKConfig(uint32_t RCC_I2SCLKSource); -void RCC_TIMCLKPresConfig(uint32_t RCC_TIMCLKPrescaler); - -void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState); -void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState); -void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState); -void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); - -void RCC_AHB1PeriphResetCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState); -void RCC_AHB2PeriphResetCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState); -void RCC_AHB3PeriphResetCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState); -void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); - -void RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState); -void RCC_AHB2PeriphClockLPModeCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState); -void RCC_AHB3PeriphClockLPModeCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState); -void RCC_APB1PeriphClockLPModeCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_APB2PeriphClockLPModeCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState); -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 /* __STM32F4xx_RCC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rng.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rng.h deleted file mode 100644 index 6de413c8..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rng.h +++ /dev/null @@ -1,120 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rng.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the Random - * Number Generator(RNG) firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_RNG_H -#define __STM32F4xx_RNG_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup RNG - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup RNG_Exported_Constants - * @{ - */ - -/** @defgroup RNG_flags_definition - * @{ - */ -#define RNG_FLAG_DRDY ((uint8_t)0x0001) /*!< Data ready */ -#define RNG_FLAG_CECS ((uint8_t)0x0002) /*!< Clock error current status */ -#define RNG_FLAG_SECS ((uint8_t)0x0004) /*!< Seed error current status */ - -#define IS_RNG_GET_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_DRDY) || \ - ((RNG_FLAG) == RNG_FLAG_CECS) || \ - ((RNG_FLAG) == RNG_FLAG_SECS)) -#define IS_RNG_CLEAR_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_CECS) || \ - ((RNG_FLAG) == RNG_FLAG_SECS)) -/** - * @} - */ - -/** @defgroup RNG_interrupts_definition - * @{ - */ -#define RNG_IT_CEI ((uint8_t)0x20) /*!< Clock error interrupt */ -#define RNG_IT_SEI ((uint8_t)0x40) /*!< Seed error interrupt */ - -#define IS_RNG_IT(IT) ((((IT) & (uint8_t)0x9F) == 0x00) && ((IT) != 0x00)) -#define IS_RNG_GET_IT(RNG_IT) (((RNG_IT) == RNG_IT_CEI) || ((RNG_IT) == RNG_IT_SEI)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the RNG configuration to the default reset state *****/ -void RNG_DeInit(void); - -/* Configuration function *****************************************************/ -void RNG_Cmd(FunctionalState NewState); - -/* Get 32 bit Random number function ******************************************/ -uint32_t RNG_GetRandomNumber(void); - -/* Interrupts and flags management functions **********************************/ -void RNG_ITConfig(FunctionalState NewState); -FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG); -void RNG_ClearFlag(uint8_t RNG_FLAG); -ITStatus RNG_GetITStatus(uint8_t RNG_IT); -void RNG_ClearITPendingBit(uint8_t RNG_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_RNG_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rtc.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rtc.h deleted file mode 100644 index 51e2cfd6..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rtc.h +++ /dev/null @@ -1,881 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rtc.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the RTC firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_RTC_H -#define __STM32F4xx_RTC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup RTC - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** - * @brief RTC Init structures definition - */ -typedef struct -{ - uint32_t RTC_HourFormat; /*!< Specifies the RTC Hour Format. - This parameter can be a value of @ref RTC_Hour_Formats */ - - uint32_t RTC_AsynchPrediv; /*!< Specifies the RTC Asynchronous Predivider value. - This parameter must be set to a value lower than 0x7F */ - - uint32_t RTC_SynchPrediv; /*!< Specifies the RTC Synchronous Predivider value. - This parameter must be set to a value lower than 0x7FFF */ -}RTC_InitTypeDef; - -/** - * @brief RTC Time structure definition - */ -typedef struct -{ - uint8_t RTC_Hours; /*!< Specifies the RTC Time Hour. - This parameter must be set to a value in the 0-12 range - if the RTC_HourFormat_12 is selected or 0-23 range if - the RTC_HourFormat_24 is selected. */ - - uint8_t RTC_Minutes; /*!< Specifies the RTC Time Minutes. - This parameter must be set to a value in the 0-59 range. */ - - uint8_t RTC_Seconds; /*!< Specifies the RTC Time Seconds. - This parameter must be set to a value in the 0-59 range. */ - - uint8_t RTC_H12; /*!< Specifies the RTC AM/PM Time. - This parameter can be a value of @ref RTC_AM_PM_Definitions */ -}RTC_TimeTypeDef; - -/** - * @brief RTC Date structure definition - */ -typedef struct -{ - uint8_t RTC_WeekDay; /*!< Specifies the RTC Date WeekDay. - This parameter can be a value of @ref RTC_WeekDay_Definitions */ - - uint8_t RTC_Month; /*!< Specifies the RTC Date Month (in BCD format). - This parameter can be a value of @ref RTC_Month_Date_Definitions */ - - uint8_t RTC_Date; /*!< Specifies the RTC Date. - This parameter must be set to a value in the 1-31 range. */ - - uint8_t RTC_Year; /*!< Specifies the RTC Date Year. - This parameter must be set to a value in the 0-99 range. */ -}RTC_DateTypeDef; - -/** - * @brief RTC Alarm structure definition - */ -typedef struct -{ - RTC_TimeTypeDef RTC_AlarmTime; /*!< Specifies the RTC Alarm Time members. */ - - uint32_t RTC_AlarmMask; /*!< Specifies the RTC Alarm Masks. - This parameter can be a value of @ref RTC_AlarmMask_Definitions */ - - uint32_t RTC_AlarmDateWeekDaySel; /*!< Specifies the RTC Alarm is on Date or WeekDay. - This parameter can be a value of @ref RTC_AlarmDateWeekDay_Definitions */ - - uint8_t RTC_AlarmDateWeekDay; /*!< Specifies the RTC Alarm Date/WeekDay. - If the Alarm Date is selected, this parameter - must be set to a value in the 1-31 range. - If the Alarm WeekDay is selected, this - parameter can be a value of @ref RTC_WeekDay_Definitions */ -}RTC_AlarmTypeDef; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup RTC_Exported_Constants - * @{ - */ - - -/** @defgroup RTC_Hour_Formats - * @{ - */ -#define RTC_HourFormat_24 ((uint32_t)0x00000000) -#define RTC_HourFormat_12 ((uint32_t)0x00000040) -#define IS_RTC_HOUR_FORMAT(FORMAT) (((FORMAT) == RTC_HourFormat_12) || \ - ((FORMAT) == RTC_HourFormat_24)) -/** - * @} - */ - -/** @defgroup RTC_Asynchronous_Predivider - * @{ - */ -#define IS_RTC_ASYNCH_PREDIV(PREDIV) ((PREDIV) <= 0x7F) - -/** - * @} - */ - - -/** @defgroup RTC_Synchronous_Predivider - * @{ - */ -#define IS_RTC_SYNCH_PREDIV(PREDIV) ((PREDIV) <= 0x7FFF) - -/** - * @} - */ - -/** @defgroup RTC_Time_Definitions - * @{ - */ -#define IS_RTC_HOUR12(HOUR) (((HOUR) > 0) && ((HOUR) <= 12)) -#define IS_RTC_HOUR24(HOUR) ((HOUR) <= 23) -#define IS_RTC_MINUTES(MINUTES) ((MINUTES) <= 59) -#define IS_RTC_SECONDS(SECONDS) ((SECONDS) <= 59) - -/** - * @} - */ - -/** @defgroup RTC_AM_PM_Definitions - * @{ - */ -#define RTC_H12_AM ((uint8_t)0x00) -#define RTC_H12_PM ((uint8_t)0x40) -#define IS_RTC_H12(PM) (((PM) == RTC_H12_AM) || ((PM) == RTC_H12_PM)) - -/** - * @} - */ - -/** @defgroup RTC_Year_Date_Definitions - * @{ - */ -#define IS_RTC_YEAR(YEAR) ((YEAR) <= 99) - -/** - * @} - */ - -/** @defgroup RTC_Month_Date_Definitions - * @{ - */ - -/* Coded in BCD format */ -#define RTC_Month_January ((uint8_t)0x01) -#define RTC_Month_February ((uint8_t)0x02) -#define RTC_Month_March ((uint8_t)0x03) -#define RTC_Month_April ((uint8_t)0x04) -#define RTC_Month_May ((uint8_t)0x05) -#define RTC_Month_June ((uint8_t)0x06) -#define RTC_Month_July ((uint8_t)0x07) -#define RTC_Month_August ((uint8_t)0x08) -#define RTC_Month_September ((uint8_t)0x09) -#define RTC_Month_October ((uint8_t)0x10) -#define RTC_Month_November ((uint8_t)0x11) -#define RTC_Month_December ((uint8_t)0x12) -#define IS_RTC_MONTH(MONTH) (((MONTH) >= 1) && ((MONTH) <= 12)) -#define IS_RTC_DATE(DATE) (((DATE) >= 1) && ((DATE) <= 31)) - -/** - * @} - */ - -/** @defgroup RTC_WeekDay_Definitions - * @{ - */ - -#define RTC_Weekday_Monday ((uint8_t)0x01) -#define RTC_Weekday_Tuesday ((uint8_t)0x02) -#define RTC_Weekday_Wednesday ((uint8_t)0x03) -#define RTC_Weekday_Thursday ((uint8_t)0x04) -#define RTC_Weekday_Friday ((uint8_t)0x05) -#define RTC_Weekday_Saturday ((uint8_t)0x06) -#define RTC_Weekday_Sunday ((uint8_t)0x07) -#define IS_RTC_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_Weekday_Monday) || \ - ((WEEKDAY) == RTC_Weekday_Tuesday) || \ - ((WEEKDAY) == RTC_Weekday_Wednesday) || \ - ((WEEKDAY) == RTC_Weekday_Thursday) || \ - ((WEEKDAY) == RTC_Weekday_Friday) || \ - ((WEEKDAY) == RTC_Weekday_Saturday) || \ - ((WEEKDAY) == RTC_Weekday_Sunday)) -/** - * @} - */ - - -/** @defgroup RTC_Alarm_Definitions - * @{ - */ -#define IS_RTC_ALARM_DATE_WEEKDAY_DATE(DATE) (((DATE) > 0) && ((DATE) <= 31)) -#define IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_Weekday_Monday) || \ - ((WEEKDAY) == RTC_Weekday_Tuesday) || \ - ((WEEKDAY) == RTC_Weekday_Wednesday) || \ - ((WEEKDAY) == RTC_Weekday_Thursday) || \ - ((WEEKDAY) == RTC_Weekday_Friday) || \ - ((WEEKDAY) == RTC_Weekday_Saturday) || \ - ((WEEKDAY) == RTC_Weekday_Sunday)) - -/** - * @} - */ - - -/** @defgroup RTC_AlarmDateWeekDay_Definitions - * @{ - */ -#define RTC_AlarmDateWeekDaySel_Date ((uint32_t)0x00000000) -#define RTC_AlarmDateWeekDaySel_WeekDay ((uint32_t)0x40000000) - -#define IS_RTC_ALARM_DATE_WEEKDAY_SEL(SEL) (((SEL) == RTC_AlarmDateWeekDaySel_Date) || \ - ((SEL) == RTC_AlarmDateWeekDaySel_WeekDay)) - -/** - * @} - */ - - -/** @defgroup RTC_AlarmMask_Definitions - * @{ - */ -#define RTC_AlarmMask_None ((uint32_t)0x00000000) -#define RTC_AlarmMask_DateWeekDay ((uint32_t)0x80000000) -#define RTC_AlarmMask_Hours ((uint32_t)0x00800000) -#define RTC_AlarmMask_Minutes ((uint32_t)0x00008000) -#define RTC_AlarmMask_Seconds ((uint32_t)0x00000080) -#define RTC_AlarmMask_All ((uint32_t)0x80808080) -#define IS_ALARM_MASK(MASK) (((MASK) & 0x7F7F7F7F) == (uint32_t)RESET) - -/** - * @} - */ - -/** @defgroup RTC_Alarms_Definitions - * @{ - */ -#define RTC_Alarm_A ((uint32_t)0x00000100) -#define RTC_Alarm_B ((uint32_t)0x00000200) -#define IS_RTC_ALARM(ALARM) (((ALARM) == RTC_Alarm_A) || ((ALARM) == RTC_Alarm_B)) -#define IS_RTC_CMD_ALARM(ALARM) (((ALARM) & (RTC_Alarm_A | RTC_Alarm_B)) != (uint32_t)RESET) - -/** - * @} - */ - - /** @defgroup RTC_Alarm_Sub_Seconds_Masks_Definitions - * @{ - */ -#define RTC_AlarmSubSecondMask_All ((uint32_t)0x00000000) /*!< All Alarm SS fields are masked. - There is no comparison on sub seconds - for Alarm */ -#define RTC_AlarmSubSecondMask_SS14_1 ((uint32_t)0x01000000) /*!< SS[14:1] are don't care in Alarm - comparison. Only SS[0] is compared. */ -#define RTC_AlarmSubSecondMask_SS14_2 ((uint32_t)0x02000000) /*!< SS[14:2] are don't care in Alarm - comparison. Only SS[1:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_3 ((uint32_t)0x03000000) /*!< SS[14:3] are don't care in Alarm - comparison. Only SS[2:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_4 ((uint32_t)0x04000000) /*!< SS[14:4] are don't care in Alarm - comparison. Only SS[3:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_5 ((uint32_t)0x05000000) /*!< SS[14:5] are don't care in Alarm - comparison. Only SS[4:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_6 ((uint32_t)0x06000000) /*!< SS[14:6] are don't care in Alarm - comparison. Only SS[5:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_7 ((uint32_t)0x07000000) /*!< SS[14:7] are don't care in Alarm - comparison. Only SS[6:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_8 ((uint32_t)0x08000000) /*!< SS[14:8] are don't care in Alarm - comparison. Only SS[7:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_9 ((uint32_t)0x09000000) /*!< SS[14:9] are don't care in Alarm - comparison. Only SS[8:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_10 ((uint32_t)0x0A000000) /*!< SS[14:10] are don't care in Alarm - comparison. Only SS[9:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_11 ((uint32_t)0x0B000000) /*!< SS[14:11] are don't care in Alarm - comparison. Only SS[10:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_12 ((uint32_t)0x0C000000) /*!< SS[14:12] are don't care in Alarm - comparison.Only SS[11:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14_13 ((uint32_t)0x0D000000) /*!< SS[14:13] are don't care in Alarm - comparison. Only SS[12:0] are compared */ -#define RTC_AlarmSubSecondMask_SS14 ((uint32_t)0x0E000000) /*!< SS[14] is don't care in Alarm - comparison.Only SS[13:0] are compared */ -#define RTC_AlarmSubSecondMask_None ((uint32_t)0x0F000000) /*!< SS[14:0] are compared and must match - to activate alarm. */ -#define IS_RTC_ALARM_SUB_SECOND_MASK(MASK) (((MASK) == RTC_AlarmSubSecondMask_All) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_1) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_2) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_3) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_4) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_5) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_6) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_7) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_8) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_9) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_10) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_11) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_12) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14_13) || \ - ((MASK) == RTC_AlarmSubSecondMask_SS14) || \ - ((MASK) == RTC_AlarmSubSecondMask_None)) -/** - * @} - */ - -/** @defgroup RTC_Alarm_Sub_Seconds_Value - * @{ - */ - -#define IS_RTC_ALARM_SUB_SECOND_VALUE(VALUE) ((VALUE) <= 0x00007FFF) - -/** - * @} - */ - -/** @defgroup RTC_Wakeup_Timer_Definitions - * @{ - */ -#define RTC_WakeUpClock_RTCCLK_Div16 ((uint32_t)0x00000000) -#define RTC_WakeUpClock_RTCCLK_Div8 ((uint32_t)0x00000001) -#define RTC_WakeUpClock_RTCCLK_Div4 ((uint32_t)0x00000002) -#define RTC_WakeUpClock_RTCCLK_Div2 ((uint32_t)0x00000003) -#define RTC_WakeUpClock_CK_SPRE_16bits ((uint32_t)0x00000004) -#define RTC_WakeUpClock_CK_SPRE_17bits ((uint32_t)0x00000006) -#define IS_RTC_WAKEUP_CLOCK(CLOCK) (((CLOCK) == RTC_WakeUpClock_RTCCLK_Div16) || \ - ((CLOCK) == RTC_WakeUpClock_RTCCLK_Div8) || \ - ((CLOCK) == RTC_WakeUpClock_RTCCLK_Div4) || \ - ((CLOCK) == RTC_WakeUpClock_RTCCLK_Div2) || \ - ((CLOCK) == RTC_WakeUpClock_CK_SPRE_16bits) || \ - ((CLOCK) == RTC_WakeUpClock_CK_SPRE_17bits)) -#define IS_RTC_WAKEUP_COUNTER(COUNTER) ((COUNTER) <= 0xFFFF) -/** - * @} - */ - -/** @defgroup RTC_Time_Stamp_Edges_definitions - * @{ - */ -#define RTC_TimeStampEdge_Rising ((uint32_t)0x00000000) -#define RTC_TimeStampEdge_Falling ((uint32_t)0x00000008) -#define IS_RTC_TIMESTAMP_EDGE(EDGE) (((EDGE) == RTC_TimeStampEdge_Rising) || \ - ((EDGE) == RTC_TimeStampEdge_Falling)) -/** - * @} - */ - -/** @defgroup RTC_Output_selection_Definitions - * @{ - */ -#define RTC_Output_Disable ((uint32_t)0x00000000) -#define RTC_Output_AlarmA ((uint32_t)0x00200000) -#define RTC_Output_AlarmB ((uint32_t)0x00400000) -#define RTC_Output_WakeUp ((uint32_t)0x00600000) - -#define IS_RTC_OUTPUT(OUTPUT) (((OUTPUT) == RTC_Output_Disable) || \ - ((OUTPUT) == RTC_Output_AlarmA) || \ - ((OUTPUT) == RTC_Output_AlarmB) || \ - ((OUTPUT) == RTC_Output_WakeUp)) - -/** - * @} - */ - -/** @defgroup RTC_Output_Polarity_Definitions - * @{ - */ -#define RTC_OutputPolarity_High ((uint32_t)0x00000000) -#define RTC_OutputPolarity_Low ((uint32_t)0x00100000) -#define IS_RTC_OUTPUT_POL(POL) (((POL) == RTC_OutputPolarity_High) || \ - ((POL) == RTC_OutputPolarity_Low)) -/** - * @} - */ - - -/** @defgroup RTC_Digital_Calibration_Definitions - * @{ - */ -#define RTC_CalibSign_Positive ((uint32_t)0x00000000) -#define RTC_CalibSign_Negative ((uint32_t)0x00000080) -#define IS_RTC_CALIB_SIGN(SIGN) (((SIGN) == RTC_CalibSign_Positive) || \ - ((SIGN) == RTC_CalibSign_Negative)) -#define IS_RTC_CALIB_VALUE(VALUE) ((VALUE) < 0x20) - -/** - * @} - */ - - /** @defgroup RTC_Calib_Output_selection_Definitions - * @{ - */ -#define RTC_CalibOutput_512Hz ((uint32_t)0x00000000) -#define RTC_CalibOutput_1Hz ((uint32_t)0x00080000) -#define IS_RTC_CALIB_OUTPUT(OUTPUT) (((OUTPUT) == RTC_CalibOutput_512Hz) || \ - ((OUTPUT) == RTC_CalibOutput_1Hz)) -/** - * @} - */ - -/** @defgroup RTC_Smooth_calib_period_Definitions - * @{ - */ -#define RTC_SmoothCalibPeriod_32sec ((uint32_t)0x00000000) /*!< if RTCCLK = 32768 Hz, Smooth calibation - period is 32s, else 2exp20 RTCCLK seconds */ -#define RTC_SmoothCalibPeriod_16sec ((uint32_t)0x00002000) /*!< if RTCCLK = 32768 Hz, Smooth calibation - period is 16s, else 2exp19 RTCCLK seconds */ -#define RTC_SmoothCalibPeriod_8sec ((uint32_t)0x00004000) /*!< if RTCCLK = 32768 Hz, Smooth calibation - period is 8s, else 2exp18 RTCCLK seconds */ -#define IS_RTC_SMOOTH_CALIB_PERIOD(PERIOD) (((PERIOD) == RTC_SmoothCalibPeriod_32sec) || \ - ((PERIOD) == RTC_SmoothCalibPeriod_16sec) || \ - ((PERIOD) == RTC_SmoothCalibPeriod_8sec)) - -/** - * @} - */ - -/** @defgroup RTC_Smooth_calib_Plus_pulses_Definitions - * @{ - */ -#define RTC_SmoothCalibPlusPulses_Set ((uint32_t)0x00008000) /*!< The number of RTCCLK pulses added - during a X -second window = Y - CALM[8:0]. - with Y = 512, 256, 128 when X = 32, 16, 8 */ -#define RTC_SmoothCalibPlusPulses_Reset ((uint32_t)0x00000000) /*!< The number of RTCCLK pulses subbstited - during a 32-second window = CALM[8:0]. */ -#define IS_RTC_SMOOTH_CALIB_PLUS(PLUS) (((PLUS) == RTC_SmoothCalibPlusPulses_Set) || \ - ((PLUS) == RTC_SmoothCalibPlusPulses_Reset)) - -/** - * @} - */ - -/** @defgroup RTC_Smooth_calib_Minus_pulses_Definitions - * @{ - */ -#define IS_RTC_SMOOTH_CALIB_MINUS(VALUE) ((VALUE) <= 0x000001FF) - -/** - * @} - */ - -/** @defgroup RTC_DayLightSaving_Definitions - * @{ - */ -#define RTC_DayLightSaving_SUB1H ((uint32_t)0x00020000) -#define RTC_DayLightSaving_ADD1H ((uint32_t)0x00010000) -#define IS_RTC_DAYLIGHT_SAVING(SAVE) (((SAVE) == RTC_DayLightSaving_SUB1H) || \ - ((SAVE) == RTC_DayLightSaving_ADD1H)) - -#define RTC_StoreOperation_Reset ((uint32_t)0x00000000) -#define RTC_StoreOperation_Set ((uint32_t)0x00040000) -#define IS_RTC_STORE_OPERATION(OPERATION) (((OPERATION) == RTC_StoreOperation_Reset) || \ - ((OPERATION) == RTC_StoreOperation_Set)) -/** - * @} - */ - -/** @defgroup RTC_Tamper_Trigger_Definitions - * @{ - */ -#define RTC_TamperTrigger_RisingEdge ((uint32_t)0x00000000) -#define RTC_TamperTrigger_FallingEdge ((uint32_t)0x00000001) -#define RTC_TamperTrigger_LowLevel ((uint32_t)0x00000000) -#define RTC_TamperTrigger_HighLevel ((uint32_t)0x00000001) -#define IS_RTC_TAMPER_TRIGGER(TRIGGER) (((TRIGGER) == RTC_TamperTrigger_RisingEdge) || \ - ((TRIGGER) == RTC_TamperTrigger_FallingEdge) || \ - ((TRIGGER) == RTC_TamperTrigger_LowLevel) || \ - ((TRIGGER) == RTC_TamperTrigger_HighLevel)) - -/** - * @} - */ - -/** @defgroup RTC_Tamper_Filter_Definitions - * @{ - */ -#define RTC_TamperFilter_Disable ((uint32_t)0x00000000) /*!< Tamper filter is disabled */ - -#define RTC_TamperFilter_2Sample ((uint32_t)0x00000800) /*!< Tamper is activated after 2 - consecutive samples at the active level */ -#define RTC_TamperFilter_4Sample ((uint32_t)0x00001000) /*!< Tamper is activated after 4 - consecutive samples at the active level */ -#define RTC_TamperFilter_8Sample ((uint32_t)0x00001800) /*!< Tamper is activated after 8 - consecutive samples at the active leve. */ -#define IS_RTC_TAMPER_FILTER(FILTER) (((FILTER) == RTC_TamperFilter_Disable) || \ - ((FILTER) == RTC_TamperFilter_2Sample) || \ - ((FILTER) == RTC_TamperFilter_4Sample) || \ - ((FILTER) == RTC_TamperFilter_8Sample)) -/** - * @} - */ - -/** @defgroup RTC_Tamper_Sampling_Frequencies_Definitions - * @{ - */ -#define RTC_TamperSamplingFreq_RTCCLK_Div32768 ((uint32_t)0x00000000) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 32768 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div16384 ((uint32_t)0x000000100) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 16384 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div8192 ((uint32_t)0x00000200) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 8192 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div4096 ((uint32_t)0x00000300) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 4096 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div2048 ((uint32_t)0x00000400) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 2048 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div1024 ((uint32_t)0x00000500) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 1024 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div512 ((uint32_t)0x00000600) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 512 */ -#define RTC_TamperSamplingFreq_RTCCLK_Div256 ((uint32_t)0x00000700) /*!< Each of the tamper inputs are sampled - with a frequency = RTCCLK / 256 */ -#define IS_RTC_TAMPER_SAMPLING_FREQ(FREQ) (((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div32768) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div16384) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div8192) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div4096) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div2048) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div1024) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div512) || \ - ((FREQ) ==RTC_TamperSamplingFreq_RTCCLK_Div256)) - -/** - * @} - */ - - /** @defgroup RTC_Tamper_Pin_Precharge_Duration_Definitions - * @{ - */ -#define RTC_TamperPrechargeDuration_1RTCCLK ((uint32_t)0x00000000) /*!< Tamper pins are pre-charged before - sampling during 1 RTCCLK cycle */ -#define RTC_TamperPrechargeDuration_2RTCCLK ((uint32_t)0x00002000) /*!< Tamper pins are pre-charged before - sampling during 2 RTCCLK cycles */ -#define RTC_TamperPrechargeDuration_4RTCCLK ((uint32_t)0x00004000) /*!< Tamper pins are pre-charged before - sampling during 4 RTCCLK cycles */ -#define RTC_TamperPrechargeDuration_8RTCCLK ((uint32_t)0x00006000) /*!< Tamper pins are pre-charged before - sampling during 8 RTCCLK cycles */ - -#define IS_RTC_TAMPER_PRECHARGE_DURATION(DURATION) (((DURATION) == RTC_TamperPrechargeDuration_1RTCCLK) || \ - ((DURATION) == RTC_TamperPrechargeDuration_2RTCCLK) || \ - ((DURATION) == RTC_TamperPrechargeDuration_4RTCCLK) || \ - ((DURATION) == RTC_TamperPrechargeDuration_8RTCCLK)) -/** - * @} - */ - -/** @defgroup RTC_Tamper_Pins_Definitions - * @{ - */ -#define RTC_Tamper_1 RTC_TAFCR_TAMP1E -#define IS_RTC_TAMPER(TAMPER) (((TAMPER) == RTC_Tamper_1)) - -/** - * @} - */ - -/** @defgroup RTC_Tamper_Pin_Selection - * @{ - */ -#define RTC_TamperPin_PC13 ((uint32_t)0x00000000) -#define RTC_TamperPin_PI8 ((uint32_t)0x00010000) -#define IS_RTC_TAMPER_PIN(PIN) (((PIN) == RTC_TamperPin_PC13) || \ - ((PIN) == RTC_TamperPin_PI8)) -/** - * @} - */ - -/** @defgroup RTC_TimeStamp_Pin_Selection - * @{ - */ -#define RTC_TimeStampPin_PC13 ((uint32_t)0x00000000) -#define RTC_TimeStampPin_PI8 ((uint32_t)0x00020000) -#define IS_RTC_TIMESTAMP_PIN(PIN) (((PIN) == RTC_TimeStampPin_PC13) || \ - ((PIN) == RTC_TimeStampPin_PI8)) -/** - * @} - */ - -/** @defgroup RTC_Output_Type_ALARM_OUT - * @{ - */ -#define RTC_OutputType_OpenDrain ((uint32_t)0x00000000) -#define RTC_OutputType_PushPull ((uint32_t)0x00040000) -#define IS_RTC_OUTPUT_TYPE(TYPE) (((TYPE) == RTC_OutputType_OpenDrain) || \ - ((TYPE) == RTC_OutputType_PushPull)) - -/** - * @} - */ - -/** @defgroup RTC_Add_1_Second_Parameter_Definitions - * @{ - */ -#define RTC_ShiftAdd1S_Reset ((uint32_t)0x00000000) -#define RTC_ShiftAdd1S_Set ((uint32_t)0x80000000) -#define IS_RTC_SHIFT_ADD1S(SEL) (((SEL) == RTC_ShiftAdd1S_Reset) || \ - ((SEL) == RTC_ShiftAdd1S_Set)) -/** - * @} - */ - -/** @defgroup RTC_Substract_Fraction_Of_Second_Value - * @{ - */ -#define IS_RTC_SHIFT_SUBFS(FS) ((FS) <= 0x00007FFF) - -/** - * @} - */ - -/** @defgroup RTC_Backup_Registers_Definitions - * @{ - */ - -#define RTC_BKP_DR0 ((uint32_t)0x00000000) -#define RTC_BKP_DR1 ((uint32_t)0x00000001) -#define RTC_BKP_DR2 ((uint32_t)0x00000002) -#define RTC_BKP_DR3 ((uint32_t)0x00000003) -#define RTC_BKP_DR4 ((uint32_t)0x00000004) -#define RTC_BKP_DR5 ((uint32_t)0x00000005) -#define RTC_BKP_DR6 ((uint32_t)0x00000006) -#define RTC_BKP_DR7 ((uint32_t)0x00000007) -#define RTC_BKP_DR8 ((uint32_t)0x00000008) -#define RTC_BKP_DR9 ((uint32_t)0x00000009) -#define RTC_BKP_DR10 ((uint32_t)0x0000000A) -#define RTC_BKP_DR11 ((uint32_t)0x0000000B) -#define RTC_BKP_DR12 ((uint32_t)0x0000000C) -#define RTC_BKP_DR13 ((uint32_t)0x0000000D) -#define RTC_BKP_DR14 ((uint32_t)0x0000000E) -#define RTC_BKP_DR15 ((uint32_t)0x0000000F) -#define RTC_BKP_DR16 ((uint32_t)0x00000010) -#define RTC_BKP_DR17 ((uint32_t)0x00000011) -#define RTC_BKP_DR18 ((uint32_t)0x00000012) -#define RTC_BKP_DR19 ((uint32_t)0x00000013) -#define IS_RTC_BKP(BKP) (((BKP) == RTC_BKP_DR0) || \ - ((BKP) == RTC_BKP_DR1) || \ - ((BKP) == RTC_BKP_DR2) || \ - ((BKP) == RTC_BKP_DR3) || \ - ((BKP) == RTC_BKP_DR4) || \ - ((BKP) == RTC_BKP_DR5) || \ - ((BKP) == RTC_BKP_DR6) || \ - ((BKP) == RTC_BKP_DR7) || \ - ((BKP) == RTC_BKP_DR8) || \ - ((BKP) == RTC_BKP_DR9) || \ - ((BKP) == RTC_BKP_DR10) || \ - ((BKP) == RTC_BKP_DR11) || \ - ((BKP) == RTC_BKP_DR12) || \ - ((BKP) == RTC_BKP_DR13) || \ - ((BKP) == RTC_BKP_DR14) || \ - ((BKP) == RTC_BKP_DR15) || \ - ((BKP) == RTC_BKP_DR16) || \ - ((BKP) == RTC_BKP_DR17) || \ - ((BKP) == RTC_BKP_DR18) || \ - ((BKP) == RTC_BKP_DR19)) -/** - * @} - */ - -/** @defgroup RTC_Input_parameter_format_definitions - * @{ - */ -#define RTC_Format_BIN ((uint32_t)0x000000000) -#define RTC_Format_BCD ((uint32_t)0x000000001) -#define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_Format_BIN) || ((FORMAT) == RTC_Format_BCD)) - -/** - * @} - */ - -/** @defgroup RTC_Flags_Definitions - * @{ - */ -#define RTC_FLAG_RECALPF ((uint32_t)0x00010000) -#define RTC_FLAG_TAMP1F ((uint32_t)0x00002000) -#define RTC_FLAG_TSOVF ((uint32_t)0x00001000) -#define RTC_FLAG_TSF ((uint32_t)0x00000800) -#define RTC_FLAG_WUTF ((uint32_t)0x00000400) -#define RTC_FLAG_ALRBF ((uint32_t)0x00000200) -#define RTC_FLAG_ALRAF ((uint32_t)0x00000100) -#define RTC_FLAG_INITF ((uint32_t)0x00000040) -#define RTC_FLAG_RSF ((uint32_t)0x00000020) -#define RTC_FLAG_INITS ((uint32_t)0x00000010) -#define RTC_FLAG_SHPF ((uint32_t)0x00000008) -#define RTC_FLAG_WUTWF ((uint32_t)0x00000004) -#define RTC_FLAG_ALRBWF ((uint32_t)0x00000002) -#define RTC_FLAG_ALRAWF ((uint32_t)0x00000001) -#define IS_RTC_GET_FLAG(FLAG) (((FLAG) == RTC_FLAG_TSOVF) || ((FLAG) == RTC_FLAG_TSF) || \ - ((FLAG) == RTC_FLAG_WUTF) || ((FLAG) == RTC_FLAG_ALRBF) || \ - ((FLAG) == RTC_FLAG_ALRAF) || ((FLAG) == RTC_FLAG_INITF) || \ - ((FLAG) == RTC_FLAG_RSF) || ((FLAG) == RTC_FLAG_WUTWF) || \ - ((FLAG) == RTC_FLAG_ALRBWF) || ((FLAG) == RTC_FLAG_ALRAWF) || \ - ((FLAG) == RTC_FLAG_TAMP1F) || ((FLAG) == RTC_FLAG_RECALPF) || \ - ((FLAG) == RTC_FLAG_SHPF)) -#define IS_RTC_CLEAR_FLAG(FLAG) (((FLAG) != (uint32_t)RESET) && (((FLAG) & 0xFFFF00DF) == (uint32_t)RESET)) -/** - * @} - */ - -/** @defgroup RTC_Interrupts_Definitions - * @{ - */ -#define RTC_IT_TS ((uint32_t)0x00008000) -#define RTC_IT_WUT ((uint32_t)0x00004000) -#define RTC_IT_ALRB ((uint32_t)0x00002000) -#define RTC_IT_ALRA ((uint32_t)0x00001000) -#define RTC_IT_TAMP ((uint32_t)0x00000004) /* Used only to Enable the Tamper Interrupt */ -#define RTC_IT_TAMP1 ((uint32_t)0x00020000) - -#define IS_RTC_CONFIG_IT(IT) (((IT) != (uint32_t)RESET) && (((IT) & 0xFFFF0FFB) == (uint32_t)RESET)) -#define IS_RTC_GET_IT(IT) (((IT) == RTC_IT_TS) || ((IT) == RTC_IT_WUT) || \ - ((IT) == RTC_IT_ALRB) || ((IT) == RTC_IT_ALRA) || \ - ((IT) == RTC_IT_TAMP1)) -#define IS_RTC_CLEAR_IT(IT) (((IT) != (uint32_t)RESET) && (((IT) & 0xFFFD0FFF) == (uint32_t)RESET)) - -/** - * @} - */ - -/** @defgroup RTC_Legacy - * @{ - */ -#define RTC_DigitalCalibConfig RTC_CoarseCalibConfig -#define RTC_DigitalCalibCmd RTC_CoarseCalibCmd - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the RTC configuration to the default reset state *****/ -ErrorStatus RTC_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct); -void RTC_StructInit(RTC_InitTypeDef* RTC_InitStruct); -void RTC_WriteProtectionCmd(FunctionalState NewState); -ErrorStatus RTC_EnterInitMode(void); -void RTC_ExitInitMode(void); -ErrorStatus RTC_WaitForSynchro(void); -ErrorStatus RTC_RefClockCmd(FunctionalState NewState); -void RTC_BypassShadowCmd(FunctionalState NewState); - -/* Time and Date configuration functions **************************************/ -ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct); -void RTC_TimeStructInit(RTC_TimeTypeDef* RTC_TimeStruct); -void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct); -uint32_t RTC_GetSubSecond(void); -ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct); -void RTC_DateStructInit(RTC_DateTypeDef* RTC_DateStruct); -void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct); - -/* Alarms (Alarm A and Alarm B) configuration functions **********************/ -void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct); -void RTC_AlarmStructInit(RTC_AlarmTypeDef* RTC_AlarmStruct); -void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct); -ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm, FunctionalState NewState); -void RTC_AlarmSubSecondConfig(uint32_t RTC_Alarm, uint32_t RTC_AlarmSubSecondValue, uint32_t RTC_AlarmSubSecondMask); -uint32_t RTC_GetAlarmSubSecond(uint32_t RTC_Alarm); - -/* WakeUp Timer configuration functions ***************************************/ -void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock); -void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter); -uint32_t RTC_GetWakeUpCounter(void); -ErrorStatus RTC_WakeUpCmd(FunctionalState NewState); - -/* Daylight Saving configuration functions ************************************/ -void RTC_DayLightSavingConfig(uint32_t RTC_DayLightSaving, uint32_t RTC_StoreOperation); -uint32_t RTC_GetStoreOperation(void); - -/* Output pin Configuration function ******************************************/ -void RTC_OutputConfig(uint32_t RTC_Output, uint32_t RTC_OutputPolarity); - -/* Digital Calibration configuration functions *********************************/ -ErrorStatus RTC_CoarseCalibConfig(uint32_t RTC_CalibSign, uint32_t Value); -ErrorStatus RTC_CoarseCalibCmd(FunctionalState NewState); -void RTC_CalibOutputCmd(FunctionalState NewState); -void RTC_CalibOutputConfig(uint32_t RTC_CalibOutput); -ErrorStatus RTC_SmoothCalibConfig(uint32_t RTC_SmoothCalibPeriod, - uint32_t RTC_SmoothCalibPlusPulses, - uint32_t RTC_SmouthCalibMinusPulsesValue); - -/* TimeStamp configuration functions ******************************************/ -void RTC_TimeStampCmd(uint32_t RTC_TimeStampEdge, FunctionalState NewState); -void RTC_GetTimeStamp(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_StampTimeStruct, - RTC_DateTypeDef* RTC_StampDateStruct); -uint32_t RTC_GetTimeStampSubSecond(void); - -/* Tampers configuration functions ********************************************/ -void RTC_TamperTriggerConfig(uint32_t RTC_Tamper, uint32_t RTC_TamperTrigger); -void RTC_TamperCmd(uint32_t RTC_Tamper, FunctionalState NewState); -void RTC_TamperFilterConfig(uint32_t RTC_TamperFilter); -void RTC_TamperSamplingFreqConfig(uint32_t RTC_TamperSamplingFreq); -void RTC_TamperPinsPrechargeDuration(uint32_t RTC_TamperPrechargeDuration); -void RTC_TimeStampOnTamperDetectionCmd(FunctionalState NewState); -void RTC_TamperPullUpCmd(FunctionalState NewState); - -/* Backup Data Registers configuration functions ******************************/ -void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data); -uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR); - -/* RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration - functions ******************************************************************/ -void RTC_TamperPinSelection(uint32_t RTC_TamperPin); -void RTC_TimeStampPinSelection(uint32_t RTC_TimeStampPin); -void RTC_OutputTypeConfig(uint32_t RTC_OutputType); - -/* RTC_Shift_control_synchonisation_functions *********************************/ -ErrorStatus RTC_SynchroShiftConfig(uint32_t RTC_ShiftAdd1S, uint32_t RTC_ShiftSubFS); - -/* Interrupts and flags management functions **********************************/ -void RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState); -FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG); -void RTC_ClearFlag(uint32_t RTC_FLAG); -ITStatus RTC_GetITStatus(uint32_t RTC_IT); -void RTC_ClearITPendingBit(uint32_t RTC_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_RTC_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_sdio.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_sdio.h deleted file mode 100644 index 0765a09c..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_sdio.h +++ /dev/null @@ -1,536 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_sdio.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the SDIO firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_SDIO_H -#define __STM32F4xx_SDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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; - - -/* Exported constants --------------------------------------------------------*/ - -/** @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)0x00000000) -#define SDIO_ReadWaitMode_DATA2 ((uint32_t)0x00000001) -#define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_ReadWaitMode_CLK) || \ - ((MODE) == SDIO_ReadWaitMode_DATA2)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ -/* Function used to set the SDIO configuration to the default reset state ****/ -void SDIO_DeInit(void); - -/* Initialization and Configuration functions *********************************/ -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); - -/* Command path state machine (CPSM) management functions *********************/ -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); - -/* Data path state machine (DPSM) management functions ************************/ -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); - -/* SDIO IO Cards mode management functions ************************************/ -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); - -/* CE-ATA mode management functions *******************************************/ -void SDIO_CommandCompletionCmd(FunctionalState NewState); -void SDIO_CEATAITCmd(FunctionalState NewState); -void SDIO_SendCEATACmd(FunctionalState NewState); - -/* DMA transfers management functions *****************************************/ -void SDIO_DMACmd(FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void SDIO_ITConfig(uint32_t SDIO_IT, 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 /* __STM32F4xx_SDIO_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_spi.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_spi.h deleted file mode 100644 index e7e2fc8f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_spi.h +++ /dev/null @@ -1,549 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_spi.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the SPI - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_SPI_H -#define __STM32F4xx_SPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup SPI_Exported_Constants - * @{ - */ - -#define IS_SPI_ALL_PERIPH(PERIPH) (((PERIPH) == SPI1) || \ - ((PERIPH) == SPI2) || \ - ((PERIPH) == SPI3) || \ - ((PERIPH) == SPI4) || \ - ((PERIPH) == SPI5) || \ - ((PERIPH) == SPI6)) - -#define IS_SPI_ALL_PERIPH_EXT(PERIPH) (((PERIPH) == SPI1) || \ - ((PERIPH) == SPI2) || \ - ((PERIPH) == SPI3) || \ - ((PERIPH) == SPI4) || \ - ((PERIPH) == SPI5) || \ - ((PERIPH) == SPI6) || \ - ((PERIPH) == I2S2ext) || \ - ((PERIPH) == I2S3ext)) - -#define IS_SPI_23_PERIPH(PERIPH) (((PERIPH) == SPI2) || \ - ((PERIPH) == SPI3)) - -#define IS_SPI_23_PERIPH_EXT(PERIPH) (((PERIPH) == SPI2) || \ - ((PERIPH) == SPI3) || \ - ((PERIPH) == I2S2ext) || \ - ((PERIPH) == I2S3ext)) - -#define IS_I2S_EXT_PERIPH(PERIPH) (((PERIPH) == I2S2ext) || \ - ((PERIPH) == I2S3ext)) - - -/** @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 SPI_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 SPI_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 SPI_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 SPI_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 SPI_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 SPI_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 I2S_IT_UDR ((uint8_t)0x53) -#define SPI_I2S_IT_TIFRFE ((uint8_t)0x58) - -#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 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) == SPI_IT_CRCERR) || ((IT) == SPI_IT_MODF) || \ - ((IT) == SPI_I2S_IT_OVR) || ((IT) == I2S_IT_UDR) ||\ - ((IT) == SPI_I2S_IT_TIFRFE)) -/** - * @} - */ - -/** @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 SPI_I2S_FLAG_TIFRFE ((uint16_t)0x0100) - -#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)|| \ - ((FLAG) == SPI_I2S_FLAG_TIFRFE)) -/** - * @} - */ - -/** @defgroup SPI_CRC_polynomial - * @{ - */ - -#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1) -/** - * @} - */ - -/** @defgroup SPI_I2S_Legacy - * @{ - */ - -#define SPI_DMAReq_Tx SPI_I2S_DMAReq_Tx -#define SPI_DMAReq_Rx SPI_I2S_DMAReq_Rx -#define SPI_IT_TXE SPI_I2S_IT_TXE -#define SPI_IT_RXNE SPI_I2S_IT_RXNE -#define SPI_IT_ERR SPI_I2S_IT_ERR -#define SPI_IT_OVR SPI_I2S_IT_OVR -#define SPI_FLAG_RXNE SPI_I2S_FLAG_RXNE -#define SPI_FLAG_TXE SPI_I2S_FLAG_TXE -#define SPI_FLAG_OVR SPI_I2S_FLAG_OVR -#define SPI_FLAG_BSY SPI_I2S_FLAG_BSY -#define SPI_DeInit SPI_I2S_DeInit -#define SPI_ITConfig SPI_I2S_ITConfig -#define SPI_DMACmd SPI_I2S_DMACmd -#define SPI_SendData SPI_I2S_SendData -#define SPI_ReceiveData SPI_I2S_ReceiveData -#define SPI_GetFlagStatus SPI_I2S_GetFlagStatus -#define SPI_ClearFlag SPI_I2S_ClearFlag -#define SPI_GetITStatus SPI_I2S_GetITStatus -#define SPI_ClearITPendingBit SPI_I2S_ClearITPendingBit -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the SPI configuration to the default reset state *****/ -void SPI_I2S_DeInit(SPI_TypeDef* SPIx); - -/* Initialization and Configuration functions *********************************/ -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_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize); -void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction); -void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft); -void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState); -void SPI_TIModeCmd(SPI_TypeDef* SPIx, FunctionalState NewState); - -void I2S_FullDuplexConfig(SPI_TypeDef* I2Sxext, I2S_InitTypeDef* I2S_InitStruct); - -/* Data transfers functions ***************************************************/ -void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data); -uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx); - -/* Hardware CRC Calculation functions *****************************************/ -void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState); -void SPI_TransmitCRC(SPI_TypeDef* SPIx); -uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC); -uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx); - -/* DMA transfers management functions *****************************************/ -void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); -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 /*__STM32F4xx_SPI_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_syscfg.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_syscfg.h deleted file mode 100644 index 604c337a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_syscfg.h +++ /dev/null @@ -1,181 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_syscfg.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the SYSCFG firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_SYSCFG_H -#define __STM32F4xx_SYSCFG_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup SYSCFG - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup SYSCFG_Exported_Constants - * @{ - */ - -/** @defgroup SYSCFG_EXTI_Port_Sources - * @{ - */ -#define EXTI_PortSourceGPIOA ((uint8_t)0x00) -#define EXTI_PortSourceGPIOB ((uint8_t)0x01) -#define EXTI_PortSourceGPIOC ((uint8_t)0x02) -#define EXTI_PortSourceGPIOD ((uint8_t)0x03) -#define EXTI_PortSourceGPIOE ((uint8_t)0x04) -#define EXTI_PortSourceGPIOF ((uint8_t)0x05) -#define EXTI_PortSourceGPIOG ((uint8_t)0x06) -#define EXTI_PortSourceGPIOH ((uint8_t)0x07) -#define EXTI_PortSourceGPIOI ((uint8_t)0x08) - -#define IS_EXTI_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == EXTI_PortSourceGPIOA) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOB) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOC) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOD) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOE) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOF) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOG) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOH) || \ - ((PORTSOURCE) == EXTI_PortSourceGPIOI)) - -/** - * @} - */ - - -/** @defgroup SYSCFG_EXTI_Pin_Sources - * @{ - */ -#define EXTI_PinSource0 ((uint8_t)0x00) -#define EXTI_PinSource1 ((uint8_t)0x01) -#define EXTI_PinSource2 ((uint8_t)0x02) -#define EXTI_PinSource3 ((uint8_t)0x03) -#define EXTI_PinSource4 ((uint8_t)0x04) -#define EXTI_PinSource5 ((uint8_t)0x05) -#define EXTI_PinSource6 ((uint8_t)0x06) -#define EXTI_PinSource7 ((uint8_t)0x07) -#define EXTI_PinSource8 ((uint8_t)0x08) -#define EXTI_PinSource9 ((uint8_t)0x09) -#define EXTI_PinSource10 ((uint8_t)0x0A) -#define EXTI_PinSource11 ((uint8_t)0x0B) -#define EXTI_PinSource12 ((uint8_t)0x0C) -#define EXTI_PinSource13 ((uint8_t)0x0D) -#define EXTI_PinSource14 ((uint8_t)0x0E) -#define EXTI_PinSource15 ((uint8_t)0x0F) -#define IS_EXTI_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == EXTI_PinSource0) || \ - ((PINSOURCE) == EXTI_PinSource1) || \ - ((PINSOURCE) == EXTI_PinSource2) || \ - ((PINSOURCE) == EXTI_PinSource3) || \ - ((PINSOURCE) == EXTI_PinSource4) || \ - ((PINSOURCE) == EXTI_PinSource5) || \ - ((PINSOURCE) == EXTI_PinSource6) || \ - ((PINSOURCE) == EXTI_PinSource7) || \ - ((PINSOURCE) == EXTI_PinSource8) || \ - ((PINSOURCE) == EXTI_PinSource9) || \ - ((PINSOURCE) == EXTI_PinSource10) || \ - ((PINSOURCE) == EXTI_PinSource11) || \ - ((PINSOURCE) == EXTI_PinSource12) || \ - ((PINSOURCE) == EXTI_PinSource13) || \ - ((PINSOURCE) == EXTI_PinSource14) || \ - ((PINSOURCE) == EXTI_PinSource15)) -/** - * @} - */ - - -/** @defgroup SYSCFG_Memory_Remap_Config - * @{ - */ -#define SYSCFG_MemoryRemap_Flash ((uint8_t)0x00) -#define SYSCFG_MemoryRemap_SystemFlash ((uint8_t)0x01) -#define SYSCFG_MemoryRemap_SRAM ((uint8_t)0x03) -#define SYSCFG_MemoryRemap_FSMC ((uint8_t)0x02) - -#define IS_SYSCFG_MEMORY_REMAP_CONFING(REMAP) (((REMAP) == SYSCFG_MemoryRemap_Flash) || \ - ((REMAP) == SYSCFG_MemoryRemap_SystemFlash) || \ - ((REMAP) == SYSCFG_MemoryRemap_SRAM) || \ - ((REMAP) == SYSCFG_MemoryRemap_FSMC)) - -/** - * @} - */ - - -/** @defgroup SYSCFG_ETHERNET_Media_Interface - * @{ - */ -#define SYSCFG_ETH_MediaInterface_MII ((uint32_t)0x00000000) -#define SYSCFG_ETH_MediaInterface_RMII ((uint32_t)0x00000001) - -#define IS_SYSCFG_ETH_MEDIA_INTERFACE(INTERFACE) (((INTERFACE) == SYSCFG_ETH_MediaInterface_MII) || \ - ((INTERFACE) == SYSCFG_ETH_MediaInterface_RMII)) -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -void SYSCFG_DeInit(void); -void SYSCFG_MemoryRemapConfig(uint8_t SYSCFG_MemoryRemap); -void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex); -void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface); -void SYSCFG_CompensationCellCmd(FunctionalState NewState); -FlagStatus SYSCFG_GetCompensationCellStatus(void); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_SYSCFG_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_tim.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_tim.h deleted file mode 100644 index 94c22561..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_tim.h +++ /dev/null @@ -1,1150 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_tim.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the TIM firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_TIM_H -#define __STM32F4xx_TIM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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 */ - - uint32_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. */ - - uint32_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 TIM_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 TIM_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 TIM_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 TIM_Break_Input_enable_disable */ - - uint16_t TIM_BreakPolarity; /*!< Specifies the TIM Break Input pin polarity. - This parameter can be a value of @ref TIM_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; - -/* Exported constants --------------------------------------------------------*/ - -/** @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))) -/* LIST1: TIM1, TIM2, TIM3, TIM4, TIM5, TIM8, TIM9, TIM10, TIM11, TIM12, TIM13 and TIM14 */ -#define IS_TIM_LIST1_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)) - -/* LIST2: TIM1, TIM2, TIM3, TIM4, TIM5, TIM8, TIM9 and TIM12 */ -#define IS_TIM_LIST2_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ - ((PERIPH) == TIM2) || \ - ((PERIPH) == TIM3) || \ - ((PERIPH) == TIM4) || \ - ((PERIPH) == TIM5) || \ - ((PERIPH) == TIM8) || \ - ((PERIPH) == TIM9) || \ - ((PERIPH) == TIM12)) -/* LIST3: TIM1, TIM2, TIM3, TIM4, TIM5 and TIM8 */ -#define IS_TIM_LIST3_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ - ((PERIPH) == TIM2) || \ - ((PERIPH) == TIM3) || \ - ((PERIPH) == TIM4) || \ - ((PERIPH) == TIM5) || \ - ((PERIPH) == TIM8)) -/* LIST4: TIM1 and TIM8 */ -#define IS_TIM_LIST4_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ - ((PERIPH) == TIM8)) -/* LIST5: TIM1, TIM2, TIM3, TIM4, TIM5, TIM6, TIM7 and TIM8 */ -#define IS_TIM_LIST5_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ - ((PERIPH) == TIM2) || \ - ((PERIPH) == TIM3) || \ - ((PERIPH) == TIM4) || \ - ((PERIPH) == TIM5) || \ - ((PERIPH) == TIM6) || \ - ((PERIPH) == TIM7) || \ - ((PERIPH) == TIM8)) -/* LIST6: TIM2, TIM5 and TIM11 */ -#define IS_TIM_LIST6_PERIPH(TIMx)(((TIMx) == TIM2) || \ - ((TIMx) == TIM5) || \ - ((TIMx) == TIM11)) - -/** @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 TIM_Break_Input_enable_disable - * @{ - */ - -#define TIM_Break_Enable ((uint16_t)0x1000) -#define TIM_Break_Disable ((uint16_t)0x0000) -#define IS_TIM_BREAK_STATE(STATE) (((STATE) == TIM_Break_Enable) || \ - ((STATE) == TIM_Break_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Break_Polarity - * @{ - */ - -#define TIM_BreakPolarity_Low ((uint16_t)0x0000) -#define TIM_BreakPolarity_High ((uint16_t)0x2000) -#define IS_TIM_BREAK_POLARITY(POLARITY) (((POLARITY) == TIM_BreakPolarity_Low) || \ - ((POLARITY) == TIM_BreakPolarity_High)) -/** - * @} - */ - -/** @defgroup TIM_AOE_Bit_Set_Reset - * @{ - */ - -#define TIM_AutomaticOutput_Enable ((uint16_t)0x4000) -#define TIM_AutomaticOutput_Disable ((uint16_t)0x0000) -#define IS_TIM_AUTOMATIC_OUTPUT_STATE(STATE) (((STATE) == TIM_AutomaticOutput_Enable) || \ - ((STATE) == TIM_AutomaticOutput_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Lock_level - * @{ - */ - -#define TIM_LOCKLevel_OFF ((uint16_t)0x0000) -#define TIM_LOCKLevel_1 ((uint16_t)0x0100) -#define TIM_LOCKLevel_2 ((uint16_t)0x0200) -#define TIM_LOCKLevel_3 ((uint16_t)0x0300) -#define IS_TIM_LOCK_LEVEL(LEVEL) (((LEVEL) == TIM_LOCKLevel_OFF) || \ - ((LEVEL) == TIM_LOCKLevel_1) || \ - ((LEVEL) == TIM_LOCKLevel_2) || \ - ((LEVEL) == TIM_LOCKLevel_3)) -/** - * @} - */ - -/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state - * @{ - */ - -#define TIM_OSSIState_Enable ((uint16_t)0x0400) -#define TIM_OSSIState_Disable ((uint16_t)0x0000) -#define IS_TIM_OSSI_STATE(STATE) (((STATE) == TIM_OSSIState_Enable) || \ - ((STATE) == TIM_OSSIState_Disable)) -/** - * @} - */ - -/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state - * @{ - */ - -#define TIM_OSSRState_Enable ((uint16_t)0x0800) -#define TIM_OSSRState_Disable ((uint16_t)0x0000) -#define IS_TIM_OSSR_STATE(STATE) (((STATE) == TIM_OSSRState_Enable) || \ - ((STATE) == TIM_OSSRState_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Idle_State - * @{ - */ - -#define TIM_OCIdleState_Set ((uint16_t)0x0100) -#define TIM_OCIdleState_Reset ((uint16_t)0x0000) -#define IS_TIM_OCIDLE_STATE(STATE) (((STATE) == TIM_OCIdleState_Set) || \ - ((STATE) == TIM_OCIdleState_Reset)) -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_N_Idle_State - * @{ - */ - -#define TIM_OCNIdleState_Set ((uint16_t)0x0200) -#define TIM_OCNIdleState_Reset ((uint16_t)0x0000) -#define IS_TIM_OCNIDLE_STATE(STATE) (((STATE) == TIM_OCNIdleState_Set) || \ - ((STATE) == TIM_OCNIdleState_Reset)) -/** - * @} - */ - -/** @defgroup TIM_Input_Capture_Polarity - * @{ - */ - -#define TIM_ICPolarity_Rising ((uint16_t)0x0000) -#define TIM_ICPolarity_Falling ((uint16_t)0x0002) -#define TIM_ICPolarity_BothEdge ((uint16_t)0x000A) -#define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \ - ((POLARITY) == TIM_ICPolarity_Falling)|| \ - ((POLARITY) == TIM_ICPolarity_BothEdge)) -/** - * @} - */ - -/** @defgroup TIM_Input_Capture_Selection - * @{ - */ - -#define TIM_ICSelection_DirectTI ((uint16_t)0x0001) /*!< TIM Input 1, 2, 3 or 4 is selected to be - connected to IC1, IC2, IC3 or IC4, respectively */ -#define TIM_ICSelection_IndirectTI ((uint16_t)0x0002) /*!< TIM Input 1, 2, 3 or 4 is selected to be - connected to IC2, IC1, IC4 or IC3, respectively. */ -#define TIM_ICSelection_TRC ((uint16_t)0x0003) /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */ -#define IS_TIM_IC_SELECTION(SELECTION) (((SELECTION) == TIM_ICSelection_DirectTI) || \ - ((SELECTION) == TIM_ICSelection_IndirectTI) || \ - ((SELECTION) == TIM_ICSelection_TRC)) -/** - * @} - */ - -/** @defgroup TIM_Input_Capture_Prescaler - * @{ - */ - -#define TIM_ICPSC_DIV1 ((uint16_t)0x0000) /*!< Capture performed each time an edge is detected on the capture input. */ -#define TIM_ICPSC_DIV2 ((uint16_t)0x0004) /*!< Capture performed once every 2 events. */ -#define TIM_ICPSC_DIV4 ((uint16_t)0x0008) /*!< Capture performed once every 4 events. */ -#define TIM_ICPSC_DIV8 ((uint16_t)0x000C) /*!< Capture performed once every 8 events. */ -#define IS_TIM_IC_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ICPSC_DIV1) || \ - ((PRESCALER) == TIM_ICPSC_DIV2) || \ - ((PRESCALER) == TIM_ICPSC_DIV4) || \ - ((PRESCALER) == TIM_ICPSC_DIV8)) -/** - * @} - */ - -/** @defgroup TIM_interrupt_sources - * @{ - */ - -#define TIM_IT_Update ((uint16_t)0x0001) -#define TIM_IT_CC1 ((uint16_t)0x0002) -#define TIM_IT_CC2 ((uint16_t)0x0004) -#define TIM_IT_CC3 ((uint16_t)0x0008) -#define TIM_IT_CC4 ((uint16_t)0x0010) -#define TIM_IT_COM ((uint16_t)0x0020) -#define TIM_IT_Trigger ((uint16_t)0x0040) -#define TIM_IT_Break ((uint16_t)0x0080) -#define IS_TIM_IT(IT) ((((IT) & (uint16_t)0xFF00) == 0x0000) && ((IT) != 0x0000)) - -#define IS_TIM_GET_IT(IT) (((IT) == TIM_IT_Update) || \ - ((IT) == TIM_IT_CC1) || \ - ((IT) == TIM_IT_CC2) || \ - ((IT) == TIM_IT_CC3) || \ - ((IT) == TIM_IT_CC4) || \ - ((IT) == TIM_IT_COM) || \ - ((IT) == TIM_IT_Trigger) || \ - ((IT) == TIM_IT_Break)) -/** - * @} - */ - -/** @defgroup TIM_DMA_Base_address - * @{ - */ - -#define TIM_DMABase_CR1 ((uint16_t)0x0000) -#define TIM_DMABase_CR2 ((uint16_t)0x0001) -#define TIM_DMABase_SMCR ((uint16_t)0x0002) -#define TIM_DMABase_DIER ((uint16_t)0x0003) -#define TIM_DMABase_SR ((uint16_t)0x0004) -#define TIM_DMABase_EGR ((uint16_t)0x0005) -#define TIM_DMABase_CCMR1 ((uint16_t)0x0006) -#define TIM_DMABase_CCMR2 ((uint16_t)0x0007) -#define TIM_DMABase_CCER ((uint16_t)0x0008) -#define TIM_DMABase_CNT ((uint16_t)0x0009) -#define TIM_DMABase_PSC ((uint16_t)0x000A) -#define TIM_DMABase_ARR ((uint16_t)0x000B) -#define TIM_DMABase_RCR ((uint16_t)0x000C) -#define TIM_DMABase_CCR1 ((uint16_t)0x000D) -#define TIM_DMABase_CCR2 ((uint16_t)0x000E) -#define TIM_DMABase_CCR3 ((uint16_t)0x000F) -#define TIM_DMABase_CCR4 ((uint16_t)0x0010) -#define TIM_DMABase_BDTR ((uint16_t)0x0011) -#define TIM_DMABase_DCR ((uint16_t)0x0012) -#define TIM_DMABase_OR ((uint16_t)0x0013) -#define IS_TIM_DMA_BASE(BASE) (((BASE) == TIM_DMABase_CR1) || \ - ((BASE) == TIM_DMABase_CR2) || \ - ((BASE) == TIM_DMABase_SMCR) || \ - ((BASE) == TIM_DMABase_DIER) || \ - ((BASE) == TIM_DMABase_SR) || \ - ((BASE) == TIM_DMABase_EGR) || \ - ((BASE) == TIM_DMABase_CCMR1) || \ - ((BASE) == TIM_DMABase_CCMR2) || \ - ((BASE) == TIM_DMABase_CCER) || \ - ((BASE) == TIM_DMABase_CNT) || \ - ((BASE) == TIM_DMABase_PSC) || \ - ((BASE) == TIM_DMABase_ARR) || \ - ((BASE) == TIM_DMABase_RCR) || \ - ((BASE) == TIM_DMABase_CCR1) || \ - ((BASE) == TIM_DMABase_CCR2) || \ - ((BASE) == TIM_DMABase_CCR3) || \ - ((BASE) == TIM_DMABase_CCR4) || \ - ((BASE) == TIM_DMABase_BDTR) || \ - ((BASE) == TIM_DMABase_DCR) || \ - ((BASE) == TIM_DMABase_OR)) -/** - * @} - */ - -/** @defgroup TIM_DMA_Burst_Length - * @{ - */ - -#define TIM_DMABurstLength_1Transfer ((uint16_t)0x0000) -#define TIM_DMABurstLength_2Transfers ((uint16_t)0x0100) -#define TIM_DMABurstLength_3Transfers ((uint16_t)0x0200) -#define TIM_DMABurstLength_4Transfers ((uint16_t)0x0300) -#define TIM_DMABurstLength_5Transfers ((uint16_t)0x0400) -#define TIM_DMABurstLength_6Transfers ((uint16_t)0x0500) -#define TIM_DMABurstLength_7Transfers ((uint16_t)0x0600) -#define TIM_DMABurstLength_8Transfers ((uint16_t)0x0700) -#define TIM_DMABurstLength_9Transfers ((uint16_t)0x0800) -#define TIM_DMABurstLength_10Transfers ((uint16_t)0x0900) -#define TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00) -#define TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00) -#define TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00) -#define TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00) -#define TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00) -#define TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00) -#define TIM_DMABurstLength_17Transfers ((uint16_t)0x1000) -#define TIM_DMABurstLength_18Transfers ((uint16_t)0x1100) -#define IS_TIM_DMA_LENGTH(LENGTH) (((LENGTH) == TIM_DMABurstLength_1Transfer) || \ - ((LENGTH) == TIM_DMABurstLength_2Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_3Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_4Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_5Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_6Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_7Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_8Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_9Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_10Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_11Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_12Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_13Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_14Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_15Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_16Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_17Transfers) || \ - ((LENGTH) == TIM_DMABurstLength_18Transfers)) -/** - * @} - */ - -/** @defgroup TIM_DMA_sources - * @{ - */ - -#define TIM_DMA_Update ((uint16_t)0x0100) -#define TIM_DMA_CC1 ((uint16_t)0x0200) -#define TIM_DMA_CC2 ((uint16_t)0x0400) -#define TIM_DMA_CC3 ((uint16_t)0x0800) -#define TIM_DMA_CC4 ((uint16_t)0x1000) -#define TIM_DMA_COM ((uint16_t)0x2000) -#define TIM_DMA_Trigger ((uint16_t)0x4000) -#define IS_TIM_DMA_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0x80FF) == 0x0000) && ((SOURCE) != 0x0000)) - -/** - * @} - */ - -/** @defgroup TIM_External_Trigger_Prescaler - * @{ - */ - -#define TIM_ExtTRGPSC_OFF ((uint16_t)0x0000) -#define TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000) -#define TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000) -#define TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000) -#define IS_TIM_EXT_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ExtTRGPSC_OFF) || \ - ((PRESCALER) == TIM_ExtTRGPSC_DIV2) || \ - ((PRESCALER) == TIM_ExtTRGPSC_DIV4) || \ - ((PRESCALER) == TIM_ExtTRGPSC_DIV8)) -/** - * @} - */ - -/** @defgroup TIM_Internal_Trigger_Selection - * @{ - */ - -#define TIM_TS_ITR0 ((uint16_t)0x0000) -#define TIM_TS_ITR1 ((uint16_t)0x0010) -#define TIM_TS_ITR2 ((uint16_t)0x0020) -#define TIM_TS_ITR3 ((uint16_t)0x0030) -#define TIM_TS_TI1F_ED ((uint16_t)0x0040) -#define TIM_TS_TI1FP1 ((uint16_t)0x0050) -#define TIM_TS_TI2FP2 ((uint16_t)0x0060) -#define TIM_TS_ETRF ((uint16_t)0x0070) -#define IS_TIM_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ - ((SELECTION) == TIM_TS_ITR1) || \ - ((SELECTION) == TIM_TS_ITR2) || \ - ((SELECTION) == TIM_TS_ITR3) || \ - ((SELECTION) == TIM_TS_TI1F_ED) || \ - ((SELECTION) == TIM_TS_TI1FP1) || \ - ((SELECTION) == TIM_TS_TI2FP2) || \ - ((SELECTION) == TIM_TS_ETRF)) -#define IS_TIM_INTERNAL_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ - ((SELECTION) == TIM_TS_ITR1) || \ - ((SELECTION) == TIM_TS_ITR2) || \ - ((SELECTION) == TIM_TS_ITR3)) -/** - * @} - */ - -/** @defgroup TIM_TIx_External_Clock_Source - * @{ - */ - -#define TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050) -#define TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060) -#define TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040) - -/** - * @} - */ - -/** @defgroup TIM_External_Trigger_Polarity - * @{ - */ -#define TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000) -#define TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000) -#define IS_TIM_EXT_POLARITY(POLARITY) (((POLARITY) == TIM_ExtTRGPolarity_Inverted) || \ - ((POLARITY) == TIM_ExtTRGPolarity_NonInverted)) -/** - * @} - */ - -/** @defgroup TIM_Prescaler_Reload_Mode - * @{ - */ - -#define TIM_PSCReloadMode_Update ((uint16_t)0x0000) -#define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001) -#define IS_TIM_PRESCALER_RELOAD(RELOAD) (((RELOAD) == TIM_PSCReloadMode_Update) || \ - ((RELOAD) == TIM_PSCReloadMode_Immediate)) -/** - * @} - */ - -/** @defgroup TIM_Forced_Action - * @{ - */ - -#define TIM_ForcedAction_Active ((uint16_t)0x0050) -#define TIM_ForcedAction_InActive ((uint16_t)0x0040) -#define IS_TIM_FORCED_ACTION(ACTION) (((ACTION) == TIM_ForcedAction_Active) || \ - ((ACTION) == TIM_ForcedAction_InActive)) -/** - * @} - */ - -/** @defgroup TIM_Encoder_Mode - * @{ - */ - -#define TIM_EncoderMode_TI1 ((uint16_t)0x0001) -#define TIM_EncoderMode_TI2 ((uint16_t)0x0002) -#define TIM_EncoderMode_TI12 ((uint16_t)0x0003) -#define IS_TIM_ENCODER_MODE(MODE) (((MODE) == TIM_EncoderMode_TI1) || \ - ((MODE) == TIM_EncoderMode_TI2) || \ - ((MODE) == TIM_EncoderMode_TI12)) -/** - * @} - */ - - -/** @defgroup TIM_Event_Source - * @{ - */ - -#define TIM_EventSource_Update ((uint16_t)0x0001) -#define TIM_EventSource_CC1 ((uint16_t)0x0002) -#define TIM_EventSource_CC2 ((uint16_t)0x0004) -#define TIM_EventSource_CC3 ((uint16_t)0x0008) -#define TIM_EventSource_CC4 ((uint16_t)0x0010) -#define TIM_EventSource_COM ((uint16_t)0x0020) -#define TIM_EventSource_Trigger ((uint16_t)0x0040) -#define TIM_EventSource_Break ((uint16_t)0x0080) -#define IS_TIM_EVENT_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0xFF00) == 0x0000) && ((SOURCE) != 0x0000)) - -/** - * @} - */ - -/** @defgroup TIM_Update_Source - * @{ - */ - -#define TIM_UpdateSource_Global ((uint16_t)0x0000) /*!< Source of update is the counter overflow/underflow - or the setting of UG bit, or an update generation - through the slave mode controller. */ -#define TIM_UpdateSource_Regular ((uint16_t)0x0001) /*!< Source of update is counter overflow/underflow. */ -#define IS_TIM_UPDATE_SOURCE(SOURCE) (((SOURCE) == TIM_UpdateSource_Global) || \ - ((SOURCE) == TIM_UpdateSource_Regular)) -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Preload_State - * @{ - */ - -#define TIM_OCPreload_Enable ((uint16_t)0x0008) -#define TIM_OCPreload_Disable ((uint16_t)0x0000) -#define IS_TIM_OCPRELOAD_STATE(STATE) (((STATE) == TIM_OCPreload_Enable) || \ - ((STATE) == TIM_OCPreload_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Fast_State - * @{ - */ - -#define TIM_OCFast_Enable ((uint16_t)0x0004) -#define TIM_OCFast_Disable ((uint16_t)0x0000) -#define IS_TIM_OCFAST_STATE(STATE) (((STATE) == TIM_OCFast_Enable) || \ - ((STATE) == TIM_OCFast_Disable)) - -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Clear_State - * @{ - */ - -#define TIM_OCClear_Enable ((uint16_t)0x0080) -#define TIM_OCClear_Disable ((uint16_t)0x0000) -#define IS_TIM_OCCLEAR_STATE(STATE) (((STATE) == TIM_OCClear_Enable) || \ - ((STATE) == TIM_OCClear_Disable)) -/** - * @} - */ - -/** @defgroup TIM_Trigger_Output_Source - * @{ - */ - -#define TIM_TRGOSource_Reset ((uint16_t)0x0000) -#define TIM_TRGOSource_Enable ((uint16_t)0x0010) -#define TIM_TRGOSource_Update ((uint16_t)0x0020) -#define TIM_TRGOSource_OC1 ((uint16_t)0x0030) -#define TIM_TRGOSource_OC1Ref ((uint16_t)0x0040) -#define TIM_TRGOSource_OC2Ref ((uint16_t)0x0050) -#define TIM_TRGOSource_OC3Ref ((uint16_t)0x0060) -#define TIM_TRGOSource_OC4Ref ((uint16_t)0x0070) -#define IS_TIM_TRGO_SOURCE(SOURCE) (((SOURCE) == TIM_TRGOSource_Reset) || \ - ((SOURCE) == TIM_TRGOSource_Enable) || \ - ((SOURCE) == TIM_TRGOSource_Update) || \ - ((SOURCE) == TIM_TRGOSource_OC1) || \ - ((SOURCE) == TIM_TRGOSource_OC1Ref) || \ - ((SOURCE) == TIM_TRGOSource_OC2Ref) || \ - ((SOURCE) == TIM_TRGOSource_OC3Ref) || \ - ((SOURCE) == TIM_TRGOSource_OC4Ref)) -/** - * @} - */ - -/** @defgroup TIM_Slave_Mode - * @{ - */ - -#define TIM_SlaveMode_Reset ((uint16_t)0x0004) -#define TIM_SlaveMode_Gated ((uint16_t)0x0005) -#define TIM_SlaveMode_Trigger ((uint16_t)0x0006) -#define TIM_SlaveMode_External1 ((uint16_t)0x0007) -#define IS_TIM_SLAVE_MODE(MODE) (((MODE) == TIM_SlaveMode_Reset) || \ - ((MODE) == TIM_SlaveMode_Gated) || \ - ((MODE) == TIM_SlaveMode_Trigger) || \ - ((MODE) == TIM_SlaveMode_External1)) -/** - * @} - */ - -/** @defgroup TIM_Master_Slave_Mode - * @{ - */ - -#define TIM_MasterSlaveMode_Enable ((uint16_t)0x0080) -#define TIM_MasterSlaveMode_Disable ((uint16_t)0x0000) -#define IS_TIM_MSM_STATE(STATE) (((STATE) == TIM_MasterSlaveMode_Enable) || \ - ((STATE) == TIM_MasterSlaveMode_Disable)) -/** - * @} - */ -/** @defgroup TIM_Remap - * @{ - */ - -#define TIM2_TIM8_TRGO ((uint16_t)0x0000) -#define TIM2_ETH_PTP ((uint16_t)0x0400) -#define TIM2_USBFS_SOF ((uint16_t)0x0800) -#define TIM2_USBHS_SOF ((uint16_t)0x0C00) - -#define TIM5_GPIO ((uint16_t)0x0000) -#define TIM5_LSI ((uint16_t)0x0040) -#define TIM5_LSE ((uint16_t)0x0080) -#define TIM5_RTC ((uint16_t)0x00C0) - -#define TIM11_GPIO ((uint16_t)0x0000) -#define TIM11_HSE ((uint16_t)0x0002) - -#define IS_TIM_REMAP(TIM_REMAP) (((TIM_REMAP) == TIM2_TIM8_TRGO)||\ - ((TIM_REMAP) == TIM2_ETH_PTP)||\ - ((TIM_REMAP) == TIM2_USBFS_SOF)||\ - ((TIM_REMAP) == TIM2_USBHS_SOF)||\ - ((TIM_REMAP) == TIM5_GPIO)||\ - ((TIM_REMAP) == TIM5_LSI)||\ - ((TIM_REMAP) == TIM5_LSE)||\ - ((TIM_REMAP) == TIM5_RTC)||\ - ((TIM_REMAP) == TIM11_GPIO)||\ - ((TIM_REMAP) == TIM11_HSE)) - -/** - * @} - */ -/** @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)) - -/** - * @} - */ - -/** @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 -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* TimeBase management ********************************************************/ -void TIM_DeInit(TIM_TypeDef* TIMx); -void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); -void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); -void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode); -void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode); -void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter); -void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload); -uint32_t TIM_GetCounter(TIM_TypeDef* TIMx); -uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx); -void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource); -void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode); -void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD); -void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); - -/* Output Compare management **************************************************/ -void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode); -void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1); -void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2); -void TIM_SetCompare3(TIM_TypeDef* TIMx, uint32_t Compare3); -void TIM_SetCompare4(TIM_TypeDef* TIMx, uint32_t Compare4); -void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_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); - -/* Input Capture management ***************************************************/ -void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); -void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct); -void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); -uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx); -uint32_t TIM_GetCapture2(TIM_TypeDef* TIMx); -uint32_t TIM_GetCapture3(TIM_TypeDef* TIMx); -uint32_t TIM_GetCapture4(TIM_TypeDef* TIMx); -void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); - -/* Advanced-control timers (TIM1 and TIM8) specific features ******************/ -void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct); -void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct); -void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState); - -/* Interrupts, DMA and flags management ***************************************/ -void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); -void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource); -FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); -void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); -ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT); -void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT); -void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength); -void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState); -void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState); - -/* Clocks management **********************************************************/ -void TIM_InternalClockConfig(TIM_TypeDef* TIMx); -void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); -void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, - uint16_t TIM_ICPolarity, uint16_t ICFilter); -void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); -void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, - uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter); - -/* Synchronization management *************************************************/ -void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); -void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource); -void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); -void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode); -void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); - -/* Specific interface management **********************************************/ -void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, - uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity); -void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState); - -/* Specific remapping management **********************************************/ -void TIM_RemapConfig(TIM_TypeDef* TIMx, uint16_t TIM_Remap); - -#ifdef __cplusplus -} -#endif - -#endif /*__STM32F4xx_TIM_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h deleted file mode 100644 index 391fe769..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h +++ /dev/null @@ -1,431 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_usart.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the USART - * firmware library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_USART_H -#define __STM32F4xx_USART_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup 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) / (8 * (OVR8+1) * (USART_InitStruct->USART_BaudRate))) - - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 8 * (OVR8+1)) + 0.5 - Where OVR8 is the "oversampling by 8 mode" configuration bit in the CR1 register. */ - - 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 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; - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup USART_Exported_Constants - * @{ - */ - -#define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == USART1) || \ - ((PERIPH) == USART2) || \ - ((PERIPH) == USART3) || \ - ((PERIPH) == UART4) || \ - ((PERIPH) == UART5) || \ - ((PERIPH) == USART6) || \ - ((PERIPH) == UART7) || \ - ((PERIPH) == UART8)) - -#define IS_USART_1236_PERIPH(PERIPH) (((PERIPH) == USART1) || \ - ((PERIPH) == USART2) || \ - ((PERIPH) == USART3) || \ - ((PERIPH) == USART6)) - -/** @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_ORE_RX ((uint16_t)0x0325) /* In case interrupt is generated if the RXNEIE bit is set */ -#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_ER ((uint16_t)0x0360) /* In case interrupt is generated if the EIE bit is set */ -#define USART_IT_NE ((uint16_t)0x0260) -#define USART_IT_FE ((uint16_t)0x0160) - -/** @defgroup USART_Legacy - * @{ - */ -#define USART_IT_ORE USART_IT_ORE_ER -/** - * @} - */ - -#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_ORE_RX) || ((IT) == USART_IT_ORE_ER) || \ - ((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_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) < 7500001)) -#define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF) -#define IS_USART_DATA(DATA) ((DATA) <= 0x1FF) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the USART configuration to the default reset state ***/ -void USART_DeInit(USART_TypeDef* USARTx); - -/* Initialization and Configuration functions *********************************/ -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_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler); -void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState); - -/* Data transfers functions ***************************************************/ -void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); -uint16_t USART_ReceiveData(USART_TypeDef* USARTx); - -/* Multi-Processor Communication functions ************************************/ -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); - -/* LIN mode functions *********************************************************/ -void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength); -void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_SendBreak(USART_TypeDef* USARTx); - -/* Half-duplex mode function **************************************************/ -void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState); - -/* Smartcard mode functions ***************************************************/ -void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime); - -/* IrDA mode functions ********************************************************/ -void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode); -void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState); - -/* DMA transfers management functions *****************************************/ -void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); - -/* Interrupts and flags management functions **********************************/ -void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, 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 /* __STM32F4xx_USART_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h deleted file mode 100644 index d98e6cc8..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h +++ /dev/null @@ -1,111 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_wwdg.h - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file contains all the functions prototypes for the WWDG firmware - * library. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_WWDG_H -#define __STM32F4xx_WWDG_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @addtogroup WWDG - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @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)) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/* Function used to set the WWDG configuration to the default reset state ****/ -void WWDG_DeInit(void); - -/* Prescaler, Refresh window and Counter configuration functions **************/ -void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); -void WWDG_SetWindowValue(uint8_t WindowValue); -void WWDG_EnableIT(void); -void WWDG_SetCounter(uint8_t Counter); - -/* WWDG activation function ***************************************************/ -void WWDG_Enable(uint8_t Counter); - -/* Interrupts and flags management functions **********************************/ -FlagStatus WWDG_GetFlagStatus(void); -void WWDG_ClearFlag(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_WWDG_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/misc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/misc.c deleted file mode 100644 index f569997e..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/misc.c +++ /dev/null @@ -1,249 +0,0 @@ -/** - ****************************************************************************** - * @file misc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides all the miscellaneous firmware functions (add-on - * to CMSIS functions). - * - * @verbatim - * - * =================================================================== - * How to configure Interrupts using driver - * =================================================================== - * - * This section provide functions allowing to configure the NVIC interrupts (IRQ). - * The Cortex-M4 exceptions are managed by CMSIS functions. - * - * 1. Configure the NVIC Priority Grouping using NVIC_PriorityGroupConfig() - * function according to the following table. - - * 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 - * ========================================================================================================================== - * - * 2. Enable and Configure the priority of the selected IRQ Channels using NVIC_Init() - * - * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. - * The pending IRQ priority will be managed only by the subpriority. - * - * @note IRQ priority order (sorted by highest to lowest priority): - * - Lowest pre-emption priority - * - Lowest subpriority - * - Lowest hardware priority (IRQ number) - * - * @endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "misc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup MISC - * @brief MISC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @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 - * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. - * The pending IRQ priority will be managed only by the 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. - * @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig() - * function should be called before. - * @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) -{ - uint8_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 = NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre; - tmppriority |= (uint8_t)(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: Vector Table in internal SRAM. - * @arg NVIC_VectTab_FLASH: Vector Table in internal 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: Low Power SEV on Pend. - * @arg NVIC_LP_SLEEPDEEP: Low Power DEEPSLEEP request. - * @arg NVIC_LP_SLEEPONEXIT: Low Power Sleep on Exit. - * @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c deleted file mode 100644 index 8f6a492d..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c +++ /dev/null @@ -1,1741 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_adc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Analog to Digital Convertor (ADC) peripheral: - * + Initialization and Configuration (in addition to ADC multi mode - * selection) - * + Analog Watchdog configuration - * + Temperature Sensor & Vrefint (Voltage Reference internal) & VBAT - * management - * + Regular Channels Configuration - * + Regular Channels DMA Configuration - * + Injected channels Configuration - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable the ADC interface clock using - RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADCx, ENABLE); - - (#) ADC pins configuration - (++) Enable the clock for the ADC GPIOs using the following function: - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - (++) Configure these ADC pins in analog mode using GPIO_Init(); - - (#) Configure the ADC Prescaler, conversion resolution and data - alignment using the ADC_Init() function. - (#) Activate the ADC peripheral using ADC_Cmd() function. - - *** Regular channels group configuration *** - ============================================ - [..] - (+) To configure the ADC regular channels group features, use - ADC_Init() and ADC_RegularChannelConfig() functions. - (+) To activate the continuous mode, use the ADC_continuousModeCmd() - function. - (+) To configurate and activate the Discontinuous mode, use the - ADC_DiscModeChannelCountConfig() and ADC_DiscModeCmd() functions. - (+) To read the ADC converted values, use the ADC_GetConversionValue() - function. - - *** Multi mode ADCs Regular channels configuration *** - ====================================================== - [..] - (+) Refer to "Regular channels group configuration" description to - configure the ADC1, ADC2 and ADC3 regular channels. - (+) Select the Multi mode ADC regular channels features (dual or - triple mode) using ADC_CommonInit() function and configure - the DMA mode using ADC_MultiModeDMARequestAfterLastTransferCmd() - functions. - (+) Read the ADCs converted values using the - ADC_GetMultiModeConversionValue() function. - - *** DMA for Regular channels group features configuration *** - ============================================================= - [..] - (+) To enable the DMA mode for regular channels group, use the - ADC_DMACmd() function. - (+) To enable the generation of DMA requests continuously at the end - of the last DMA transfer, use the ADC_DMARequestAfterLastTransferCmd() - function. - - *** Injected channels group configuration *** - ============================================= - [..] - (+) To configure the ADC Injected channels group features, use - ADC_InjectedChannelConfig() and ADC_InjectedSequencerLengthConfig() - functions. - (+) To activate the continuous mode, use the ADC_continuousModeCmd() - function. - (+) To activate the Injected Discontinuous mode, use the - ADC_InjectedDiscModeCmd() function. - (+) To activate the AutoInjected mode, use the ADC_AutoInjectedConvCmd() - function. - (+) To read the ADC converted values, use the ADC_GetInjectedConversionValue() - function. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_adc.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup ADC - * @brief ADC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* ADC DISCNUM mask */ -#define CR1_DISCNUM_RESET ((uint32_t)0xFFFF1FFF) - -/* 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)0xFCFFFEFF) - -/* ADC EXTEN mask */ -#define CR2_EXTEN_RESET ((uint32_t)0xCFFFFFFF) - -/* ADC JEXTEN mask */ -#define CR2_JEXTEN_RESET ((uint32_t)0xFFCFFFFF) - -/* ADC JEXTSEL mask */ -#define CR2_JEXTSEL_RESET ((uint32_t)0xFFF0FFFF) - -/* CR2 register Mask */ -#define CR2_CLEAR_MASK ((uint32_t)0xC0FFF7FD) - -/* ADC SQx mask */ -#define SQR3_SQ_SET ((uint32_t)0x0000001F) -#define SQR2_SQ_SET ((uint32_t)0x0000001F) -#define SQR1_SQ_SET ((uint32_t)0x0000001F) - -/* ADC L Mask */ -#define SQR1_L_RESET ((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) - -/* ADC CDR register base address */ -#define CDR_ADDRESS ((uint32_t)0x40012308) - -/* ADC CCR register Mask */ -#define CR_CLEAR_MASK ((uint32_t)0xFFFC30E0) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup ADC_Private_Functions - * @{ - */ - -/** @defgroup ADC_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to: - (+) Initialize and configure the ADC Prescaler - (+) ADC Conversion Resolution (12bit..6bit) - (+) Scan Conversion Mode (multichannel or one channel) for regular group - (+) ADC Continuous Conversion Mode (Continuous or Single conversion) for - regular group - (+) External trigger Edge and source of regular group, - (+) Converted data alignment (left or right) - (+) The number of ADC conversions that will be done using the sequencer for - regular channel group - (+) Multi ADC mode selection - (+) Direct memory access mode selection for multi ADC mode - (+) Delay between 2 sampling phases (used in dual or triple interleaved modes) - (+) Enable or disable the ADC peripheral -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes all ADCs peripherals registers to their default reset - * values. - * @param None - * @retval None - */ -void ADC_DeInit(void) -{ - /* Enable all ADCs reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC, ENABLE); - - /* Release all ADCs from reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC, DISABLE); -} - -/** - * @brief Initializes the ADCx peripheral according to the specified parameters - * in the ADC_InitStruct. - * @note This function is used to configure the global features of the ADC ( - * Resolution and Data Alignment), however, the rest of the configuration - * parameters are specific to the regular channels group (scan mode - * activation, continuous mode activation, External trigger source and - * edge, number of conversion in the regular channels group sequencer). - * @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_RESOLUTION(ADC_InitStruct->ADC_Resolution)); - assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ScanConvMode)); - assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ContinuousConvMode)); - assert_param(IS_ADC_EXT_TRIG_EDGE(ADC_InitStruct->ADC_ExternalTrigConvEdge)); - 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_NbrOfConversion)); - - /*---------------------------- ADCx CR1 Configuration -----------------*/ - /* Get the ADCx CR1 value */ - tmpreg1 = ADCx->CR1; - - /* Clear RES and SCAN bits */ - tmpreg1 &= CR1_CLEAR_MASK; - - /* Configure ADCx: scan conversion mode and resolution */ - /* Set SCAN bit according to ADC_ScanConvMode value */ - /* Set RES bit according to ADC_Resolution value */ - tmpreg1 |= (uint32_t)(((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8) | \ - ADC_InitStruct->ADC_Resolution); - /* Write to ADCx CR1 */ - ADCx->CR1 = tmpreg1; - /*---------------------------- ADCx CR2 Configuration -----------------*/ - /* Get the ADCx CR2 value */ - tmpreg1 = ADCx->CR2; - - /* Clear CONT, ALIGN, EXTEN and EXTSEL bits */ - tmpreg1 &= CR2_CLEAR_MASK; - - /* Configure ADCx: external trigger event and edge, data alignment and - continuous conversion mode */ - /* Set ALIGN bit according to ADC_DataAlign value */ - /* Set EXTEN bits according to ADC_ExternalTrigConvEdge 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 | - ADC_InitStruct->ADC_ExternalTrigConvEdge | \ - ((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_L_RESET; - - /* Configure ADCx: regular channel sequence length */ - /* Set L bits according to ADC_NbrOfConversion value */ - tmpreg2 |= (uint8_t)(ADC_InitStruct->ADC_NbrOfConversion - (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. - * @note This function is used to initialize the global features of the ADC ( - * Resolution and Data Alignment), however, the rest of the configuration - * parameters are specific to the regular channels group (scan mode - * activation, continuous mode activation, External trigger source and - * edge, number of conversion in the regular channels group sequencer). - * @param ADC_InitStruct: pointer to an ADC_InitTypeDef structure which will - * be initialized. - * @retval None - */ -void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct) -{ - /* Initialize the ADC_Mode member */ - ADC_InitStruct->ADC_Resolution = ADC_Resolution_12b; - - /* initialize the ADC_ScanConvMode member */ - ADC_InitStruct->ADC_ScanConvMode = DISABLE; - - /* Initialize the ADC_ContinuousConvMode member */ - ADC_InitStruct->ADC_ContinuousConvMode = DISABLE; - - /* Initialize the ADC_ExternalTrigConvEdge member */ - ADC_InitStruct->ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; - - /* 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_NbrOfConversion member */ - ADC_InitStruct->ADC_NbrOfConversion = 1; -} - -/** - * @brief Initializes the ADCs peripherals according to the specified parameters - * in the ADC_CommonInitStruct. - * @param ADC_CommonInitStruct: pointer to an ADC_CommonInitTypeDef structure - * that contains the configuration information for All ADCs peripherals. - * @retval None - */ -void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct) -{ - uint32_t tmpreg1 = 0; - /* Check the parameters */ - assert_param(IS_ADC_MODE(ADC_CommonInitStruct->ADC_Mode)); - assert_param(IS_ADC_PRESCALER(ADC_CommonInitStruct->ADC_Prescaler)); - assert_param(IS_ADC_DMA_ACCESS_MODE(ADC_CommonInitStruct->ADC_DMAAccessMode)); - assert_param(IS_ADC_SAMPLING_DELAY(ADC_CommonInitStruct->ADC_TwoSamplingDelay)); - /*---------------------------- ADC CCR Configuration -----------------*/ - /* Get the ADC CCR value */ - tmpreg1 = ADC->CCR; - - /* Clear MULTI, DELAY, DMA and ADCPRE bits */ - tmpreg1 &= CR_CLEAR_MASK; - - /* Configure ADCx: Multi mode, Delay between two sampling time, ADC prescaler, - and DMA access mode for multimode */ - /* Set MULTI bits according to ADC_Mode value */ - /* Set ADCPRE bits according to ADC_Prescaler value */ - /* Set DMA bits according to ADC_DMAAccessMode value */ - /* Set DELAY bits according to ADC_TwoSamplingDelay value */ - tmpreg1 |= (uint32_t)(ADC_CommonInitStruct->ADC_Mode | - ADC_CommonInitStruct->ADC_Prescaler | - ADC_CommonInitStruct->ADC_DMAAccessMode | - ADC_CommonInitStruct->ADC_TwoSamplingDelay); - - /* Write to ADC CCR */ - ADC->CCR = tmpreg1; -} - -/** - * @brief Fills each ADC_CommonInitStruct member with its default value. - * @param ADC_CommonInitStruct: pointer to an ADC_CommonInitTypeDef structure - * which will be initialized. - * @retval None - */ -void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct) -{ - /* Initialize the ADC_Mode member */ - ADC_CommonInitStruct->ADC_Mode = ADC_Mode_Independent; - - /* initialize the ADC_Prescaler member */ - ADC_CommonInitStruct->ADC_Prescaler = ADC_Prescaler_Div2; - - /* Initialize the ADC_DMAAccessMode member */ - ADC_CommonInitStruct->ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; - - /* Initialize the ADC_TwoSamplingDelay member */ - ADC_CommonInitStruct->ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; -} - -/** - * @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 |= (uint32_t)ADC_CR2_ADON; - } - else - { - /* Disable the selected ADC peripheral */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_ADON); - } -} -/** - * @} - */ - -/** @defgroup ADC_Group2 Analog Watchdog configuration functions - * @brief Analog Watchdog configuration functions - * -@verbatim - =============================================================================== - ##### Analog Watchdog configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to configure the Analog Watchdog - (AWD) feature in the ADC. - - [..] A typical configuration Analog Watchdog is done following these steps : - (#) the ADC guarded channel(s) is (are) selected using the - ADC_AnalogWatchdogSingleChannelConfig() function. - (#) The Analog watchdog lower and higher threshold are configured using the - ADC_AnalogWatchdogThresholdsConfig() function. - (#) The Analog watchdog is enabled and configured to enable the check, on one - or more channels, using the ADC_AnalogWatchdogCmd() function. -@endverbatim - * @{ - */ - -/** - * @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, JAWDEN 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 12-bit value. - * @param LowThreshold: the ADC analog watchdog Low threshold value. - * This parameter must be a 12-bit 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 - * @arg ADC_Channel_18: ADC Channel18 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; -} -/** - * @} - */ - -/** @defgroup ADC_Group3 Temperature Sensor, Vrefint (Voltage Reference internal) - * and VBAT (Voltage BATtery) management functions - * @brief Temperature Sensor, Vrefint and VBAT management functions - * -@verbatim - =============================================================================== - ##### Temperature Sensor, Vrefint and VBAT management functions ##### - =============================================================================== - [..] This section provides functions allowing to enable/ disable the internal - connections between the ADC and the Temperature Sensor, the Vrefint and - the Vbat sources. - - [..] A typical configuration to get the Temperature sensor and Vrefint channels - voltages is done following these steps : - (#) Enable the internal connection of Temperature sensor and Vrefint sources - with the ADC channels using ADC_TempSensorVrefintCmd() function. - (#) Select the ADC_Channel_TempSensor and/or ADC_Channel_Vrefint using - ADC_RegularChannelConfig() or ADC_InjectedChannelConfig() functions - (#) Get the voltage values, using ADC_GetConversionValue() or - ADC_GetInjectedConversionValue(). - - [..] A typical configuration to get the VBAT channel voltage is done following - these steps : - (#) Enable the internal connection of VBAT source with the ADC channel using - ADC_VBATCmd() function. - (#) Select the ADC_Channel_Vbat using ADC_RegularChannelConfig() or - ADC_InjectedChannelConfig() functions - (#) Get the voltage value, using ADC_GetConversionValue() or - ADC_GetInjectedConversionValue(). - -@endverbatim - * @{ - */ - - -/** - * @brief Enables or disables the temperature sensor and Vrefint channels. - * @param NewState: new state of the temperature sensor and Vrefint channels. - * 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*/ - ADC->CCR |= (uint32_t)ADC_CCR_TSVREFE; - } - else - { - /* Disable the temperature sensor and Vrefint channel*/ - ADC->CCR &= (uint32_t)(~ADC_CCR_TSVREFE); - } -} - -/** - * @brief Enables or disables the VBAT (Voltage Battery) channel. - * @param NewState: new state of the VBAT channel. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_VBATCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - /* Enable the VBAT channel*/ - ADC->CCR |= (uint32_t)ADC_CCR_VBATE; - } - else - { - /* Disable the VBAT channel*/ - ADC->CCR &= (uint32_t)(~ADC_CCR_VBATE); - } -} - -/** - * @} - */ - -/** @defgroup ADC_Group4 Regular Channels Configuration functions - * @brief Regular Channels Configuration functions - * -@verbatim - =============================================================================== - ##### Regular Channels Configuration functions ##### - =============================================================================== - - [..] This section provides functions allowing to manage the ADC's regular channels, - it is composed of 2 sub sections : - - (#) Configuration and management functions for regular channels: This subsection - provides functions allowing to configure the ADC regular channels : - (++) Configure the rank in the regular group sequencer for each channel - (++) Configure the sampling time for each channel - (++) select the conversion Trigger for regular channels - (++) select the desired EOC event behavior configuration - (++) Activate the continuous Mode (*) - (++) Activate the Discontinuous Mode - -@@- Please Note that the following features for regular channels - are configurated using the ADC_Init() function : - (+@@) scan mode activation - (+@@) continuous mode activation (**) - (+@@) External trigger source - (+@@) External trigger edge - (+@@) number of conversion in the regular channels group sequencer. - - -@@- (*) and (**) are performing the same configuration - - (#) Get the conversion data: This subsection provides an important function in - the ADC peripheral since it returns the converted data of the current - regular channel. When the Conversion value is read, the EOC Flag is - automatically cleared. - - -@- For multi ADC mode, the last ADC1, ADC2 and ADC3 regular conversions - results data (in the selected multi mode) can be returned in the same - time using ADC_GetMultiModeConversionValue() function. - -@endverbatim - * @{ - */ -/** - * @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 - * @arg ADC_Channel_18: ADC Channel18 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_3Cycles: Sample time equal to 3 cycles - * @arg ADC_SampleTime_15Cycles: Sample time equal to 15 cycles - * @arg ADC_SampleTime_28Cycles: Sample time equal to 28 cycles - * @arg ADC_SampleTime_56Cycles: Sample time equal to 56 cycles - * @arg ADC_SampleTime_84Cycles: Sample time equal to 84 cycles - * @arg ADC_SampleTime_112Cycles: Sample time equal to 112 cycles - * @arg ADC_SampleTime_144Cycles: Sample time equal to 144 cycles - * @arg ADC_SampleTime_480Cycles: Sample time equal to 480 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_18 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 sample time */ - tmpreg1 &= ~tmpreg2; - - /* Calculate the mask to set */ - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10)); - - /* Set the new 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 sample time */ - tmpreg1 &= ~tmpreg2; - - /* Calculate the mask to set */ - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); - - /* Set the new 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 the selected ADC software start conversion of the regular channels. - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @retval None - */ -void ADC_SoftwareStartConv(ADC_TypeDef* ADCx) -{ - /* Check the parameters */ - assert_param(IS_ADC_ALL_PERIPH(ADCx)); - - /* Enable the selected ADC conversion for regular group */ - ADCx->CR2 |= (uint32_t)ADC_CR2_SWSTART; -} - -/** - * @brief Gets the selected ADC Software start regular 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 & ADC_CR2_JSWSTART) != (uint32_t)RESET) - { - /* SWSTART bit is set */ - bitstatus = SET; - } - else - { - /* SWSTART bit is reset */ - bitstatus = RESET; - } - - /* Return the SWSTART bit status */ - return bitstatus; -} - - -/** - * @brief Enables or disables the EOC on each regular channel conversion - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param NewState: new state of the selected ADC EOC flag rising - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_EOCOnEachRegularChannelCmd(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 EOC rising on each regular channel conversion */ - ADCx->CR2 |= (uint32_t)ADC_CR2_EOCS; - } - else - { - /* Disable the selected ADC EOC rising on each regular channel conversion */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_EOCS); - } -} - -/** - * @brief Enables or disables the ADC continuous conversion mode - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param NewState: new state of the selected ADC continuous conversion mode - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_ContinuousModeCmd(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 continuous conversion mode */ - ADCx->CR2 |= (uint32_t)ADC_CR2_CONT; - } - else - { - /* Disable the selected ADC continuous conversion mode */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_CONT); - } -} - -/** - * @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 |= (uint32_t)ADC_CR1_DISCEN; - } - else - { - /* Disable the selected ADC regular discontinuous mode */ - ADCx->CR1 &= (uint32_t)(~ADC_CR1_DISCEN); - } -} - -/** - * @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, ADC2 and ADC3 regular conversions results - * data in the selected multi mode. - * @param None - * @retval The Data conversion value. - * @note In dual mode, the value returned by this function is as following - * Data[15:0] : these bits contain the regular data of ADC1. - * Data[31:16]: these bits contain the regular data of ADC2. - * @note In triple mode, the value returned by this function is as following - * Data[15:0] : these bits contain alternatively the regular data of ADC1, ADC3 and ADC2. - * Data[31:16]: these bits contain alternatively the regular data of ADC2, ADC1 and ADC3. - */ -uint32_t ADC_GetMultiModeConversionValue(void) -{ - /* Return the multi mode conversion value */ - return (*(__IO uint32_t *) CDR_ADDRESS); -} -/** - * @} - */ - -/** @defgroup ADC_Group5 Regular Channels DMA Configuration functions - * @brief Regular Channels DMA Configuration functions - * -@verbatim - =============================================================================== - ##### Regular Channels DMA Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to configure the DMA for ADC - regular channels. - Since converted regular channel values are stored into a unique data - register, it is useful to use DMA for conversion of more than one regular - channel. This avoids the loss of the data already stored in the ADC - Data register. - When the DMA mode is enabled (using the ADC_DMACmd() function), after each - conversion of a regular channel, a DMA request is generated. - [..] Depending on the "DMA disable selection for Independent ADC mode" - configuration (using the ADC_DMARequestAfterLastTransferCmd() function), - at the end of the last DMA transfer, two possibilities are allowed: - (+) No new DMA request is issued to the DMA controller (feature DISABLED) - (+) Requests can continue to be generated (feature ENABLED). - [..] Depending on the "DMA disable selection for multi ADC mode" configuration - (using the void ADC_MultiModeDMARequestAfterLastTransferCmd() function), - at the end of the last DMA transfer, two possibilities are allowed: - (+) No new DMA request is issued to the DMA controller (feature DISABLED) - (+) Requests can continue to be generated (feature ENABLED). - -@endverbatim - * @{ - */ - - /** - * @brief Enables or disables the specified ADC DMA request. - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param NewState: new state of the selected ADC DMA transfer. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_ADC_ALL_PERIPH(ADCx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - /* Enable the selected ADC DMA request */ - ADCx->CR2 |= (uint32_t)ADC_CR2_DMA; - } - else - { - /* Disable the selected ADC DMA request */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_DMA); - } -} - -/** - * @brief Enables or disables the ADC DMA request after last transfer (Single-ADC mode) - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param NewState: new state of the selected ADC DMA request after last transfer. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void ADC_DMARequestAfterLastTransferCmd(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 DMA request after last transfer */ - ADCx->CR2 |= (uint32_t)ADC_CR2_DDS; - } - else - { - /* Disable the selected ADC DMA request after last transfer */ - ADCx->CR2 &= (uint32_t)(~ADC_CR2_DDS); - } -} - -/** - * @brief Enables or disables the ADC DMA request after last transfer in multi ADC mode - * @param NewState: new state of the selected ADC DMA request after last transfer. - * This parameter can be: ENABLE or DISABLE. - * @note if Enabled, DMA requests are issued as long as data are converted and - * DMA mode for multi ADC mode (selected using ADC_CommonInit() function - * by ADC_CommonInitStruct.ADC_DMAAccessMode structure member) is - * ADC_DMAAccessMode_1, ADC_DMAAccessMode_2 or ADC_DMAAccessMode_3. - * @retval None - */ -void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - /* Enable the selected ADC DMA request after last transfer */ - ADC->CCR |= (uint32_t)ADC_CCR_DDS; - } - else - { - /* Disable the selected ADC DMA request after last transfer */ - ADC->CCR &= (uint32_t)(~ADC_CCR_DDS); - } -} -/** - * @} - */ - -/** @defgroup ADC_Group6 Injected channels Configuration functions - * @brief Injected channels Configuration functions - * -@verbatim - =============================================================================== - ##### Injected channels Configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to configure the ADC Injected channels, - it is composed of 2 sub sections : - - (#) Configuration functions for Injected channels: This subsection provides - functions allowing to configure the ADC injected channels : - (++) Configure the rank in the injected group sequencer for each channel - (++) Configure the sampling time for each channel - (++) Activate the Auto injected Mode - (++) Activate the Discontinuous Mode - (++) scan mode activation - (++) External/software trigger source - (++) External trigger edge - (++) injected channels sequencer. - - (#) Get the Specified Injected channel conversion data: This subsection - provides an important function in the ADC peripheral since it returns the - converted data of the specific injected channel. - -@endverbatim - * @{ - */ -/** - * @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 - * @arg ADC_Channel_18: ADC Channel18 selected - * @param Rank: The rank in the injected group sequencer. - * This parameter must be between 1 to 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_3Cycles: Sample time equal to 3 cycles - * @arg ADC_SampleTime_15Cycles: Sample time equal to 15 cycles - * @arg ADC_SampleTime_28Cycles: Sample time equal to 28 cycles - * @arg ADC_SampleTime_56Cycles: Sample time equal to 56 cycles - * @arg ADC_SampleTime_84Cycles: Sample time equal to 84 cycles - * @arg ADC_SampleTime_112Cycles: Sample time equal to 112 cycles - * @arg ADC_SampleTime_144Cycles: Sample time equal to 144 cycles - * @arg ADC_SampleTime_480Cycles: Sample time equal to 480 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_18 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 sample time */ - tmpreg1 &= ~tmpreg2; - /* Calculate the mask to set */ - tmpreg2 = (uint32_t)ADC_SampleTime << (3*(ADC_Channel - 10)); - /* Set the new 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 sample time */ - tmpreg1 &= ~tmpreg2; - /* Calculate the mask to set */ - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); - /* Set the new 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 sequence length JL bits */ - tmpreg1 &= JSQR_JL_RESET; - - /* Set the injected sequence length 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 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_CC4: Timer1 capture compare4 selected - * @arg ADC_ExternalTrigInjecConv_T1_TRGO: Timer1 TRGO event selected - * @arg ADC_ExternalTrigInjecConv_T2_CC1: Timer2 capture compare1 selected - * @arg ADC_ExternalTrigInjecConv_T2_TRGO: Timer2 TRGO event selected - * @arg ADC_ExternalTrigInjecConv_T3_CC2: Timer3 capture compare2 selected - * @arg ADC_ExternalTrigInjecConv_T3_CC4: Timer3 capture compare4 selected - * @arg ADC_ExternalTrigInjecConv_T4_CC1: Timer4 capture compare1 selected - * @arg ADC_ExternalTrigInjecConv_T4_CC2: Timer4 capture compare2 selected - * @arg ADC_ExternalTrigInjecConv_T4_CC3: Timer4 capture compare3 selected - * @arg ADC_ExternalTrigInjecConv_T4_TRGO: Timer4 TRGO event selected - * @arg ADC_ExternalTrigInjecConv_T5_CC4: Timer5 capture compare4 selected - * @arg ADC_ExternalTrigInjecConv_T5_TRGO: Timer5 TRGO event selected - * @arg ADC_ExternalTrigInjecConv_T8_CC2: Timer8 capture compare2 selected - * @arg ADC_ExternalTrigInjecConv_T8_CC3: Timer8 capture compare3 selected - * @arg ADC_ExternalTrigInjecConv_T8_CC4: Timer8 capture compare4 selected - * @arg ADC_ExternalTrigInjecConv_Ext_IT15: External interrupt line 15 event selected - * @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 Configures the ADCx external trigger edge for injected channels conversion. - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @param ADC_ExternalTrigInjecConvEdge: specifies the ADC external trigger edge - * to start injected conversion. - * This parameter can be one of the following values: - * @arg ADC_ExternalTrigInjecConvEdge_None: external trigger disabled for - * injected conversion - * @arg ADC_ExternalTrigInjecConvEdge_Rising: detection on rising edge - * @arg ADC_ExternalTrigInjecConvEdge_Falling: detection on falling edge - * @arg ADC_ExternalTrigInjecConvEdge_RisingFalling: detection on both rising - * and falling edge - * @retval None - */ -void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge) -{ - uint32_t tmpreg = 0; - /* Check the parameters */ - assert_param(IS_ADC_ALL_PERIPH(ADCx)); - assert_param(IS_ADC_EXT_INJEC_TRIG_EDGE(ADC_ExternalTrigInjecConvEdge)); - /* Get the old register value */ - tmpreg = ADCx->CR2; - /* Clear the old external trigger edge for injected group */ - tmpreg &= CR2_JEXTEN_RESET; - /* Set the new external trigger edge for injected group */ - tmpreg |= ADC_ExternalTrigInjecConvEdge; - /* Store the new register value */ - ADCx->CR2 = tmpreg; -} - -/** - * @brief Enables the selected ADC software start conversion of the injected channels. - * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. - * @retval None - */ -void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx) -{ - /* Check the parameters */ - assert_param(IS_ADC_ALL_PERIPH(ADCx)); - /* Enable the selected ADC conversion for injected group */ - ADCx->CR2 |= (uint32_t)ADC_CR2_JSWSTART; -} - -/** - * @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 & ADC_CR2_JSWSTART) != (uint32_t)RESET) - { - /* JSWSTART bit is set */ - bitstatus = SET; - } - else - { - /* JSWSTART bit is reset */ - bitstatus = RESET; - } - /* Return the JSWSTART bit status */ - return bitstatus; -} - -/** - * @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 |= (uint32_t)ADC_CR1_JAUTO; - } - else - { - /* Disable the selected ADC automatic injected group conversion */ - ADCx->CR1 &= (uint32_t)(~ADC_CR1_JAUTO); - } -} - -/** - * @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 |= (uint32_t)ADC_CR1_JDISCEN; - } - else - { - /* Disable the selected ADC injected discontinuous mode */ - ADCx->CR1 &= (uint32_t)(~ADC_CR1_JDISCEN); - } -} - -/** - * @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); -} -/** - * @} - */ - -/** @defgroup ADC_Group7 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the ADC Interrupts - and to get the status and clear flags and Interrupts pending bits. - - [..] Each ADC provides 4 Interrupts sources and 6 Flags which can be divided - into 3 groups: - - *** Flags and Interrupts for ADC regular channels *** - ===================================================== - [..] - (+) Flags : - (##) ADC_FLAG_OVR : Overrun detection when regular converted data are lost - - (##) ADC_FLAG_EOC : Regular channel end of conversion ==> to indicate - (depending on EOCS bit, managed by ADC_EOCOnEachRegularChannelCmd() ) - the end of: - (+++) a regular CHANNEL conversion - (+++) sequence of regular GROUP conversions . - - (##) ADC_FLAG_STRT: Regular channel start ==> to indicate when regular - CHANNEL conversion starts. - [..] - (+) Interrupts : - (##) ADC_IT_OVR : specifies the interrupt source for Overrun detection - event. - (##) ADC_IT_EOC : specifies the interrupt source for Regular channel end - of conversion event. - - - *** Flags and Interrupts for ADC Injected channels *** - ====================================================== - [..] - (+) Flags : - (##) ADC_FLAG_JEOC : Injected channel end of conversion ==> to indicate - at the end of injected GROUP conversion - - (##) ADC_FLAG_JSTRT: Injected channel start ==> to indicate hardware when - injected GROUP conversion starts. - [..] - (+) Interrupts : - (##) ADC_IT_JEOC : specifies the interrupt source for Injected channel - end of conversion event. - - *** General Flags and Interrupts for the ADC *** - ================================================ - [..] - (+)Flags : - (##) ADC_FLAG_AWD: Analog watchdog ==> to indicate if the converted voltage - crosses the programmed thresholds values. - [..] - (+) Interrupts : - (##) ADC_IT_AWD : specifies the interrupt source for Analog watchdog event. - - - [..] The user should identify which mode will be used in his application to - manage the ADC controller events: Polling mode or Interrupt mode. - - [..] In the Polling Mode it is advised to use the following functions: - (+) ADC_GetFlagStatus() : to check if flags events occur. - (+) ADC_ClearFlag() : to clear the flags events. - - [..] In the Interrupt Mode it is advised to use the following functions: - (+) ADC_ITConfig() : to enable or disable the interrupt source. - (+) ADC_GetITStatus() : to check if Interrupt occurs. - (+) ADC_ClearITPendingBit() : to clear the Interrupt pending Bit - (corresponding Flag). -@endverbatim - * @{ - */ -/** - * @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 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 - * @arg ADC_IT_OVR: Overrun interrupt enable - * @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) -{ - uint32_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; - itmask = (uint32_t)0x01 << itmask; - - if (NewState != DISABLE) - { - /* Enable the selected ADC interrupts */ - ADCx->CR1 |= itmask; - } - else - { - /* Disable the selected ADC interrupts */ - ADCx->CR1 &= (~(uint32_t)itmask); - } -} - -/** - * @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 - * @arg ADC_FLAG_OVR: Overrun 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 - * @arg ADC_FLAG_OVR: Overrun 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 - * @arg ADC_IT_OVR: Overrun 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_IT(ADC_IT)); - - /* Get the ADC IT index */ - itmask = ADC_IT >> 8; - - /* Get the ADC_IT enable bit status */ - enablestatus = (ADCx->CR1 & ((uint32_t)0x01 << (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 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 - * @arg ADC_IT_OVR: Overrun 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c deleted file mode 100644 index a54466b6..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c +++ /dev/null @@ -1,1701 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_can.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Controller area network (CAN) peripheral: - * + Initialization and Configuration - * + CAN Frames Transmission - * + CAN Frames Reception - * + Operation modes switch - * + Error management - * + Interrupts and flags - * -@verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable the CAN controller interface clock using - RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); for CAN1 - and RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE); for CAN2 - -@- In case you are using CAN2 only, you have to enable the CAN1 clock. - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - (++) Connect the involved CAN pins to AF9 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_CANx); - (++) Configure these CAN pins in alternate function mode by calling - the function GPIO_Init(); - - (#) Initialise and configure the CAN using CAN_Init() and - CAN_FilterInit() functions. - - (#) Transmit the desired CAN frame using CAN_Transmit() function. - - (#) Check the transmission of a CAN frame using CAN_TransmitStatus() - function. - - (#) Cancel the transmission of a CAN frame using CAN_CancelTransmit() - function. - - (#) Receive a CAN frame using CAN_Recieve() function. - - (#) Release the receive FIFOs using CAN_FIFORelease() function. - - (#) Return the number of pending received frames using - CAN_MessagePending() function. - - (#) To control CAN events you can use one of the following two methods: - (++) Check on CAN flags using the CAN_GetFlagStatus() function. - (++) Use CAN interrupts through the function CAN_ITConfig() at - initialization phase and CAN_GetITStatus() function into - interrupt routines to check if the event has occurred or not. - After checking on a flag you should clear it using CAN_ClearFlag() - function. And after checking on an interrupt event you should - clear it using CAN_ClearITPendingBit() function. - - -@endverbatim - - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_can.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CAN - * @brief CAN driver modules - * @{ - */ -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* 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) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ -static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit); - -/** @defgroup CAN_Private_Functions - * @{ - */ - -/** @defgroup CAN_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initialize the CAN peripherals : Prescaler, operating mode, the maximum - number of time quanta to perform resynchronization, the number of time - quanta in Bit Segment 1 and 2 and many other modes. - Refer to @ref CAN_InitTypeDef for more details. - (+) Configures the CAN reception filter. - (+) Select the start bank filter for slave CAN. - (+) Enables or disables the Debug Freeze mode for CAN - (+)Enables or disables the CAN Time Trigger Operation communication mode - -@endverbatim - * @{ - */ - -/** - * @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 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 Configures the CAN reception filter 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 ill 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. - * @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 (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @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 disables the CAN Time TriggerOperation communication mode. - * @note DLC must be programmed as 8 in order Time Stamp (2 bytes) to be - * sent over the CAN bus. - * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. - * @param NewState: Mode new state. This parameter can be: ENABLE or DISABLE. - * 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. - * @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); - } -} -/** - * @} - */ - - -/** @defgroup CAN_Group2 CAN Frames Transmission functions - * @brief CAN Frames Transmission functions - * -@verbatim - =============================================================================== - ##### CAN Frames Transmission functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initiate and transmit a CAN frame message (if there is an empty mailbox). - (+) Check the transmission status of a CAN Frame - (+) Cancel a transmit request - -@endverbatim - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame 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 status of a CAN Frame. - * @param CANx: where x can be 1 or 2 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 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; - } -} -/** - * @} - */ - - -/** @defgroup CAN_Group3 CAN Frames Reception functions - * @brief CAN Frames Reception functions - * -@verbatim - =============================================================================== - ##### CAN Frames Reception functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Receive a correct CAN frame - (+) Release a specified receive FIFO (2 FIFOs are available) - (+) Return the number of the pending received CAN frames - -@endverbatim - * @{ - */ - -/** - * @brief Receives a correct CAN frame. - * @param CANx: where x can be 1 or 2 to select the CAN peripheral. - * @param FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @param RxMessage: pointer to a structure receive frame which contains CAN Id, - * CAN DLC, CAN data and FMI number. - * @retval None - */ -void CAN_Receive(CAN_TypeDef* CANx, 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 receive FIFO. - * @param CANx: where x can be 1 or 2 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 received messages. - * @param CANx: where x can be 1 or 2 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; -} -/** - * @} - */ - - -/** @defgroup CAN_Group4 CAN Operation modes functions - * @brief CAN Operation modes functions - * -@verbatim - =============================================================================== - ##### CAN Operation modes functions ##### - =============================================================================== - [..] This section provides functions allowing to select the CAN Operation modes - (+) sleep mode - (+) normal mode - (+) initialization mode - -@endverbatim - * @{ - */ - - -/** - * @brief Selects 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 Sleep (low power) mode. - * @param CANx: where x can be 1 or 2 to select the CAN peripheral. - * @retval CAN_Sleep_Ok if sleep entered, CAN_Sleep_Failed otherwise. - */ -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 up the CAN peripheral from sleep mode . - * @param CANx: where x can be 1 or 2 to select the CAN peripheral. - * @retval CAN_WakeUp_Ok if sleep mode left, CAN_WakeUp_Failed otherwise. - */ -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; -} -/** - * @} - */ - - -/** @defgroup CAN_Group5 CAN Bus Error management functions - * @brief CAN Bus Error management functions - * -@verbatim - =============================================================================== - ##### CAN Bus Error management functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Return the CANx's last error code (LEC) - (+) Return the CANx Receive Error Counter (REC) - (+) Return the LSB of the 9-bit CANx Transmit Error Counter(TEC). - - -@- If TEC is greater than 255, The CAN is in bus-off state. - -@- if REC or TEC are greater than 96, an Error warning flag occurs. - -@- if REC or TEC are greater than 127, an Error Passive Flag occurs. - -@endverbatim - * @{ - */ - -/** - * @brief Returns the CANx's last error code (LEC). - * @param CANx: where x can be 1 or 2 to select the CAN peripheral. - * @retval Error code: - * - CAN_ERRORCODE_NoErr: No Error - * - CAN_ERRORCODE_StuffErr: Stuff Error - * - CAN_ERRORCODE_FormErr: Form Error - * - CAN_ERRORCODE_ACKErr : Acknowledgment Error - * - CAN_ERRORCODE_BitRecessiveErr: Bit Recessive Error - * - CAN_ERRORCODE_BitDominantErr: Bit Dominant Error - * - CAN_ERRORCODE_CRCErr: CRC Error - * - CAN_ERRORCODE_SoftwareSetErr: Software Set Error - */ -uint8_t CAN_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; -} -/** - * @} - */ - -/** @defgroup CAN_Group6 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the CAN Interrupts - and to get the status and clear flags and Interrupts pending bits. - - The CAN provides 14 Interrupts sources and 15 Flags: - - - *** Flags *** - ============= - [..] The 15 flags can be divided on 4 groups: - - (+) Transmit Flags - (++) CAN_FLAG_RQCP0, - (++) CAN_FLAG_RQCP1, - (++) CAN_FLAG_RQCP2 : Request completed MailBoxes 0, 1 and 2 Flags - Set when when the last request (transmit or abort) - has been performed. - - (+) Receive Flags - - - (++) CAN_FLAG_FMP0, - (++) CAN_FLAG_FMP1 : FIFO 0 and 1 Message Pending Flags - set to signal that messages are pending in the receive - FIFO. - These Flags are cleared only by hardware. - - (++) CAN_FLAG_FF0, - (++) CAN_FLAG_FF1 : FIFO 0 and 1 Full Flags - set when three messages are stored in the selected - FIFO. - - (++) CAN_FLAG_FOV0 - (++) CAN_FLAG_FOV1 : FIFO 0 and 1 Overrun Flags - set when a new message has been received and passed - the filter while the FIFO was full. - - (+) Operating Mode Flags - - (++) CAN_FLAG_WKU : Wake up Flag - set to signal that a SOF bit has been detected while - the CAN hardware was in Sleep mode. - - (++) CAN_FLAG_SLAK : Sleep acknowledge Flag - Set to signal that the CAN has entered Sleep Mode. - - (+) Error Flags - - (++) CAN_FLAG_EWG : Error Warning Flag - Set when the warning limit has been reached (Receive - Error Counter or Transmit Error Counter greater than 96). - This Flag is cleared only by hardware. - - (++) CAN_FLAG_EPV : Error Passive Flag - Set when the Error Passive limit has been reached - (Receive Error Counter or Transmit Error Counter - greater than 127). - This Flag is cleared only by hardware. - - (++) CAN_FLAG_BOF : Bus-Off Flag - set when CAN enters the bus-off state. The bus-off - state is entered on TEC overflow, greater than 255. - This Flag is cleared only by hardware. - - (++) CAN_FLAG_LEC : Last error code Flag - set If a message has been transferred (reception or - transmission) with error, and the error code is hold. - - *** Interrupts *** - ================== - [..] The 14 interrupts can be divided on 4 groups: - - (+) Transmit interrupt - - (++) CAN_IT_TME : Transmit mailbox empty Interrupt - if enabled, this interrupt source is pending when - no transmit request are pending for Tx mailboxes. - - (+) Receive Interrupts - - (++) CAN_IT_FMP0, - (++) CAN_IT_FMP1 : FIFO 0 and FIFO1 message pending Interrupts - if enabled, these interrupt sources are pending - when messages are pending in the receive FIFO. - The corresponding interrupt pending bits are cleared - only by hardware. - - (++) CAN_IT_FF0, - (++) CAN_IT_FF1 : FIFO 0 and FIFO1 full Interrupts - if enabled, these interrupt sources are pending - when three messages are stored in the selected FIFO. - - (++) CAN_IT_FOV0, - (++) CAN_IT_FOV1 : FIFO 0 and FIFO1 overrun Interrupts - if enabled, these interrupt sources are pending - when a new message has been received and passed - the filter while the FIFO was full. - - (+) Operating Mode Interrupts - - (++) CAN_IT_WKU : Wake-up Interrupt - if enabled, this interrupt source is pending when - a SOF bit has been detected while the CAN hardware - was in Sleep mode. - - (++) CAN_IT_SLK : Sleep acknowledge Interrupt - if enabled, this interrupt source is pending when - the CAN has entered Sleep Mode. - - (+) Error Interrupts - - (++) CAN_IT_EWG : Error warning Interrupt - if enabled, this interrupt source is pending when - the warning limit has been reached (Receive Error - Counter or Transmit Error Counter=96). - - (++) CAN_IT_EPV : Error passive Interrupt - if enabled, this interrupt source is pending when - the Error Passive limit has been reached (Receive - Error Counter or Transmit Error Counter>127). - - (++) CAN_IT_BOF : Bus-off Interrupt - if enabled, this interrupt source is pending when - CAN enters the bus-off state. The bus-off state is - entered on TEC overflow, greater than 255. - This Flag is cleared only by hardware. - - (++) CAN_IT_LEC : Last error code Interrupt - if enabled, this interrupt source is pending when - a message has been transferred (reception or - transmission) with error, and the error code is hold. - - (++) CAN_IT_ERR : Error Interrupt - if enabled, this interrupt source is pending when - an error condition is pending. - - [..] Managing the CAN controller events : - - The user should identify which mode will be used in his application to - manage the CAN controller events: Polling mode or Interrupt mode. - - (#) In the Polling Mode it is advised to use the following functions: - (++) CAN_GetFlagStatus() : to check if flags events occur. - (++) CAN_ClearFlag() : to clear the flags events. - - - - (#) In the Interrupt Mode it is advised to use the following functions: - (++) CAN_ITConfig() : to enable or disable the interrupt source. - (++) CAN_GetITStatus() : to check if Interrupt occurs. - (++) CAN_ClearITPendingBit() : to clear the Interrupt pending Bit - (corresponding Flag). - -@@- This function has no impact on CAN_IT_FMP0 and CAN_IT_FMP1 Interrupts - pending bits since there are cleared only by hardware. - -@endverbatim - * @{ - */ -/** - * @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: - * @arg CAN_IT_TME: Transmit mailbox empty Interrupt - * @arg CAN_IT_FMP0: FIFO 0 message pending Interrupt - * @arg CAN_IT_FF0: FIFO 0 full Interrupt - * @arg CAN_IT_FOV0: FIFO 0 overrun Interrupt - * @arg CAN_IT_FMP1: FIFO 1 message pending Interrupt - * @arg CAN_IT_FF1: FIFO 1 full Interrupt - * @arg CAN_IT_FOV1: FIFO 1 overrun Interrupt - * @arg CAN_IT_WKU: Wake-up Interrupt - * @arg CAN_IT_SLK: Sleep acknowledge Interrupt - * @arg CAN_IT_EWG: Error warning Interrupt - * @arg CAN_IT_EPV: Error passive Interrupt - * @arg CAN_IT_BOF: Bus-off Interrupt - * @arg CAN_IT_LEC: Last error code Interrupt - * @arg CAN_IT_ERR: Error Interrupt - * @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 values: - * @arg CAN_FLAG_RQCP0: Request MailBox0 Flag - * @arg CAN_FLAG_RQCP1: Request MailBox1 Flag - * @arg CAN_FLAG_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @arg CAN_FLAG_LEC: Last error code Flag - * @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 values: - * @arg CAN_FLAG_RQCP0: Request MailBox0 Flag - * @arg CAN_FLAG_RQCP1: Request MailBox1 Flag - * @arg CAN_FLAG_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_LEC: Last error code Flag - * @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 values: - * @arg CAN_IT_TME: Transmit mailbox empty Interrupt - * @arg CAN_IT_FMP0: FIFO 0 message pending Interrupt - * @arg CAN_IT_FF0: FIFO 0 full Interrupt - * @arg CAN_IT_FOV0: FIFO 0 overrun Interrupt - * @arg CAN_IT_FMP1: FIFO 1 message pending Interrupt - * @arg CAN_IT_FF1: FIFO 1 full Interrupt - * @arg CAN_IT_FOV1: FIFO 1 overrun Interrupt - * @arg CAN_IT_WKU: Wake-up Interrupt - * @arg CAN_IT_SLK: Sleep acknowledge Interrupt - * @arg CAN_IT_EWG: Error warning Interrupt - * @arg CAN_IT_EPV: Error passive Interrupt - * @arg CAN_IT_BOF: Bus-off Interrupt - * @arg CAN_IT_LEC: Last error code Interrupt - * @arg CAN_IT_ERR: Error Interrupt - * @retval The current state of CAN_IT (SET or RESET). - */ -ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT) -{ - ITStatus itstatus = RESET; - /* Check the parameters */ - assert_param(IS_CAN_ALL_PERIPH(CANx)); - assert_param(IS_CAN_IT(CAN_IT)); - - /* check the interrupt enable bit */ - if((CANx->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. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty Interrupt - * @arg CAN_IT_FF0: FIFO 0 full Interrupt - * @arg CAN_IT_FOV0: FIFO 0 overrun Interrupt - * @arg CAN_IT_FF1: FIFO 1 full Interrupt - * @arg CAN_IT_FOV1: FIFO 1 overrun Interrupt - * @arg CAN_IT_WKU: Wake-up Interrupt - * @arg CAN_IT_SLK: Sleep acknowledge Interrupt - * @arg CAN_IT_EWG: Error warning Interrupt - * @arg CAN_IT_EPV: Error passive Interrupt - * @arg CAN_IT_BOF: Bus-off Interrupt - * @arg CAN_IT_LEC: Last error code Interrupt - * @arg CAN_IT_ERR: Error Interrupt - * @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 on 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 on 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 on 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 on 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c deleted file mode 100644 index d268184a..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c +++ /dev/null @@ -1,133 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_crc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides all the CRC firmware functions. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_crc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRC - * @brief CRC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c deleted file mode 100644 index 824ccfbb..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c +++ /dev/null @@ -1,934 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_cryp.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Cryptographic processor (CRYP) peripheral: - * + Initialization and Configuration functions - * + Data treatment functions - * + Context swapping functions - * + DMA interface function - * + Interrupts and flags management - * -@verbatim - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable the CRYP controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); function. - - (#) Initialise the CRYP using CRYP_Init(), CRYP_KeyInit() and if needed - CRYP_IVInit(). - - (#) Flush the IN and OUT FIFOs by using CRYP_FIFOFlush() function. - - (#) Enable the CRYP controller using the CRYP_Cmd() function. - - (#) If using DMA for Data input and output transfer, activate the needed DMA - Requests using CRYP_DMACmd() function - - (#) If DMA is not used for data transfer, use CRYP_DataIn() and CRYP_DataOut() - functions to enter data to IN FIFO and get result from OUT FIFO. - - (#) To control CRYP events you can use one of the following two methods: - (++) Check on CRYP flags using the CRYP_GetFlagStatus() function. - (++) Use CRYP interrupts through the function CRYP_ITConfig() at - initialization phase and CRYP_GetITStatus() function into interrupt - routines in processing phase. - - (#) Save and restore Cryptographic processor context using CRYP_SaveContext() - and CRYP_RestoreContext() functions. - - - *** Procedure to perform an encryption or a decryption *** - ========================================================== - - *** Initialization *** - ====================== - [..] - (#) Initialize the peripheral using CRYP_Init(), CRYP_KeyInit() and CRYP_IVInit - functions: - (++) Configure the key size (128-, 192- or 256-bit, in the AES only) - (++) Enter the symmetric key - (++) Configure the data type - (++) In case of decryption in AES-ECB or AES-CBC, you must prepare - the key: configure the key preparation mode. Then Enable the CRYP - peripheral using CRYP_Cmd() function: the BUSY flag is set. - Wait until BUSY flag is reset : the key is prepared for decryption - (++) Configure the algorithm and chaining (the DES/TDES in ECB/CBC, the - AES in ECB/CBC/CTR) - (++) Configure the direction (encryption/decryption). - (++) Write the initialization vectors (in CBC or CTR modes only) - - (#) Flush the IN and OUT FIFOs using the CRYP_FIFOFlush() function - - - *** Basic Processing mode (polling mode) *** - ============================================ - [..] - (#) Enable the cryptographic processor using CRYP_Cmd() function. - - (#) Write the first blocks in the input FIFO (2 to 8 words) using - CRYP_DataIn() function. - - (#) Repeat the following sequence until the complete message has been - processed: - - (++) Wait for flag CRYP_FLAG_OFNE occurs (using CRYP_GetFlagStatus() - function), then read the OUT-FIFO using CRYP_DataOut() function - (1 block or until the FIFO is empty) - - (++) Wait for flag CRYP_FLAG_IFNF occurs, (using CRYP_GetFlagStatus() - function then write the IN FIFO using CRYP_DataIn() function - (1 block or until the FIFO is full) - - (#) At the end of the processing, CRYP_FLAG_BUSY flag will be reset and - both FIFOs are empty (CRYP_FLAG_IFEM is set and CRYP_FLAG_OFNE is - reset). You can disable the peripheral using CRYP_Cmd() function. - - *** Interrupts Processing mode *** - ================================== - [..] In this mode, Processing is done when the data are transferred by the - CPU during interrupts. - - (#) Enable the interrupts CRYP_IT_INI and CRYP_IT_OUTI using CRYP_ITConfig() - function. - - (#) Enable the cryptographic processor using CRYP_Cmd() function. - - (#) In the CRYP_IT_INI interrupt handler : load the input message into the - IN FIFO using CRYP_DataIn() function . You can load 2 or 4 words at a - time, or load data until the IN FIFO is full. When the last word of - the message has been entered into the IN FIFO, disable the CRYP_IT_INI - interrupt (using CRYP_ITConfig() function). - - (#) In the CRYP_IT_OUTI interrupt handler : read the output message from - the OUT FIFO using CRYP_DataOut() function. You can read 1 block (2 or - 4 words) at a time or read data until the FIFO is empty. - When the last word has been read, INIM=0, BUSY=0 and both FIFOs are - empty (CRYP_FLAG_IFEM is set and CRYP_FLAG_OFNE is reset). - You can disable the CRYP_IT_OUTI interrupt (using CRYP_ITConfig() - function) and you can disable the peripheral using CRYP_Cmd() function. - - *** DMA Processing mode *** - =========================== - [..] In this mode, Processing is done when the DMA is used to transfer the - data from/to the memory. - - (#) Configure the DMA controller to transfer the input data from the - memory using DMA_Init() function. - The transfer length is the length of the message. - As message padding is not managed by the peripheral, the message - length must be an entire number of blocks. The data are transferred - in burst mode. The burst length is 4 words in the AES and 2 or 4 - words in the DES/TDES. The DMA should be configured to set an - interrupt on transfer completion of the output data to indicate that - the processing is finished. - Refer to DMA peripheral driver for more details. - - (#) Enable the cryptographic processor using CRYP_Cmd() function. - Enable the DMA requests CRYP_DMAReq_DataIN and CRYP_DMAReq_DataOUT - using CRYP_DMACmd() function. - - (#) All the transfers and processing are managed by the DMA and the - cryptographic processor. The DMA transfer complete interrupt indicates - that the processing is complete. Both FIFOs are normally empty and - CRYP_FLAG_BUSY flag is reset. - - @endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_cryp.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRYP - * @brief CRYP driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define FLAG_MASK ((uint8_t)0x20) -#define MAX_TIMEOUT ((uint16_t)0xFFFF) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup CRYP_Private_Functions - * @{ - */ - -/** @defgroup CRYP_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initialize the cryptographic Processor using CRYP_Init() function - (++) Encrypt or Decrypt - (++) mode : TDES-ECB, TDES-CBC, - DES-ECB, DES-CBC, - AES-ECB, AES-CBC, AES-CTR, AES-Key, AES-GCM, AES-CCM - (++) DataType : 32-bit data, 16-bit data, bit data or bit-string - (++) Key Size (only in AES modes) - (+) Configure the Encrypt or Decrypt Key using CRYP_KeyInit() function - (+) Configure the Initialization Vectors(IV) for CBC and CTR modes using - CRYP_IVInit() function. - (+) Flushes the IN and OUT FIFOs : using CRYP_FIFOFlush() function. - (+) Enable or disable the CRYP Processor using CRYP_Cmd() function - -@endverbatim - * @{ - */ -/** - * @brief Deinitializes the CRYP peripheral registers to their default reset values - * @param None - * @retval None - */ -void CRYP_DeInit(void) -{ - /* Enable CRYP reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_CRYP, ENABLE); - - /* Release CRYP from reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_CRYP, DISABLE); -} - -/** - * @brief Initializes the CRYP peripheral according to the specified parameters - * in the CRYP_InitStruct. - * @param CRYP_InitStruct: pointer to a CRYP_InitTypeDef structure that contains - * the configuration information for the CRYP peripheral. - * @retval None - */ -void CRYP_Init(CRYP_InitTypeDef* CRYP_InitStruct) -{ - /* Check the parameters */ - assert_param(IS_CRYP_ALGOMODE(CRYP_InitStruct->CRYP_AlgoMode)); - assert_param(IS_CRYP_DATATYPE(CRYP_InitStruct->CRYP_DataType)); - assert_param(IS_CRYP_ALGODIR(CRYP_InitStruct->CRYP_AlgoDir)); - - /* Select Algorithm mode*/ - CRYP->CR &= ~CRYP_CR_ALGOMODE; - CRYP->CR |= CRYP_InitStruct->CRYP_AlgoMode; - - /* Select dataType */ - CRYP->CR &= ~CRYP_CR_DATATYPE; - CRYP->CR |= CRYP_InitStruct->CRYP_DataType; - - /* select Key size (used only with AES algorithm) */ - if ((CRYP_InitStruct->CRYP_AlgoMode != CRYP_AlgoMode_TDES_ECB) && - (CRYP_InitStruct->CRYP_AlgoMode != CRYP_AlgoMode_TDES_CBC) && - (CRYP_InitStruct->CRYP_AlgoMode != CRYP_AlgoMode_DES_ECB) && - (CRYP_InitStruct->CRYP_AlgoMode != CRYP_AlgoMode_DES_CBC)) - { - assert_param(IS_CRYP_KEYSIZE(CRYP_InitStruct->CRYP_KeySize)); - CRYP->CR &= ~CRYP_CR_KEYSIZE; - CRYP->CR |= CRYP_InitStruct->CRYP_KeySize; /* Key size and value must be - configured once the key has - been prepared */ - } - - /* Select data Direction */ - CRYP->CR &= ~CRYP_CR_ALGODIR; - CRYP->CR |= CRYP_InitStruct->CRYP_AlgoDir; -} - -/** - * @brief Fills each CRYP_InitStruct member with its default value. - * @param CRYP_InitStruct: pointer to a CRYP_InitTypeDef structure which will - * be initialized. - * @retval None - */ -void CRYP_StructInit(CRYP_InitTypeDef* CRYP_InitStruct) -{ - /* Initialize the CRYP_AlgoDir member */ - CRYP_InitStruct->CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - - /* initialize the CRYP_AlgoMode member */ - CRYP_InitStruct->CRYP_AlgoMode = CRYP_AlgoMode_TDES_ECB; - - /* initialize the CRYP_DataType member */ - CRYP_InitStruct->CRYP_DataType = CRYP_DataType_32b; - - /* Initialize the CRYP_KeySize member */ - CRYP_InitStruct->CRYP_KeySize = CRYP_KeySize_128b; -} - -/** - * @brief Initializes the CRYP Keys according to the specified parameters in - * the CRYP_KeyInitStruct. - * @param CRYP_KeyInitStruct: pointer to a CRYP_KeyInitTypeDef structure that - * contains the configuration information for the CRYP Keys. - * @retval None - */ -void CRYP_KeyInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct) -{ - /* Key Initialisation */ - CRYP->K0LR = CRYP_KeyInitStruct->CRYP_Key0Left; - CRYP->K0RR = CRYP_KeyInitStruct->CRYP_Key0Right; - CRYP->K1LR = CRYP_KeyInitStruct->CRYP_Key1Left; - CRYP->K1RR = CRYP_KeyInitStruct->CRYP_Key1Right; - CRYP->K2LR = CRYP_KeyInitStruct->CRYP_Key2Left; - CRYP->K2RR = CRYP_KeyInitStruct->CRYP_Key2Right; - CRYP->K3LR = CRYP_KeyInitStruct->CRYP_Key3Left; - CRYP->K3RR = CRYP_KeyInitStruct->CRYP_Key3Right; -} - -/** - * @brief Fills each CRYP_KeyInitStruct member with its default value. - * @param CRYP_KeyInitStruct: pointer to a CRYP_KeyInitTypeDef structure - * which will be initialized. - * @retval None - */ -void CRYP_KeyStructInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct) -{ - CRYP_KeyInitStruct->CRYP_Key0Left = 0; - CRYP_KeyInitStruct->CRYP_Key0Right = 0; - CRYP_KeyInitStruct->CRYP_Key1Left = 0; - CRYP_KeyInitStruct->CRYP_Key1Right = 0; - CRYP_KeyInitStruct->CRYP_Key2Left = 0; - CRYP_KeyInitStruct->CRYP_Key2Right = 0; - CRYP_KeyInitStruct->CRYP_Key3Left = 0; - CRYP_KeyInitStruct->CRYP_Key3Right = 0; -} -/** - * @brief Initializes the CRYP Initialization Vectors(IV) according to the - * specified parameters in the CRYP_IVInitStruct. - * @param CRYP_IVInitStruct: pointer to a CRYP_IVInitTypeDef structure that contains - * the configuration information for the CRYP Initialization Vectors(IV). - * @retval None - */ -void CRYP_IVInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct) -{ - CRYP->IV0LR = CRYP_IVInitStruct->CRYP_IV0Left; - CRYP->IV0RR = CRYP_IVInitStruct->CRYP_IV0Right; - CRYP->IV1LR = CRYP_IVInitStruct->CRYP_IV1Left; - CRYP->IV1RR = CRYP_IVInitStruct->CRYP_IV1Right; -} - -/** - * @brief Fills each CRYP_IVInitStruct member with its default value. - * @param CRYP_IVInitStruct: pointer to a CRYP_IVInitTypeDef Initialization - * Vectors(IV) structure which will be initialized. - * @retval None - */ -void CRYP_IVStructInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct) -{ - CRYP_IVInitStruct->CRYP_IV0Left = 0; - CRYP_IVInitStruct->CRYP_IV0Right = 0; - CRYP_IVInitStruct->CRYP_IV1Left = 0; - CRYP_IVInitStruct->CRYP_IV1Right = 0; -} - -/** - * @brief Configures the AES-CCM and AES-GCM phases - * @note This function is used only with AES-CCM or AES-GCM Algorithms - * @param CRYP_Phase: specifies the CRYP AES-CCM and AES-GCM phase to be configured. - * This parameter can be one of the following values: - * @arg CRYP_Phase_Init: Initialization phase - * @arg CRYP_Phase_Header: Header phase - * @arg CRYP_Phase_Payload: Payload phase - * @arg CRYP_Phase_Final: Final phase - * @retval None - */ -void CRYP_PhaseConfig(uint32_t CRYP_Phase) -{ uint32_t tempcr = 0; - - /* Check the parameter */ - assert_param(IS_CRYP_PHASE(CRYP_Phase)); - - /* Get the CR register */ - tempcr = CRYP->CR; - - /* Reset the phase configuration bits: GCMP_CCMPH */ - tempcr &= (uint32_t)(~CRYP_CR_GCM_CCMPH); - /* Set the selected phase */ - tempcr |= (uint32_t)CRYP_Phase; - - /* Set the CR register */ - CRYP->CR = tempcr; -} - -/** - * @brief Flushes the IN and OUT FIFOs (that is read and write pointers of the - * FIFOs are reset) - * @note The FIFOs must be flushed only when BUSY flag is reset. - * @param None - * @retval None - */ -void CRYP_FIFOFlush(void) -{ - /* Reset the read and write pointers of the FIFOs */ - CRYP->CR |= CRYP_CR_FFLUSH; -} - -/** - * @brief Enables or disables the CRYP peripheral. - * @param NewState: new state of the CRYP peripheral. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void CRYP_Cmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the Cryptographic processor */ - CRYP->CR |= CRYP_CR_CRYPEN; - } - else - { - /* Disable the Cryptographic processor */ - CRYP->CR &= ~CRYP_CR_CRYPEN; - } -} -/** - * @} - */ - -/** @defgroup CRYP_Group2 CRYP Data processing functions - * @brief CRYP Data processing functions - * -@verbatim - =============================================================================== - ##### CRYP Data processing functions ##### - =============================================================================== - [..] This section provides functions allowing the encryption and decryption - operations: - (+) Enter data to be treated in the IN FIFO : using CRYP_DataIn() function. - (+) Get the data result from the OUT FIFO : using CRYP_DataOut() function. - -@endverbatim - * @{ - */ - -/** - * @brief Writes data in the Data Input register (DIN). - * @note After the DIN register has been read once or several times, - * the FIFO must be flushed (using CRYP_FIFOFlush() function). - * @param Data: data to write in Data Input register - * @retval None - */ -void CRYP_DataIn(uint32_t Data) -{ - CRYP->DR = Data; -} - -/** - * @brief Returns the last data entered into the output FIFO. - * @param None - * @retval Last data entered into the output FIFO. - */ -uint32_t CRYP_DataOut(void) -{ - return CRYP->DOUT; -} -/** - * @} - */ - -/** @defgroup CRYP_Group3 Context swapping functions - * @brief Context swapping functions - * -@verbatim - =============================================================================== - ##### Context swapping functions ##### - =============================================================================== - [..] This section provides functions allowing to save and store CRYP Context - - [..] It is possible to interrupt an encryption/ decryption/ key generation process - to perform another processing with a higher priority, and to complete the - interrupted process later on, when the higher-priority task is complete. To do - so, the context of the interrupted task must be saved from the CRYP registers - to memory, and then be restored from memory to the CRYP registers. - - (#) To save the current context, use CRYP_SaveContext() function - (#) To restore the saved context, use CRYP_RestoreContext() function - -@endverbatim - * @{ - */ - -/** - * @brief Saves the CRYP peripheral Context. - * @note This function stops DMA transfer before to save the context. After - * restoring the context, you have to enable the DMA again (if the DMA - * was previously used). - * @param CRYP_ContextSave: pointer to a CRYP_Context structure that contains - * the repository for current context. - * @param CRYP_KeyInitStruct: pointer to a CRYP_KeyInitTypeDef structure that - * contains the configuration information for the CRYP Keys. - * @retval None - */ -ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave, - CRYP_KeyInitTypeDef* CRYP_KeyInitStruct) -{ - __IO uint32_t timeout = 0; - uint32_t ckeckmask = 0, bitstatus; - ErrorStatus status = ERROR; - - /* Stop DMA transfers on the IN FIFO by clearing the DIEN bit in the CRYP_DMACR */ - CRYP->DMACR &= ~(uint32_t)CRYP_DMACR_DIEN; - - /* Wait until both the IN and OUT FIFOs are empty - (IFEM=1 and OFNE=0 in the CRYP_SR register) and the - BUSY bit is cleared. */ - - if ((CRYP->CR & (uint32_t)(CRYP_CR_ALGOMODE_TDES_ECB | CRYP_CR_ALGOMODE_TDES_CBC)) != (uint32_t)0 )/* TDES */ - { - ckeckmask = CRYP_SR_IFEM | CRYP_SR_BUSY ; - } - else /* AES or DES */ - { - ckeckmask = CRYP_SR_IFEM | CRYP_SR_BUSY | CRYP_SR_OFNE; - } - - do - { - bitstatus = CRYP->SR & ckeckmask; - timeout++; - } - while ((timeout != MAX_TIMEOUT) && (bitstatus != CRYP_SR_IFEM)); - - if ((CRYP->SR & ckeckmask) != CRYP_SR_IFEM) - { - status = ERROR; - } - else - { - /* Stop DMA transfers on the OUT FIFO by - - writing the DOEN bit to 0 in the CRYP_DMACR register - - and clear the CRYPEN bit. */ - - CRYP->DMACR &= ~(uint32_t)CRYP_DMACR_DOEN; - CRYP->CR &= ~(uint32_t)CRYP_CR_CRYPEN; - - /* Save the current configuration (bit 19, bit[17:16] and bits [9:2] in the CRYP_CR register) */ - CRYP_ContextSave->CR_CurrentConfig = CRYP->CR & (CRYP_CR_GCM_CCMPH | - CRYP_CR_KEYSIZE | - CRYP_CR_DATATYPE | - CRYP_CR_ALGOMODE | - CRYP_CR_ALGODIR); - - /* and, if not in ECB mode, the initialization vectors. */ - CRYP_ContextSave->CRYP_IV0LR = CRYP->IV0LR; - CRYP_ContextSave->CRYP_IV0RR = CRYP->IV0RR; - CRYP_ContextSave->CRYP_IV1LR = CRYP->IV1LR; - CRYP_ContextSave->CRYP_IV1RR = CRYP->IV1RR; - - /* save The key value */ - CRYP_ContextSave->CRYP_K0LR = CRYP_KeyInitStruct->CRYP_Key0Left; - CRYP_ContextSave->CRYP_K0RR = CRYP_KeyInitStruct->CRYP_Key0Right; - CRYP_ContextSave->CRYP_K1LR = CRYP_KeyInitStruct->CRYP_Key1Left; - CRYP_ContextSave->CRYP_K1RR = CRYP_KeyInitStruct->CRYP_Key1Right; - CRYP_ContextSave->CRYP_K2LR = CRYP_KeyInitStruct->CRYP_Key2Left; - CRYP_ContextSave->CRYP_K2RR = CRYP_KeyInitStruct->CRYP_Key2Right; - CRYP_ContextSave->CRYP_K3LR = CRYP_KeyInitStruct->CRYP_Key3Left; - CRYP_ContextSave->CRYP_K3RR = CRYP_KeyInitStruct->CRYP_Key3Right; - - /* Save the content of context swap registers */ - CRYP_ContextSave->CRYP_CSGCMCCMR[0] = CRYP->CSGCMCCM0R; - CRYP_ContextSave->CRYP_CSGCMCCMR[1] = CRYP->CSGCMCCM1R; - CRYP_ContextSave->CRYP_CSGCMCCMR[2] = CRYP->CSGCMCCM2R; - CRYP_ContextSave->CRYP_CSGCMCCMR[3] = CRYP->CSGCMCCM3R; - CRYP_ContextSave->CRYP_CSGCMCCMR[4] = CRYP->CSGCMCCM4R; - CRYP_ContextSave->CRYP_CSGCMCCMR[5] = CRYP->CSGCMCCM5R; - CRYP_ContextSave->CRYP_CSGCMCCMR[6] = CRYP->CSGCMCCM6R; - CRYP_ContextSave->CRYP_CSGCMCCMR[7] = CRYP->CSGCMCCM7R; - - CRYP_ContextSave->CRYP_CSGCMR[0] = CRYP->CSGCM0R; - CRYP_ContextSave->CRYP_CSGCMR[1] = CRYP->CSGCM1R; - CRYP_ContextSave->CRYP_CSGCMR[2] = CRYP->CSGCM2R; - CRYP_ContextSave->CRYP_CSGCMR[3] = CRYP->CSGCM3R; - CRYP_ContextSave->CRYP_CSGCMR[4] = CRYP->CSGCM4R; - CRYP_ContextSave->CRYP_CSGCMR[5] = CRYP->CSGCM5R; - CRYP_ContextSave->CRYP_CSGCMR[6] = CRYP->CSGCM6R; - CRYP_ContextSave->CRYP_CSGCMR[7] = CRYP->CSGCM7R; - - /* When needed, save the DMA status (pointers for IN and OUT messages, - number of remaining bytes, etc.) */ - - status = SUCCESS; - } - - return status; -} - -/** - * @brief Restores the CRYP peripheral Context. - * @note Since teh DMA transfer is stopped in CRYP_SaveContext() function, - * after restoring the context, you have to enable the DMA again (if the - * DMA was previously used). - * @param CRYP_ContextRestore: pointer to a CRYP_Context structure that contains - * the repository for saved context. - * @note The data that were saved during context saving must be rewrited into - * the IN FIFO. - * @retval None - */ -void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore) -{ - - /* Configure the processor with the saved configuration */ - CRYP->CR = CRYP_ContextRestore->CR_CurrentConfig; - - /* restore The key value */ - CRYP->K0LR = CRYP_ContextRestore->CRYP_K0LR; - CRYP->K0RR = CRYP_ContextRestore->CRYP_K0RR; - CRYP->K1LR = CRYP_ContextRestore->CRYP_K1LR; - CRYP->K1RR = CRYP_ContextRestore->CRYP_K1RR; - CRYP->K2LR = CRYP_ContextRestore->CRYP_K2LR; - CRYP->K2RR = CRYP_ContextRestore->CRYP_K2RR; - CRYP->K3LR = CRYP_ContextRestore->CRYP_K3LR; - CRYP->K3RR = CRYP_ContextRestore->CRYP_K3RR; - - /* and the initialization vectors. */ - CRYP->IV0LR = CRYP_ContextRestore->CRYP_IV0LR; - CRYP->IV0RR = CRYP_ContextRestore->CRYP_IV0RR; - CRYP->IV1LR = CRYP_ContextRestore->CRYP_IV1LR; - CRYP->IV1RR = CRYP_ContextRestore->CRYP_IV1RR; - - /* Restore the content of context swap registers */ - CRYP->CSGCMCCM0R = CRYP_ContextRestore->CRYP_CSGCMCCMR[0]; - CRYP->CSGCMCCM1R = CRYP_ContextRestore->CRYP_CSGCMCCMR[1]; - CRYP->CSGCMCCM2R = CRYP_ContextRestore->CRYP_CSGCMCCMR[2]; - CRYP->CSGCMCCM3R = CRYP_ContextRestore->CRYP_CSGCMCCMR[3]; - CRYP->CSGCMCCM4R = CRYP_ContextRestore->CRYP_CSGCMCCMR[4]; - CRYP->CSGCMCCM5R = CRYP_ContextRestore->CRYP_CSGCMCCMR[5]; - CRYP->CSGCMCCM6R = CRYP_ContextRestore->CRYP_CSGCMCCMR[6]; - CRYP->CSGCMCCM7R = CRYP_ContextRestore->CRYP_CSGCMCCMR[7]; - - CRYP->CSGCM0R = CRYP_ContextRestore->CRYP_CSGCMR[0]; - CRYP->CSGCM1R = CRYP_ContextRestore->CRYP_CSGCMR[1]; - CRYP->CSGCM2R = CRYP_ContextRestore->CRYP_CSGCMR[2]; - CRYP->CSGCM3R = CRYP_ContextRestore->CRYP_CSGCMR[3]; - CRYP->CSGCM4R = CRYP_ContextRestore->CRYP_CSGCMR[4]; - CRYP->CSGCM5R = CRYP_ContextRestore->CRYP_CSGCMR[5]; - CRYP->CSGCM6R = CRYP_ContextRestore->CRYP_CSGCMR[6]; - CRYP->CSGCM7R = CRYP_ContextRestore->CRYP_CSGCMR[7]; - - /* Enable the cryptographic processor */ - CRYP->CR |= CRYP_CR_CRYPEN; -} -/** - * @} - */ - -/** @defgroup CRYP_Group4 CRYP's DMA interface Configuration function - * @brief CRYP's DMA interface Configuration function - * -@verbatim - =============================================================================== - ##### CRYP's DMA interface Configuration function ##### - =============================================================================== - [..] This section provides functions allowing to configure the DMA interface for - CRYP data input and output transfer. - - [..] When the DMA mode is enabled (using the CRYP_DMACmd() function), data can be - transferred: - (+) From memory to the CRYP IN FIFO using the DMA peripheral by enabling - the CRYP_DMAReq_DataIN request. - (+) From the CRYP OUT FIFO to the memory using the DMA peripheral by enabling - the CRYP_DMAReq_DataOUT request. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the CRYP DMA interface. - * @param CRYP_DMAReq: specifies the CRYP DMA transfer request to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg CRYP_DMAReq_DataOUT: DMA for outgoing(Tx) data transfer - * @arg CRYP_DMAReq_DataIN: DMA for incoming(Rx) data transfer - * @param NewState: new state of the selected CRYP DMA transfer request. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void CRYP_DMACmd(uint8_t CRYP_DMAReq, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_CRYP_DMAREQ(CRYP_DMAReq)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected CRYP DMA request */ - CRYP->DMACR |= CRYP_DMAReq; - } - else - { - /* Disable the selected CRYP DMA request */ - CRYP->DMACR &= (uint8_t)~CRYP_DMAReq; - } -} -/** - * @} - */ - -/** @defgroup CRYP_Group5 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the CRYP Interrupts and - to get the status and Interrupts pending bits. - - [..] The CRYP provides 2 Interrupts sources and 7 Flags: - - *** Flags : *** - =============== - [..] - (#) CRYP_FLAG_IFEM : Set when Input FIFO is empty. This Flag is cleared only - by hardware. - - (#) CRYP_FLAG_IFNF : Set when Input FIFO is not full. This Flag is cleared - only by hardware. - - - (#) CRYP_FLAG_INRIS : Set when Input FIFO Raw interrupt is pending it gives - the raw interrupt state prior to masking of the input FIFO service interrupt. - This Flag is cleared only by hardware. - - (#) CRYP_FLAG_OFNE : Set when Output FIFO not empty. This Flag is cleared - only by hardware. - - (#) CRYP_FLAG_OFFU : Set when Output FIFO is full. This Flag is cleared only - by hardware. - - (#) CRYP_FLAG_OUTRIS : Set when Output FIFO Raw interrupt is pending it gives - the raw interrupt state prior to masking of the output FIFO service interrupt. - This Flag is cleared only by hardware. - - (#) CRYP_FLAG_BUSY : Set when the CRYP core is currently processing a block - of data or a key preparation (for AES decryption). This Flag is cleared - only by hardware. To clear it, the CRYP core must be disabled and the last - processing has completed. - - *** Interrupts : *** - ==================== - [..] - (#) CRYP_IT_INI : The input FIFO service interrupt is asserted when there - are less than 4 words in the input FIFO. This interrupt is associated to - CRYP_FLAG_INRIS flag. - - -@- This interrupt is cleared by performing write operations to the input FIFO - until it holds 4 or more words. The input FIFO service interrupt INMIS is - enabled with the CRYP enable bit. Consequently, when CRYP is disabled, the - INMIS signal is low even if the input FIFO is empty. - - - - (#) CRYP_IT_OUTI : The output FIFO service interrupt is asserted when there - is one or more (32-bit word) data items in the output FIFO. This interrupt - is associated to CRYP_FLAG_OUTRIS flag. - - -@- This interrupt is cleared by reading data from the output FIFO until there - is no valid (32-bit) word left (that is, the interrupt follows the state - of the OFNE (output FIFO not empty) flag). - - *** Managing the CRYP controller events : *** - ============================================= - [..] The user should identify which mode will be used in his application to manage - the CRYP controller events: Polling mode or Interrupt mode. - - (#) In the Polling Mode it is advised to use the following functions: - (++) CRYP_GetFlagStatus() : to check if flags events occur. - - -@@- The CRYPT flags do not need to be cleared since they are cleared as - soon as the associated event are reset. - - - (#) In the Interrupt Mode it is advised to use the following functions: - (++) CRYP_ITConfig() : to enable or disable the interrupt source. - (++) CRYP_GetITStatus() : to check if Interrupt occurs. - - -@@- The CRYPT interrupts have no pending bits, the interrupt is cleared as - soon as the associated event is reset. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified CRYP interrupts. - * @param CRYP_IT: specifies the CRYP interrupt source to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg CRYP_IT_INI: Input FIFO interrupt - * @arg CRYP_IT_OUTI: Output FIFO interrupt - * @param NewState: new state of the specified CRYP interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void CRYP_ITConfig(uint8_t CRYP_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_CRYP_CONFIG_IT(CRYP_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected CRYP interrupt */ - CRYP->IMSCR |= CRYP_IT; - } - else - { - /* Disable the selected CRYP interrupt */ - CRYP->IMSCR &= (uint8_t)~CRYP_IT; - } -} - -/** - * @brief Checks whether the specified CRYP interrupt has occurred or not. - * @note This function checks the status of the masked interrupt (i.e the - * interrupt should be previously enabled). - * @param CRYP_IT: specifies the CRYP (masked) interrupt source to check. - * This parameter can be one of the following values: - * @arg CRYP_IT_INI: Input FIFO interrupt - * @arg CRYP_IT_OUTI: Output FIFO interrupt - * @retval The new state of CRYP_IT (SET or RESET). - */ -ITStatus CRYP_GetITStatus(uint8_t CRYP_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_CRYP_GET_IT(CRYP_IT)); - - /* Check the status of the specified CRYP interrupt */ - if ((CRYP->MISR & CRYP_IT) != (uint8_t)RESET) - { - /* CRYP_IT is set */ - bitstatus = SET; - } - else - { - /* CRYP_IT is reset */ - bitstatus = RESET; - } - /* Return the CRYP_IT status */ - return bitstatus; -} - -/** - * @brief Returns whether CRYP peripheral is enabled or disabled. - * @param none. - * @retval Current state of the CRYP peripheral (ENABLE or DISABLE). - */ -FunctionalState CRYP_GetCmdStatus(void) -{ - FunctionalState state = DISABLE; - - if ((CRYP->CR & CRYP_CR_CRYPEN) != 0) - { - /* CRYPEN bit is set */ - state = ENABLE; - } - else - { - /* CRYPEN bit is reset */ - state = DISABLE; - } - return state; -} - -/** - * @brief Checks whether the specified CRYP flag is set or not. - * @param CRYP_FLAG: specifies the CRYP flag to check. - * This parameter can be one of the following values: - * @arg CRYP_FLAG_IFEM: Input FIFO Empty flag. - * @arg CRYP_FLAG_IFNF: Input FIFO Not Full flag. - * @arg CRYP_FLAG_OFNE: Output FIFO Not Empty flag. - * @arg CRYP_FLAG_OFFU: Output FIFO Full flag. - * @arg CRYP_FLAG_BUSY: Busy flag. - * @arg CRYP_FLAG_OUTRIS: Output FIFO raw interrupt flag. - * @arg CRYP_FLAG_INRIS: Input FIFO raw interrupt flag. - * @retval The new state of CRYP_FLAG (SET or RESET). - */ -FlagStatus CRYP_GetFlagStatus(uint8_t CRYP_FLAG) -{ - FlagStatus bitstatus = RESET; - uint32_t tempreg = 0; - - /* Check the parameters */ - assert_param(IS_CRYP_GET_FLAG(CRYP_FLAG)); - - /* check if the FLAG is in RISR register */ - if ((CRYP_FLAG & FLAG_MASK) != 0x00) - { - tempreg = CRYP->RISR; - } - else /* The FLAG is in SR register */ - { - tempreg = CRYP->SR; - } - - - /* Check the status of the specified CRYP flag */ - if ((tempreg & CRYP_FLAG ) != (uint8_t)RESET) - { - /* CRYP_FLAG is set */ - bitstatus = SET; - } - else - { - /* CRYP_FLAG is reset */ - bitstatus = RESET; - } - - /* Return the CRYP_FLAG status */ - return bitstatus; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c deleted file mode 100644 index 4c5920b5..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c +++ /dev/null @@ -1,1676 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_cryp_aes.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides high level functions to encrypt and decrypt an - * input message using AES in ECB/CBC/CTR/GCM/CCM modes. - * It uses the stm32f4xx_cryp.c/.h drivers to access the STM32F4xx CRYP - * peripheral. - * AES-ECB/CBC/CTR/GCM/CCM modes are available on STM32F437x Devices. - * For STM32F41xx Devices, only AES-ECB/CBC/CTR modes are available. - * -@verbatim - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable The CRYP controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); function. - - (#) Encrypt and decrypt using AES in ECB Mode using CRYP_AES_ECB() function. - - (#) Encrypt and decrypt using AES in CBC Mode using CRYP_AES_CBC() function. - - (#) Encrypt and decrypt using AES in CTR Mode using CRYP_AES_CTR() function. - - (#) Encrypt and decrypt using AES in GCM Mode using CRYP_AES_GCM() function. - - (#) Encrypt and decrypt using AES in CCM Mode using CRYP_AES_CCM() function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_cryp.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRYP - * @brief CRYP driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define AESBUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup CRYP_Private_Functions - * @{ - */ - -/** @defgroup CRYP_Group6 High Level AES functions - * @brief High Level AES functions - * -@verbatim - =============================================================================== - ##### High Level AES functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Encrypt and decrypt using AES in ECB Mode - * @param Mode: encryption or decryption Mode. - * This parameter can be one of the following values: - * @arg MODE_ENCRYPT: Encryption - * @arg MODE_DECRYPT: Decryption - * @param Key: Key used for AES algorithm. - * @param Keysize: length of the Key, must be a 128, 192 or 256. - * @param Input: pointer to the Input buffer. - * @param Ilength: length of the Input buffer, must be a multiple of 16. - * @param Output: pointer to the returned buffer. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: Operation done - * - ERROR: Operation failed - */ -ErrorStatus CRYP_AES_ECB(uint8_t Mode, uint8_t* Key, uint16_t Keysize, - uint8_t* Input, uint32_t Ilength, uint8_t* Output) -{ - CRYP_InitTypeDef AES_CRYP_InitStructure; - CRYP_KeyInitTypeDef AES_CRYP_KeyInitStructure; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t keyaddr = (uint32_t)Key; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - uint32_t i = 0; - - /* Crypto structures initialisation*/ - CRYP_KeyStructInit(&AES_CRYP_KeyInitStructure); - - switch(Keysize) - { - case 128: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_128b; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - case 192: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_192b; - AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - case 256: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_256b; - AES_CRYP_KeyInitStructure.CRYP_Key0Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key0Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - default: - break; - } - - /*------------------ AES Decryption ------------------*/ - if(Mode == MODE_DECRYPT) /* AES decryption */ - { - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Crypto Init for Key preparation for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_Key; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_32b; - CRYP_Init(&AES_CRYP_InitStructure); - - /* Key Initialisation */ - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - /* wait until the Busy flag is RESET */ - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - else - { - /* Crypto Init for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - } - } - /*------------------ AES Encryption ------------------*/ - else /* AES encryption */ - { - - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* Crypto Init for Encryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - } - - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_ECB; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&AES_CRYP_InitStructure); - - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(i=0; ((i>32)); - CRYP_DataIn(__REV(headerlength)); - CRYP_DataIn(__REV(inputlength>>32)); - CRYP_DataIn(__REV(inputlength)); - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET) - { - } - - tagaddr = (uint32_t)AuthTAG; - /* Read the Auth TAG in the IN FIFO */ - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - } - /*------------------ AES Decryption ------------------*/ - else /* AES decryption */ - { - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Key Initialisation */ - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* CRYP Initialization Vectors */ - CRYP_IVInit(&AES_CRYP_IVInitStructure); - - /* Crypto Init for Key preparation for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_GCM; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&AES_CRYP_InitStructure); - - /***************************** Init phase *********************************/ - /* Select init phase */ - CRYP_PhaseConfig(CRYP_Phase_Init); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - /* Wait for CRYPEN bit to be 0 */ - while(CRYP_GetCmdStatus() == ENABLE); - - /***************************** header phase *******************************/ - if(HLength != 0) - { - /* Select header phase */ - CRYP_PhaseConfig(CRYP_Phase_Header); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; (loopcounter < HLength); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - } - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - } - - /**************************** payload phase *******************************/ - if(ILength != 0) - { - /* Select payload phase */ - CRYP_PhaseConfig(CRYP_Phase_Payload); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; ((loopcounter < ILength) && (status != ERROR)); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - else - { - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Output block from the Output FIFO */ - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - } - } - } - - /***************************** final phase ********************************/ - /* Select final phase */ - CRYP_PhaseConfig(CRYP_Phase_Final); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - /* Write number of bits concatenated with header in the IN FIFO */ - CRYP_DataIn(__REV(headerlength>>32)); - CRYP_DataIn(__REV(headerlength)); - CRYP_DataIn(__REV(inputlength>>32)); - CRYP_DataIn(__REV(inputlength)); - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - tagaddr = (uint32_t)AuthTAG; - /* Read the Auth TAG in the IN FIFO */ - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - *(uint32_t*)(tagaddr) = CRYP_DataOut(); - tagaddr+=4; - } - /* Disable Crypto */ - CRYP_Cmd(DISABLE); - - return status; -} - -/** - * @brief Encrypt and decrypt using AES in CCM Mode. The GCM and CCM modes - * are available only on STM32F437x Devices. - * @param Mode: encryption or decryption Mode. - * This parameter can be one of the following values: - * @arg MODE_ENCRYPT: Encryption - * @arg MODE_DECRYPT: Decryption - * @param Nonce: the nounce used for AES algorithm. It shall be unique for each processing. - * @param Key: Key used for AES algorithm. - * @param Keysize: length of the Key, must be a 128, 192 or 256. - * @param Input: pointer to the Input buffer. - * @param Ilength: length of the Input buffer in bytes, must be a multiple of 16. - * @param Header: pointer to the header buffer. - * @param Hlength: length of the header buffer in bytes. - * @param HBuffer: pointer to temporary buffer used to append the header - * HBuffer size must be equal to Hlength + 21 - * @param Output: pointer to the returned buffer. - * @param AuthTAG: pointer to the authentication TAG buffer. - * @param TAGSize: the size of the TAG (called also MAC). - * @retval An ErrorStatus enumeration value: - * - SUCCESS: Operation done - * - ERROR: Operation failed - */ -ErrorStatus CRYP_AES_CCM(uint8_t Mode, - uint8_t* Nonce, uint32_t NonceSize, - uint8_t *Key, uint16_t Keysize, - uint8_t *Input, uint32_t ILength, - uint8_t *Header, uint32_t HLength, uint8_t *HBuffer, - uint8_t *Output, - uint8_t *AuthTAG, uint32_t TAGSize) -{ - CRYP_InitTypeDef AES_CRYP_InitStructure; - CRYP_KeyInitTypeDef AES_CRYP_KeyInitStructure; - CRYP_IVInitTypeDef AES_CRYP_IVInitStructure; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t keyaddr = (uint32_t)Key; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - uint32_t headeraddr = (uint32_t)Header; - uint32_t tagaddr = (uint32_t)AuthTAG; - uint32_t headersize = HLength; - uint32_t loopcounter = 0; - uint32_t bufferidx = 0; - uint8_t blockb0[16] = {0};/* Block B0 */ - uint8_t ctr[16] = {0}; /* Counter */ - uint32_t temptag[4] = {0}; /* temporary TAG (MAC) */ - uint32_t ctraddr = (uint32_t)ctr; - uint32_t b0addr = (uint32_t)blockb0; - - /************************ Formatting the header block ***********************/ - if(headersize != 0) - { - /* Check that the associated data (or header) length is lower than 2^16 - 2^8 = 65536 - 256 = 65280 */ - if(headersize < 65280) - { - HBuffer[bufferidx++] = (uint8_t) ((headersize >> 8) & 0xFF); - HBuffer[bufferidx++] = (uint8_t) ((headersize) & 0xFF); - headersize += 2; - } - else - { - /* header is encoded as 0xff || 0xfe || [headersize]32, i.e., six octets */ - HBuffer[bufferidx++] = 0xFF; - HBuffer[bufferidx++] = 0xFE; - HBuffer[bufferidx++] = headersize & 0xff000000; - HBuffer[bufferidx++] = headersize & 0x00ff0000; - HBuffer[bufferidx++] = headersize & 0x0000ff00; - HBuffer[bufferidx++] = headersize & 0x000000ff; - headersize += 6; - } - /* Copy the header buffer in internal buffer "HBuffer" */ - for(loopcounter = 0; loopcounter < headersize; loopcounter++) - { - HBuffer[bufferidx++] = Header[loopcounter]; - } - /* Check if the header size is modulo 16 */ - if ((headersize % 16) != 0) - { - /* Padd the header buffer with 0s till the HBuffer length is modulo 16 */ - for(loopcounter = headersize; loopcounter <= ((headersize/16) + 1) * 16; loopcounter++) - { - HBuffer[loopcounter] = 0; - } - /* Set the header size to modulo 16 */ - headersize = ((headersize/16) + 1) * 16; - } - /* set the pointer headeraddr to HBuffer */ - headeraddr = (uint32_t)HBuffer; - } - /************************* Formatting the block B0 **************************/ - if(headersize != 0) - { - blockb0[0] = 0x40; - } - /* Flags byte */ - blockb0[0] |= 0u | (((( (uint8_t) TAGSize - 2) / 2) & 0x07 ) << 3 ) | ( ( (uint8_t) (15 - NonceSize) - 1) & 0x07); - - for (loopcounter = 0; loopcounter < NonceSize; loopcounter++) - { - blockb0[loopcounter+1] = Nonce[loopcounter]; - } - for ( ; loopcounter < 13; loopcounter++) - { - blockb0[loopcounter+1] = 0; - } - - blockb0[14] = ((ILength >> 8) & 0xFF); - blockb0[15] = (ILength & 0xFF); - - /************************* Formatting the initial counter *******************/ - /* Byte 0: - Bits 7 and 6 are reserved and shall be set to 0 - Bits 3, 4, and 5 shall also be set to 0, to ensure that all the counter blocks - are distinct from B0 - Bits 0, 1, and 2 contain the same encoding of q as in B0 - */ - ctr[0] = blockb0[0] & 0x07; - /* byte 1 to NonceSize is the IV (Nonce) */ - for(loopcounter = 1; loopcounter < NonceSize + 1; loopcounter++) - { - ctr[loopcounter] = blockb0[loopcounter]; - } - /* Set the LSB to 1 */ - ctr[15] |= 0x01; - - /* Crypto structures initialisation*/ - CRYP_KeyStructInit(&AES_CRYP_KeyInitStructure); - - switch(Keysize) - { - case 128: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_128b; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - case 192: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_192b; - AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - case 256: - AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_256b; - AES_CRYP_KeyInitStructure.CRYP_Key0Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key0Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - break; - default: - break; - } - - /* CRYP Initialization Vectors */ - AES_CRYP_IVInitStructure.CRYP_IV0Left = (__REV(*(uint32_t*)(ctraddr))); - ctraddr+=4; - AES_CRYP_IVInitStructure.CRYP_IV0Right= (__REV(*(uint32_t*)(ctraddr))); - ctraddr+=4; - AES_CRYP_IVInitStructure.CRYP_IV1Left = (__REV(*(uint32_t*)(ctraddr))); - ctraddr+=4; - AES_CRYP_IVInitStructure.CRYP_IV1Right= (__REV(*(uint32_t*)(ctraddr))); - - /*------------------ AES Encryption ------------------*/ - if(Mode == MODE_ENCRYPT) /* AES encryption */ - { - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Key Initialisation */ - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* CRYP Initialization Vectors */ - CRYP_IVInit(&AES_CRYP_IVInitStructure); - - /* Crypto Init for Key preparation for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_CCM; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&AES_CRYP_InitStructure); - - /***************************** Init phase *********************************/ - /* Select init phase */ - CRYP_PhaseConfig(CRYP_Phase_Init); - - b0addr = (uint32_t)blockb0; - /* Write the blockb0 block in the IN FIFO */ - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - /* Wait for CRYPEN bit to be 0 */ - while(CRYP_GetCmdStatus() == ENABLE); - - /***************************** header phase *******************************/ - if(headersize != 0) - { - /* Select header phase */ - CRYP_PhaseConfig(CRYP_Phase_Header); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; (loopcounter < headersize); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - } - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - } - - /**************************** payload phase *******************************/ - if(ILength != 0) - { - /* Select payload phase */ - CRYP_PhaseConfig(CRYP_Phase_Payload); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; ((loopcounter < ILength) && (status != ERROR)); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - else - { - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Output block from the Output FIFO */ - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - } - } - } - - /***************************** final phase ********************************/ - /* Select final phase */ - CRYP_PhaseConfig(CRYP_Phase_Final); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - ctraddr = (uint32_t)ctr; - /* Write the counter block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - /* Reset bit 0 (after 8-bit swap) is equivalent to reset bit 24 (before 8-bit swap) */ - CRYP_DataIn(*(uint32_t*)(ctraddr) & 0xfeffffff); - - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Auth TAG in the IN FIFO */ - temptag[0] = CRYP_DataOut(); - temptag[1] = CRYP_DataOut(); - temptag[2] = CRYP_DataOut(); - temptag[3] = CRYP_DataOut(); - } - /*------------------ AES Decryption ------------------*/ - else /* AES decryption */ - { - /* Flush IN/OUT FIFOs */ - CRYP_FIFOFlush(); - - /* Key Initialisation */ - CRYP_KeyInit(&AES_CRYP_KeyInitStructure); - - /* CRYP Initialization Vectors */ - CRYP_IVInit(&AES_CRYP_IVInitStructure); - - /* Crypto Init for Key preparation for decryption process */ - AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_CCM; - AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&AES_CRYP_InitStructure); - - /***************************** Init phase *********************************/ - /* Select init phase */ - CRYP_PhaseConfig(CRYP_Phase_Init); - - b0addr = (uint32_t)blockb0; - /* Write the blockb0 block in the IN FIFO */ - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - b0addr+=4; - CRYP_DataIn((*(uint32_t*)(b0addr))); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - /* Wait for CRYPEN bit to be 0 */ - while(CRYP_GetCmdStatus() == ENABLE); - - /***************************** header phase *******************************/ - if(headersize != 0) - { - /* Select header phase */ - CRYP_PhaseConfig(CRYP_Phase_Header); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; (loopcounter < headersize); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - CRYP_DataIn(*(uint32_t*)(headeraddr)); - headeraddr+=4; - } - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - } - - /**************************** payload phase *******************************/ - if(ILength != 0) - { - /* Select payload phase */ - CRYP_PhaseConfig(CRYP_Phase_Payload); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - for(loopcounter = 0; ((loopcounter < ILength) && (status != ERROR)); loopcounter+=16) - { - /* Wait until the IFEM flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_IFEM) == RESET); - /* Write the Input block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - CRYP_DataIn(*(uint32_t*)(inputaddr)); - inputaddr+=4; - - /* Wait until the complete message has been processed */ - counter = 0; - do - { - busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); - counter++; - }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); - - if (busystatus != RESET) - { - status = ERROR; - } - else - { - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Output block from the Output FIFO */ - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - *(uint32_t*)(outputaddr) = CRYP_DataOut(); - outputaddr+=4; - } - } - } - - /***************************** final phase ********************************/ - /* Select final phase */ - CRYP_PhaseConfig(CRYP_Phase_Final); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - - ctraddr = (uint32_t)ctr; - /* Write the counter block in the IN FIFO */ - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - CRYP_DataIn(*(uint32_t*)(ctraddr)); - ctraddr+=4; - /* Reset bit 0 (after 8-bit swap) is equivalent to reset bit 24 (before 8-bit swap) */ - CRYP_DataIn(*(uint32_t*)(ctraddr) & 0xfeffffff); - - /* Wait until the OFNE flag is reset */ - while(CRYP_GetFlagStatus(CRYP_FLAG_OFNE) == RESET); - - /* Read the Authentaication TAG (MAC) in the IN FIFO */ - temptag[0] = CRYP_DataOut(); - temptag[1] = CRYP_DataOut(); - temptag[2] = CRYP_DataOut(); - temptag[3] = CRYP_DataOut(); - } - - /* Copy temporary authentication TAG in user TAG buffer */ - for(loopcounter = 0; (loopcounter < TAGSize); loopcounter++) - { - /* Set the authentication TAG buffer */ - *((uint8_t*)tagaddr+loopcounter) = *((uint8_t*)temptag+loopcounter); - } - - /* Disable Crypto */ - CRYP_Cmd(DISABLE); - - return status; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c deleted file mode 100644 index 1acfc052..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c +++ /dev/null @@ -1,308 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_cryp_des.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides high level functions to encrypt and decrypt an - * input message using DES in ECB/CBC modes. - * It uses the stm32f4xx_cryp.c/.h drivers to access the STM32F4xx CRYP - * peripheral. - * -@verbatim - - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable The CRYP controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); function. - - (#) Encrypt and decrypt using DES in ECB Mode using CRYP_DES_ECB() function. - - (#) Encrypt and decrypt using DES in CBC Mode using CRYP_DES_CBC() function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_cryp.h" - - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRYP - * @brief CRYP driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define DESBUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - - -/** @defgroup CRYP_Private_Functions - * @{ - */ - -/** @defgroup CRYP_Group8 High Level DES functions - * @brief High Level DES functions - * -@verbatim - =============================================================================== - ##### High Level DES functions ##### - =============================================================================== -@endverbatim - * @{ - */ - -/** - * @brief Encrypt and decrypt using DES in ECB Mode - * @param Mode: encryption or decryption Mode. - * This parameter can be one of the following values: - * @arg MODE_ENCRYPT: Encryption - * @arg MODE_DECRYPT: Decryption - * @param Key: Key used for DES algorithm. - * @param Ilength: length of the Input buffer, must be a multiple of 8. - * @param Input: pointer to the Input buffer. - * @param Output: pointer to the returned buffer. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: Operation done - * - ERROR: Operation failed - */ -ErrorStatus CRYP_DES_ECB(uint8_t Mode, uint8_t Key[8], uint8_t *Input, - uint32_t Ilength, uint8_t *Output) -{ - CRYP_InitTypeDef DES_CRYP_InitStructure; - CRYP_KeyInitTypeDef DES_CRYP_KeyInitStructure; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t keyaddr = (uint32_t)Key; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - uint32_t i = 0; - - /* Crypto structures initialisation*/ - CRYP_KeyStructInit(&DES_CRYP_KeyInitStructure); - - /* Crypto Init for Encryption process */ - if( Mode == MODE_ENCRYPT ) /* DES encryption */ - { - DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - } - else/* if( Mode == MODE_DECRYPT )*/ /* DES decryption */ - { - DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - } - - DES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_DES_ECB; - DES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&DES_CRYP_InitStructure); - - /* Key Initialisation */ - DES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - DES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - CRYP_KeyInit(& DES_CRYP_KeyInitStructure); - - /* Flush IN/OUT FIFO */ - CRYP_FIFOFlush(); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - for(i=0; ((i
© COPYRIGHT 2013 STMicroelectronics
- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_cryp.h" - - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup CRYP - * @brief CRYP driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define TDESBUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - - -/** @defgroup CRYP_Private_Functions - * @{ - */ - -/** @defgroup CRYP_Group7 High Level TDES functions - * @brief High Level TDES functions - * -@verbatim - =============================================================================== - ##### High Level TDES functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Encrypt and decrypt using TDES in ECB Mode - * @param Mode: encryption or decryption Mode. - * This parameter can be one of the following values: - * @arg MODE_ENCRYPT: Encryption - * @arg MODE_DECRYPT: Decryption - * @param Key: Key used for TDES algorithm. - * @param Ilength: length of the Input buffer, must be a multiple of 8. - * @param Input: pointer to the Input buffer. - * @param Output: pointer to the returned buffer. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: Operation done - * - ERROR: Operation failed - */ -ErrorStatus CRYP_TDES_ECB(uint8_t Mode, uint8_t Key[24], uint8_t *Input, - uint32_t Ilength, uint8_t *Output) -{ - CRYP_InitTypeDef TDES_CRYP_InitStructure; - CRYP_KeyInitTypeDef TDES_CRYP_KeyInitStructure; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t keyaddr = (uint32_t)Key; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - uint32_t i = 0; - - /* Crypto structures initialisation*/ - CRYP_KeyStructInit(&TDES_CRYP_KeyInitStructure); - - /* Crypto Init for Encryption process */ - if(Mode == MODE_ENCRYPT) /* TDES encryption */ - { - TDES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; - } - else /*if(Mode == MODE_DECRYPT)*/ /* TDES decryption */ - { - TDES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; - } - - TDES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_TDES_ECB; - TDES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; - CRYP_Init(&TDES_CRYP_InitStructure); - - /* Key Initialisation */ - TDES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); - keyaddr+=4; - TDES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); - CRYP_KeyInit(& TDES_CRYP_KeyInitStructure); - - /* Flush IN/OUT FIFO */ - CRYP_FIFOFlush(); - - /* Enable Crypto processor */ - CRYP_Cmd(ENABLE); - - if(CRYP_GetCmdStatus() == DISABLE) - { - /* The CRYP peripheral clock is not enabled or the device doesn't embedd - the CRYP peripheral (please check the device sales type. */ - return(ERROR); - } - for(i=0; ((i
© COPYRIGHT 2013 STMicroelectronics
- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_dac.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup DAC - * @brief DAC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* 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) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup DAC_Private_Functions - * @{ - */ - -/** @defgroup DAC_Group1 DAC channels configuration - * @brief DAC channels configuration: trigger, output buffer, data format - * -@verbatim - =============================================================================== - ##### DAC channels configuration: trigger, output buffer, data format ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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. - * @note When the DAC channel is enabled the trigger source can no more be modified. - * @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)); - } -} - -/** - * @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. - * @note In dual mode, a unique register access is required to write in both - * DAC channels at the same time. - * @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); -} -/** - * @} - */ - -/** @defgroup DAC_Group2 DMA management functions - * @brief DMA management functions - * -@verbatim - =============================================================================== - ##### DMA management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified DAC channel DMA request. - * @note When enabled DMA1 is generated when an external trigger (EXTI Line9, - * TIM2, TIM4, TIM5, TIM6, TIM7 or TIM8 but not a software trigger) occurs. - * @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. - * @note The DAC channel1 is mapped on DMA1 Stream 5 channel7 which must be - * already configured. - * @note The DAC channel2 is mapped on DMA1 Stream 6 channel7 which must be - * already configured. - * @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)); - } -} -/** - * @} - */ - -/** @defgroup DAC_Group3 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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)); - } -} - -/** - * @brief Checks whether the specified DAC flag is set 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_FLAG: specifies the flag to check. - * This parameter can be only of the following value: - * @arg DAC_FLAG_DMAUDR: DMA underrun flag - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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 channel'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 - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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 - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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 channel'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 - * @note The DMA underrun occurs when a second external trigger arrives before the - * acknowledgement for the first external trigger is received (first request). - * @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); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c deleted file mode 100644 index 7cd438d7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c +++ /dev/null @@ -1,180 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dbgmcu.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides all the DBGMCU firmware functions. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_dbgmcu.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup DBGMCU - * @brief DBGMCU driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define IDCODE_DEVID_MASK ((uint32_t)0x00000FFF) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @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 low power mode behavior when the MCU is in Debug mode. - * @param DBGMCU_Periph: specifies the 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 - * @param NewState: new state of the specified low power mode 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; - } -} - -/** - * @brief Configures APB1 peripheral behavior when the MCU is in Debug mode. - * @param DBGMCU_Periph: specifies the APB1 peripheral. - * This parameter can be any combination of the following values: - * @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_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_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 - * @arg DBGMCU_RTC_STOP: RTC Calendar and Wakeup counter stopped when Core is halted. - * @arg DBGMCU_WWDG_STOP: Debug WWDG stopped when Core is halted - * @arg DBGMCU_IWDG_STOP: Debug IWDG 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_I2C3_SMBUS_TIMEOUT: I2C3 SMBUS timeout mode stopped when Core is halted - * @arg DBGMCU_CAN2_STOP: Debug CAN1 stopped when Core is halted - * @arg DBGMCU_CAN1_STOP: Debug CAN2 stopped when Core is halted - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DBGMCU_APB1PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DBGMCU_APB1PERIPH(DBGMCU_Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - DBGMCU->APB1FZ |= DBGMCU_Periph; - } - else - { - DBGMCU->APB1FZ &= ~DBGMCU_Periph; - } -} - -/** - * @brief Configures APB2 peripheral behavior when the MCU is in Debug mode. - * @param DBGMCU_Periph: specifies the APB2 peripheral. - * This parameter can be any combination of the following values: - * @arg DBGMCU_TIM1_STOP: TIM1 counter stopped when Core is halted - * @arg DBGMCU_TIM8_STOP: TIM8 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 - * @param NewState: new state of the specified peripheral in Debug mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DBGMCU_APB2PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DBGMCU_APB2PERIPH(DBGMCU_Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - DBGMCU->APB2FZ |= DBGMCU_Periph; - } - else - { - DBGMCU->APB2FZ &= ~DBGMCU_Periph; - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c deleted file mode 100644 index d6eef0b9..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c +++ /dev/null @@ -1,538 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dcmi.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the DCMI peripheral: - * + Initialization and Configuration - * + Image capture functions - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - The sequence below describes how to use this driver to capture image - from a camera module connected to the DCMI Interface. - This sequence does not take into account the configuration of the - camera module, which should be made before to configure and enable - the DCMI to capture images. - - (#) Enable the clock for the DCMI and associated GPIOs using the following - functions: - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI, ENABLE); - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) DCMI pins configuration - (++) Connect the involved DCMI pins to AF13 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_DCMI); - (++) Configure these DCMI pins in alternate function mode by calling - the function GPIO_Init(); - - (#) Declare a DCMI_InitTypeDef structure, for example: - DCMI_InitTypeDef DCMI_InitStructure; - and fill the DCMI_InitStructure variable with the allowed values - of the structure member. - - (#) Initialize the DCMI interface by calling the function - DCMI_Init(&DCMI_InitStructure); - - (#) Configure the DMA2_Stream1 channel1 to transfer Data from DCMI DR - register to the destination memory buffer. - - (#) Enable DCMI interface using the function - DCMI_Cmd(ENABLE); - - (#) Start the image capture using the function - DCMI_CaptureCmd(ENABLE); - - (#) At this stage the DCMI interface waits for the first start of frame, - then a DMA request is generated continuously/once (depending on the - mode used, Continuous/Snapshot) to transfer the received data into - the destination memory. - - -@- If you need to capture only a rectangular window from the received - image, you have to use the DCMI_CROPConfig() function to configure - the coordinates and size of the window to be captured, then enable - the Crop feature using DCMI_CROPCmd(ENABLE); - In this case, the Crop configuration should be made before to enable - and start the DCMI interface. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_dcmi.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup DCMI - * @brief DCMI driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup DCMI_Private_Functions - * @{ - */ - -/** @defgroup DCMI_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the DCMI registers to their default reset values. - * @param None - * @retval None - */ -void DCMI_DeInit(void) -{ - DCMI->CR = 0x0; - DCMI->IER = 0x0; - DCMI->ICR = 0x1F; - DCMI->ESCR = 0x0; - DCMI->ESUR = 0x0; - DCMI->CWSTRTR = 0x0; - DCMI->CWSIZER = 0x0; -} - -/** - * @brief Initializes the DCMI according to the specified parameters in the DCMI_InitStruct. - * @param DCMI_InitStruct: pointer to a DCMI_InitTypeDef structure that contains - * the configuration information for the DCMI. - * @retval None - */ -void DCMI_Init(DCMI_InitTypeDef* DCMI_InitStruct) -{ - uint32_t temp = 0x0; - - /* Check the parameters */ - assert_param(IS_DCMI_CAPTURE_MODE(DCMI_InitStruct->DCMI_CaptureMode)); - assert_param(IS_DCMI_SYNCHRO(DCMI_InitStruct->DCMI_SynchroMode)); - assert_param(IS_DCMI_PCKPOLARITY(DCMI_InitStruct->DCMI_PCKPolarity)); - assert_param(IS_DCMI_VSPOLARITY(DCMI_InitStruct->DCMI_VSPolarity)); - assert_param(IS_DCMI_HSPOLARITY(DCMI_InitStruct->DCMI_HSPolarity)); - assert_param(IS_DCMI_CAPTURE_RATE(DCMI_InitStruct->DCMI_CaptureRate)); - assert_param(IS_DCMI_EXTENDED_DATA(DCMI_InitStruct->DCMI_ExtendedDataMode)); - - /* The DCMI configuration registers should be programmed correctly before - enabling the CR_ENABLE Bit and the CR_CAPTURE Bit */ - DCMI->CR &= ~(DCMI_CR_ENABLE | DCMI_CR_CAPTURE); - - /* Reset the old DCMI configuration */ - temp = DCMI->CR; - - temp &= ~((uint32_t)DCMI_CR_CM | DCMI_CR_ESS | DCMI_CR_PCKPOL | - DCMI_CR_HSPOL | DCMI_CR_VSPOL | DCMI_CR_FCRC_0 | - DCMI_CR_FCRC_1 | DCMI_CR_EDM_0 | DCMI_CR_EDM_1); - - /* Sets the new configuration of the DCMI peripheral */ - temp |= ((uint32_t)DCMI_InitStruct->DCMI_CaptureMode | - DCMI_InitStruct->DCMI_SynchroMode | - DCMI_InitStruct->DCMI_PCKPolarity | - DCMI_InitStruct->DCMI_VSPolarity | - DCMI_InitStruct->DCMI_HSPolarity | - DCMI_InitStruct->DCMI_CaptureRate | - DCMI_InitStruct->DCMI_ExtendedDataMode); - - DCMI->CR = temp; -} - -/** - * @brief Fills each DCMI_InitStruct member with its default value. - * @param DCMI_InitStruct : pointer to a DCMI_InitTypeDef structure which will - * be initialized. - * @retval None - */ -void DCMI_StructInit(DCMI_InitTypeDef* DCMI_InitStruct) -{ - /* Set the default configuration */ - DCMI_InitStruct->DCMI_CaptureMode = DCMI_CaptureMode_Continuous; - DCMI_InitStruct->DCMI_SynchroMode = DCMI_SynchroMode_Hardware; - DCMI_InitStruct->DCMI_PCKPolarity = DCMI_PCKPolarity_Falling; - DCMI_InitStruct->DCMI_VSPolarity = DCMI_VSPolarity_Low; - DCMI_InitStruct->DCMI_HSPolarity = DCMI_HSPolarity_Low; - DCMI_InitStruct->DCMI_CaptureRate = DCMI_CaptureRate_All_Frame; - DCMI_InitStruct->DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b; -} - -/** - * @brief Initializes the DCMI peripheral CROP mode according to the specified - * parameters in the DCMI_CROPInitStruct. - * @note This function should be called before to enable and start the DCMI interface. - * @param DCMI_CROPInitStruct: pointer to a DCMI_CROPInitTypeDef structure that - * contains the configuration information for the DCMI peripheral CROP mode. - * @retval None - */ -void DCMI_CROPConfig(DCMI_CROPInitTypeDef* DCMI_CROPInitStruct) -{ - /* Sets the CROP window coordinates */ - DCMI->CWSTRTR = (uint32_t)((uint32_t)DCMI_CROPInitStruct->DCMI_HorizontalOffsetCount | - ((uint32_t)DCMI_CROPInitStruct->DCMI_VerticalStartLine << 16)); - - /* Sets the CROP window size */ - DCMI->CWSIZER = (uint32_t)(DCMI_CROPInitStruct->DCMI_CaptureCount | - ((uint32_t)DCMI_CROPInitStruct->DCMI_VerticalLineCount << 16)); -} - -/** - * @brief Enables or disables the DCMI Crop feature. - * @note This function should be called before to enable and start the DCMI interface. - * @param NewState: new state of the DCMI Crop feature. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_CROPCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DCMI Crop feature */ - DCMI->CR |= (uint32_t)DCMI_CR_CROP; - } - else - { - /* Disable the DCMI Crop feature */ - DCMI->CR &= ~(uint32_t)DCMI_CR_CROP; - } -} - -/** - * @brief Sets the embedded synchronization codes - * @param DCMI_CodesInitTypeDef: pointer to a DCMI_CodesInitTypeDef structure that - * contains the embedded synchronization codes for the DCMI peripheral. - * @retval None - */ -void DCMI_SetEmbeddedSynchroCodes(DCMI_CodesInitTypeDef* DCMI_CodesInitStruct) -{ - DCMI->ESCR = (uint32_t)(DCMI_CodesInitStruct->DCMI_FrameStartCode | - ((uint32_t)DCMI_CodesInitStruct->DCMI_LineStartCode << 8)| - ((uint32_t)DCMI_CodesInitStruct->DCMI_LineEndCode << 16)| - ((uint32_t)DCMI_CodesInitStruct->DCMI_FrameEndCode << 24)); -} - -/** - * @brief Enables or disables the DCMI JPEG format. - * @note The Crop and Embedded Synchronization features cannot be used in this mode. - * @param NewState: new state of the DCMI JPEG format. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_JPEGCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DCMI JPEG format */ - DCMI->CR |= (uint32_t)DCMI_CR_JPEG; - } - else - { - /* Disable the DCMI JPEG format */ - DCMI->CR &= ~(uint32_t)DCMI_CR_JPEG; - } -} -/** - * @} - */ - -/** @defgroup DCMI_Group2 Image capture functions - * @brief Image capture functions - * -@verbatim - =============================================================================== - ##### Image capture functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the DCMI interface. - * @param NewState: new state of the DCMI interface. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_Cmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DCMI by setting ENABLE bit */ - DCMI->CR |= (uint32_t)DCMI_CR_ENABLE; - } - else - { - /* Disable the DCMI by clearing ENABLE bit */ - DCMI->CR &= ~(uint32_t)DCMI_CR_ENABLE; - } -} - -/** - * @brief Enables or disables the DCMI Capture. - * @param NewState: new state of the DCMI capture. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_CaptureCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DCMI Capture */ - DCMI->CR |= (uint32_t)DCMI_CR_CAPTURE; - } - else - { - /* Disable the DCMI Capture */ - DCMI->CR &= ~(uint32_t)DCMI_CR_CAPTURE; - } -} - -/** - * @brief Reads the data stored in the DR register. - * @param None - * @retval Data register value - */ -uint32_t DCMI_ReadData(void) -{ - return DCMI->DR; -} -/** - * @} - */ - -/** @defgroup DCMI_Group3 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the DCMI interface interrupts. - * @param DCMI_IT: specifies the DCMI interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg DCMI_IT_FRAME: Frame capture complete interrupt mask - * @arg DCMI_IT_OVF: Overflow interrupt mask - * @arg DCMI_IT_ERR: Synchronization error interrupt mask - * @arg DCMI_IT_VSYNC: VSYNC interrupt mask - * @arg DCMI_IT_LINE: Line interrupt mask - * @param NewState: new state of the specified DCMI interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DCMI_ITConfig(uint16_t DCMI_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DCMI_CONFIG_IT(DCMI_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the Interrupt sources */ - DCMI->IER |= DCMI_IT; - } - else - { - /* Disable the Interrupt sources */ - DCMI->IER &= (uint16_t)(~DCMI_IT); - } -} - -/** - * @brief Checks whether the DCMI interface flag is set or not. - * @param DCMI_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg DCMI_FLAG_FRAMERI: Frame capture complete Raw flag mask - * @arg DCMI_FLAG_OVFRI: Overflow Raw flag mask - * @arg DCMI_FLAG_ERRRI: Synchronization error Raw flag mask - * @arg DCMI_FLAG_VSYNCRI: VSYNC Raw flag mask - * @arg DCMI_FLAG_LINERI: Line Raw flag mask - * @arg DCMI_FLAG_FRAMEMI: Frame capture complete Masked flag mask - * @arg DCMI_FLAG_OVFMI: Overflow Masked flag mask - * @arg DCMI_FLAG_ERRMI: Synchronization error Masked flag mask - * @arg DCMI_FLAG_VSYNCMI: VSYNC Masked flag mask - * @arg DCMI_FLAG_LINEMI: Line Masked flag mask - * @arg DCMI_FLAG_HSYNC: HSYNC flag mask - * @arg DCMI_FLAG_VSYNC: VSYNC flag mask - * @arg DCMI_FLAG_FNE: Fifo not empty flag mask - * @retval The new state of DCMI_FLAG (SET or RESET). - */ -FlagStatus DCMI_GetFlagStatus(uint16_t DCMI_FLAG) -{ - FlagStatus bitstatus = RESET; - uint32_t dcmireg, tempreg = 0; - - /* Check the parameters */ - assert_param(IS_DCMI_GET_FLAG(DCMI_FLAG)); - - /* Get the DCMI register index */ - dcmireg = (((uint16_t)DCMI_FLAG) >> 12); - - if (dcmireg == 0x00) /* The FLAG is in RISR register */ - { - tempreg= DCMI->RISR; - } - else if (dcmireg == 0x02) /* The FLAG is in SR register */ - { - tempreg = DCMI->SR; - } - else /* The FLAG is in MISR register */ - { - tempreg = DCMI->MISR; - } - - if ((tempreg & DCMI_FLAG) != (uint16_t)RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - /* Return the DCMI_FLAG status */ - return bitstatus; -} - -/** - * @brief Clears the DCMI's pending flags. - * @param DCMI_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg DCMI_FLAG_FRAMERI: Frame capture complete Raw flag mask - * @arg DCMI_FLAG_OVFRI: Overflow Raw flag mask - * @arg DCMI_FLAG_ERRRI: Synchronization error Raw flag mask - * @arg DCMI_FLAG_VSYNCRI: VSYNC Raw flag mask - * @arg DCMI_FLAG_LINERI: Line Raw flag mask - * @retval None - */ -void DCMI_ClearFlag(uint16_t DCMI_FLAG) -{ - /* Check the parameters */ - assert_param(IS_DCMI_CLEAR_FLAG(DCMI_FLAG)); - - /* Clear the flag by writing in the ICR register 1 in the corresponding - Flag position*/ - - DCMI->ICR = DCMI_FLAG; -} - -/** - * @brief Checks whether the DCMI interrupt has occurred or not. - * @param DCMI_IT: specifies the DCMI interrupt source to check. - * This parameter can be one of the following values: - * @arg DCMI_IT_FRAME: Frame capture complete interrupt mask - * @arg DCMI_IT_OVF: Overflow interrupt mask - * @arg DCMI_IT_ERR: Synchronization error interrupt mask - * @arg DCMI_IT_VSYNC: VSYNC interrupt mask - * @arg DCMI_IT_LINE: Line interrupt mask - * @retval The new state of DCMI_IT (SET or RESET). - */ -ITStatus DCMI_GetITStatus(uint16_t DCMI_IT) -{ - ITStatus bitstatus = RESET; - uint32_t itstatus = 0; - - /* Check the parameters */ - assert_param(IS_DCMI_GET_IT(DCMI_IT)); - - itstatus = DCMI->MISR & DCMI_IT; /* Only masked interrupts are checked */ - - if ((itstatus != (uint16_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the DCMI's interrupt pending bits. - * @param DCMI_IT: specifies the DCMI interrupt pending bit to clear. - * This parameter can be any combination of the following values: - * @arg DCMI_IT_FRAME: Frame capture complete interrupt mask - * @arg DCMI_IT_OVF: Overflow interrupt mask - * @arg DCMI_IT_ERR: Synchronization error interrupt mask - * @arg DCMI_IT_VSYNC: VSYNC interrupt mask - * @arg DCMI_IT_LINE: Line interrupt mask - * @retval None - */ -void DCMI_ClearITPendingBit(uint16_t DCMI_IT) -{ - /* Clear the interrupt pending Bit by writing in the ICR register 1 in the - corresponding pending Bit position*/ - - DCMI->ICR = DCMI_IT; -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c deleted file mode 100644 index 1678c17d..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c +++ /dev/null @@ -1,1301 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_dma.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Direct Memory Access controller (DMA): - * + Initialization and Configuration - * + Data Counter - * + Double Buffer mode configuration and command - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable The DMA controller clock using RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA1, ENABLE) - function for DMA1 or using RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA2, ENABLE) - function for DMA2. - - (#) Enable and configure the peripheral to be connected to the DMA Stream - (except for internal SRAM / FLASH memories: no initialization is - necessary). - - (#) For a given Stream, program the required configuration through following parameters: - Source and Destination addresses, Transfer Direction, Transfer size, Source and Destination - data formats, Circular or Normal mode, Stream Priority level, Source and Destination - Incrementation mode, FIFO mode and its Threshold (if needed), Burst - mode for Source and/or Destination (if needed) using the DMA_Init() function. - To avoid filling unneccessary fields, you can call DMA_StructInit() function - to initialize a given structure with default values (reset values), the modify - only necessary fields - (ie. Source and Destination addresses, Transfer size and Data Formats). - - (#) Enable the NVIC and the corresponding interrupt(s) using the function - DMA_ITConfig() if you need to use DMA interrupts. - - (#) Optionally, if the Circular mode is enabled, you can use the Double buffer mode by configuring - the second Memory address and the first Memory to be used through the function - DMA_DoubleBufferModeConfig(). Then enable the Double buffer mode through the function - DMA_DoubleBufferModeCmd(). These operations must be done before step 6. - - (#) Enable the DMA stream using the DMA_Cmd() function. - - (#) Activate the needed Stream Request using PPP_DMACmd() function for - any PPP peripheral except internal SRAM and FLASH (ie. SPI, USART ...) - The function allowing this operation is provided in each PPP peripheral - driver (ie. SPI_DMACmd for SPI peripheral). - Once the Stream is enabled, it is not possible to modify its configuration - unless the stream is stopped and disabled. - After enabling the Stream, it is advised to monitor the EN bit status using - the function DMA_GetCmdStatus(). In case of configuration errors or bus errors - this bit will remain reset and all transfers on this Stream will remain on hold. - - (#) Optionally, you can configure the number of data to be transferred - when the Stream is disabled (ie. after each Transfer Complete event - or when a Transfer Error occurs) using the function DMA_SetCurrDataCounter(). - And you can get the number of remaining data to be transferred using - the function DMA_GetCurrDataCounter() at run time (when the DMA Stream is - enabled and running). - - (#) To control DMA events you can use one of the following two methods: - (##) Check on DMA Stream flags using the function DMA_GetFlagStatus(). - (##) Use DMA interrupts through the function DMA_ITConfig() at initialization - phase and DMA_GetITStatus() function into interrupt routines in - communication phase. - [..] - After checking on a flag you should clear it using DMA_ClearFlag() - function. And after checking on an interrupt event you should - clear it using DMA_ClearITPendingBit() function. - - (#) Optionally, if Circular mode and Double Buffer mode are enabled, you can modify - the Memory Addresses using the function DMA_MemoryTargetConfig(). Make sure that - the Memory Address to be modified is not the one currently in use by DMA Stream. - This condition can be monitored using the function DMA_GetCurrentMemoryTarget(). - - (#) Optionally, Pause-Resume operations may be performed: - The DMA_Cmd() function may be used to perform Pause-Resume operation. - When a transfer is ongoing, calling this function to disable the - Stream will cause the transfer to be paused. All configuration registers - and the number of remaining data will be preserved. When calling again - this function to re-enable the Stream, the transfer will be resumed from - the point where it was paused. - - -@- Memory-to-Memory transfer is possible by setting the address of the memory into - the Peripheral registers. In this mode, Circular mode and Double Buffer mode - are not allowed. - - -@- The FIFO is used mainly to reduce bus usage and to allow data - packing/unpacking: it is possible to set different Data Sizes for - the Peripheral and the Memory (ie. you can set Half-Word data size - for the peripheral to access its data register and set Word data size - for the Memory to gain in access time. Each two Half-words will be - packed and written in a single access to a Word in the Memory). - - -@- When FIFO is disabled, it is not allowed to configure different - Data Sizes for Source and Destination. In this case the Peripheral - Data Size will be applied to both Source and Destination. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_dma.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup DMA - * @brief DMA driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* Masks Definition */ -#define TRANSFER_IT_ENABLE_MASK (uint32_t)(DMA_SxCR_TCIE | DMA_SxCR_HTIE | \ - DMA_SxCR_TEIE | DMA_SxCR_DMEIE) - -#define DMA_Stream0_IT_MASK (uint32_t)(DMA_LISR_FEIF0 | DMA_LISR_DMEIF0 | \ - DMA_LISR_TEIF0 | DMA_LISR_HTIF0 | \ - DMA_LISR_TCIF0) - -#define DMA_Stream1_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK << 6) -#define DMA_Stream2_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK << 16) -#define DMA_Stream3_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK << 22) -#define DMA_Stream4_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK | (uint32_t)0x20000000) -#define DMA_Stream5_IT_MASK (uint32_t)(DMA_Stream1_IT_MASK | (uint32_t)0x20000000) -#define DMA_Stream6_IT_MASK (uint32_t)(DMA_Stream2_IT_MASK | (uint32_t)0x20000000) -#define DMA_Stream7_IT_MASK (uint32_t)(DMA_Stream3_IT_MASK | (uint32_t)0x20000000) -#define TRANSFER_IT_MASK (uint32_t)0x0F3C0F3C -#define HIGH_ISR_MASK (uint32_t)0x20000000 -#define RESERVED_MASK (uint32_t)0x0F7D0F7D - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - - -/** @defgroup DMA_Private_Functions - * @{ - */ - -/** @defgroup DMA_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] - This subsection provides functions allowing to initialize the DMA Stream source - and destination addresses, incrementation and data sizes, transfer direction, - buffer size, circular/normal mode selection, memory-to-memory mode selection - and Stream priority value. - [..] - The DMA_Init() function follows the DMA configuration procedures as described in - reference manual (RM0090) except the first point: waiting on EN bit to be reset. - This condition should be checked by user application using the function DMA_GetCmdStatus() - before calling the DMA_Init() function. - -@endverbatim - * @{ - */ - -/** - * @brief Deinitialize the DMAy Streamx registers to their default reset values. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @retval None - */ -void DMA_DeInit(DMA_Stream_TypeDef* DMAy_Streamx) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Disable the selected DMAy Streamx */ - DMAy_Streamx->CR &= ~((uint32_t)DMA_SxCR_EN); - - /* Reset DMAy Streamx control register */ - DMAy_Streamx->CR = 0; - - /* Reset DMAy Streamx Number of Data to Transfer register */ - DMAy_Streamx->NDTR = 0; - - /* Reset DMAy Streamx peripheral address register */ - DMAy_Streamx->PAR = 0; - - /* Reset DMAy Streamx memory 0 address register */ - DMAy_Streamx->M0AR = 0; - - /* Reset DMAy Streamx memory 1 address register */ - DMAy_Streamx->M1AR = 0; - - /* Reset DMAy Streamx FIFO control register */ - DMAy_Streamx->FCR = (uint32_t)0x00000021; - - /* Reset interrupt pending bits for the selected stream */ - if (DMAy_Streamx == DMA1_Stream0) - { - /* Reset interrupt pending bits for DMA1 Stream0 */ - DMA1->LIFCR = DMA_Stream0_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream1) - { - /* Reset interrupt pending bits for DMA1 Stream1 */ - DMA1->LIFCR = DMA_Stream1_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream2) - { - /* Reset interrupt pending bits for DMA1 Stream2 */ - DMA1->LIFCR = DMA_Stream2_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream3) - { - /* Reset interrupt pending bits for DMA1 Stream3 */ - DMA1->LIFCR = DMA_Stream3_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream4) - { - /* Reset interrupt pending bits for DMA1 Stream4 */ - DMA1->HIFCR = DMA_Stream4_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream5) - { - /* Reset interrupt pending bits for DMA1 Stream5 */ - DMA1->HIFCR = DMA_Stream5_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream6) - { - /* Reset interrupt pending bits for DMA1 Stream6 */ - DMA1->HIFCR = (uint32_t)DMA_Stream6_IT_MASK; - } - else if (DMAy_Streamx == DMA1_Stream7) - { - /* Reset interrupt pending bits for DMA1 Stream7 */ - DMA1->HIFCR = DMA_Stream7_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream0) - { - /* Reset interrupt pending bits for DMA2 Stream0 */ - DMA2->LIFCR = DMA_Stream0_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream1) - { - /* Reset interrupt pending bits for DMA2 Stream1 */ - DMA2->LIFCR = DMA_Stream1_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream2) - { - /* Reset interrupt pending bits for DMA2 Stream2 */ - DMA2->LIFCR = DMA_Stream2_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream3) - { - /* Reset interrupt pending bits for DMA2 Stream3 */ - DMA2->LIFCR = DMA_Stream3_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream4) - { - /* Reset interrupt pending bits for DMA2 Stream4 */ - DMA2->HIFCR = DMA_Stream4_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream5) - { - /* Reset interrupt pending bits for DMA2 Stream5 */ - DMA2->HIFCR = DMA_Stream5_IT_MASK; - } - else if (DMAy_Streamx == DMA2_Stream6) - { - /* Reset interrupt pending bits for DMA2 Stream6 */ - DMA2->HIFCR = DMA_Stream6_IT_MASK; - } - else - { - if (DMAy_Streamx == DMA2_Stream7) - { - /* Reset interrupt pending bits for DMA2 Stream7 */ - DMA2->HIFCR = DMA_Stream7_IT_MASK; - } - } -} - -/** - * @brief Initializes the DMAy Streamx according to the specified parameters in - * the DMA_InitStruct structure. - * @note Before calling this function, it is recommended to check that the Stream - * is actually disabled using the function DMA_GetCmdStatus(). - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_InitStruct: pointer to a DMA_InitTypeDef structure that contains - * the configuration information for the specified DMA Stream. - * @retval None - */ -void DMA_Init(DMA_Stream_TypeDef* DMAy_Streamx, DMA_InitTypeDef* DMA_InitStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CHANNEL(DMA_InitStruct->DMA_Channel)); - assert_param(IS_DMA_DIRECTION(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_FIFO_MODE_STATE(DMA_InitStruct->DMA_FIFOMode)); - assert_param(IS_DMA_FIFO_THRESHOLD(DMA_InitStruct->DMA_FIFOThreshold)); - assert_param(IS_DMA_MEMORY_BURST(DMA_InitStruct->DMA_MemoryBurst)); - assert_param(IS_DMA_PERIPHERAL_BURST(DMA_InitStruct->DMA_PeripheralBurst)); - - /*------------------------- DMAy Streamx CR Configuration ------------------*/ - /* Get the DMAy_Streamx CR value */ - tmpreg = DMAy_Streamx->CR; - - /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */ - tmpreg &= ((uint32_t)~(DMA_SxCR_CHSEL | DMA_SxCR_MBURST | DMA_SxCR_PBURST | \ - DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \ - DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \ - DMA_SxCR_DIR)); - - /* Configure DMAy Streamx: */ - /* Set CHSEL bits according to DMA_CHSEL value */ - /* Set DIR bits according to DMA_DIR 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 CIRC bit according to DMA_Mode value */ - /* Set PL bits according to DMA_Priority value */ - /* Set MBURST bits according to DMA_MemoryBurst value */ - /* Set PBURST bits according to DMA_PeripheralBurst value */ - tmpreg |= DMA_InitStruct->DMA_Channel | DMA_InitStruct->DMA_DIR | - DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc | - DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize | - DMA_InitStruct->DMA_Mode | DMA_InitStruct->DMA_Priority | - DMA_InitStruct->DMA_MemoryBurst | DMA_InitStruct->DMA_PeripheralBurst; - - /* Write to DMAy Streamx CR register */ - DMAy_Streamx->CR = tmpreg; - - /*------------------------- DMAy Streamx FCR Configuration -----------------*/ - /* Get the DMAy_Streamx FCR value */ - tmpreg = DMAy_Streamx->FCR; - - /* Clear DMDIS and FTH bits */ - tmpreg &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH); - - /* Configure DMAy Streamx FIFO: - Set DMDIS bits according to DMA_FIFOMode value - Set FTH bits according to DMA_FIFOThreshold value */ - tmpreg |= DMA_InitStruct->DMA_FIFOMode | DMA_InitStruct->DMA_FIFOThreshold; - - /* Write to DMAy Streamx CR */ - DMAy_Streamx->FCR = tmpreg; - - /*------------------------- DMAy Streamx NDTR Configuration ----------------*/ - /* Write to DMAy Streamx NDTR register */ - DMAy_Streamx->NDTR = DMA_InitStruct->DMA_BufferSize; - - /*------------------------- DMAy Streamx PAR Configuration -----------------*/ - /* Write to DMAy Streamx PAR */ - DMAy_Streamx->PAR = DMA_InitStruct->DMA_PeripheralBaseAddr; - - /*------------------------- DMAy Streamx M0AR Configuration ----------------*/ - /* Write to DMAy Streamx M0AR */ - DMAy_Streamx->M0AR = DMA_InitStruct->DMA_Memory0BaseAddr; -} - -/** - * @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_Channel member */ - DMA_InitStruct->DMA_Channel = 0; - - /* Initialize the DMA_PeripheralBaseAddr member */ - DMA_InitStruct->DMA_PeripheralBaseAddr = 0; - - /* Initialize the DMA_Memory0BaseAddr member */ - DMA_InitStruct->DMA_Memory0BaseAddr = 0; - - /* Initialize the DMA_DIR member */ - DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralToMemory; - - /* 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_FIFOMode member */ - DMA_InitStruct->DMA_FIFOMode = DMA_FIFOMode_Disable; - - /* Initialize the DMA_FIFOThreshold member */ - DMA_InitStruct->DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; - - /* Initialize the DMA_MemoryBurst member */ - DMA_InitStruct->DMA_MemoryBurst = DMA_MemoryBurst_Single; - - /* Initialize the DMA_PeripheralBurst member */ - DMA_InitStruct->DMA_PeripheralBurst = DMA_PeripheralBurst_Single; -} - -/** - * @brief Enables or disables the specified DMAy Streamx. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param NewState: new state of the DMAy Streamx. - * This parameter can be: ENABLE or DISABLE. - * - * @note This function may be used to perform Pause-Resume operation. When a - * transfer is ongoing, calling this function to disable the Stream will - * cause the transfer to be paused. All configuration registers and the - * number of remaining data will be preserved. When calling again this - * function to re-enable the Stream, the transfer will be resumed from - * the point where it was paused. - * - * @note After configuring the DMA Stream (DMA_Init() function) and enabling the - * stream, it is recommended to check (or wait until) the DMA Stream is - * effectively enabled. A Stream may remain disabled if a configuration - * parameter is wrong. - * After disabling a DMA Stream, it is also recommended to check (or wait - * until) the DMA Stream is effectively disabled. If a Stream is disabled - * while a data transfer is ongoing, the current data will be transferred - * and the Stream will be effectively disabled only after the transfer of - * this single data is finished. - * - * @retval None - */ -void DMA_Cmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected DMAy Streamx by setting EN bit */ - DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_EN; - } - else - { - /* Disable the selected DMAy Streamx by clearing EN bit */ - DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_EN; - } -} - -/** - * @brief Configures, when the PINC (Peripheral Increment address mode) bit is - * set, if the peripheral address should be incremented with the data - * size (configured with PSIZE bits) or by a fixed offset equal to 4 - * (32-bit aligned addresses). - * - * @note This function has no effect if the Peripheral Increment mode is disabled. - * - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_Pincos: specifies the Peripheral increment offset size. - * This parameter can be one of the following values: - * @arg DMA_PINCOS_Psize: Peripheral address increment is done - * accordingly to PSIZE parameter. - * @arg DMA_PINCOS_WordAligned: Peripheral address increment offset is - * fixed to 4 (32-bit aligned addresses). - * @retval None - */ -void DMA_PeriphIncOffsetSizeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_Pincos) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_PINCOS_SIZE(DMA_Pincos)); - - /* Check the needed Peripheral increment offset */ - if(DMA_Pincos != DMA_PINCOS_Psize) - { - /* Configure DMA_SxCR_PINCOS bit with the input parameter */ - DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_PINCOS; - } - else - { - /* Clear the PINCOS bit: Peripheral address incremented according to PSIZE */ - DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_PINCOS; - } -} - -/** - * @brief Configures, when the DMAy Streamx is disabled, the flow controller for - * the next transactions (Peripheral or Memory). - * - * @note Before enabling this feature, check if the used peripheral supports - * the Flow Controller mode or not. - * - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_FlowCtrl: specifies the DMA flow controller. - * This parameter can be one of the following values: - * @arg DMA_FlowCtrl_Memory: DMAy_Streamx transactions flow controller is - * the DMA controller. - * @arg DMA_FlowCtrl_Peripheral: DMAy_Streamx transactions flow controller - * is the peripheral. - * @retval None - */ -void DMA_FlowControllerConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FlowCtrl) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_FLOW_CTRL(DMA_FlowCtrl)); - - /* Check the needed flow controller */ - if(DMA_FlowCtrl != DMA_FlowCtrl_Memory) - { - /* Configure DMA_SxCR_PFCTRL bit with the input parameter */ - DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_PFCTRL; - } - else - { - /* Clear the PFCTRL bit: Memory is the flow controller */ - DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_PFCTRL; - } -} -/** - * @} - */ - -/** @defgroup DMA_Group2 Data Counter functions - * @brief Data Counter functions - * -@verbatim - =============================================================================== - ##### Data Counter functions ##### - =============================================================================== - [..] - This subsection provides function allowing to configure and read the buffer size - (number of data to be transferred). - [..] - The DMA data counter can be written only when the DMA Stream is disabled - (ie. after transfer complete event). - [..] - The following function can be used to write the Stream data counter value: - (+) void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter); - -@- It is advised to use this function rather than DMA_Init() in situations - where only the Data buffer needs to be reloaded. - -@- If the Source and Destination Data Sizes are different, then the value - written in data counter, expressing the number of transfers, is relative - to the number of transfers from the Peripheral point of view. - ie. If Memory data size is Word, Peripheral data size is Half-Words, - then the value to be configured in the data counter is the number - of Half-Words to be transferred from/to the peripheral. - [..] - The DMA data counter can be read to indicate the number of remaining transfers for - the relative DMA Stream. This counter is decremented at the end of each data - transfer and when the transfer is complete: - (+) If Normal mode is selected: the counter is set to 0. - (+) If Circular mode is selected: the counter is reloaded with the initial value - (configured before enabling the DMA Stream) - [..] - The following function can be used to read the Stream data counter value: - (+) uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx); - -@endverbatim - * @{ - */ - -/** - * @brief Writes the number of data units to be transferred on the DMAy Streamx. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param Counter: Number of data units to be transferred (from 0 to 65535) - * Number of data items depends only on the Peripheral data format. - * - * @note If Peripheral data format is Bytes: number of data units is equal - * to total number of bytes to be transferred. - * - * @note If Peripheral data format is Half-Word: number of data units is - * equal to total number of bytes to be transferred / 2. - * - * @note If Peripheral data format is Word: number of data units is equal - * to total number of bytes to be transferred / 4. - * - * @note In Memory-to-Memory transfer mode, the memory buffer pointed by - * DMAy_SxPAR register is considered as Peripheral. - * - * @retval The number of remaining data units in the current DMAy Streamx transfer. - */ -void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Write the number of data units to be transferred */ - DMAy_Streamx->NDTR = (uint16_t)Counter; -} - -/** - * @brief Returns the number of remaining data units in the current DMAy Streamx transfer. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @retval The number of remaining data units in the current DMAy Streamx transfer. - */ -uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Return the number of remaining data units for DMAy Streamx */ - return ((uint16_t)(DMAy_Streamx->NDTR)); -} -/** - * @} - */ - -/** @defgroup DMA_Group3 Double Buffer mode functions - * @brief Double Buffer mode functions - * -@verbatim - =============================================================================== - ##### Double Buffer mode functions ##### - =============================================================================== - [..] - This subsection provides function allowing to configure and control the double - buffer mode parameters. - - [..] - The Double Buffer mode can be used only when Circular mode is enabled. - The Double Buffer mode cannot be used when transferring data from Memory to Memory. - - [..] - The Double Buffer mode allows to set two different Memory addresses from/to which - the DMA controller will access alternatively (after completing transfer to/from - target memory 0, it will start transfer to/from target memory 1). - This allows to reduce software overhead for double buffering and reduce the CPU - access time. - - [..] - Two functions must be called before calling the DMA_Init() function: - (+) void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, - uint32_t Memory1BaseAddr, uint32_t DMA_CurrentMemory); - (+) void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); - - [..] - DMA_DoubleBufferModeConfig() is called to configure the Memory 1 base address - and the first Memory target from/to which the transfer will start after - enabling the DMA Stream. Then DMA_DoubleBufferModeCmd() must be called - to enable the Double Buffer mode (or disable it when it should not be used). - - [..] - Two functions can be called dynamically when the transfer is ongoing (or when the DMA Stream is - stopped) to modify on of the target Memories addresses or to check wich Memory target is currently - used: - (+) void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, - uint32_t MemoryBaseAddr, uint32_t DMA_MemoryTarget); - (+) uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx); - - [..] - DMA_MemoryTargetConfig() can be called to modify the base address of one of - the two target Memories. - The Memory of which the base address will be modified must not be currently - be used by the DMA Stream (ie. if the DMA Stream is currently transferring - from Memory 1 then you can only modify base address of target Memory 0 and vice versa). - To check this condition, it is recommended to use the function DMA_GetCurrentMemoryTarget() which - returns the index of the Memory target currently in use by the DMA Stream. - -@endverbatim - * @{ - */ - -/** - * @brief Configures, when the DMAy Streamx is disabled, the double buffer mode - * and the current memory target. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param Memory1BaseAddr: the base address of the second buffer (Memory 1) - * @param DMA_CurrentMemory: specifies which memory will be first buffer for - * the transactions when the Stream will be enabled. - * This parameter can be one of the following values: - * @arg DMA_Memory_0: Memory 0 is the current buffer. - * @arg DMA_Memory_1: Memory 1 is the current buffer. - * - * @note Memory0BaseAddr is set by the DMA structure configuration in DMA_Init(). - * - * @retval None - */ -void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t Memory1BaseAddr, - uint32_t DMA_CurrentMemory) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CURRENT_MEM(DMA_CurrentMemory)); - - if (DMA_CurrentMemory != DMA_Memory_0) - { - /* Set Memory 1 as current memory address */ - DMAy_Streamx->CR |= (uint32_t)(DMA_SxCR_CT); - } - else - { - /* Set Memory 0 as current memory address */ - DMAy_Streamx->CR &= ~(uint32_t)(DMA_SxCR_CT); - } - - /* Write to DMAy Streamx M1AR */ - DMAy_Streamx->M1AR = Memory1BaseAddr; -} - -/** - * @brief Enables or disables the double buffer mode for the selected DMA stream. - * @note This function can be called only when the DMA Stream is disabled. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param NewState: new state of the DMAy Streamx double buffer mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Configure the Double Buffer mode */ - if (NewState != DISABLE) - { - /* Enable the Double buffer mode */ - DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_DBM; - } - else - { - /* Disable the Double buffer mode */ - DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_DBM; - } -} - -/** - * @brief Configures the Memory address for the next buffer transfer in double - * buffer mode (for dynamic use). This function can be called when the - * DMA Stream is enabled and when the transfer is ongoing. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param MemoryBaseAddr: The base address of the target memory buffer - * @param DMA_MemoryTarget: Next memory target to be used. - * This parameter can be one of the following values: - * @arg DMA_Memory_0: To use the memory address 0 - * @arg DMA_Memory_1: To use the memory address 1 - * - * @note It is not allowed to modify the Base Address of a target Memory when - * this target is involved in the current transfer. ie. If the DMA Stream - * is currently transferring to/from Memory 1, then it not possible to - * modify Base address of Memory 1, but it is possible to modify Base - * address of Memory 0. - * To know which Memory is currently used, you can use the function - * DMA_GetCurrentMemoryTarget(). - * - * @retval None - */ -void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t MemoryBaseAddr, - uint32_t DMA_MemoryTarget) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CURRENT_MEM(DMA_MemoryTarget)); - - /* Check the Memory target to be configured */ - if (DMA_MemoryTarget != DMA_Memory_0) - { - /* Write to DMAy Streamx M1AR */ - DMAy_Streamx->M1AR = MemoryBaseAddr; - } - else - { - /* Write to DMAy Streamx M0AR */ - DMAy_Streamx->M0AR = MemoryBaseAddr; - } -} - -/** - * @brief Returns the current memory target used by double buffer transfer. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @retval The memory target number: 0 for Memory0 or 1 for Memory1. - */ -uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx) -{ - uint32_t tmp = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Get the current memory target */ - if ((DMAy_Streamx->CR & DMA_SxCR_CT) != 0) - { - /* Current memory buffer used is Memory 1 */ - tmp = 1; - } - else - { - /* Current memory buffer used is Memory 0 */ - tmp = 0; - } - return tmp; -} -/** - * @} - */ - -/** @defgroup DMA_Group4 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - [..] - This subsection provides functions allowing to - (+) Check the DMA enable status - (+) Check the FIFO status - (+) Configure the DMA Interrupts sources and check or clear the flags or - pending bits status. - - [..] - (#) DMA Enable status: - After configuring the DMA Stream (DMA_Init() function) and enabling - the stream, it is recommended to check (or wait until) the DMA Stream - is effectively enabled. A Stream may remain disabled if a configuration - parameter is wrong. After disabling a DMA Stream, it is also recommended - to check (or wait until) the DMA Stream is effectively disabled. - If a Stream is disabled while a data transfer is ongoing, the current - data will be transferred and the Stream will be effectively disabled - only after this data transfer completion. - To monitor this state it is possible to use the following function: - (++) FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx); - - (#) FIFO Status: - It is possible to monitor the FIFO status when a transfer is ongoing - using the following function: - (++) uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx); - - (#) DMA Interrupts and Flags: - The user should identify which mode will be used in his application - to manage the DMA controller events: Polling mode or Interrupt mode. - - *** Polling Mode *** - ==================== - [..] - Each DMA stream can be managed through 4 event Flags: - (x : DMA Stream number ) - (#) DMA_FLAG_FEIFx : to indicate that a FIFO Mode Transfer Error event occurred. - (#) DMA_FLAG_DMEIFx : to indicate that a Direct Mode Transfer Error event occurred. - (#) DMA_FLAG_TEIFx : to indicate that a Transfer Error event occurred. - (#) DMA_FLAG_HTIFx : to indicate that a Half-Transfer Complete event occurred. - (#) DMA_FLAG_TCIFx : to indicate that a Transfer Complete event occurred . - [..] - In this Mode it is advised to use the following functions: - (+) FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); - (+) void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); - - *** Interrupt Mode *** - ====================== - [..] - Each DMA Stream can be managed through 4 Interrupts: - - *** Interrupt Source *** - ======================== - [..] - (#) DMA_IT_FEIFx : specifies the interrupt source for the FIFO Mode Transfer Error event. - (#) DMA_IT_DMEIFx : specifies the interrupt source for the Direct Mode Transfer Error event. - (#) DMA_IT_TEIFx : specifies the interrupt source for the Transfer Error event. - (#) DMA_IT_HTIFx : specifies the interrupt source for the Half-Transfer Complete event. - (#) DMA_IT_TCIFx : specifies the interrupt source for the a Transfer Complete event. - [..] - In this Mode it is advised to use the following functions: - (+) void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState); - (+) ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); - (+) void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); - -@endverbatim - * @{ - */ - -/** - * @brief Returns the status of EN bit for the specified DMAy Streamx. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * - * @note After configuring the DMA Stream (DMA_Init() function) and enabling - * the stream, it is recommended to check (or wait until) the DMA Stream - * is effectively enabled. A Stream may remain disabled if a configuration - * parameter is wrong. - * After disabling a DMA Stream, it is also recommended to check (or wait - * until) the DMA Stream is effectively disabled. If a Stream is disabled - * while a data transfer is ongoing, the current data will be transferred - * and the Stream will be effectively disabled only after the transfer - * of this single data is finished. - * - * @retval Current state of the DMAy Streamx (ENABLE or DISABLE). - */ -FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx) -{ - FunctionalState state = DISABLE; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - if ((DMAy_Streamx->CR & (uint32_t)DMA_SxCR_EN) != 0) - { - /* The selected DMAy Streamx EN bit is set (DMA is still transferring) */ - state = ENABLE; - } - else - { - /* The selected DMAy Streamx EN bit is cleared (DMA is disabled and - all transfers are complete) */ - state = DISABLE; - } - return state; -} - -/** - * @brief Returns the current DMAy Streamx FIFO filled level. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @retval The FIFO filling state. - * - DMA_FIFOStatus_Less1QuarterFull: when FIFO is less than 1 quarter-full - * and not empty. - * - DMA_FIFOStatus_1QuarterFull: if more than 1 quarter-full. - * - DMA_FIFOStatus_HalfFull: if more than 1 half-full. - * - DMA_FIFOStatus_3QuartersFull: if more than 3 quarters-full. - * - DMA_FIFOStatus_Empty: when FIFO is empty - * - DMA_FIFOStatus_Full: when FIFO is full - */ -uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - - /* Get the FIFO level bits */ - tmpreg = (uint32_t)((DMAy_Streamx->FCR & DMA_SxFCR_FS)); - - return tmpreg; -} - -/** - * @brief Checks whether the specified DMAy Streamx flag is set or not. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg DMA_FLAG_TCIFx: Streamx transfer complete flag - * @arg DMA_FLAG_HTIFx: Streamx half transfer complete flag - * @arg DMA_FLAG_TEIFx: Streamx transfer error flag - * @arg DMA_FLAG_DMEIFx: Streamx direct mode error flag - * @arg DMA_FLAG_FEIFx: Streamx FIFO error flag - * Where x can be 0 to 7 to select the DMA Stream. - * @retval The new state of DMA_FLAG (SET or RESET). - */ -FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG) -{ - FlagStatus bitstatus = RESET; - DMA_TypeDef* DMAy; - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_GET_FLAG(DMA_FLAG)); - - /* Determine the DMA to which belongs the stream */ - if (DMAy_Streamx < DMA2_Stream0) - { - /* DMAy_Streamx belongs to DMA1 */ - DMAy = DMA1; - } - else - { - /* DMAy_Streamx belongs to DMA2 */ - DMAy = DMA2; - } - - /* Check if the flag is in HISR or LISR */ - if ((DMA_FLAG & HIGH_ISR_MASK) != (uint32_t)RESET) - { - /* Get DMAy HISR register value */ - tmpreg = DMAy->HISR; - } - else - { - /* Get DMAy LISR register value */ - tmpreg = DMAy->LISR; - } - - /* Mask the reserved bits */ - tmpreg &= (uint32_t)RESERVED_MASK; - - /* Check the status of the specified DMA flag */ - if ((tmpreg & DMA_FLAG) != (uint32_t)RESET) - { - /* DMA_FLAG is set */ - bitstatus = SET; - } - else - { - /* DMA_FLAG is reset */ - bitstatus = RESET; - } - - /* Return the DMA_FLAG status */ - return bitstatus; -} - -/** - * @brief Clears the DMAy Streamx's pending flags. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg DMA_FLAG_TCIFx: Streamx transfer complete flag - * @arg DMA_FLAG_HTIFx: Streamx half transfer complete flag - * @arg DMA_FLAG_TEIFx: Streamx transfer error flag - * @arg DMA_FLAG_DMEIFx: Streamx direct mode error flag - * @arg DMA_FLAG_FEIFx: Streamx FIFO error flag - * Where x can be 0 to 7 to select the DMA Stream. - * @retval None - */ -void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG) -{ - DMA_TypeDef* DMAy; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CLEAR_FLAG(DMA_FLAG)); - - /* Determine the DMA to which belongs the stream */ - if (DMAy_Streamx < DMA2_Stream0) - { - /* DMAy_Streamx belongs to DMA1 */ - DMAy = DMA1; - } - else - { - /* DMAy_Streamx belongs to DMA2 */ - DMAy = DMA2; - } - - /* Check if LIFCR or HIFCR register is targeted */ - if ((DMA_FLAG & HIGH_ISR_MASK) != (uint32_t)RESET) - { - /* Set DMAy HIFCR register clear flag bits */ - DMAy->HIFCR = (uint32_t)(DMA_FLAG & RESERVED_MASK); - } - else - { - /* Set DMAy LIFCR register clear flag bits */ - DMAy->LIFCR = (uint32_t)(DMA_FLAG & RESERVED_MASK); - } -} - -/** - * @brief Enables or disables the specified DMAy Streamx interrupts. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_IT: specifies the DMA interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg DMA_IT_TC: Transfer complete interrupt mask - * @arg DMA_IT_HT: Half transfer complete interrupt mask - * @arg DMA_IT_TE: Transfer error interrupt mask - * @arg DMA_IT_FE: FIFO error interrupt mask - * @param NewState: new state of the specified DMA interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CONFIG_IT(DMA_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Check if the DMA_IT parameter contains a FIFO interrupt */ - if ((DMA_IT & DMA_IT_FE) != 0) - { - if (NewState != DISABLE) - { - /* Enable the selected DMA FIFO interrupts */ - DMAy_Streamx->FCR |= (uint32_t)DMA_IT_FE; - } - else - { - /* Disable the selected DMA FIFO interrupts */ - DMAy_Streamx->FCR &= ~(uint32_t)DMA_IT_FE; - } - } - - /* Check if the DMA_IT parameter contains a Transfer interrupt */ - if (DMA_IT != DMA_IT_FE) - { - if (NewState != DISABLE) - { - /* Enable the selected DMA transfer interrupts */ - DMAy_Streamx->CR |= (uint32_t)(DMA_IT & TRANSFER_IT_ENABLE_MASK); - } - else - { - /* Disable the selected DMA transfer interrupts */ - DMAy_Streamx->CR &= ~(uint32_t)(DMA_IT & TRANSFER_IT_ENABLE_MASK); - } - } -} - -/** - * @brief Checks whether the specified DMAy Streamx interrupt has occurred or not. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_IT: specifies the DMA interrupt source to check. - * This parameter can be one of the following values: - * @arg DMA_IT_TCIFx: Streamx transfer complete interrupt - * @arg DMA_IT_HTIFx: Streamx half transfer complete interrupt - * @arg DMA_IT_TEIFx: Streamx transfer error interrupt - * @arg DMA_IT_DMEIFx: Streamx direct mode error interrupt - * @arg DMA_IT_FEIFx: Streamx FIFO error interrupt - * Where x can be 0 to 7 to select the DMA Stream. - * @retval The new state of DMA_IT (SET or RESET). - */ -ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT) -{ - ITStatus bitstatus = RESET; - DMA_TypeDef* DMAy; - uint32_t tmpreg = 0, enablestatus = 0; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_GET_IT(DMA_IT)); - - /* Determine the DMA to which belongs the stream */ - if (DMAy_Streamx < DMA2_Stream0) - { - /* DMAy_Streamx belongs to DMA1 */ - DMAy = DMA1; - } - else - { - /* DMAy_Streamx belongs to DMA2 */ - DMAy = DMA2; - } - - /* Check if the interrupt enable bit is in the CR or FCR register */ - if ((DMA_IT & TRANSFER_IT_MASK) != (uint32_t)RESET) - { - /* Get the interrupt enable position mask in CR register */ - tmpreg = (uint32_t)((DMA_IT >> 11) & TRANSFER_IT_ENABLE_MASK); - - /* Check the enable bit in CR register */ - enablestatus = (uint32_t)(DMAy_Streamx->CR & tmpreg); - } - else - { - /* Check the enable bit in FCR register */ - enablestatus = (uint32_t)(DMAy_Streamx->FCR & DMA_IT_FE); - } - - /* Check if the interrupt pending flag is in LISR or HISR */ - if ((DMA_IT & HIGH_ISR_MASK) != (uint32_t)RESET) - { - /* Get DMAy HISR register value */ - tmpreg = DMAy->HISR ; - } - else - { - /* Get DMAy LISR register value */ - tmpreg = DMAy->LISR ; - } - - /* mask all reserved bits */ - tmpreg &= (uint32_t)RESERVED_MASK; - - /* Check the status of the specified DMA interrupt */ - if (((tmpreg & DMA_IT) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) - { - /* DMA_IT is set */ - bitstatus = SET; - } - else - { - /* DMA_IT is reset */ - bitstatus = RESET; - } - - /* Return the DMA_IT status */ - return bitstatus; -} - -/** - * @brief Clears the DMAy Streamx's interrupt pending bits. - * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 - * to 7 to select the DMA Stream. - * @param DMA_IT: specifies the DMA interrupt pending bit to clear. - * This parameter can be any combination of the following values: - * @arg DMA_IT_TCIFx: Streamx transfer complete interrupt - * @arg DMA_IT_HTIFx: Streamx half transfer complete interrupt - * @arg DMA_IT_TEIFx: Streamx transfer error interrupt - * @arg DMA_IT_DMEIFx: Streamx direct mode error interrupt - * @arg DMA_IT_FEIFx: Streamx FIFO error interrupt - * Where x can be 0 to 7 to select the DMA Stream. - * @retval None - */ -void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT) -{ - DMA_TypeDef* DMAy; - - /* Check the parameters */ - assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); - assert_param(IS_DMA_CLEAR_IT(DMA_IT)); - - /* Determine the DMA to which belongs the stream */ - if (DMAy_Streamx < DMA2_Stream0) - { - /* DMAy_Streamx belongs to DMA1 */ - DMAy = DMA1; - } - else - { - /* DMAy_Streamx belongs to DMA2 */ - DMAy = DMA2; - } - - /* Check if LIFCR or HIFCR register is targeted */ - if ((DMA_IT & HIGH_ISR_MASK) != (uint32_t)RESET) - { - /* Set DMAy HIFCR register clear interrupt bits */ - DMAy->HIFCR = (uint32_t)(DMA_IT & RESERVED_MASK); - } - else - { - /* Set DMAy LIFCR register clear interrupt bits */ - DMAy->LIFCR = (uint32_t)(DMA_IT & RESERVED_MASK); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c deleted file mode 100644 index 0de36e9e..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c +++ /dev/null @@ -1,313 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_exti.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the EXTI peripheral: - * + Initialization and Configuration - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### EXTI features ##### - =================================================================== - - [..] External interrupt/event lines are mapped as following: - (#) All available GPIO pins are connected to the 16 external - interrupt/event lines from EXTI0 to EXTI15. - (#) EXTI line 16 is connected to the PVD Output - (#) EXTI line 17 is connected to the RTC Alarm event - (#) EXTI line 18 is connected to the USB OTG FS Wakeup from suspend event - (#) EXTI line 19 is connected to the Ethernet Wakeup event - (#) EXTI line 20 is connected to the USB OTG HS (configured in FS) Wakeup event - (#) EXTI line 21 is connected to the RTC Tamper and Time Stamp events - (#) EXTI line 22 is connected to the RTC Wakeup event - - - ##### How to use this driver ##### - =================================================================== - - [..] In order to use an I/O pin as an external interrupt source, follow steps - below: - (#) Configure the I/O in input mode using GPIO_Init() - (#) Select the input source pin for the EXTI line using SYSCFG_EXTILineConfig() - (#) Select the mode(interrupt, event) and configure the trigger - selection (Rising, falling or both) using EXTI_Init() - (#) Configure NVIC IRQ channel mapped to the EXTI line using NVIC_Init() - - [..] - (@) SYSCFG APB clock must be enabled to get write access to SYSCFG_EXTICRx - registers using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_exti.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup EXTI - * @brief EXTI driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -#define EXTI_LINENONE ((uint32_t)0x00000) /* No interrupt selected */ - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup EXTI_Private_Functions - * @{ - */ - -/** @defgroup EXTI_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 = 0x007FFFFF; -} - -/** - * @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 on selected EXTI line. - * @param EXTI_Line: specifies the EXTI line on which the software interrupt - * will be generated. - * This parameter can be any combination of EXTI_Linex where x can be (0..22) - * @retval None - */ -void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line) -{ - /* Check the parameters */ - assert_param(IS_EXTI_LINE(EXTI_Line)); - - EXTI->SWIER |= EXTI_Line; -} - -/** - * @} - */ - -/** @defgroup EXTI_Group2 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 EXTI_Linex where x can be(0..22) - * @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..22) - * @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 EXTI_Linex where x can be(0..22) - * @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..22) - * @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c deleted file mode 100644 index 8e44926c..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c +++ /dev/null @@ -1,1180 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_flash.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the FLASH peripheral: - * + FLASH Interface configuration - * + FLASH Memory Programming - * + Option Bytes Programming - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - This driver provides functions to configure and program the FLASH memory - of all STM32F4xx devices. These functions are split in 4 groups: - - (#) FLASH Interface configuration functions: this group includes the - management of the following features: - (++) Set the latency - (++) Enable/Disable the prefetch buffer - (++) Enable/Disable the Instruction cache and the Data cache - (++) Reset the Instruction cache and the Data cache - - (#) FLASH Memory Programming functions: this group includes all needed - functions to erase and program the main memory: - (++) Lock and Unlock the FLASH interface - (++) Erase function: Erase sector, erase all sectors - (++) Program functions: byte, half word, word and double word - - (#) Option Bytes Programming functions: this group includes all needed - functions to manage the Option Bytes: - (++) Set/Reset the write protection - (++) Set the Read protection Level - (++) Set the BOR level - (++) Program the user Option Bytes - (++) Launch the Option Bytes loader - - (#) Interrupts and flags management functions: this group - includes all needed functions to: - (++) Enable/Disable the FLASH interrupt sources - (++) Get flags status - (++) Clear flags - (++) Get FLASH operation status - (++) Wait for last FLASH operation - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_flash.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup FLASH - * @brief FLASH driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define SECTOR_MASK ((uint32_t)0xFFFFFF07) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup FLASH_Private_Functions - * @{ - */ - -/** @defgroup FLASH_Group1 FLASH Interface configuration functions - * @brief FLASH Interface configuration functions - * - -@verbatim - =============================================================================== - ##### FLASH Interface configuration functions ##### - =============================================================================== - [..] - This group includes the following functions: - (+) void FLASH_SetLatency(uint32_t FLASH_Latency) - To correctly read data from FLASH memory, the number of wait states (LATENCY) - must be correctly programmed according to the frequency of the CPU clock - (HCLK) and the supply voltage of the device. - +-------------------------------------------------------------------------------------+ - | Latency | HCLK clock frequency (MHz) | - | |---------------------------------------------------------------------| - | | voltage range | voltage range | voltage range | voltage range | - | | 2.7 V - 3.6 V | 2.4 V - 2.7 V | 2.1 V - 2.4 V | 1.8 V - 2.1 V | - |---------------|----------------|----------------|-----------------|-----------------| - |0WS(1CPU cycle)|0 < HCLK <= 30 |0 < HCLK <= 24 |0 < HCLK <= 22 |0 < HCLK <= 20 | - |---------------|----------------|----------------|-----------------|-----------------| - |1WS(2CPU cycle)|30 < HCLK <= 60 |24 < HCLK <= 48 |22 < HCLK <= 44 |20 < HCLK <= 40 | - |---------------|----------------|----------------|-----------------|-----------------| - |2WS(3CPU cycle)|60 < HCLK <= 90 |48 < HCLK <= 72 |44 < HCLK <= 66 |40 < HCLK <= 60 | - |---------------|----------------|----------------|-----------------|-----------------| - |3WS(4CPU cycle)|90 < HCLK <= 120|72 < HCLK <= 96 |66 < HCLK <= 88 |60 < HCLK <= 80 | - |---------------|----------------|----------------|-----------------|-----------------| - |4WS(5CPU cycle)|120< HCLK <= 150|96 < HCLK <= 120|88 < HCLK <= 110 |80 < HCLK <= 100 | - |---------------|----------------|----------------|-----------------|-----------------| - |5WS(6CPU cycle)|120< HCLK <= 168|120< HCLK <= 144|110 < HCLK <= 132|100 < HCLK <= 120| - |---------------|----------------|----------------|-----------------|-----------------| - |6WS(7CPU cycle)| NA |144< HCLK <= 168|132 < HCLK <= 154|120 < HCLK <= 140| - |---------------|----------------|----------------|-----------------|-----------------| - |7WS(8CPU cycle)| NA | NA |154 < HCLK <= 168|140 < HCLK <= 160| - +-------------------------------------------------------------------------------------+ - - [..] - +-------------------------------------------------------------------------------------------------------------------+ - | | voltage range | voltage range | voltage range | voltage range | voltage range 2.7 V - 3.6 V | - | | 2.7 V - 3.6 V | 2.4 V - 2.7 V | 2.1 V - 2.4 V | 1.8 V - 2.1 V | with External Vpp = 9V | - |---------------|----------------|----------------|-----------------|-----------------|-----------------------------| - |Max Parallelism| x32 | x16 | x8 | x64 | - |---------------|----------------|----------------|-----------------|-----------------|-----------------------------| - |PSIZE[1:0] | 10 | 01 | 00 | 11 | - +-------------------------------------------------------------------------------------------------------------------+ - -@- When VOS bit (in PWR_CR register) is reset to 0 , the maximum value of HCLK is 144 MHz. - You can use PWR_MainRegulatorModeConfig() function to set or reset this bit. - -@- On STM32F40xx/41xx devices: - (++) when VOS = '0', the maximum value of fHCLK = 144MHz. - (++) when VOS = '1', the maximum value of fHCLK = 168MHz. - [..] - On STM32F427x/437x devices: - (++) when VOS[1:0] = '0x01', the maximum value of fHCLK is 120MHz. - (++) when VOS[1:0] = '0x10', the maximum value of fHCLK is 144MHz. - (++) when VOS[1:0] = '0x11', the maximum value of f is 168MHz - You can use PWR_MainRegulatorModeConfig() function to control VOS bits. - - (+) void FLASH_PrefetchBufferCmd(FunctionalState NewState) - (+) void FLASH_InstructionCacheCmd(FunctionalState NewState) - (+) void FLASH_DataCacheCmd(FunctionalState NewState) - (+) void FLASH_InstructionCacheReset(void) - (+) void FLASH_DataCacheReset(void) - - [..] - The unlock sequence is not needed for these functions. - -@endverbatim - * @{ - */ - -/** - * @brief Sets the code latency value. - * @param FLASH_Latency: specifies the FLASH Latency value. - * This parameter can be one of the following values: - * @arg FLASH_Latency_0: FLASH Zero Latency cycle - * @arg FLASH_Latency_1: FLASH One Latency cycle - * @arg FLASH_Latency_2: FLASH Two Latency cycles - * @arg FLASH_Latency_3: FLASH Three Latency cycles - * @arg FLASH_Latency_4: FLASH Four Latency cycles - * @arg FLASH_Latency_5: FLASH Five Latency cycles - * @arg FLASH_Latency_6: FLASH Six Latency cycles - * @arg FLASH_Latency_7: FLASH Seven Latency cycles - * For STM32F40xx/41xx and STM32F427x/437x devices this parameter can be - * a value between FLASH_Latency_0 and FLASH_Latency_7. - * @retval None - */ -void FLASH_SetLatency(uint32_t FLASH_Latency) -{ - /* Check the parameters */ - assert_param(IS_FLASH_LATENCY(FLASH_Latency)); - - /* Perform Byte access to FLASH_ACR[8:0] to set the Latency value */ - *(__IO uint8_t *)ACR_BYTE0_ADDRESS = (uint8_t)FLASH_Latency; -} - -/** - * @brief Enables or disables the Prefetch Buffer. - * @param NewState: new state of the Prefetch Buffer. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_PrefetchBufferCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Enable or disable the Prefetch Buffer */ - if(NewState != DISABLE) - { - FLASH->ACR |= FLASH_ACR_PRFTEN; - } - else - { - FLASH->ACR &= (~FLASH_ACR_PRFTEN); - } -} - -/** - * @brief Enables or disables the Instruction Cache feature. - * @param NewState: new state of the Instruction Cache. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_InstructionCacheCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if(NewState != DISABLE) - { - FLASH->ACR |= FLASH_ACR_ICEN; - } - else - { - FLASH->ACR &= (~FLASH_ACR_ICEN); - } -} - -/** - * @brief Enables or disables the Data Cache feature. - * @param NewState: new state of the Data Cache. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_DataCacheCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if(NewState != DISABLE) - { - FLASH->ACR |= FLASH_ACR_DCEN; - } - else - { - FLASH->ACR &= (~FLASH_ACR_DCEN); - } -} - -/** - * @brief Resets the Instruction Cache. - * @note This function must be used only when the Instruction Cache is disabled. - * @param None - * @retval None - */ -void FLASH_InstructionCacheReset(void) -{ - FLASH->ACR |= FLASH_ACR_ICRST; -} - -/** - * @brief Resets the Data Cache. - * @note This function must be used only when the Data Cache is disabled. - * @param None - * @retval None - */ -void FLASH_DataCacheReset(void) -{ - FLASH->ACR |= FLASH_ACR_DCRST; -} - -/** - * @} - */ - -/** @defgroup FLASH_Group2 FLASH Memory Programming functions - * @brief FLASH Memory Programming functions - * -@verbatim - =============================================================================== - ##### FLASH Memory Programming functions ##### - =============================================================================== - [..] - This group includes the following functions: - (+) void FLASH_Unlock(void) - (+) void FLASH_Lock(void) - (+) FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange) - (+) FLASH_Status FLASH_EraseAllSectors(uint8_t VoltageRange) - (+) FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data) - (+) FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) - (+) FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) - (+) FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data) - [..] - Any operation of erase or program should follow these steps: - (#) Call the FLASH_Unlock() function to enable the FLASH control register access - - (#) Call the desired function to erase sector(s) or program data - - (#) Call the FLASH_Lock() function to disable the FLASH control register access - (recommended to protect the FLASH memory against possible unwanted operation) - -@endverbatim - * @{ - */ - -/** - * @brief Unlocks the FLASH control register access - * @param None - * @retval None - */ -void FLASH_Unlock(void) -{ - if((FLASH->CR & FLASH_CR_LOCK) != RESET) - { - /* Authorize the FLASH Registers access */ - FLASH->KEYR = FLASH_KEY1; - FLASH->KEYR = FLASH_KEY2; - } -} - -/** - * @brief Locks the FLASH control register access - * @param None - * @retval None - */ -void FLASH_Lock(void) -{ - /* Set the LOCK Bit to lock the FLASH Registers access */ - FLASH->CR |= FLASH_CR_LOCK; -} - -/** - * @brief Erases a specified FLASH Sector. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param FLASH_Sector: The Sector number to be erased. - * For STM32F40xx/41xx devices this parameter can be a value between - * FLASH_Sector_0 and FLASH_Sector_11. - * For STM32F427x/437x devices this parameter can be a value between - * FLASH_Sector_0 and FLASH_Sector_23. - * - * @param VoltageRange: The device voltage range which defines the erase parallelism. - * This parameter can be one of the following values: - * @arg VoltageRange_1: when the device voltage range is 1.8V to 2.1V, - * the operation will be done by byte (8-bit) - * @arg VoltageRange_2: when the device voltage range is 2.1V to 2.7V, - * the operation will be done by half word (16-bit) - * @arg VoltageRange_3: when the device voltage range is 2.7V to 3.6V, - * the operation will be done by word (32-bit) - * @arg VoltageRange_4: when the device voltage range is 2.7V to 3.6V + External Vpp, - * the operation will be done by double word (64-bit) - * - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange) -{ - uint32_t tmp_psize = 0x0; - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_SECTOR(FLASH_Sector)); - assert_param(IS_VOLTAGERANGE(VoltageRange)); - - if(VoltageRange == VoltageRange_1) - { - tmp_psize = FLASH_PSIZE_BYTE; - } - else if(VoltageRange == VoltageRange_2) - { - tmp_psize = FLASH_PSIZE_HALF_WORD; - } - else if(VoltageRange == VoltageRange_3) - { - tmp_psize = FLASH_PSIZE_WORD; - } - else - { - tmp_psize = FLASH_PSIZE_DOUBLE_WORD; - } - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to erase the sector */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= tmp_psize; - FLASH->CR &= SECTOR_MASK; - FLASH->CR |= FLASH_CR_SER | FLASH_Sector; - FLASH->CR |= FLASH_CR_STRT; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the erase operation is completed, disable the SER Bit */ - FLASH->CR &= (~FLASH_CR_SER); - FLASH->CR &= SECTOR_MASK; - } - /* Return the Erase Status */ - return status; -} - -/** - * @brief Erases all FLASH Sectors. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param VoltageRange: The device voltage range which defines the erase parallelism. - * This parameter can be one of the following values: - * @arg VoltageRange_1: when the device voltage range is 1.8V to 2.1V, - * the operation will be done by byte (8-bit) - * @arg VoltageRange_2: when the device voltage range is 2.1V to 2.7V, - * the operation will be done by half word (16-bit) - * @arg VoltageRange_3: when the device voltage range is 2.7V to 3.6V, - * the operation will be done by word (32-bit) - * @arg VoltageRange_4: when the device voltage range is 2.7V to 3.6V + External Vpp, - * the operation will be done by double word (64-bit) - * - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_EraseAllSectors(uint8_t VoltageRange) -{ -#if defined (STM32F427X) || (STM32F40XX) - uint32_t tmp_psize = 0x0; -#endif - FLASH_Status status = FLASH_COMPLETE; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - assert_param(IS_VOLTAGERANGE(VoltageRange)); - -#if defined (STM32F427X) || (STM32F40XX) - if(VoltageRange == VoltageRange_1) - { - tmp_psize = FLASH_PSIZE_BYTE; - } - else if(VoltageRange == VoltageRange_2) - { - tmp_psize = FLASH_PSIZE_HALF_WORD; - } - else if(VoltageRange == VoltageRange_3) - { - tmp_psize = FLASH_PSIZE_WORD; - } - else - { - tmp_psize = FLASH_PSIZE_DOUBLE_WORD; - } -#endif - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to erase all sectors */ -#if defined (STM32F427X) - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= tmp_psize; - FLASH->CR |= (FLASH_CR_MER1 | FLASH_CR_MER2); - FLASH->CR |= FLASH_CR_STRT; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the erase operation is completed, disable the MER Bit */ - FLASH->CR &= ~(FLASH_CR_MER1 | FLASH_CR_MER2); -#endif /* STM32F427X */ - -#ifdef STM32F40XX - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= tmp_psize; - FLASH->CR |= FLASH_CR_MER; - FLASH->CR |= FLASH_CR_STRT; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the erase operation is completed, disable the MER Bit */ - FLASH->CR &= (~FLASH_CR_MER); -#endif /* STM32F40XX */ - - } - /* Return the Erase Status */ - return status; -} - -/** - * @brief Programs a double word (64-bit) at a specified address. - * @note This function must be used when the device voltage range is from - * 2.7V to 3.6V and an External Vpp is present. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param Address: specifies the address to be programmed. - * @param Data: specifies the data to be programmed. - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_ADDRESS(Address)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to program the new data */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= FLASH_PSIZE_DOUBLE_WORD; - FLASH->CR |= FLASH_CR_PG; - - *(__IO uint64_t*)Address = Data; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the program operation is completed, disable the PG Bit */ - FLASH->CR &= (~FLASH_CR_PG); - } - /* Return the Program Status */ - return status; -} - -/** - * @brief Programs a word (32-bit) at a specified address. - * - * @note This function must be used when the device voltage range is from 2.7V to 3.6V. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param Address: specifies the address to be programmed. - * This parameter can be any address in Program memory zone or in OTP zone. - * @param Data: specifies the data to be programmed. - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_ADDRESS(Address)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to program the new data */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= FLASH_PSIZE_WORD; - FLASH->CR |= FLASH_CR_PG; - - *(__IO uint32_t*)Address = Data; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the program operation is completed, disable the PG Bit */ - FLASH->CR &= (~FLASH_CR_PG); - } - /* Return the Program Status */ - return status; -} - -/** - * @brief Programs a half word (16-bit) at a specified address. - * @note This function must be used when the device voltage range is from 2.1V to 3.6V. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param Address: specifies the address to be programmed. - * This parameter can be any address in Program memory zone or in OTP zone. - * @param Data: specifies the data to be programmed. - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_ADDRESS(Address)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to program the new data */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= FLASH_PSIZE_HALF_WORD; - FLASH->CR |= FLASH_CR_PG; - - *(__IO uint16_t*)Address = Data; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the program operation is completed, disable the PG Bit */ - FLASH->CR &= (~FLASH_CR_PG); - } - /* Return the Program Status */ - return status; -} - -/** - * @brief Programs a byte (8-bit) at a specified address. - * @note This function can be used within all the device supply voltage ranges. - * - * @note If an erase and a program operations are requested simustaneously, - * the erase operation is performed before the program one. - * - * @param Address: specifies the address to be programmed. - * This parameter can be any address in Program memory zone or in OTP zone. - * @param Data: specifies the data to be programmed. - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_FLASH_ADDRESS(Address)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* if the previous operation is completed, proceed to program the new data */ - FLASH->CR &= CR_PSIZE_MASK; - FLASH->CR |= FLASH_PSIZE_BYTE; - FLASH->CR |= FLASH_CR_PG; - - *(__IO uint8_t*)Address = Data; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - /* if the program operation is completed, disable the PG Bit */ - FLASH->CR &= (~FLASH_CR_PG); - } - - /* Return the Program Status */ - return status; -} - -/** - * @} - */ - -/** @defgroup FLASH_Group3 Option Bytes Programming functions - * @brief Option Bytes Programming functions - * -@verbatim - =============================================================================== - ##### Option Bytes Programming functions ##### - =============================================================================== - [..] - This group includes the following functions: - (+) void FLASH_OB_Unlock(void) - (+) void FLASH_OB_Lock(void) - (+) void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) - (+) void FLASH_OB_WRP1Config(uint32_t OB_WRP, FunctionalState NewState) - (+) void FLASH_OB_RDPConfig(uint8_t OB_RDP) - (+) void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) - (+) void FLASH_OB_BORConfig(uint8_t OB_BOR) - (+) FLASH_Status FLASH_ProgramOTP(uint32_t Address, uint32_t Data) - (+) FLASH_Status FLASH_OB_Launch(void) - (+) uint32_t FLASH_OB_GetUser(void) - (+) uint8_t FLASH_OB_GetWRP(void) - (+) uint8_t FLASH_OB_GetWRP1(void) - (+) uint8_t FLASH_OB_GetRDP(void) - (+) uint8_t FLASH_OB_GetBOR(void) - [..] - Any operation of erase or program should follow these steps: - (#) Call the FLASH_OB_Unlock() function to enable the FLASH option control - register access - - (#) Call one or several functions to program the desired Option Bytes: - (++) void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) - => to Enable/Disable the desired sector write protection - (++) void FLASH_OB_RDPConfig(uint8_t OB_RDP) => to set the desired read - Protection Level - (++) void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) - => to configure the user Option Bytes. - (++) void FLASH_OB_BORConfig(uint8_t OB_BOR) => to set the BOR Level - - (#) Once all needed Option Bytes to be programmed are correctly written, - call the FLASH_OB_Launch() function to launch the Option Bytes - programming process. - - -@- When changing the IWDG mode from HW to SW or from SW to HW, a system - reset is needed to make the change effective. - - (#) Call the FLASH_OB_Lock() function to disable the FLASH option control - register access (recommended to protect the Option Bytes against - possible unwanted operations) - -@endverbatim - * @{ - */ - -/** - * @brief Unlocks the FLASH Option Control Registers access. - * @param None - * @retval None - */ -void FLASH_OB_Unlock(void) -{ - if((FLASH->OPTCR & FLASH_OPTCR_OPTLOCK) != RESET) - { - /* Authorizes the Option Byte register programming */ - FLASH->OPTKEYR = FLASH_OPT_KEY1; - FLASH->OPTKEYR = FLASH_OPT_KEY2; - } -} - -/** - * @brief Locks the FLASH Option Control Registers access. - * @param None - * @retval None - */ -void FLASH_OB_Lock(void) -{ - /* Set the OPTLOCK Bit to lock the FLASH Option Byte Registers access */ - FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK; -} - -/** - * @brief Enables or disables the write protection of the desired sectors - * - * @note When the memory read protection level is selected (RDP level = 1), - * it is not possible to program or erase the flash sector i if CortexM4 - * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 - * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). - * - * @param OB_WRP: specifies the sector(s) to be write protected or unprotected. - * This parameter can be one of the following values: - * @arg OB_WRP: A value between OB_WRP_Sector0 and OB_WRP_Sector11 - * @arg OB_WRP_Sector_All - * @param Newstate: new state of the Write Protection. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_OB_WRP(OB_WRP)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - if(NewState != DISABLE) - { - *(__IO uint16_t*)OPTCR_BYTE2_ADDRESS &= (~OB_WRP); - } - else - { - *(__IO uint16_t*)OPTCR_BYTE2_ADDRESS |= (uint16_t)OB_WRP; - } - } -} - -/** - * @brief Enables or disables the write protection of the desired sectors - * @note This function can be used only for STM32F427x/437x devices. - * @note When the memory read out protection is selected (RDP level = 1), - * it is not possible to program or erase the flash sector i if CortexM4 - * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 - * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). - * - * @param OB_WRP: specifies the sector(s) to be write protected or unprotected. - * This parameter can be one of the following values: - * @arg OB_WRP: A value between OB_WRP_Sector12 and OB_WRP_Sector23 - * @arg OB_WRP_Sector_All - * @param Newstate: new state of the Write Protection. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void FLASH_OB_WRP1Config(uint32_t OB_WRP, FunctionalState NewState) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_OB_WRP(OB_WRP)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - if(NewState != DISABLE) - { - *(__IO uint16_t*)OPTCR1_BYTE2_ADDRESS &= (~OB_WRP); - } - else - { - *(__IO uint16_t*)OPTCR1_BYTE2_ADDRESS |= (uint16_t)OB_WRP; - } - } -} - -/** - * @brief Sets the read protection level. - * @param OB_RDP: specifies the read protection level. - * This parameter can be one of the following values: - * @arg OB_RDP_Level_0: No protection - * @arg OB_RDP_Level_1: Read protection of the memory - * @arg OB_RDP_Level_2: Full chip protection - * - * !!!Warning!!! When enabling OB_RDP level 2 it's no more possible to go back to level 1 or 0 - * - * @retval None - */ -void FLASH_OB_RDPConfig(uint8_t OB_RDP) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Check the parameters */ - assert_param(IS_OB_RDP(OB_RDP)); - - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - *(__IO uint8_t*)OPTCR_BYTE1_ADDRESS = OB_RDP; - - } -} - -/** - * @brief Programs the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. - * @param OB_IWDG: Selects the IWDG mode - * This parameter can be one of the following values: - * @arg OB_IWDG_SW: Software IWDG selected - * @arg OB_IWDG_HW: Hardware IWDG selected - * @param OB_STOP: Reset event when entering STOP mode. - * This parameter can be one of the following values: - * @arg OB_STOP_NoRST: No reset generated when entering in STOP - * @arg OB_STOP_RST: Reset generated when entering in STOP - * @param OB_STDBY: Reset event when entering Standby mode. - * This parameter can be one of the following values: - * @arg OB_STDBY_NoRST: No reset generated when entering in STANDBY - * @arg OB_STDBY_RST: Reset generated when entering in STANDBY - * @retval None - */ -void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) -{ - uint8_t optiontmp = 0xFF; - 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)); - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - if(status == FLASH_COMPLETE) - { - /* Mask OPTLOCK, OPTSTRT and BOR_LEV bits */ - optiontmp = (uint8_t)((*(__IO uint8_t *)OPTCR_BYTE0_ADDRESS) & (uint8_t)0x0F); - - /* Update User Option Byte */ - *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS = OB_IWDG | (uint8_t)(OB_STDBY | (uint8_t)(OB_STOP | ((uint8_t)optiontmp))); - } -} - -/** - * @brief Sets the BOR Level. - * @param OB_BOR: specifies the Option Bytes BOR Reset Level. - * This parameter can be one of the following values: - * @arg OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V - * @arg OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V - * @arg OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V - * @arg OB_BOR_OFF: Supply voltage ranges from 1.62 to 2.1 V - * @retval None - */ -void FLASH_OB_BORConfig(uint8_t OB_BOR) -{ - /* Check the parameters */ - assert_param(IS_OB_BOR(OB_BOR)); - - /* Set the BOR Level */ - *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS &= (~FLASH_OPTCR_BOR_LEV); - *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= OB_BOR; - -} - -/** - * @brief Launch the option byte loading. - * @param None - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_OB_Launch(void) -{ - FLASH_Status status = FLASH_COMPLETE; - - /* Set the OPTSTRT bit in OPTCR register */ - *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= FLASH_OPTCR_OPTSTRT; - - /* Wait for last operation to be completed */ - status = FLASH_WaitForLastOperation(); - - return status; -} - -/** - * @brief Returns the FLASH User Option Bytes values. - * @param None - * @retval The FLASH User Option Bytes values: IWDG_SW(Bit0), RST_STOP(Bit1) - * and RST_STDBY(Bit2). - */ -uint8_t FLASH_OB_GetUser(void) -{ - /* Return the User Option Byte */ - return (uint8_t)(FLASH->OPTCR >> 5); -} - -/** - * @brief Returns the FLASH Write Protection Option Bytes value. - * @param None - * @retval The FLASH Write Protection Option Bytes value - */ -uint16_t FLASH_OB_GetWRP(void) -{ - /* Return the FLASH write protection Register value */ - return (*(__IO uint16_t *)(OPTCR_BYTE2_ADDRESS)); -} - -/** - * @brief Returns the FLASH Write Protection Option Bytes value. - * @note This function can be used only for STM32F427x/437x devices. - * @param None - * @retval The FLASH Write Protection Option Bytes value - */ -uint16_t FLASH_OB_GetWRP1(void) -{ - /* Return the FLASH write protection Register value */ - return (*(__IO uint16_t *)(OPTCR1_BYTE2_ADDRESS)); -} - -/** - * @brief Returns the FLASH Read Protection level. - * @param None - * @retval FLASH ReadOut Protection Status: - * - SET, when OB_RDP_Level_1 or OB_RDP_Level_2 is set - * - RESET, when OB_RDP_Level_0 is set - */ -FlagStatus FLASH_OB_GetRDP(void) -{ - FlagStatus readstatus = RESET; - - if ((*(__IO uint8_t*)(OPTCR_BYTE1_ADDRESS) != (uint8_t)OB_RDP_Level_0)) - { - readstatus = SET; - } - else - { - readstatus = RESET; - } - return readstatus; -} - -/** - * @brief Returns the FLASH BOR level. - * @param None - * @retval The FLASH BOR level: - * - OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V - * - OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V - * - OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V - * - OB_BOR_OFF : Supply voltage ranges from 1.62 to 2.1 V - */ -uint8_t FLASH_OB_GetBOR(void) -{ - /* Return the FLASH BOR level */ - return (uint8_t)(*(__IO uint8_t *)(OPTCR_BYTE0_ADDRESS) & (uint8_t)0x0C); -} - -/** - * @} - */ - -/** @defgroup FLASH_Group4 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified FLASH interrupts. - * @param FLASH_IT: specifies the FLASH interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg FLASH_IT_ERR: FLASH Error Interrupt - * @arg FLASH_IT_EOP: FLASH end of operation Interrupt - * @retval None - */ -void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FLASH_IT(FLASH_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if(NewState != DISABLE) - { - /* Enable the interrupt sources */ - FLASH->CR |= FLASH_IT; - } - else - { - /* Disable the interrupt sources */ - FLASH->CR &= ~(uint32_t)FLASH_IT; - } -} - -/** - * @brief Checks whether the specified FLASH flag is set or not. - * @param FLASH_FLAG: specifies the FLASH flag to check. - * This parameter can be one of the following values: - * @arg FLASH_FLAG_EOP: FLASH End of Operation flag - * @arg FLASH_FLAG_OPERR: FLASH operation Error flag - * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag - * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag - * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag - * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag - * @arg FLASH_FLAG_BSY: FLASH Busy flag - * @retval The new state of FLASH_FLAG (SET or RESET). - */ -FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_FLASH_GET_FLAG(FLASH_FLAG)); - - if((FLASH->SR & FLASH_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - /* Return the new state of FLASH_FLAG (SET or RESET) */ - return bitstatus; -} - -/** - * @brief Clears the FLASH's pending flags. - * @param FLASH_FLAG: specifies the FLASH flags to clear. - * This parameter can be any combination of the following values: - * @arg FLASH_FLAG_EOP: FLASH End of Operation flag - * @arg FLASH_FLAG_OPERR: FLASH operation Error flag - * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag - * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag - * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag - * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag - * @retval None - */ -void FLASH_ClearFlag(uint32_t FLASH_FLAG) -{ - /* Check the parameters */ - assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG)); - - /* Clear the flags */ - FLASH->SR = FLASH_FLAG; -} - -/** - * @brief Returns the FLASH Status. - * @param None - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION 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_WRPERR) != (uint32_t)0x00) - { - flashstatus = FLASH_ERROR_WRP; - } - else - { - if((FLASH->SR & (uint32_t)0xEF) != (uint32_t)0x00) - { - flashstatus = FLASH_ERROR_PROGRAM; - } - else - { - if((FLASH->SR & FLASH_FLAG_OPERR) != (uint32_t)0x00) - { - flashstatus = FLASH_ERROR_OPERATION; - } - else - { - flashstatus = FLASH_COMPLETE; - } - } - } - } - /* Return the FLASH Status */ - return flashstatus; -} - -/** - * @brief Waits for a FLASH operation to complete. - * @param None - * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, - * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. - */ -FLASH_Status FLASH_WaitForLastOperation(void) -{ - __IO FLASH_Status status = FLASH_COMPLETE; - - /* Check for the FLASH Status */ - status = FLASH_GetStatus(); - - /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset. - Even if the FLASH operation fails, the BUSY flag will be reset and an error - flag will be set */ - while(status == FLASH_BUSY) - { - status = FLASH_GetStatus(); - } - /* Return the operation status */ - return status; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c deleted file mode 100644 index c01fc629..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c +++ /dev/null @@ -1,989 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_fsmc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the FSMC peripheral: - * + Interface with SRAM, PSRAM, NOR and OneNAND memories - * + Interface with NAND memories - * + Interface with 16-bit PC Card compatible memories - * + Interrupts and flags management - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_fsmc.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup FSMC - * @brief FSMC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* --------------------- 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) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup FSMC_Private_Functions - * @{ - */ - -/** @defgroup FSMC_Group1 NOR/SRAM Controller functions - * @brief NOR/SRAM Controller functions - * -@verbatim - =============================================================================== - ##### NOR and SRAM Controller functions ##### - =============================================================================== - - [..] The following sequence should be followed to configure the FSMC to interface - with SRAM, PSRAM, NOR or OneNAND memory connected to the NOR/SRAM Bank: - - (#) Enable the clock for the FSMC and associated GPIOs using the following functions: - RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) FSMC pins configuration - (++) Connect the involved FSMC pins to AF12 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC); - (++) Configure these FSMC pins in alternate function mode by calling the function - GPIO_Init(); - - (#) Declare a FSMC_NORSRAMInitTypeDef structure, for example: - FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; - and fill the FSMC_NORSRAMInitStructure variable with the allowed values of - the structure member. - - (#) Initialize the NOR/SRAM Controller by calling the function - FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); - - (#) Then enable the NOR/SRAM Bank, for example: - FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE); - - (#) At this stage you can read/write from/to the memory connected to the NOR/SRAM Bank. - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes 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 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 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 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; - } -} -/** - * @} - */ - -/** @defgroup FSMC_Group2 NAND Controller functions - * @brief NAND Controller functions - * -@verbatim - =============================================================================== - ##### NAND Controller functions ##### - =============================================================================== - - [..] The following sequence should be followed to configure the FSMC to interface - with 8-bit or 16-bit NAND memory connected to the NAND Bank: - - (#) Enable the clock for the FSMC and associated GPIOs using the following functions: - (++) RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); - (++) RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) FSMC pins configuration - (++) Connect the involved FSMC pins to AF12 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC); - (++) Configure these FSMC pins in alternate function mode by calling the function - GPIO_Init(); - - (#) Declare a FSMC_NANDInitTypeDef structure, for example: - FSMC_NANDInitTypeDef FSMC_NANDInitStructure; - and fill the FSMC_NANDInitStructure variable with the allowed values of - the structure member. - - (#) Initialize the NAND Controller by calling the function - FSMC_NANDInit(&FSMC_NANDInitStructure); - - (#) Then enable the NAND Bank, for example: - FSMC_NANDCmd(FSMC_Bank3_NAND, ENABLE); - - (#) At this stage you can read/write from/to the memory connected to the NAND Bank. - - [..] - (@) To enable the Error Correction Code (ECC), you have to use the function - FSMC_NANDECCCmd(FSMC_Bank3_NAND, ENABLE); - [..] - (@) and to get the current ECC value you have to use the function - ECCval = FSMC_GetECC(FSMC_Bank3_NAND); - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes 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 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 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 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 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); -} -/** - * @} - */ - -/** @defgroup FSMC_Group3 PCCARD Controller functions - * @brief PCCARD Controller functions - * -@verbatim - =============================================================================== - ##### PCCARD Controller functions ##### - =============================================================================== - - [..] he following sequence should be followed to configure the FSMC to interface - with 16-bit PC Card compatible memory connected to the PCCARD Bank: - - (#) Enable the clock for the FSMC and associated GPIOs using the following functions: - (++) RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); - (++) RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) FSMC pins configuration - (++) Connect the involved FSMC pins to AF12 using the following function - GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC); - (++) Configure these FSMC pins in alternate function mode by calling the function - GPIO_Init(); - - (#) Declare a FSMC_PCCARDInitTypeDef structure, for example: - FSMC_PCCARDInitTypeDef FSMC_PCCARDInitStructure; - and fill the FSMC_PCCARDInitStructure variable with the allowed values of - the structure member. - - (#) Initialize the PCCARD Controller by calling the function - FSMC_PCCARDInit(&FSMC_PCCARDInitStructure); - - (#) Then enable the PCCARD Bank: - FSMC_PCCARDCmd(ENABLE); - - (#) At this stage you can read/write from/to the memory connected to the PCCARD Bank. - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes 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 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_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 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; - } -} -/** - * @} - */ - -/** @defgroup FSMC_Group4 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 edge detection Flag. - * @arg FSMC_FLAG_Level: Level detection Flag. - * @arg FSMC_FLAG_FallingEdge: Falling edge 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 edge detection Flag. - * @arg FSMC_FLAG_Level: Level detection Flag. - * @arg FSMC_FLAG_FallingEdge: Falling edge 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c deleted file mode 100644 index 0586369c..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c +++ /dev/null @@ -1,584 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_gpio.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the GPIO peripheral: - * + Initialization and Configuration - * + GPIO Read and Write - * + GPIO Alternate functions configuration - * -@verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable the GPIO AHB clock using the following function - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); - - (#) Configure the GPIO pin(s) using GPIO_Init() - Four possible configuration are available for each pin: - (++) Input: Floating, Pull-up, Pull-down. - (++) Output: Push-Pull (Pull-up, Pull-down or no Pull) - Open Drain (Pull-up, Pull-down or no Pull). In output mode, the speed - is configurable: 2 MHz, 25 MHz, 50 MHz or 100 MHz. - (++) Alternate Function: Push-Pull (Pull-up, Pull-down or no Pull) Open - Drain (Pull-up, Pull-down or no Pull). - (++) Analog: required mode when a pin is to be used as ADC channel or DAC - output. - - (#) Peripherals alternate function: - (++) For ADC and DAC, configure the desired pin in analog mode using - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN; - (+++) For other peripherals (TIM, USART...): - (+++) Connect the pin to the desired peripherals' Alternate - Function (AF) using GPIO_PinAFConfig() function - (+++) Configure the desired pin in alternate function mode using - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF - (+++) Select the type, pull-up/pull-down and output speed via - GPIO_PuPd, GPIO_OType and GPIO_Speed members - (+++) Call GPIO_Init() function - - (#) To get the level of a pin configured in input mode use GPIO_ReadInputDataBit() - - (#) To set/reset the level of a pin configured in output mode use - GPIO_SetBits()/GPIO_ResetBits() - - (#) During and just after reset, the alternate functions are not - active and the GPIO pins are configured in input floating mode (except JTAG - pins). - - (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose - (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has - priority over the GPIO function. - - (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as - general purpose PH0 and PH1, respectively, when the HSE oscillator is off. - The HSE has priority over the GPIO function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_gpio.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup GPIO - * @brief GPIO driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup GPIO_Private_Functions - * @{ - */ - -/** @defgroup GPIO_Group1 Initialization and Configuration - * @brief Initialization and Configuration - * -@verbatim - =============================================================================== - ##### Initialization and Configuration ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes the GPIOx peripheral registers to their default reset values. - * @note By default, The GPIO pins are configured in input floating mode (except JTAG pins). - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @retval None - */ -void GPIO_DeInit(GPIO_TypeDef* GPIOx) -{ - /* Check the parameters */ - assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); - - if (GPIOx == GPIOA) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, DISABLE); - } - else if (GPIOx == GPIOB) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, DISABLE); - } - else if (GPIOx == GPIOC) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, DISABLE); - } - else if (GPIOx == GPIOD) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, DISABLE); - } - else if (GPIOx == GPIOE) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, DISABLE); - } - else if (GPIOx == GPIOF) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, DISABLE); - } - else if (GPIOx == GPIOG) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, DISABLE); - } - else if (GPIOx == GPIOH) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, DISABLE); - } - else - { - if (GPIOx == GPIOI) - { - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, ENABLE); - RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, DISABLE); - } - } -} - -/** - * @brief Initializes the GPIOx peripheral according to the specified parameters in the GPIO_InitStruct. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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 pinpos = 0x00, pos = 0x00 , currentpin = 0x00; - - /* Check the parameters */ - assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); - assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin)); - assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode)); - assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd)); - - /* ------------------------- Configure the port pins ---------------- */ - /*-- GPIO Mode Configuration --*/ - for (pinpos = 0x00; pinpos < 0x10; pinpos++) - { - pos = ((uint32_t)0x01) << pinpos; - /* Get the port pins position */ - currentpin = (GPIO_InitStruct->GPIO_Pin) & pos; - - if (currentpin == pos) - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2)); - GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2)); - - if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF)) - { - /* Check Speed mode parameters */ - assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed)); - - /* Speed mode configuration */ - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2)); - - /* Check Output mode parameters */ - assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType)); - - /* Output mode configuration*/ - GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)) ; - GPIOx->OTYPER |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos)); - } - - /* Pull-up Pull down resistor configuration*/ - GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2)); - GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2)); - } - } -} - -/** - * @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_Mode = GPIO_Mode_IN; - GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStruct->GPIO_OType = GPIO_OType_PP; - GPIO_InitStruct->GPIO_PuPd = GPIO_PuPd_NOPULL; -} - -/** - * @brief Locks GPIO Pins configuration registers. - * @note The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, - * GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH. - * @note The configuration of the locked GPIO pins can no longer be modified - * until the next reset. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: specifies the port bit to be locked. - * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). - * @retval None - */ -void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) -{ - __IO 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; -} - -/** - * @} - */ - -/** @defgroup GPIO_Group2 GPIO Read and Write - * @brief GPIO Read and Write - * -@verbatim - =============================================================================== - ##### GPIO Read and Write ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Reads the specified input port pin. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: specifies the port bit to read. - * This parameter can be GPIO_Pin_x where x can be (0..15). - * @retval The input port pin value. - */ -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..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: specifies the port bit to read. - * This parameter can be GPIO_Pin_x where x can be (0..15). - * @retval The 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..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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. - * @note This functions uses GPIOx_BSRR register to allow atomic read/modify - * accesses. In this way, there is no risk of an IRQ occurring between - * the read and the modify access. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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->BSRRL = GPIO_Pin; -} - -/** - * @brief Clears the selected data port bits. - * @note This functions uses GPIOx_BSRR register to allow atomic read/modify - * accesses. In this way, there is no risk of an IRQ occurring between - * the read and the modify access. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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->BSRRH = GPIO_Pin; -} - -/** - * @brief Sets or clears the selected data port bit. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: specifies the port bit to be written. - * This parameter can be one of GPIO_Pin_x where x can be (0..15). - * @param 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->BSRRL = GPIO_Pin; - } - else - { - GPIOx->BSRRH = GPIO_Pin ; - } -} - -/** - * @brief Writes data to the specified GPIO data port. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @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 Toggles the specified GPIO pins.. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_Pin: Specifies the pins to be toggled. - * @retval None - */ -void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) -{ - /* Check the parameters */ - assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); - - GPIOx->ODR ^= GPIO_Pin; -} - -/** - * @} - */ - -/** @defgroup GPIO_Group3 GPIO Alternate functions configuration function - * @brief GPIO Alternate functions configuration function - * -@verbatim - =============================================================================== - ##### GPIO Alternate functions configuration function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Changes the mapping of the specified pin. - * @param GPIOx: where x can be (A..I) to select the GPIO peripheral for - * STM32F40xx/41xx and STM32F427x/437x devices. - * @param GPIO_PinSource: specifies the pin for the Alternate function. - * This parameter can be GPIO_PinSourcex where x can be (0..15). - * @param GPIO_AFSelection: selects the pin to used as Alternate function. - * This parameter can be one of the following values: - * @arg GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin to AF0 (default after reset) - * @arg GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2) to AF0 (default after reset) - * @arg GPIO_AF_TAMPER: Connect TAMPER pins (TAMPER_1 and TAMPER_2) to AF0 (default after reset) - * @arg GPIO_AF_SWJ: Connect SWJ pins (SWD and JTAG)to AF0 (default after reset) - * @arg GPIO_AF_TRACE: Connect TRACE pins to AF0 (default after reset) - * @arg GPIO_AF_TIM1: Connect TIM1 pins to AF1 - * @arg GPIO_AF_TIM2: Connect TIM2 pins to AF1 - * @arg GPIO_AF_TIM3: Connect TIM3 pins to AF2 - * @arg GPIO_AF_TIM4: Connect TIM4 pins to AF2 - * @arg GPIO_AF_TIM5: Connect TIM5 pins to AF2 - * @arg GPIO_AF_TIM8: Connect TIM8 pins to AF3 - * @arg GPIO_AF_TIM9: Connect TIM9 pins to AF3 - * @arg GPIO_AF_TIM10: Connect TIM10 pins to AF3 - * @arg GPIO_AF_TIM11: Connect TIM11 pins to AF3 - * @arg GPIO_AF_I2C1: Connect I2C1 pins to AF4 - * @arg GPIO_AF_I2C2: Connect I2C2 pins to AF4 - * @arg GPIO_AF_I2C3: Connect I2C3 pins to AF4 - * @arg GPIO_AF_SPI1: Connect SPI1 pins to AF5 - * @arg GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5 - * @arg GPIO_AF_SPI4: Connect SPI4 pins to AF5 - * @arg GPIO_AF_SPI5: Connect SPI5 pins to AF5 - * @arg GPIO_AF_SPI6: Connect SPI6 pins to AF5 - * @arg GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6 - * @arg GPIO_AF_I2S3ext: Connect I2S3ext pins to AF7 - * @arg GPIO_AF_USART1: Connect USART1 pins to AF7 - * @arg GPIO_AF_USART2: Connect USART2 pins to AF7 - * @arg GPIO_AF_USART3: Connect USART3 pins to AF7 - * @arg GPIO_AF_UART4: Connect UART4 pins to AF8 - * @arg GPIO_AF_UART5: Connect UART5 pins to AF8 - * @arg GPIO_AF_USART6: Connect USART6 pins to AF8 - * @arg GPIO_AF_UART7: Connect UART7 pins to AF8 - * @arg GPIO_AF_UART8: Connect UART8 pins to AF8 - * @arg GPIO_AF_CAN1: Connect CAN1 pins to AF9 - * @arg GPIO_AF_CAN2: Connect CAN2 pins to AF9 - * @arg GPIO_AF_TIM12: Connect TIM12 pins to AF9 - * @arg GPIO_AF_TIM13: Connect TIM13 pins to AF9 - * @arg GPIO_AF_TIM14: Connect TIM14 pins to AF9 - * @arg GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10 - * @arg GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10 - * @arg GPIO_AF_ETH: Connect ETHERNET pins to AF11 - * @arg GPIO_AF_FSMC: Connect FSMC pins to AF12 - * @arg GPIO_AF_OTG_HS_FS: Connect OTG HS (configured in FS) pins to AF12 - * @arg GPIO_AF_SDIO: Connect SDIO pins to AF12 - * @arg GPIO_AF_DCMI: Connect DCMI pins to AF13 - * @arg GPIO_AF_EVENTOUT: Connect EVENTOUT pins to AF15 - * @retval None - */ -void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) -{ - uint32_t temp = 0x00; - uint32_t temp_2 = 0x00; - - /* Check the parameters */ - assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); - assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource)); - assert_param(IS_GPIO_AF(GPIO_AF)); - - temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ; - GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ; - temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp; - GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c deleted file mode 100644 index 2bd2ae7b..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c +++ /dev/null @@ -1,726 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hash.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the HASH / HMAC Processor (HASH) peripheral: - * - Initialization and Configuration functions - * - Message Digest generation functions - * - context swapping functions - * - DMA interface function - * - Interrupts and flags management - * -@verbatim - =================================================================== - ##### How to use this driver ##### - =================================================================== - - *** HASH operation : *** - ======================== - [..] - (#) Enable the HASH controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE) function. - - (#) Initialise the HASH using HASH_Init() function. - - (#) Reset the HASH processor core, so that the HASH will be ready - to compute he message digest of a new message by using HASH_Reset() function. - - (#) Enable the HASH controller using the HASH_Cmd() function. - - (#) if using DMA for Data input transfer, Activate the DMA Request - using HASH_DMACmd() function - - (#) if DMA is not used for data transfer, use HASH_DataIn() function - to enter data to IN FIFO. - - - (#) Configure the Number of valid bits in last word of the message - using HASH_SetLastWordValidBitsNbr() function. - - (#) if the message length is not an exact multiple of 512 bits, - then the function HASH_StartDigest() must be called to launch the computation - of the final digest. - - (#) Once computed, the digest can be read using HASH_GetDigest() function. - - (#) To control HASH events you can use one of the following wo methods: - (++) Check on HASH flags using the HASH_GetFlagStatus() function. - (++) Use HASH interrupts through the function HASH_ITConfig() at - initialization phase and HASH_GetITStatus() function into - interrupt routines in hashing phase. - After checking on a flag you should clear it using HASH_ClearFlag() - function. And after checking on an interrupt event you should - clear it using HASH_ClearITPendingBit() function. - - (#) Save and restore hash processor context using - HASH_SaveContext() and HASH_RestoreContext() functions. - - - - *** HMAC operation : *** - ======================== - [..] The HMAC algorithm is used for message authentication, by - irreversibly binding the message being processed to a key chosen - by the user. - For HMAC specifications, refer to "HMAC: keyed-hashing for message - authentication, H. Krawczyk, M. Bellare, R. Canetti, February 1997" - - [..] Basically, the HMAC algorithm consists of two nested hash operations: - HMAC(message) = Hash[((key | pad) XOR 0x5C) | Hash(((key | pad) XOR 0x36) | message)] - where: - (+) "pad" is a sequence of zeroes needed to extend the key to the - length of the underlying hash function data block (that is - 512 bits for both the SHA-1 and MD5 hash algorithms) - (+) "|" represents the concatenation operator - - - [..]To compute the HMAC, four different phases are required: - (#) Initialise the HASH using HASH_Init() function to do HMAC - operation. - - (#) The key (to be used for the inner hash function) is then given to the core. - This operation follows the same mechanism as the one used to send the - message in the hash operation (that is, by HASH_DataIn() function and, - finally, HASH_StartDigest() function. - - (#) Once the last word has been entered and computation has started, - the hash processor elaborates the key. It is then ready to accept the message - text using the same mechanism as the one used to send the message in the - hash operation. - - (#) After the first hash round, the hash processor returns "ready" to indicate - that it is ready to receive the key to be used for the outer hash function - (normally, this key is the same as the one used for the inner hash function). - When the last word of the key is entered and computation starts, the HMAC - result is made available using HASH_GetDigest() function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hash.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup HASH - * @brief HASH driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup HASH_Private_Functions - * @{ - */ - -/** @defgroup HASH_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initialize the HASH peripheral - (+) Configure the HASH Processor - (+) MD5/SHA1, - (+) HASH/HMAC, - (+) datatype - (+) HMAC Key (if mode = HMAC) - (+) Reset the HASH Processor - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes the HASH peripheral registers to their default reset values - * @param None - * @retval None - */ -void HASH_DeInit(void) -{ - /* Enable HASH reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_HASH, ENABLE); - /* Release HASH from reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_HASH, DISABLE); -} - -/** - * @brief Initializes the HASH peripheral according to the specified parameters - * in the HASH_InitStruct structure. - * @note the hash processor is reset when calling this function so that the - * HASH will be ready to compute the message digest of a new message. - * There is no need to call HASH_Reset() function. - * @param HASH_InitStruct: pointer to a HASH_InitTypeDef structure that contains - * the configuration information for the HASH peripheral. - * @note The field HASH_HMACKeyType in HASH_InitTypeDef must be filled only - * if the algorithm mode is HMAC. - * @retval None - */ -void HASH_Init(HASH_InitTypeDef* HASH_InitStruct) -{ - /* Check the parameters */ - assert_param(IS_HASH_ALGOSELECTION(HASH_InitStruct->HASH_AlgoSelection)); - assert_param(IS_HASH_DATATYPE(HASH_InitStruct->HASH_DataType)); - assert_param(IS_HASH_ALGOMODE(HASH_InitStruct->HASH_AlgoMode)); - - /* Configure the Algorithm used, algorithm mode and the datatype */ - HASH->CR &= ~ (HASH_CR_ALGO | HASH_CR_DATATYPE | HASH_CR_MODE); - HASH->CR |= (HASH_InitStruct->HASH_AlgoSelection | \ - HASH_InitStruct->HASH_DataType | \ - HASH_InitStruct->HASH_AlgoMode); - - /* if algorithm mode is HMAC, set the Key */ - if(HASH_InitStruct->HASH_AlgoMode == HASH_AlgoMode_HMAC) - { - assert_param(IS_HASH_HMAC_KEYTYPE(HASH_InitStruct->HASH_HMACKeyType)); - HASH->CR &= ~HASH_CR_LKEY; - HASH->CR |= HASH_InitStruct->HASH_HMACKeyType; - } - - /* Reset the HASH processor core, so that the HASH will be ready to compute - the message digest of a new message */ - HASH->CR |= HASH_CR_INIT; -} - -/** - * @brief Fills each HASH_InitStruct member with its default value. - * @param HASH_InitStruct : pointer to a HASH_InitTypeDef structure which will - * be initialized. - * @note The default values set are : Processor mode is HASH, Algorithm selected is SHA1, - * Data type selected is 32b and HMAC Key Type is short key. - * @retval None - */ -void HASH_StructInit(HASH_InitTypeDef* HASH_InitStruct) -{ - /* Initialize the HASH_AlgoSelection member */ - HASH_InitStruct->HASH_AlgoSelection = HASH_AlgoSelection_SHA1; - - /* Initialize the HASH_AlgoMode member */ - HASH_InitStruct->HASH_AlgoMode = HASH_AlgoMode_HASH; - - /* Initialize the HASH_DataType member */ - HASH_InitStruct->HASH_DataType = HASH_DataType_32b; - - /* Initialize the HASH_HMACKeyType member */ - HASH_InitStruct->HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; -} - -/** - * @brief Resets the HASH processor core, so that the HASH will be ready - * to compute the message digest of a new message. - * @note Calling this function will clear the HASH_SR_DCIS (Digest calculation - * completion interrupt status) bit corresponding to HASH_IT_DCI - * interrupt and HASH_FLAG_DCIS flag. - * @param None - * @retval None - */ -void HASH_Reset(void) -{ - /* Reset the HASH processor core */ - HASH->CR |= HASH_CR_INIT; -} -/** - * @} - */ - -/** @defgroup HASH_Group2 Message Digest generation functions - * @brief Message Digest generation functions - * -@verbatim - =============================================================================== - ##### Message Digest generation functions ##### - =============================================================================== - [..] This section provides functions allowing the generation of message digest: - (+) Push data in the IN FIFO : using HASH_DataIn() - (+) Get the number of words set in IN FIFO, use HASH_GetInFIFOWordsNbr() - (+) set the last word valid bits number using HASH_SetLastWordValidBitsNbr() - (+) start digest calculation : using HASH_StartDigest() - (+) Get the Digest message : using HASH_GetDigest() - -@endverbatim - * @{ - */ - - -/** - * @brief Configure the Number of valid bits in last word of the message - * @param ValidNumber: Number of valid bits in last word of the message. - * This parameter must be a number between 0 and 0x1F. - * - 0x00: All 32 bits of the last data written are valid - * - 0x01: Only bit [0] of the last data written is valid - * - 0x02: Only bits[1:0] of the last data written are valid - * - 0x03: Only bits[2:0] of the last data written are valid - * - ... - * - 0x1F: Only bits[30:0] of the last data written are valid - * @note The Number of valid bits must be set before to start the message - * digest competition (in Hash and HMAC) and key treatment(in HMAC). - * @retval None - */ -void HASH_SetLastWordValidBitsNbr(uint16_t ValidNumber) -{ - /* Check the parameters */ - assert_param(IS_HASH_VALIDBITSNUMBER(ValidNumber)); - - /* Configure the Number of valid bits in last word of the message */ - HASH->STR &= ~(HASH_STR_NBW); - HASH->STR |= ValidNumber; -} - -/** - * @brief Writes data in the Data Input FIFO - * @param Data: new data of the message to be processed. - * @retval None - */ -void HASH_DataIn(uint32_t Data) -{ - /* Write in the DIN register a new data */ - HASH->DIN = Data; -} - -/** - * @brief Returns the number of words already pushed into the IN FIFO. - * @param None - * @retval The value of words already pushed into the IN FIFO. - */ -uint8_t HASH_GetInFIFOWordsNbr(void) -{ - /* Return the value of NBW bits */ - return ((HASH->CR & HASH_CR_NBW) >> 8); -} - -/** - * @brief Provides the message digest result. - * @note In MD5 mode, Data[7] to Data[4] filed of HASH_MsgDigest structure is not used - * and is read as zero. - * In SHA-1 mode, Data[7] to Data[5] filed of HASH_MsgDigest structure is not used - * and is read as zero. - * In SHA-224 mode, Data[7] filed of HASH_MsgDigest structure is not used - * and is read as zero. - * @param HASH_MessageDigest: pointer to a HASH_MsgDigest structure which will - * hold the message digest result - * @retval None - */ -void HASH_GetDigest(HASH_MsgDigest* HASH_MessageDigest) -{ - /* Get the data field */ - HASH_MessageDigest->Data[0] = HASH->HR[0]; - HASH_MessageDigest->Data[1] = HASH->HR[1]; - HASH_MessageDigest->Data[2] = HASH->HR[2]; - HASH_MessageDigest->Data[3] = HASH->HR[3]; - HASH_MessageDigest->Data[4] = HASH->HR[4]; - HASH_MessageDigest->Data[5] = HASH_DIGEST->HR[5]; - HASH_MessageDigest->Data[6] = HASH_DIGEST->HR[6]; - HASH_MessageDigest->Data[7] = HASH_DIGEST->HR[7]; -} - -/** - * @brief Starts the message padding and calculation of the final message - * @param None - * @retval None - */ -void HASH_StartDigest(void) -{ - /* Start the Digest calculation */ - HASH->STR |= HASH_STR_DCAL; -} -/** - * @} - */ - -/** @defgroup HASH_Group3 Context swapping functions - * @brief Context swapping functions - * -@verbatim - =============================================================================== - ##### Context swapping functions ##### - =============================================================================== - - [..] This section provides functions allowing to save and store HASH Context - - [..] It is possible to interrupt a HASH/HMAC process to perform another processing - with a higher priority, and to complete the interrupted process later on, when - the higher priority task is complete. To do so, the context of the interrupted - task must be saved from the HASH registers to memory, and then be restored - from memory to the HASH registers. - - (#) To save the current context, use HASH_SaveContext() function - (#) To restore the saved context, use HASH_RestoreContext() function - - -@endverbatim - * @{ - */ - -/** - * @brief Save the Hash peripheral Context. - * @note The context can be saved only when no block is currently being - * processed. So user must wait for DINIS = 1 (the last block has been - * processed and the input FIFO is empty) or NBW != 0 (the FIFO is not - * full and no processing is ongoing). - * @param HASH_ContextSave: pointer to a HASH_Context structure that contains - * the repository for current context. - * @retval None - */ -void HASH_SaveContext(HASH_Context* HASH_ContextSave) -{ - uint8_t i = 0; - - /* save context registers */ - HASH_ContextSave->HASH_IMR = HASH->IMR; - HASH_ContextSave->HASH_STR = HASH->STR; - HASH_ContextSave->HASH_CR = HASH->CR; - for(i=0; i<=53;i++) - { - HASH_ContextSave->HASH_CSR[i] = HASH->CSR[i]; - } -} - -/** - * @brief Restore the Hash peripheral Context. - * @note After calling this function, user can restart the processing from the - * point where it has been interrupted. - * @param HASH_ContextRestore: pointer to a HASH_Context structure that contains - * the repository for saved context. - * @retval None - */ -void HASH_RestoreContext(HASH_Context* HASH_ContextRestore) -{ - uint8_t i = 0; - - /* restore context registers */ - HASH->IMR = HASH_ContextRestore->HASH_IMR; - HASH->STR = HASH_ContextRestore->HASH_STR; - HASH->CR = HASH_ContextRestore->HASH_CR; - - /* Initialize the hash processor */ - HASH->CR |= HASH_CR_INIT; - - /* continue restoring context registers */ - for(i=0; i<=53;i++) - { - HASH->CSR[i] = HASH_ContextRestore->HASH_CSR[i]; - } -} -/** - * @} - */ - -/** @defgroup HASH_Group4 HASH's DMA interface Configuration function - * @brief HASH's DMA interface Configuration function - * -@verbatim - =============================================================================== - ##### HASH's DMA interface Configuration function ##### - =============================================================================== - - [..] This section provides functions allowing to configure the DMA interface for - HASH/ HMAC data input transfer. - - [..] When the DMA mode is enabled (using the HASH_DMACmd() function), data can be - sent to the IN FIFO using the DMA peripheral. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables auto-start message padding and - * calculation of the final message digest at the end of DMA transfer. - * @param NewState: new state of the selected HASH DMA transfer request. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void HASH_AutoStartDigest(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the auto start of the final message digest at the end of DMA transfer */ - HASH->CR &= ~HASH_CR_MDMAT; - } - else - { - /* Disable the auto start of the final message digest at the end of DMA transfer */ - HASH->CR |= HASH_CR_MDMAT; - } -} - -/** - * @brief Enables or disables the HASH DMA interface. - * @note The DMA is disabled by hardware after the end of transfer. - * @param NewState: new state of the selected HASH DMA transfer request. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void HASH_DMACmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the HASH DMA request */ - HASH->CR |= HASH_CR_DMAE; - } - else - { - /* Disable the HASH DMA request */ - HASH->CR &= ~HASH_CR_DMAE; - } -} -/** - * @} - */ - -/** @defgroup HASH_Group5 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the HASH Interrupts and - to get the status and clear flags and Interrupts pending bits. - - [..] The HASH provides 2 Interrupts sources and 5 Flags: - - *** Flags : *** - =============== - [..] - (#) HASH_FLAG_DINIS : set when 16 locations are free in the Data IN FIFO - which means that a new block (512 bit) can be entered into the input buffer. - - (#) HASH_FLAG_DCIS : set when Digest calculation is complete - - (#) HASH_FLAG_DMAS : set when HASH's DMA interface is enabled (DMAE=1) or - a transfer is ongoing. This Flag is cleared only by hardware. - - (#) HASH_FLAG_BUSY : set when The hash core is processing a block of data - This Flag is cleared only by hardware. - - (#) HASH_FLAG_DINNE : set when Data IN FIFO is not empty which means that - the Data IN FIFO contains at least one word of data. This Flag is cleared - only by hardware. - - *** Interrupts : *** - ==================== - [..] - (#) HASH_IT_DINI : if enabled, this interrupt source is pending when 16 - locations are free in the Data IN FIFO which means that a new block (512 bit) - can be entered into the input buffer. This interrupt source is cleared using - HASH_ClearITPendingBit(HASH_IT_DINI) function. - - (#) HASH_IT_DCI : if enabled, this interrupt source is pending when Digest - calculation is complete. This interrupt source is cleared using - HASH_ClearITPendingBit(HASH_IT_DCI) function. - - *** Managing the HASH controller events : *** - ============================================= - [..] The user should identify which mode will be used in his application to manage - the HASH controller events: Polling mode or Interrupt mode. - - (#) In the Polling Mode it is advised to use the following functions: - (++) HASH_GetFlagStatus() : to check if flags events occur. - (++) HASH_ClearFlag() : to clear the flags events. - - (#) In the Interrupt Mode it is advised to use the following functions: - (++) HASH_ITConfig() : to enable or disable the interrupt source. - (++) HASH_GetITStatus() : to check if Interrupt occurs. - (++) HASH_ClearITPendingBit() : to clear the Interrupt pending Bit - (corresponding Flag). - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified HASH interrupts. - * @param HASH_IT: specifies the HASH interrupt source to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg HASH_IT_DINI: Data Input interrupt - * @arg HASH_IT_DCI: Digest Calculation Completion Interrupt - * @param NewState: new state of the specified HASH interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void HASH_ITConfig(uint32_t HASH_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_HASH_IT(HASH_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected HASH interrupt */ - HASH->IMR |= HASH_IT; - } - else - { - /* Disable the selected HASH interrupt */ - HASH->IMR &= (uint32_t)(~HASH_IT); - } -} - -/** - * @brief Checks whether the specified HASH flag is set or not. - * @param HASH_FLAG: specifies the HASH flag to check. - * This parameter can be one of the following values: - * @arg HASH_FLAG_DINIS: Data input interrupt status flag - * @arg HASH_FLAG_DCIS: Digest calculation completion interrupt status flag - * @arg HASH_FLAG_BUSY: Busy flag - * @arg HASH_FLAG_DMAS: DMAS Status flag - * @arg HASH_FLAG_DINNE: Data Input register (DIN) not empty status flag - * @retval The new state of HASH_FLAG (SET or RESET) - */ -FlagStatus HASH_GetFlagStatus(uint32_t HASH_FLAG) -{ - FlagStatus bitstatus = RESET; - uint32_t tempreg = 0; - - /* Check the parameters */ - assert_param(IS_HASH_GET_FLAG(HASH_FLAG)); - - /* check if the FLAG is in CR register */ - if ((HASH_FLAG & HASH_FLAG_DINNE) != (uint32_t)RESET ) - { - tempreg = HASH->CR; - } - else /* The FLAG is in SR register */ - { - tempreg = HASH->SR; - } - - /* Check the status of the specified HASH flag */ - if ((tempreg & HASH_FLAG) != (uint32_t)RESET) - { - /* HASH is set */ - bitstatus = SET; - } - else - { - /* HASH_FLAG is reset */ - bitstatus = RESET; - } - - /* Return the HASH_FLAG status */ - return bitstatus; -} -/** - * @brief Clears the HASH flags. - * @param HASH_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg HASH_FLAG_DINIS: Data Input Flag - * @arg HASH_FLAG_DCIS: Digest Calculation Completion Flag - * @retval None - */ -void HASH_ClearFlag(uint32_t HASH_FLAG) -{ - /* Check the parameters */ - assert_param(IS_HASH_CLEAR_FLAG(HASH_FLAG)); - - /* Clear the selected HASH flags */ - HASH->SR = ~(uint32_t)HASH_FLAG; -} -/** - * @brief Checks whether the specified HASH interrupt has occurred or not. - * @param HASH_IT: specifies the HASH interrupt source to check. - * This parameter can be one of the following values: - * @arg HASH_IT_DINI: Data Input interrupt - * @arg HASH_IT_DCI: Digest Calculation Completion Interrupt - * @retval The new state of HASH_IT (SET or RESET). - */ -ITStatus HASH_GetITStatus(uint32_t HASH_IT) -{ - ITStatus bitstatus = RESET; - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_HASH_GET_IT(HASH_IT)); - - - /* Check the status of the specified HASH interrupt */ - tmpreg = HASH->SR; - - if (((HASH->IMR & tmpreg) & HASH_IT) != RESET) - { - /* HASH_IT is set */ - bitstatus = SET; - } - else - { - /* HASH_IT is reset */ - bitstatus = RESET; - } - /* Return the HASH_IT status */ - return bitstatus; -} - -/** - * @brief Clears the HASH interrupt pending bit(s). - * @param HASH_IT: specifies the HASH interrupt pending bit(s) to clear. - * This parameter can be any combination of the following values: - * @arg HASH_IT_DINI: Data Input interrupt - * @arg HASH_IT_DCI: Digest Calculation Completion Interrupt - * @retval None - */ -void HASH_ClearITPendingBit(uint32_t HASH_IT) -{ - /* Check the parameters */ - assert_param(IS_HASH_IT(HASH_IT)); - - /* Clear the selected HASH interrupt pending bit */ - HASH->SR = (uint32_t)(~HASH_IT); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c deleted file mode 100644 index f7549dec..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c +++ /dev/null @@ -1,320 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hash_md5.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides high level functions to compute the HASH MD5 and - * HMAC MD5 Digest of an input message. - * It uses the stm32f4xx_hash.c/.h drivers to access the STM32F4xx HASH - * peripheral. - * -@verbatim - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable The HASH controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE); function. - - (#) Calculate the HASH MD5 Digest using HASH_MD5() function. - - (#) Calculate the HMAC MD5 Digest using HMAC_MD5() function. - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hash.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup HASH - * @brief HASH driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define MD5BUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup HASH_Private_Functions - * @{ - */ - -/** @defgroup HASH_Group7 High Level MD5 functions - * @brief High Level MD5 Hash and HMAC functions - * -@verbatim - =============================================================================== - ##### High Level MD5 Hash and HMAC functions ##### - =============================================================================== - - -@endverbatim - * @{ - */ - -/** - * @brief Compute the HASH MD5 digest. - * @param Input: pointer to the Input buffer to be treated. - * @param Ilen: length of the Input buffer. - * @param Output: the returned digest - * @retval An ErrorStatus enumeration value: - * - SUCCESS: digest computation done - * - ERROR: digest computation failed - */ -ErrorStatus HASH_MD5(uint8_t *Input, uint32_t Ilen, uint8_t Output[16]) -{ - HASH_InitTypeDef MD5_HASH_InitStructure; - HASH_MsgDigest MD5_MessageDigest; - __IO uint16_t nbvalidbitsdata = 0; - uint32_t i = 0; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - - - /* Number of valid bits in last word of the Input data */ - nbvalidbitsdata = 8 * (Ilen % 4); - - /* HASH peripheral initialization */ - HASH_DeInit(); - - /* HASH Configuration */ - MD5_HASH_InitStructure.HASH_AlgoSelection = HASH_AlgoSelection_MD5; - MD5_HASH_InitStructure.HASH_AlgoMode = HASH_AlgoMode_HASH; - MD5_HASH_InitStructure.HASH_DataType = HASH_DataType_8b; - HASH_Init(&MD5_HASH_InitStructure); - - /* Configure the number of valid bits in last word of the data */ - HASH_SetLastWordValidBitsNbr(nbvalidbitsdata); - - /* Write the Input block in the IN FIFO */ - for(i=0; i 64) - { - /* HMAC long Key */ - MD5_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_LongKey; - } - else - { - /* HMAC short Key */ - MD5_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; - } - HASH_Init(&MD5_HASH_InitStructure); - - /* Configure the number of valid bits in last word of the Key */ - HASH_SetLastWordValidBitsNbr(nbvalidbitskey); - - /* Write the Key */ - for(i=0; i
© COPYRIGHT 2013 STMicroelectronics
- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hash.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup HASH - * @brief HASH driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define SHA1BUSY_TIMEOUT ((uint32_t) 0x00010000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup HASH_Private_Functions - * @{ - */ - -/** @defgroup HASH_Group6 High Level SHA1 functions - * @brief High Level SHA1 Hash and HMAC functions - * -@verbatim - =============================================================================== - ##### High Level SHA1 Hash and HMAC functions ##### - =============================================================================== - - -@endverbatim - * @{ - */ - -/** - * @brief Compute the HASH SHA1 digest. - * @param Input: pointer to the Input buffer to be treated. - * @param Ilen: length of the Input buffer. - * @param Output: the returned digest - * @retval An ErrorStatus enumeration value: - * - SUCCESS: digest computation done - * - ERROR: digest computation failed - */ -ErrorStatus HASH_SHA1(uint8_t *Input, uint32_t Ilen, uint8_t Output[20]) -{ - HASH_InitTypeDef SHA1_HASH_InitStructure; - HASH_MsgDigest SHA1_MessageDigest; - __IO uint16_t nbvalidbitsdata = 0; - uint32_t i = 0; - __IO uint32_t counter = 0; - uint32_t busystatus = 0; - ErrorStatus status = SUCCESS; - uint32_t inputaddr = (uint32_t)Input; - uint32_t outputaddr = (uint32_t)Output; - - /* Number of valid bits in last word of the Input data */ - nbvalidbitsdata = 8 * (Ilen % 4); - - /* HASH peripheral initialization */ - HASH_DeInit(); - - /* HASH Configuration */ - SHA1_HASH_InitStructure.HASH_AlgoSelection = HASH_AlgoSelection_SHA1; - SHA1_HASH_InitStructure.HASH_AlgoMode = HASH_AlgoMode_HASH; - SHA1_HASH_InitStructure.HASH_DataType = HASH_DataType_8b; - HASH_Init(&SHA1_HASH_InitStructure); - - /* Configure the number of valid bits in last word of the data */ - HASH_SetLastWordValidBitsNbr(nbvalidbitsdata); - - /* Write the Input block in the IN FIFO */ - for(i=0; i 64) - { - /* HMAC long Key */ - SHA1_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_LongKey; - } - else - { - /* HMAC short Key */ - SHA1_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; - } - HASH_Init(&SHA1_HASH_InitStructure); - - /* Configure the number of valid bits in last word of the Key */ - HASH_SetLastWordValidBitsNbr(nbvalidbitskey); - - /* Write the Key */ - for(i=0; iGPIO_Mode = GPIO_Mode_AF - (++) Select the type, pull-up/pull-down and output speed via - GPIO_PuPd, GPIO_OType and GPIO_Speed members - (++) Call GPIO_Init() function - Recommended configuration is Push-Pull, Pull-up, Open-Drain. - Add an external pull up if necessary (typically 4.7 KOhm). - - (#) Program the Mode, duty cycle , Own address, Ack, Speed and Acknowledged - Address using the I2C_Init() function. - - (#) Optionally you can enable/configure the following parameters without - re-initialization (i.e there is no need to call again I2C_Init() function): - (++) Enable the acknowledge feature using I2C_AcknowledgeConfig() function - (++) Enable the dual addressing mode using I2C_DualAddressCmd() function - (++) Enable the general call using the I2C_GeneralCallCmd() function - (++) Enable the clock stretching using I2C_StretchClockCmd() function - (++) Enable the fast mode duty cycle using the I2C_FastModeDutyCycleConfig() - function. - (++) Configure the NACK position for Master Receiver mode in case of - 2 bytes reception using the function I2C_NACKPositionConfig(). - (++) Enable the PEC Calculation using I2C_CalculatePEC() function - (++) For SMBus Mode: - (+++) Enable the Address Resolution Protocol (ARP) using I2C_ARPCmd() function - (+++) Configure the SMBusAlert pin using I2C_SMBusAlertConfig() function - - (#) Enable the NVIC and the corresponding interrupt using the function - I2C_ITConfig() if you need to use interrupt mode. - - (#) When using the DMA mode - (++) Configure the DMA using DMA_Init() function - (++) Active the needed channel Request using I2C_DMACmd() or - I2C_DMALastTransferCmd() function. - -@@- When using DMA mode, I2C interrupts may be used at the same time to - control the communication flow (Start/Stop/Ack... events and errors). - - (#) Enable the I2C using the I2C_Cmd() function. - - (#) Enable the DMA using the DMA_Cmd() function when using DMA mode in the - transfers. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_i2c.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup I2C - * @brief I2C driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -#define CR1_CLEAR_MASK ((uint16_t)0xFBF5) /*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 &= (uint16_t)~((uint16_t)I2C_CR2_FREQ); - /* 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 &= (uint16_t)~((uint16_t)I2C_CR1_PE); - /* 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 */ - /* To use the I2C at 400 KHz (in fast mode), the PCLK1 frequency (I2C peripheral - input clock) must be a multiple of 10 MHz */ - 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 & I2C_CCR_CCR) == 0) - { - /* Set minimum allowed value */ - result |= (uint16_t)0x0001; - } - /* Set speed value and set F/S bit for fast mode */ - tmpreg |= (uint16_t)(result | I2C_CCR_FS); - /* 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 |= I2C_CR1_PE; - -/*---------------------------- 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, 2 or 3 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 |= I2C_CR1_PE; - } - else - { - /* Disable the selected I2C peripheral */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_PE); - } -} - -/** - * @brief Enables or disables the Analog filter of I2C peripheral. - * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. - * @param NewState: new state of the Analog filter. - * This parameter can be: ENABLE or DISABLE. - * @note This function should be called before initializing and enabling - the I2C Peripheral. - * @retval None - */ -void I2C_AnalogFilterCmd(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 analog filter */ - I2Cx->FLTR &= (uint16_t)~((uint16_t)I2C_FLTR_ANOFF); - } - else - { - /* Disable the analog filter */ - I2Cx->FLTR |= I2C_FLTR_ANOFF; - } -} - -/** - * @brief Configures the Digital noise filter of I2C peripheral. - * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. - * @param I2C_DigitalFilter: Coefficient of digital noise filter. - * This parameter can be a number between 0x00 and 0x0F. - * @note This function should be called before initializing and enabling - the I2C Peripheral. - * @retval None - */ -void I2C_DigitalFilterConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DigitalFilter) -{ - uint16_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_I2C_ALL_PERIPH(I2Cx)); - assert_param(IS_I2C_DIGITAL_FILTER(I2C_DigitalFilter)); - - /* Get the old register value */ - tmpreg = I2Cx->FLTR; - - /* Reset I2Cx DNF bit [3:0] */ - tmpreg &= (uint16_t)~((uint16_t)I2C_FLTR_DNF); - - /* Set I2Cx DNF coefficient */ - tmpreg |= (uint16_t)((uint16_t)I2C_DigitalFilter & I2C_FLTR_DNF); - - /* Store the new register value */ - I2Cx->FLTR = tmpreg; -} - -/** - * @brief Generates I2Cx communication START condition. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_START; - } - else - { - /* Disable the START condition generation */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_START); - } -} - -/** - * @brief Generates I2Cx communication STOP condition. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_STOP; - } - else - { - /* Disable the STOP condition generation */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_STOP); - } -} - -/** - * @brief Transmits the address byte to select the slave device. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_OAR1_ADD0; - } - else - { - /* Reset the address bit0 for write */ - Address &= (uint8_t)~((uint8_t)I2C_OAR1_ADD0); - } - /* Send the address */ - I2Cx->DR = Address; -} - -/** - * @brief Enables or disables the specified I2C acknowledge feature. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_ACK; - } - else - { - /* Disable the acknowledgement */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ACK); - } -} - -/** - * @brief Configures the specified I2C own address2. - * @param I2Cx: where x can be 1, 2 or 3 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 &= (uint16_t)~((uint16_t)I2C_OAR2_ADD2); - - /* 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, 2 or 3 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 |= I2C_OAR2_ENDUAL; - } - else - { - /* Disable dual addressing mode */ - I2Cx->OAR2 &= (uint16_t)~((uint16_t)I2C_OAR2_ENDUAL); - } -} - -/** - * @brief Enables or disables the specified I2C general call feature. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_ENGC; - } - else - { - /* Disable generall call */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ENGC); - } -} - -/** - * @brief Enables or disables the specified I2C software reset. - * @note When software reset is enabled, the I2C IOs are released (this can - * be useful to recover from bus errors). - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_SWRST; - } - else - { - /* Peripheral not under reset */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_SWRST); - } -} - -/** - * @brief Enables or disables the specified I2C Clock stretching. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_NOSTRETCH; - } - else - { - /* Disable the selected I2C Clock stretching */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_NOSTRETCH); - } -} - -/** - * @brief Selects the specified I2C fast mode duty cycle. - * @param I2Cx: where x can be 1, 2 or 3 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 Selects the specified I2C NACK position in master receiver mode. - * @note 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, 2 or 3 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, 2 or 3 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 ARP. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_ENARP; - } - else - { - /* Disable the selected I2C ARP */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ENARP); - } -} -/** - * @} - */ - -/** @defgroup I2C_Group2 Data transfers functions - * @brief Data transfers functions - * -@verbatim - =============================================================================== - ##### Data transfers functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Sends a data byte through the I2Cx peripheral. - * @param I2Cx: where x can be 1, 2 or 3 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, 2 or 3 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; -} - -/** - * @} - */ - -/** @defgroup I2C_Group3 PEC management functions - * @brief PEC management functions - * -@verbatim - =============================================================================== - ##### PEC management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified I2C PEC transfer. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR1_PEC; - } - else - { - /* Disable the selected I2C PEC transmission */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_PEC); - } -} - -/** - * @brief Selects the specified I2C PEC position. - * @param I2Cx: where x can be 1, 2 or 3 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, 2 or 3 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 |= I2C_CR1_ENPEC; - } - else - { - /* Disable the selected I2C PEC calculation */ - I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ENPEC); - } -} - -/** - * @brief Returns the PEC value for the specified I2C. - * @param I2Cx: where x can be 1, 2 or 3 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); -} - -/** - * @} - */ - -/** @defgroup I2C_Group4 DMA transfers management functions - * @brief DMA transfers management functions - * -@verbatim - =============================================================================== - ##### DMA transfers management functions ##### - =============================================================================== - This section provides functions allowing to configure the I2C DMA channels - requests. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified I2C DMA requests. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR2_DMAEN; - } - else - { - /* Disable the selected I2C DMA requests */ - I2Cx->CR2 &= (uint16_t)~((uint16_t)I2C_CR2_DMAEN); - } -} - -/** - * @brief Specifies that the next DMA transfer is the last one. - * @param I2Cx: where x can be 1, 2 or 3 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 |= I2C_CR2_LAST; - } - else - { - /* Next DMA transfer is not the last transfer */ - I2Cx->CR2 &= (uint16_t)~((uint16_t)I2C_CR2_LAST); - } -} - -/** - * @} - */ - -/** @defgroup I2C_Group5 Interrupts events and flags management functions - * @brief Interrupts, events and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts, events and flags management functions ##### - =============================================================================== - [..] - This section provides functions allowing to configure the I2C Interrupts - sources and check or clear the flags or pending bits status. - The user should identify which mode will be used in his application to manage - the communication: Polling mode, Interrupt mode or DMA mode. - - - ##### I2C State Monitoring Functions ##### - =============================================================================== - [..] - This I2C driver provides three different ways for I2C state monitoring - depending on the application requirements and constraints: - - - (#) 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 (RM0090). - (+++) 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. - - -@@- 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 the - I2Cx_ER_IRQHandler() function 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. - - - (#) Advanced state monitoring (Using the function I2C_GetLastEvent()) - - 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 (stm32f4xx_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). - - - (#) Flag-based state monitoring (Using the function I2C_GetFlagStatus()) - - 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 - stm32f4xx_i2c.h file. - -@endverbatim - * @{ - */ - -/** - * @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 interrupts. - * @param I2Cx: where x can be 1, 2 or 3 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; - } -} - -/* - =============================================================================== - 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, 2 or 3 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 stm32f4xx_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, 2 or 3 to select the I2C peripheral. - * - * @note For detailed description of Events, please refer to section I2C_Events - * in stm32f4xx_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, 2 or 3 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)"ENDAD" - * @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, 2 or 3 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). - * @note 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. - * @note 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()). - * @note 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)). - * @note 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, 2 or 3 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 I2Cx's interrupt pending bits. - * @param I2Cx: where x can be 1, 2 or 3 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). - * @note 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. - * @note 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()). - * @note 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)). - * @note 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c deleted file mode 100644 index 5f6cb547..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c +++ /dev/null @@ -1,266 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_iwdg.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Independent watchdog (IWDG) peripheral: - * + Prescaler and Counter configuration - * + IWDG activation - * + Flag management - * - @verbatim - =============================================================================== - ##### IWDG features ##### - =============================================================================== - [..] - The IWDG can be started by either software or hardware (configurable - through option byte). - - The IWDG is clocked by its own dedicated low-speed clock (LSI) and - thus stays active even if the main clock fails. - Once the IWDG is started, the LSI is forced ON and cannot be disabled - (LSI cannot be disabled too), and the counter starts counting down from - the reset value of 0xFFF. When it reaches the end of count value (0x000) - a system reset is generated. - The IWDG counter should be reloaded at regular intervals to prevent - an MCU reset. - - The IWDG is implemented in the VDD voltage domain that is still functional - in STOP and STANDBY mode (IWDG reset can wake-up from STANDBY). - - IWDGRST flag in RCC_CSR register can be used to inform when a IWDG - reset occurs. - - Min-max timeout value @32KHz (LSI): ~125us / ~32.7s - The IWDG timeout may vary due to LSI frequency dispersion. STM32F4xx - devices provide the capability to measure the LSI frequency (LSI clock - connected internally to TIM5 CH4 input capture). The measured value - can be used to have an IWDG timeout with an acceptable accuracy. - For more information, please refer to the STM32F4xx Reference manual - - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable write access to IWDG_PR and IWDG_RLR registers using - IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable) function - - (#) Configure the IWDG prescaler using IWDG_SetPrescaler() function - - (#) Configure the IWDG counter value using IWDG_SetReload() function. - This value will be loaded in the IWDG counter each time the counter - is reloaded, then the IWDG will start counting down from this value. - - (#) Start the IWDG using IWDG_Enable() function, when the IWDG is used - in software mode (no need to enable the LSI, it will be enabled - by hardware) - - (#) Then the application program must reload the IWDG counter at regular - intervals during normal operation to prevent an MCU reset, using - IWDG_ReloadCounter() function. - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_iwdg.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup IWDG - * @brief IWDG driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* KR register bit mask */ -#define KR_KEY_RELOAD ((uint16_t)0xAAAA) -#define KR_KEY_ENABLE ((uint16_t)0xCCCC) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup IWDG_Private_Functions - * @{ - */ - -/** @defgroup IWDG_Group1 Prescaler and Counter configuration functions - * @brief Prescaler and Counter configuration functions - * -@verbatim - =============================================================================== - ##### Prescaler and Counter configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup IWDG_Group2 IWDG activation function - * @brief IWDG activation function - * -@verbatim - =============================================================================== - ##### IWDG activation function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup IWDG_Group3 Flag management function - * @brief Flag management function - * -@verbatim - =============================================================================== - ##### Flag management function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c deleted file mode 100644 index 3446cfec..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c +++ /dev/null @@ -1,678 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_pwr.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Power Controller (PWR) peripheral: - * + Backup Domain Access - * + PVD configuration - * + WakeUp pin configuration - * + Main and Backup Regulators configuration - * + FLASH Power Down configuration - * + Low Power modes configuration - * + Flags management - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_pwr.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup PWR - * @brief PWR driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* --------- 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)) - -/* Alias word address of FPDS bit */ -#define FPDS_BitNumber 0x09 -#define CR_FPDS_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (FPDS_BitNumber * 4)) - -/* Alias word address of PMODE bit */ -#define PMODE_BitNumber 0x0E -#define CR_PMODE_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PMODE_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)) - -/* Alias word address of BRE bit */ -#define BRE_BitNumber 0x09 -#define CSR_BRE_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (BRE_BitNumber * 4)) - -/* ------------------ PWR registers bit mask ------------------------ */ - -/* CR register bit mask */ -#define CR_DS_MASK ((uint32_t)0xFFFFFFFC) -#define CR_PLS_MASK ((uint32_t)0xFFFFFF1F) -#define CR_VOS_MASK ((uint32_t)0xFFFF3FFF) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup PWR_Private_Functions - * @{ - */ - -/** @defgroup PWR_Group1 Backup Domain Access function - * @brief Backup Domain Access function - * -@verbatim - =============================================================================== - ##### Backup Domain Access function ##### - =============================================================================== - [..] - After reset, the backup domain (RTC registers, RTC backup data - registers and backup SRAM) is protected against possible unwanted - write accesses. - To enable access to the RTC Domain and RTC registers, proceed as follows: - (+) Enable the Power Controller (PWR) APB1 interface clock using the - RCC_APB1PeriphClockCmd() function. - (+) Enable access to RTC domain using the PWR_BackupAccessCmd() function. - -@endverbatim - * @{ - */ - -/** - * @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 backup domain (RTC registers, RTC - * backup data registers and backup SRAM). - * @note If the HSE divided by 2, 3, ..31 is used as the RTC clock, the - * Backup Domain Access should be kept enabled. - * @param NewState: new state of the access to the backup domain. - * 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; -} - -/** - * @} - */ - -/** @defgroup PWR_Group2 PVD configuration functions - * @brief PVD configuration functions - * -@verbatim - =============================================================================== - ##### PVD configuration functions ##### - =============================================================================== - [..] - (+) The PVD is used to monitor the VDD power supply by comparing it to a - threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR). - (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower - than the PVD threshold. This event is internally connected to the EXTI - line16 and can generate an interrupt if enabled through the EXTI registers. - (+) The PVD is stopped in Standby mode. - -@endverbatim - * @{ - */ - -/** - * @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_0 - * @arg PWR_PVDLevel_1 - * @arg PWR_PVDLevel_2 - * @arg PWR_PVDLevel_3 - * @arg PWR_PVDLevel_4 - * @arg PWR_PVDLevel_5 - * @arg PWR_PVDLevel_6 - * @arg PWR_PVDLevel_7 - * @note Refer to the electrical characteristics of your device datasheet for - * more details about the voltage threshold corresponding to each - * detection level. - * @retval None - */ -void 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 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; -} - -/** - * @} - */ - -/** @defgroup PWR_Group3 WakeUp pin configuration functions - * @brief WakeUp pin configuration functions - * -@verbatim - =============================================================================== - ##### WakeUp pin configuration functions ##### - =============================================================================== - [..] - (+) WakeUp pin is used to wakeup the system from Standby mode. This pin is - forced in input pull down configuration and is active on rising edges. - (+) There is only one WakeUp pin: WakeUp Pin 1 on PA.00. - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup PWR_Group4 Main and Backup Regulators configuration functions - * @brief Main and Backup Regulators configuration functions - * -@verbatim - =============================================================================== - ##### Main and Backup Regulators configuration functions ##### - =============================================================================== - [..] - (+) The backup domain includes 4 Kbytes of backup SRAM accessible only from - the CPU, and address in 32-bit, 16-bit or 8-bit mode. Its content is - retained even in Standby or VBAT mode when the low power backup regulator - is enabled. It can be considered as an internal EEPROM when VBAT is - always present. You can use the PWR_BackupRegulatorCmd() function to - enable the low power backup regulator and use the PWR_GetFlagStatus - (PWR_FLAG_BRR) to check if it is ready or not. - - (+) When the backup domain is supplied by VDD (analog switch connected to VDD) - the backup SRAM is powered from VDD which replaces the VBAT power supply to - save battery life. - - (+) The backup SRAM is not mass erased by an tamper event. It is read - protected to prevent confidential data, such as cryptographic private - key, from being accessed. The backup SRAM can be erased only through - the Flash interface when a protection level change from level 1 to - level 0 is requested. - -@- Refer to the description of Read protection (RDP) in the Flash - programming manual. - - (+) The main internal regulator can be configured to have a tradeoff between - performance and power consumption when the device does not operate at - the maximum frequency. This is done through PWR_MainRegulatorModeConfig() - function which configure VOS bit in PWR_CR register: - (++) When this bit is set (Regulator voltage output Scale 1 mode selected) - the System frequency can go up to 168 MHz. - (++) When this bit is reset (Regulator voltage output Scale 2 mode selected) - the System frequency can go up to 144 MHz. - - Refer to the datasheets for more details. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the Backup Regulator. - * @param NewState: new state of the Backup Regulator. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void PWR_BackupRegulatorCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - *(__IO uint32_t *) CSR_BRE_BB = (uint32_t)NewState; -} - -/** - * @brief Configures the main internal regulator output voltage. - * @param PWR_Regulator_Voltage: specifies the regulator output voltage to achieve - * a tradeoff between performance and power consumption when the device does - * not operate at the maximum frequency (refer to the datasheets for more details). - * This parameter can be one of the following values: - * @arg PWR_Regulator_Voltage_Scale1: Regulator voltage output Scale 1 mode, - * System frequency up to 168 MHz. - * @arg PWR_Regulator_Voltage_Scale2: Regulator voltage output Scale 2 mode, - * System frequency up to 144 MHz. - * @arg PWR_Regulator_Voltage_Scale3: Regulator voltage output Scale 3 mode, - * System frequency up to 120 MHz - * @retval None - */ -void PWR_MainRegulatorModeConfig(uint32_t PWR_Regulator_Voltage) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_PWR_REGULATOR_VOLTAGE(PWR_Regulator_Voltage)); - - tmpreg = PWR->CR; - - /* Clear VOS[15:14] bits */ - tmpreg &= CR_VOS_MASK; - - /* Set VOS[15:14] bits according to PWR_Regulator_Voltage value */ - tmpreg |= PWR_Regulator_Voltage; - - /* Store the new value */ - PWR->CR = tmpreg; -} - -/** - * @} - */ - -/** @defgroup PWR_Group5 FLASH Power Down configuration functions - * @brief FLASH Power Down configuration functions - * -@verbatim - =============================================================================== - ##### FLASH Power Down configuration functions ##### - =============================================================================== - [..] - (+) By setting the FPDS bit in the PWR_CR register by using the - PWR_FlashPowerDownCmd() function, the Flash memory also enters power - down mode when the device enters Stop mode. When the Flash memory - is in power down mode, an additional startup delay is incurred when - waking up from Stop mode. -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the Flash Power Down in STOP mode. - * @param NewState: new state of the Flash power mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void PWR_FlashPowerDownCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - *(__IO uint32_t *) CR_FPDS_BB = (uint32_t)NewState; -} - -/** - * @} - */ - -/** @defgroup PWR_Group6 Low Power modes configuration functions - * @brief Low Power modes configuration functions - * -@verbatim - =============================================================================== - ##### Low Power modes configuration functions ##### - =============================================================================== - [..] - The devices feature 3 low-power modes: - (+) Sleep mode: Cortex-M4 core stopped, peripherals kept running. - (+) Stop mode: all clocks are stopped, regulator running, regulator - in low power mode - (+) Standby mode: 1.2V domain powered off. - - *** Sleep mode *** - ================== - [..] - (+) Entry: - (++) The Sleep mode is entered by using the __WFI() or __WFE() functions. - (+) Exit: - (++) Any peripheral interrupt acknowledged by the nested vectored interrupt - controller (NVIC) can wake up the device from Sleep mode. - - *** Stop mode *** - ================= - [..] - In Stop mode, all clocks in the 1.2V domain are stopped, the PLL, the HSI, - and the HSE RC oscillators are disabled. Internal SRAM and register contents - are preserved. - The voltage regulator can be configured either in normal or low-power mode. - To minimize the consumption In Stop mode, FLASH can be powered off before - entering the Stop mode. It can be switched on again by software after exiting - the Stop mode using the PWR_FlashPowerDownCmd() function. - - (+) Entry: - (++) The Stop mode is entered using the PWR_EnterSTOPMode(PWR_Regulator_LowPower,) - function with regulator in LowPower or with Regulator ON. - (+) Exit: - (++) Any EXTI Line (Internal or External) configured in Interrupt/Event mode. - - *** Standby mode *** - ==================== - [..] - The Standby mode allows to achieve the lowest power consumption. It is based - on the Cortex-M4 deepsleep mode, with the voltage regulator disabled. - The 1.2V domain is consequently powered off. The PLL, the HSI oscillator and - the HSE oscillator are also switched off. SRAM and register contents are lost - except for the RTC registers, RTC backup registers, backup SRAM and Standby - circuitry. - - The voltage regulator is OFF. - - (+) Entry: - (++) The Standby mode is entered using the PWR_EnterSTANDBYMode() function. - (+) Exit: - (++) WKUP pin rising edge, RTC alarm (Alarm A and Alarm B), RTC wakeup, - tamper event, time-stamp event, external reset in NRST pin, IWDG reset. - - *** Auto-wakeup (AWU) from low-power mode *** - ============================================= - [..] - The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC - Wakeup event, a tamper event, a time-stamp event, or a comparator event, - without depending on an external interrupt (Auto-wakeup mode). - - (#) RTC auto-wakeup (AWU) from the Stop mode - - (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to: - (+++) Configure the EXTI Line 17 to be sensitive to rising edges (Interrupt - or Event modes) using the EXTI_Init() function. - (+++) Enable the RTC Alarm Interrupt using the RTC_ITConfig() function - (+++) Configure the RTC to generate the RTC alarm using the RTC_SetAlarm() - and RTC_AlarmCmd() functions. - (++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it - is necessary to: - (+++) Configure the EXTI Line 21 to be sensitive to rising edges (Interrupt - or Event modes) using the EXTI_Init() function. - (+++) Enable the RTC Tamper or time stamp Interrupt using the RTC_ITConfig() - function - (+++) Configure the RTC to detect the tamper or time stamp event using the - RTC_TimeStampConfig(), RTC_TamperTriggerConfig() and RTC_TamperCmd() - functions. - (++) To wake up from the Stop mode with an RTC WakeUp event, it is necessary to: - (+++) Configure the EXTI Line 22 to be sensitive to rising edges (Interrupt - or Event modes) using the EXTI_Init() function. - (+++) Enable the RTC WakeUp Interrupt using the RTC_ITConfig() function - (+++) Configure the RTC to generate the RTC WakeUp event using the RTC_WakeUpClockConfig(), - RTC_SetWakeUpCounter() and RTC_WakeUpCmd() functions. - - (#) RTC auto-wakeup (AWU) from the Standby mode - - (++) To wake up from the Standby mode with an RTC alarm event, it is necessary to: - (+++) Enable the RTC Alarm Interrupt using the RTC_ITConfig() function - (+++) Configure the RTC to generate the RTC alarm using the RTC_SetAlarm() - and RTC_AlarmCmd() functions. - (++) To wake up from the Standby mode with an RTC Tamper or time stamp event, it - is necessary to: - (+++) Enable the RTC Tamper or time stamp Interrupt using the RTC_ITConfig() - function - (+++) Configure the RTC to detect the tamper or time stamp event using the - RTC_TimeStampConfig(), RTC_TamperTriggerConfig() and RTC_TamperCmd() - functions. - (++) To wake up from the Standby mode with an RTC WakeUp event, it is necessary to: - (+++) Enable the RTC WakeUp Interrupt using the RTC_ITConfig() function - (+++) Configure the RTC to generate the RTC WakeUp event using the RTC_WakeUpClockConfig(), - RTC_SetWakeUpCounter() and RTC_WakeUpCmd() functions. - -@endverbatim - * @{ - */ - -/** - * @brief Enters STOP mode. - * - * @note In Stop mode, all I/O pins keep the same state as in Run mode. - * @note When exiting Stop mode by issuing an interrupt or a wakeup event, - * the HSI RC oscillator is selected as system clock. - * @note When the voltage regulator operates in low power mode, an additional - * startup delay is incurred when waking up from Stop mode. - * By keeping the internal regulator ON during Stop mode, the consumption - * is higher although the startup time is reduced. - * - * @param 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 LPDSR bits */ - tmpreg &= CR_DS_MASK; - - /* Set LPDSR 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_Msk; - - /* 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_Msk); -} - -/** - * @brief Enters STANDBY mode. - * @note In Standby mode, all I/O pins are high impedance except for: - * - Reset pad (still available) - * - RTC_AF1 pin (PC13) if configured for tamper, time-stamp, RTC - * Alarm out, or RTC clock calibration out. - * - RTC_AF2 pin (PI8) if configured for tamper or time-stamp. - * - WKUP pin 1 (PA0) if enabled. - * @param None - * @retval None - */ -void PWR_EnterSTANDBYMode(void) -{ - /* Clear Wakeup 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_Msk; - -/* This option is used to ensure that store operations are completed */ -#if defined ( __CC_ARM ) - __force_stores(); -#endif - /* Request Wait For Interrupt */ - __WFI(); -} - -/** - * @} - */ - -/** @defgroup PWR_Group7 Flags management functions - * @brief Flags management functions - * -@verbatim - =============================================================================== - ##### Flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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. This flag indicates that a wakeup event - * was received from the WKUP pin or from the RTC alarm (Alarm A - * or Alarm B), RTC Tamper event, RTC TimeStamp event or RTC Wakeup. - * An additional wakeup event is detected if the WKUP pin is enabled - * (by setting the EWUP bit) when the WKUP pin level is already high. - * @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was - * resumed from StandBy mode. - * @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled - * by the PWR_PVDCmd() function. The PVD is stopped by Standby mode - * For this reason, this bit is equal to 0 after Standby or reset - * until the PVDE bit is set. - * @arg PWR_FLAG_BRR: Backup regulator ready flag. This bit is not reset - * when the device wakes up from Standby mode or by a system reset - * or power reset. - * @arg PWR_FLAG_VOSRDY: This flag indicates that the Regulator voltage - * scaling output selection is ready. - * @retval The new state of 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c deleted file mode 100644 index 967798e4..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c +++ /dev/null @@ -1,1872 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rcc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Reset and clock control (RCC) peripheral: - * + Internal/external clocks, PLL, CSS and MCO configuration - * + System, AHB and APB busses clocks configuration - * + Peripheral clocks configuration - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### RCC specific features ##### - =============================================================================== - [..] - After reset the device is running from Internal High Speed oscillator - (HSI 16MHz) with Flash 0 wait state, Flash prefetch buffer, D-Cache - and I-Cache are disabled, and all peripherals are off except internal - SRAM, Flash and JTAG. - (+) There is no prescaler on High speed (AHB) and Low speed (APB) busses; - all peripherals mapped on these busses are running at HSI speed. - (+) The clock for all peripherals is switched off, except the SRAM and FLASH. - (+) All GPIOs are in input floating state, except the JTAG pins which - are assigned to be used for debug purpose. - [..] - Once the device started from reset, the user application has to: - (+) Configure the clock source to be used to drive the System clock - (if the application needs higher frequency/performance) - (+) Configure the System clock frequency and Flash settings - (+) Configure the AHB and APB busses prescalers - (+) Enable the clock for the peripheral(s) to be used - (+) Configure the clock source(s) for peripherals which clocks are not - derived from the System clock (I2S, RTC, ADC, USB OTG FS/SDIO/RNG) - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup RCC - * @brief RCC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* ------------ 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 CSSON bit */ -#define CSSON_BitNumber 0x13 -#define CR_CSSON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (CSSON_BitNumber * 4)) -/* Alias word address of PLLON bit */ -#define PLLON_BitNumber 0x18 -#define CR_PLLON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLLON_BitNumber * 4)) -/* Alias word address of PLLI2SON bit */ -#define PLLI2SON_BitNumber 0x1A -#define CR_PLLI2SON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLLI2SON_BitNumber * 4)) - -/* --- CFGR Register ---*/ -/* Alias word address of I2SSRC bit */ -#define CFGR_OFFSET (RCC_OFFSET + 0x08) -#define I2SSRC_BitNumber 0x17 -#define CFGR_I2SSRC_BB (PERIPH_BB_BASE + (CFGR_OFFSET * 32) + (I2SSRC_BitNumber * 4)) - -/* --- BDCR Register ---*/ -/* Alias word address of RTCEN bit */ -#define BDCR_OFFSET (RCC_OFFSET + 0x70) -#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 + 0x74) -#define LSION_BitNumber 0x00 -#define CSR_LSION_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (LSION_BitNumber * 4)) - -/* --- DCKCFGR Register ---*/ -/* Alias word address of TIMPRE bit */ -#define DCKCFGR_OFFSET (RCC_OFFSET + 0x8C) -#define TIMPRE_BitNumber 0x18 -#define DCKCFGR_TIMPRE_BB (PERIPH_BB_BASE + (DCKCFGR_OFFSET * 32) + (TIMPRE_BitNumber * 4)) -/* ---------------------- RCC registers bit mask ------------------------ */ -/* CFGR register bit mask */ -#define CFGR_MCO2_RESET_MASK ((uint32_t)0x07FFFFFF) -#define CFGR_MCO1_RESET_MASK ((uint32_t)0xF89FFFFF) - -/* RCC Flag Mask */ -#define FLAG_MASK ((uint8_t)0x1F) - -/* CR register byte 3 (Bits[23:16]) base address */ -#define CR_BYTE3_ADDRESS ((uint32_t)0x40023802) - -/* CIR register byte 2 (Bits[15:8]) base address */ -#define CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + 0x0C + 0x01)) - -/* CIR register byte 3 (Bits[23:16]) base address */ -#define CIR_BYTE3_ADDRESS ((uint32_t)(RCC_BASE + 0x0C + 0x02)) - -/* BDCR register base address */ -#define BDCR_ADDRESS (PERIPH_BASE + BDCR_OFFSET) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; - -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup RCC_Private_Functions - * @{ - */ - -/** @defgroup RCC_Group1 Internal and external clocks, PLL, CSS and MCO configuration functions - * @brief Internal and external clocks, PLL, CSS and MCO configuration functions - * -@verbatim - =================================================================================== - ##### Internal and external clocks, PLL, CSS and MCO configuration functions ##### - =================================================================================== - [..] - This section provide functions allowing to configure the internal/external clocks, - PLLs, CSS and MCO pins. - - (#) HSI (high-speed internal), 16 MHz factory-trimmed RC used directly or through - the PLL as System clock source. - - (#) LSI (low-speed internal), 32 KHz low consumption RC used as IWDG and/or RTC - clock source. - - (#) HSE (high-speed external), 4 to 26 MHz crystal oscillator used directly or - through the PLL as System clock source. Can be used also as RTC clock source. - - (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source. - - (#) PLL (clocked by HSI or HSE), featuring two different output clocks: - (++) The first output is used to generate the high speed system clock (up to 168 MHz) - (++) The second output is used to generate the clock for the USB OTG FS (48 MHz), - the random analog generator (<=48 MHz) and the SDIO (<= 48 MHz). - - (#) PLLI2S (clocked by HSI or HSE), used to generate an accurate clock to achieve - high-quality audio performance on the I2S interface. - - (#) CSS (Clock security system), once enable and if a HSE clock failure occurs - (HSE used directly or through PLL as System clock source), the System clock - is automatically switched to HSI and an interrupt is generated if enabled. - The interrupt is linked to the Cortex-M4 NMI (Non-Maskable Interrupt) - exception vector. - - (#) MCO1 (microcontroller clock output), used to output HSI, LSE, HSE or PLL - clock (through a configurable prescaler) on PA8 pin. - - (#) MCO2 (microcontroller clock output), used to output HSE, PLL, SYSCLK or PLLI2S - clock (through a configurable prescaler) on PC9 pin. - @endverbatim - * @{ - */ - -/** - * @brief Resets the RCC clock configuration to the default reset state. - * @note The default reset state of the clock configuration is given below: - * - HSI ON and used as system clock source - * - HSE, PLL and PLLI2S OFF - * - AHB, APB1 and APB2 prescaler set to 1. - * - CSS, MCO1 and MCO2 OFF - * - All interrupts disabled - * @note This function doesn't modify the configuration of the - * - Peripheral clocks - * - LSI, LSE and RTC clocks - * @param None - * @retval None - */ -void RCC_DeInit(void) -{ - /* Set HSION bit */ - RCC->CR |= (uint32_t)0x00000001; - - /* Reset CFGR register */ - RCC->CFGR = 0x00000000; - - /* Reset HSEON, CSSON, PLLON and PLLI2S bits */ - RCC->CR &= (uint32_t)0xFAF6FFFF; - - /* Reset PLLCFGR register */ - RCC->PLLCFGR = 0x24003010; - - /* Reset PLLI2SCFGR register */ - RCC->PLLI2SCFGR = 0x20003000; - - /* Reset HSEBYP bit */ - RCC->CR &= (uint32_t)0xFFFBFFFF; - - /* Disable all interrupts */ - RCC->CIR = 0x00000000; - -#ifdef STM32F427X - /* Disable Timers clock prescalers selection */ - RCC->DCKCFGR = 0x00000000; -#endif /* STM32F427X */ - -} - -/** - * @brief Configures the External High Speed oscillator (HSE). - * @note After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application - * software should wait on HSERDY flag to be set indicating that HSE clock - * is stable and can be used to clock the PLL and/or system clock. - * @note HSE state can not be changed if it is used directly or through the - * PLL as system clock. In this case, you have to select another source - * of the system clock then change the HSE state (ex. disable it). - * @note The HSE is stopped by hardware when entering STOP and STANDBY modes. - * @note This function reset the CSSON bit, so if the Clock security system(CSS) - * was previously enabled you have to enable it again after calling this - * function. - * @param RCC_HSE: specifies the new state of the HSE. - * This parameter can be one of the following values: - * @arg RCC_HSE_OFF: turn OFF the HSE oscillator, HSERDY flag goes low after - * 6 HSE oscillator clock cycles. - * @arg RCC_HSE_ON: turn ON the HSE oscillator - * @arg RCC_HSE_Bypass: HSE oscillator bypassed with external clock - * @retval None - */ -void RCC_HSEConfig(uint8_t RCC_HSE) -{ - /* Check the parameters */ - assert_param(IS_RCC_HSE(RCC_HSE)); - - /* Reset HSEON and HSEBYP bits before configuring the HSE ------------------*/ - *(__IO uint8_t *) CR_BYTE3_ADDRESS = RCC_HSE_OFF; - - /* Set the new HSE configuration -------------------------------------------*/ - *(__IO uint8_t *) CR_BYTE3_ADDRESS = RCC_HSE; -} - -/** - * @brief Waits for HSE start-up. - * @note This functions waits on HSERDY flag to be set and return SUCCESS if - * this flag is set, otherwise returns ERROR if the timeout is reached - * and this flag is not set. The timeout value is defined by the constant - * HSE_STARTUP_TIMEOUT in stm32f4xx.h file. You can tailor it depending - * on the HSE crystal used in your application. - * @param None - * @retval An ErrorStatus enumeration 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. - * @note The calibration is used to compensate for the variations in voltage - * and temperature that influence the frequency of the internal HSI RC. - * @param HSICalibrationValue: specifies the calibration trimming value. - * 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 &= ~RCC_CR_HSITRIM; - - /* 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 The HSI is stopped by hardware when entering STOP and STANDBY modes. - * It is used (enabled by hardware) as system clock source after startup - * from Reset, wakeup from STOP and STANDBY mode, or in case of failure - * of the HSE used directly or indirectly as system clock (if the Clock - * Security System CSS is enabled). - * @note HSI can not be stopped if it is used as system clock source. In this case, - * you have to select another source of the system clock then stop the HSI. - * @note After enabling the HSI, the application software should wait on HSIRDY - * flag to be set indicating that HSI clock is stable and can be used as - * system clock source. - * @param NewState: new state of the HSI. - * This parameter can be: ENABLE or DISABLE. - * @note When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator - * clock cycles. - * @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 External Low Speed oscillator (LSE). - * @note As the LSE is in the Backup domain and write access is denied to - * this domain after reset, you have to enable write access using - * PWR_BackupAccessCmd(ENABLE) function before to configure the LSE - * (to be done once after reset). - * @note After enabling the LSE (RCC_LSE_ON or RCC_LSE_Bypass), the application - * software should wait on LSERDY flag to be set indicating that LSE clock - * is stable and can be used to clock the RTC. - * @param RCC_LSE: specifies the new state of the LSE. - * This parameter can be one of the following values: - * @arg RCC_LSE_OFF: turn OFF the LSE oscillator, LSERDY flag goes low after - * 6 LSE oscillator clock cycles. - * @arg RCC_LSE_ON: turn ON the LSE oscillator - * @arg RCC_LSE_Bypass: LSE oscillator bypassed with external clock - * @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 After enabling the LSI, the application software should wait on - * LSIRDY flag to be set indicating that LSI clock is stable and can - * be used to clock the IWDG and/or the RTC. - * @note LSI can not be disabled if the IWDG is running. - * @param NewState: new state of the LSI. - * This parameter can be: ENABLE or DISABLE. - * @note When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator - * clock cycles. - * @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 main PLL clock source, multiplication and division factors. - * @note This function must be used only when the main PLL is disabled. - * - * @param RCC_PLLSource: specifies the PLL entry clock source. - * This parameter can be one of the following values: - * @arg RCC_PLLSource_HSI: HSI oscillator clock selected as PLL clock entry - * @arg RCC_PLLSource_HSE: HSE oscillator clock selected as PLL clock entry - * @note This clock source (RCC_PLLSource) is common for the main PLL and PLLI2S. - * - * @param PLLM: specifies the division factor for PLL VCO input clock - * This parameter must be a number between 0 and 63. - * @note You have to set the PLLM parameter correctly to ensure that the VCO input - * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency - * of 2 MHz to limit PLL jitter. - * - * @param PLLN: specifies the multiplication factor for PLL VCO output clock - * This parameter must be a number between 192 and 432. - * @note You have to set the PLLN parameter correctly to ensure that the VCO - * output frequency is between 192 and 432 MHz. - * - * @param PLLP: specifies the division factor for main system clock (SYSCLK) - * This parameter must be a number in the range {2, 4, 6, or 8}. - * @note You have to set the PLLP parameter correctly to not exceed 168 MHz on - * the System clock frequency. - * - * @param PLLQ: specifies the division factor for OTG FS, SDIO and RNG clocks - * This parameter must be a number between 4 and 15. - * @note If the USB OTG FS is used in your application, you have to set the - * PLLQ parameter correctly to have 48 MHz clock for the USB. However, - * the SDIO and RNG need a frequency lower than or equal to 48 MHz to work - * correctly. - * - * @retval None - */ -void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ) -{ - /* Check the parameters */ - assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource)); - assert_param(IS_RCC_PLLM_VALUE(PLLM)); - assert_param(IS_RCC_PLLN_VALUE(PLLN)); - assert_param(IS_RCC_PLLP_VALUE(PLLP)); - assert_param(IS_RCC_PLLQ_VALUE(PLLQ)); - - RCC->PLLCFGR = PLLM | (PLLN << 6) | (((PLLP >> 1) -1) << 16) | (RCC_PLLSource) | - (PLLQ << 24); -} - -/** - * @brief Enables or disables the main PLL. - * @note After enabling the main PLL, the application software should wait on - * PLLRDY flag to be set indicating that PLL clock is stable and can - * be used as system clock source. - * @note The main PLL can not be disabled if it is used as system clock source - * @note The main PLL is disabled by hardware when entering STOP and STANDBY modes. - * @param NewState: new state of the main 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; -} - -/** - * @brief Configures the PLLI2S clock multiplication and division factors. - * - * @note This function must be used only when the PLLI2S is disabled. - * @note PLLI2S clock source is common with the main PLL (configured in - * RCC_PLLConfig function ) - * - * @param PLLI2SN: specifies the multiplication factor for PLLI2S VCO output clock - * This parameter must be a number between 192 and 432. - * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO - * output frequency is between 192 and 432 MHz. - * - * @param PLLI2SR: specifies the division factor for I2S clock - * This parameter must be a number between 2 and 7. - * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz - * on the I2S clock frequency. - * - * @retval None - */ -void RCC_PLLI2SConfig(uint32_t PLLI2SN, uint32_t PLLI2SR) -{ - /* Check the parameters */ - assert_param(IS_RCC_PLLI2SN_VALUE(PLLI2SN)); - assert_param(IS_RCC_PLLI2SR_VALUE(PLLI2SR)); - - RCC->PLLI2SCFGR = (PLLI2SN << 6) | (PLLI2SR << 28); -} - -/** - * @brief Enables or disables the PLLI2S. - * @note The PLLI2S is disabled by hardware when entering STOP and STANDBY modes. - * @param NewState: new state of the PLLI2S. This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_PLLI2SCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - *(__IO uint32_t *) CR_PLLI2SON_BB = (uint32_t)NewState; -} - -/** - * @brief Enables or disables the Clock Security System. - * @note If a failure is detected on the HSE oscillator clock, this oscillator - * is automatically disabled and an interrupt is generated to inform the - * software about the failure (Clock Security System Interrupt, CSSI), - * allowing the MCU to perform rescue operations. The CSSI is linked to - * the Cortex-M4 NMI (Non-Maskable Interrupt) exception vector. - * @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 MCO1 pin(PA8). - * @note PA8 should be configured in alternate function mode. - * @param RCC_MCO1Source: specifies the clock source to output. - * This parameter can be one of the following values: - * @arg RCC_MCO1Source_HSI: HSI clock selected as MCO1 source - * @arg RCC_MCO1Source_LSE: LSE clock selected as MCO1 source - * @arg RCC_MCO1Source_HSE: HSE clock selected as MCO1 source - * @arg RCC_MCO1Source_PLLCLK: main PLL clock selected as MCO1 source - * @param RCC_MCO1Div: specifies the MCO1 prescaler. - * This parameter can be one of the following values: - * @arg RCC_MCO1Div_1: no division applied to MCO1 clock - * @arg RCC_MCO1Div_2: division by 2 applied to MCO1 clock - * @arg RCC_MCO1Div_3: division by 3 applied to MCO1 clock - * @arg RCC_MCO1Div_4: division by 4 applied to MCO1 clock - * @arg RCC_MCO1Div_5: division by 5 applied to MCO1 clock - * @retval None - */ -void RCC_MCO1Config(uint32_t RCC_MCO1Source, uint32_t RCC_MCO1Div) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RCC_MCO1SOURCE(RCC_MCO1Source)); - assert_param(IS_RCC_MCO1DIV(RCC_MCO1Div)); - - tmpreg = RCC->CFGR; - - /* Clear MCO1[1:0] and MCO1PRE[2:0] bits */ - tmpreg &= CFGR_MCO1_RESET_MASK; - - /* Select MCO1 clock source and prescaler */ - tmpreg |= RCC_MCO1Source | RCC_MCO1Div; - - /* Store the new value */ - RCC->CFGR = tmpreg; -} - -/** - * @brief Selects the clock source to output on MCO2 pin(PC9). - * @note PC9 should be configured in alternate function mode. - * @param RCC_MCO2Source: specifies the clock source to output. - * This parameter can be one of the following values: - * @arg RCC_MCO2Source_SYSCLK: System clock (SYSCLK) selected as MCO2 source - * @arg RCC_MCO2Source_PLLI2SCLK: PLLI2S clock selected as MCO2 source - * @arg RCC_MCO2Source_HSE: HSE clock selected as MCO2 source - * @arg RCC_MCO2Source_PLLCLK: main PLL clock selected as MCO2 source - * @param RCC_MCO2Div: specifies the MCO2 prescaler. - * This parameter can be one of the following values: - * @arg RCC_MCO2Div_1: no division applied to MCO2 clock - * @arg RCC_MCO2Div_2: division by 2 applied to MCO2 clock - * @arg RCC_MCO2Div_3: division by 3 applied to MCO2 clock - * @arg RCC_MCO2Div_4: division by 4 applied to MCO2 clock - * @arg RCC_MCO2Div_5: division by 5 applied to MCO2 clock - * @retval None - */ -void RCC_MCO2Config(uint32_t RCC_MCO2Source, uint32_t RCC_MCO2Div) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RCC_MCO2SOURCE(RCC_MCO2Source)); - assert_param(IS_RCC_MCO2DIV(RCC_MCO2Div)); - - tmpreg = RCC->CFGR; - - /* Clear MCO2 and MCO2PRE[2:0] bits */ - tmpreg &= CFGR_MCO2_RESET_MASK; - - /* Select MCO2 clock source and prescaler */ - tmpreg |= RCC_MCO2Source | RCC_MCO2Div; - - /* Store the new value */ - RCC->CFGR = tmpreg; -} - -/** - * @} - */ - -/** @defgroup RCC_Group2 System AHB and APB busses clocks configuration functions - * @brief System, AHB and APB busses clocks configuration functions - * -@verbatim - =============================================================================== - ##### System, AHB and APB busses clocks configuration functions ##### - =============================================================================== - [..] - This section provide functions allowing to configure the System, AHB, APB1 and - APB2 busses clocks. - - (#) Several clock sources can be used to drive the System clock (SYSCLK): HSI, - HSE and PLL. - The AHB clock (HCLK) is derived from System clock through configurable - prescaler and used to clock the CPU, memory and peripherals mapped - on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived - from AHB clock through configurable prescalers and used to clock - the peripherals mapped on these busses. You can use - "RCC_GetClocksFreq()" function to retrieve the frequencies of these clocks. - - -@- All the peripheral clocks are derived from the System clock (SYSCLK) except: - (+@) I2S: the I2S clock can be derived either from a specific PLL (PLLI2S) or - from an external clock mapped on the I2S_CKIN pin. - You have to use RCC_I2SCLKConfig() function to configure this clock. - (+@) RTC: the RTC clock can be derived either from the LSI, LSE or HSE clock - divided by 2 to 31. You have to use RCC_RTCCLKConfig() and RCC_RTCCLKCmd() - functions to configure this clock. - (+@) USB OTG FS, SDIO and RTC: USB OTG FS require a frequency equal to 48 MHz - to work correctly, while the SDIO require a frequency equal or lower than - to 48. This clock is derived of the main PLL through PLLQ divider. - (+@) IWDG clock which is always the LSI clock. - - (#) The maximum frequency of the SYSCLK and HCLK is 168 MHz, PCLK2 84 MHz - and PCLK1 42 MHz. Depending on the device voltage range, the maximum - frequency should be adapted accordingly: - +-------------------------------------------------------------------------------------+ - | Latency | HCLK clock frequency (MHz) | - | |---------------------------------------------------------------------| - | | voltage range | voltage range | voltage range | voltage range | - | | 2.7 V - 3.6 V | 2.4 V - 2.7 V | 2.1 V - 2.4 V | 1.8 V - 2.1 V | - |---------------|----------------|----------------|-----------------|-----------------| - |0WS(1CPU cycle)|0 < HCLK <= 30 |0 < HCLK <= 24 |0 < HCLK <= 18 |0 < HCLK <= 16 | - |---------------|----------------|----------------|-----------------|-----------------| - |1WS(2CPU cycle)|30 < HCLK <= 60 |24 < HCLK <= 48 |18 < HCLK <= 36 |16 < HCLK <= 32 | - |---------------|----------------|----------------|-----------------|-----------------| - |2WS(3CPU cycle)|60 < HCLK <= 90 |48 < HCLK <= 72 |36 < HCLK <= 54 |32 < HCLK <= 48 | - |---------------|----------------|----------------|-----------------|-----------------| - |3WS(4CPU cycle)|90 < HCLK <= 120|72 < HCLK <= 96 |54 < HCLK <= 72 |48 < HCLK <= 64 | - |---------------|----------------|----------------|-----------------|-----------------| - |4WS(5CPU cycle)|120< HCLK <= 150|96 < HCLK <= 120|72 < HCLK <= 90 |64 < HCLK <= 80 | - |---------------|----------------|----------------|-----------------|-----------------| - |5WS(6CPU cycle)|120< HCLK <= 168|120< HCLK <= 144|90 < HCLK <= 108 |80 < HCLK <= 96 | - |---------------|----------------|----------------|-----------------|-----------------| - |6WS(7CPU cycle)| NA |144< HCLK <= 168|108 < HCLK <= 120|96 < HCLK <= 112 | - |---------------|----------------|----------------|-----------------|-----------------| - |7WS(8CPU cycle)| NA | NA |120 < HCLK <= 138|112 < HCLK <= 120| - +-------------------------------------------------------------------------------------+ - -@- When VOS bits (in PWR_CR register) is reset to 0 , the maximum value of HCLK is 144 MHz. - You can use PWR_MainRegulatorModeConfig() function to set or reset this bit. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the system clock (SYSCLK). - * @note The HSI is used (enabled by hardware) as system clock source after - * startup from Reset, wake-up from STOP and STANDBY mode, or in case - * of failure of the HSE used directly or indirectly as system clock - * (if the Clock Security System CSS is enabled). - * @note A switch from one clock source to another occurs only if the target - * clock source is ready (clock stable after startup delay or PLL locked). - * If a clock source which is not yet ready is selected, the switch will - * occur when the clock source will be ready. - * You can use RCC_GetSYSCLKSource() function to know which clock is - * currently used as system clock source. - * @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 source - * @arg RCC_SYSCLKSource_HSE: HSE selected as system clock source - * @arg RCC_SYSCLKSource_PLLCLK: PLL selected as system clock source - * @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 &= ~RCC_CFGR_SW; - - /* 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 & RCC_CFGR_SWS)); -} - -/** - * @brief Configures the AHB clock (HCLK). - * @note Depending on the device voltage range, the software has to set correctly - * these bits to ensure that HCLK not exceed the maximum allowed frequency - * (for more details refer to section above - * "CPU, AHB and APB busses clocks configuration functions") - * @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 &= ~RCC_CFGR_HPRE; - - /* 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 &= ~RCC_CFGR_PPRE1; - - /* 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 &= ~RCC_CFGR_PPRE2; - - /* Set PPRE2[2:0] bits according to RCC_HCLK value */ - tmpreg |= RCC_HCLK << 3; - - /* Store the new value */ - RCC->CFGR = tmpreg; -} - -/** - * @brief Returns the frequencies of different on chip clocks; SYSCLK, HCLK, - * PCLK1 and PCLK2. - * - * @note The system frequency computed by this function is not the real - * frequency in the chip. It is calculated based on the predefined - * constant and the selected clock source: - * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(*) - * @note If SYSCLK source is HSE, function returns values based on HSE_VALUE(**) - * @note If SYSCLK source is PLL, function returns values based on HSE_VALUE(**) - * or HSI_VALUE(*) multiplied/divided by the PLL factors. - * @note (*) HSI_VALUE is a constant defined in stm32f4xx.h file (default value - * 16 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * @note (**) HSE_VALUE is a constant defined in stm32f4xx.h file (default value - * 25 MHz), user has to ensure that HSE_VALUE is same as the real - * frequency of the crystal used. Otherwise, this function may - * have wrong result. - * - * @note The result of this function could be not correct when using fractional - * value for HSE crystal. - * - * @param RCC_Clocks: pointer to a RCC_ClocksTypeDef structure which will hold - * the clocks frequencies. - * - * @note This function can be used by the user application to compute the - * baudrate for the communication peripherals or configure other parameters. - * @note Each time SYSCLK, HCLK, PCLK1 and/or PCLK2 clock changes, this function - * must be called to update the structure's field. Otherwise, any - * configuration based on this function will be incorrect. - * - * @retval None - */ -void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) -{ - uint32_t tmp = 0, presc = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFGR & RCC_CFGR_SWS; - - switch (tmp) - { - case 0x00: /* HSI used as system clock source */ - RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; - break; - case 0x04: /* HSE used as system clock source */ - RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; - break; - case 0x08: /* PLL used as system clock source */ - - /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN - SYSCLK = PLL_VCO / PLLP - */ - pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; - pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; - - if (pllsource != 0) - { - /* HSE used as PLL clock source */ - pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - else - { - /* HSI used as PLL clock source */ - pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - - pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; - RCC_Clocks->SYSCLK_Frequency = pllvco/pllp; - break; - default: - RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; - break; - } - /* Compute HCLK, PCLK1 and PCLK2 clocks frequencies ------------------------*/ - - /* Get HCLK prescaler */ - tmp = RCC->CFGR & RCC_CFGR_HPRE; - tmp = tmp >> 4; - presc = APBAHBPrescTable[tmp]; - /* HCLK clock frequency */ - RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc; - - /* Get PCLK1 prescaler */ - tmp = RCC->CFGR & RCC_CFGR_PPRE1; - tmp = tmp >> 10; - presc = APBAHBPrescTable[tmp]; - /* PCLK1 clock frequency */ - RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc; - - /* Get PCLK2 prescaler */ - tmp = RCC->CFGR & RCC_CFGR_PPRE2; - tmp = tmp >> 13; - presc = APBAHBPrescTable[tmp]; - /* PCLK2 clock frequency */ - RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc; -} - -/** - * @} - */ - -/** @defgroup RCC_Group3 Peripheral clocks configuration functions - * @brief Peripheral clocks configuration functions - * -@verbatim - =============================================================================== - ##### Peripheral clocks configuration functions ##### - =============================================================================== - [..] This section provide functions allowing to configure the Peripheral clocks. - - (#) The RTC clock which is derived from the LSI, LSE or HSE clock divided - by 2 to 31. - - (#) After restart from Reset or wakeup from STANDBY, all peripherals are off - except internal SRAM, Flash and JTAG. Before to start using a peripheral - you have to enable its interface clock. You can do this using - RCC_AHBPeriphClockCmd(), RCC_APB2PeriphClockCmd() and RCC_APB1PeriphClockCmd() functions. - - (#) To reset the peripherals configuration (to the default state after device reset) - you can use RCC_AHBPeriphResetCmd(), RCC_APB2PeriphResetCmd() and - RCC_APB1PeriphResetCmd() functions. - - (#) To further reduce power consumption in SLEEP mode the peripheral clocks - can be disabled prior to executing the WFI or WFE instructions. - You can do this using RCC_AHBPeriphClockLPModeCmd(), - RCC_APB2PeriphClockLPModeCmd() and RCC_APB1PeriphClockLPModeCmd() functions. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the RTC clock (RTCCLK). - * @note As the RTC clock configuration bits are in the Backup domain and write - * access is denied to this domain after reset, you have to enable write - * access using PWR_BackupAccessCmd(ENABLE) function before to configure - * the RTC clock source (to be done once after reset). - * @note Once the RTC clock is configured it can't be changed unless the - * Backup domain is reset using RCC_BackupResetCmd() function, or by - * a Power On Reset (POR). - * - * @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_Divx: HSE clock divided by x selected - * as RTC clock, where x:[2,31] - * - * @note If the LSE or LSI is used as RTC clock source, the RTC continues to - * work in STOP and STANDBY modes, and can be used as wakeup source. - * However, when the HSE clock is used as RTC clock source, the RTC - * cannot be used in STOP and STANDBY modes. - * @note The maximum input clock frequency for RTC is 1MHz (when using HSE as - * RTC clock source). - * - * @retval None - */ -void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RCC_RTCCLK_SOURCE(RCC_RTCCLKSource)); - - if ((RCC_RTCCLKSource & 0x00000300) == 0x00000300) - { /* If HSE is selected as RTC clock source, configure HSE division factor for RTC clock */ - tmpreg = RCC->CFGR; - - /* Clear RTCPRE[4:0] bits */ - tmpreg &= ~RCC_CFGR_RTCPRE; - - /* Configure HSE division factor for RTC clock */ - tmpreg |= (RCC_RTCCLKSource & 0xFFFFCFF); - - /* Store the new value */ - RCC->CFGR = tmpreg; - } - - /* Select the RTC clock source */ - RCC->BDCR |= (RCC_RTCCLKSource & 0x00000FFF); -} - -/** - * @brief Enables or disables the RTC clock. - * @note This function must be used only after the RTC clock source 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 Forces or releases the Backup domain reset. - * @note This function resets the RTC peripheral (including the backup registers) - * and the RTC clock source selection in RCC_CSR register. - * @note The BKPSRAM is not affected by this reset. - * @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 Configures the I2S clock source (I2SCLK). - * @note This function must be called before enabling the I2S APB clock. - * @param RCC_I2SCLKSource: specifies the I2S clock source. - * This parameter can be one of the following values: - * @arg RCC_I2S2CLKSource_PLLI2S: PLLI2S clock used as I2S clock source - * @arg RCC_I2S2CLKSource_Ext: External clock mapped on the I2S_CKIN pin - * used as I2S clock source - * @retval None - */ -void RCC_I2SCLKConfig(uint32_t RCC_I2SCLKSource) -{ - /* Check the parameters */ - assert_param(IS_RCC_I2SCLK_SOURCE(RCC_I2SCLKSource)); - - *(__IO uint32_t *) CFGR_I2SSRC_BB = RCC_I2SCLKSource; -} - -/** - * @brief Configures the Timers clocks prescalers selection. - * - * @note This feature is only available with STM32F427x/437x Devices. - * @param RCC_TIMCLKPrescaler : specifies the Timers clocks prescalers selection - * This parameter can be one of the following values: - * @arg RCC_TIMPrescDesactivated: The Timers kernels clocks prescaler is - * equal to HPRE if PPREx is corresponding to division by 1 or 2, - * else it is equal to [(HPRE * PPREx) / 2] if PPREx is corresponding to - * division by 4 or more. - * - * @arg RCC_TIMPrescActivated: The Timers kernels clocks prescaler is - * equal to HPRE if PPREx is corresponding to division by 1, 2 or 4, - * else it is equal to [(HPRE * PPREx) / 4] if PPREx is corresponding - * to division by 8 or more. - * @retval None - */ -void RCC_TIMCLKPresConfig(uint32_t RCC_TIMCLKPrescaler) -{ - /* Check the parameters */ - assert_param(IS_RCC_TIMCLK_PRESCALER(RCC_TIMCLKPrescaler)); - - *(__IO uint32_t *) DCKCFGR_TIMPRE_BB = RCC_TIMCLKPrescaler; - -} - -/** - * @brief Enables or disables the AHB1 peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @param RCC_AHBPeriph: specifies the AHB1 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_AHB1Periph_GPIOA: GPIOA clock - * @arg RCC_AHB1Periph_GPIOB: GPIOB clock - * @arg RCC_AHB1Periph_GPIOC: GPIOC clock - * @arg RCC_AHB1Periph_GPIOD: GPIOD clock - * @arg RCC_AHB1Periph_GPIOE: GPIOE clock - * @arg RCC_AHB1Periph_GPIOF: GPIOF clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOI: GPIOI clock - * @arg RCC_AHB1Periph_CRC: CRC clock - * @arg RCC_AHB1Periph_BKPSRAM: BKPSRAM interface clock - * @arg RCC_AHB1Periph_CCMDATARAMEN CCM data RAM interface clock - * @arg RCC_AHB1Periph_DMA1: DMA1 clock - * @arg RCC_AHB1Periph_DMA2: DMA2 clock - * @arg RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock - * @arg RCC_AHB1Periph_ETH_MAC_Tx: Ethernet Transmission clock - * @arg RCC_AHB1Periph_ETH_MAC_Rx: Ethernet Reception clock - * @arg RCC_AHB1Periph_ETH_MAC_PTP: Ethernet PTP clock - * @arg RCC_AHB1Periph_OTG_HS: USB OTG HS clock - * @arg RCC_AHB1Periph_OTG_HS_ULPI: USB OTG HS ULPI clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph)); - - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->AHB1ENR |= RCC_AHB1Periph; - } - else - { - RCC->AHB1ENR &= ~RCC_AHB1Periph; - } -} - -/** - * @brief Enables or disables the AHB2 peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @param RCC_AHBPeriph: specifies the AHB2 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_AHB2Periph_DCMI: DCMI clock - * @arg RCC_AHB2Periph_CRYP: CRYP clock - * @arg RCC_AHB2Periph_HASH: HASH clock - * @arg RCC_AHB2Periph_RNG: RNG clock - * @arg RCC_AHB2Periph_OTG_FS: USB OTG FS clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB2ENR |= RCC_AHB2Periph; - } - else - { - RCC->AHB2ENR &= ~RCC_AHB2Periph; - } -} - -/** - * @brief Enables or disables the AHB3 peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @param RCC_AHBPeriph: specifies the AHB3 peripheral to gates its clock. - * This parameter must be: RCC_AHB3Periph_FSMC - * - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB3_PERIPH(RCC_AHB3Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB3ENR |= RCC_AHB3Periph; - } - else - { - RCC->AHB3ENR &= ~RCC_AHB3Periph; - } -} - -/** - * @brief Enables or disables the Low Speed APB (APB1) peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @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: TIM2 clock - * @arg RCC_APB1Periph_TIM3: TIM3 clock - * @arg RCC_APB1Periph_TIM4: TIM4 clock - * @arg RCC_APB1Periph_TIM5: TIM5 clock - * @arg RCC_APB1Periph_TIM6: TIM6 clock - * @arg RCC_APB1Periph_TIM7: TIM7 clock - * @arg RCC_APB1Periph_TIM12: TIM12 clock - * @arg RCC_APB1Periph_TIM13: TIM13 clock - * @arg RCC_APB1Periph_TIM14: TIM14 clock - * @arg RCC_APB1Periph_WWDG: WWDG clock - * @arg RCC_APB1Periph_SPI2: SPI2 clock - * @arg RCC_APB1Periph_SPI3: SPI3 clock - * @arg RCC_APB1Periph_USART2: USART2 clock - * @arg RCC_APB1Periph_USART3: USART3 clock - * @arg RCC_APB1Periph_UART4: UART4 clock - * @arg RCC_APB1Periph_UART5: UART5 clock - * @arg RCC_APB1Periph_I2C1: I2C1 clock - * @arg RCC_APB1Periph_I2C2: I2C2 clock - * @arg RCC_APB1Periph_I2C3: I2C3 clock - * @arg RCC_APB1Periph_CAN1: CAN1 clock - * @arg RCC_APB1Periph_CAN2: CAN2 clock - * @arg RCC_APB1Periph_PWR: PWR clock - * @arg RCC_APB1Periph_DAC: DAC clock - * @arg RCC_APB1Periph_UART7: UART7 clock - * @arg RCC_APB1Periph_UART8: UART8 clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->APB1ENR |= RCC_APB1Periph; - } - else - { - RCC->APB1ENR &= ~RCC_APB1Periph; - } -} - -/** - * @brief Enables or disables the High Speed APB (APB2) peripheral clock. - * @note After reset, the peripheral clock (used for registers read/write access) - * is disabled and the application software has to enable this clock before - * using it. - * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_APB2Periph_TIM1: TIM1 clock - * @arg RCC_APB2Periph_TIM8: TIM8 clock - * @arg RCC_APB2Periph_USART1: USART1 clock - * @arg RCC_APB2Periph_USART6: USART6 clock - * @arg RCC_APB2Periph_ADC1: ADC1 clock - * @arg RCC_APB2Periph_ADC2: ADC2 clock - * @arg RCC_APB2Periph_ADC3: ADC3 clock - * @arg RCC_APB2Periph_SDIO: SDIO clock - * @arg RCC_APB2Periph_SPI1: SPI1 clock - * @arg RCC_APB2Periph_SPI4: SPI4 clock - * @arg RCC_APB2Periph_SYSCFG: SYSCFG clock - * @arg RCC_APB2Periph_TIM9: TIM9 clock - * @arg RCC_APB2Periph_TIM10: TIM10 clock - * @arg RCC_APB2Periph_TIM11: TIM11 clock - * @arg RCC_APB2Periph_SPI5: SPI5 clock - * @arg RCC_APB2Periph_SPI6: SPI6 clock - * @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 Forces or releases AHB1 peripheral reset. - * @param RCC_AHB1Periph: specifies the AHB1 peripheral to reset. - * This parameter can be any combination of the following values: - * @arg RCC_AHB1Periph_GPIOA: GPIOA clock - * @arg RCC_AHB1Periph_GPIOB: GPIOB clock - * @arg RCC_AHB1Periph_GPIOC: GPIOC clock - * @arg RCC_AHB1Periph_GPIOD: GPIOD clock - * @arg RCC_AHB1Periph_GPIOE: GPIOE clock - * @arg RCC_AHB1Periph_GPIOF: GPIOF clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOI: GPIOI clock - * @arg RCC_AHB1Periph_CRC: CRC clock - * @arg RCC_AHB1Periph_DMA1: DMA1 clock - * @arg RCC_AHB1Periph_DMA2: DMA2 clock - * @arg RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock - * @arg RCC_AHB1Periph_OTG_HS: USB OTG HS clock - * - * @param NewState: new state of the specified peripheral reset. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB1PeriphResetCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB1_RESET_PERIPH(RCC_AHB1Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB1RSTR |= RCC_AHB1Periph; - } - else - { - RCC->AHB1RSTR &= ~RCC_AHB1Periph; - } -} - -/** - * @brief Forces or releases AHB2 peripheral reset. - * @param RCC_AHB2Periph: specifies the AHB2 peripheral to reset. - * This parameter can be any combination of the following values: - * @arg RCC_AHB2Periph_DCMI: DCMI clock - * @arg RCC_AHB2Periph_CRYP: CRYP clock - * @arg RCC_AHB2Periph_HASH: HASH clock - * @arg RCC_AHB2Periph_RNG: RNG clock - * @arg RCC_AHB2Periph_OTG_FS: USB OTG FS clock - * @param NewState: new state of the specified peripheral reset. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB2PeriphResetCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB2RSTR |= RCC_AHB2Periph; - } - else - { - RCC->AHB2RSTR &= ~RCC_AHB2Periph; - } -} - -/** - * @brief Forces or releases AHB3 peripheral reset. - * @param RCC_AHB3Periph: specifies the AHB3 peripheral to reset. - * This parameter must be: RCC_AHB3Periph_FSMC - * - * @param NewState: new state of the specified peripheral reset. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB3PeriphResetCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB3_PERIPH(RCC_AHB3Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - RCC->AHB3RSTR |= RCC_AHB3Periph; - } - else - { - RCC->AHB3RSTR &= ~RCC_AHB3Periph; - } -} - -/** - * @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: TIM2 clock - * @arg RCC_APB1Periph_TIM3: TIM3 clock - * @arg RCC_APB1Periph_TIM4: TIM4 clock - * @arg RCC_APB1Periph_TIM5: TIM5 clock - * @arg RCC_APB1Periph_TIM6: TIM6 clock - * @arg RCC_APB1Periph_TIM7: TIM7 clock - * @arg RCC_APB1Periph_TIM12: TIM12 clock - * @arg RCC_APB1Periph_TIM13: TIM13 clock - * @arg RCC_APB1Periph_TIM14: TIM14 clock - * @arg RCC_APB1Periph_WWDG: WWDG clock - * @arg RCC_APB1Periph_SPI2: SPI2 clock - * @arg RCC_APB1Periph_SPI3: SPI3 clock - * @arg RCC_APB1Periph_USART2: USART2 clock - * @arg RCC_APB1Periph_USART3: USART3 clock - * @arg RCC_APB1Periph_UART4: UART4 clock - * @arg RCC_APB1Periph_UART5: UART5 clock - * @arg RCC_APB1Periph_I2C1: I2C1 clock - * @arg RCC_APB1Periph_I2C2: I2C2 clock - * @arg RCC_APB1Periph_I2C3: I2C3 clock - * @arg RCC_APB1Periph_CAN1: CAN1 clock - * @arg RCC_APB1Periph_CAN2: CAN2 clock - * @arg RCC_APB1Periph_PWR: PWR clock - * @arg RCC_APB1Periph_DAC: DAC clock - * @arg RCC_APB1Periph_UART7: UART7 clock - * @arg RCC_APB1Periph_UART8: UART8 clock - * @param NewState: new state of the specified peripheral reset. - * 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 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_TIM1: TIM1 clock - * @arg RCC_APB2Periph_TIM8: TIM8 clock - * @arg RCC_APB2Periph_USART1: USART1 clock - * @arg RCC_APB2Periph_USART6: USART6 clock - * @arg RCC_APB2Periph_ADC1: ADC1 clock - * @arg RCC_APB2Periph_ADC2: ADC2 clock - * @arg RCC_APB2Periph_ADC3: ADC3 clock - * @arg RCC_APB2Periph_SDIO: SDIO clock - * @arg RCC_APB2Periph_SPI1: SPI1 clock - * @arg RCC_APB2Periph_SPI4: SPI4 clock - * @arg RCC_APB2Periph_SYSCFG: SYSCFG clock - * @arg RCC_APB2Periph_TIM9: TIM9 clock - * @arg RCC_APB2Periph_TIM10: TIM10 clock - * @arg RCC_APB2Periph_TIM11: TIM11 clock - * @arg RCC_APB2Periph_SPI5: SPI5 clock - * @arg RCC_APB2Periph_SPI6: SPI6 clock - * @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_RESET_PERIPH(RCC_APB2Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->APB2RSTR |= RCC_APB2Periph; - } - else - { - RCC->APB2RSTR &= ~RCC_APB2Periph; - } -} - -/** - * @brief Enables or disables the AHB1 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @param RCC_AHBPeriph: specifies the AHB1 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_AHB1Periph_GPIOA: GPIOA clock - * @arg RCC_AHB1Periph_GPIOB: GPIOB clock - * @arg RCC_AHB1Periph_GPIOC: GPIOC clock - * @arg RCC_AHB1Periph_GPIOD: GPIOD clock - * @arg RCC_AHB1Periph_GPIOE: GPIOE clock - * @arg RCC_AHB1Periph_GPIOF: GPIOF clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOG: GPIOG clock - * @arg RCC_AHB1Periph_GPIOI: GPIOI clock - * @arg RCC_AHB1Periph_CRC: CRC clock - * @arg RCC_AHB1Periph_BKPSRAM: BKPSRAM interface clock - * @arg RCC_AHB1Periph_DMA1: DMA1 clock - * @arg RCC_AHB1Periph_DMA2: DMA2 clock - * @arg RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock - * @arg RCC_AHB1Periph_ETH_MAC_Tx: Ethernet Transmission clock - * @arg RCC_AHB1Periph_ETH_MAC_Rx: Ethernet Reception clock - * @arg RCC_AHB1Periph_ETH_MAC_PTP: Ethernet PTP clock - * @arg RCC_AHB1Periph_OTG_HS: USB OTG HS clock - * @arg RCC_AHB1Periph_OTG_HS_ULPI: USB OTG HS ULPI clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB1_LPMODE_PERIPH(RCC_AHB1Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->AHB1LPENR |= RCC_AHB1Periph; - } - else - { - RCC->AHB1LPENR &= ~RCC_AHB1Periph; - } -} - -/** - * @brief Enables or disables the AHB2 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @param RCC_AHBPeriph: specifies the AHB2 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_AHB2Periph_DCMI: DCMI clock - * @arg RCC_AHB2Periph_CRYP: CRYP clock - * @arg RCC_AHB2Periph_HASH: HASH clock - * @arg RCC_AHB2Periph_RNG: RNG clock - * @arg RCC_AHB2Periph_OTG_FS: USB OTG FS clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB2PeriphClockLPModeCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->AHB2LPENR |= RCC_AHB2Periph; - } - else - { - RCC->AHB2LPENR &= ~RCC_AHB2Periph; - } -} - -/** - * @brief Enables or disables the AHB3 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @param RCC_AHBPeriph: specifies the AHB3 peripheral to gates its clock. - * This parameter must be: RCC_AHB3Periph_FSMC - * - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_AHB3PeriphClockLPModeCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RCC_AHB3_PERIPH(RCC_AHB3Periph)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - if (NewState != DISABLE) - { - RCC->AHB3LPENR |= RCC_AHB3Periph; - } - else - { - RCC->AHB3LPENR &= ~RCC_AHB3Periph; - } -} - -/** - * @brief Enables or disables the APB1 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @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: TIM2 clock - * @arg RCC_APB1Periph_TIM3: TIM3 clock - * @arg RCC_APB1Periph_TIM4: TIM4 clock - * @arg RCC_APB1Periph_TIM5: TIM5 clock - * @arg RCC_APB1Periph_TIM6: TIM6 clock - * @arg RCC_APB1Periph_TIM7: TIM7 clock - * @arg RCC_APB1Periph_TIM12: TIM12 clock - * @arg RCC_APB1Periph_TIM13: TIM13 clock - * @arg RCC_APB1Periph_TIM14: TIM14 clock - * @arg RCC_APB1Periph_WWDG: WWDG clock - * @arg RCC_APB1Periph_SPI2: SPI2 clock - * @arg RCC_APB1Periph_SPI3: SPI3 clock - * @arg RCC_APB1Periph_USART2: USART2 clock - * @arg RCC_APB1Periph_USART3: USART3 clock - * @arg RCC_APB1Periph_UART4: UART4 clock - * @arg RCC_APB1Periph_UART5: UART5 clock - * @arg RCC_APB1Periph_I2C1: I2C1 clock - * @arg RCC_APB1Periph_I2C2: I2C2 clock - * @arg RCC_APB1Periph_I2C3: I2C3 clock - * @arg RCC_APB1Periph_CAN1: CAN1 clock - * @arg RCC_APB1Periph_CAN2: CAN2 clock - * @arg RCC_APB1Periph_PWR: PWR clock - * @arg RCC_APB1Periph_DAC: DAC clock - * @arg RCC_APB1Periph_UART7: UART7 clock - * @arg RCC_APB1Periph_UART8: UART8 clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_APB1PeriphClockLPModeCmd(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->APB1LPENR |= RCC_APB1Periph; - } - else - { - RCC->APB1LPENR &= ~RCC_APB1Periph; - } -} - -/** - * @brief Enables or disables the APB2 peripheral clock during Low Power (Sleep) mode. - * @note Peripheral clock gating in SLEEP mode can be used to further reduce - * power consumption. - * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. - * @note By default, all peripheral clocks are enabled during SLEEP mode. - * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. - * This parameter can be any combination of the following values: - * @arg RCC_APB2Periph_TIM1: TIM1 clock - * @arg RCC_APB2Periph_TIM8: TIM8 clock - * @arg RCC_APB2Periph_USART1: USART1 clock - * @arg RCC_APB2Periph_USART6: USART6 clock - * @arg RCC_APB2Periph_ADC1: ADC1 clock - * @arg RCC_APB2Periph_ADC2: ADC2 clock - * @arg RCC_APB2Periph_ADC3: ADC3 clock - * @arg RCC_APB2Periph_SDIO: SDIO clock - * @arg RCC_APB2Periph_SPI1: SPI1 clock - * @arg RCC_APB2Periph_SPI4: SPI4 clock - * @arg RCC_APB2Periph_SYSCFG: SYSCFG clock - * @arg RCC_APB2Periph_TIM9: TIM9 clock - * @arg RCC_APB2Periph_TIM10: TIM10 clock - * @arg RCC_APB2Periph_TIM11: TIM11 clock - * @arg RCC_APB2Periph_SPI5: SPI5 clock - * @arg RCC_APB2Periph_SPI6: SPI6 clock - * @param NewState: new state of the specified peripheral clock. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RCC_APB2PeriphClockLPModeCmd(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->APB2LPENR |= RCC_APB2Periph; - } - else - { - RCC->APB2LPENR &= ~RCC_APB2Periph; - } -} - -/** - * @} - */ - -/** @defgroup RCC_Group4 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified RCC interrupts. - * @param RCC_IT: specifies the RCC interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg RCC_IT_LSIRDY: LSI ready interrupt - * @arg RCC_IT_LSERDY: LSE ready interrupt - * @arg RCC_IT_HSIRDY: HSI ready interrupt - * @arg RCC_IT_HSERDY: HSE ready interrupt - * @arg RCC_IT_PLLRDY: main PLL ready interrupt - * @arg RCC_IT_PLLI2SRDY: PLLI2S 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[14:8] bits to enable the selected interrupts */ - *(__IO uint8_t *) CIR_BYTE2_ADDRESS |= RCC_IT; - } - else - { - /* Perform Byte access to RCC_CIR[14:8] bits to disable the selected interrupts */ - *(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT; - } -} - -/** - * @brief Checks whether the specified RCC flag is set or not. - * @param RCC_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready - * @arg RCC_FLAG_HSERDY: HSE oscillator clock ready - * @arg RCC_FLAG_PLLRDY: main PLL clock ready - * @arg RCC_FLAG_PLLI2SRDY: PLLI2S clock ready - * @arg RCC_FLAG_LSERDY: LSE oscillator clock ready - * @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready - * @arg RCC_FLAG_BORRST: POR/PDR or BOR reset - * @arg RCC_FLAG_PINRST: Pin reset - * @arg RCC_FLAG_PORRST: POR/PDR reset - * @arg RCC_FLAG_SFTRST: Software reset - * @arg RCC_FLAG_IWDGRST: Independent Watchdog reset - * @arg RCC_FLAG_WWDGRST: Window Watchdog reset - * @arg RCC_FLAG_LPWRRST: Low Power reset - * @retval The new state of 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. - * 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 |= RCC_CSR_RMVF; -} - -/** - * @brief Checks whether the specified RCC interrupt has occurred or not. - * @param RCC_IT: specifies the RCC interrupt source to check. - * This parameter can be one of the following values: - * @arg RCC_IT_LSIRDY: LSI ready interrupt - * @arg RCC_IT_LSERDY: LSE ready interrupt - * @arg RCC_IT_HSIRDY: HSI ready interrupt - * @arg RCC_IT_HSERDY: HSE ready interrupt - * @arg RCC_IT_PLLRDY: main PLL ready interrupt - * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt - * @arg RCC_IT_CSS: Clock Security System interrupt - * @retval The new state of 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. - * This parameter can be any combination of the following values: - * @arg RCC_IT_LSIRDY: LSI ready interrupt - * @arg RCC_IT_LSERDY: LSE ready interrupt - * @arg RCC_IT_HSIRDY: HSI ready interrupt - * @arg RCC_IT_HSERDY: HSE ready interrupt - * @arg RCC_IT_PLLRDY: main PLL ready interrupt - * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt - * @arg RCC_IT_CSS: Clock Security System interrupt - * @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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c deleted file mode 100644 index 6d0e65d9..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c +++ /dev/null @@ -1,397 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rng.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Random Number Generator (RNG) peripheral: - * + Initialization and Configuration - * + Get 32 bit Random number - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable The RNG controller clock using - RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE) function. - - (#) Activate the RNG peripheral using RNG_Cmd() function. - - (#) Wait until the 32 bit Random number Generator contains a valid random data - (using polling/interrupt mode). For more details, refer to "Interrupts and - flags management functions" module description. - - (#) Get the 32 bit Random number using RNG_GetRandomNumber() function - - (#) To get another 32 bit Random number, go to step 3. - - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_rng.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup RNG - * @brief RNG driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup RNG_Private_Functions - * @{ - */ - -/** @defgroup RNG_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides functions allowing to - (+) Initialize the RNG peripheral - (+) Enable or disable the RNG peripheral - -@endverbatim - * @{ - */ - -/** - * @brief De-initializes the RNG peripheral registers to their default reset values. - * @param None - * @retval None - */ -void RNG_DeInit(void) -{ - /* Enable RNG reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, ENABLE); - - /* Release RNG from reset state */ - RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, DISABLE); -} - -/** - * @brief Enables or disables the RNG peripheral. - * @param NewState: new state of the RNG peripheral. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RNG_Cmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the RNG */ - RNG->CR |= RNG_CR_RNGEN; - } - else - { - /* Disable the RNG */ - RNG->CR &= ~RNG_CR_RNGEN; - } -} -/** - * @} - */ - -/** @defgroup RNG_Group2 Get 32 bit Random number function - * @brief Get 32 bit Random number function - * - -@verbatim - =============================================================================== - ##### Get 32 bit Random number function ##### - =============================================================================== - [..] This section provides a function allowing to get the 32 bit Random number - - (@) Before to call this function you have to wait till DRDY flag is set, - using RNG_GetFlagStatus(RNG_FLAG_DRDY) function. - -@endverbatim - * @{ - */ - - -/** - * @brief Returns a 32-bit random number. - * - * @note Before to call this function you have to wait till DRDY (data ready) - * flag is set, using RNG_GetFlagStatus(RNG_FLAG_DRDY) function. - * @note Each time the the Random number data is read (using RNG_GetRandomNumber() - * function), the RNG_FLAG_DRDY flag is automatically cleared. - * @note In the case of a seed error, the generation of random numbers is - * interrupted for as long as the SECS bit is '1'. If a number is - * available in the RNG_DR register, it must not be used because it may - * not have enough entropy. In this case, it is recommended to clear the - * SEIS bit(using RNG_ClearFlag(RNG_FLAG_SECS) function), then disable - * and enable the RNG peripheral (using RNG_Cmd() function) to - * reinitialize and restart the RNG. - * @note In the case of a clock error, the RNG is no more able to generate - * random numbers because the PLL48CLK clock is not correct. User have - * to check that the clock controller is correctly configured to provide - * the RNG clock and clear the CEIS bit (using RNG_ClearFlag(RNG_FLAG_CECS) - * function) . The clock error has no impact on the previously generated - * random numbers, and the RNG_DR register contents can be used. - * - * @param None - * @retval 32-bit random number. - */ -uint32_t RNG_GetRandomNumber(void) -{ - /* Return the 32 bit random number from the DR register */ - return RNG->DR; -} - - -/** - * @} - */ - -/** @defgroup RNG_Group3 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure the RNG Interrupts and - to get the status and clear flags and Interrupts pending bits. - - [..] The RNG provides 3 Interrupts sources and 3 Flags: - - *** Flags : *** - =============== - [..] - (#) RNG_FLAG_DRDY : In the case of the RNG_DR register contains valid - random data. it is cleared by reading the valid data(using - RNG_GetRandomNumber() function). - - (#) RNG_FLAG_CECS : In the case of a seed error detection. - - (#) RNG_FLAG_SECS : In the case of a clock error detection. - - *** Interrupts *** - ================== - [..] If enabled, an RNG interrupt is pending : - - (#) In the case of the RNG_DR register contains valid random data. - This interrupt source is cleared once the RNG_DR register has been read - (using RNG_GetRandomNumber() function) until a new valid value is - computed; or - (#) In the case of a seed error : One of the following faulty sequences has - been detected: - (++) More than 64 consecutive bits at the same value (0 or 1) - (++) More than 32 consecutive alternance of 0 and 1 (0101010101...01) - This interrupt source is cleared using RNG_ClearITPendingBit(RNG_IT_SEI) - function; or - (#) In the case of a clock error : the PLL48CLK (RNG peripheral clock source) - was not correctly detected (fPLL48CLK< fHCLK/16). This interrupt source is - cleared using RNG_ClearITPendingBit(RNG_IT_CEI) function. - -@- note In this case, User have to check that the clock controller is - correctly configured to provide the RNG clock. - - *** Managing the RNG controller events : *** - ============================================ - [..] The user should identify which mode will be used in his application to manage - the RNG controller events: Polling mode or Interrupt mode. - - (#) In the Polling Mode it is advised to use the following functions: - (++) RNG_GetFlagStatus() : to check if flags events occur. - (++) RNG_ClearFlag() : to clear the flags events. - - -@@- RNG_FLAG_DRDY can not be cleared by RNG_ClearFlag(). it is cleared only - by reading the Random number data. - - (#) In the Interrupt Mode it is advised to use the following functions: - (++) RNG_ITConfig() : to enable or disable the interrupt source. - (++) RNG_GetITStatus() : to check if Interrupt occurs. - (++) RNG_ClearITPendingBit() : to clear the Interrupt pending Bit - (corresponding Flag). - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the RNG interrupt. - * @note The RNG provides 3 interrupt sources, - * - Computed data is ready event (DRDY), and - * - Seed error Interrupt (SEI) and - * - Clock error Interrupt (CEI), - * all these interrupts sources are enabled by setting the IE bit in - * CR register. However, each interrupt have its specific status bit - * (see RNG_GetITStatus() function) and clear bit except the DRDY event - * (see RNG_ClearITPendingBit() function). - * @param NewState: new state of the RNG interrupt. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RNG_ITConfig(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the RNG interrupt */ - RNG->CR |= RNG_CR_IE; - } - else - { - /* Disable the RNG interrupt */ - RNG->CR &= ~RNG_CR_IE; - } -} - -/** - * @brief Checks whether the specified RNG flag is set or not. - * @param RNG_FLAG: specifies the RNG flag to check. - * This parameter can be one of the following values: - * @arg RNG_FLAG_DRDY: Data Ready flag. - * @arg RNG_FLAG_CECS: Clock Error Current flag. - * @arg RNG_FLAG_SECS: Seed Error Current flag. - * @retval The new state of RNG_FLAG (SET or RESET). - */ -FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG) -{ - FlagStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_RNG_GET_FLAG(RNG_FLAG)); - - /* Check the status of the specified RNG flag */ - if ((RNG->SR & RNG_FLAG) != (uint8_t)RESET) - { - /* RNG_FLAG is set */ - bitstatus = SET; - } - else - { - /* RNG_FLAG is reset */ - bitstatus = RESET; - } - /* Return the RNG_FLAG status */ - return bitstatus; -} - - -/** - * @brief Clears the RNG flags. - * @param RNG_FLAG: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg RNG_FLAG_CECS: Clock Error Current flag. - * @arg RNG_FLAG_SECS: Seed Error Current flag. - * @note RNG_FLAG_DRDY can not be cleared by RNG_ClearFlag() function. - * This flag is cleared only by reading the Random number data (using - * RNG_GetRandomNumber() function). - * @retval None - */ -void RNG_ClearFlag(uint8_t RNG_FLAG) -{ - /* Check the parameters */ - assert_param(IS_RNG_CLEAR_FLAG(RNG_FLAG)); - /* Clear the selected RNG flags */ - RNG->SR = ~(uint32_t)(((uint32_t)RNG_FLAG) << 4); -} - -/** - * @brief Checks whether the specified RNG interrupt has occurred or not. - * @param RNG_IT: specifies the RNG interrupt source to check. - * This parameter can be one of the following values: - * @arg RNG_IT_CEI: Clock Error Interrupt. - * @arg RNG_IT_SEI: Seed Error Interrupt. - * @retval The new state of RNG_IT (SET or RESET). - */ -ITStatus RNG_GetITStatus(uint8_t RNG_IT) -{ - ITStatus bitstatus = RESET; - /* Check the parameters */ - assert_param(IS_RNG_GET_IT(RNG_IT)); - - /* Check the status of the specified RNG interrupt */ - if ((RNG->SR & RNG_IT) != (uint8_t)RESET) - { - /* RNG_IT is set */ - bitstatus = SET; - } - else - { - /* RNG_IT is reset */ - bitstatus = RESET; - } - /* Return the RNG_IT status */ - return bitstatus; -} - - -/** - * @brief Clears the RNG interrupt pending bit(s). - * @param RNG_IT: specifies the RNG interrupt pending bit(s) to clear. - * This parameter can be any combination of the following values: - * @arg RNG_IT_CEI: Clock Error Interrupt. - * @arg RNG_IT_SEI: Seed Error Interrupt. - * @retval None - */ -void RNG_ClearITPendingBit(uint8_t RNG_IT) -{ - /* Check the parameters */ - assert_param(IS_RNG_IT(RNG_IT)); - - /* Clear the selected RNG interrupt pending bit */ - RNG->SR = (uint8_t)~RNG_IT; -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c deleted file mode 100644 index d4b22d29..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c +++ /dev/null @@ -1,2761 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_rtc.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Real-Time Clock (RTC) peripheral: - * + Initialization - * + Calendar (Time and Date) configuration - * + Alarms (Alarm A and Alarm B) configuration - * + WakeUp Timer configuration - * + Daylight Saving configuration - * + Output pin Configuration - * + Coarse digital Calibration configuration - * + Smooth digital Calibration configuration - * + TimeStamp configuration - * + Tampers configuration - * + Backup Data Registers configuration - * + Shift control synchronisation - * + RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### Backup Domain Operating Condition ##### - =================================================================== - [..] The real-time clock (RTC), the RTC backup registers, and the backup - SRAM (BKP SRAM) can be powered from the VBAT voltage when the main - VDD supply is powered off. - To retain the content of the RTC backup registers, backup SRAM, and supply - the RTC when VDD is turned off, VBAT pin can be connected to an optional - standby voltage supplied by a battery or by another source. - - [..] To allow the RTC to operate even when the main digital supply (VDD) is turned - off, the VBAT pin powers the following blocks: - (#) The RTC - (#) The LSE oscillator - (#) The backup SRAM when the low power backup regulator is enabled - (#) PC13 to PC15 I/Os, plus PI8 I/O (when available) - - [..] When the backup domain is supplied by VDD (analog switch connected to VDD), - the following functions are available: - (#) PC14 and PC15 can be used as either GPIO or LSE pins - (#) PC13 can be used as a GPIO or as the RTC_AF1 pin - (#) PI8 can be used as a GPIO or as the RTC_AF2 pin - - [..] When the backup domain is supplied by VBAT (analog switch connected to VBAT - because VDD is not present), the following functions are available: - (#) PC14 and PC15 can be used as LSE pins only - (#) PC13 can be used as the RTC_AF1 pin - (#) PI8 can be used as the RTC_AF2 pin - - - ##### Backup Domain Reset ##### - =================================================================== - [..] The backup domain reset sets all RTC registers and the RCC_BDCR register - to their reset values. The BKPSRAM is not affected by this reset. The only - way of resetting the BKPSRAM is through the Flash interface by requesting - a protection level change from 1 to 0. - [..] A backup domain reset is generated when one of the following events occurs: - (#) Software reset, triggered by setting the BDRST bit in the - RCC Backup domain control register (RCC_BDCR). You can use the - RCC_BackupResetCmd(). - (#) VDD or VBAT power on, if both supplies have previously been powered off. - - - ##### Backup Domain Access ##### - =================================================================== - [..] After reset, the backup domain (RTC registers, RTC backup data - registers and backup SRAM) is protected against possible unwanted write - accesses. - [..] To enable access to the RTC Domain and RTC registers, proceed as follows: - (+) Enable the Power Controller (PWR) APB1 interface clock using the - RCC_APB1PeriphClockCmd() function. - (+) Enable access to RTC domain using the PWR_BackupAccessCmd() function. - (+) Select the RTC clock source using the RCC_RTCCLKConfig() function. - (+) Enable RTC Clock using the RCC_RTCCLKCmd() function. - - - ##### How to use RTC Driver ##### - =================================================================== - [..] - (+) Enable the RTC domain access (see description in the section above) - (+) Configure the RTC Prescaler (Asynchronous and Synchronous) and RTC hour - format using the RTC_Init() function. - - *** Time and Date configuration *** - =================================== - [..] - (+) To configure the RTC Calendar (Time and Date) use the RTC_SetTime() - and RTC_SetDate() functions. - (+) To read the RTC Calendar, use the RTC_GetTime() and RTC_GetDate() functions. - (+) Use the RTC_DayLightSavingConfig() function to add or sub one - hour to the RTC Calendar. - - *** Alarm configuration *** - =========================== - [..] - (+) To configure the RTC Alarm use the RTC_SetAlarm() function. - (+) Enable the selected RTC Alarm using the RTC_AlarmCmd() function - (+) To read the RTC Alarm, use the RTC_GetAlarm() function. - (+) To read the RTC alarm SubSecond, use the RTC_GetAlarmSubSecond() function. - - *** RTC Wakeup configuration *** - ================================ - [..] - (+) Configure the RTC Wakeup Clock source use the RTC_WakeUpClockConfig() - function. - (+) Configure the RTC WakeUp Counter using the RTC_SetWakeUpCounter() function - (+) Enable the RTC WakeUp using the RTC_WakeUpCmd() function - (+) To read the RTC WakeUp Counter register, use the RTC_GetWakeUpCounter() - function. - - *** Outputs configuration *** - ============================= - [..] The RTC has 2 different outputs: - (+) AFO_ALARM: this output is used to manage the RTC Alarm A, Alarm B - and WaKeUp signals. To output the selected RTC signal on RTC_AF1 pin, use the - RTC_OutputConfig() function. - (+) AFO_CALIB: this output is 512Hz signal or 1Hz. To output the RTC Clock on - RTC_AF1 pin, use the RTC_CalibOutputCmd() function. - - *** Smooth digital Calibration configuration *** - ================================================ - [..] - (+) Configure the RTC Original Digital Calibration Value and the corresponding - calibration cycle period (32s,16s and 8s) using the RTC_SmoothCalibConfig() - function. - - *** Coarse digital Calibration configuration *** - ================================================ - [..] - (+) Configure the RTC Coarse Calibration Value and the corresponding - sign using the RTC_CoarseCalibConfig() function. - (+) Enable the RTC Coarse Calibration using the RTC_CoarseCalibCmd() function - - *** TimeStamp configuration *** - =============================== - [..] - (+) Configure the RTC_AF1 trigger and enables the RTC TimeStamp using the RTC - _TimeStampCmd() function. - (+) To read the RTC TimeStamp Time and Date register, use the RTC_GetTimeStamp() - function. - (+) To read the RTC TimeStamp SubSecond register, use the - RTC_GetTimeStampSubSecond() function. - (+) The TAMPER1 alternate function can be mapped either to RTC_AF1(PC13) - or RTC_AF2 (PI8) depending on the value of TAMP1INSEL bit in - RTC_TAFCR register. You can use the RTC_TamperPinSelection() function to - select the corresponding pin. - - *** Tamper configuration *** - ============================ - [..] - (+) Enable the RTC Tamper using the RTC_TamperCmd() function. - (+) Configure the Tamper filter count using RTC_TamperFilterConfig() - function. - (+) Configure the RTC Tamper trigger Edge or Level according to the Tamper - filter (if equal to 0 Edge else Level) value using the RTC_TamperConfig() - function. - (+) Configure the Tamper sampling frequency using RTC_TamperSamplingFreqConfig() - function. - (+) Configure the Tamper precharge or discharge duration using - RTC_TamperPinsPrechargeDuration() function. - (+) Enable the Tamper Pull-UP using RTC_TamperPullUpDisableCmd() function. - (+) Enable the Time stamp on Tamper detection event using - TC_TSOnTamperDetecCmd() function. - (+) The TIMESTAMP alternate function can be mapped to either RTC_AF1 - or RTC_AF2 depending on the value of the TSINSEL bit in the RTC_TAFCR - register. You can use the RTC_TimeStampPinSelection() function to select - the corresponding pin. - - *** Backup Data Registers configuration *** - =========================================== - [..] - (+) To write to the RTC Backup Data registers, use the RTC_WriteBackupRegister() - function. - (+) To read the RTC Backup Data registers, use the RTC_ReadBackupRegister() - function. - - - ##### RTC and low power modes ##### - =================================================================== - [..] The MCU can be woken up from a low power mode by an RTC alternate - function. - [..] The RTC alternate functions are the RTC alarms (Alarm A and Alarm B), - RTC wakeup, RTC tamper event detection and RTC time stamp event detection. - These RTC alternate functions can wake up the system from the Stop and - Standby lowpower modes. - [..] The system can also wake up from low power modes without depending - on an external interrupt (Auto-wakeup mode), by using the RTC alarm - or the RTC wakeup events. - [..] The RTC provides a programmable time base for waking up from the - Stop or Standby mode at regular intervals. - Wakeup from STOP and Standby modes is possible only when the RTC clock source - is LSE or LSI. - - - ##### Selection of RTC_AF1 alternate functions ##### - =================================================================== - [..] The RTC_AF1 pin (PC13) can be used for the following purposes: - (+) AFO_ALARM output - (+) AFO_CALIB output - (+) AFI_TAMPER - (+) AFI_TIMESTAMP - - [..] - +-------------------------------------------------------------------------------------------------------------+ - | Pin |AFO_ALARM |AFO_CALIB |AFI_TAMPER |AFI_TIMESTAMP | TAMP1INSEL | TSINSEL |ALARMOUTTYPE | - | configuration | ENABLED | ENABLED | ENABLED | ENABLED |TAMPER1 pin |TIMESTAMP pin | AFO_ALARM | - | and function | | | | | selection | selection |Configuration | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | Alarm out | | | | | Don't | Don't | | - | output OD | 1 |Don't care|Don't care | Don't care | care | care | 0 | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | Alarm out | | | | | Don't | Don't | | - | output PP | 1 |Don't care|Don't care | Don't care | care | care | 1 | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | Calibration out | | | | | Don't | Don't | | - | output PP | 0 | 1 |Don't care | Don't care | care | care | Don't care | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | TAMPER input | | | | | | Don't | | - | floating | 0 | 0 | 1 | 0 | 0 | care | Don't care | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | TIMESTAMP and | | | | | | | | - | TAMPER input | 0 | 0 | 1 | 1 | 0 | 0 | Don't care | - | floating | | | | | | | | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | TIMESTAMP input | | | | | Don't | | | - | floating | 0 | 0 | 0 | 1 | care | 0 | Don't care | - |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| - | Standard GPIO | 0 | 0 | 0 | 0 | Don't care | Don't care | Don't care | - +-------------------------------------------------------------------------------------------------------------+ - - - ##### Selection of RTC_AF2 alternate functions ##### - =================================================================== - [..] The RTC_AF2 pin (PI8) can be used for the following purposes: - (+) AFI_TAMPER - (+) AFI_TIMESTAMP - [..] - +---------------------------------------------------------------------------------------+ - | Pin |AFI_TAMPER |AFI_TIMESTAMP | TAMP1INSEL | TSINSEL |ALARMOUTTYPE | - | configuration | ENABLED | ENABLED |TAMPER1 pin |TIMESTAMP pin | AFO_ALARM | - | and function | | | selection | selection |Configuration | - |-----------------|-----------|--------------|------------|--------------|--------------| - | TAMPER input | | | | Don't | | - | floating | 1 | 0 | 1 | care | Don't care | - |-----------------|-----------|--------------|------------|--------------|--------------| - | TIMESTAMP and | | | | | | - | TAMPER input | 1 | 1 | 1 | 1 | Don't care | - | floating | | | | | | - |-----------------|-----------|--------------|------------|--------------|--------------| - | TIMESTAMP input | | | Don't | | | - | floating | 0 | 1 | care | 1 | Don't care | - |-----------------|-----------|--------------|------------|--------------|--------------| - | Standard GPIO | 0 | 0 | Don't care | Don't care | Don't care | - +---------------------------------------------------------------------------------------+ - - -@endverbatim - - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_rtc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup RTC - * @brief RTC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* Masks Definition */ -#define RTC_TR_RESERVED_MASK ((uint32_t)0x007F7F7F) -#define RTC_DR_RESERVED_MASK ((uint32_t)0x00FFFF3F) -#define RTC_INIT_MASK ((uint32_t)0xFFFFFFFF) -#define RTC_RSF_MASK ((uint32_t)0xFFFFFF5F) -#define RTC_FLAGS_MASK ((uint32_t)(RTC_FLAG_TSOVF | RTC_FLAG_TSF | RTC_FLAG_WUTF | \ - RTC_FLAG_ALRBF | RTC_FLAG_ALRAF | RTC_FLAG_INITF | \ - RTC_FLAG_RSF | RTC_FLAG_INITS | RTC_FLAG_WUTWF | \ - RTC_FLAG_ALRBWF | RTC_FLAG_ALRAWF | RTC_FLAG_TAMP1F | \ - RTC_FLAG_RECALPF | RTC_FLAG_SHPF)) - -#define INITMODE_TIMEOUT ((uint32_t) 0x00010000) -#define SYNCHRO_TIMEOUT ((uint32_t) 0x00020000) -#define RECALPF_TIMEOUT ((uint32_t) 0x00020000) -#define SHPF_TIMEOUT ((uint32_t) 0x00001000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -static uint8_t RTC_ByteToBcd2(uint8_t Value); -static uint8_t RTC_Bcd2ToByte(uint8_t Value); - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup RTC_Private_Functions - * @{ - */ - -/** @defgroup RTC_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to initialize and configure the RTC - Prescaler (Synchronous and Asynchronous), RTC Hour format, disable RTC registers - Write protection, enter and exit the RTC initialization mode, RTC registers - synchronization check and reference clock detection enable. - - (#) The RTC Prescaler is programmed to generate the RTC 1Hz time base. It is - split into 2 programmable prescalers to minimize power consumption. - (++) A 7-bit asynchronous prescaler and A 13-bit synchronous prescaler. - (++) When both prescalers are used, it is recommended to configure the - asynchronous prescaler to a high value to minimize consumption. - - (#) All RTC registers are Write protected. Writing to the RTC registers - is enabled by writing a key into the Write Protection register, RTC_WPR. - - (#) To Configure the RTC Calendar, user application should enter initialization - mode. In this mode, the calendar counter is stopped and its value can be - updated. When the initialization sequence is complete, the calendar restarts - counting after 4 RTCCLK cycles. - - (#) To read the calendar through the shadow registers after Calendar initialization, - calendar update or after wakeup from low power modes the software must first - clear the RSF flag. The software must then wait until it is set again before - reading the calendar, which means that the calendar registers have been - correctly copied into the RTC_TR and RTC_DR shadow registers. - The RTC_WaitForSynchro() function implements the above software sequence - (RSF clear and RSF check). - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the RTC registers to their default reset values. - * @note This function doesn't reset the RTC Clock source and RTC Backup Data - * registers. - * @param None - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC registers are deinitialized - * - ERROR: RTC registers are not deinitialized - */ -ErrorStatus RTC_DeInit(void) -{ - __IO uint32_t wutcounter = 0x00; - uint32_t wutwfstatus = 0x00; - ErrorStatus status = ERROR; - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Reset TR, DR and CR registers */ - RTC->TR = (uint32_t)0x00000000; - RTC->DR = (uint32_t)0x00002101; - /* Reset All CR bits except CR[2:0] */ - RTC->CR &= (uint32_t)0x00000007; - - /* Wait till RTC WUTWF flag is set and if Time out is reached exit */ - do - { - wutwfstatus = RTC->ISR & RTC_ISR_WUTWF; - wutcounter++; - } while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00)); - - if ((RTC->ISR & RTC_ISR_WUTWF) == RESET) - { - status = ERROR; - } - else - { - /* Reset all RTC CR register bits */ - RTC->CR &= (uint32_t)0x00000000; - RTC->WUTR = (uint32_t)0x0000FFFF; - RTC->PRER = (uint32_t)0x007F00FF; - RTC->CALIBR = (uint32_t)0x00000000; - RTC->ALRMAR = (uint32_t)0x00000000; - RTC->ALRMBR = (uint32_t)0x00000000; - RTC->SHIFTR = (uint32_t)0x00000000; - RTC->CALR = (uint32_t)0x00000000; - RTC->ALRMASSR = (uint32_t)0x00000000; - RTC->ALRMBSSR = (uint32_t)0x00000000; - - /* Reset ISR register and exit initialization mode */ - RTC->ISR = (uint32_t)0x00000000; - - /* Reset Tamper and alternate functions configuration register */ - RTC->TAFCR = 0x00000000; - - if(RTC_WaitForSynchro() == ERROR) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Initializes the RTC registers according to the specified parameters - * in RTC_InitStruct. - * @param RTC_InitStruct: pointer to a RTC_InitTypeDef structure that contains - * the configuration information for the RTC peripheral. - * @note The RTC Prescaler register is write protected and can be written in - * initialization mode only. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC registers are initialized - * - ERROR: RTC registers are not initialized - */ -ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct) -{ - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_HOUR_FORMAT(RTC_InitStruct->RTC_HourFormat)); - assert_param(IS_RTC_ASYNCH_PREDIV(RTC_InitStruct->RTC_AsynchPrediv)); - assert_param(IS_RTC_SYNCH_PREDIV(RTC_InitStruct->RTC_SynchPrediv)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Clear RTC CR FMT Bit */ - RTC->CR &= ((uint32_t)~(RTC_CR_FMT)); - /* Set RTC_CR register */ - RTC->CR |= ((uint32_t)(RTC_InitStruct->RTC_HourFormat)); - - /* Configure the RTC PRER */ - RTC->PRER = (uint32_t)(RTC_InitStruct->RTC_SynchPrediv); - RTC->PRER |= (uint32_t)(RTC_InitStruct->RTC_AsynchPrediv << 16); - - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - status = SUCCESS; - } - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Fills each RTC_InitStruct member with its default value. - * @param RTC_InitStruct: pointer to a RTC_InitTypeDef structure which will be - * initialized. - * @retval None - */ -void RTC_StructInit(RTC_InitTypeDef* RTC_InitStruct) -{ - /* Initialize the RTC_HourFormat member */ - RTC_InitStruct->RTC_HourFormat = RTC_HourFormat_24; - - /* Initialize the RTC_AsynchPrediv member */ - RTC_InitStruct->RTC_AsynchPrediv = (uint32_t)0x7F; - - /* Initialize the RTC_SynchPrediv member */ - RTC_InitStruct->RTC_SynchPrediv = (uint32_t)0xFF; -} - -/** - * @brief Enables or disables the RTC registers write protection. - * @note All the RTC registers are write protected except for RTC_ISR[13:8], - * RTC_TAFCR and RTC_BKPxR. - * @note Writing a wrong key reactivates the write protection. - * @note The protection mechanism is not affected by system reset. - * @param NewState: new state of the write protection. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_WriteProtectionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - } - else - { - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - } -} - -/** - * @brief Enters the RTC Initialization mode. - * @note The RTC Initialization mode is write protected, use the - * RTC_WriteProtectionCmd(DISABLE) before calling this function. - * @param None - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC is in Init mode - * - ERROR: RTC is not in Init mode - */ -ErrorStatus RTC_EnterInitMode(void) -{ - __IO uint32_t initcounter = 0x00; - ErrorStatus status = ERROR; - uint32_t initstatus = 0x00; - - /* Check if the Initialization mode is set */ - if ((RTC->ISR & RTC_ISR_INITF) == (uint32_t)RESET) - { - /* Set the Initialization mode */ - RTC->ISR = (uint32_t)RTC_INIT_MASK; - - /* Wait till RTC is in INIT state and if Time out is reached exit */ - do - { - initstatus = RTC->ISR & RTC_ISR_INITF; - initcounter++; - } while((initcounter != INITMODE_TIMEOUT) && (initstatus == 0x00)); - - if ((RTC->ISR & RTC_ISR_INITF) != RESET) - { - status = SUCCESS; - } - else - { - status = ERROR; - } - } - else - { - status = SUCCESS; - } - - return (status); -} - -/** - * @brief Exits the RTC Initialization mode. - * @note When the initialization sequence is complete, the calendar restarts - * counting after 4 RTCCLK cycles. - * @note The RTC Initialization mode is write protected, use the - * RTC_WriteProtectionCmd(DISABLE) before calling this function. - * @param None - * @retval None - */ -void RTC_ExitInitMode(void) -{ - /* Exit Initialization mode */ - RTC->ISR &= (uint32_t)~RTC_ISR_INIT; -} - -/** - * @brief Waits until the RTC Time and Date registers (RTC_TR and RTC_DR) are - * synchronized with RTC APB clock. - * @note The RTC Resynchronization mode is write protected, use the - * RTC_WriteProtectionCmd(DISABLE) before calling this function. - * @note To read the calendar through the shadow registers after Calendar - * initialization, calendar update or after wakeup from low power modes - * the software must first clear the RSF flag. - * The software must then wait until it is set again before reading - * the calendar, which means that the calendar registers have been - * correctly copied into the RTC_TR and RTC_DR shadow registers. - * @param None - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC registers are synchronised - * - ERROR: RTC registers are not synchronised - */ -ErrorStatus RTC_WaitForSynchro(void) -{ - __IO uint32_t synchrocounter = 0; - ErrorStatus status = ERROR; - uint32_t synchrostatus = 0x00; - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Clear RSF flag */ - RTC->ISR &= (uint32_t)RTC_RSF_MASK; - - /* Wait the registers to be synchronised */ - do - { - synchrostatus = RTC->ISR & RTC_ISR_RSF; - synchrocounter++; - } while((synchrocounter != SYNCHRO_TIMEOUT) && (synchrostatus == 0x00)); - - if ((RTC->ISR & RTC_ISR_RSF) != RESET) - { - status = SUCCESS; - } - else - { - status = ERROR; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return (status); -} - -/** - * @brief Enables or disables the RTC reference clock detection. - * @param NewState: new state of the RTC reference clock. - * This parameter can be: ENABLE or DISABLE. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC reference clock detection is enabled - * - ERROR: RTC reference clock detection is disabled - */ -ErrorStatus RTC_RefClockCmd(FunctionalState NewState) -{ - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - if (NewState != DISABLE) - { - /* Enable the RTC reference clock detection */ - RTC->CR |= RTC_CR_REFCKON; - } - else - { - /* Disable the RTC reference clock detection */ - RTC->CR &= ~RTC_CR_REFCKON; - } - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - status = SUCCESS; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Enables or Disables the Bypass Shadow feature. - * @note When the Bypass Shadow is enabled the calendar value are taken - * directly from the Calendar counter. - * @param NewState: new state of the Bypass Shadow feature. - * This parameter can be: ENABLE or DISABLE. - * @retval None -*/ -void RTC_BypassShadowCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - if (NewState != DISABLE) - { - /* Set the BYPSHAD bit */ - RTC->CR |= (uint8_t)RTC_CR_BYPSHAD; - } - else - { - /* Reset the BYPSHAD bit */ - RTC->CR &= (uint8_t)~RTC_CR_BYPSHAD; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @} - */ - -/** @defgroup RTC_Group2 Time and Date configuration functions - * @brief Time and Date configuration functions - * -@verbatim - =============================================================================== - ##### Time and Date configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to program and read the RTC Calendar - (Time and Date). - -@endverbatim - * @{ - */ - -/** - * @brief Set the RTC current time. - * @param RTC_Format: specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that contains - * the time configuration information for the RTC. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Time register is configured - * - ERROR: RTC Time register is not configured - */ -ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct) -{ - uint32_t tmpreg = 0; - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - if (RTC_Format == RTC_Format_BIN) - { - if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) - { - assert_param(IS_RTC_HOUR12(RTC_TimeStruct->RTC_Hours)); - assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12)); - } - else - { - RTC_TimeStruct->RTC_H12 = 0x00; - assert_param(IS_RTC_HOUR24(RTC_TimeStruct->RTC_Hours)); - } - assert_param(IS_RTC_MINUTES(RTC_TimeStruct->RTC_Minutes)); - assert_param(IS_RTC_SECONDS(RTC_TimeStruct->RTC_Seconds)); - } - else - { - if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) - { - tmpreg = RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours); - assert_param(IS_RTC_HOUR12(tmpreg)); - assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12)); - } - else - { - RTC_TimeStruct->RTC_H12 = 0x00; - assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours))); - } - assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes))); - assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds))); - } - - /* Check the input parameters format */ - if (RTC_Format != RTC_Format_BIN) - { - tmpreg = (((uint32_t)(RTC_TimeStruct->RTC_Hours) << 16) | \ - ((uint32_t)(RTC_TimeStruct->RTC_Minutes) << 8) | \ - ((uint32_t)RTC_TimeStruct->RTC_Seconds) | \ - ((uint32_t)(RTC_TimeStruct->RTC_H12) << 16)); - } - else - { - tmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Hours) << 16) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Minutes) << 8) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Seconds)) | \ - (((uint32_t)RTC_TimeStruct->RTC_H12) << 16)); - } - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Set the RTC_TR register */ - RTC->TR = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK); - - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */ - if ((RTC->CR & RTC_CR_BYPSHAD) == RESET) - { - if(RTC_WaitForSynchro() == ERROR) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - else - { - status = SUCCESS; - } - } - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Fills each RTC_TimeStruct member with its default value - * (Time = 00h:00min:00sec). - * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure which will be - * initialized. - * @retval None - */ -void RTC_TimeStructInit(RTC_TimeTypeDef* RTC_TimeStruct) -{ - /* Time = 00h:00min:00sec */ - RTC_TimeStruct->RTC_H12 = RTC_H12_AM; - RTC_TimeStruct->RTC_Hours = 0; - RTC_TimeStruct->RTC_Minutes = 0; - RTC_TimeStruct->RTC_Seconds = 0; -} - -/** - * @brief Get the RTC current Time. - * @param RTC_Format: specifies the format of the returned parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that will - * contain the returned current time configuration. - * @retval None - */ -void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - /* Get the RTC_TR register */ - tmpreg = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK); - - /* Fill the structure fields with the read parameters */ - RTC_TimeStruct->RTC_Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16); - RTC_TimeStruct->RTC_Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8); - RTC_TimeStruct->RTC_Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU)); - RTC_TimeStruct->RTC_H12 = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16); - - /* Check the input parameters format */ - if (RTC_Format == RTC_Format_BIN) - { - /* Convert the structure parameters to Binary format */ - RTC_TimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours); - RTC_TimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes); - RTC_TimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds); - } -} - -/** - * @brief Gets the RTC current Calendar Sub seconds value. - * @note This function freeze the Time and Date registers after reading the - * SSR register. - * @param None - * @retval RTC current Calendar Sub seconds value. - */ -uint32_t RTC_GetSubSecond(void) -{ - uint32_t tmpreg = 0; - - /* Get sub seconds values from the correspondent registers*/ - tmpreg = (uint32_t)(RTC->SSR); - - /* Read DR register to unfroze calendar registers */ - (void) (RTC->DR); - - return (tmpreg); -} - -/** - * @brief Set the RTC current date. - * @param RTC_Format: specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that contains - * the date configuration information for the RTC. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Date register is configured - * - ERROR: RTC Date register is not configured - */ -ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct) -{ - uint32_t tmpreg = 0; - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - if ((RTC_Format == RTC_Format_BIN) && ((RTC_DateStruct->RTC_Month & 0x10) == 0x10)) - { - RTC_DateStruct->RTC_Month = (RTC_DateStruct->RTC_Month & (uint32_t)~(0x10)) + 0x0A; - } - if (RTC_Format == RTC_Format_BIN) - { - assert_param(IS_RTC_YEAR(RTC_DateStruct->RTC_Year)); - assert_param(IS_RTC_MONTH(RTC_DateStruct->RTC_Month)); - assert_param(IS_RTC_DATE(RTC_DateStruct->RTC_Date)); - } - else - { - assert_param(IS_RTC_YEAR(RTC_Bcd2ToByte(RTC_DateStruct->RTC_Year))); - tmpreg = RTC_Bcd2ToByte(RTC_DateStruct->RTC_Month); - assert_param(IS_RTC_MONTH(tmpreg)); - tmpreg = RTC_Bcd2ToByte(RTC_DateStruct->RTC_Date); - assert_param(IS_RTC_DATE(tmpreg)); - } - assert_param(IS_RTC_WEEKDAY(RTC_DateStruct->RTC_WeekDay)); - - /* Check the input parameters format */ - if (RTC_Format != RTC_Format_BIN) - { - tmpreg = ((((uint32_t)RTC_DateStruct->RTC_Year) << 16) | \ - (((uint32_t)RTC_DateStruct->RTC_Month) << 8) | \ - ((uint32_t)RTC_DateStruct->RTC_Date) | \ - (((uint32_t)RTC_DateStruct->RTC_WeekDay) << 13)); - } - else - { - tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Year) << 16) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Month) << 8) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Date)) | \ - ((uint32_t)RTC_DateStruct->RTC_WeekDay << 13)); - } - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Set the RTC_DR register */ - RTC->DR = (uint32_t)(tmpreg & RTC_DR_RESERVED_MASK); - - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */ - if ((RTC->CR & RTC_CR_BYPSHAD) == RESET) - { - if(RTC_WaitForSynchro() == ERROR) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - else - { - status = SUCCESS; - } - } - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Fills each RTC_DateStruct member with its default value - * (Monday, January 01 xx00). - * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure which will be - * initialized. - * @retval None - */ -void RTC_DateStructInit(RTC_DateTypeDef* RTC_DateStruct) -{ - /* Monday, January 01 xx00 */ - RTC_DateStruct->RTC_WeekDay = RTC_Weekday_Monday; - RTC_DateStruct->RTC_Date = 1; - RTC_DateStruct->RTC_Month = RTC_Month_January; - RTC_DateStruct->RTC_Year = 0; -} - -/** - * @brief Get the RTC current date. - * @param RTC_Format: specifies the format of the returned parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that will - * contain the returned current date configuration. - * @retval None - */ -void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - /* Get the RTC_TR register */ - tmpreg = (uint32_t)(RTC->DR & RTC_DR_RESERVED_MASK); - - /* Fill the structure fields with the read parameters */ - RTC_DateStruct->RTC_Year = (uint8_t)((tmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16); - RTC_DateStruct->RTC_Month = (uint8_t)((tmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8); - RTC_DateStruct->RTC_Date = (uint8_t)(tmpreg & (RTC_DR_DT | RTC_DR_DU)); - RTC_DateStruct->RTC_WeekDay = (uint8_t)((tmpreg & (RTC_DR_WDU)) >> 13); - - /* Check the input parameters format */ - if (RTC_Format == RTC_Format_BIN) - { - /* Convert the structure parameters to Binary format */ - RTC_DateStruct->RTC_Year = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Year); - RTC_DateStruct->RTC_Month = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Month); - RTC_DateStruct->RTC_Date = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Date); - } -} - -/** - * @} - */ - -/** @defgroup RTC_Group3 Alarms configuration functions - * @brief Alarms (Alarm A and Alarm B) configuration functions - * -@verbatim - =============================================================================== - ##### Alarms A and B configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to program and read the RTC Alarms. - -@endverbatim - * @{ - */ - -/** - * @brief Set the specified RTC Alarm. - * @note The Alarm register can only be written when the corresponding Alarm - * is disabled (Use the RTC_AlarmCmd(DISABLE)). - * @param RTC_Format: specifies the format of the returned parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_Alarm: specifies the alarm to be configured. - * This parameter can be one of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that - * contains the alarm configuration parameters. - * @retval None - */ -void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - assert_param(IS_RTC_ALARM(RTC_Alarm)); - assert_param(IS_ALARM_MASK(RTC_AlarmStruct->RTC_AlarmMask)); - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_SEL(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel)); - - if (RTC_Format == RTC_Format_BIN) - { - if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) - { - assert_param(IS_RTC_HOUR12(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours)); - assert_param(IS_RTC_H12(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12)); - } - else - { - RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = 0x00; - assert_param(IS_RTC_HOUR24(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours)); - } - assert_param(IS_RTC_MINUTES(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes)); - assert_param(IS_RTC_SECONDS(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds)); - - if(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel == RTC_AlarmDateWeekDaySel_Date) - { - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(RTC_AlarmStruct->RTC_AlarmDateWeekDay)); - } - else - { - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(RTC_AlarmStruct->RTC_AlarmDateWeekDay)); - } - } - else - { - if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) - { - tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours); - assert_param(IS_RTC_HOUR12(tmpreg)); - assert_param(IS_RTC_H12(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12)); - } - else - { - RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = 0x00; - assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours))); - } - - assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes))); - assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds))); - - if(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel == RTC_AlarmDateWeekDaySel_Date) - { - tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay); - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(tmpreg)); - } - else - { - tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay); - assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(tmpreg)); - } - } - - /* Check the input parameters format */ - if (RTC_Format != RTC_Format_BIN) - { - tmpreg = (((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours) << 16) | \ - ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes) << 8) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds) | \ - ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12) << 16) | \ - ((uint32_t)(RTC_AlarmStruct->RTC_AlarmDateWeekDay) << 24) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmDateWeekDaySel) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmMask)); - } - else - { - tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours) << 16) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes) << 8) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds)) | \ - ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12) << 16) | \ - ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmDateWeekDay) << 24) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmDateWeekDaySel) | \ - ((uint32_t)RTC_AlarmStruct->RTC_AlarmMask)); - } - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Alarm register */ - if (RTC_Alarm == RTC_Alarm_A) - { - RTC->ALRMAR = (uint32_t)tmpreg; - } - else - { - RTC->ALRMBR = (uint32_t)tmpreg; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Fills each RTC_AlarmStruct member with its default value - * (Time = 00h:00mn:00sec / Date = 1st day of the month/Mask = - * all fields are masked). - * @param RTC_AlarmStruct: pointer to a @ref RTC_AlarmTypeDef structure which - * will be initialized. - * @retval None - */ -void RTC_AlarmStructInit(RTC_AlarmTypeDef* RTC_AlarmStruct) -{ - /* Alarm Time Settings : Time = 00h:00mn:00sec */ - RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = RTC_H12_AM; - RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = 0; - RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = 0; - RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = 0; - - /* Alarm Date Settings : Date = 1st day of the month */ - RTC_AlarmStruct->RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; - RTC_AlarmStruct->RTC_AlarmDateWeekDay = 1; - - /* Alarm Masks Settings : Mask = all fields are not masked */ - RTC_AlarmStruct->RTC_AlarmMask = RTC_AlarmMask_None; -} - -/** - * @brief Get the RTC Alarm value and masks. - * @param RTC_Format: specifies the format of the output parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_Alarm: specifies the alarm to be read. - * This parameter can be one of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that will - * contains the output alarm configuration values. - * @retval None - */ -void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - assert_param(IS_RTC_ALARM(RTC_Alarm)); - - /* Get the RTC_ALRMxR register */ - if (RTC_Alarm == RTC_Alarm_A) - { - tmpreg = (uint32_t)(RTC->ALRMAR); - } - else - { - tmpreg = (uint32_t)(RTC->ALRMBR); - } - - /* Fill the structure with the read parameters */ - RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = (uint32_t)((tmpreg & (RTC_ALRMAR_HT | \ - RTC_ALRMAR_HU)) >> 16); - RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = (uint32_t)((tmpreg & (RTC_ALRMAR_MNT | \ - RTC_ALRMAR_MNU)) >> 8); - RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = (uint32_t)(tmpreg & (RTC_ALRMAR_ST | \ - RTC_ALRMAR_SU)); - RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = (uint32_t)((tmpreg & RTC_ALRMAR_PM) >> 16); - RTC_AlarmStruct->RTC_AlarmDateWeekDay = (uint32_t)((tmpreg & (RTC_ALRMAR_DT | RTC_ALRMAR_DU)) >> 24); - RTC_AlarmStruct->RTC_AlarmDateWeekDaySel = (uint32_t)(tmpreg & RTC_ALRMAR_WDSEL); - RTC_AlarmStruct->RTC_AlarmMask = (uint32_t)(tmpreg & RTC_AlarmMask_All); - - if (RTC_Format == RTC_Format_BIN) - { - RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = RTC_Bcd2ToByte(RTC_AlarmStruct-> \ - RTC_AlarmTime.RTC_Hours); - RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = RTC_Bcd2ToByte(RTC_AlarmStruct-> \ - RTC_AlarmTime.RTC_Minutes); - RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = RTC_Bcd2ToByte(RTC_AlarmStruct-> \ - RTC_AlarmTime.RTC_Seconds); - RTC_AlarmStruct->RTC_AlarmDateWeekDay = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay); - } -} - -/** - * @brief Enables or disables the specified RTC Alarm. - * @param RTC_Alarm: specifies the alarm to be configured. - * This parameter can be any combination of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param NewState: new state of the specified alarm. - * This parameter can be: ENABLE or DISABLE. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Alarm is enabled/disabled - * - ERROR: RTC Alarm is not enabled/disabled - */ -ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm, FunctionalState NewState) -{ - __IO uint32_t alarmcounter = 0x00; - uint32_t alarmstatus = 0x00; - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_CMD_ALARM(RTC_Alarm)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Alarm state */ - if (NewState != DISABLE) - { - RTC->CR |= (uint32_t)RTC_Alarm; - - status = SUCCESS; - } - else - { - /* Disable the Alarm in RTC_CR register */ - RTC->CR &= (uint32_t)~RTC_Alarm; - - /* Wait till RTC ALRxWF flag is set and if Time out is reached exit */ - do - { - alarmstatus = RTC->ISR & (RTC_Alarm >> 8); - alarmcounter++; - } while((alarmcounter != INITMODE_TIMEOUT) && (alarmstatus == 0x00)); - - if ((RTC->ISR & (RTC_Alarm >> 8)) == RESET) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Configure the RTC AlarmA/B Sub seconds value and mask.* - * @note This function is performed only when the Alarm is disabled. - * @param RTC_Alarm: specifies the alarm to be configured. - * This parameter can be one of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param RTC_AlarmSubSecondValue: specifies the Sub seconds value. - * This parameter can be a value from 0 to 0x00007FFF. - * @param RTC_AlarmSubSecondMask: specifies the Sub seconds Mask. - * This parameter can be any combination of the following values: - * @arg RTC_AlarmSubSecondMask_All : All Alarm SS fields are masked. - * There is no comparison on sub seconds for Alarm. - * @arg RTC_AlarmSubSecondMask_SS14_1 : SS[14:1] are don't care in Alarm comparison. - * Only SS[0] is compared - * @arg RTC_AlarmSubSecondMask_SS14_2 : SS[14:2] are don't care in Alarm comparison. - * Only SS[1:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_3 : SS[14:3] are don't care in Alarm comparison. - * Only SS[2:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_4 : SS[14:4] are don't care in Alarm comparison. - * Only SS[3:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_5 : SS[14:5] are don't care in Alarm comparison. - * Only SS[4:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_6 : SS[14:6] are don't care in Alarm comparison. - * Only SS[5:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_7 : SS[14:7] are don't care in Alarm comparison. - * Only SS[6:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_8 : SS[14:8] are don't care in Alarm comparison. - * Only SS[7:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_9 : SS[14:9] are don't care in Alarm comparison. - * Only SS[8:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_10: SS[14:10] are don't care in Alarm comparison. - * Only SS[9:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_11: SS[14:11] are don't care in Alarm comparison. - * Only SS[10:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_12: SS[14:12] are don't care in Alarm comparison. - * Only SS[11:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14_13: SS[14:13] are don't care in Alarm comparison. - * Only SS[12:0] are compared - * @arg RTC_AlarmSubSecondMask_SS14 : SS[14] is don't care in Alarm comparison. - * Only SS[13:0] are compared - * @arg RTC_AlarmSubSecondMask_None : SS[14:0] are compared and must match - * to activate alarm - * @retval None - */ -void RTC_AlarmSubSecondConfig(uint32_t RTC_Alarm, uint32_t RTC_AlarmSubSecondValue, uint32_t RTC_AlarmSubSecondMask) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_ALARM(RTC_Alarm)); - assert_param(IS_RTC_ALARM_SUB_SECOND_VALUE(RTC_AlarmSubSecondValue)); - assert_param(IS_RTC_ALARM_SUB_SECOND_MASK(RTC_AlarmSubSecondMask)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Alarm A or Alarm B Sub Second registers */ - tmpreg = (uint32_t) (uint32_t)(RTC_AlarmSubSecondValue) | (uint32_t)(RTC_AlarmSubSecondMask); - - if (RTC_Alarm == RTC_Alarm_A) - { - /* Configure the Alarm A Sub Second register */ - RTC->ALRMASSR = tmpreg; - } - else - { - /* Configure the Alarm B Sub Second register */ - RTC->ALRMBSSR = tmpreg; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - -} - -/** - * @brief Gets the RTC Alarm Sub seconds value. - * @param RTC_Alarm: specifies the alarm to be read. - * This parameter can be one of the following values: - * @arg RTC_Alarm_A: to select Alarm A - * @arg RTC_Alarm_B: to select Alarm B - * @param None - * @retval RTC Alarm Sub seconds value. - */ -uint32_t RTC_GetAlarmSubSecond(uint32_t RTC_Alarm) -{ - uint32_t tmpreg = 0; - - /* Get the RTC_ALRMxR register */ - if (RTC_Alarm == RTC_Alarm_A) - { - tmpreg = (uint32_t)((RTC->ALRMASSR) & RTC_ALRMASSR_SS); - } - else - { - tmpreg = (uint32_t)((RTC->ALRMBSSR) & RTC_ALRMBSSR_SS); - } - - return (tmpreg); -} - -/** - * @} - */ - -/** @defgroup RTC_Group4 WakeUp Timer configuration functions - * @brief WakeUp Timer configuration functions - * -@verbatim - =============================================================================== - ##### WakeUp Timer configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to program and read the RTC WakeUp. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the RTC Wakeup clock source. - * @note The WakeUp Clock source can only be changed when the RTC WakeUp - * is disabled (Use the RTC_WakeUpCmd(DISABLE)). - * @param RTC_WakeUpClock: Wakeup Clock source. - * This parameter can be one of the following values: - * @arg RTC_WakeUpClock_RTCCLK_Div16: RTC Wakeup Counter Clock = RTCCLK/16 - * @arg RTC_WakeUpClock_RTCCLK_Div8: RTC Wakeup Counter Clock = RTCCLK/8 - * @arg RTC_WakeUpClock_RTCCLK_Div4: RTC Wakeup Counter Clock = RTCCLK/4 - * @arg RTC_WakeUpClock_RTCCLK_Div2: RTC Wakeup Counter Clock = RTCCLK/2 - * @arg RTC_WakeUpClock_CK_SPRE_16bits: RTC Wakeup Counter Clock = CK_SPRE - * @arg RTC_WakeUpClock_CK_SPRE_17bits: RTC Wakeup Counter Clock = CK_SPRE - * @retval None - */ -void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock) -{ - /* Check the parameters */ - assert_param(IS_RTC_WAKEUP_CLOCK(RTC_WakeUpClock)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Clear the Wakeup Timer clock source bits in CR register */ - RTC->CR &= (uint32_t)~RTC_CR_WUCKSEL; - - /* Configure the clock source */ - RTC->CR |= (uint32_t)RTC_WakeUpClock; - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Configures the RTC Wakeup counter. - * @note The RTC WakeUp counter can only be written when the RTC WakeUp - * is disabled (Use the RTC_WakeUpCmd(DISABLE)). - * @param RTC_WakeUpCounter: specifies the WakeUp counter. - * This parameter can be a value from 0x0000 to 0xFFFF. - * @retval None - */ -void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter) -{ - /* Check the parameters */ - assert_param(IS_RTC_WAKEUP_COUNTER(RTC_WakeUpCounter)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Wakeup Timer counter */ - RTC->WUTR = (uint32_t)RTC_WakeUpCounter; - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Returns the RTC WakeUp timer counter value. - * @param None - * @retval The RTC WakeUp Counter value. - */ -uint32_t RTC_GetWakeUpCounter(void) -{ - /* Get the counter value */ - return ((uint32_t)(RTC->WUTR & RTC_WUTR_WUT)); -} - -/** - * @brief Enables or Disables the RTC WakeUp timer. - * @param NewState: new state of the WakeUp timer. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -ErrorStatus RTC_WakeUpCmd(FunctionalState NewState) -{ - __IO uint32_t wutcounter = 0x00; - uint32_t wutwfstatus = 0x00; - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - if (NewState != DISABLE) - { - /* Enable the Wakeup Timer */ - RTC->CR |= (uint32_t)RTC_CR_WUTE; - status = SUCCESS; - } - else - { - /* Disable the Wakeup Timer */ - RTC->CR &= (uint32_t)~RTC_CR_WUTE; - /* Wait till RTC WUTWF flag is set and if Time out is reached exit */ - do - { - wutwfstatus = RTC->ISR & RTC_ISR_WUTWF; - wutcounter++; - } while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00)); - - if ((RTC->ISR & RTC_ISR_WUTWF) == RESET) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @} - */ - -/** @defgroup RTC_Group5 Daylight Saving configuration functions - * @brief Daylight Saving configuration functions - * -@verbatim - =============================================================================== - ##### Daylight Saving configuration functions ##### - =============================================================================== - - [..] This section provide functions allowing to configure the RTC DayLight Saving. - -@endverbatim - * @{ - */ - -/** - * @brief Adds or substract one hour from the current time. - * @param RTC_DayLightSaveOperation: the value of hour adjustment. - * This parameter can be one of the following values: - * @arg RTC_DayLightSaving_SUB1H: Substract one hour (winter time) - * @arg RTC_DayLightSaving_ADD1H: Add one hour (summer time) - * @param RTC_StoreOperation: Specifies the value to be written in the BCK bit - * in CR register to store the operation. - * This parameter can be one of the following values: - * @arg RTC_StoreOperation_Reset: BCK Bit Reset - * @arg RTC_StoreOperation_Set: BCK Bit Set - * @retval None - */ -void RTC_DayLightSavingConfig(uint32_t RTC_DayLightSaving, uint32_t RTC_StoreOperation) -{ - /* Check the parameters */ - assert_param(IS_RTC_DAYLIGHT_SAVING(RTC_DayLightSaving)); - assert_param(IS_RTC_STORE_OPERATION(RTC_StoreOperation)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Clear the bits to be configured */ - RTC->CR &= (uint32_t)~(RTC_CR_BCK); - - /* Configure the RTC_CR register */ - RTC->CR |= (uint32_t)(RTC_DayLightSaving | RTC_StoreOperation); - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Returns the RTC Day Light Saving stored operation. - * @param None - * @retval RTC Day Light Saving stored operation. - * - RTC_StoreOperation_Reset - * - RTC_StoreOperation_Set - */ -uint32_t RTC_GetStoreOperation(void) -{ - return (RTC->CR & RTC_CR_BCK); -} - -/** - * @} - */ - -/** @defgroup RTC_Group6 Output pin Configuration function - * @brief Output pin Configuration function - * -@verbatim - =============================================================================== - ##### Output pin Configuration function ##### - =============================================================================== - - [..] This section provide functions allowing to configure the RTC Output source. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the RTC output source (AFO_ALARM). - * @param RTC_Output: Specifies which signal will be routed to the RTC output. - * This parameter can be one of the following values: - * @arg RTC_Output_Disable: No output selected - * @arg RTC_Output_AlarmA: signal of AlarmA mapped to output - * @arg RTC_Output_AlarmB: signal of AlarmB mapped to output - * @arg RTC_Output_WakeUp: signal of WakeUp mapped to output - * @param RTC_OutputPolarity: Specifies the polarity of the output signal. - * This parameter can be one of the following: - * @arg RTC_OutputPolarity_High: The output pin is high when the - * ALRAF/ALRBF/WUTF is high (depending on OSEL) - * @arg RTC_OutputPolarity_Low: The output pin is low when the - * ALRAF/ALRBF/WUTF is high (depending on OSEL) - * @retval None - */ -void RTC_OutputConfig(uint32_t RTC_Output, uint32_t RTC_OutputPolarity) -{ - /* Check the parameters */ - assert_param(IS_RTC_OUTPUT(RTC_Output)); - assert_param(IS_RTC_OUTPUT_POL(RTC_OutputPolarity)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Clear the bits to be configured */ - RTC->CR &= (uint32_t)~(RTC_CR_OSEL | RTC_CR_POL); - - /* Configure the output selection and polarity */ - RTC->CR |= (uint32_t)(RTC_Output | RTC_OutputPolarity); - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @} - */ - -/** @defgroup RTC_Group7 Digital Calibration configuration functions - * @brief Coarse Calibration configuration functions - * -@verbatim - =============================================================================== - ##### Digital Calibration configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the Coarse calibration parameters. - * @param RTC_CalibSign: specifies the sign of the coarse calibration value. - * This parameter can be one of the following values: - * @arg RTC_CalibSign_Positive: The value sign is positive - * @arg RTC_CalibSign_Negative: The value sign is negative - * @param Value: value of coarse calibration expressed in ppm (coded on 5 bits). - * - * @note This Calibration value should be between 0 and 63 when using negative - * sign with a 2-ppm step. - * - * @note This Calibration value should be between 0 and 126 when using positive - * sign with a 4-ppm step. - * - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Coarse calibration are initialized - * - ERROR: RTC Coarse calibration are not initialized - */ -ErrorStatus RTC_CoarseCalibConfig(uint32_t RTC_CalibSign, uint32_t Value) -{ - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_RTC_CALIB_SIGN(RTC_CalibSign)); - assert_param(IS_RTC_CALIB_VALUE(Value)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - /* Set the coarse calibration value */ - RTC->CALIBR = (uint32_t)(RTC_CalibSign | Value); - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - status = SUCCESS; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Enables or disables the Coarse calibration process. - * @param NewState: new state of the Coarse calibration. - * This parameter can be: ENABLE or DISABLE. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Coarse calibration are enabled/disabled - * - ERROR: RTC Coarse calibration are not enabled/disabled - */ -ErrorStatus RTC_CoarseCalibCmd(FunctionalState NewState) -{ - ErrorStatus status = ERROR; - - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Set Initialization mode */ - if (RTC_EnterInitMode() == ERROR) - { - status = ERROR; - } - else - { - if (NewState != DISABLE) - { - /* Enable the Coarse Calibration */ - RTC->CR |= (uint32_t)RTC_CR_DCE; - } - else - { - /* Disable the Coarse Calibration */ - RTC->CR &= (uint32_t)~RTC_CR_DCE; - } - /* Exit Initialization mode */ - RTC_ExitInitMode(); - - status = SUCCESS; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return status; -} - -/** - * @brief Enables or disables the RTC clock to be output through the relative pin. - * @param NewState: new state of the digital calibration Output. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_CalibOutputCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - if (NewState != DISABLE) - { - /* Enable the RTC clock output */ - RTC->CR |= (uint32_t)RTC_CR_COE; - } - else - { - /* Disable the RTC clock output */ - RTC->CR &= (uint32_t)~RTC_CR_COE; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Configure the Calibration Pinout (RTC_CALIB) Selection (1Hz or 512Hz). - * @param RTC_CalibOutput : Select the Calibration output Selection . - * This parameter can be one of the following values: - * @arg RTC_CalibOutput_512Hz: A signal has a regular waveform at 512Hz. - * @arg RTC_CalibOutput_1Hz : A signal has a regular waveform at 1Hz. - * @retval None -*/ -void RTC_CalibOutputConfig(uint32_t RTC_CalibOutput) -{ - /* Check the parameters */ - assert_param(IS_RTC_CALIB_OUTPUT(RTC_CalibOutput)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /*clear flags before configuration */ - RTC->CR &= (uint32_t)~(RTC_CR_COSEL); - - /* Configure the RTC_CR register */ - RTC->CR |= (uint32_t)RTC_CalibOutput; - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Configures the Smooth Calibration Settings. - * @param RTC_SmoothCalibPeriod : Select the Smooth Calibration Period. - * This parameter can be can be one of the following values: - * @arg RTC_SmoothCalibPeriod_32sec : The smooth calibration period is 32s. - * @arg RTC_SmoothCalibPeriod_16sec : The smooth calibration period is 16s. - * @arg RTC_SmoothCalibPeriod_8sec : The smooth calibartion period is 8s. - * @param RTC_SmoothCalibPlusPulses : Select to Set or reset the CALP bit. - * This parameter can be one of the following values: - * @arg RTC_SmoothCalibPlusPulses_Set : Add one RTCCLK puls every 2**11 pulses. - * @arg RTC_SmoothCalibPlusPulses_Reset: No RTCCLK pulses are added. - * @param RTC_SmouthCalibMinusPulsesValue: Select the value of CALM[8:0] bits. - * This parameter can be one any value from 0 to 0x000001FF. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Calib registers are configured - * - ERROR: RTC Calib registers are not configured -*/ -ErrorStatus RTC_SmoothCalibConfig(uint32_t RTC_SmoothCalibPeriod, - uint32_t RTC_SmoothCalibPlusPulses, - uint32_t RTC_SmouthCalibMinusPulsesValue) -{ - ErrorStatus status = ERROR; - uint32_t recalpfcount = 0; - - /* Check the parameters */ - assert_param(IS_RTC_SMOOTH_CALIB_PERIOD(RTC_SmoothCalibPeriod)); - assert_param(IS_RTC_SMOOTH_CALIB_PLUS(RTC_SmoothCalibPlusPulses)); - assert_param(IS_RTC_SMOOTH_CALIB_MINUS(RTC_SmouthCalibMinusPulsesValue)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* check if a calibration is pending*/ - if ((RTC->ISR & RTC_ISR_RECALPF) != RESET) - { - /* wait until the Calibration is completed*/ - while (((RTC->ISR & RTC_ISR_RECALPF) != RESET) && (recalpfcount != RECALPF_TIMEOUT)) - { - recalpfcount++; - } - } - - /* check if the calibration pending is completed or if there is no calibration operation at all*/ - if ((RTC->ISR & RTC_ISR_RECALPF) == RESET) - { - /* Configure the Smooth calibration settings */ - RTC->CALR = (uint32_t)((uint32_t)RTC_SmoothCalibPeriod | (uint32_t)RTC_SmoothCalibPlusPulses | (uint32_t)RTC_SmouthCalibMinusPulsesValue); - - status = SUCCESS; - } - else - { - status = ERROR; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return (ErrorStatus)(status); -} - -/** - * @} - */ - - -/** @defgroup RTC_Group8 TimeStamp configuration functions - * @brief TimeStamp configuration functions - * -@verbatim - =============================================================================== - ##### TimeStamp configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or Disables the RTC TimeStamp functionality with the - * specified time stamp pin stimulating edge. - * @param RTC_TimeStampEdge: Specifies the pin edge on which the TimeStamp is - * activated. - * This parameter can be one of the following: - * @arg RTC_TimeStampEdge_Rising: the Time stamp event occurs on the rising - * edge of the related pin. - * @arg RTC_TimeStampEdge_Falling: the Time stamp event occurs on the - * falling edge of the related pin. - * @param NewState: new state of the TimeStamp. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_TimeStampCmd(uint32_t RTC_TimeStampEdge, FunctionalState NewState) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_TIMESTAMP_EDGE(RTC_TimeStampEdge)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Get the RTC_CR register and clear the bits to be configured */ - tmpreg = (uint32_t)(RTC->CR & (uint32_t)~(RTC_CR_TSEDGE | RTC_CR_TSE)); - - /* Get the new configuration */ - if (NewState != DISABLE) - { - tmpreg |= (uint32_t)(RTC_TimeStampEdge | RTC_CR_TSE); - } - else - { - tmpreg |= (uint32_t)(RTC_TimeStampEdge); - } - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Configure the Time Stamp TSEDGE and Enable bits */ - RTC->CR = (uint32_t)tmpreg; - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Get the RTC TimeStamp value and masks. - * @param RTC_Format: specifies the format of the output parameters. - * This parameter can be one of the following values: - * @arg RTC_Format_BIN: Binary data format - * @arg RTC_Format_BCD: BCD data format - * @param RTC_StampTimeStruct: pointer to a RTC_TimeTypeDef structure that will - * contains the TimeStamp time values. - * @param RTC_StampDateStruct: pointer to a RTC_DateTypeDef structure that will - * contains the TimeStamp date values. - * @retval None - */ -void RTC_GetTimeStamp(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_StampTimeStruct, - RTC_DateTypeDef* RTC_StampDateStruct) -{ - uint32_t tmptime = 0, tmpdate = 0; - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(RTC_Format)); - - /* Get the TimeStamp time and date registers values */ - tmptime = (uint32_t)(RTC->TSTR & RTC_TR_RESERVED_MASK); - tmpdate = (uint32_t)(RTC->TSDR & RTC_DR_RESERVED_MASK); - - /* Fill the Time structure fields with the read parameters */ - RTC_StampTimeStruct->RTC_Hours = (uint8_t)((tmptime & (RTC_TR_HT | RTC_TR_HU)) >> 16); - RTC_StampTimeStruct->RTC_Minutes = (uint8_t)((tmptime & (RTC_TR_MNT | RTC_TR_MNU)) >> 8); - RTC_StampTimeStruct->RTC_Seconds = (uint8_t)(tmptime & (RTC_TR_ST | RTC_TR_SU)); - RTC_StampTimeStruct->RTC_H12 = (uint8_t)((tmptime & (RTC_TR_PM)) >> 16); - - /* Fill the Date structure fields with the read parameters */ - RTC_StampDateStruct->RTC_Year = 0; - RTC_StampDateStruct->RTC_Month = (uint8_t)((tmpdate & (RTC_DR_MT | RTC_DR_MU)) >> 8); - RTC_StampDateStruct->RTC_Date = (uint8_t)(tmpdate & (RTC_DR_DT | RTC_DR_DU)); - RTC_StampDateStruct->RTC_WeekDay = (uint8_t)((tmpdate & (RTC_DR_WDU)) >> 13); - - /* Check the input parameters format */ - if (RTC_Format == RTC_Format_BIN) - { - /* Convert the Time structure parameters to Binary format */ - RTC_StampTimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Hours); - RTC_StampTimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Minutes); - RTC_StampTimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Seconds); - - /* Convert the Date structure parameters to Binary format */ - RTC_StampDateStruct->RTC_Month = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_Month); - RTC_StampDateStruct->RTC_Date = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_Date); - RTC_StampDateStruct->RTC_WeekDay = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_WeekDay); - } -} - -/** - * @brief Get the RTC timestamp Sub seconds value. - * @param None - * @retval RTC current timestamp Sub seconds value. - */ -uint32_t RTC_GetTimeStampSubSecond(void) -{ - /* Get timestamp sub seconds values from the correspondent registers */ - return (uint32_t)(RTC->TSSSR); -} - -/** - * @} - */ - -/** @defgroup RTC_Group9 Tampers configuration functions - * @brief Tampers configuration functions - * -@verbatim - =============================================================================== - ##### Tampers configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the select Tamper pin edge. - * @param RTC_Tamper: Selected tamper pin. - * This parameter can be RTC_Tamper_1. - * @param RTC_TamperTrigger: Specifies the trigger on the tamper pin that - * stimulates tamper event. - * This parameter can be one of the following values: - * @arg RTC_TamperTrigger_RisingEdge: Rising Edge of the tamper pin causes tamper event. - * @arg RTC_TamperTrigger_FallingEdge: Falling Edge of the tamper pin causes tamper event. - * @arg RTC_TamperTrigger_LowLevel: Low Level of the tamper pin causes tamper event. - * @arg RTC_TamperTrigger_HighLevel: High Level of the tamper pin causes tamper event. - * @retval None - */ -void RTC_TamperTriggerConfig(uint32_t RTC_Tamper, uint32_t RTC_TamperTrigger) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER(RTC_Tamper)); - assert_param(IS_RTC_TAMPER_TRIGGER(RTC_TamperTrigger)); - - if (RTC_TamperTrigger == RTC_TamperTrigger_RisingEdge) - { - /* Configure the RTC_TAFCR register */ - RTC->TAFCR &= (uint32_t)((uint32_t)~(RTC_Tamper << 1)); - } - else - { - /* Configure the RTC_TAFCR register */ - RTC->TAFCR |= (uint32_t)(RTC_Tamper << 1); - } -} - -/** - * @brief Enables or Disables the Tamper detection. - * @param RTC_Tamper: Selected tamper pin. - * This parameter can be RTC_Tamper_1. - * @param NewState: new state of the tamper pin. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_TamperCmd(uint32_t RTC_Tamper, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER(RTC_Tamper)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected Tamper pin */ - RTC->TAFCR |= (uint32_t)RTC_Tamper; - } - else - { - /* Disable the selected Tamper pin */ - RTC->TAFCR &= (uint32_t)~RTC_Tamper; - } -} - -/** - * @brief Configures the Tampers Filter. - * @param RTC_TamperFilter: Specifies the tampers filter. - * This parameter can be one of the following values: - * @arg RTC_TamperFilter_Disable: Tamper filter is disabled. - * @arg RTC_TamperFilter_2Sample: Tamper is activated after 2 consecutive - * samples at the active level - * @arg RTC_TamperFilter_4Sample: Tamper is activated after 4 consecutive - * samples at the active level - * @arg RTC_TamperFilter_8Sample: Tamper is activated after 8 consecutive - * samples at the active level - * @retval None - */ -void RTC_TamperFilterConfig(uint32_t RTC_TamperFilter) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER_FILTER(RTC_TamperFilter)); - - /* Clear TAMPFLT[1:0] bits in the RTC_TAFCR register */ - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPFLT); - - /* Configure the RTC_TAFCR register */ - RTC->TAFCR |= (uint32_t)RTC_TamperFilter; -} - -/** - * @brief Configures the Tampers Sampling Frequency. - * @param RTC_TamperSamplingFreq: Specifies the tampers Sampling Frequency. - * This parameter can be one of the following values: - * @arg RTC_TamperSamplingFreq_RTCCLK_Div32768: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 32768 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div16384: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 16384 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div8192: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 8192 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div4096: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 4096 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div2048: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 2048 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div1024: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 1024 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div512: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 512 - * @arg RTC_TamperSamplingFreq_RTCCLK_Div256: Each of the tamper inputs are sampled - * with a frequency = RTCCLK / 256 - * @retval None - */ -void RTC_TamperSamplingFreqConfig(uint32_t RTC_TamperSamplingFreq) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER_SAMPLING_FREQ(RTC_TamperSamplingFreq)); - - /* Clear TAMPFREQ[2:0] bits in the RTC_TAFCR register */ - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPFREQ); - - /* Configure the RTC_TAFCR register */ - RTC->TAFCR |= (uint32_t)RTC_TamperSamplingFreq; -} - -/** - * @brief Configures the Tampers Pins input Precharge Duration. - * @param RTC_TamperPrechargeDuration: Specifies the Tampers Pins input - * Precharge Duration. - * This parameter can be one of the following values: - * @arg RTC_TamperPrechargeDuration_1RTCCLK: Tamper pins are precharged before sampling during 1 RTCCLK cycle - * @arg RTC_TamperPrechargeDuration_2RTCCLK: Tamper pins are precharged before sampling during 2 RTCCLK cycle - * @arg RTC_TamperPrechargeDuration_4RTCCLK: Tamper pins are precharged before sampling during 4 RTCCLK cycle - * @arg RTC_TamperPrechargeDuration_8RTCCLK: Tamper pins are precharged before sampling during 8 RTCCLK cycle - * @retval None - */ -void RTC_TamperPinsPrechargeDuration(uint32_t RTC_TamperPrechargeDuration) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER_PRECHARGE_DURATION(RTC_TamperPrechargeDuration)); - - /* Clear TAMPPRCH[1:0] bits in the RTC_TAFCR register */ - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPPRCH); - - /* Configure the RTC_TAFCR register */ - RTC->TAFCR |= (uint32_t)RTC_TamperPrechargeDuration; -} - -/** - * @brief Enables or Disables the TimeStamp on Tamper Detection Event. - * @note The timestamp is valid even the TSE bit in tamper control register - * is reset. - * @param NewState: new state of the timestamp on tamper event. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_TimeStampOnTamperDetectionCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Save timestamp on tamper detection event */ - RTC->TAFCR |= (uint32_t)RTC_TAFCR_TAMPTS; - } - else - { - /* Tamper detection does not cause a timestamp to be saved */ - RTC->TAFCR &= (uint32_t)~RTC_TAFCR_TAMPTS; - } -} - -/** - * @brief Enables or Disables the Precharge of Tamper pin. - * @param NewState: new state of tamper pull up. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_TamperPullUpCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable precharge of the selected Tamper pin */ - RTC->TAFCR &= (uint32_t)~RTC_TAFCR_TAMPPUDIS; - } - else - { - /* Disable precharge of the selected Tamper pin */ - RTC->TAFCR |= (uint32_t)RTC_TAFCR_TAMPPUDIS; - } -} - -/** - * @} - */ - -/** @defgroup RTC_Group10 Backup Data Registers configuration functions - * @brief Backup Data Registers configuration functions - * -@verbatim - =============================================================================== - ##### Backup Data Registers configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Writes a data in a specified RTC Backup data register. - * @param RTC_BKP_DR: RTC Backup data Register number. - * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to - * specify the register. - * @param Data: Data to be written in the specified RTC Backup data register. - * @retval None - */ -void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data) -{ - __IO uint32_t tmp = 0; - - /* Check the parameters */ - assert_param(IS_RTC_BKP(RTC_BKP_DR)); - - tmp = RTC_BASE + 0x50; - tmp += (RTC_BKP_DR * 4); - - /* Write the specified register */ - *(__IO uint32_t *)tmp = (uint32_t)Data; -} - -/** - * @brief Reads data from the specified RTC Backup data Register. - * @param RTC_BKP_DR: RTC Backup data Register number. - * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to - * specify the register. - * @retval None - */ -uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR) -{ - __IO uint32_t tmp = 0; - - /* Check the parameters */ - assert_param(IS_RTC_BKP(RTC_BKP_DR)); - - tmp = RTC_BASE + 0x50; - tmp += (RTC_BKP_DR * 4); - - /* Read the specified register */ - return (*(__IO uint32_t *)tmp); -} - -/** - * @} - */ - -/** @defgroup RTC_Group11 RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration functions - * @brief RTC Tamper and TimeStamp Pins Selection and Output Type Config - * configuration functions - * -@verbatim - ================================================================================================== - ##### RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration functions ##### - ================================================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Selects the RTC Tamper Pin. - * @param RTC_TamperPin: specifies the RTC Tamper Pin. - * This parameter can be one of the following values: - * @arg RTC_TamperPin_PC13: PC13 is selected as RTC Tamper Pin. - * @arg RTC_TamperPin_PI8: PI8 is selected as RTC Tamper Pin. - * @retval None - */ -void RTC_TamperPinSelection(uint32_t RTC_TamperPin) -{ - /* Check the parameters */ - assert_param(IS_RTC_TAMPER_PIN(RTC_TamperPin)); - - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPINSEL); - RTC->TAFCR |= (uint32_t)(RTC_TamperPin); -} - -/** - * @brief Selects the RTC TimeStamp Pin. - * @param RTC_TimeStampPin: specifies the RTC TimeStamp Pin. - * This parameter can be one of the following values: - * @arg RTC_TimeStampPin_PC13: PC13 is selected as RTC TimeStamp Pin. - * @arg RTC_TimeStampPin_PI8: PI8 is selected as RTC TimeStamp Pin. - * @retval None - */ -void RTC_TimeStampPinSelection(uint32_t RTC_TimeStampPin) -{ - /* Check the parameters */ - assert_param(IS_RTC_TIMESTAMP_PIN(RTC_TimeStampPin)); - - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TSINSEL); - RTC->TAFCR |= (uint32_t)(RTC_TimeStampPin); -} - -/** - * @brief Configures the RTC Output Pin mode. - * @param RTC_OutputType: specifies the RTC Output (PC13) pin mode. - * This parameter can be one of the following values: - * @arg RTC_OutputType_OpenDrain: RTC Output (PC13) is configured in - * Open Drain mode. - * @arg RTC_OutputType_PushPull: RTC Output (PC13) is configured in - * Push Pull mode. - * @retval None - */ -void RTC_OutputTypeConfig(uint32_t RTC_OutputType) -{ - /* Check the parameters */ - assert_param(IS_RTC_OUTPUT_TYPE(RTC_OutputType)); - - RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_ALARMOUTTYPE); - RTC->TAFCR |= (uint32_t)(RTC_OutputType); -} - -/** - * @} - */ - -/** @defgroup RTC_Group12 Shift control synchronisation functions - * @brief Shift control synchronisation functions - * -@verbatim - =============================================================================== - ##### Shift control synchronisation functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the Synchronization Shift Control Settings. - * @note When REFCKON is set, firmware must not write to Shift control register - * @param RTC_ShiftAdd1S : Select to add or not 1 second to the time Calendar. - * This parameter can be one of the following values : - * @arg RTC_ShiftAdd1S_Set : Add one second to the clock calendar. - * @arg RTC_ShiftAdd1S_Reset: No effect. - * @param RTC_ShiftSubFS: Select the number of Second Fractions to Substitute. - * This parameter can be one any value from 0 to 0x7FFF. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: RTC Shift registers are configured - * - ERROR: RTC Shift registers are not configured -*/ -ErrorStatus RTC_SynchroShiftConfig(uint32_t RTC_ShiftAdd1S, uint32_t RTC_ShiftSubFS) -{ - ErrorStatus status = ERROR; - uint32_t shpfcount = 0; - - /* Check the parameters */ - assert_param(IS_RTC_SHIFT_ADD1S(RTC_ShiftAdd1S)); - assert_param(IS_RTC_SHIFT_SUBFS(RTC_ShiftSubFS)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - /* Check if a Shift is pending*/ - if ((RTC->ISR & RTC_ISR_SHPF) != RESET) - { - /* Wait until the shift is completed*/ - while (((RTC->ISR & RTC_ISR_SHPF) != RESET) && (shpfcount != SHPF_TIMEOUT)) - { - shpfcount++; - } - } - - /* Check if the Shift pending is completed or if there is no Shift operation at all*/ - if ((RTC->ISR & RTC_ISR_SHPF) == RESET) - { - /* check if the reference clock detection is disabled */ - if((RTC->CR & RTC_CR_REFCKON) == RESET) - { - /* Configure the Shift settings */ - RTC->SHIFTR = (uint32_t)(uint32_t)(RTC_ShiftSubFS) | (uint32_t)(RTC_ShiftAdd1S); - - if(RTC_WaitForSynchro() == ERROR) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - else - { - status = ERROR; - } - } - else - { - status = ERROR; - } - - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; - - return (ErrorStatus)(status); -} - -/** - * @} - */ - -/** @defgroup RTC_Group13 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - [..] All RTC interrupts are connected to the EXTI controller. - - (+) To enable the RTC Alarm interrupt, the following sequence is required: - (++) Configure and enable the EXTI Line 17 in interrupt mode and select - the rising edge sensitivity using the EXTI_Init() function. - (++) Configure and enable the RTC_Alarm IRQ channel in the NVIC using the - NVIC_Init() function. - (++) Configure the RTC to generate RTC alarms (Alarm A and/or Alarm B) using - the RTC_SetAlarm() and RTC_AlarmCmd() functions. - - (+) To enable the RTC Wakeup interrupt, the following sequence is required: - (++) Configure and enable the EXTI Line 22 in interrupt mode and select the - rising edge sensitivity using the EXTI_Init() function. - (++) Configure and enable the RTC_WKUP IRQ channel in the NVIC using the - NVIC_Init() function. - (++) Configure the RTC to generate the RTC wakeup timer event using the - RTC_WakeUpClockConfig(), RTC_SetWakeUpCounter() and RTC_WakeUpCmd() - functions. - - (+) To enable the RTC Tamper interrupt, the following sequence is required: - (++) Configure and enable the EXTI Line 21 in interrupt mode and select - the rising edge sensitivity using the EXTI_Init() function. - (++) Configure and enable the TAMP_STAMP IRQ channel in the NVIC using the - NVIC_Init() function. - (++) Configure the RTC to detect the RTC tamper event using the - RTC_TamperTriggerConfig() and RTC_TamperCmd() functions. - - (+) To enable the RTC TimeStamp interrupt, the following sequence is required: - (++) Configure and enable the EXTI Line 21 in interrupt mode and select the - rising edge sensitivity using the EXTI_Init() function. - (++) Configure and enable the TAMP_STAMP IRQ channel in the NVIC using the - NVIC_Init() function. - (++) Configure the RTC to detect the RTC time stamp event using the - RTC_TimeStampCmd() functions. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified RTC interrupts. - * @param RTC_IT: specifies the RTC interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg RTC_IT_TS: Time Stamp interrupt mask - * @arg RTC_IT_WUT: WakeUp Timer interrupt mask - * @arg RTC_IT_ALRB: Alarm B interrupt mask - * @arg RTC_IT_ALRA: Alarm A interrupt mask - * @arg RTC_IT_TAMP: Tamper event interrupt mask - * @param NewState: new state of the specified RTC interrupts. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_RTC_CONFIG_IT(RTC_IT)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - /* Disable the write protection for RTC registers */ - RTC->WPR = 0xCA; - RTC->WPR = 0x53; - - if (NewState != DISABLE) - { - /* Configure the Interrupts in the RTC_CR register */ - RTC->CR |= (uint32_t)(RTC_IT & ~RTC_TAFCR_TAMPIE); - /* Configure the Tamper Interrupt in the RTC_TAFCR */ - RTC->TAFCR |= (uint32_t)(RTC_IT & RTC_TAFCR_TAMPIE); - } - else - { - /* Configure the Interrupts in the RTC_CR register */ - RTC->CR &= (uint32_t)~(RTC_IT & (uint32_t)~RTC_TAFCR_TAMPIE); - /* Configure the Tamper Interrupt in the RTC_TAFCR */ - RTC->TAFCR &= (uint32_t)~(RTC_IT & RTC_TAFCR_TAMPIE); - } - /* Enable the write protection for RTC registers */ - RTC->WPR = 0xFF; -} - -/** - * @brief Checks whether the specified RTC flag is set or not. - * @param RTC_FLAG: specifies the flag to check. - * This parameter can be one of the following values: - * @arg RTC_FLAG_RECALPF: RECALPF event flag. - * @arg RTC_FLAG_TAMP1F: Tamper 1 event flag - * @arg RTC_FLAG_TSOVF: Time Stamp OverFlow flag - * @arg RTC_FLAG_TSF: Time Stamp event flag - * @arg RTC_FLAG_WUTF: WakeUp Timer flag - * @arg RTC_FLAG_ALRBF: Alarm B flag - * @arg RTC_FLAG_ALRAF: Alarm A flag - * @arg RTC_FLAG_INITF: Initialization mode flag - * @arg RTC_FLAG_RSF: Registers Synchronized flag - * @arg RTC_FLAG_INITS: Registers Configured flag - * @arg RTC_FLAG_SHPF: Shift operation pending flag. - * @arg RTC_FLAG_WUTWF: WakeUp Timer Write flag - * @arg RTC_FLAG_ALRBWF: Alarm B Write flag - * @arg RTC_FLAG_ALRAWF: Alarm A write flag - * @retval The new state of RTC_FLAG (SET or RESET). - */ -FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG) -{ - FlagStatus bitstatus = RESET; - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_GET_FLAG(RTC_FLAG)); - - /* Get all the flags */ - tmpreg = (uint32_t)(RTC->ISR & RTC_FLAGS_MASK); - - /* Return the status of the flag */ - if ((tmpreg & RTC_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the RTC's pending flags. - * @param RTC_FLAG: specifies the RTC flag to clear. - * This parameter can be any combination of the following values: - * @arg RTC_FLAG_TAMP1F: Tamper 1 event flag - * @arg RTC_FLAG_TSOVF: Time Stamp Overflow flag - * @arg RTC_FLAG_TSF: Time Stamp event flag - * @arg RTC_FLAG_WUTF: WakeUp Timer flag - * @arg RTC_FLAG_ALRBF: Alarm B flag - * @arg RTC_FLAG_ALRAF: Alarm A flag - * @arg RTC_FLAG_RSF: Registers Synchronized flag - * @retval None - */ -void RTC_ClearFlag(uint32_t RTC_FLAG) -{ - /* Check the parameters */ - assert_param(IS_RTC_CLEAR_FLAG(RTC_FLAG)); - - /* Clear the Flags in the RTC_ISR register */ - RTC->ISR = (uint32_t)((uint32_t)(~((RTC_FLAG | RTC_ISR_INIT)& 0x0000FFFF) | (uint32_t)(RTC->ISR & RTC_ISR_INIT))); -} - -/** - * @brief Checks whether the specified RTC interrupt has occurred or not. - * @param RTC_IT: specifies the RTC interrupt source to check. - * This parameter can be one of the following values: - * @arg RTC_IT_TS: Time Stamp interrupt - * @arg RTC_IT_WUT: WakeUp Timer interrupt - * @arg RTC_IT_ALRB: Alarm B interrupt - * @arg RTC_IT_ALRA: Alarm A interrupt - * @arg RTC_IT_TAMP1: Tamper 1 event interrupt - * @retval The new state of RTC_IT (SET or RESET). - */ -ITStatus RTC_GetITStatus(uint32_t RTC_IT) -{ - ITStatus bitstatus = RESET; - uint32_t tmpreg = 0, enablestatus = 0; - - /* Check the parameters */ - assert_param(IS_RTC_GET_IT(RTC_IT)); - - /* Get the TAMPER Interrupt enable bit and pending bit */ - tmpreg = (uint32_t)(RTC->TAFCR & (RTC_TAFCR_TAMPIE)); - - /* Get the Interrupt enable Status */ - enablestatus = (uint32_t)((RTC->CR & RTC_IT) | (tmpreg & (RTC_IT >> 15))); - - /* Get the Interrupt pending bit */ - tmpreg = (uint32_t)((RTC->ISR & (uint32_t)(RTC_IT >> 4))); - - /* Get the status of the Interrupt */ - if ((enablestatus != (uint32_t)RESET) && ((tmpreg & 0x0000FFFF) != (uint32_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears the RTC's interrupt pending bits. - * @param RTC_IT: specifies the RTC interrupt pending bit to clear. - * This parameter can be any combination of the following values: - * @arg RTC_IT_TS: Time Stamp interrupt - * @arg RTC_IT_WUT: WakeUp Timer interrupt - * @arg RTC_IT_ALRB: Alarm B interrupt - * @arg RTC_IT_ALRA: Alarm A interrupt - * @arg RTC_IT_TAMP1: Tamper 1 event interrupt - * @retval None - */ -void RTC_ClearITPendingBit(uint32_t RTC_IT) -{ - uint32_t tmpreg = 0; - - /* Check the parameters */ - assert_param(IS_RTC_CLEAR_IT(RTC_IT)); - - /* Get the RTC_ISR Interrupt pending bits mask */ - tmpreg = (uint32_t)(RTC_IT >> 4); - - /* Clear the interrupt pending bits in the RTC_ISR register */ - RTC->ISR = (uint32_t)((uint32_t)(~((tmpreg | RTC_ISR_INIT)& 0x0000FFFF) | (uint32_t)(RTC->ISR & RTC_ISR_INIT))); -} - -/** - * @} - */ - -/** - * @brief Converts a 2 digit decimal to BCD format. - * @param Value: Byte to be converted. - * @retval Converted byte - */ -static uint8_t RTC_ByteToBcd2(uint8_t Value) -{ - uint8_t bcdhigh = 0; - - while (Value >= 10) - { - bcdhigh++; - Value -= 10; - } - - return ((uint8_t)(bcdhigh << 4) | Value); -} - -/** - * @brief Convert from 2 digit BCD to Binary. - * @param Value: BCD value to be converted. - * @retval Converted word - */ -static uint8_t RTC_Bcd2ToByte(uint8_t Value) -{ - uint8_t tmp = 0; - tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10; - return (tmp + (Value & (uint8_t)0x0F)); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c deleted file mode 100644 index ed1e3e51..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c +++ /dev/null @@ -1,1011 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_sdio.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Secure digital input/output interface (SDIO) - * peripheral: - * + Initialization and Configuration - * + Command path state machine (CPSM) management - * + Data path state machine (DPSM) management - * + SDIO IO Cards mode management - * + CE-ATA mode management - * + DMA transfers management - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) The SDIO clock (SDIOCLK = 48 MHz) is coming from a specific output of PLL - (PLL48CLK). Before to start working with SDIO peripheral make sure that the - PLL is well configured. - The SDIO peripheral uses two clock signals: - (++) SDIO adapter clock (SDIOCLK = 48 MHz) - (++) APB2 bus clock (PCLK2) - - -@@- PCLK2 and SDIO_CK clock frequencies must respect the following condition: - Frequency(PCLK2) >= (3 / 8 x Frequency(SDIO_CK)) - - (#) Enable peripheral clock using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE). - - (#) According to the SDIO mode, enable the GPIO clocks using - RCC_AHB1PeriphClockCmd() function. - The I/O can be one of the following configurations: - (++) 1-bit data length: SDIO_CMD, SDIO_CK and D0. - (++) 4-bit data length: SDIO_CMD, SDIO_CK and D[3:0]. - (++) 8-bit data length: SDIO_CMD, SDIO_CK and D[7:0]. - - (#) Peripheral alternate function: - (++) Connect the pin to the desired peripherals' Alternate Function (AF) - using GPIO_PinAFConfig() function - (++) Configure the desired pin in alternate function by: - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF - (++) Select the type, pull-up/pull-down and output speed via GPIO_PuPd, - GPIO_OType and GPIO_Speed members - (++) Call GPIO_Init() function - - (#) Program the Clock Edge, Clock Bypass, Clock Power Save, Bus Wide, - hardware, flow control and the Clock Divider using the SDIO_Init() - function. - - (#) Enable the Power ON State using the SDIO_SetPowerState(SDIO_PowerState_ON) - function. - - (#) Enable the clock using the SDIO_ClockCmd() function. - - (#) Enable the NVIC and the corresponding interrupt using the function - SDIO_ITConfig() if you need to use interrupt mode. - - (#) When using the DMA mode - (++) Configure the DMA using DMA_Init() function - (++) Active the needed channel Request using SDIO_DMACmd() function - - (#) Enable the DMA using the DMA_Cmd() function, when using DMA mode. - - (#) To control the CPSM (Command Path State Machine) and send - commands to the card use the SDIO_SendCommand(), - SDIO_GetCommandResponse() and SDIO_GetResponse() functions. First, user has - to fill the command structure (pointer to SDIO_CmdInitTypeDef) according - to the selected command to be sent. - The parameters that should be filled are: - (++) Command Argument - (++) Command Index - (++) Command Response type - (++) Command Wait - (++) CPSM Status (Enable or Disable). - - -@@- To check if the command is well received, read the SDIO_CMDRESP - register using the SDIO_GetCommandResponse(). - The SDIO responses registers (SDIO_RESP1 to SDIO_RESP2), use the - SDIO_GetResponse() function. - - (#) To control the DPSM (Data Path State Machine) and send/receive - data to/from the card use the SDIO_DataConfig(), SDIO_GetDataCounter(), - SDIO_ReadData(), SDIO_WriteData() and SDIO_GetFIFOCount() functions. - - *** Read Operations *** - ======================= - [..] - (#) First, user has to fill the data structure (pointer to - SDIO_DataInitTypeDef) according to the selected data type to be received. - The parameters that should be filled are: - (++) Data TimeOut - (++) Data Length - (++) Data Block size - (++) Data Transfer direction: should be from card (To SDIO) - (++) Data Transfer mode - (++) DPSM Status (Enable or Disable) - - (#) Configure the SDIO resources to receive the data from the card - according to selected transfer mode (Refer to Step 8, 9 and 10). - - (#) Send the selected Read command (refer to step 11). - - (#) Use the SDIO flags/interrupts to check the transfer status. - - *** Write Operations *** - ======================== - [..] - (#) First, user has to fill the data structure (pointer to - SDIO_DataInitTypeDef) according to the selected data type to be received. - The parameters that should be filled are: - (++) Data TimeOut - (++) Data Length - (++) Data Block size - (++) Data Transfer direction: should be to card (To CARD) - (++) Data Transfer mode - (++) DPSM Status (Enable or Disable) - - (#) Configure the SDIO resources to send the data to the card according to - selected transfer mode (Refer to Step 8, 9 and 10). - - (#) Send the selected Write command (refer to step 11). - - (#) Use the SDIO flags/interrupts to check the transfer status. - - -@endverbatim - * - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_sdio.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup SDIO - * @brief SDIO driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* ------------ 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)) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup SDIO_Private_Functions - * @{ - */ - -/** @defgroup SDIO_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the SDIO peripheral registers to their default reset values. - * @param None - * @retval None - */ -void SDIO_DeInit(void) -{ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, DISABLE); -} - -/** - * @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: SDIO Power OFF - * @arg SDIO_PowerState_ON: SDIO Power ON - * @retval None - */ -void SDIO_SetPowerState(uint32_t SDIO_PowerState) -{ - /* Check the parameters */ - assert_param(IS_SDIO_POWER_STATE(SDIO_PowerState)); - - 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 values: - * - 0x00: Power OFF - * - 0x02: Power UP - * - 0x03: Power ON - */ -uint32_t SDIO_GetPowerState(void) -{ - return (SDIO->POWER & (~PWR_PWRCTRL_MASK)); -} - -/** - * @} - */ - -/** @defgroup SDIO_Group2 Command path state machine (CPSM) management functions - * @brief Command path state machine (CPSM) management functions - * -@verbatim - =============================================================================== - ##### Command path state machine (CPSM) management functions ##### - =============================================================================== - - This section provide functions allowing to program and read the Command path - state machine (CPSM). - -@endverbatim - * @{ - */ - -/** - * @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); -} - -/** - * @} - */ - -/** @defgroup SDIO_Group3 Data path state machine (DPSM) management functions - * @brief Data path state machine (DPSM) management functions - * -@verbatim - =============================================================================== - ##### Data path state machine (DPSM) management functions ##### - =============================================================================== - - This section provide functions allowing to program and read the Data path - state machine (DPSM). - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup SDIO_Group4 SDIO IO Cards mode management functions - * @brief SDIO IO Cards mode management functions - * -@verbatim - =============================================================================== - ##### SDIO IO Cards mode management functions ##### - =============================================================================== - - This section provide functions allowing to program and read the SDIO IO Cards. - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup SDIO_Group5 CE-ATA mode management functions - * @brief CE-ATA mode management functions - * -@verbatim - =============================================================================== - ##### CE-ATA mode management functions ##### - =============================================================================== - - This section provide functions allowing to program and read the CE-ATA card. - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup SDIO_Group6 DMA transfers management functions - * @brief DMA transfers management functions - * -@verbatim - =============================================================================== - ##### DMA transfers management functions ##### - =============================================================================== - - This section provide functions allowing to program SDIO DMA transfer. - -@endverbatim - * @{ - */ - -/** - * @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; -} - -/** - * @} - */ - -/** @defgroup SDIO_Group7 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - -@endverbatim - * @{ - */ - -/** - * @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 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, SDIO_DCOUNT, 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c deleted file mode 100644 index f0526c47..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c +++ /dev/null @@ -1,1312 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_spi.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Serial peripheral interface (SPI): - * + Initialization and Configuration - * + Data transfers functions - * + Hardware CRC Calculation - * + DMA transfers management - * + Interrupts and flags management - * -@verbatim - - =================================================================== - ##### How to use this driver ##### - =================================================================== - [..] - (#) Enable peripheral clock using the following functions - RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE) for SPI1 - RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE) for SPI2 - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI3 - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI4 - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI5 - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI6. - - (#) Enable SCK, MOSI, MISO and NSS GPIO clocks using RCC_AHB1PeriphClockCmd() - function. In I2S mode, if an external clock source is used then the I2S - CKIN pin GPIO clock should also be enabled. - - (#) Peripherals alternate function: - (++) Connect the pin to the desired peripherals' Alternate Function (AF) - using GPIO_PinAFConfig() function - (++) Configure the desired pin in alternate function by: - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF - (++) Select the type, pull-up/pull-down and output speed via GPIO_PuPd, - GPIO_OType and GPIO_Speed members - (++) Call GPIO_Init() function In I2S mode, if an external clock source is - used then the I2S CKIN pin should be also configured in Alternate - function Push-pull pull-up mode. - - (#) Program the Polarity, Phase, First Data, Baud Rate Prescaler, Slave - Management, Peripheral Mode and CRC Polynomial values using the SPI_Init() - function. - In I2S mode, program the Mode, Standard, Data Format, MCLK Output, Audio - frequency and Polarity using I2S_Init() function. For I2S mode, make sure - that either: - (++) I2S PLL is configured using the functions - RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S), RCC_PLLI2SCmd(ENABLE) and - RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY); or - (++) External clock source is configured using the function - RCC_I2SCLKConfig(RCC_I2S2CLKSource_Ext) and after setting correctly - the define constant I2S_EXTERNAL_CLOCK_VAL in the stm32f4xx_conf.h file. - - (#) Enable the NVIC and the corresponding interrupt using the function - SPI_ITConfig() if you need to use interrupt mode. - - (#) When using the DMA mode - (++) Configure the DMA using DMA_Init() function - (++) Active the needed channel Request using SPI_I2S_DMACmd() function - - (#) Enable the SPI using the SPI_Cmd() function or enable the I2S using - I2S_Cmd(). - - (#) Enable the DMA using the DMA_Cmd() function when using DMA mode. - - (#) Optionally, you can enable/configure the following parameters without - re-initialization (i.e there is no need to call again SPI_Init() function): - (++) When bidirectional mode (SPI_Direction_1Line_Rx or SPI_Direction_1Line_Tx) - is programmed as Data direction parameter using the SPI_Init() function - it can be possible to switch between SPI_Direction_Tx or SPI_Direction_Rx - using the SPI_BiDirectionalLineConfig() function. - (++) When SPI_NSS_Soft is selected as Slave Select Management parameter - using the SPI_Init() function it can be possible to manage the - NSS internal signal using the SPI_NSSInternalSoftwareConfig() function. - (++) Reconfigure the data size using the SPI_DataSizeConfig() function - (++) Enable or disable the SS output using the SPI_SSOutputCmd() function - - (#) To use the CRC Hardware calculation feature refer to the Peripheral - CRC hardware Calculation subsection. - - - [..] It is possible to use SPI in I2S full duplex mode, in this case, each SPI - peripheral is able to manage sending and receiving data simultaneously - using two data lines. Each SPI peripheral has an extended block called I2Sxext - (ie. I2S2ext for SPI2 and I2S3ext for SPI3). - The extension block is not a full SPI IP, it is used only as I2S slave to - implement full duplex mode. The extension block uses the same clock sources - as its master. - To configure I2S full duplex you have to: - - (#) Configure SPIx in I2S mode (I2S_Init() function) as described above. - - (#) Call the I2S_FullDuplexConfig() function using the same strucutre passed to - I2S_Init() function. - - (#) Call I2S_Cmd() for SPIx then for its extended block. - - (#) To configure interrupts or DMA requests and to get/clear flag status, - use I2Sxext instance for the extension block. - - [..] Functions that can be called with I2Sxext instances are: I2S_Cmd(), - I2S_FullDuplexConfig(), SPI_I2S_ReceiveData(), SPI_I2S_SendData(), - SPI_I2S_DMACmd(), SPI_I2S_ITConfig(), SPI_I2S_GetFlagStatus(), - SPI_I2S_ClearFlag(), SPI_I2S_GetITStatus() and SPI_I2S_ClearITPendingBit(). - - Example: To use SPI3 in Full duplex mode (SPI3 is Master Tx, I2S3ext is Slave Rx): - - RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); - I2S_StructInit(&I2SInitStruct); - I2SInitStruct.Mode = I2S_Mode_MasterTx; - I2S_Init(SPI3, &I2SInitStruct); - I2S_FullDuplexConfig(SPI3ext, &I2SInitStruct) - I2S_Cmd(SPI3, ENABLE); - I2S_Cmd(SPI3ext, ENABLE); - ... - while (SPI_I2S_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET) - {} - SPI_I2S_SendData(SPI3, txdata[i]); - ... - while (SPI_I2S_GetFlagStatus(I2S3ext, SPI_FLAG_RXNE) == RESET) - {} - rxdata[i] = SPI_I2S_ReceiveData(I2S3ext); - ... - - [..] - (@) In I2S mode: if an external clock is used as source clock for the I2S, - then the define I2S_EXTERNAL_CLOCK_VAL in file stm32f4xx_conf.h should - be enabled and set to the value of the source clock frequency (in Hz). - - (@) In SPI mode: To use the SPI TI mode, call the function SPI_TIModeCmd() - just after calling the function SPI_Init(). - -@endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_spi.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup SPI - * @brief SPI driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* SPI registers Masks */ -#define CR1_CLEAR_MASK ((uint16_t)0x3040) -#define I2SCFGR_CLEAR_MASK ((uint16_t)0xF040) - -/* RCC PLLs masks */ -#define PLLCFGR_PPLR_MASK ((uint32_t)0x70000000) -#define PLLCFGR_PPLN_MASK ((uint32_t)0x00007FC0) - -#define SPI_CR2_FRF ((uint16_t)0x0010) -#define SPI_SR_TIFRFE ((uint16_t)0x0100) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup SPI_Private_Functions - * @{ - */ - -/** @defgroup SPI_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] This section provides a set of functions allowing to initialize the SPI - Direction, SPI Mode, SPI Data Size, SPI Polarity, SPI Phase, SPI NSS - Management, SPI Baud Rate Prescaler, SPI First Bit and SPI CRC Polynomial. - - [..] The SPI_Init() function follows the SPI configuration procedures for Master - mode and Slave mode (details for these procedures are available in reference - manual (RM0090)). - -@endverbatim - * @{ - */ - -/** - * @brief De-initialize the SPIx peripheral registers to their default reset values. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode. - * - * @note The extended I2S blocks (ie. I2S2ext and I2S3ext blocks) are de-initialized - * when the relative I2S peripheral is de-initialized (the extended block's clock - * is managed by the I2S peripheral clock). - * - * @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); - } - else if (SPIx == SPI4) - { - /* Enable SPI4 reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI4, ENABLE); - /* Release SPI4 from reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI4, DISABLE); - } - else if (SPIx == SPI5) - { - /* Enable SPI5 reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI5, ENABLE); - /* Release SPI5 from reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI5, DISABLE); - } - else - { - if (SPIx == SPI6) - { - /* Enable SPI6 reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI6, ENABLE); - /* Release SPI6 from reset state */ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI6, DISABLE); - } - } -} - -/** - * @brief Initializes the SPIx peripheral according to the specified - * parameters in the SPI_InitStruct. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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 &= (uint16_t)~((uint16_t)SPI_I2SCFGR_I2SMOD); -/*---------------------------- 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. - * - * @note if an external clock is used as source clock for the I2S, then the define - * I2S_EXTERNAL_CLOCK_VAL in file stm32f4xx_conf.h should be enabled and set - * to the value of the the source clock frequency (in Hz). - * - * @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, i2sclk = 0; -#ifndef I2S_EXTERNAL_CLOCK_VAL - uint32_t pllm = 0, plln = 0, pllr = 0; -#endif /* I2S_EXTERNAL_CLOCK_VAL */ - - /* 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 I2S source Clock frequency ****************************************/ - - /* If an external I2S clock has to be used, this define should be set - in the project configuration or in the stm32f4xx_conf.h file */ - #ifdef I2S_EXTERNAL_CLOCK_VAL - /* Set external clock as I2S clock source */ - if ((RCC->CFGR & RCC_CFGR_I2SSRC) == 0) - { - RCC->CFGR |= (uint32_t)RCC_CFGR_I2SSRC; - } - - /* Set the I2S clock to the external clock value */ - i2sclk = I2S_EXTERNAL_CLOCK_VAL; - - #else /* There is no define for External I2S clock source */ - /* Set PLLI2S as I2S clock source */ - if ((RCC->CFGR & RCC_CFGR_I2SSRC) != 0) - { - RCC->CFGR &= ~(uint32_t)RCC_CFGR_I2SSRC; - } - - /* Get the PLLI2SN value */ - plln = (uint32_t)(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6) & \ - (RCC_PLLI2SCFGR_PLLI2SN >> 6)); - - /* Get the PLLI2SR value */ - pllr = (uint32_t)(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28) & \ - (RCC_PLLI2SCFGR_PLLI2SR >> 28)); - - /* Get the PLLM value */ - pllm = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM); - - /* Get the I2S source clock value */ - i2sclk = (uint32_t)(((HSE_VALUE / pllm) * plln) / pllr); - #endif /* I2S_EXTERNAL_CLOCK_VAL */ - - /* 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)(((((i2sclk / 256) * 10) / I2S_InitStruct->I2S_AudioFreq)) + 5); - } - else - { - /* MCLK output is disabled */ - tmp = (uint16_t)(((((i2sclk / (32 * packetlength)) *10 ) / I2S_InitStruct->I2S_AudioFreq)) + 5); - } - - /* Remove the flatting 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)((uint16_t)i2sdiv | (uint16_t)(i2sodd | (uint16_t)I2S_InitStruct->I2S_MCLKOutput)); - - /* Configure the I2S with the SPI_InitStruct values */ - tmpreg |= (uint16_t)((uint16_t)SPI_I2SCFGR_I2SMOD | (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, 3, 4, 5 or 6 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 |= SPI_CR1_SPE; - } - else - { - /* Disable the selected SPI peripheral */ - SPIx->CR1 &= (uint16_t)~((uint16_t)SPI_CR1_SPE); - } -} - -/** - * @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 (or I2Sxext - * for full duplex mode). - * @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_EXT(SPIx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the selected SPI peripheral (in I2S mode) */ - SPIx->I2SCFGR |= SPI_I2SCFGR_I2SE; - } - else - { - /* Disable the selected SPI peripheral in I2S mode */ - SPIx->I2SCFGR &= (uint16_t)~((uint16_t)SPI_I2SCFGR_I2SE); - } -} - -/** - * @brief Configures the data size for the selected SPI. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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 Selects the data transfer direction in bidirectional mode for the specified SPI. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 to select the SPI peripheral. - * @param SPI_Direction: specifies the data transfer direction in bidirectional 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 Configures internally by software the NSS pin for the selected SPI. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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, 3, 4, 5 or 6 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 |= (uint16_t)SPI_CR2_SSOE; - } - else - { - /* Disable the selected SPI SS output */ - SPIx->CR2 &= (uint16_t)~((uint16_t)SPI_CR2_SSOE); - } -} - -/** - * @brief Enables or disables the SPIx/I2Sx DMA interface. - * - * @note This function can be called only after the SPI_Init() function has - * been called. - * @note When TI mode is selected, the control bits SSM, SSI, CPOL and CPHA - * are not taken into consideration and are configured by hardware - * respectively to the TI mode requirements. - * - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 - * @param NewState: new state of the selected SPI TI communication mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void SPI_TIModeCmd(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 TI mode for the selected SPI peripheral */ - SPIx->CR2 |= SPI_CR2_FRF; - } - else - { - /* Disable the TI mode for the selected SPI peripheral */ - SPIx->CR2 &= (uint16_t)~SPI_CR2_FRF; - } -} - -/** - * @brief Configures the full duplex mode for the I2Sx peripheral using its - * extension I2Sxext according to the specified parameters in the - * I2S_InitStruct. - * @param I2Sxext: where x can be 2 or 3 to select the I2S peripheral extension block. - * @param I2S_InitStruct: pointer to an I2S_InitTypeDef structure that - * contains the configuration information for the specified I2S peripheral - * extension. - * - * @note The structure pointed by I2S_InitStruct parameter should be the same - * used for the master I2S peripheral. In this case, if the master is - * configured as transmitter, the slave will be receiver and vice versa. - * Or you can force a different mode by modifying the field I2S_Mode to the - * value I2S_SlaveRx or I2S_SlaveTx indepedently of the master configuration. - * - * @note The I2S full duplex extension can be configured in slave mode only. - * - * @retval None - */ -void I2S_FullDuplexConfig(SPI_TypeDef* I2Sxext, I2S_InitTypeDef* I2S_InitStruct) -{ - uint16_t tmpreg = 0, tmp = 0; - - /* Check the I2S parameters */ - assert_param(IS_I2S_EXT_PERIPH(I2Sxext)); - 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_CPOL(I2S_InitStruct->I2S_CPOL)); - -/*----------------------- SPIx I2SCFGR & I2SPR Configuration -----------------*/ - /* Clear I2SMOD, I2SE, I2SCFG, PCMSYNC, I2SSTD, CKPOL, DATLEN and CHLEN bits */ - I2Sxext->I2SCFGR &= I2SCFGR_CLEAR_MASK; - I2Sxext->I2SPR = 0x0002; - - /* Get the I2SCFGR register value */ - tmpreg = I2Sxext->I2SCFGR; - - /* Get the mode to be configured for the extended I2S */ - if ((I2S_InitStruct->I2S_Mode == I2S_Mode_MasterTx) || (I2S_InitStruct->I2S_Mode == I2S_Mode_SlaveTx)) - { - tmp = I2S_Mode_SlaveRx; - } - else - { - if ((I2S_InitStruct->I2S_Mode == I2S_Mode_MasterRx) || (I2S_InitStruct->I2S_Mode == I2S_Mode_SlaveRx)) - { - tmp = I2S_Mode_SlaveTx; - } - } - - - /* Configure the I2S with the SPI_InitStruct values */ - tmpreg |= (uint16_t)((uint16_t)SPI_I2SCFGR_I2SMOD | (uint16_t)(tmp | \ - (uint16_t)(I2S_InitStruct->I2S_Standard | (uint16_t)(I2S_InitStruct->I2S_DataFormat | \ - (uint16_t)I2S_InitStruct->I2S_CPOL)))); - - /* Write to SPIx I2SCFGR */ - I2Sxext->I2SCFGR = tmpreg; -} - -/** - * @} - */ - -/** @defgroup SPI_Group2 Data transfers functions - * @brief Data transfers functions - * -@verbatim - =============================================================================== - ##### Data transfers functions ##### - =============================================================================== - - [..] This section provides a set of functions allowing to manage the SPI data - transfers. In reception, data are received and then stored into an internal - Rx buffer while. In transmission, data are first stored into an internal Tx - buffer before being transmitted. - - [..] The read access of the SPI_DR register can be done using the SPI_I2S_ReceiveData() - function and returns the Rx buffered value. Whereas a write access to the SPI_DR - can be done using SPI_I2S_SendData() function and stores the written data into - Tx buffer. - -@endverbatim - * @{ - */ - -/** - * @brief Returns the most recent received data by the SPIx/I2Sx peripheral. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex 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_EXT(SPIx)); - - /* Return the data in the DR register */ - return SPIx->DR; -} - -/** - * @brief Transmits a Data through the SPIx/I2Sx peripheral. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex 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_EXT(SPIx)); - - /* Write in the DR register the data to be sent */ - SPIx->DR = Data; -} - -/** - * @} - */ - -/** @defgroup SPI_Group3 Hardware CRC Calculation functions - * @brief Hardware CRC Calculation functions - * -@verbatim - =============================================================================== - ##### Hardware CRC Calculation functions ##### - =============================================================================== - - [..] This section provides a set of functions allowing to manage the SPI CRC hardware - calculation - - [..] SPI communication using CRC is possible through the following procedure: - (#) Program the Data direction, Polarity, Phase, First Data, Baud Rate Prescaler, - Slave Management, Peripheral Mode and CRC Polynomial values using the SPI_Init() - function. - (#) Enable the CRC calculation using the SPI_CalculateCRC() function. - (#) Enable the SPI using the SPI_Cmd() function - (#) Before writing the last data to the TX buffer, set the CRCNext bit using the - SPI_TransmitCRC() function to indicate that after transmission of the last - data, the CRC should be transmitted. - (#) After transmitting the last data, the SPI transmits the CRC. The SPI_CR1_CRCNEXT - bit is reset. The CRC is also received and compared against the SPI_RXCRCR - value. - If the value does not match, the SPI_FLAG_CRCERR flag is set and an interrupt - can be generated when the SPI_I2S_IT_ERR interrupt is enabled. - - [..] - (@) It is advised not to read the calculated CRC values during the communication. - - (@) When the SPI is in slave mode, be careful to enable CRC calculation only - when the clock is stable, that is, when the clock is in the steady state. - If not, a wrong CRC calculation may be done. In fact, the CRC is sensitive - to the SCK slave input clock as soon as CRCEN is set, and this, whatever - the value of the SPE bit. - - (@) With high bitrate frequencies, be careful when transmitting the CRC. - As the number of used CPU cycles has to be as low as possible in the CRC - transfer phase, it is forbidden to call software functions in the CRC - transmission sequence to avoid errors in the last data and CRC reception. - In fact, CRCNEXT bit has to be written before the end of the transmission/reception - of the last data. - - (@) For high bit rate frequencies, it is advised to use the DMA mode to avoid the - degradation of the SPI speed performance due to CPU accesses impacting the - SPI bandwidth. - - (@) When the STM32F4xx is configured as slave and the NSS hardware mode is - used, the NSS pin needs to be kept low between the data phase and the CRC - phase. - - (@) When the SPI is configured in slave mode with the CRC feature enabled, CRC - calculation takes place even if a high level is applied on the NSS pin. - This may happen for example in case of a multi-slave environment where the - communication master addresses slaves alternately. - - (@) Between a slave de-selection (high level on NSS) and a new slave selection - (low level on NSS), the CRC value should be cleared on both master and slave - sides in order to resynchronize the master and slave for their respective - CRC calculation. - - (@) To clear the CRC, follow the procedure below: - (#@) Disable SPI using the SPI_Cmd() function - (#@) Disable the CRC calculation using the SPI_CalculateCRC() function. - (#@) Enable the CRC calculation using the SPI_CalculateCRC() function. - (#@) Enable SPI using the SPI_Cmd() function. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the CRC value calculation of the transferred bytes. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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 |= SPI_CR1_CRCEN; - } - else - { - /* Disable the selected SPI CRC calculation */ - SPIx->CR1 &= (uint16_t)~((uint16_t)SPI_CR1_CRCEN); - } -} - -/** - * @brief Transmit the SPIx CRC value. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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 |= SPI_CR1_CRCNEXT; -} - -/** - * @brief Returns the transmit or the receive CRC register value for the specified SPI. - * @param SPIx: where x can be 1, 2, 3, 4, 5 or 6 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, 3, 4, 5 or 6 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; -} - -/** - * @} - */ - -/** @defgroup SPI_Group4 DMA transfers management functions - * @brief DMA transfers management functions - * -@verbatim - =============================================================================== - ##### DMA transfers management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the SPIx/I2Sx DMA interface. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_DMAReq: specifies the SPI 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 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_EXT(SPIx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - assert_param(IS_SPI_I2S_DMAREQ(SPI_I2S_DMAReq)); - - if (NewState != DISABLE) - { - /* Enable the selected SPI DMA requests */ - SPIx->CR2 |= SPI_I2S_DMAReq; - } - else - { - /* Disable the selected SPI DMA requests */ - SPIx->CR2 &= (uint16_t)~SPI_I2S_DMAReq; - } -} - -/** - * @} - */ - -/** @defgroup SPI_Group5 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - - [..] This section provides a set of functions allowing to configure the SPI Interrupts - sources and check or clear the flags or pending bits status. - The user should identify which mode will be used in his application to manage - the communication: Polling mode, Interrupt mode or DMA mode. - - *** Polling Mode *** - ==================== -[..] In Polling Mode, the SPI/I2S communication can be managed by 9 flags: - (#) SPI_I2S_FLAG_TXE : to indicate the status of the transmit buffer register - (#) SPI_I2S_FLAG_RXNE : to indicate the status of the receive buffer register - (#) SPI_I2S_FLAG_BSY : to indicate the state of the communication layer of the SPI. - (#) SPI_FLAG_CRCERR : to indicate if a CRC Calculation error occur - (#) SPI_FLAG_MODF : to indicate if a Mode Fault error occur - (#) SPI_I2S_FLAG_OVR : to indicate if an Overrun error occur - (#) I2S_FLAG_TIFRFE: to indicate a Frame Format error occurs. - (#) I2S_FLAG_UDR: to indicate an Underrun error occurs. - (#) I2S_FLAG_CHSIDE: to indicate Channel Side. - - (@) Do not use the BSY flag to handle each data transmission or reception. It is - better to use the TXE and RXNE flags instead. - - [..] In this Mode it is advised to use the following functions: - (+) FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); - (+) void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); - - *** Interrupt Mode *** - ====================== - [..] In Interrupt Mode, the SPI communication can be managed by 3 interrupt sources - and 7 pending bits: - (+) Pending Bits: - (##) SPI_I2S_IT_TXE : to indicate the status of the transmit buffer register - (##) SPI_I2S_IT_RXNE : to indicate the status of the receive buffer register - (##) SPI_IT_CRCERR : to indicate if a CRC Calculation error occur (available in SPI mode only) - (##) SPI_IT_MODF : to indicate if a Mode Fault error occur (available in SPI mode only) - (##) SPI_I2S_IT_OVR : to indicate if an Overrun error occur - (##) I2S_IT_UDR : to indicate an Underrun Error occurs (available in I2S mode only). - (##) I2S_FLAG_TIFRFE : to indicate a Frame Format error occurs (available in TI mode only). - - (+) Interrupt Source: - (##) SPI_I2S_IT_TXE: specifies the interrupt source for the Tx buffer empty - interrupt. - (##) SPI_I2S_IT_RXNE : specifies the interrupt source for the Rx buffer not - empty interrupt. - (##) SPI_I2S_IT_ERR : specifies the interrupt source for the errors interrupt. - - [..] In this Mode it is advised to use the following functions: - (+) void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); - (+) ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); - (+) void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); - - *** DMA Mode *** - ================ - [..] In DMA Mode, the SPI communication can be managed by 2 DMA Channel requests: - (#) SPI_I2S_DMAReq_Tx: specifies the Tx buffer DMA transfer request - (#) SPI_I2S_DMAReq_Rx: specifies the Rx buffer DMA transfer request - - [..] In this Mode it is advised to use the following function: - (+) void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState - NewState); - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified SPI/I2S interrupts. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_IT: specifies the SPI 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 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_EXT(SPIx)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - assert_param(IS_SPI_I2S_CONFIG_IT(SPI_I2S_IT)); - - /* Get the SPI 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 interrupt */ - SPIx->CR2 |= itmask; - } - else - { - /* Disable the selected SPI interrupt */ - SPIx->CR2 &= (uint16_t)~itmask; - } -} - -/** - * @brief Checks whether the specified SPIx/I2Sx flag is set or not. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_FLAG: specifies the SPI 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 SPI_I2S_FLAG_TIFRFE: Format Error. - * @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_EXT(SPIx)); - assert_param(IS_SPI_I2S_GET_FLAG(SPI_I2S_FLAG)); - - /* Check the status of the specified SPI 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: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_FLAG: specifies the SPI flag to clear. - * This function clears only CRCERR flag. - * @arg SPI_FLAG_CRCERR: CRC Error 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()). - * @note UDR (UnderRun error) flag is cleared by a read operation to - * SPI_SR register (SPI_I2S_GetFlagStatus()). - * @note 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_EXT(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 SPIx/I2Sx interrupt has occurred or not. - * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_IT: specifies the SPI 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 interrupt. - * @arg SPI_I2S_IT_TIFRFE: Format 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_EXT(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 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 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: To select the SPIx/I2Sx peripheral, where x can be: 1, 2, 3, 4, 5 or 6 - * in SPI mode or 2 or 3 in I2S mode or I2Sxext for I2S full duplex mode. - * @param SPI_I2S_IT: specifies the SPI interrupt pending bit to clear. - * This function clears only CRCERR interrupt pending bit. - * @arg SPI_IT_CRCERR: CRC Error interrupt. - * - * @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()). - * @note UDR (UnderRun Error) interrupt pending bit is cleared by a read - * operation to SPI_SR register (SPI_I2S_GetITStatus()). - * @note 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_EXT(SPIx)); - assert_param(IS_SPI_I2S_CLEAR_IT(SPI_I2S_IT)); - - /* Get the SPI_I2S 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 STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c deleted file mode 100644 index 160181c5..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c +++ /dev/null @@ -1,206 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_syscfg.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the SYSCFG peripheral. - * - @verbatim - - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] This driver provides functions for: - - (#) Remapping the memory accessible in the code area using SYSCFG_MemoryRemapConfig() - - (#) Manage the EXTI lines connection to the GPIOs using SYSCFG_EXTILineConfig() - - (#) Select the ETHERNET media interface (RMII/RII) using SYSCFG_ETH_MediaInterfaceConfig() - - -@- SYSCFG APB clock must be enabled to get write access to SYSCFG registers, - using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_syscfg.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup SYSCFG - * @brief SYSCFG driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* ------------ RCC registers bit address in the alias region ----------- */ -#define SYSCFG_OFFSET (SYSCFG_BASE - PERIPH_BASE) - -/* --- PMC Register ---*/ -/* Alias word address of MII_RMII_SEL bit */ -#define PMC_OFFSET (SYSCFG_OFFSET + 0x04) -#define MII_RMII_SEL_BitNumber ((uint8_t)0x17) -#define PMC_MII_RMII_SEL_BB (PERIPH_BB_BASE + (PMC_OFFSET * 32) + (MII_RMII_SEL_BitNumber * 4)) - -/* --- CMPCR Register ---*/ -/* Alias word address of CMP_PD bit */ -#define CMPCR_OFFSET (SYSCFG_OFFSET + 0x20) -#define CMP_PD_BitNumber ((uint8_t)0x00) -#define CMPCR_CMP_PD_BB (PERIPH_BB_BASE + (CMPCR_OFFSET * 32) + (CMP_PD_BitNumber * 4)) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup SYSCFG_Private_Functions - * @{ - */ - -/** - * @brief Deinitializes the Alternate Functions (remap and EXTI configuration) - * registers to their default reset values. - * @param None - * @retval None - */ -void SYSCFG_DeInit(void) -{ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, DISABLE); -} - -/** - * @brief Changes the mapping of the specified pin. - * @param SYSCFG_Memory: selects the memory remapping. - * This parameter can be one of the following values: - * @arg SYSCFG_MemoryRemap_Flash: Main Flash memory mapped at 0x00000000 - * @arg SYSCFG_MemoryRemap_SystemFlash: System Flash memory mapped at 0x00000000 - * @arg SYSCFG_MemoryRemap_FSMC: FSMC (Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000 - * @arg SYSCFG_MemoryRemap_SRAM: Embedded SRAM (112kB) mapped at 0x00000000 - * @retval None - */ -void SYSCFG_MemoryRemapConfig(uint8_t SYSCFG_MemoryRemap) -{ - /* Check the parameters */ - assert_param(IS_SYSCFG_MEMORY_REMAP_CONFING(SYSCFG_MemoryRemap)); - - SYSCFG->MEMRMP = SYSCFG_MemoryRemap; -} - -/** - * @brief Selects the GPIO pin used as EXTI Line. - * @param EXTI_PortSourceGPIOx : selects the GPIO port to be used as source for - * EXTI lines where x can be (A..I) for STM32F40xx/STM32F41xx - * and STM32F427x/STM32F437x devices. - * - * @param EXTI_PinSourcex: specifies the EXTI line to be configured. - * This parameter can be EXTI_PinSourcex where x can be (0..15, except - * for EXTI_PortSourceGPIOI x can be (0..11) for STM32F40xx/STM32F41xx - * and STM32F427x/STM32F437x devices. - * - * @retval None - */ -void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex) -{ - uint32_t tmp = 0x00; - - /* Check the parameters */ - assert_param(IS_EXTI_PORT_SOURCE(EXTI_PortSourceGPIOx)); - assert_param(IS_EXTI_PIN_SOURCE(EXTI_PinSourcex)); - - tmp = ((uint32_t)0x0F) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03)); - SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] &= ~tmp; - SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] |= (((uint32_t)EXTI_PortSourceGPIOx) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03))); -} - -/** - * @brief Selects the ETHERNET media interface - * @param SYSCFG_ETH_MediaInterface: specifies the Media Interface mode. - * This parameter can be one of the following values: - * @arg SYSCFG_ETH_MediaInterface_MII: MII mode selected - * @arg SYSCFG_ETH_MediaInterface_RMII: RMII mode selected - * @retval None - */ -void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface) -{ - assert_param(IS_SYSCFG_ETH_MEDIA_INTERFACE(SYSCFG_ETH_MediaInterface)); - /* Configure MII_RMII selection bit */ - *(__IO uint32_t *) PMC_MII_RMII_SEL_BB = SYSCFG_ETH_MediaInterface; -} - -/** - * @brief Enables or disables the I/O Compensation Cell. - * @note The I/O compensation cell can be used only when the device supply - * voltage ranges from 2.4 to 3.6 V. - * @param NewState: new state of the I/O Compensation Cell. - * This parameter can be one of the following values: - * @arg ENABLE: I/O compensation cell enabled - * @arg DISABLE: I/O compensation cell power-down mode - * @retval None - */ -void SYSCFG_CompensationCellCmd(FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - *(__IO uint32_t *) CMPCR_CMP_PD_BB = (uint32_t)NewState; -} - -/** - * @brief Checks whether the I/O Compensation Cell ready flag is set or not. - * @param None - * @retval The new state of the I/O Compensation Cell ready flag (SET or RESET) - */ -FlagStatus SYSCFG_GetCompensationCellStatus(void) -{ - FlagStatus bitstatus = RESET; - - if ((SYSCFG->CMPCR & SYSCFG_CMPCR_READY ) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c deleted file mode 100644 index 1616a625..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c +++ /dev/null @@ -1,3365 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_tim.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the TIM peripheral: - * + TimeBase management - * + Output Compare management - * + Input Capture management - * + Advanced-control timers (TIM1 and TIM8) specific features - * + Interrupts, DMA and flags management - * + Clocks management - * + Synchronization management - * + Specific interface management - * + Specific remapping management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - This driver provides functions to configure and program the TIM - of all STM32F4xx devices. - These functions are split in 9 groups: - - (#) TIM TimeBase management: this group includes all needed functions - to configure the TM Timebase unit: - (++) Set/Get Prescaler - (++) Set/Get Autoreload - (++) Counter modes configuration - (++) Set Clock division - (++) Select the One Pulse mode - (++) Update Request Configuration - (++) Update Disable Configuration - (++) Auto-Preload Configuration - (++) Enable/Disable the counter - - (#) TIM Output Compare management: this group includes all needed - functions to configure the Capture/Compare unit used in Output - compare mode: - (++) Configure each channel, independently, in Output Compare mode - (++) Select the output compare modes - (++) Select the Polarities of each channel - (++) Set/Get the Capture/Compare register values - (++) Select the Output Compare Fast mode - (++) Select the Output Compare Forced mode - (++) Output Compare-Preload Configuration - (++) Clear Output Compare Reference - (++) Select the OCREF Clear signal - (++) Enable/Disable the Capture/Compare Channels - - (#) TIM Input Capture management: this group includes all needed - functions to configure the Capture/Compare unit used in - Input Capture mode: - (++) Configure each channel in input capture mode - (++) Configure Channel1/2 in PWM Input mode - (++) Set the Input Capture Prescaler - (++) Get the Capture/Compare values - - (#) Advanced-control timers (TIM1 and TIM8) specific features - (++) Configures the Break input, dead time, Lock level, the OSSI, - the OSSR State and the AOE(automatic output enable) - (++) Enable/Disable the TIM peripheral Main Outputs - (++) Select the Commutation event - (++) Set/Reset the Capture Compare Preload Control bit - - (#) TIM interrupts, DMA and flags management - (++) Enable/Disable interrupt sources - (++) Get flags status - (++) Clear flags/ Pending bits - (++) Enable/Disable DMA requests - (++) Configure DMA burst mode - (++) Select CaptureCompare DMA request - - (#) TIM clocks management: this group includes all needed functions - to configure the clock controller unit: - (++) Select internal/External clock - (++) Select the external clock mode: ETR(Mode1/Mode2), TIx or ITRx - - (#) TIM synchronization management: this group includes all needed - functions to configure the Synchronization unit: - (++) Select Input Trigger - (++) Select Output Trigger - (++) Select Master Slave Mode - (++) ETR Configuration when used as external trigger - - (#) TIM specific interface management, this group includes all - needed functions to use the specific TIM interface: - (++) Encoder Interface Configuration - (++) Select Hall Sensor - - (#) TIM specific remapping management includes the Remapping - configuration of specific timers - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_tim.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup TIM - * @brief TIM driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* ---------------------- TIM registers bit mask ------------------------ */ -#define SMCR_ETR_MASK ((uint16_t)0x00FF) -#define CCMR_OFFSET ((uint16_t)0x0018) -#define CCER_CCE_SET ((uint16_t)0x0001) -#define CCER_CCNE_SET ((uint16_t)0x0004) -#define CCMR_OC13M_MASK ((uint16_t)0xFF8F) -#define CCMR_OC24M_MASK ((uint16_t)0x8FFF) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); -static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); -static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); -static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup TIM_Private_Functions - * @{ - */ - -/** @defgroup TIM_Group1 TimeBase management functions - * @brief TimeBase management functions - * -@verbatim - =============================================================================== - ##### TimeBase management functions ##### - =============================================================================== - - - ##### TIM Driver: how to use it in Timing(Time base) Mode ##### - =============================================================================== - [..] - To use the Timer in Timing(Time base) mode, the following steps are mandatory: - - (#) Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) function - - (#) Fill the TIM_TimeBaseInitStruct with the desired parameters. - - (#) Call TIM_TimeBaseInit(TIMx, &TIM_TimeBaseInitStruct) to configure the Time Base unit - with the corresponding configuration - - (#) Enable the NVIC if you need to generate the update interrupt. - - (#) Enable the corresponding interrupt using the function TIM_ITConfig(TIMx, TIM_IT_Update) - - (#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter. - - -@- All other functions can be used separately to modify, if needed, - a specific feature of the Timer. - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the TIMx peripheral registers to their default reset values. - * @param TIMx: where x can be 1 to 14 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); - } - } -} - -/** - * @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 14 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)(~(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)(~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)) - { - /* Set the Repetition Counter value */ - TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter; - } - - /* Generate an update event to reload the Prescaler - and the repetition counter(only for TIM1 and TIM8) value immediatly */ - TIMx->EGR = TIM_PSCReloadMode_Immediate; -} - -/** - * @brief Fills each TIM_TimeBaseInitStruct member with its default value. - * @param TIM_TimeBaseInitStruct : pointer to a TIM_TimeBaseInitTypeDef - * structure which will be initialized. - * @retval None - */ -void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) -{ - /* Set the default configuration */ - TIM_TimeBaseInitStruct->TIM_Period = 0xFFFFFFFF; - TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000; - TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1; - TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up; - TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000; -} - -/** - * @brief Configures the TIMx Prescaler. - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @param Prescaler: specifies the Prescaler Register value - * @param TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode - * This parameter can be one of the following values: - * @arg TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event. - * @arg TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediatly. - * @retval None - */ -void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode)); - /* Set the Prescaler value */ - TIMx->PSC = Prescaler; - /* Set or reset the UG Bit */ - TIMx->EGR = TIM_PSCReloadMode; -} - -/** - * @brief Specifies the TIMx Counter Mode to be used. - * @param TIMx: where x can be 1, 2, 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)~(TIM_CR1_DIR | TIM_CR1_CMS); - - /* Set the Counter Mode */ - tmpcr1 |= TIM_CounterMode; - - /* Write to TIMx CR1 register */ - TIMx->CR1 = tmpcr1; -} - -/** - * @brief Sets the TIMx Counter Register value - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @param Counter: specifies the Counter register new value. - * @retval None - */ -void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Set the Counter Register value */ - TIMx->CNT = Counter; -} - -/** - * @brief Sets the TIMx Autoreload Register value - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @param Autoreload: specifies the Autoreload register new value. - * @retval None - */ -void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Set the Autoreload Register value */ - TIMx->ARR = Autoreload; -} - -/** - * @brief Gets the TIMx Counter value. - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @retval Counter Register value - */ -uint32_t TIM_GetCounter(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Get the Counter Register value */ - return TIMx->CNT; -} - -/** - * @brief Gets the TIMx Prescaler value. - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @retval Prescaler Register value. - */ -uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Get the Prescaler Register value */ - return TIMx->PSC; -} - -/** - * @brief Enables or Disables the TIMx Update event. - * @param TIMx: where x can be 1 to 14 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)~TIM_CR1_UDIS; - } -} - -/** - * @brief Configures the TIMx Update Request Interrupt source. - * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. - * @param TIM_UpdateSource: specifies the Update source. - * This parameter can be one of the following values: - * @arg TIM_UpdateSource_Global: 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_Regular: 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)~TIM_CR1_URS; - } -} - -/** - * @brief Enables or disables TIMx peripheral Preload register on ARR. - * @param TIMx: where x can be 1 to 14 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)~TIM_CR1_ARPE; - } -} - -/** - * @brief Selects the TIMx's One Pulse Mode. - * @param TIMx: where x can be 1 to 14 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)~TIM_CR1_OPM; - - /* Configure the OPM Mode */ - TIMx->CR1 |= TIM_OPMode; -} - -/** - * @brief Sets the TIMx Clock Division value. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_CKD_DIV(TIM_CKD)); - - /* Reset the CKD Bits */ - TIMx->CR1 &= (uint16_t)(~TIM_CR1_CKD); - - /* Set the CKD value */ - TIMx->CR1 |= TIM_CKD; -} - -/** - * @brief Enables or disables the specified TIM peripheral. - * @param TIMx: where x can be 1 to 14 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)~TIM_CR1_CEN; - } -} -/** - * @} - */ - -/** @defgroup TIM_Group2 Output Compare management functions - * @brief Output Compare management functions - * -@verbatim - =============================================================================== - ##### Output Compare management functions ##### - =============================================================================== - - - ##### TIM Driver: how to use it in Output Compare Mode ##### - =============================================================================== - [..] - To use the Timer in Output Compare mode, the following steps are mandatory: - - (#) Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) - function - - (#) Configure the TIM pins by configuring the corresponding GPIO pins - - (#) Configure the Time base unit as described in the first part of this driver, - (++) if needed, else the Timer will run with the default configuration: - Autoreload value = 0xFFFF - (++) Prescaler value = 0x0000 - (++) Counter mode = Up counting - (++) Clock Division = TIM_CKD_DIV1 - - (#) Fill the TIM_OCInitStruct with the desired parameters including: - (++) The TIM Output Compare mode: TIM_OCMode - (++) TIM Output State: TIM_OutputState - (++) TIM Pulse value: TIM_Pulse - (++) TIM Output Compare Polarity : TIM_OCPolarity - - (#) Call TIM_OCxInit(TIMx, &TIM_OCInitStruct) to configure the desired - channel with the corresponding configuration - - (#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter. - - -@- All other functions can be used separately to modify, if needed, - a specific feature of the Timer. - - -@- In case of PWM mode, this function is mandatory: - TIM_OCxPreloadConfig(TIMx, TIM_OCPreload_ENABLE); - - -@- If the corresponding interrupt or DMA request are needed, the user should: - (+@) Enable the NVIC (or the DMA) to use the TIM interrupts (or DMA requests). - (+@) Enable the corresponding interrupt (or DMA request) using the function - TIM_ITConfig(TIMx, TIM_IT_CCx) (or TIM_DMA_Cmd(TIMx, TIM_DMA_CCx)) - -@endverbatim - * @{ - */ - -/** - * @brief Initializes the TIMx Channel1 according to the specified parameters in - * the TIM_OCInitStruct. - * @param TIMx: where x can be 1 to 14 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_LIST1_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)~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)~TIM_CCMR1_OC1M; - tmpccmrx &= (uint16_t)~TIM_CCMR1_CC1S; - /* Select the Output Compare Mode */ - tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; - - /* Reset the Output Polarity level */ - tmpccer &= (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)) - { - 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)~TIM_CCER_CC1NP; - /* Set the Output N Polarity */ - tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity; - /* Reset the Output N State */ - tmpccer &= (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)~TIM_CR2_OIS1; - tmpcr2 &= (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 or 12 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_LIST2_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)~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)~TIM_CCMR1_OC2M; - tmpccmrx &= (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)~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)~TIM_CCER_CC2NP; - /* Set the Output N Polarity */ - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4); - /* Reset the Output N State */ - tmpccer &= (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)~TIM_CR2_OIS2; - tmpcr2 &= (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 3: Reset the CC2E Bit */ - TIMx->CCER &= (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)~TIM_CCMR2_OC3M; - tmpccmrx &= (uint16_t)~TIM_CCMR2_CC3S; - /* Select the Output Compare Mode */ - tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; - - /* Reset the Output Polarity level */ - tmpccer &= (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)~TIM_CCER_CC3NP; - /* Set the Output N Polarity */ - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8); - /* Reset the Output N State */ - tmpccer &= (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)~TIM_CR2_OIS3; - tmpcr2 &= (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 4: Reset the CC4E Bit */ - TIMx->CCER &= (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)~TIM_CCMR2_OC4M; - tmpccmrx &= (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)~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) ~TIM_CR2_OIS4; - /* Set the Output Idle state */ - tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6); - } - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - - /* Write to TIMx CCMR2 */ - TIMx->CCMR2 = tmpccmrx; - - /* Set the Capture Compare Register value */ - TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse; - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; -} - -/** - * @brief Fills each TIM_OCInitStruct member with its default value. - * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure which will - * be initialized. - * @retval None - */ -void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct) -{ - /* Set the default configuration */ - TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing; - TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable; - TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable; - TIM_OCInitStruct->TIM_Pulse = 0x00000000; - TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High; - TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High; - TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset; - TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset; -} - -/** - * @brief Selects the TIM Output Compare Mode. - * @note This function disables the selected channel before changing the Output - * Compare Mode. If needed, user has to enable this channel using - * TIM_CCxCmd() and TIM_CCxNCmd() functions. - * @param TIMx: where x can be 1 to 14 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_LIST1_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 &= CCMR_OC13M_MASK; - - /* 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 &= CCMR_OC24M_MASK; - - /* Configure the OCxM bits in the CCMRx register */ - *(__IO uint32_t *) tmp |= (uint16_t)(TIM_OCMode << 8); - } -} - -/** - * @brief Sets the TIMx Capture Compare1 Register value - * @param TIMx: where x can be 1 to 14 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, uint32_t Compare1) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST1_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 or 12 to select the TIM - * peripheral. - * @param Compare2: specifies the Capture Compare2 register new value. - * @retval None - */ -void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST2_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, uint32_t Compare3) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - - /* Set the Capture Compare3 Register value */ - TIMx->CCR3 = Compare3; -} - -/** - * @brief Sets the TIMx Capture Compare4 Register value - * @param TIMx: where x can be 1, 2, 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, uint32_t Compare4) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - - /* Set the Capture Compare4 Register value */ - TIMx->CCR4 = Compare4; -} - -/** - * @brief Forces the TIMx output 1 waveform to active or inactive level. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC1M Bits */ - tmpccmr1 &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC2M Bits */ - tmpccmr1 &= (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)~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)~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 the TIMx peripheral Preload register on CCR1. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); - - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC1PE Bit */ - tmpccmr1 &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); - - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC2PE Bit */ - tmpccmr1 &= (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)(~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)(~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 14 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_LIST1_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)~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 or 12 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_LIST2_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)(~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)~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)(~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 to 14 except 6 and 7, 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); - - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC1CE Bit */ - tmpccmr1 &= (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, 8, 9 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); - - tmpccmr1 = TIMx->CCMR1; - - /* Reset the OC2CE Bit */ - tmpccmr1 &= (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)~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)~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 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC1P Bit */ - tmpccer &= (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 or 8 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_LIST4_PERIPH(TIMx)); - assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC1NP Bit */ - tmpccer &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC2P Bit */ - tmpccer &= (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_LIST4_PERIPH(TIMx)); - assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC2NP Bit */ - tmpccer &= (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)~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_LIST4_PERIPH(TIMx)); - assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); - - tmpccer = TIMx->CCER; - - /* Set or Reset the CC3NP Bit */ - tmpccer &= (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)~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 14 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_LIST1_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 or 8 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_LIST4_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); -} -/** - * @} - */ - -/** @defgroup TIM_Group3 Input Capture management functions - * @brief Input Capture management functions - * -@verbatim - =============================================================================== - ##### Input Capture management functions ##### - =============================================================================== - - ##### TIM Driver: how to use it in Input Capture Mode ##### - =============================================================================== - [..] - To use the Timer in Input Capture mode, the following steps are mandatory: - - (#) Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) - function - - (#) Configure the TIM pins by configuring the corresponding GPIO pins - - (#) Configure the Time base unit as described in the first part of this driver, - if needed, else the Timer will run with the default configuration: - (++) Autoreload value = 0xFFFF - (++) Prescaler value = 0x0000 - (++) Counter mode = Up counting - (++) Clock Division = TIM_CKD_DIV1 - - (#) Fill the TIM_ICInitStruct with the desired parameters including: - (++) TIM Channel: TIM_Channel - (++) TIM Input Capture polarity: TIM_ICPolarity - (++) TIM Input Capture selection: TIM_ICSelection - (++) TIM Input Capture Prescaler: TIM_ICPrescaler - (++) TIM Input CApture filter value: TIM_ICFilter - - (#) Call TIM_ICInit(TIMx, &TIM_ICInitStruct) to configure the desired channel - with the corresponding configuration and to measure only frequency - or duty cycle of the input signal, or, Call TIM_PWMIConfig(TIMx, &TIM_ICInitStruct) - to configure the desired channels with the corresponding configuration - and to measure the frequency and the duty cycle of the input signal - - (#) Enable the NVIC or the DMA to read the measured frequency. - - (#) Enable the corresponding interrupt (or DMA request) to read the Captured - value, using the function TIM_ITConfig(TIMx, TIM_IT_CCx) - (or TIM_DMA_Cmd(TIMx, TIM_DMA_CCx)) - - (#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter. - - (#) Use TIM_GetCapturex(TIMx); to read the captured value. - - -@- All other functions can be used separately to modify, if needed, - a specific feature of the Timer. - -@endverbatim - * @{ - */ - -/** - * @brief Initializes the TIM peripheral according to the specified parameters - * in the TIM_ICInitStruct. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_IC_POLARITY(TIM_ICInitStruct->TIM_ICPolarity)); - 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 (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); - } - else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2) - { - /* TI2 Configuration */ - assert_param(IS_TIM_LIST2_PERIPH(TIMx)); - 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) - { - /* TI3 Configuration */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - 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 - { - /* TI4 Configuration */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } -} - -/** - * @brief Fills each TIM_ICInitStruct member with its default value. - * @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure which will - * be initialized. - * @retval None - */ -void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct) -{ - /* Set the default configuration */ - TIM_ICInitStruct->TIM_Channel = TIM_Channel_1; - TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising; - TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI; - TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1; - TIM_ICInitStruct->TIM_ICFilter = 0x00; -} - -/** - * @brief Configures the TIM peripheral according to the specified parameters - * in the TIM_ICInitStruct to measure an external PWM signal. - * @param TIMx: where x can be 1, 2, 3, 4, 5,8, 9 or 12 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_LIST2_PERIPH(TIMx)); - - /* Select the Opposite Input Polarity */ - if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising) - { - icoppositepolarity = TIM_ICPolarity_Falling; - } - else - { - icoppositepolarity = TIM_ICPolarity_Rising; - } - /* Select the Opposite Input */ - if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI) - { - icoppositeselection = TIM_ICSelection_IndirectTI; - } - else - { - icoppositeselection = TIM_ICSelection_DirectTI; - } - if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) - { - /* TI1 Configuration */ - TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - /* TI2 Configuration */ - TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } - else - { - /* TI2 Configuration */ - TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - /* TI1 Configuration */ - TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); - /* Set the Input Capture Prescaler value */ - TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } -} - -/** - * @brief Gets the TIMx Input Capture 1 value. - * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. - * @retval Capture Compare 1 Register value. - */ -uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST1_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 or 12 to select the TIM - * peripheral. - * @retval Capture Compare 2 Register value. - */ -uint32_t TIM_GetCapture2(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST2_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. - */ -uint32_t TIM_GetCapture3(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - - /* Get the Capture 3 Register value */ - return TIMx->CCR3; -} - -/** - * @brief Gets the TIMx Input Capture 4 value. - * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. - * @retval Capture Compare 4 Register value. - */ -uint32_t TIM_GetCapture4(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST3_PERIPH(TIMx)); - - /* Get the Capture 4 Register value */ - return TIMx->CCR4; -} - -/** - * @brief Sets the TIMx Input Capture 1 prescaler. - * @param TIMx: where x can be 1 to 14 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); - - /* Reset the IC1PSC Bits */ - TIMx->CCMR1 &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); - - /* Reset the IC2PSC Bits */ - TIMx->CCMR1 &= (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)~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)~TIM_CCMR2_IC4PSC; - - /* Set the IC4PSC value */ - TIMx->CCMR2 |= (uint16_t)(TIM_ICPSC << 8); -} -/** - * @} - */ - -/** @defgroup TIM_Group4 Advanced-control timers (TIM1 and TIM8) specific features - * @brief Advanced-control timers (TIM1 and TIM8) specific features - * -@verbatim - =============================================================================== - ##### Advanced-control timers (TIM1 and TIM8) specific features ##### - =============================================================================== - - ##### TIM Driver: how to use the Break feature ##### - =============================================================================== - [..] - After configuring the Timer channel(s) in the appropriate Output Compare mode: - - (#) Fill the TIM_BDTRInitStruct with the desired parameters for the Timer - Break Polarity, dead time, Lock level, the OSSI/OSSR State and the - AOE(automatic output enable). - - (#) Call TIM_BDTRConfig(TIMx, &TIM_BDTRInitStruct) to configure the Timer - - (#) Enable the Main Output using TIM_CtrlPWMOutputs(TIM1, ENABLE) - - (#) Once the break even occurs, the Timer's output signals are put in reset - state or in a known state (according to the configuration made in - TIM_BDTRConfig() function). - -@endverbatim - * @{ - */ - -/** - * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State - * and the AOE(automatic output enable). - * @param TIMx: where x can be 1 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_LIST4_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 Polarity, the OSSR State, - the OSSI State, the dead time value and the Automatic Output Enable Bit */ - TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState | - TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime | - TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity | - TIM_BDTRInitStruct->TIM_AutomaticOutput; -} - -/** - * @brief Fills each TIM_BDTRInitStruct member with its default value. - * @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure which - * will be initialized. - * @retval None - */ -void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct) -{ - /* Set the default configuration */ - TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable; - TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable; - TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF; - TIM_BDTRInitStruct->TIM_DeadTime = 0x00; - TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable; - TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low; - TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; -} - -/** - * @brief Enables or disables the TIM peripheral Main Outputs. - * @param TIMx: where x can be 1 or 8 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_LIST4_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)~TIM_BDTR_MOE; - } -} - -/** - * @brief Selects the TIM peripheral Commutation event. - * @param TIMx: where x can be 1 or 8 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_LIST4_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)~TIM_CR2_CCUS; - } -} - -/** - * @brief Sets or Resets the TIM peripheral Capture Compare Preload Control bit. - * @param TIMx: where x can be 1 or 8 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_LIST4_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)~TIM_CR2_CCPC; - } -} -/** - * @} - */ - -/** @defgroup TIM_Group5 Interrupts DMA and flags management functions - * @brief Interrupts, DMA and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts, DMA and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified TIM interrupts. - * @param TIMx: where x can be 1 to 14 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 For TIM6 and TIM7 only the parameter TIM_IT_Update can be used - * @note For TIM9 and TIM12 only one of the following parameters can be used: TIM_IT_Update, - * TIM_IT_CC1, TIM_IT_CC2 or TIM_IT_Trigger. - * @note For TIM10, TIM11, TIM13 and TIM14 only one of the following parameters can - * be used: TIM_IT_Update or TIM_IT_CC1 - * @note TIM_IT_COM and TIM_IT_Break can be used only with TIM1 and TIM8 - * - * @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 14 to select the TIM peripheral. - * @param TIM_EventSource: specifies the event source. - * This parameter can be one or more of the following values: - * @arg TIM_EventSource_Update: Timer update Event source - * @arg TIM_EventSource_CC1: Timer Capture Compare 1 Event source - * @arg TIM_EventSource_CC2: Timer Capture Compare 2 Event source - * @arg TIM_EventSource_CC3: Timer Capture Compare 3 Event source - * @arg TIM_EventSource_CC4: Timer Capture Compare 4 Event source - * @arg TIM_EventSource_COM: Timer COM event source - * @arg TIM_EventSource_Trigger: Timer Trigger Event source - * @arg TIM_EventSource_Break: Timer Break event source - * - * @note TIM6 and TIM7 can only generate an update event. - * @note TIM_EventSource_COM and TIM_EventSource_Break are used only with TIM1 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 Checks whether the specified TIM flag is set or not. - * @param TIMx: where x can be 1 to 14 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 over capture Flag - * @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 over capture Flag - * @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 over capture Flag - * @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 over capture Flag - * - * @note TIM6 and TIM7 can have only one update flag. - * @note TIM_FLAG_COM and TIM_FLAG_Break are used only with TIM1 and TIM8. - * - * @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 14 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 over capture Flag - * @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 over capture Flag - * @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 over capture Flag - * @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 over capture Flag - * - * @note TIM6 and TIM7 can have only one update flag. - * @note TIM_FLAG_COM and TIM_FLAG_Break are used only with TIM1 and TIM8. - * - * @retval None - */ -void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* 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 14 to select the TIM peripheral. - * @param TIM_IT: specifies the TIM interrupt source to check. - * This parameter can be one of the following values: - * @arg TIM_IT_Update: TIM update Interrupt source - * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source - * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source - * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source - * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source - * @arg TIM_IT_COM: TIM Commutation Interrupt source - * @arg TIM_IT_Trigger: TIM Trigger Interrupt source - * @arg TIM_IT_Break: TIM Break Interrupt source - * - * @note TIM6 and TIM7 can generate only an update interrupt. - * @note TIM_IT_COM and TIM_IT_Break are used only with TIM1 and TIM8. - * - * @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 14 to select the TIM peripheral. - * @param TIM_IT: specifies the pending bit to clear. - * This parameter can be any combination of the following values: - * @arg TIM_IT_Update: TIM1 update Interrupt source - * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source - * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source - * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source - * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source - * @arg TIM_IT_COM: TIM Commutation Interrupt source - * @arg TIM_IT_Trigger: TIM Trigger Interrupt source - * @arg TIM_IT_Break: TIM Break Interrupt source - * - * @note TIM6 and TIM7 can generate only an update interrupt. - * @note TIM_IT_COM and TIM_IT_Break are used only with TIM1 and TIM8. - * - * @retval None - */ -void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT) -{ - /* Check the parameters */ - assert_param(IS_TIM_ALL_PERIPH(TIMx)); - - /* Clear the IT pending Bit */ - TIMx->SR = (uint16_t)~TIM_IT; -} - -/** - * @brief Configures the TIMx's DMA interface. - * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. - * @param TIM_DMABase: DMA Base address. - * This parameter can be one of the following values: - * @arg TIM_DMABase_CR1 - * @arg TIM_DMABase_CR2 - * @arg TIM_DMABase_SMCR - * @arg TIM_DMABase_DIER - * @arg TIM1_DMABase_SR - * @arg TIM_DMABase_EGR - * @arg TIM_DMABase_CCMR1 - * @arg TIM_DMABase_CCMR2 - * @arg TIM_DMABase_CCER - * @arg TIM_DMABase_CNT - * @arg TIM_DMABase_PSC - * @arg TIM_DMABase_ARR - * @arg TIM_DMABase_RCR - * @arg TIM_DMABase_CCR1 - * @arg TIM_DMABase_CCR2 - * @arg TIM_DMABase_CCR3 - * @arg TIM_DMABase_CCR4 - * @arg TIM_DMABase_BDTR - * @arg 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_LIST3_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 or 8 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_LIST5_PERIPH(TIMx)); - assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - /* Enable the DMA sources */ - TIMx->DIER |= TIM_DMASource; - } - else - { - /* Disable the DMA sources */ - TIMx->DIER &= (uint16_t)~TIM_DMASource; - } -} - -/** - * @brief Selects the TIMx peripheral Capture Compare DMA source. - * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 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_LIST3_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)~TIM_CR2_CCDS; - } -} -/** - * @} - */ - -/** @defgroup TIM_Group6 Clocks management functions - * @brief Clocks management functions - * -@verbatim - =============================================================================== - ##### Clocks management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the TIMx internal Clock - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM - * peripheral. - * @retval None - */ -void TIM_InternalClockConfig(TIM_TypeDef* TIMx) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST2_PERIPH(TIMx)); - - /* Disable slave mode to clock the prescaler directly with the internal clock */ - TIMx->SMCR &= (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, 8, 9 or 12 to select the TIM - * peripheral. - * @param TIM_InputTriggerSource: Trigger source. - * This parameter can be one of the following values: - * @arg TIM_TS_ITR0: Internal Trigger 0 - * @arg TIM_TS_ITR1: Internal Trigger 1 - * @arg TIM_TS_ITR2: Internal Trigger 2 - * @arg TIM_TS_ITR3: Internal Trigger 3 - * @retval None - */ -void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST2_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, 8, 9, 10, 11, 12, 13 or 14 - * 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_LIST1_PERIPH(TIMx)); - assert_param(IS_TIM_IC_POLARITY(TIM_ICPolarity)); - assert_param(IS_TIM_IC_FILTER(ICFilter)); - - /* Configure the Timer Input Clock Source */ - if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2) - { - TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); - } - else - { - TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); - } - /* Select the Trigger source */ - TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource); - /* Select the External clock mode1 */ - TIMx->SMCR |= TIM_SlaveMode_External1; -} - -/** - * @brief Configures the External clock Mode1 - * @param TIMx: where x can be 1, 2, 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)~TIM_SMCR_SMS; - - /* Select the External clock mode1 */ - tmpsmcr |= TIM_SlaveMode_External1; - - /* Select the Trigger selection : ETRF */ - tmpsmcr &= (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; -} -/** - * @} - */ - -/** @defgroup TIM_Group7 Synchronization management functions - * @brief Synchronization management functions - * -@verbatim - =============================================================================== - ##### Synchronization management functions ##### - =============================================================================== - - ##### TIM Driver: how to use it in synchronization Mode ##### - =============================================================================== - [..] - - *** Case of two/several Timers *** - ================================== - [..] - (#) Configure the Master Timers using the following functions: - (++) void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource); - (++) void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode); - (#) Configure the Slave Timers using the following functions: - (++) void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); - (++) void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); - - *** Case of Timers and external trigger(ETR pin) *** - ==================================================== - [..] - (#) Configure the External trigger using this function: - (++) void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); - (#) Configure the Slave Timers using the following functions: - (++) void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); - (++) void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); - -@endverbatim - * @{ - */ - -/** - * @brief Selects the Input Trigger source - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13 or 14 - * 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_LIST1_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)~TIM_SMCR_TS; - - /* Set the Input Trigger source */ - tmpsmcr |= TIM_InputTriggerSource; - - /* Write to TIMx SMCR */ - TIMx->SMCR = tmpsmcr; -} - -/** - * @brief Selects the TIMx Trigger Output Mode. - * @param TIMx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the TIM peripheral. - * - * @param TIM_TRGOSource: specifies the Trigger Output source. - * This parameter can be one of the following values: - * - * - For all TIMx - * @arg TIM_TRGOSource_Reset: The UG bit in the TIM_EGR register is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_Enable: The Counter Enable CEN is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_Update: The update event is selected as the trigger output(TRGO) - * - * - For all TIMx except TIM6 and TIM7 - * @arg TIM_TRGOSource_OC1: The trigger output sends a positive pulse when the CC1IF flag - * is to be set, as soon as a capture or compare match occurs(TRGO) - * @arg TIM_TRGOSource_OC1Ref: OC1REF signal is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_OC2Ref: OC2REF signal is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_OC3Ref: OC3REF signal is used as the trigger output(TRGO) - * @arg TIM_TRGOSource_OC4Ref: OC4REF signal is used as the trigger output(TRGO) - * - * @retval None - */ -void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST5_PERIPH(TIMx)); - assert_param(IS_TIM_TRGO_SOURCE(TIM_TRGOSource)); - - /* Reset the MMS Bits */ - TIMx->CR2 &= (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 or 12 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) reinitialize - * 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_SLAVE_MODE(TIM_SlaveMode)); - - /* Reset the SMS Bits */ - TIMx->SMCR &= (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 or 12 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_LIST2_PERIPH(TIMx)); - assert_param(IS_TIM_MSM_STATE(TIM_MasterSlaveMode)); - - /* Reset the MSM Bit */ - TIMx->SMCR &= (uint16_t)~TIM_SMCR_MSM; - - /* Set or Reset the MSM Bit */ - TIMx->SMCR |= TIM_MasterSlaveMode; -} - -/** - * @brief Configures the TIMx External Trigger (ETR). - * @param TIMx: where x can be 1, 2, 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; -} -/** - * @} - */ - -/** @defgroup TIM_Group8 Specific interface management functions - * @brief Specific interface management functions - * -@verbatim - =============================================================================== - ##### Specific interface management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the TIMx Encoder Interface. - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 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_LIST2_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)~TIM_SMCR_SMS; - tmpsmcr |= TIM_EncoderMode; - - /* Select the Capture Compare 1 and the Capture Compare 2 as input */ - tmpccmr1 &= ((uint16_t)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR1_CC2S); - tmpccmr1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0; - - /* Set the TI1 and the TI2 Polarities */ - tmpccer &= ((uint16_t)~TIM_CCER_CC1P) & ((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 Enables or disables the TIMx's Hall sensor interface. - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 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_LIST2_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)~TIM_CR2_TI1S; - } -} -/** - * @} - */ - -/** @defgroup TIM_Group9 Specific remapping management function - * @brief Specific remapping management function - * -@verbatim - =============================================================================== - ##### Specific remapping management function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Configures the TIM2, TIM5 and TIM11 Remapping input capabilities. - * @param TIMx: where x can be 2, 5 or 11 to select the TIM peripheral. - * @param TIM_Remap: specifies the TIM input remapping source. - * This parameter can be one of the following values: - * @arg TIM2_TIM8_TRGO: TIM2 ITR1 input is connected to TIM8 Trigger output(default) - * @arg TIM2_ETH_PTP: TIM2 ITR1 input is connected to ETH PTP trogger output. - * @arg TIM2_USBFS_SOF: TIM2 ITR1 input is connected to USB FS SOF. - * @arg TIM2_USBHS_SOF: TIM2 ITR1 input is connected to USB HS SOF. - * @arg TIM5_GPIO: TIM5 CH4 input is connected to dedicated Timer pin(default) - * @arg TIM5_LSI: TIM5 CH4 input is connected to LSI clock. - * @arg TIM5_LSE: TIM5 CH4 input is connected to LSE clock. - * @arg TIM5_RTC: TIM5 CH4 input is connected to RTC Output event. - * @arg TIM11_GPIO: TIM11 CH4 input is connected to dedicated Timer pin(default) - * @arg TIM11_HSE: TIM11 CH4 input is connected to HSE_RTC clock - * (HSE divided by a programmable prescaler) - * @retval None - */ -void TIM_RemapConfig(TIM_TypeDef* TIMx, uint16_t TIM_Remap) -{ - /* Check the parameters */ - assert_param(IS_TIM_LIST6_PERIPH(TIMx)); - assert_param(IS_TIM_REMAP(TIM_Remap)); - - /* Set the Timer remapping configuration */ - TIMx->OR = TIM_Remap; -} -/** - * @} - */ - -/** - * @brief Configure the TI1 as Input. - * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13 or 14 - * to select the TIM peripheral. - * @param TIM_ICPolarity : The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPolarity_Rising - * @arg TIM_ICPolarity_Falling - * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSelection_DirectTI: TIM Input 1 is selected to be connected to IC1. - * @arg TIM_ICSelection_IndirectTI: TIM Input 1 is selected to be connected to IC2. - * @arg TIM_ICSelection_TRC: TIM Input 1 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -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)~TIM_CCER_CC1E; - tmpccmr1 = TIMx->CCMR1; - tmpccer = TIMx->CCER; - - /* Select the Input and set the filter */ - tmpccmr1 &= ((uint16_t)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR1_IC1F); - tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); - - /* Select the Polarity and set the CC1E Bit */ - tmpccer &= (uint16_t)~(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 or 12 to select the TIM - * peripheral. - * @param TIM_ICPolarity : The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPolarity_Rising - * @arg TIM_ICPolarity_Falling - * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSelection_DirectTI: TIM Input 2 is selected to be connected to IC2. - * @arg TIM_ICSelection_IndirectTI: TIM Input 2 is selected to be connected to IC1. - * @arg TIM_ICSelection_TRC: TIM Input 2 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -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)~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)~TIM_CCMR1_CC2S) & ((uint16_t)~TIM_CCMR1_IC2F); - tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12); - tmpccmr1 |= (uint16_t)(TIM_ICSelection << 8); - - /* Select the Polarity and set the CC2E Bit */ - tmpccer &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP); - tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC2E); - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1 ; - TIMx->CCER = tmpccer; -} - -/** - * @brief Configure the TI3 as Input. - * @param TIMx: where x can be 1, 2, 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 - * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSelection_DirectTI: TIM Input 3 is selected to be connected to IC3. - * @arg TIM_ICSelection_IndirectTI: TIM Input 3 is selected to be connected to IC4. - * @arg TIM_ICSelection_TRC: TIM Input 3 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -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)~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)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR2_IC3F); - tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); - - /* Select the Polarity and set the CC3E Bit */ - tmpccer &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP); - tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC3E); - - /* Write to TIMx CCMR2 and CCER registers */ - TIMx->CCMR2 = tmpccmr2; - TIMx->CCER = tmpccer; -} - -/** - * @brief Configure the TI4 as Input. - * @param TIMx: where x can be 1, 2, 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 - * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSelection_DirectTI: TIM Input 4 is selected to be connected to IC4. - * @arg TIM_ICSelection_IndirectTI: TIM Input 4 is selected to be connected to IC3. - * @arg TIM_ICSelection_TRC: TIM Input 4 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @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)~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)~TIM_CCMR1_CC2S) & ((uint16_t)~TIM_CCMR1_IC2F); - tmpccmr2 |= (uint16_t)(TIM_ICSelection << 8); - tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12); - - /* Select the Polarity and set the CC4E Bit */ - tmpccer &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP); - tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC4E); - - /* Write to TIMx CCMR2 and CCER registers */ - TIMx->CCMR2 = tmpccmr2; - TIMx->CCER = tmpccer ; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c deleted file mode 100644 index 40f2391e..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c +++ /dev/null @@ -1,1486 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_usart.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Universal synchronous asynchronous receiver - * transmitter (USART): - * + Initialization and Configuration - * + Data transfers - * + Multi-Processor Communication - * + LIN mode - * + Half-duplex mode - * + Smartcard mode - * + IrDA mode - * + DMA transfers management - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable peripheral clock using the following functions - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx, ENABLE) for USART1 and USART6 - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE) for USART2, USART3, - UART4 or UART5. - - (#) According to the USART mode, enable the GPIO clocks using - RCC_AHB1PeriphClockCmd() function. (The I/O can be TX, RX, CTS, - or/and SCLK). - - (#) Peripheral's alternate function: - (++) Connect the pin to the desired peripherals' Alternate - Function (AF) using GPIO_PinAFConfig() function - (++) Configure the desired pin in alternate function by: - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF - (++) Select the type, pull-up/pull-down and output speed via - GPIO_PuPd, GPIO_OType and GPIO_Speed members - (++) Call GPIO_Init() function - - (#) Program the Baud Rate, Word Length , Stop Bit, Parity, Hardware - flow control and Mode(Receiver/Transmitter) using the USART_Init() - function. - - (#) For synchronous mode, enable the clock and program the polarity, - phase and last bit using the USART_ClockInit() function. - - (#) Enable the NVIC and the corresponding interrupt using the function - USART_ITConfig() if you need to use interrupt mode. - - (#) When using the DMA mode - (++) Configure the DMA using DMA_Init() function - (++) Active the needed channel Request using USART_DMACmd() function - - (#) Enable the USART using the USART_Cmd() function. - - (#) Enable the DMA using the DMA_Cmd() function, when using DMA mode. - - -@- Refer to Multi-Processor, LIN, half-duplex, Smartcard, IrDA sub-sections - for more details - - [..] - In order to reach higher communication baudrates, it is possible to - enable the oversampling by 8 mode using the function USART_OverSampling8Cmd(). - This function should be called after enabling the USART clock (RCC_APBxPeriphClockCmd()) - and before calling the function USART_Init(). - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_usart.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup USART - * @brief USART driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/*!< USART CR1 register clear Mask ((~(uint16_t)0xE9F3)) */ -#define CR1_CLEAR_MASK ((uint16_t)(USART_CR1_M | USART_CR1_PCE | \ - USART_CR1_PS | USART_CR1_TE | \ - USART_CR1_RE)) - -/*!< USART CR2 register clock bits clear Mask ((~(uint16_t)0xF0FF)) */ -#define CR2_CLOCK_CLEAR_MASK ((uint16_t)(USART_CR2_CLKEN | USART_CR2_CPOL | \ - USART_CR2_CPHA | USART_CR2_LBCL)) - -/*!< USART CR3 register clear Mask ((~(uint16_t)0xFCFF)) */ -#define CR3_CLEAR_MASK ((uint16_t)(USART_CR3_RTSE | USART_CR3_CTSE)) - -/*!< USART Interrupts mask */ -#define IT_MASK ((uint16_t)0x001F) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup USART_Private_Functions - * @{ - */ - -/** @defgroup USART_Group1 Initialization and Configuration functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to initialize the USART - in asynchronous and in synchronous modes. - (+) For the asynchronous mode only these parameters can be configured: - (++) Baud Rate - (++) Word Length - (++) Stop Bit - (++) Parity: If the parity is enabled, then the MSB bit of the data written - in the data register is transmitted but is changed by the parity bit. - Depending on the frame length defined by the M bit (8-bits or 9-bits), - the possible USART frame formats are as listed in the following table: - +-------------------------------------------------------------+ - | M bit | PCE bit | USART frame | - |---------------------|---------------------------------------| - | 0 | 0 | | SB | 8 bit data | STB | | - |---------|-----------|---------------------------------------| - | 0 | 1 | | SB | 7 bit data | PB | STB | | - |---------|-----------|---------------------------------------| - | 1 | 0 | | SB | 9 bit data | STB | | - |---------|-----------|---------------------------------------| - | 1 | 1 | | SB | 8 bit data | PB | STB | | - +-------------------------------------------------------------+ - (++) Hardware flow control - (++) Receiver/transmitter modes - - [..] - The USART_Init() function follows the USART asynchronous configuration - procedure (details for the procedure are available in reference manual (RM0090)). - - (+) For the synchronous mode in addition to the asynchronous mode parameters these - parameters should be also configured: - (++) USART Clock Enabled - (++) USART polarity - (++) USART phase - (++) USART LastBit - - [..] - These parameters can be configured using the USART_ClockInit() function. - -@endverbatim - * @{ - */ - -/** - * @brief Deinitializes the USARTx peripheral registers to their default reset values. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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); - } - else if (USARTx == USART6) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE); - } - else if (USARTx == UART7) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART7, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART7, DISABLE); - } - else - { - if (USARTx == UART8) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART8, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART8, DISABLE); - } - } -} - -/** - * @brief Initializes the USARTx peripheral according to the specified - * parameters in the USART_InitStruct . - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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; - 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, USART3 and USART6 */ - if (USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None) - { - assert_param(IS_USART_1236_PERIPH(USARTx)); - } - -/*---------------------------- USART CR2 Configuration -----------------------*/ - tmpreg = USARTx->CR2; - - /* Clear STOP[13:12] bits */ - tmpreg &= (uint32_t)~((uint32_t)USART_CR2_STOP); - - /* 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 &= (uint32_t)~((uint32_t)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 &= (uint32_t)~((uint32_t)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 ((USARTx == USART1) || (USARTx == USART6)) - { - apbclock = RCC_ClocksStatus.PCLK2_Frequency; - } - else - { - apbclock = RCC_ClocksStatus.PCLK1_Frequency; - } - - /* Determine the integer part */ - if ((USARTx->CR1 & USART_CR1_OVER8) != 0) - { - /* Integer part computing in case Oversampling mode is 8 Samples */ - integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate))); - } - else /* if ((USARTx->CR1 & USART_CR1_OVER8) == 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 & USART_CR1_OVER8) != 0) - { - tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07); - } - else /* if ((USARTx->CR1 & USART_CR1_OVER8) == 0) */ - { - tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F); - } - - /* Write to USART BRR register */ - 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 or 6 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_1236_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 &= (uint32_t)~((uint32_t)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: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR1_UE; - } - else - { - /* Disable the selected USART by clearing the UE bit in the CR1 register */ - USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_UE); - } -} - -/** - * @brief Sets the system clock prescaler. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= USART_GTPR_GT; - /* Set the USART prescaler */ - USARTx->GTPR |= USART_Prescaler; -} - -/** - * @brief Enables or disables the USART's 8x oversampling mode. - * @note This function has to be called before calling USART_Init() function - * in order to have correct baudrate Divider value. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @param NewState: new state of the USART 8x oversampling mode. - * This parameter can be: ENABLE or DISABLE. - * @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 |= USART_CR1_OVER8; - } - else - { - /* Disable the 8x Oversampling mode by clearing the OVER8 bit in the CR1 register */ - USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_OVER8); - } -} - -/** - * @brief Enables or disables the USART's one bit sampling method. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR3_ONEBIT; - } - else - { - /* Disable the one bit method by clearing the ONEBITE bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT); - } -} - -/** - * @} - */ - -/** @defgroup USART_Group2 Data transfers functions - * @brief Data transfers functions - * -@verbatim - =============================================================================== - ##### Data transfers functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART data - transfers. - [..] - During an USART reception, data shifts in least significant bit first through - the RX pin. In this mode, the USART_DR register consists of a buffer (RDR) - between the internal bus and the received shift register. - [..] - When a transmission is taking place, a write instruction to the USART_DR register - stores the data in the TDR register and which is copied in the shift register - at the end of the current transmission. - [..] - The read access of the USART_DR register can be done using the USART_ReceiveData() - function and returns the RDR buffered value. Whereas a write access to the USART_DR - can be done using USART_SendData() function and stores the written data into - TDR buffer. - -@endverbatim - * @{ - */ - -/** - * @brief Transmits single data through the USARTx peripheral. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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); -} - -/** - * @} - */ - -/** @defgroup USART_Group3 MultiProcessor Communication functions - * @brief Multi-Processor Communication functions - * -@verbatim - =============================================================================== - ##### Multi-Processor Communication functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART - multiprocessor communication. - [..] - For instance one of the USARTs can be the master, its TX output is connected - to the RX input of the other USART. The others are slaves, their respective - TX outputs are logically ANDed together and connected to the RX input of the - master. - [..] - USART multiprocessor communication is possible through the following procedure: - (#) Program the Baud rate, Word length = 9 bits, Stop bits, Parity, Mode - transmitter or Mode receiver and hardware flow control values using - the USART_Init() function. - (#) Configures the USART address using the USART_SetAddress() function. - (#) Configures the wake up method (USART_WakeUp_IdleLine or USART_WakeUp_AddressMark) - using USART_WakeUpConfig() function only for the slaves. - (#) Enable the USART using the USART_Cmd() function. - (#) Enter the USART slaves in mute mode using USART_ReceiverWakeUpCmd() function. - [..] - The USART Slave exit from mute mode when receive the wake up condition. - -@endverbatim - * @{ - */ - -/** - * @brief Sets the address of the USART node. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= (uint16_t)~((uint16_t)USART_CR2_ADD); - /* Set the USART address node */ - USARTx->CR2 |= USART_Address; -} - -/** - * @brief Determines if the USART is in mute mode or not. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR1_RWU; - } - else - { - /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */ - USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_RWU); - } -} -/** - * @brief Selects the USART WakeUp method. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= (uint16_t)~((uint16_t)USART_CR1_WAKE); - USARTx->CR1 |= USART_WakeUp; -} - -/** - * @} - */ - -/** @defgroup USART_Group4 LIN mode functions - * @brief LIN mode functions - * -@verbatim - =============================================================================== - ##### LIN mode functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART LIN - Mode communication. - [..] - In LIN mode, 8-bit data format with 1 stop bit is required in accordance with - the LIN standard. - [..] - Only this LIN Feature is supported by the USART IP: - (+) LIN Master Synchronous Break send capability and LIN slave break detection - capability : 13-bit break generation and 10/11 bit break detection - - [..] - USART LIN Master transmitter communication is possible through the following - procedure: - (#) Program the Baud rate, Word length = 8bits, Stop bits = 1bit, Parity, - Mode transmitter or Mode receiver and hardware flow control values using - the USART_Init() function. - (#) Enable the USART using the USART_Cmd() function. - (#) Enable the LIN mode using the USART_LINCmd() function. - (#) Send the break character using USART_SendBreak() function. - [..] - USART LIN Master receiver communication is possible through the following procedure: - (#) Program the Baud rate, Word length = 8bits, Stop bits = 1bit, Parity, - Mode transmitter or Mode receiver and hardware flow control values using - the USART_Init() function. - (#) Enable the USART using the USART_Cmd() function. - (#) Configures the break detection length using the USART_LINBreakDetectLengthConfig() - function. - (#) Enable the LIN mode using the USART_LINCmd() function. - - -@- In LIN mode, the following bits must be kept cleared: - (+@) CLKEN in the USART_CR2 register, - (+@) STOP[1:0], SCEN, HDSEL and IREN in the USART_CR3 register. - -@endverbatim - * @{ - */ - -/** - * @brief Sets the USART LIN Break detection length. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= (uint16_t)~((uint16_t)USART_CR2_LBDL); - USARTx->CR2 |= USART_LINBreakDetectLength; -} - -/** - * @brief Enables or disables the USART's LIN mode. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR2_LINEN; - } - else - { - /* Disable the LIN mode by clearing the LINEN bit in the CR2 register */ - USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_LINEN); - } -} - -/** - * @brief Transmits break characters. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @retval None - */ -void USART_SendBreak(USART_TypeDef* USARTx) -{ - /* Check the parameters */ - assert_param(IS_USART_ALL_PERIPH(USARTx)); - - /* Send break characters */ - USARTx->CR1 |= USART_CR1_SBK; -} - -/** - * @} - */ - -/** @defgroup USART_Group5 Halfduplex mode function - * @brief Half-duplex mode function - * -@verbatim - =============================================================================== - ##### Half-duplex mode function ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART - Half-duplex communication. - [..] - The USART can be configured to follow a single-wire half-duplex protocol where - the TX and RX lines are internally connected. - [..] - USART Half duplex communication is possible through the following procedure: - (#) Program the Baud rate, Word length, Stop bits, Parity, Mode transmitter - or Mode receiver and hardware flow control values using the USART_Init() - function. - (#) Configures the USART address using the USART_SetAddress() function. - (#) Enable the USART using the USART_Cmd() function. - (#) Enable the half duplex mode using USART_HalfDuplexCmd() function. - - - -@- The RX pin is no longer used - -@- In Half-duplex mode the following bits must be kept cleared: - (+@) LINEN and CLKEN bits in the USART_CR2 register. - (+@) SCEN and IREN bits in the USART_CR3 register. - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the USART's Half Duplex communication. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR3_HDSEL; - } - else - { - /* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_HDSEL); - } -} - -/** - * @} - */ - - -/** @defgroup USART_Group6 Smartcard mode functions - * @brief Smartcard mode functions - * -@verbatim - =============================================================================== - ##### Smartcard mode functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART - Smartcard communication. - [..] - The Smartcard interface is designed to support asynchronous protocol Smartcards as - defined in the ISO 7816-3 standard. - [..] - The USART can provide a clock to the smartcard through the SCLK output. - In smartcard mode, SCLK is not associated to the communication but is simply derived - from the internal peripheral input clock through a 5-bit prescaler. - [..] - Smartcard communication is possible through the following procedure: - (#) Configures the Smartcard Prescaler using the USART_SetPrescaler() function. - (#) Configures the Smartcard Guard Time using the USART_SetGuardTime() function. - (#) Program the USART clock using the USART_ClockInit() function as following: - (++) USART Clock enabled - (++) USART CPOL Low - (++) USART CPHA on first edge - (++) USART Last Bit Clock Enabled - (#) Program the Smartcard interface using the USART_Init() function as following: - (++) Word Length = 9 Bits - (++) 1.5 Stop Bit - (++) Even parity - (++) BaudRate = 12096 baud - (++) Hardware flow control disabled (RTS and CTS signals) - (++) Tx and Rx enabled - (#) POptionally you can enable the parity error interrupt using the USART_ITConfig() - function - (#) PEnable the USART using the USART_Cmd() function. - (#) PEnable the Smartcard NACK using the USART_SmartCardNACKCmd() function. - (#) PEnable the Smartcard interface using the USART_SmartCardCmd() function. - - Please refer to the ISO 7816-3 specification for more details. - - -@- It is also possible to choose 0.5 stop bit for receiving but it is recommended - to use 1.5 stop bits for both transmitting and receiving to avoid switching - between the two configurations. - -@- In smartcard mode, the following bits must be kept cleared: - (+@) LINEN bit in the USART_CR2 register. - (+@) HDSEL and IREN bits in the USART_CR3 register. - -@- Smartcard mode is available on USART peripherals only (not available on UART4 - and UART5 peripherals). - -@endverbatim - * @{ - */ - -/** - * @brief Sets the specified USART guard time. - * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART or - * UART peripheral. - * @param USART_GuardTime: specifies the guard time. - * @retval None - */ -void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime) -{ - /* Check the parameters */ - assert_param(IS_USART_1236_PERIPH(USARTx)); - - /* Clear the USART Guard time */ - USARTx->GTPR &= USART_GTPR_PSC; - /* Set the USART guard time */ - USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08); -} - -/** - * @brief Enables or disables the USART's Smart Card mode. - * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART or - * UART peripheral. - * @param NewState: new state of the Smart Card mode. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_USART_1236_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 |= USART_CR3_SCEN; - } - else - { - /* Disable the SC mode by clearing the SCEN bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_SCEN); - } -} - -/** - * @brief Enables or disables NACK transmission. - * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART or - * UART peripheral. - * @param NewState: new state of the NACK transmission. - * This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_USART_1236_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 |= USART_CR3_NACK; - } - else - { - /* Disable the NACK transmission by clearing the NACK bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_NACK); - } -} - -/** - * @} - */ - -/** @defgroup USART_Group7 IrDA mode functions - * @brief IrDA mode functions - * -@verbatim - =============================================================================== - ##### IrDA mode functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the USART - IrDA communication. - [..] - IrDA is a half duplex communication protocol. If the Transmitter is busy, any data - on the IrDA receive line will be ignored by the IrDA decoder and if the Receiver - is busy, data on the TX from the USART to IrDA will not be encoded by IrDA. - While receiving data, transmission should be avoided as the data to be transmitted - could be corrupted. - [..] - IrDA communication is possible through the following procedure: - (#) Program the Baud rate, Word length = 8 bits, Stop bits, Parity, Transmitter/Receiver - modes and hardware flow control values using the USART_Init() function. - (#) Enable the USART using the USART_Cmd() function. - (#) Configures the IrDA pulse width by configuring the prescaler using - the USART_SetPrescaler() function. - (#) Configures the IrDA USART_IrDAMode_LowPower or USART_IrDAMode_Normal mode - using the USART_IrDAConfig() function. - (#) Enable the IrDA using the USART_IrDACmd() function. - - -@- A pulse of width less than two and greater than one PSC period(s) may or may - not be rejected. - -@- The receiver set up time should be managed by software. The IrDA physical layer - specification specifies a minimum of 10 ms delay between transmission and - reception (IrDA is a half duplex protocol). - -@- In IrDA mode, the following bits must be kept cleared: - (+@) LINEN, STOP and CLKEN bits in the USART_CR2 register. - (+@) SCEN and HDSEL bits in the USART_CR3 register. - -@endverbatim - * @{ - */ - -/** - * @brief Configures the USART's IrDA interface. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 &= (uint16_t)~((uint16_t)USART_CR3_IRLP); - USARTx->CR3 |= USART_IrDAMode; -} - -/** - * @brief Enables or disables the USART's IrDA interface. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 |= USART_CR3_IREN; - } - else - { - /* Disable the IrDA mode by clearing the IREN bit in the CR3 register */ - USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_IREN); - } -} - -/** - * @} - */ - -/** @defgroup USART_Group8 DMA transfers management functions - * @brief DMA transfers management functions - * -@verbatim - =============================================================================== - ##### DMA transfers management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the USART's DMA interface. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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. - * @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; - } -} - -/** - * @} - */ - -/** @defgroup USART_Group9 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to configure the USART - Interrupts sources, DMA channels requests and check or clear the flags or - pending bits status. - The user should identify which mode will be used in his application to manage - the communication: Polling mode, Interrupt mode or DMA mode. - - *** Polling Mode *** - ==================== - [..] - In Polling Mode, the SPI communication can be managed by 10 flags: - (#) USART_FLAG_TXE : to indicate the status of the transmit buffer register - (#) USART_FLAG_RXNE : to indicate the status of the receive buffer register - (#) USART_FLAG_TC : to indicate the status of the transmit operation - (#) USART_FLAG_IDLE : to indicate the status of the Idle Line - (#) USART_FLAG_CTS : to indicate the status of the nCTS input - (#) USART_FLAG_LBD : to indicate the status of the LIN break detection - (#) USART_FLAG_NE : to indicate if a noise error occur - (#) USART_FLAG_FE : to indicate if a frame error occur - (#) USART_FLAG_PE : to indicate if a parity error occur - (#) USART_FLAG_ORE : to indicate if an Overrun error occur - [..] - In this Mode it is advised to use the following functions: - (+) FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); - (+) void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); - - *** Interrupt Mode *** - ====================== - [..] - In Interrupt Mode, the USART communication can be managed by 8 interrupt sources - and 10 pending bits: - - (#) Pending Bits: - - (##) USART_IT_TXE : to indicate the status of the transmit buffer register - (##) USART_IT_RXNE : to indicate the status of the receive buffer register - (##) USART_IT_TC : to indicate the status of the transmit operation - (##) USART_IT_IDLE : to indicate the status of the Idle Line - (##) USART_IT_CTS : to indicate the status of the nCTS input - (##) USART_IT_LBD : to indicate the status of the LIN break detection - (##) USART_IT_NE : to indicate if a noise error occur - (##) USART_IT_FE : to indicate if a frame error occur - (##) USART_IT_PE : to indicate if a parity error occur - (##) USART_IT_ORE : to indicate if an Overrun error occur - - (#) Interrupt Source: - - (##) USART_IT_TXE : specifies the interrupt source for the Tx buffer empty - interrupt. - (##) USART_IT_RXNE : specifies the interrupt source for the Rx buffer not - empty interrupt. - (##) USART_IT_TC : specifies the interrupt source for the Transmit complete - interrupt. - (##) USART_IT_IDLE : specifies the interrupt source for the Idle Line interrupt. - (##) USART_IT_CTS : specifies the interrupt source for the CTS interrupt. - (##) USART_IT_LBD : specifies the interrupt source for the LIN break detection - interrupt. - (##) USART_IT_PE : specifies the interrupt source for the parity error interrupt. - (##) USART_IT_ERR : specifies the interrupt source for the errors interrupt. - - -@@- Some parameters are coded in order to use them as interrupt source - or as pending bits. - [..] - In this Mode it is advised to use the following functions: - (+) void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState); - (+) ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); - (+) void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT); - - *** DMA Mode *** - ================ - [..] - In DMA Mode, the USART communication can be managed by 2 DMA Channel requests: - (#) USART_DMAReq_Tx: specifies the Tx buffer DMA transfer request - (#) USART_DMAReq_Rx: specifies the Rx buffer DMA transfer request - [..] - In this Mode it is advised to use the following function: - (+) void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); - -@endverbatim - * @{ - */ - -/** - * @brief Enables or disables the specified USART interrupts. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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 - * @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_1236_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 Checks whether the specified USART flag is set or not. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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_1236_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: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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()). - * @note RXNE flag can be also cleared by a read to the USART_DR register - * (USART_ReceiveData()). - * @note 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()). - * @note 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_1236_PERIPH(USARTx)); - } - - USARTx->SR = (uint16_t)~USART_FLAG; -} - -/** - * @brief Checks whether the specified USART interrupt has occurred or not. - * @param USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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: 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_ORE_RX : OverRun Error interrupt if the RXNEIE bit is set - * @arg USART_IT_ORE_ER : OverRun Error interrupt if the EIE bit is set - * @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_1236_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: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or - * UART peripheral. - * @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()). - * @note RXNE pending bit can be also cleared by a read to the USART_DR register - * (USART_ReceiveData()). - * @note 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()). - * @note 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_1236_PERIPH(USARTx)); - } - - bitpos = USART_IT >> 0x08; - itmask = ((uint16_t)0x01 << (uint16_t)bitpos); - USARTx->SR = (uint16_t)~itmask; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c deleted file mode 100644 index d3e651b3..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c +++ /dev/null @@ -1,307 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_wwdg.c - * @author MCD Application Team - * @version V1.1.0 - * @date 11-January-2013 - * @brief This file provides firmware functions to manage the following - * functionalities of the Window watchdog (WWDG) peripheral: - * + Prescaler, Refresh window and Counter configuration - * + WWDG activation - * + Interrupts and flags management - * - @verbatim - =============================================================================== - ##### WWDG features ##### - =============================================================================== - [..] - Once enabled the WWDG generates a system reset on expiry of a programmed - time period, unless the program refreshes the counter (downcounter) - before to reach 0x3F value (i.e. a reset is generated when the counter - value rolls over from 0x40 to 0x3F). - An MCU reset is also generated if the counter value is refreshed - before the counter has reached the refresh window value. This - implies that the counter must be refreshed in a limited window. - - Once enabled the WWDG cannot be disabled except by a system reset. - - WWDGRST flag in RCC_CSR register can be used to inform when a WWDG - reset occurs. - - The WWDG counter input clock is derived from the APB clock divided - by a programmable prescaler. - - WWDG counter clock = PCLK1 / Prescaler - WWDG timeout = (WWDG counter clock) * (counter value) - - Min-max timeout value @42 MHz(PCLK1): ~97.5 us / ~49.9 ms - - ##### How to use this driver ##### - =============================================================================== - [..] - (#) Enable WWDG clock using RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE) function - - (#) Configure the WWDG prescaler using WWDG_SetPrescaler() function - - (#) Configure the WWDG refresh window using WWDG_SetWindowValue() function - - (#) Set the WWDG counter value and start it using WWDG_Enable() function. - When the WWDG is enabled the counter value should be configured to - a value greater than 0x40 to prevent generating an immediate reset. - - (#) Optionally you can enable the Early wakeup interrupt which is - generated when the counter reach 0x40. - Once enabled this interrupt cannot be disabled except by a system reset. - - (#) Then the application program must refresh the WWDG counter at regular - intervals during normal operation to prevent an MCU reset, using - WWDG_SetCounter() function. This operation must occur only when - the counter value is lower than the refresh window value, - programmed using WWDG_SetWindowValue(). - - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_wwdg.h" -#include "stm32f4xx_rcc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup WWDG - * @brief WWDG driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ - -/* ----------- 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 ------------------------ */ -/* CFR register bit mask */ -#define CFR_WDGTB_MASK ((uint32_t)0xFFFFFE7F) -#define CFR_W_MASK ((uint32_t)0xFFFFFF80) -#define BIT_MASK ((uint8_t)0x7F) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup WWDG_Private_Functions - * @{ - */ - -/** @defgroup WWDG_Group1 Prescaler, Refresh window and Counter configuration functions - * @brief Prescaler, Refresh window and Counter configuration functions - * -@verbatim - =============================================================================== - ##### Prescaler, Refresh window and Counter configuration functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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). - * @note Once enabled this interrupt cannot be disabled except by a system reset. - * @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 (to prevent generating - * an immediate reset) - * @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; -} -/** - * @} - */ - -/** @defgroup WWDG_Group2 WWDG activation functions - * @brief WWDG activation functions - * -@verbatim - =============================================================================== - ##### WWDG activation function ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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 (to prevent generating - * an immediate reset) - * @retval None - */ -void WWDG_Enable(uint8_t Counter) -{ - /* Check the parameters */ - assert_param(IS_WWDG_COUNTER(Counter)); - WWDG->CR = WWDG_CR_WDGA | Counter; -} -/** - * @} - */ - -/** @defgroup WWDG_Group3 Interrupts and flags management functions - * @brief Interrupts and flags management functions - * -@verbatim - =============================================================================== - ##### Interrupts and flags management functions ##### - =============================================================================== - -@endverbatim - * @{ - */ - -/** - * @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) -{ - FlagStatus bitstatus = RESET; - - if ((WWDG->SR) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/** - * @brief Clears Early Wakeup interrupt flag. - * @param None - * @retval None - */ -void WWDG_ClearFlag(void) -{ - WWDG->SR = (uint32_t)RESET; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/stm32f4xx_conf.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/stm32f4xx_conf.h deleted file mode 100644 index 62705e84..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/stm32f4xx_conf.h +++ /dev/null @@ -1,94 +0,0 @@ -/** - ****************************************************************************** - * @file SysTick/SysTick_Example/stm32f4xx_conf.h - * @author MCD Application Team - * @version V1.1.0 - * @date 18-January-2013 - * @brief Library configuration file. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_CONF_H -#define __STM32F4xx_CONF_H - -/* Includes ------------------------------------------------------------------*/ -/* Uncomment the line below to enable peripheral header file inclusion */ -#include "stm32f4xx_adc.h" -#include "stm32f4xx_can.h" -#include "stm32f4xx_crc.h" -#include "stm32f4xx_cryp.h" -#include "stm32f4xx_dac.h" -#include "stm32f4xx_dbgmcu.h" -#include "stm32f4xx_dcmi.h" -#include "stm32f4xx_dma.h" -#include "stm32f4xx_exti.h" -#include "stm32f4xx_flash.h" -#include "stm32f4xx_fsmc.h" -#include "stm32f4xx_hash.h" -#include "stm32f4xx_gpio.h" -#include "stm32f4xx_i2c.h" -#include "stm32f4xx_iwdg.h" -#include "stm32f4xx_pwr.h" -#include "stm32f4xx_rcc.h" -#include "stm32f4xx_rng.h" -#include "stm32f4xx_rtc.h" -#include "stm32f4xx_sdio.h" -#include "stm32f4xx_spi.h" -#include "stm32f4xx_syscfg.h" -#include "stm32f4xx_tim.h" -#include "stm32f4xx_usart.h" -#include "stm32f4xx_wwdg.h" -#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* If an external clock source is used, then the value of the following define - should be set to the value of the external clock source, else, if no external - clock is used, keep this define commented */ -/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ - - -/* Uncomment the line below to expanse the "assert_param" macro in the - Standard Peripheral Library drivers code */ -/* #define USE_FULL_ASSERT 1 */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT - -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0) -#endif /* USE_FULL_ASSERT */ - -#endif /* __STM32F4xx_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/clock-arch.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/clock-arch.c deleted file mode 100644 index d8225115..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/clock-arch.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: clock-arch.c,v 1.2 2006/06/12 08:00:31 adam Exp $ - */ - -/** - * \file - * Implementation of architecture-specific clock functionality - * \author - * Adam Dunkels - */ - -#include "clock-arch.h" -#include "header.h" - -/*---------------------------------------------------------------------------*/ -clock_time_t -clock_time(void) -{ - return (clock_time_t)TimerGet(); -} -/*---------------------------------------------------------------------------*/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/clock-arch.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/clock-arch.h deleted file mode 100644 index aa97f0e7..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/clock-arch.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $ - */ - -#ifndef __CLOCK_ARCH_H__ -#define __CLOCK_ARCH_H__ - -typedef int clock_time_t; -#define CLOCK_CONF_SECOND 1000 - -#endif /* __CLOCK_ARCH_H__ */ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/netdev.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/netdev.c deleted file mode 100644 index 3ce42bdf..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/netdev.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright (c) 2001, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Author: Adam Dunkels - * - * $Id: netdev.c,v 1.8 2006/06/07 08:39:58 adam Exp $ - */ - - -/*---------------------------------------------------------------------------*/ -#include "uip.h" -#include "uip_arp.h" -#include "header.h" -#include "stm32_eth.h" /* STM32 ethernet library */ -#include /* for memcpy */ - - -/*---------------------------------------------------------------------------*/ -#define NETDEV_DEFAULT_MACADDR0 (0x08) -#define NETDEV_DEFAULT_MACADDR1 (0x00) -#define NETDEV_DEFAULT_MACADDR2 (0x27) -#define NETDEV_DEFAULT_MACADDR3 (0x69) -#define NETDEV_DEFAULT_MACADDR4 (0x5B) -#define NETDEV_DEFAULT_MACADDR5 (0x45) - - -/*---------------------------------------------------------------------------*/ -static void netdev_TxDscrInit(void); -static void netdev_RxDscrInit(void); - -/*---------------------------------------------------------------------------*/ -typedef union _TranDesc0_t -{ - uint32_t Data; - struct { - uint32_t DB : 1; - uint32_t UF : 1; - uint32_t ED : 1; - uint32_t CC : 4; - uint32_t VF : 1; - uint32_t EC : 1; - uint32_t LC : 1; - uint32_t NC : 1; - uint32_t LSC : 1; - uint32_t IPE : 1; - uint32_t FF : 1; - uint32_t JT : 1; - uint32_t ES : 1; - uint32_t IHE : 1; - uint32_t : 3; - uint32_t TCH : 1; - uint32_t TER : 1; - uint32_t CIC : 2; - uint32_t : 2; - uint32_t DP : 1; - uint32_t DC : 1; - uint32_t FS : 1; - uint32_t LSEG : 1; - uint32_t IC : 1; - uint32_t OWN : 1; - }; -} TranDesc0_t, * pTranDesc0_t; - -typedef union _TranDesc1_t -{ - uint32_t Data; - struct { - uint32_t TBS1 :13; - uint32_t : 3; - uint32_t TBS2 :12; - uint32_t : 3; - }; -} TranDesc1_t, * pTranDesc1_t; - -typedef union _RecDesc0_t -{ - uint32_t Data; - struct { - uint32_t RMAM_PCE : 1; - uint32_t CE : 1; - uint32_t DE : 1; - uint32_t RE : 1; - uint32_t RWT : 1; - uint32_t FT : 1; - uint32_t LC : 1; - uint32_t IPHCE : 1; - uint32_t LS : 1; - uint32_t FS : 1; - uint32_t VLAN : 1; - uint32_t OE : 1; - uint32_t LE : 1; - uint32_t SAF : 1; - uint32_t DERR : 1; - uint32_t ES : 1; - uint32_t FL :14; - uint32_t AFM : 1; - uint32_t OWN : 1; - }; -} RecDesc0_t, * pRecDesc0_t; - -typedef union _recDesc1_t -{ - uint32_t Data; - struct { - uint32_t RBS1 :13; - uint32_t : 1; - uint32_t RCH : 1; - uint32_t RER : 1; - uint32_t RBS2 :14; - uint32_t DIC : 1; - }; -} RecDesc1_t, * pRecDesc1_t; - -typedef union _EnetDmaDesc_t -{ - uint32_t Data[4]; - // Rx DMA descriptor - struct - { - RecDesc0_t RxDesc0; - RecDesc1_t RxDesc1; - uint32_t * pBuffer; - union - { - uint32_t * pBuffer2; - union _EnetDmaDesc_t * pEnetDmaNextDesc; - }; - } Rx; - // Tx DMA descriptor - struct - { - TranDesc0_t TxDesc0; - TranDesc1_t TxDesc1; - uint32_t * pBuffer1; - union - { - uint32_t * pBuffer2; - union _EnetDmaDesc_t * pEnetDmaNextDesc; - }; - } Tx; -} EnetDmaDesc_t, * pEnetDmaDesc_t; - - -/*---------------------------------------------------------------------------*/ -uint8_t RxBuff[UIP_CONF_BUFFER_SIZE] __attribute__ ((aligned (4))); -uint8_t TxBuff[UIP_CONF_BUFFER_SIZE] __attribute__ ((aligned (4))); - -EnetDmaDesc_t EnetDmaRx __attribute__((aligned (128))); -EnetDmaDesc_t EnetDmaTx __attribute__ ((aligned (128))); - - -/*---------------------------------------------------------------------------*/ -void netdev_init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - ETH_InitTypeDef ETH_InitStructure; - - /* Enable ETHERNET clocks */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx | - RCC_AHB1Periph_ETH_MAC_Rx | RCC_AHB1Periph_ETH_MAC_PTP, ENABLE); - - - /* Enable GPIOs clocks */ - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | - RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG, ENABLE); - - /* Enable SYSCFG clock */ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); - /*Select RMII Interface*/ - SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII); - - /* ETHERNET pins configuration */ - /* PA - ETH_RMII_REF_CLK: PA1 - ETH_RMII_MDIO: PA2 - ETH_RMII_MDINT: PA3 - ETH_RMII_CRS_DV: PA7 - */ - - /* Configure PA1, PA2, PA3 and PA7*/ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - /* Connect PA1, PA2, PA3 and PA7 to ethernet module*/ - GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH); - - /* PB - ETH_RMII_TX_EN: PG11 - */ - - /* Configure PG11*/ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOG, &GPIO_InitStructure); - - /* Connect PG11 to ethernet module*/ - GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_ETH); - - /* PC - ETH_RMII_MDC: PC1 - ETH_RMII_RXD0: PC4 - ETH_RMII_RXD1: PC5 - */ - - /* Configure PC1, PC4 and PC5*/ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOC, &GPIO_InitStructure); - - /* Connect PC1, PC4 and PC5 to ethernet module*/ - GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH); - - /* PG - ETH_RMII_TXD0: PG13 - ETH_RMII_TXD1: PG14 - */ - - /* Configure PG13 and PG14*/ - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOG, &GPIO_InitStructure); - - /* Connect PG13 and PG14 to ethernet module*/ - GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); - GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH); - - /* Reset ETHERNET on AHB Bus */ - ETH_DeInit(); - - /* Software reset */ - ETH_SoftwareReset(); - - /* Wait for software reset */ - while(ETH_GetSoftwareResetStatus()==SET); - - /* ETHERNET Configuration ------------------------------------------------------*/ - /* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */ - ETH_StructInit(Ð_InitStructure); - - /* Fill ETH_InitStructure parametrs */ - /*------------------------ MAC -----------------------------------*/ - ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable ; - ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable; - ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable; - ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable; - ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Enable; - ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Disable; - ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable; - ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect; - ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect; - ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex; - ETH_InitStructure.ETH_Speed = ETH_Speed_100M; - - unsigned int PhyAddr; - union { - uint32_t HI_LO; - struct - { - uint16_t LO; - uint16_t HI; - }; - } PHYID; - for(PhyAddr = 0; 32 > PhyAddr; PhyAddr++) - { - // datasheet for the ks8721bl ethernet controller (http://www.micrel.com/_PDF/Ethernet/datasheets/ks8721bl-sl.pdf) - // page 20 --> PHY Identifier 1 and 2 - PHYID.HI = ETH_ReadPHYRegister(PhyAddr,2); // 0x0022 - PHYID.LO = ETH_ReadPHYRegister(PhyAddr,3); // 0x1619 - if ((0x00221619 == PHYID.HI_LO) || (0x0007C0F1 == PHYID.HI_LO)) - break; - } - /* Configure Ethernet */ - ETH_Init(Ð_InitStructure, PhyAddr); - - netdev_TxDscrInit(); - netdev_RxDscrInit(); - ETH_Start(); -} - - -/*---------------------------------------------------------------------------*/ -void netdev_init_mac(void) -{ - struct uip_eth_addr macAddress; - - /* set the default MAC address */ - macAddress.addr[0] = NETDEV_DEFAULT_MACADDR0; - macAddress.addr[1] = NETDEV_DEFAULT_MACADDR1; - macAddress.addr[2] = NETDEV_DEFAULT_MACADDR2; - macAddress.addr[3] = NETDEV_DEFAULT_MACADDR3; - macAddress.addr[4] = NETDEV_DEFAULT_MACADDR4; - macAddress.addr[5] = NETDEV_DEFAULT_MACADDR5; - uip_setethaddr(macAddress); -} - - -/*---------------------------------------------------------------------------*/ -unsigned int netdev_read(void) -{ - uint32_t size; - /*check for validity*/ - if(0 == EnetDmaRx.Rx.RxDesc0.OWN) - { - /*Get the size of the packet*/ - size = EnetDmaRx.Rx.RxDesc0.FL; // CRC - memcpy(uip_buf, RxBuff, size); //string.h library*/ - } - else - { - return 0; - } - /* Give the buffer back to ENET */ - EnetDmaRx.Rx.RxDesc0.OWN = 1; - /* Start the receive operation */ - ETH->DMARPDR = 1; - /* Return no error */ - return size; -} - - -/*---------------------------------------------------------------------------*/ -void netdev_send(void) -{ - while(EnetDmaTx.Tx.TxDesc0.OWN); - - /* Copy the application buffer to the driver buffer - Using this MEMCOPY_L2L_BY4 makes the copy routine faster - than memcpy */ - memcpy(TxBuff, uip_buf, uip_len); - - /* Assign ENET address to Temp Tx Array */ - EnetDmaTx.Tx.pBuffer1 = (uint32_t *)TxBuff; - - /* Setting the Frame Length*/ - EnetDmaTx.Tx.TxDesc0.Data = 0; - EnetDmaTx.Tx.TxDesc0.TCH = 1; - EnetDmaTx.Tx.TxDesc0.LSEG = 1; - EnetDmaTx.Tx.TxDesc0.FS = 1; - EnetDmaTx.Tx.TxDesc0.DC = 0; - EnetDmaTx.Tx.TxDesc0.DP = 0; - - EnetDmaTx.Tx.TxDesc1.Data = 0; - EnetDmaTx.Tx.TxDesc1.TBS1 = (uip_len&0xFFF); - - /* Start the ENET by setting the VALID bit in dmaPackStatus of current descr*/ - EnetDmaTx.Tx.TxDesc0.OWN = 1; - - /* Start the transmit operation */ - ETH->DMATPDR = 1; -} - - -/*---------------------------------------------------------------------------*/ -static void netdev_RxDscrInit(void) -{ - /* Initialization */ - /* Assign temp Rx array to the ENET buffer */ - EnetDmaRx.Rx.pBuffer = (uint32_t *)RxBuff; - - /* Initialize RX ENET Status and control */ - EnetDmaRx.Rx.RxDesc0.Data = 0; - - /* Initialize the next descriptor- In our case its single descriptor */ - EnetDmaRx.Rx.pEnetDmaNextDesc = &EnetDmaRx; - - EnetDmaRx.Rx.RxDesc1.Data = 0; - EnetDmaRx.Rx.RxDesc1.RER = 0; // end of ring - EnetDmaRx.Rx.RxDesc1.RCH = 1; // end of ring - - /* Set the max packet size */ - EnetDmaRx.Rx.RxDesc1.RBS1 = UIP_CONF_BUFFER_SIZE; - - /* Setting the VALID bit */ - EnetDmaRx.Rx.RxDesc0.OWN = 1; - /* Setting the RX NEXT Descriptor Register inside the ENET */ - ETH->DMARDLAR = (uint32_t)&EnetDmaRx; -} - - -/*---------------------------------------------------------------------------*/ -static void netdev_TxDscrInit(void) -{ - /* ENET Start Address */ - EnetDmaTx.Tx.pBuffer1 = (uint32_t *)TxBuff; - - /* Next Descriptor Address */ - EnetDmaTx.Tx.pEnetDmaNextDesc = &EnetDmaTx; - - /* Initialize ENET status and control */ - EnetDmaTx.Tx.TxDesc0.TCH = 1; - EnetDmaTx.Tx.TxDesc0.Data = 0; - EnetDmaTx.Tx.TxDesc1.Data = 0; - /* Tx next set to Tx descriptor base */ - ETH->DMATDLAR = (uint32_t)&EnetDmaTx; - -} diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/netdev.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/netdev.h deleted file mode 100644 index 4ea59ce5..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/netdev.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2001, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Adam Dunkels. - * 4. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack. - * - * $Id: netdev.h,v 1.1 2002/01/10 06:22:56 adam Exp $ - * - */ - -#ifndef __NETDEV_H__ -#define __NETDEV_H__ - -void netdev_init(void); -void netdev_init_mac(void); -unsigned int netdev_read(void); -void netdev_send(void); - -#endif /* __NETDEV_H__ */ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/uip-conf.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/uip-conf.h deleted file mode 100644 index fd9ba0dd..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/uip/uip-conf.h +++ /dev/null @@ -1,151 +0,0 @@ -/** - * \addtogroup uipopt - * @{ - */ - -/** - * \name Project-specific configuration options - * @{ - * - * uIP has a number of configuration options that can be overridden - * for each project. These are kept in a project-specific uip-conf.h - * file and all configuration names have the prefix UIP_CONF. - */ - -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ - */ - -/** - * \file - * An example uIP configuration file - * \author - * Adam Dunkels - */ - -#ifndef __UIP_CONF_H__ -#define __UIP_CONF_H__ - - -/** - * 8 bit datatype - * - * This typedef defines the 8-bit type used throughout uIP. - * - * \hideinitializer - */ -typedef unsigned char u8_t; - -/** - * 16 bit datatype - * - * This typedef defines the 16-bit type used throughout uIP. - * - * \hideinitializer - */ -typedef unsigned short u16_t; - -/** - * Statistics datatype - * - * This typedef defines the dataype used for keeping statistics in - * uIP. - * - * \hideinitializer - */ -typedef unsigned short uip_stats_t; - -/** - * Maximum number of TCP connections. - * - * \hideinitializer - */ -#define UIP_CONF_MAX_CONNECTIONS 1 - -/** - * Maximum number of listening TCP ports. - * - * \hideinitializer - */ -#define UIP_CONF_MAX_LISTENPORTS 1 - -/** - * uIP buffer size. - * - * \hideinitializer - */ -#define UIP_CONF_BUFFER_SIZE 1600 - -/** - * CPU byte order. - * - * \hideinitializer - */ -#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN - -/** - * Logging on or off - * - * \hideinitializer - */ -#define UIP_CONF_LOGGING 0 - -/** - * UDP support on or off - * - * \hideinitializer - */ -#define UIP_CONF_UDP 0 - -/** - * UDP checksums on or off - * - * \hideinitializer - */ -#define UIP_CONF_UDP_CHECKSUMS 1 - -/** - * uIP statistics on or off - * - * \hideinitializer - */ -#define UIP_CONF_STATISTICS 0 - -/* Here we include the header file for the application(s) we use in - our project. */ -#include "boot.h" -#include "net.h" - -#endif /* __UIP_CONF_H__ */ - -/** @} */ -/** @} */ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/main.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/main.c deleted file mode 100644 index a60b62c2..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/main.c +++ /dev/null @@ -1,85 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\main.c -* \brief Demo program application source file. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -static void Init(void); - - -/************************************************************************************//** -** \brief This is the entry point for the bootloader application and is called -** by the reset interrupt vector after the C-startup routines executed. -** \return none. -** -****************************************************************************************/ -void main(void) -{ - /* initialize the microcontroller */ - Init(); - /* initialize the network application */ - NetInit(); - /* initialize the bootloader interface */ - BootComInit(); - - /* start the infinite program loop */ - while (1) - { - /* toggle LED with a fixed frequency */ - LedToggle(); - /* run the network task */ - NetTask(); - /* check for bootloader activation request */ - BootComCheckActivationRequest(); - } -} /*** end of main ***/ - - -/************************************************************************************//** -** \brief Initializes the microcontroller. -** \return none. -** -****************************************************************************************/ -static void Init(void) -{ - /* initialize the system and its clocks */ - SystemInit(); - /* init the led driver */ - LedInit(); - /* init the timer driver */ - TimerInit(); -} /*** end of Init ***/ - - -/*********************************** end of main.c *************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/memory.x b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/memory.x deleted file mode 100644 index 63d40407..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/memory.x +++ /dev/null @@ -1,332 +0,0 @@ -MEMORY -{ - UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0 - FLASH (rx) : ORIGIN = 0x0800C000, LENGTH = 0x00100000-0xC000 - DATA_SRAM (wx) : ORIGIN = 0x10000000, LENGTH = 0x00010000 - SYSTEM (wx) : ORIGIN = 0x1fff0000, LENGTH = 0x00007a10 - OPTION (wx) : ORIGIN = 0x1fffc000, LENGTH = 0x00000008 - RAM (wx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 - SRAM1 (wx) : ORIGIN = 0x20000000, LENGTH = 0x0001c000 - SRAM2 (wx) : ORIGIN = 0x2001c000, LENGTH = 0x00004000 - APB1 (wx) : ORIGIN = 0x40000000, LENGTH = 0x00008000 - APB2 (wx) : ORIGIN = 0x40010000, LENGTH = 0x00004c00 - AHB1 (wx) : ORIGIN = 0x40020000, LENGTH = 0x00060000 - AHB2 (wx) : ORIGIN = 0x50000000, LENGTH = 0x00060c00 - AHB3 (wx) : ORIGIN = 0xa0000000, LENGTH = 0x00001000 - PPB (wx) : ORIGIN = 0xe0000000, LENGTH = 0x00100000 - BKPSRAM (wx) : ORIGIN = 0x40024000, LENGTH = 0x00001000 - PCCARD (wx) : ORIGIN = 0x90000000, LENGTH = 0x00000000 - NAND2 (wx) : ORIGIN = 0x80000000, LENGTH = 0x00000000 - NAND1 (wx) : ORIGIN = 0x70000000, LENGTH = 0x00000000 - NOR_PSRAM4 (wx) : ORIGIN = 0x6c000000, LENGTH = 0x00000000 - NOR_PSRAM3 (wx) : ORIGIN = 0x68000000, LENGTH = 0x00000000 - NOR_PSRAM2 (wx) : ORIGIN = 0x64000000, LENGTH = 0x00000000 - NOR_PSRAM1 (wx) : ORIGIN = 0x60000000, LENGTH = 0x00000000 - CM3_System_Control_Space (wx) : ORIGIN = 0xe000e000, LENGTH = 0x00001000 -} - - -SECTIONS -{ - __FLASH_segment_start__ = 0x0800C000; - __FLASH_segment_end__ = 0x08100000; - __DATA_SRAM_segment_start__ = 0x10000000; - __DATA_SRAM_segment_end__ = 0x10010000; - __SYSTEM_segment_start__ = 0x1fff0000; - __SYSTEM_segment_end__ = 0x1fff7a10; - __OPTION_segment_start__ = 0x1fffc000; - __OPTION_segment_end__ = 0x1fffc008; - __RAM_segment_start__ = 0x20000000; - __RAM_segment_end__ = 0x20020000; - __SRAM1_segment_start__ = 0x20000000; - __SRAM1_segment_end__ = 0x2001c000; - __SRAM2_segment_start__ = 0x2001c000; - __SRAM2_segment_end__ = 0x20020000; - __APB1_segment_start__ = 0x40000000; - __APB1_segment_end__ = 0x40008000; - __APB2_segment_start__ = 0x40010000; - __APB2_segment_end__ = 0x40014c00; - __AHB1_segment_start__ = 0x40020000; - __AHB1_segment_end__ = 0x40080000; - __AHB2_segment_start__ = 0x50000000; - __AHB2_segment_end__ = 0x50060c00; - __AHB3_segment_start__ = 0xa0000000; - __AHB3_segment_end__ = 0xa0001000; - __PPB_segment_start__ = 0xe0000000; - __PPB_segment_end__ = 0xe0100000; - __BKPSRAM_segment_start__ = 0x40024000; - __BKPSRAM_segment_end__ = 0x40025000; - __PCCARD_segment_start__ = 0x90000000; - __PCCARD_segment_end__ = 0x90000000; - __NAND2_segment_start__ = 0x80000000; - __NAND2_segment_end__ = 0x80000000; - __NAND1_segment_start__ = 0x70000000; - __NAND1_segment_end__ = 0x70000000; - __NOR_PSRAM4_segment_start__ = 0x6c000000; - __NOR_PSRAM4_segment_end__ = 0x6c000000; - __NOR_PSRAM3_segment_start__ = 0x68000000; - __NOR_PSRAM3_segment_end__ = 0x68000000; - __NOR_PSRAM2_segment_start__ = 0x64000000; - __NOR_PSRAM2_segment_end__ = 0x64000000; - __NOR_PSRAM1_segment_start__ = 0x60000000; - __NOR_PSRAM1_segment_end__ = 0x60000000; - __CM3_System_Control_Space_segment_start__ = 0xe000e000; - __CM3_System_Control_Space_segment_end__ = 0xe000f000; - - __STACKSIZE__ = 2048; - __STACKSIZE_PROCESS__ = 0; - __STACKSIZE_IRQ__ = 0; - __STACKSIZE_FIQ__ = 0; - __STACKSIZE_SVC__ = 0; - __STACKSIZE_ABT__ = 0; - __STACKSIZE_UND__ = 0; - __HEAPSIZE__ = 2048; - - __vectors_ram_load_start__ = ALIGN(__RAM_segment_start__ , 256); - .vectors_ram ALIGN(__RAM_segment_start__ , 256) (NOLOAD) : AT(ALIGN(__RAM_segment_start__ , 256)) - { - __vectors_ram_start__ = .; - *(.vectors_ram .vectors_ram.*) - } - __vectors_ram_end__ = __vectors_ram_start__ + SIZEOF(.vectors_ram); - - __vectors_ram_load_end__ = __vectors_ram_end__; - - . = ASSERT(__vectors_ram_end__ >= __RAM_segment_start__ && __vectors_ram_end__ <= __RAM_segment_end__ , "error: .vectors_ram is too large to fit in RAM memory segment"); - - __vectors_load_start__ = ALIGN(__FLASH_segment_start__ , 256); - .vectors ALIGN(__FLASH_segment_start__ , 256) : AT(ALIGN(__FLASH_segment_start__ , 256)) - { - __vectors_start__ = .; - *(.vectors .vectors.*) - } - __vectors_end__ = __vectors_start__ + SIZEOF(.vectors); - - __vectors_load_end__ = __vectors_end__; - - . = ASSERT(__vectors_end__ >= __FLASH_segment_start__ && __vectors_end__ <= __FLASH_segment_end__ , "error: .vectors is too large to fit in FLASH memory segment"); - - __init_load_start__ = ALIGN(__vectors_end__ , 4); - .init ALIGN(__vectors_end__ , 4) : AT(ALIGN(__vectors_end__ , 4)) - { - __init_start__ = .; - *(.init .init.*) - } - __init_end__ = __init_start__ + SIZEOF(.init); - - __init_load_end__ = __init_end__; - - . = ASSERT(__init_end__ >= __FLASH_segment_start__ && __init_end__ <= __FLASH_segment_end__ , "error: .init is too large to fit in FLASH memory segment"); - - __text_load_start__ = ALIGN(__init_end__ , 4); - .text ALIGN(__init_end__ , 4) : AT(ALIGN(__init_end__ , 4)) - { - __text_start__ = .; - *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) - } - __text_end__ = __text_start__ + SIZEOF(.text); - - __text_load_end__ = __text_end__; - - . = ASSERT(__text_end__ >= __FLASH_segment_start__ && __text_end__ <= __FLASH_segment_end__ , "error: .text is too large to fit in FLASH memory segment"); - - __dtors_load_start__ = ALIGN(__text_end__ , 4); - .dtors ALIGN(__text_end__ , 4) : AT(ALIGN(__text_end__ , 4)) - { - __dtors_start__ = .; - KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) KEEP (*(.fini_array .fini_array.*)) - } - __dtors_end__ = __dtors_start__ + SIZEOF(.dtors); - - __dtors_load_end__ = __dtors_end__; - - . = ASSERT(__dtors_end__ >= __FLASH_segment_start__ && __dtors_end__ <= __FLASH_segment_end__ , "error: .dtors is too large to fit in FLASH memory segment"); - - __ctors_load_start__ = ALIGN(__dtors_end__ , 4); - .ctors ALIGN(__dtors_end__ , 4) : AT(ALIGN(__dtors_end__ , 4)) - { - __ctors_start__ = .; - KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) KEEP (*(.init_array .init_array.*)) - } - __ctors_end__ = __ctors_start__ + SIZEOF(.ctors); - - __ctors_load_end__ = __ctors_end__; - - . = ASSERT(__ctors_end__ >= __FLASH_segment_start__ && __ctors_end__ <= __FLASH_segment_end__ , "error: .ctors is too large to fit in FLASH memory segment"); - - __rodata_load_start__ = ALIGN(__ctors_end__ , 4); - .rodata ALIGN(__ctors_end__ , 4) : AT(ALIGN(__ctors_end__ , 4)) - { - __rodata_start__ = .; - *(.rodata .rodata.* .gnu.linkonce.r.*) - } - __rodata_end__ = __rodata_start__ + SIZEOF(.rodata); - - __rodata_load_end__ = __rodata_end__; - - . = ASSERT(__rodata_end__ >= __FLASH_segment_start__ && __rodata_end__ <= __FLASH_segment_end__ , "error: .rodata is too large to fit in FLASH memory segment"); - - __ARM.exidx_load_start__ = ALIGN(__rodata_end__ , 4); - .ARM.exidx ALIGN(__rodata_end__ , 4) : AT(ALIGN(__rodata_end__ , 4)) - { - __ARM.exidx_start__ = .; - __exidx_start = __ARM.exidx_start__; - *(.ARM.exidx .ARM.exidx.*) - } - __ARM.exidx_end__ = __ARM.exidx_start__ + SIZEOF(.ARM.exidx); - - __exidx_end = __ARM.exidx_end__; - __ARM.exidx_load_end__ = __ARM.exidx_end__; - - . = ASSERT(__ARM.exidx_end__ >= __FLASH_segment_start__ && __ARM.exidx_end__ <= __FLASH_segment_end__ , "error: .ARM.exidx is too large to fit in FLASH memory segment"); - - __fast_load_start__ = ALIGN(__ARM.exidx_end__ , 4); - .fast ALIGN(__vectors_ram_end__ , 4) : AT(ALIGN(__ARM.exidx_end__ , 4)) - { - __fast_start__ = .; - *(.fast .fast.*) - } - __fast_end__ = __fast_start__ + SIZEOF(.fast); - - __fast_load_end__ = __fast_load_start__ + SIZEOF(.fast); - - . = ASSERT(__fast_load_end__ >= __FLASH_segment_start__ && __fast_load_end__ <= __FLASH_segment_end__ , "error: .fast is too large to fit in FLASH memory segment"); - - .fast_run ALIGN(__vectors_ram_end__ , 4) (NOLOAD) : - { - __fast_run_start__ = .; - . = MAX(__fast_run_start__ + SIZEOF(.fast), .); - } - __fast_run_end__ = __fast_run_start__ + SIZEOF(.fast_run); - - __fast_run_load_end__ = __fast_run_end__; - - . = ASSERT(__fast_run_end__ >= __RAM_segment_start__ && __fast_run_end__ <= __RAM_segment_end__ , "error: .fast_run is too large to fit in RAM memory segment"); - - __data_load_start__ = ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4); - .data ALIGN(__fast_run_end__ , 4) : AT(ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4)) - { - __data_start__ = .; - *(.data .data.* .gnu.linkonce.d.*) - } - __data_end__ = __data_start__ + SIZEOF(.data); - - __data_load_end__ = __data_load_start__ + SIZEOF(.data); - - . = ASSERT(__data_load_end__ >= __FLASH_segment_start__ && __data_load_end__ <= __FLASH_segment_end__ , "error: .data is too large to fit in FLASH memory segment"); - - .data_run ALIGN(__fast_run_end__ , 4) (NOLOAD) : - { - __data_run_start__ = .; - . = MAX(__data_run_start__ + SIZEOF(.data), .); - } - __data_run_end__ = __data_run_start__ + SIZEOF(.data_run); - - __data_run_load_end__ = __data_run_end__; - - . = ASSERT(__data_run_end__ >= __RAM_segment_start__ && __data_run_end__ <= __RAM_segment_end__ , "error: .data_run is too large to fit in RAM memory segment"); - - __bss_load_start__ = ALIGN(__data_run_end__ , 4); - .bss ALIGN(__data_run_end__ , 4) (NOLOAD) : AT(ALIGN(__data_run_end__ , 4)) - { - __bss_start__ = .; - *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) - } - __bss_end__ = __bss_start__ + SIZEOF(.bss); - - __bss_load_end__ = __bss_end__; - - . = ASSERT(__bss_end__ >= __RAM_segment_start__ && __bss_end__ <= __RAM_segment_end__ , "error: .bss is too large to fit in RAM memory segment"); - - __non_init_load_start__ = ALIGN(__bss_end__ , 4); - .non_init ALIGN(__bss_end__ , 4) (NOLOAD) : AT(ALIGN(__bss_end__ , 4)) - { - __non_init_start__ = .; - *(.non_init .non_init.*) - } - __non_init_end__ = __non_init_start__ + SIZEOF(.non_init); - - __non_init_load_end__ = __non_init_end__; - - . = ASSERT(__non_init_end__ >= __RAM_segment_start__ && __non_init_end__ <= __RAM_segment_end__ , "error: .non_init is too large to fit in RAM memory segment"); - - __heap_load_start__ = ALIGN(__non_init_end__ , 4); - .heap ALIGN(__non_init_end__ , 4) (NOLOAD) : AT(ALIGN(__non_init_end__ , 4)) - { - __heap_start__ = .; - *(.heap .heap.*) - . = ALIGN(MAX(__heap_start__ + __HEAPSIZE__ , .), 4); - } - __heap_end__ = __heap_start__ + SIZEOF(.heap); - - __heap_load_end__ = __heap_end__; - - . = ASSERT(__heap_end__ >= __RAM_segment_start__ && __heap_end__ <= __RAM_segment_end__ , "error: .heap is too large to fit in RAM memory segment"); - - __stack_load_start__ = ALIGN(__heap_end__ , 4); - .stack ALIGN(__heap_end__ , 4) (NOLOAD) : AT(ALIGN(__heap_end__ , 4)) - { - __stack_start__ = .; - *(.stack .stack.*) - . = ALIGN(MAX(__stack_start__ + __STACKSIZE__ , .), 4); - } - __stack_end__ = __stack_start__ + SIZEOF(.stack); - - __stack_load_end__ = __stack_end__; - - . = ASSERT(__stack_end__ >= __RAM_segment_start__ && __stack_end__ <= __RAM_segment_end__ , "error: .stack is too large to fit in RAM memory segment"); - - __stack_process_load_start__ = ALIGN(__stack_end__ , 4); - .stack_process ALIGN(__stack_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_end__ , 4)) - { - __stack_process_start__ = .; - *(.stack_process .stack_process.*) - . = ALIGN(MAX(__stack_process_start__ + __STACKSIZE_PROCESS__ , .), 4); - } - __stack_process_end__ = __stack_process_start__ + SIZEOF(.stack_process); - - __stack_process_load_end__ = __stack_process_end__; - - . = ASSERT(__stack_process_end__ >= __RAM_segment_start__ && __stack_process_end__ <= __RAM_segment_end__ , "error: .stack_process is too large to fit in RAM memory segment"); - - __tbss_load_start__ = ALIGN(__stack_process_end__ , 4); - .tbss ALIGN(__stack_process_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_process_end__ , 4)) - { - __tbss_start__ = .; - *(.tbss .tbss.*) - } - __tbss_end__ = __tbss_start__ + SIZEOF(.tbss); - - __tbss_load_end__ = __tbss_end__; - - . = ASSERT(__tbss_end__ >= __RAM_segment_start__ && __tbss_end__ <= __RAM_segment_end__ , "error: .tbss is too large to fit in RAM memory segment"); - - __tdata_load_start__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4); - .tdata ALIGN(__tbss_end__ , 4) : AT(ALIGN(__data_load_start__ + SIZEOF(.data) , 4)) - { - __tdata_start__ = .; - *(.tdata .tdata.*) - } - __tdata_end__ = __tdata_start__ + SIZEOF(.tdata); - - __tdata_load_end__ = __tdata_load_start__ + SIZEOF(.tdata); - - __FLASH_segment_used_end__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4) + SIZEOF(.tdata); - - . = ASSERT(__tdata_load_end__ >= __FLASH_segment_start__ && __tdata_load_end__ <= __FLASH_segment_end__ , "error: .tdata is too large to fit in FLASH memory segment"); - - .tdata_run ALIGN(__tbss_end__ , 4) (NOLOAD) : - { - __tdata_run_start__ = .; - . = MAX(__tdata_run_start__ + SIZEOF(.tdata), .); - } - __tdata_run_end__ = __tdata_run_start__ + SIZEOF(.tdata_run); - - __tdata_run_load_end__ = __tdata_run_end__; - - __RAM_segment_used_end__ = ALIGN(__tbss_end__ , 4) + SIZEOF(.tdata_run); - - . = ASSERT(__tdata_run_end__ >= __RAM_segment_start__ && __tdata_run_end__ <= __RAM_segment_end__ , "error: .tdata_run is too large to fit in RAM memory segment"); - -} - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/net.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/net.c deleted file mode 100644 index 6c8f8940..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/net.c +++ /dev/null @@ -1,206 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\net.c -* \brief Network application for the uIP TCP/IP stack. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2014 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ -#include "netdev.h" -#include "uip.h" -#include "uip_arp.h" - - -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -/** \brief Delta time for the uIP periodic timer. */ -#define NET_UIP_PERIODIC_TIMER_MS (500) -/** \brief Delta time for the uIP ARP timer. */ -#define NET_UIP_ARP_TIMER_MS (10000) -/** \brief Macro for accessing the Ethernet header information in the buffer */ -#define NET_UIP_HEADER_BUF ((struct uip_eth_hdr *)&uip_buf[0]) - - -/**************************************************************************************** -* Local data declarations -****************************************************************************************/ -/** \brief Holds the time out value of the uIP periodic timer. */ -static unsigned long periodicTimerTimeOut; -/** \brief Holds the time out value of the uIP ARP timer. */ -static unsigned long ARPTimerTimeOut; - - -/************************************************************************************//** -** \brief Initializes the TCP/IP network communication interface. -** \return none. -** -****************************************************************************************/ -void NetInit(void) -{ - uip_ipaddr_t ipaddr; - - /* initialize the network device */ - netdev_init(); - /* initialize the timer variables */ - periodicTimerTimeOut = TimerGet() + NET_UIP_PERIODIC_TIMER_MS; - ARPTimerTimeOut = TimerGet() + NET_UIP_ARP_TIMER_MS; - /* initialize the uIP TCP/IP stack. */ - uip_init(); - /* set the IP address */ - uip_ipaddr(ipaddr, BOOT_COM_NET_IPADDR0, BOOT_COM_NET_IPADDR1, BOOT_COM_NET_IPADDR2, - BOOT_COM_NET_IPADDR3); - uip_sethostaddr(ipaddr); - /* set the network mask */ - uip_ipaddr(ipaddr, BOOT_COM_NET_NETMASK0, BOOT_COM_NET_NETMASK1, BOOT_COM_NET_NETMASK2, - BOOT_COM_NET_NETMASK3); - uip_setnetmask(ipaddr); - /* set the gateway address */ - uip_ipaddr(ipaddr, BOOT_COM_NET_GATEWAY0, BOOT_COM_NET_GATEWAY1, BOOT_COM_NET_GATEWAY2, - BOOT_COM_NET_GATEWAY3); - uip_setdraddr(ipaddr); - /* start listening on the configured port for XCP transfers on TCP/IP */ - uip_listen(HTONS(BOOT_COM_NET_PORT)); - /* initialize the MAC and set the MAC address */ - netdev_init_mac(); -} /*** end of NetInit ***/ - - -/************************************************************************************//** -** \brief The uIP network application that detects the XCP connect command on the -** port used by the bootloader. This indicates that the bootloader should -** be activated. -** \return none. -** -****************************************************************************************/ -void NetApp(void) -{ - unsigned char *newDataPtr; - - if (uip_connected()) - { - return; - } - - if (uip_newdata()) - { - /* a new XCP command was received. check if this is the connect command and in this - * case activate the bootloader. with XCP on TCP/IP the first 4 bytes contain a - * counter value in which we are not really interested. - */ - newDataPtr = uip_appdata; - newDataPtr += 4; - /* check if this was an XCP CONNECT command */ - if ((newDataPtr[0] == 0xff) && (newDataPtr[1] == 0x00)) - { - /* connection request received so start the bootloader */ - BootActivate(); - } - } -} /*** end of NetApp ***/ - - -/************************************************************************************//** -** \brief Runs the TCP/IP server task. -** \return none. -** -****************************************************************************************/ -void NetTask(void) -{ - unsigned long connection; - unsigned long packetLen; - - /* check for an RX packet and read it. */ - packetLen = netdev_read(); - if(packetLen > 0) - { - /* set uip_len for uIP stack usage */ - uip_len = (unsigned short)packetLen; - - /* process incoming IP packets here. */ - if(NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_IP)) - { - uip_arp_ipin(); - uip_input(); - /* if the above function invocation resulted in data that - * should be sent out on the network, the global variable - * uip_len is set to a value > 0. - */ - if(uip_len > 0) - { - uip_arp_out(); - netdev_send(); - uip_len = 0; - } - } - /* process incoming ARP packets here. */ - else if(NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_ARP)) - { - uip_arp_arpin(); - - /* if the above function invocation resulted in data that - * should be sent out on the network, the global variable - * uip_len is set to a value > 0. - */ - if(uip_len > 0) - { - netdev_send(); - uip_len = 0; - } - } - } - - /* process TCP/IP Periodic Timer here. */ - if (TimerGet() >= periodicTimerTimeOut) - { - periodicTimerTimeOut += NET_UIP_PERIODIC_TIMER_MS; - for (connection = 0; connection < UIP_CONNS; connection++) - { - uip_periodic(connection); - /* If the above function invocation resulted in data that - * should be sent out on the network, the global variable - * uip_len is set to a value > 0. - */ - if(uip_len > 0) - { - uip_arp_out(); - netdev_send(); - uip_len = 0; - } - } - } - - /* process ARP Timer here. */ - if (TimerGet() >= ARPTimerTimeOut) - { - ARPTimerTimeOut += NET_UIP_ARP_TIMER_MS; - uip_arp_timer(); - } -} /*** end of NetServerTask ***/ - - -/*********************************** end of net.c **************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/net.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/net.h deleted file mode 100644 index 5b9c3464..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/net.h +++ /dev/null @@ -1,61 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\net.h -* \brief Network application for the uIP TCP/IP stack. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2014 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef NET_H -#define NET_H - -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -#ifndef UIP_APPCALL -#define UIP_APPCALL NetApp -#endif /* UIP_APPCALL */ - - -/**************************************************************************************** -* Type definitions -****************************************************************************************/ -/** \brief Define the uip_tcp_appstate_t datatype. This is the state of our tcp/ip - * application, and the memory required for this state is allocated together - * with each TCP connection. One application state for each TCP connection. - */ -typedef struct net_state -{ - unsigned char unused; -} uip_tcp_appstate_t; - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void NetInit(void); -void NetApp(void); -void NetTask(void); - - -#endif /* NET_H */ -/*********************************** end of net.h **************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/prog.dox b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/prog.dox deleted file mode 100644 index 90274be6..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/prog.dox +++ /dev/null @@ -1,7 +0,0 @@ -/** -\defgroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks User Program -\brief User Program. -\ingroup ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -*/ - - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/timer.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/timer.c deleted file mode 100644 index 5d81a232..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/timer.c +++ /dev/null @@ -1,106 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\timer.c -* \brief Timer driver source file. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* Local data declarations -****************************************************************************************/ -/** \brief Local variable for storing the number of milliseconds that have elapsed since - * startup. - */ -static unsigned long millisecond_counter; - - -/************************************************************************************//** -** \brief Initializes the timer. -** \return none. -** -****************************************************************************************/ -void TimerInit(void) -{ - /* configure the SysTick timer for 1 ms period */ - SysTick_Config(SystemCoreClock / 1000); - /* reset the millisecond counter */ - TimerSet(0); -} /*** end of TimerInit ***/ - - -/************************************************************************************//** -** \brief Stops and disables the timer. -** \return none. -** -****************************************************************************************/ -void TimerDeinit(void) -{ - SysTick->CTRL = 0; -} /*** end of TimerDeinit ***/ - - -/************************************************************************************//** -** \brief Sets the initial counter value of the millisecond timer. -** \param timer_value initialize value of the millisecond timer. -** \return none. -** -****************************************************************************************/ -void TimerSet(unsigned long timer_value) -{ - /* set the millisecond counter */ - millisecond_counter = timer_value; -} /*** end of TimerSet ***/ - - -/************************************************************************************//** -** \brief Obtains the counter value of the millisecond timer. -** \return Current value of the millisecond timer. -** -****************************************************************************************/ -unsigned long TimerGet(void) -{ - /* read and return the millisecond counter value */ - return millisecond_counter; -} /*** end of TimerGet ***/ - - -/************************************************************************************//** -** \brief Interrupt service routine of the timer. -** \return none. -** -****************************************************************************************/ -void TimerISRHandler(void) -{ - /* increment the millisecond counter */ - millisecond_counter++; -} /*** end of TimerISRHandler ***/ - - -/*********************************** end of timer.c ************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/timer.h b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/timer.h deleted file mode 100644 index 9a5bad92..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/timer.h +++ /dev/null @@ -1,41 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\timer.h -* \brief Timer driver header file. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef TIMER_H -#define TIMER_H - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void TimerInit(void); -void TimerDeinit(void); -void TimerSet(unsigned long timer_value); -unsigned long TimerGet(void); -void TimerISRHandler(void); - -#endif /* TIMER_H */ -/*********************************** end of timer.h ************************************/ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/vectors.c b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/vectors.c deleted file mode 100644 index a80209a5..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/vectors.c +++ /dev/null @@ -1,178 +0,0 @@ -/************************************************************************************//** -* \file Demo\ARMCM4_STM32F4_Olimex_STM32E407_Crossworks\Prog\vectors.c -* \brief Demo program interrupt vectors source file. -* \ingroup Prog_ARMCM4_STM32F4_Olimex_STM32E407_Crossworks -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2013 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "header.h" /* generic header */ - - -/**************************************************************************************** -* External functions -****************************************************************************************/ -extern void reset_handler(void); /* implemented in cstart.s */ - - -/**************************************************************************************** -* External data declarations -****************************************************************************************/ -/** \brief Stack end address (memory.x) */ -extern unsigned long __stack_end__; - - -/************************************************************************************//** -** \brief Catch-all for unused interrrupt service routines. -** \return none. -** -****************************************************************************************/ -void UnusedISR(void) -{ - /* unexpected interrupt occured, so halt the system */ - while (1) { ; } -} /*** end of UnusedISR ***/ - - -/**************************************************************************************** -* I N T E R R U P T V E C T O R T A B L E -****************************************************************************************/ -/** \brief Structure type for vector table entries. */ -typedef union -{ - void (*func)(void); /**< for ISR function pointers */ - unsigned long ptr; /**< for stack pointer entry */ -}tIsrFunc; - -/** \brief Interrupt vector table. */ -__attribute__ ((section(".vectors"))) -const tIsrFunc _vectors[] = -{ - { .ptr = (unsigned long)&__stack_end__ }, /* the initial stack pointer */ - { reset_handler }, /* the reset handler */ - { UnusedISR }, /* NMI Handler */ - { UnusedISR }, /* Hard Fault Handler */ - { UnusedISR }, /* MPU Fault Handler */ - { UnusedISR }, /* Bus Fault Handler */ - { UnusedISR }, /* Usage Fault Handler */ - { UnusedISR }, /* Reserved */ - { UnusedISR }, /* Reserved */ - { UnusedISR }, /* Reserved */ - { UnusedISR }, /* Reserved */ - { UnusedISR }, /* SVCall Handler */ - { UnusedISR }, /* Debug Monitor Handler */ - { UnusedISR }, /* Reserved */ - { UnusedISR }, /* PendSV Handler */ - { TimerISRHandler }, /* SysTick Handler */ - { UnusedISR }, /* Window Watchdog */ - { UnusedISR }, /* PVD through EXTI Line detect */ - { UnusedISR }, /* Tamper */ - { UnusedISR }, /* RTC */ - { UnusedISR }, /* Flash */ - { UnusedISR }, /* RCC */ - { UnusedISR }, /* EXTI Line 0 */ - { UnusedISR }, /* EXTI Line 1 */ - { UnusedISR }, /* EXTI Line 2 */ - { UnusedISR }, /* EXTI Line 3 */ - { UnusedISR }, /* EXTI Line 4 */ - { UnusedISR }, /* DMA1 Channel 0 */ - { UnusedISR }, /* DMA1 Channel 1 */ - { UnusedISR }, /* DMA1 Channel 2 */ - { UnusedISR }, /* DMA1 Channel 3 */ - { UnusedISR }, /* DMA1 Channel 4 */ - { UnusedISR }, /* DMA1 Channel 5 */ - { UnusedISR }, /* DMA1 Channel 6 */ - { UnusedISR }, /* ADC1 and ADC2, ADC3s */ - { UnusedISR }, /* CAN1 TX */ - { UnusedISR }, /* CAN1 RX0 */ - { UnusedISR }, /* CAN1 RX1 */ - { UnusedISR }, /* CAN1 SCE */ - { UnusedISR }, /* EXTI Line 9..5 */ - { UnusedISR }, /* TIM1 Break and TIM9 */ - { UnusedISR }, /* TIM1 Update and TIM10 */ - { UnusedISR }, /* TIM1 Trigger/Comm. and TIM11 */ - { UnusedISR }, /* TIM1 Capture Compare */ - { UnusedISR }, /* TIM2 */ - { UnusedISR }, /* TIM3 */ - { UnusedISR }, /* TIM4 */ - { UnusedISR }, /* I2C1 Event */ - { UnusedISR }, /* I2C1 Error */ - { UnusedISR }, /* I2C2 Event */ - { UnusedISR }, /* I2C1 Error */ - { UnusedISR }, /* SPI1 */ - { UnusedISR }, /* SPI2 */ - { UnusedISR }, /* USART1 */ - { UnusedISR }, /* USART2 */ - { UnusedISR }, /* USART3 */ - { UnusedISR }, /* EXTI Line 15..10 */ - { UnusedISR }, /* RTC alarm through EXTI line */ - { UnusedISR }, /* USB OTG FS Wakeup */ - { UnusedISR }, /* TIM8 Break and TIM12 */ - { UnusedISR }, /* TIM8 Update and TIM13 */ - { UnusedISR }, /* TIM8 Trigger/Comm. and TIM14 */ - { UnusedISR }, /* TIM8 Capture Compare */ - { UnusedISR }, /* DMA1 Stream7 */ - { UnusedISR }, /* FSMC */ - { UnusedISR }, /* SDIO */ - { UnusedISR }, /* TIM5 */ - { UnusedISR }, /* SPI3 */ - { UnusedISR }, /* UART4 */ - { UnusedISR }, /* UART5 */ - { UnusedISR }, /* TIM6 and DAC1&2 underrun err. */ - { UnusedISR }, /* TIM7 */ - { UnusedISR }, /* DMA2 Stream 0 */ - { UnusedISR }, /* DMA2 Stream 1 */ - { UnusedISR }, /* DMA2 Stream 2 */ - { UnusedISR }, /* DMA2 Stream 3 */ - { UnusedISR }, /* DMA2 Stream 4 */ - { UnusedISR }, /* Ethernet */ - { UnusedISR }, /* Ethernet Wakeup */ - { UnusedISR }, /* CAN2 TX */ - { UnusedISR }, /* CAN2 RX0 */ - { UnusedISR }, /* CAN2 RX1 */ - { UnusedISR }, /* CAN2 SCE */ - { UnusedISR }, /* USB OTG FS */ - { UnusedISR }, /* DMA2 Stream 5 */ - { UnusedISR }, /* DMA2 Stream 6 */ - { UnusedISR }, /* DMA2 Stream 7 */ - { UnusedISR }, /* USART6 */ - { UnusedISR }, /* I2C3 event */ - { UnusedISR }, /* I2C3 error */ - { UnusedISR }, /* USB OTG HS End Point 1 Out */ - { UnusedISR }, /* USB OTG HS End Point 1 In */ - { UnusedISR }, /* USB OTG HS Wakeup through EXTI*/ - { UnusedISR }, /* USB OTG HS */ - { UnusedISR }, /* DCMI */ - { UnusedISR }, /* CRYP crypto */ - { UnusedISR }, /* Hash and Rng */ - { UnusedISR }, /* FPU */ - { (void*)0x55AA11EE }, /* Reserved for OpenBLT checksum */ -}; - - -/************************************ end of vectors.c *********************************/ - - diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/demo.dox b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/demo.dox deleted file mode 100644 index 0d17c065..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/demo.dox +++ /dev/null @@ -1,8 +0,0 @@ -/** -\defgroup ARMCM4_STM32F4_Olimex_STM32E407_Crossworks Demo for Olimex STM32-E407/Crossworks -\brief Preconfigured programs for the Olimex STM32-E407 and the Crossworks IDE. -\details Refer to http://feaser.com/openblt/doku.php?id=manual:demos - for detailed getting started instructions. -*/ - -