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 4552863e..00000000 Binary files a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openblt_olimex_lpc_l2294_20mhz.elf and /dev/null differ 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 fa2b5b52..00000000 Binary files a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf and /dev/null differ 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 124c44ec..db60538c 100644 Binary files a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.elf and b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.elf differ diff --git a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.map b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.map index 9d3a3a6d..687d78d7 100644 --- a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.map +++ b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Boot/bin/openbtl_olimex_efm32g880.map @@ -17,14 +17,16 @@ Discarded input sections .text 0x00000000 0x0 THUMB Flash Debug/../../obj/cpu.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/cpu.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/cpu.o - .text.CpuReset - 0x00000000 0x10 THUMB Flash Debug/../../obj/cpu.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/flash.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/flash.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/flash.o + .text.FlashReinit + 0x00000000 0x18 THUMB Flash Debug/../../obj/flash.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/nvm.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/nvm.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/nvm.o + .text.NvmReinit + 0x00000000 0x8 THUMB Flash Debug/../../obj/nvm.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/timer.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/timer.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/timer.o @@ -52,17 +54,30 @@ Discarded input sections .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 0x24 THUMB Flash Debug/../../obj/system_efm32.o + 0x00000000 0x20 THUMB Flash Debug/../../obj/system_efm32.o .text.SystemULFRCOClockGet 0x00000000 0x6 THUMB Flash Debug/../../obj/system_efm32.o .text.SystemLFXOClockSet - 0x00000000 0x24 THUMB Flash Debug/../../obj/system_efm32.o + 0x00000000 0x20 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 @@ -77,58 +92,111 @@ Discarded input sections .text.ACMP_Reset 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_GPIOSetup - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_acmp.o + 0x00000000 0x1a THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_ChannelSet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_acmp.o .text.ACMP_Init 0x00000000 0x4a THUMB Flash Debug/../../obj/efm32_acmp.o + .debug_frame 0x00000000 0xb4 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 0x35e 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 0x32 THUMB Flash Debug/../../obj/efm32_adc.o .text.ADC_InitScan - 0x00000000 0xd8 THUMB Flash Debug/../../obj/efm32_adc.o + 0x00000000 0xe4 THUMB Flash Debug/../../obj/efm32_adc.o .text.ADC_InitSingle - 0x00000000 0xd4 THUMB Flash Debug/../../obj/efm32_adc.o + 0x00000000 0xe4 THUMB Flash Debug/../../obj/efm32_adc.o .text.ADC_PrescaleCalc 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 + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_adc.o + .debug_frame 0x00000000 0xa8 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 0x27b 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 0x38c 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 0x100 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0xe8 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CBC256 - 0x00000000 0x130 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0xf8 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CFB128 - 0x00000000 0x9c THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x8c THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CFB256 - 0x00000000 0xa8 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x90 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CTR128 - 0x00000000 0x7c THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x80 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CTR256 - 0x00000000 0x78 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x80 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_CTRUpdate32Bit 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_DecryptKey128 - 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_DecryptKey256 - 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_ECB128 - 0x00000000 0x74 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x6c THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_ECB256 - 0x00000000 0x88 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x68 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_OFB128 - 0x00000000 0x74 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_aes.o .text.AES_OFB256 - 0x00000000 0x98 THUMB Flash Debug/../../obj/efm32_aes.o + 0x00000000 0x80 THUMB Flash Debug/../../obj/efm32_aes.o + .debug_frame 0x00000000 0x1fc THUMB Flash Debug/../../obj/efm32_aes.o + .debug_info 0x00000000 0x1461 THUMB Flash Debug/../../obj/efm32_aes.o + .debug_abbrev 0x00000000 0x26b THUMB Flash Debug/../../obj/efm32_aes.o + .debug_loc 0x00000000 0x170e 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 0xa83 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 @@ -141,7 +209,7 @@ Discarded input sections .text.CMU_HFRCOBandGet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_HFRCOBandSet - 0x00000000 0x8c THUMB Flash Debug/../../obj/efm32_cmu.o + 0x00000000 0x90 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_HFRCOStartupDelayGet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_HFRCOStartupDelaySet @@ -157,69 +225,115 @@ Discarded input sections .text.CMU_PCNTClockExternalGet 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_cmu.o .text.CMU_PCNTClockExternalSet - 0x00000000 0x10 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 0x14 THUMB Flash Debug/../../obj/efm32_dac.o + 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_dac.o .text.DAC_Init - 0x00000000 0x7c THUMB Flash Debug/../../obj/efm32_dac.o + 0x00000000 0x74 THUMB Flash Debug/../../obj/efm32_dac.o .text.DAC_InitChannel 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_dac.o .text.DAC_PrescaleCalc 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_dac.o .text.DAC_Reset 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_dac.o + .debug_frame 0x00000000 0x78 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 0x21e 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 0x33f 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 0x48 THUMB Flash Debug/../../obj/efm32_dbg.o + 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_frame 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_info 0x00000000 0x40d THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_abbrev 0x00000000 0x1d9 THUMB Flash Debug/../../obj/efm32_dbg.o + .debug_loc 0x00000000 0xad 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 0x2dd 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 0x90 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x8c THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_IRQHandler - 0x00000000 0x78 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x74 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ActivateAuto - 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ActivateBasic - 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ActivatePingPong 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ActivateScatterGather - 0x00000000 0x80 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x84 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_CfgChannel 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_CfgDescr - 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_CfgDescrScatterGather - 0x00000000 0x5e THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x72 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_ChannelEnabled 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_RefreshPingPong - 0x00000000 0x74 THUMB Flash Debug/../../obj/efm32_dma.o + 0x00000000 0x78 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_Reset 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_dma.o .text.DMA_Init 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_dma.o + .debug_frame 0x00000000 0x1c8 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_info 0x00000000 0x1144 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_abbrev 0x00000000 0x390 THUMB Flash Debug/../../obj/efm32_dma.o + .debug_loc 0x00000000 0x8d6 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 0x4e6 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.BITBAND_Peripheral - 0x00000000 0xe THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_Disable 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_BankEnable - 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_ebi.o + 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_BankAddress 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_ChipSelectEnable - 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_ebi.o + 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_PolaritySet - 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_ebi.o + 0x00000000 0x38 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_ReadTimingSet 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_WriteTimingSet @@ -227,18 +341,34 @@ Discarded input sections .text.EBI_AddressTimingSet 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_ebi.o .text.EBI_Init - 0x00000000 0xd4 THUMB Flash Debug/../../obj/efm32_ebi.o - .rodata.CSWTCH.3 + 0x00000000 0xc8 THUMB Flash Debug/../../obj/efm32_ebi.o + .rodata.CSWTCH.6 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_frame 0x00000000 0xc8 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_info 0x00000000 0xb03 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_abbrev 0x00000000 0x28a THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_loc 0x00000000 0x660 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 0xb0 THUMB Flash Debug/../../obj/efm32_ebi.o + .debug_line 0x00000000 0x41d 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 0x78 THUMB Flash Debug/../../obj/efm32_emu.o .text.EMU_EnterEM2 - 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_emu.o + 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_emu.o .text.EMU_EnterEM3 - 0x00000000 0x5c THUMB Flash Debug/../../obj/efm32_emu.o + 0x00000000 0x60 THUMB Flash Debug/../../obj/efm32_emu.o .text.EMU_EnterEM4 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_emu.o .text.EMU_MemPwrDown @@ -249,13 +379,13 @@ Discarded input sections .text.GPIO_DbgLocationSet 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_IntConfig - 0x00000000 0x88 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x64 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinInGet - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x16 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinOutClear 0x00000000 0x16 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinOutGet - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x16 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinOutSet 0x00000000 0x16 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PinOutToggle @@ -269,7 +399,7 @@ Discarded input sections .text.GPIO_PortOutSet 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PortOutSetVal - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_gpio.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_gpio.o .text.GPIO_PortOutToggle 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_gpio.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_i2c.o @@ -280,29 +410,58 @@ Discarded input sections .text.I2C_BusFreqSet 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_Enable - 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0xa THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_Init 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_Reset 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_Transfer - 0x00000000 0x290 THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0x2c8 THUMB Flash Debug/../../obj/efm32_i2c.o .text.I2C_TransferInit - 0x00000000 0x78 THUMB Flash Debug/../../obj/efm32_i2c.o + 0x00000000 0x68 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 0xc4 THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_info 0x00000000 0x8cc THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_abbrev 0x00000000 0x2e2 THUMB Flash Debug/../../obj/efm32_i2c.o + .debug_loc 0x00000000 0x536 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 0x58 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 0x40 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_VLCDSelect 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_UpdateCtrl @@ -314,48 +473,95 @@ Discarded input sections .text.LCD_SegmentRangeEnable 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_SegmentSet - 0x00000000 0x60 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x58 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_SegmentSetLow - 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_SegmentSetHigh - 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_lcd.o + 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_lcd.o .text.LCD_ContrastSet 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 0xa50 THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_abbrev 0x00000000 0x27a THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_loc 0x00000000 0x6ea 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 0x78 THUMB Flash Debug/../../obj/efm32_lcd.o + .debug_line 0x00000000 0x3fd 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_Sync 0x00000000 0xe THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_CompareGet - 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_CompareSet - 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_Enable 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_FreezeEnable - 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_Init 0x00000000 0x8c THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_RepeatGet - 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_RepeatSet - 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x24 THUMB Flash Debug/../../obj/efm32_letimer.o .text.LETIMER_Reset - 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_letimer.o + 0x00000000 0x22 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_frame 0x00000000 0xd4 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_info 0x00000000 0x5ef THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_abbrev 0x00000000 0x2a9 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_loc 0x00000000 0x3ca 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 0x60 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_ranges 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_letimer.o + .debug_line 0x00000000 0x3a5 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 0x1e THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_BaudrateGet - 0x00000000 0x3c THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_leuart.o + .text.LEUART_FreezeEnable + 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_Reset - 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_leuart.o + 0x00000000 0x26 THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_RxExt 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_leuart.o .text.LEUART_TxExt @@ -365,12 +571,40 @@ Discarded input sections .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/efm32_mpu.o .text.MPU_ConfigureRegion 0x00000000 0x4c 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 0x20e 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 .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 @@ -379,33 +613,81 @@ Discarded input sections .text.PCNT_CounterReset 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_CounterTopSet - 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0x68 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_Enable - 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_FreezeEnable - 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0x12 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_Init - 0x00000000 0xc0 THUMB Flash Debug/../../obj/efm32_pcnt.o - .text.PCNT_Reset - 0x00000000 0x54 THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0xb8 THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_TopBufferSet 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_pcnt.o + .text.PCNT_Reset + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_pcnt.o .text.PCNT_TopSet - 0x00000000 0x20 THUMB Flash Debug/../../obj/efm32_pcnt.o + 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_frame 0x00000000 0x10c THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_info 0x00000000 0x7ea THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_abbrev 0x00000000 0x2a4 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_loc 0x00000000 0x4b4 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 0x60 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_ranges 0x00000000 0xa8 THUMB Flash Debug/../../obj/efm32_pcnt.o + .debug_line 0x00000000 0x409 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 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 0x2a1 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 0xc THUMB Flash Debug/../../obj/efm32_rmu.o .text.RMU_ResetCauseClear - 0x00000000 0x34 THUMB Flash Debug/../../obj/efm32_rmu.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_rmu.o .text.RMU_ResetCauseGet 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_frame 0x00000000 0x40 THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_info 0x00000000 0x2de THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_abbrev 0x00000000 0x1ad THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_loc 0x00000000 0x133 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 0x20 THUMB Flash Debug/../../obj/efm32_rmu.o + .debug_line 0x00000000 0x2ff 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 @@ -414,7 +696,7 @@ Discarded input sections .text.RTC_CompareGet 0x00000000 0x1c THUMB Flash Debug/../../obj/efm32_rtc.o .text.RTC_CompareSet - 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_rtc.o + 0x00000000 0x28 THUMB Flash Debug/../../obj/efm32_rtc.o .text.RTC_Enable 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_rtc.o .text.RTC_FreezeEnable @@ -424,48 +706,80 @@ Discarded input sections .text.RTC_Reset 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_rtc.o .text.RTC_CounterReset - 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_rtc.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_frame 0x00000000 0xc8 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_info 0x00000000 0x3b8 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_abbrev 0x00000000 0x23d THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_loc 0x00000000 0x1a8 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 0x58 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_ranges 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_rtc.o + .debug_line 0x00000000 0x361 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 0x2c THUMB Flash Debug/../../obj/efm32_system.o + 0x00000000 0x28 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 0x10 THUMB Flash Debug/../../obj/efm32_timer.o + 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_Init 0x00000000 0x6e THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_InitCC - 0x00000000 0x64 THUMB Flash Debug/../../obj/efm32_timer.o + 0x00000000 0x66 THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_Lock 0x00000000 0x8 THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_Reset 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_timer.o .text.TIMER_Unlock 0x00000000 0xa THUMB Flash Debug/../../obj/efm32_timer.o + .debug_frame 0x00000000 0x88 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 0x34a 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 0x60 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_BaudrateCalc - 0x00000000 0x48 THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x44 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_BaudrateGet - 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_BaudrateSyncSet 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_Enable 0x00000000 0xe THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_Reset 0x00000000 0x2c THUMB Flash Debug/../../obj/efm32_usart.o - .text.USART_InitSync - 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_InitAsync 0x00000000 0x30 THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_InitIrDA 0x00000000 0x50 THUMB Flash Debug/../../obj/efm32_usart.o + .text.USART_InitSync + 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_Rx 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_RxDouble @@ -475,36 +789,97 @@ Discarded input sections .text.USART_RxExt 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_Tx - 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0xa THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_TxDouble - 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0xa THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_TxDoubleExt 0x00000000 0xa THUMB Flash Debug/../../obj/efm32_usart.o .text.USART_TxExt - 0x00000000 0xc THUMB Flash Debug/../../obj/efm32_usart.o + 0x00000000 0xa THUMB Flash Debug/../../obj/efm32_usart.o + .debug_frame 0x00000000 0x198 THUMB Flash Debug/../../obj/efm32_usart.o + .debug_info 0x00000000 0xb37 THUMB Flash Debug/../../obj/efm32_usart.o + .debug_abbrev 0x00000000 0x235 THUMB Flash Debug/../../obj/efm32_usart.o + .debug_loc 0x00000000 0x5b2 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 0x468 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 .text.VCMP_LowPowerRefSet - 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_vcmp.o + 0x00000000 0x16 THUMB Flash Debug/../../obj/efm32_vcmp.o .text.VCMP_TriggerSet 0x00000000 0x10 THUMB Flash Debug/../../obj/efm32_vcmp.o .text.VCMP_Init - 0x00000000 0xdc THUMB Flash Debug/../../obj/efm32_vcmp.o + 0x00000000 0xd8 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_frame 0x00000000 0x4c THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_info 0x00000000 0x304 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_abbrev 0x00000000 0x1a6 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_loc 0x00000000 0x75 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 0x38 THUMB Flash Debug/../../obj/efm32_vcmp.o + .debug_line 0x00000000 0x305 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 0x1c THUMB Flash Debug/../../obj/efm32_wdog.o + 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_wdog.o .text.WDOG_Feed 0x00000000 0x14 THUMB Flash Debug/../../obj/efm32_wdog.o .text.WDOG_Lock 0x00000000 0x18 THUMB Flash Debug/../../obj/efm32_wdog.o .text.WDOG_Init 0x00000000 0x68 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_frame 0x00000000 0x70 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_info 0x00000000 0x389 THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_abbrev 0x00000000 0x1ad THUMB Flash Debug/../../obj/efm32_wdog.o + .debug_loc 0x00000000 0x175 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 0x32b 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/hooks.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/hooks.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/hooks.o + .debug_info 0x00000000 0x52 THUMB Flash Debug/../../obj/hooks.o + .debug_abbrev 0x00000000 0x27 THUMB Flash Debug/../../obj/hooks.o + .debug_pubnames + 0x00000000 0x12 THUMB Flash Debug/../../obj/hooks.o + .debug_pubtypes + 0x00000000 0x91 THUMB Flash Debug/../../obj/hooks.o + .debug_aranges + 0x00000000 0x18 THUMB Flash Debug/../../obj/hooks.o + .debug_line 0x00000000 0x1d THUMB Flash Debug/../../obj/hooks.o + .debug_str 0x00000000 0x1ec THUMB Flash Debug/../../obj/hooks.o + .comment 0x00000000 0x4d THUMB Flash Debug/../../obj/hooks.o + .ARM.attributes + 0x00000000 0x33 THUMB Flash Debug/../../obj/hooks.o .text 0x00000000 0x0 THUMB Flash Debug/../../obj/main.o .data 0x00000000 0x0 THUMB Flash Debug/../../obj/main.o .bss 0x00000000 0x0 THUMB Flash Debug/../../obj/main.o @@ -551,443 +926,446 @@ 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) 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 0bc3a753..48add7eb 100644 Binary files a/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.elf and b/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog/bin/demoprog_olimex_efm32g880.elf differ 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 f462d12b..d485c698 100644 Binary files a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.elf and b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/bin/openblt_olimex_stm32h103.elf differ 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 b6b8acec..00000000 Binary files a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Boot/lib/CMSIS/License.doc and /dev/null differ 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 149581e3..f14091a2 100644 Binary files a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.elf and b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/bin/demoprog_olimex_stm32h103.elf differ 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 b6b8acec..00000000 Binary files a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32H103_Crossworks/Prog/lib/stdperiphlib/CMSIS/License.doc and /dev/null differ 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 4d28bbb7..cf513665 100644 Binary files a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.elf and b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/bin/openblt_olimex_stm32p103.elf differ 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 b6b8acec..00000000 Binary files a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Boot/lib/CMSIS/License.doc and /dev/null differ 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 70775ba1..f99ad955 100644 Binary files a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.elf and b/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/bin/demoprog_olimex_stm32p103.elf differ 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 b6b8acec..00000000 Binary files a/Target/Demo/ARMCM3_STM32F1_Olimex_STM32P103_Crossworks/Prog/lib/stdperiphlib/CMSIS/License.doc and /dev/null differ 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 028d8353..00000000 Binary files a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.elf and /dev/null differ diff --git a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.map b/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.map deleted file mode 100644 index 8a193f3f..00000000 --- a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/bin/openblt_olimex_stm32e407.map +++ /dev/null @@ -1,4823 +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.o) - THUMB Debug/../../obj/file.o (isdigit) -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/mmc.o (memcpy) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc_asm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) (__aeabi_uldivmod) -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/libc_v7em_t_le_eabi.a(libc2.o) (__errno) -C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) (__aeabi_i2f) - -Discarded input sections - - .text 0x00000000 0x0 THUMB Debug/../../obj/mmc.o - .data 0x00000000 0x0 THUMB Debug/../../obj/mmc.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/mmc.o - .text.IsCardProgramming - 0x00000000 0x164 THUMB Debug/../../obj/mmc.o - .text.SD_DeInit - 0x00000000 0xa0 THUMB Debug/../../obj/mmc.o - .text.SD_PowerOFF - 0x00000000 0xc THUMB Debug/../../obj/mmc.o - .text.SD_ReadMultiBlocks - 0x00000000 0x1bc THUMB Debug/../../obj/mmc.o - .text.SD_WriteMultiBlocks - 0x00000000 0x1ec THUMB Debug/../../obj/mmc.o - .text.SD_GetTransferState - 0x00000000 0x18 THUMB Debug/../../obj/mmc.o - .text.SD_StopTransfer - 0x00000000 0x30 THUMB Debug/../../obj/mmc.o - .text.SD_WaitWriteOperation - 0x00000000 0x198 THUMB Debug/../../obj/mmc.o - .text.SD_WaitReadOperation - 0x00000000 0x100 THUMB Debug/../../obj/mmc.o - .text.SD_Erase - 0x00000000 0x164 THUMB Debug/../../obj/mmc.o - .text.SD_SendSDStatus - 0x00000000 0x1a0 THUMB Debug/../../obj/mmc.o - .text.SD_GetCardStatus - 0x00000000 0x84 THUMB Debug/../../obj/mmc.o - .text.SD_ProcessIRQSrc - 0x00000000 0xac THUMB Debug/../../obj/mmc.o - .text.SD_ProcessDMAIRQ - 0x00000000 0x2c THUMB Debug/../../obj/mmc.o - .text.SDIO_IRQHandler - 0x00000000 0x4 THUMB Debug/../../obj/mmc.o - .text.DMA2_Stream3_IRQHandler - 0x00000000 0x4 THUMB Debug/../../obj/mmc.o - .bss.SDSTATUS_Tab - 0x00000000 0x40 THUMB Debug/../../obj/mmc.o - .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 0x94 THUMB Debug/../../obj/system_stm32f4xx.o - .data.AHBPrescTable - 0x00000000 0x10 THUMB Debug/../../obj/system_stm32f4xx.o - .data.SystemCoreClock - 0x00000000 0x4 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 0x80 THUMB Debug/../../obj/misc.o - .text.NVIC_SetVectorTable - 0x00000000 0x18 THUMB Debug/../../obj/misc.o - .text.NVIC_SystemLPConfig - 0x00000000 0x1c 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 0x58a THUMB Debug/../../obj/misc.o - .debug_abbrev 0x00000000 0x149 THUMB Debug/../../obj/misc.o - .debug_loc 0x00000000 0x1ac 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 0x252 THUMB Debug/../../obj/misc.o - .debug_str 0x00000000 0x42d 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 0x50 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_StructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_CommonInit - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_CommonStructInit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_Cmd 0x00000000 0x14 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 0x1c THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_VBATCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_RegularChannelConfig - 0x00000000 0x9c 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 0x14 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_ContinuousModeCmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_DiscModeChannelCountConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_DiscModeCmd - 0x00000000 0x14 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 0x14 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_DMARequestAfterLastTransferCmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_MultiModeDMARequestAfterLastTransferCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_InjectedChannelConfig - 0x00000000 0x64 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_InjectedSequencerLengthConfig - 0x00000000 0x10 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 0x14 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_InjectedDiscModeCmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_GetInjectedConversionValue - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_ITConfig - 0x00000000 0x1c 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 0x1c THUMB Debug/../../obj/stm32f4xx_adc.o - .text.ADC_ClearITPendingBit - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_frame 0x00000000 0x2cc THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_info 0x00000000 0xd5b THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_abbrev 0x00000000 0x20a THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_loc 0x00000000 0xdab 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 0x5a8 THUMB Debug/../../obj/stm32f4xx_adc.o - .debug_str 0x00000000 0x86f 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.CAN_DeInit - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_Init - 0x00000000 0x104 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_FilterInit - 0x00000000 0x134 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_StructInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_SlaveStartBank - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_DBGFreeze - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_TTComModeCmd - 0x00000000 0x5c THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_Transmit - 0x00000000 0xd0 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_TransmitStatus - 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_CancelTransmit - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_Receive - 0x00000000 0x98 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_FIFORelease - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_MessagePending - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_OperatingModeRequest - 0x00000000 0xe8 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_Sleep - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_WakeUp - 0x00000000 0x38 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 0x64 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_ClearFlag - 0x00000000 0x34 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_GetITStatus - 0x00000000 0xe4 THUMB Debug/../../obj/stm32f4xx_can.o - .text.CAN_ClearITPendingBit - 0x00000000 0x80 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_frame 0x00000000 0x1dc THUMB Debug/../../obj/stm32f4xx_can.o - .debug_info 0x00000000 0xd18 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_abbrev 0x00000000 0x283 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_loc 0x00000000 0xc55 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_aranges - 0x00000000 0xd8 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_ranges 0x00000000 0xc8 THUMB Debug/../../obj/stm32f4xx_can.o - .debug_line 0x00000000 0x5fc THUMB Debug/../../obj/stm32f4xx_can.o - .debug_str 0x00000000 0x7a9 THUMB Debug/../../obj/stm32f4xx_can.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/stm32f4xx_can.o - .ARM.attributes - 0x00000000 0x33 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 0x50 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 0xaf 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 0x225 THUMB Debug/../../obj/stm32f4xx_crc.o - .debug_str 0x00000000 0x29f 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 0x18 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_Init - 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_StructInit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_KeyInit - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_KeyStructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_IVInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_IVStructInit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_PhaseConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_FIFOFlush - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_Cmd - 0x00000000 0x1c 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 0x104 THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_RestoreContext - 0x00000000 0x8c THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_DMACmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_cryp.o - .text.CRYP_ITConfig - 0x00000000 0x1c 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 0x24 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_frame 0x00000000 0x178 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_info 0x00000000 0x972 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_abbrev 0x00000000 0x1ed THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_loc 0x00000000 0x448 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 0x404 THUMB Debug/../../obj/stm32f4xx_cryp.o - .debug_str 0x00000000 0x71b 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 0x1cc THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text.CRYP_AES_CBC - 0x00000000 0x1ec THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text.CRYP_AES_CTR - 0x00000000 0x194 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text.CRYP_AES_GCM - 0x00000000 0x480 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .text.CRYP_AES_CCM - 0x00000000 0x6e8 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_frame 0x00000000 0xf8 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_info 0x00000000 0x2ce6 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_abbrev 0x00000000 0x2b9 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_loc 0x00000000 0x3733 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 0xda2 THUMB Debug/../../obj/stm32f4xx_cryp_aes.o - .debug_str 0x00000000 0x5ce 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 0xc8 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .text.CRYP_DES_CBC - 0x00000000 0xe0 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_info 0x00000000 0x7bb THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_abbrev 0x00000000 0x1f7 THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_loc 0x00000000 0x5f6 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 0x30c THUMB Debug/../../obj/stm32f4xx_cryp_des.o - .debug_str 0x00000000 0x4cd 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 0xdc THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .text.CRYP_TDES_CBC - 0x00000000 0xf8 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_info 0x00000000 0x93c THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_abbrev 0x00000000 0x208 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_loc 0x00000000 0x7f6 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 0x369 THUMB Debug/../../obj/stm32f4xx_cryp_tdes.o - .debug_str 0x00000000 0x4d3 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 0x38 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_StructInit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_Cmd 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_SoftwareTriggerCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_DualSoftwareTriggerCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_WaveGenerationCmd - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_SetChannel1Data - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_SetChannel2Data - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_SetDualChannelData - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_GetDataOutputValue - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_DMACmd - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_ITConfig - 0x00000000 0x20 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 0x20 THUMB Debug/../../obj/stm32f4xx_dac.o - .text.DAC_ClearITPendingBit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_frame 0x00000000 0x154 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_info 0x00000000 0x6e2 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_abbrev 0x00000000 0x20a THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_loc 0x00000000 0x5ff 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 0x384 THUMB Debug/../../obj/stm32f4xx_dac.o - .debug_str 0x00000000 0x4be 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 0x10 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .text.DBGMCU_Config - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .text.DBGMCU_APB1PeriphConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .text.DBGMCU_APB2PeriphConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_frame 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_info 0x00000000 0x1de THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_abbrev 0x00000000 0xe6 THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_loc 0x00000000 0xae 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 0x1fc THUMB Debug/../../obj/stm32f4xx_dbgmcu.o - .debug_str 0x00000000 0x2a9 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 0x1c THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_Init - 0x00000000 0x48 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 0x1c THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_SetEmbeddedSynchroCodes - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_JPEGCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_Cmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_CaptureCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_ReadData - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_ITConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_dcmi.o - .text.DCMI_GetFlagStatus - 0x00000000 0x28 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 0x128 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_info 0x00000000 0x59d THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_abbrev 0x00000000 0x1b8 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_loc 0x00000000 0x367 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 0x353 THUMB Debug/../../obj/stm32f4xx_dcmi.o - .debug_str 0x00000000 0x52d 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 0x1ec THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_Init - 0x00000000 0x88 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_StructInit - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_Cmd 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_PeriphIncOffsetSizeConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_FlowControllerConfig - 0x00000000 0x14 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 0x14 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 0x40 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_GetITStatus - 0x00000000 0x58 THUMB Debug/../../obj/stm32f4xx_dma.o - .text.DMA_ClearITPendingBit - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_frame 0x00000000 0x194 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 0x6f9 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 0x442 THUMB Debug/../../obj/stm32f4xx_dma.o - .debug_str 0x00000000 0x5a0 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 0x7c THUMB Debug/../../obj/stm32f4xx_exti.o - .text.EXTI_StructInit - 0x00000000 0x10 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 0xa0 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 0x267 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 0x2b1 THUMB Debug/../../obj/stm32f4xx_exti.o - .debug_str 0x00000000 0x3c2 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 0x1c THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_InstructionCacheCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_DataCacheCmd - 0x00000000 0x1c 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_OB_Unlock - 0x00000000 0x24 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 0x1c THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_GetFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_Launch - 0x00000000 0x14 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 0x30 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_OB_WRPConfig - 0x00000000 0x30 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_ProgramDoubleWord - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_flash.o - .text.FLASH_EraseAllSectors - 0x00000000 0x4 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 0xd8 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NORSRAMStructInit - 0x00000000 0x50 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NORSRAMCmd - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDDeInit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDInit - 0x00000000 0x94 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDStructInit - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDCmd - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_NANDECCCmd - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_GetECC - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_PCCARDDeInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_PCCARDInit - 0x00000000 0x64 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_PCCARDStructInit - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_PCCARDCmd - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_ITConfig - 0x00000000 0x70 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_GetFlagStatus - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_ClearFlag - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_GetITStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .text.FSMC_ClearITPendingBit - 0x00000000 0x3c THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_frame 0x00000000 0x1bc THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_info 0x00000000 0x9b4 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_abbrev 0x00000000 0x1a1 THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_loc 0x00000000 0x877 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 0x4bf THUMB Debug/../../obj/stm32f4xx_fsmc.o - .debug_str 0x00000000 0x7e8 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 0x128 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_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_SetBits - 0x00000000 0x4 THUMB Debug/../../obj/stm32f4xx_gpio.o - .text.GPIO_ResetBits - 0x00000000 0x4 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 0x18 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_Init - 0x00000000 0x50 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_StructInit - 0x00000000 0xc 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 0x3c THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_RestoreContext - 0x00000000 0x44 THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_AutoStartDigest - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_DMACmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_hash.o - .text.HASH_ITConfig - 0x00000000 0x1c 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 0x160 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_info 0x00000000 0x633 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_abbrev 0x00000000 0x248 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_loc 0x00000000 0x2fc 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 0x396 THUMB Debug/../../obj/stm32f4xx_hash.o - .debug_str 0x00000000 0x4c6 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 0xc0 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .text.HMAC_MD5 - 0x00000000 0x1d0 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_info 0x00000000 0x721 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_abbrev 0x00000000 0x222 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_loc 0x00000000 0x584 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_aranges - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_ranges 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_line 0x00000000 0x3dd THUMB Debug/../../obj/stm32f4xx_hash_md5.o - .debug_str 0x00000000 0x3c3 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 0xc4 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .text.HMAC_SHA1 - 0x00000000 0x1d4 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_frame 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_info 0x00000000 0x781 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_abbrev 0x00000000 0x222 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_loc 0x00000000 0x5fc THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_aranges - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_ranges 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_line 0x00000000 0x3f4 THUMB Debug/../../obj/stm32f4xx_hash_sha1.o - .debug_str 0x00000000 0x3c8 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 0x70 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_Init - 0x00000000 0xe8 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_StructInit - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_Cmd 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_AnalogFilterCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_DigitalFilterConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GenerateSTART - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GenerateSTOP - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_Send7bitAddress - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_AcknowledgeConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_OwnAddress2Config - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_DualAddressCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GeneralCallCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_SoftwareResetCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_StretchClockCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_FastModeDutyCycleConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_NACKPositionConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_SMBusAlertConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ARPCmd - 0x00000000 0x1c 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 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_PECPositionConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_CalculatePEC - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GetPEC - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_DMACmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_DMALastTransferCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ReadRegister - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ITConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_CheckEvent - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GetLastEvent - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GetFlagStatus - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ClearFlag - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_GetITStatus - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_i2c.o - .text.I2C_ClearITPendingBit - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_frame 0x00000000 0x274 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_info 0x00000000 0xd28 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_abbrev 0x00000000 0x1f3 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_loc 0x00000000 0xc83 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 0x554 THUMB Debug/../../obj/stm32f4xx_i2c.o - .debug_str 0x00000000 0x73c 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 0x204 THUMB Debug/../../obj/stm32f4xx_iwdg.o - .debug_str 0x00000000 0x2c0 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 0x44 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 0xe8 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_info 0x00000000 0x584 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_abbrev 0x00000000 0x1f1 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_loc 0x00000000 0x1fb 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 0x302 THUMB Debug/../../obj/stm32f4xx_pwr.o - .debug_str 0x00000000 0x3f3 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 0x48 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_HSEConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_WaitForHSEStartUp - 0x00000000 0x40 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 0x20 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_LSICmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_PLLConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_PLLCmd - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_PLLI2SConfig - 0x00000000 0x14 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 0x38 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_AHB3PeriphClockCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB2PeriphResetCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB3PeriphResetCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_APB1PeriphResetCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB1PeriphClockLPModeCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB2PeriphClockLPModeCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_AHB3PeriphClockLPModeCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_APB1PeriphClockLPModeCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_APB2PeriphClockLPModeCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_ITConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rcc.o - .text.RCC_GetFlagStatus - 0x00000000 0x30 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 0x18 THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_Cmd 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_GetRandomNumber - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rng.o - .text.RNG_ITConfig - 0x00000000 0x1c 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 0x10 THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_frame 0x00000000 0x9c THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_info 0x00000000 0x2d3 THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_abbrev 0x00000000 0x17e THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_loc 0x00000000 0x17a 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 0x27a THUMB Debug/../../obj/stm32f4xx_rng.o - .debug_str 0x00000000 0x2ef 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_StructInit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WriteProtectionCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_EnterInitMode - 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_Init - 0x00000000 0x54 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ExitInitMode - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WaitForSynchro - 0x00000000 0x4c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_DeInit - 0x00000000 0x9c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_RefClockCmd - 0x00000000 0x4c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_BypassShadowCmd - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SetTime - 0x00000000 0x16c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TimeStructInit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetTime - 0x00000000 0x64 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetSubSecond - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SetDate - 0x00000000 0x158 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_DateStructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetDate - 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SetAlarm - 0x00000000 0x1b8 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_AlarmStructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetAlarm - 0x00000000 0xa8 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_AlarmCmd - 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_AlarmSubSecondConfig - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetAlarmSubSecond - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WakeUpClockConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SetWakeUpCounter - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetWakeUpCounter - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WakeUpCmd - 0x00000000 0x60 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_DayLightSavingConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetStoreOperation - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_OutputConfig - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_CoarseCalibConfig - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_CoarseCalibCmd - 0x00000000 0x4c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_CalibOutputCmd - 0x00000000 0x30 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_CalibOutputConfig - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_SmoothCalibConfig - 0x00000000 0x68 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TimeStampCmd - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetTimeStamp - 0x00000000 0xb8 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_GetTimeStampSubSecond - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperTriggerConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperCmd - 0x00000000 0x1c 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 0x1c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_TamperPullUpCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_WriteBackupRegister - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ReadBackupRegister - 0x00000000 0x20 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 0x78 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ITConfig - 0x00000000 0x4c 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 0x34 THUMB Debug/../../obj/stm32f4xx_rtc.o - .text.RTC_ClearITPendingBit - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_frame 0x00000000 0x4b0 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_info 0x00000000 0x17c3 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_abbrev 0x00000000 0x290 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_loc 0x00000000 0x1dc8 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_aranges - 0x00000000 0x1d0 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_ranges 0x00000000 0x750 THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_line 0x00000000 0xa2d THUMB Debug/../../obj/stm32f4xx_rtc.o - .debug_str 0x00000000 0xba7 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_StructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_CmdStructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_DataStructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_sdio.o - .text.SDIO_GetDataCounter - 0x00000000 0xc 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 0x14 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 0x1c 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 - .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 0xdc THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_Init - 0x00000000 0x54 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.I2S_Init - 0x00000000 0xec THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_StructInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.I2S_StructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_Cmd 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_spi.o - .text.I2S_Cmd 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_DataSizeConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_BiDirectionalLineConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_NSSInternalSoftwareConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_SSOutputCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_TIModeCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_spi.o - .text.I2S_FullDuplexConfig - 0x00000000 0x48 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 0x1c 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 0x14 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_ITConfig - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_GetFlagStatus - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_ClearFlag - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_GetITStatus - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_spi.o - .text.SPI_I2S_ClearITPendingBit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_frame 0x00000000 0x1f4 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_info 0x00000000 0xd37 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_abbrev 0x00000000 0x214 THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_loc 0x00000000 0x8c6 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 0x4cd THUMB Debug/../../obj/stm32f4xx_spi.o - .debug_str 0x00000000 0x70c 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 0x38 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.TIM_DeInit - 0x00000000 0x1d4 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_TimeBaseInit - 0x00000000 0xb0 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 0x10 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 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_UpdateRequestConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ARRPreloadConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectOnePulseMode - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetClockDivision - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_Cmd 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1Init - 0x00000000 0x94 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 0x74 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OCStructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectOCxM - 0x00000000 0x50 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 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ForcedOC2Config - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ForcedOC3Config - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ForcedOC4Config - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1PreloadConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC2PreloadConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC3PreloadConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC4PreloadConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1FastConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC2FastConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC3FastConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC4FastConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearOC1Ref - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearOC2Ref - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearOC3Ref - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearOC4Ref - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1PolarityConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC1NPolarityConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC2PolarityConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC2NPolarityConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC3PolarityConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC3NPolarityConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_OC4PolarityConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_CCxCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_CCxNCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ICInit - 0x00000000 0x16c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ICStructInit - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_PWMIConfig - 0x00000000 0x164 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 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetIC2Prescaler - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetIC3Prescaler - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SetIC4Prescaler - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_BDTRConfig - 0x00000000 0x2c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_BDTRStructInit - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_CtrlPWMOutputs - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectCOM - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_CCPreloadControl - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ITConfig - 0x00000000 0x14 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 0x8 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_GetITStatus - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ClearITPendingBit - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_DMAConfig - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_DMACmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectCCDMA - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_InternalClockConfig - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ITRxExternalClockConfig - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_TIxExternalClockConfig - 0x00000000 0x90 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ETRClockMode1Config - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ETRClockMode2Config - 0x00000000 0x20 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectInputTrigger - 0x00000000 0x10 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectOutputTrigger - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectSlaveMode - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectMasterSlaveMode - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_ETRConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_EncoderInterfaceConfig - 0x00000000 0x40 THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_SelectHallSensor - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_tim.o - .text.TIM_RemapConfig - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_frame 0x00000000 0x694 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_info 0x00000000 0x26e4 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_abbrev 0x00000000 0x2ad THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_loc 0x00000000 0x26ee THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_aranges - 0x00000000 0x2d8 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_ranges 0x00000000 0x3c8 THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_line 0x00000000 0xc3e THUMB Debug/../../obj/stm32f4xx_tim.o - .debug_str 0x00000000 0xe52 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 0x11c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_StructInit - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ClockInit - 0x00000000 0x28 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ClockStructInit - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SetPrescaler - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_OverSampling8Cmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_OneBitMethodCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SetAddress - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ReceiverWakeUpCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_WakeUpConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_LINBreakDetectLengthConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_LINCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SendBreak - 0x00000000 0xc THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_HalfDuplexCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SetGuardTime - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SmartCardCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_SmartCardNACKCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_IrDAConfig - 0x00000000 0x18 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_IrDACmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_DMACmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ITConfig - 0x00000000 0x38 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ClearFlag - 0x00000000 0x8 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_GetITStatus - 0x00000000 0x48 THUMB Debug/../../obj/stm32f4xx_usart.o - .text.USART_ClearITPendingBit - 0x00000000 0x10 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 0x2a6 THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_abbrev 0x00000000 0x17a 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 0x27a THUMB Debug/../../obj/stm32f4xx_wwdg.o - .debug_str 0x00000000 0x2fd 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 0xac THUMB Debug/../../obj/stm32_eth.o - .text.ETH_HandleRxPkt - 0x00000000 0xb4 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetRxPktSize - 0x00000000 0x24 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DropRxPkt - 0x00000000 0x3c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_PHYLoopBackCmd - 0x00000000 0x2c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MACTransmissionCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MACReceptionCmd - 0x00000000 0x1c 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 0x1c 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 0x1c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MACAddressConfig - 0x00000000 0x38 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetMACAddress - 0x00000000 0x30 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MACAddressPerfectFilterCmd - 0x00000000 0x1c 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 0x4c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescRingInit - 0x00000000 0xd4 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 0x14 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 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescEndOfRingCmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescSecondAddressChainedCmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescShortFramePaddingCmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescTimeStampCmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATxDescBufferSizeConfig - 0x00000000 0xc THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMARxDescChainInit - 0x00000000 0x54 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMARxDescRingInit - 0x00000000 0x120 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_DMARxDescReceiveITConfig - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMARxDescEndOfRingCmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMARxDescSecondAddressChainedCmd - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetDMARxDescBufferSize - 0x00000000 0x10 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_FlushTransmitFIFO - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetFlushTransmitFIFOStatus - 0x00000000 0x10 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMATransmissionCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMAReceptionCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMAITConfig - 0x00000000 0x1c 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 0x1c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetPMTFlagStatus - 0x00000000 0x14 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_WakeUpFrameDetectionCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MagicPacketDetectionCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_PowerDownCmd - 0x00000000 0x1c THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCCounterFreezeCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCResetOnReadCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCCounterRolloverCmd - 0x00000000 0x24 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCCountersReset - 0x00000000 0x18 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_MMCITConfig - 0x00000000 0x48 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_GetMMCITStatus - 0x00000000 0x34 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 0x24 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_PTPTimeStampCmd - 0x00000000 0x24 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 0x70 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_DMAPTPRxDescChainInit - 0x00000000 0x78 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_HandlePTPTxPkt - 0x00000000 0xf8 THUMB Debug/../../obj/stm32_eth.o - .text.ETH_HandlePTPRxPkt - 0x00000000 0xe4 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 0x4 THUMB Debug/../../obj/clock-arch.o - .debug_frame 0x00000000 0x20 THUMB Debug/../../obj/clock-arch.o - .debug_info 0x00000000 0xc3 THUMB Debug/../../obj/clock-arch.o - .debug_abbrev 0x00000000 0x76 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 0x10a THUMB Debug/../../obj/clock-arch.o - .debug_str 0x00000000 0x1d5 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/usbd_core.o - .data 0x00000000 0x0 THUMB Debug/../../obj/usbd_core.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/usbd_core.o - .text.USBD_DeInit - 0x00000000 0x4 THUMB Debug/../../obj/usbd_core.o - .text 0x00000000 0x0 THUMB Debug/../../obj/usbd_ioreq.o - .data 0x00000000 0x0 THUMB Debug/../../obj/usbd_ioreq.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/usbd_ioreq.o - .text.USBD_CtlPrepareRx - 0x00000000 0x20 THUMB Debug/../../obj/usbd_ioreq.o - .text.USBD_GetRxCount - 0x00000000 0x10 THUMB Debug/../../obj/usbd_ioreq.o - .text 0x00000000 0x0 THUMB Debug/../../obj/usbd_req.o - .data 0x00000000 0x0 THUMB Debug/../../obj/usbd_req.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/usbd_req.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 - .text.USB_OTG_GetMode - 0x00000000 0xc THUMB Debug/../../obj/usb_core.o - .text.USB_OTG_IsHostMode - 0x00000000 0xc THUMB Debug/../../obj/usb_core.o - .text.USB_OTG_ReadOtgItr - 0x00000000 0x8 THUMB Debug/../../obj/usb_core.o - .text.USB_OTG_InitDevSpeed - 0x00000000 0xc THUMB Debug/../../obj/usb_core.o - .text.USB_OTG_ActiveRemoteWakeup - 0x00000000 0x44 THUMB Debug/../../obj/usb_core.o - .text.USB_OTG_UngateClock - 0x00000000 0x20 THUMB Debug/../../obj/usb_core.o - .text.USB_OTG_StopDevice - 0x00000000 0x48 THUMB Debug/../../obj/usb_core.o - .text.USB_OTG_GetEPStatus - 0x00000000 0x5c THUMB Debug/../../obj/usb_core.o - .text.USB_OTG_SetEPStatus - 0x00000000 0x7c THUMB Debug/../../obj/usb_core.o - .text 0x00000000 0x0 THUMB Debug/../../obj/usb_dcd.o - .data 0x00000000 0x0 THUMB Debug/../../obj/usb_dcd.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_dcd.o - .text.DCD_EP_Flush - 0x00000000 0x1c THUMB Debug/../../obj/usb_dcd.o - .text.DCD_DevConnect - 0x00000000 0x10 THUMB Debug/../../obj/usb_dcd.o - .text.DCD_GetEPStatus - 0x00000000 0x28 THUMB Debug/../../obj/usb_dcd.o - .text.DCD_SetEPStatus - 0x00000000 0x28 THUMB Debug/../../obj/usb_dcd.o - .text 0x00000000 0x0 THUMB Debug/../../obj/usb_dcd_int.o - .data 0x00000000 0x0 THUMB Debug/../../obj/usb_dcd_int.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_dcd_int.o - .text 0x00000000 0x0 THUMB Debug/../../obj/hooks.o - .data 0x00000000 0x0 THUMB Debug/../../obj/hooks.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/hooks.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/usb_bsp.o - .data 0x00000000 0x0 THUMB Debug/../../obj/usb_bsp.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/usb_bsp.o - .text 0x00000000 0x0 THUMB Debug/../../obj/usbd_bulk.o - .data 0x00000000 0x0 THUMB Debug/../../obj/usbd_bulk.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/usbd_bulk.o - .text 0x00000000 0x0 THUMB Debug/../../obj/usbd_desc.o - .data 0x00000000 0x0 THUMB Debug/../../obj/usbd_desc.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/usbd_desc.o - .data.USBD_DeviceQualifierDesc - 0x00000000 0xc THUMB Debug/../../obj/usbd_desc.o - .text 0x00000000 0x0 THUMB Debug/../../obj/usbd_usr.o - .data 0x00000000 0x0 THUMB Debug/../../obj/usbd_usr.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/usbd_usr.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 - .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/vectors.o - .data 0x00000000 0x0 THUMB Debug/../../obj/vectors.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/vectors.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 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 - .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 0x4 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 - .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 0x00000000 0x0 THUMB Debug/../../obj/assert.o - .data 0x00000000 0x0 THUMB Debug/../../obj/assert.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/assert.o - .text 0x00000000 0x0 THUMB Debug/../../obj/backdoor.o - .data 0x00000000 0x0 THUMB Debug/../../obj/backdoor.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/backdoor.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/com.o - .data 0x00000000 0x0 THUMB Debug/../../obj/com.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/com.o - .text 0x00000000 0x0 THUMB Debug/../../obj/cop.o - .data 0x00000000 0x0 THUMB Debug/../../obj/cop.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/cop.o - .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 THUMB Debug/../../obj/file.o - .data 0x00000000 0x0 THUMB Debug/../../obj/file.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/file.o - .text 0x00000000 0x0 THUMB Debug/../../obj/ff.o - .data 0x00000000 0x0 THUMB Debug/../../obj/ff.o - .bss 0x00000000 0x0 THUMB Debug/../../obj/ff.o - .text.f_opendir - 0x00000000 0x90 THUMB Debug/../../obj/ff.o - .text.f_closedir - 0x00000000 0x14 THUMB Debug/../../obj/ff.o - .text.f_readdir - 0x00000000 0x64 THUMB Debug/../../obj/ff.o - .text.f_getfree - 0x00000000 0x1f4 THUMB Debug/../../obj/ff.o - .text.f_truncate - 0x00000000 0xc4 THUMB Debug/../../obj/ff.o - .text.f_mkdir 0x00000000 0x228 THUMB Debug/../../obj/ff.o - .text.f_rename - 0x00000000 0x130 THUMB Debug/../../obj/ff.o - .text.f_putc 0x00000000 0x3c THUMB Debug/../../obj/ff.o - .text.f_printf - 0x00000000 0x478 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 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_chksum - 0x00000000 0x18 THUMB Debug/../../obj/uip.o - .text.uip_udpchksum - 0x00000000 0x8 THUMB Debug/../../obj/uip.o - .text.uip_connect - 0x00000000 0xb4 THUMB Debug/../../obj/uip.o - .text.uip_unlisten - 0x00000000 0x24 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 0x30 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 0x135 THUMB Debug/../../obj/uip_timer.o - .debug_str 0x00000000 0x19f 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 0x24 THUMB Debug/../../obj/uip-fw.o - .text.uip_fw_output - 0x00000000 0xb4 THUMB Debug/../../obj/uip-fw.o - .text.uip_fw_forward - 0x00000000 0x164 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 0x1c 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 0x98 THUMB Debug/../../obj/uip-fw.o - .debug_info 0x00000000 0x725 THUMB Debug/../../obj/uip-fw.o - .debug_abbrev 0x00000000 0x28c THUMB Debug/../../obj/uip-fw.o - .debug_loc 0x00000000 0x181 THUMB Debug/../../obj/uip-fw.o - .debug_aranges - 0x00000000 0x48 THUMB Debug/../../obj/uip-fw.o - .debug_ranges 0x00000000 0x108 THUMB Debug/../../obj/uip-fw.o - .debug_line 0x00000000 0x285 THUMB Debug/../../obj/uip-fw.o - .debug_str 0x00000000 0x3ec 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 0x208 THUMB Debug/../../obj/uiplib.o - .debug_frame 0x00000000 0x2c THUMB Debug/../../obj/uiplib.o - .debug_info 0x00000000 0xf6 THUMB Debug/../../obj/uiplib.o - .debug_abbrev 0x00000000 0x6f THUMB Debug/../../obj/uiplib.o - .debug_loc 0x00000000 0x7b3 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 0x1bb THUMB Debug/../../obj/uiplib.o - .debug_str 0x00000000 0x1e2 THUMB Debug/../../obj/uiplib.o - .comment 0x00000000 0x4f THUMB Debug/../../obj/uiplib.o - .ARM.attributes - 0x00000000 0x33 THUMB Debug/../../obj/uiplib.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 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .data 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .bss 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.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.o) - .text.libc.twodigit - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.month_name - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.checked_day_name - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.put_ch - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.put_str - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.put_nstr - 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.put_digit - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.put_twodigit - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.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_v7em_t_le_eabi.a(libc2.o) - .text.libc.put_twodigit2 - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.put_formatted - 0x00000000 0x3ec C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.__getc - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.__RAL_pow10 - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.__print_padding - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.__pre_padding - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.__xlltoa - 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.asctime_r - 0x00000000 0xf8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.asctime - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.bsearch - 0x00000000 0x68 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.buddy_alloc - 0x00000000 0x1e8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.buddy_free - 0x00000000 0xf0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.buddy_heap_init - 0x00000000 0x138 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.__strtoull - 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.__strtoul - 0x00000000 0xe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.tolower - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.itoa - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.linked_heap_alloc - 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.lldiv - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.setlocale - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.ltoa - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.memccpy - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.memchr - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.memcmp - 0x00000000 0x88 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.memmove - 0x00000000 0xa8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.qsort - 0x00000000 0x488 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.strcasecmp - 0x00000000 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strcasestr - 0x00000000 0x78 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strcat - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.strcspn - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.strftime - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strncasecmp - 0x00000000 0xd0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strncasestr - 0x00000000 0xbc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strncat - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strlcat - 0x00000000 0x98 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strnchr - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strncmp - 0x00000000 0x8c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strncpy - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strlcpy - 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strnlen - 0x00000000 0x70 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.strrchr - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.strspn - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strstr - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strtod - 0x00000000 0x2e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strtof - 0x00000000 0x24c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strtok - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.strtok_r - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.atol - 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.atof - 0x00000000 0x1cc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.strtoull - 0x00000000 0xb0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.localtime_r - 0x00000000 0x188 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.checktm - 0x00000000 0x23c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.mktime - 0x00000000 0x3b4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.gettimeofday - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.settimeofday - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.ultoa - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.utoa - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcscat - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcscmp - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcscpy - 0x00000000 0x14 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcscspn - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcsncat - 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcsnchr - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcsncmp - 0x00000000 0x94 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcsncpy - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcsnlen - 0x00000000 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcsnstr - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcsrchr - 0x00000000 0x58 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcsspn - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcsstr - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcstok - 0x00000000 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wcstok_r - 0x00000000 0x90 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wmemcpy - 0x00000000 0x64 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wmemccpy - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .text.libc.wmemmove - 0x00000000 0xb8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wmemcmp - 0x00000000 0x7c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wmemchr - 0x00000000 0x5c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .text.libc.wmemset - 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .data.libc.heap - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.__hex_lc - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.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_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.year_lengths - 0x00000000 0x8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.mon_name - 0x00000000 0x30 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .bss.libc.__atexitfns - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .bss.libc.__format_extender - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.invalid - 0x00000000 0xc C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.str1.4 - 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .data.libc.__RAL_rand_next - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.__RAL_mon_lengths - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .bss.libc.last.5990 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .bss.libc.last.5518 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.day_name - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.month_names - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .bss.libc.asctime_buf - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.__ctype - 0x00000000 0x104 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.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_v7em_t_le_eabi.a(libc2.o) - .bss.libc.atexitfn_count - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc2.o) - .data.libc._lconv - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.__hex_uc - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .bss.libc._tm 0x00000000 0x24 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) - .rodata.libc.day_names - 0x00000000 0x20 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.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.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc_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(libc_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(libc_asm.o) - .text.libc._call_via_r4 - 0x00000000 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_t_le_eabi.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_v7em_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_v7em_t_le_eabi.a(libc_asm.o) - .debug_frame 0x00000000 0x260 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc_asm.o) - .text.libc.__int64_div - 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_t_le_eabi.a(libc_asm.o) - .text.libc.__int64_mod - 0x00000000 0x4c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_t_le_eabi.a(libc_asm.o) - .text.libc.__aeabi_ldivmod - 0x00000000 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc_asm.o) - .text.libc.__int32_div - 0x00000000 0x320 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc_asm.o) - .text.libc.__aeabi_uidivmod - 0x00000000 0x38 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc_asm.o) - .text.libc.__aeabi_idivmod - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libc_asm.o) - .ARM.attributes - 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc_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) - .text.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .data.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .bss.libc 0x00000000 0x0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_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_v7em_t_le_eabi.a(libm_asm.o) - .debug_frame 0x00000000 0x600 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float32_to_int32 - 0x00000000 0x44 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float32_to_int64 - 0x00000000 0x80 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float32_to_uint32 - 0x00000000 0x2c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float32_to_uint64 - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float64_to_int32 - 0x00000000 0x54 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float64_to_int64 - 0x00000000 0x84 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float64_to_uint32 - 0x00000000 0x34 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float64_to_uint64 - 0x00000000 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_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_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float64_to_float32 - 0x00000000 0x78 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float32_add - 0x00000000 0x140 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float32_mul - 0x00000000 0xe4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float32_div - 0x00000000 0x1f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float32_cmp - 0x00000000 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__aeabi_fcmpeq - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__aeabi_fcmplt - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__aeabi_fcmple - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__aeabi_fcmpge - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_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_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float64_add - 0x00000000 0x2b8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float64_mul - 0x00000000 0x180 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float64_div - 0x00000000 0x260 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__float64_cmp - 0x00000000 0x6c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__aeabi_dcmpeq - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__aeabi_dcmplt - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__aeabi_dcmple - 0x00000000 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__aeabi_dcmpge - 0x00000000 0x1c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - .text.libc.__aeabi_dcmpgt - 0x00000000 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_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_v7em_t_le_eabi.a(libm_asm.o) - .ARM.attributes - 0x00000000 0x1e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libm_v7em_t_le_eabi.a(libm_asm.o) - -Memory Configuration - -Name Origin Length Attributes -UNPLACED_SECTIONS 0xffffffff 0x00000000 xw -FLASH 0x08000000 0x0000c000 xr -DATA_SRAM 0x10000000 0x00010000 xw -SYSTEM 0x1fff0000 0x00007a10 xw -OPTION 0x1fffc000 0x00000008 xw -RAM 0x20000000 0x00006000 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 - - 0x0800a3b4 __do_debug_operation = __do_debug_operation_mempoll - 0x08000000 __FLASH_segment_start__ = 0x8000000 - 0x0800c000 __FLASH_segment_end__ = 0x800c000 - 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 - 0x20006000 __RAM_segment_end__ = 0x20006000 - 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) - 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 c8feab48..00000000 Binary files a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Boot/lib/stdperiphlib/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf and /dev/null differ 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 f73ec3bc..00000000 Binary files a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/bin/demoprog_olimex_stm32e407.elf and /dev/null differ 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 c8feab48..00000000 Binary files a/Target/Demo/ARMCM4_STM32F4_Olimex_STM32E407_Crossworks/Prog/lib/stdperiphlib/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf and /dev/null differ 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. -*/ - -