Refs #139. Updated Rowley Crossworks projects to version 3.7.6 of the tool.

git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@224 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
Frank Voorburg 2017-05-03 10:57:12 +00:00
parent 34030310d1
commit 4562bc4280
303 changed files with 25167 additions and 174027 deletions

View File

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

View File

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

View File

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

View File

@ -1,7 +0,0 @@
/**
\defgroup Boot_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks Bootloader
\brief Bootloader.
\ingroup ARM7_LPC2000_Olimex_LPC_L2294_Crossworks
*/

View File

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

View File

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

View File

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

View File

@ -1,67 +0,0 @@
<!DOCTYPE CrossStudio_Project_File>
<solution Name="lpc2294_crossworks" target="8" version="2">
<project Name="openblt_olimex_lpc_l2294_20mhz">
<configuration Name="Common" arm_library_optimization="Fast" arm_simulator_memory_simulation_filename="$(PackagesDir)/targets/Philips_LPC210X/LPC2000SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="LPC22;0x20000;0x4000;0x400000;0x100000;0x0;0x0" arm_target_loader_parameter="20000000" arm_use_gcc_libraries="No" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_preprocessor_definitions="__TARGET_PROCESSOR=LPC2294;OSCILLATOR_CLOCK_FREQUENCY=20000000" c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../../../../Source;$(ProjectDir)/../../../../Source/ARM7_LPC2000;$(ProjectDir)/../../../../Source/ARM7_LPC2000/Crossworks" gcc_entry_point="Reset_Handler" gcc_optimization_level="Level 1" gcc_strip_symbols="No" link_include_standard_libraries="Yes" link_include_startup_code="No" linker_DebugIO_enabled="No" linker_additional_files="$(PackagesDir)/lib/liblpc2000$(LibExt)$(LIB)" linker_additional_options="" linker_keep_symbols="_vectors;EntryFromProg" linker_output_format="srec" linker_printf_enabled="No" linker_printf_width_precision_supported="No" linker_scanf_enabled="No" project_directory="" project_type="Executable"/>
<configuration Name="RAM" target_reset_script="RAMReset()"/>
<configuration Name="Flash" arm_target_flash_loader_file_path="$(PackagesDir)/targets/Olimex_LPC_E2294/Release/Loader_rpc.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" target_reset_script="FLASHReset()"/>
<folder Name="Source Files">
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc"/>
<folder Name="Demo">
<folder Name="Boot" file_name="">
<file file_name="../hooks.c"/>
<file file_name="../lpc2294.h"/>
<file file_name="../main.c"/>
<file file_name="../extflash.c"/>
<file file_name="../extflash.h"/>
<file file_name="../blt_conf.h"/>
</folder>
</folder>
<folder Name="Source" file_name="">
<folder Name="ARM7_LPC2000">
<folder Name="Crossworks" file_name="">
<file file_name="../../../../Source/ARM7_LPC2000/Crossworks/cstart.s"/>
<file file_name="../../../../Source/ARM7_LPC2000/Crossworks/flash.c"/>
<file file_name="../../../../Source/ARM7_LPC2000/Crossworks/flash.h"/>
<file file_name="../../../../Source/ARM7_LPC2000/Crossworks/cpu_comp.c"/>
</folder>
<file file_name="../../../../Source/ARM7_LPC2000/can.c"/>
<file file_name="../../../../Source/ARM7_LPC2000/cpu.c"/>
<file file_name="../../../../Source/ARM7_LPC2000/nvm.c"/>
<file file_name="../../../../Source/ARM7_LPC2000/timer.c"/>
<file file_name="../../../../Source/ARM7_LPC2000/types.h"/>
<file file_name="../../../../Source/ARM7_LPC2000/uart.c"/>
</folder>
<file file_name="../../../../Source/assert.c"/>
<file file_name="../../../../Source/assert.h"/>
<file file_name="../../../../Source/backdoor.c"/>
<file file_name="../../../../Source/backdoor.h"/>
<file file_name="../../../../Source/boot.c"/>
<file file_name="../../../../Source/boot.h"/>
<file file_name="../../../../Source/com.c"/>
<file file_name="../../../../Source/com.h"/>
<file file_name="../../../../Source/cop.c"/>
<file file_name="../../../../Source/cop.h"/>
<file file_name="../../../../Source/plausibility.h"/>
<file file_name="../../../../Source/xcp.c"/>
<file file_name="../../../../Source/xcp.h"/>
<file file_name="../../../../Source/can.h"/>
<file file_name="../../../../Source/cpu.h"/>
<file file_name="../../../../Source/nvm.h"/>
<file file_name="../../../../Source/timer.h"/>
<file file_name="../../../../Source/uart.h"/>
</folder>
</folder>
<folder Name="System Files">
<file file_name="$(PackagesDir)/targets/Olimex_LPC_E2294/LPC_E2294_Target.js">
<configuration Name="Common" file_type="Reset Script"/>
</file>
<file file_name="../../../../Source/ARM7_LPC2000/Crossworks/memory.x">
<configuration Name="Common" file_type="Linker Script"/>
</file>
</folder>
</project>
<configuration Name="ARM Flash Debug" inherited_configurations="ARM;Flash;Debug"/>
<configuration Name="ARM" Platform="ARM" arm_instruction_set="ARM" arm_library_instruction_set="ARM" c_preprocessor_definitions="__ARM" hidden="Yes"/>
<configuration Name="Flash" c_preprocessor_definitions="__FLASH_BUILD" hidden="Yes"/>
<configuration Name="Debug" build_debug_information="Yes" c_preprocessor_definitions="DEBUG" gcc_optimization_level="None" hidden="Yes" link_include_startup_code="No"/>
</solution>

View File

@ -1,57 +0,0 @@
<!DOCTYPE CrossStudio_for_ARM_Session_File>
<session>
<Bookmarks/>
<Breakpoints/>
<ExecutionProfileWindow/>
<Memory1>
<MemoryWindow autoEvaluate="0" addressText="0x80000200" numColumns="8" sizeText="32" dataSize="1" radix="16" name="openbtl_olimex_lpc_l2294_20mhz" addressSpace="" />
</Memory1>
<Memory2>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_lpc_l2294_20mhz" addressSpace="" />
</Memory2>
<Memory3>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_lpc_l2294_20mhz" addressSpace="" />
</Memory3>
<Memory4>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_lpc_l2294_20mhz" addressSpace="" />
</Memory4>
<Project>
<ProjectSessionItem path="lpc2294_crossworks" name="unnamed" />
<ProjectSessionItem path="lpc2294_crossworks;openblt_olimex_lpc_l2294_20mhz" name="unnamed" />
<ProjectSessionItem path="lpc2294_crossworks;openblt_olimex_lpc_l2294_20mhz;Source Files" name="unnamed" />
<ProjectSessionItem path="lpc2294_crossworks;openblt_olimex_lpc_l2294_20mhz;Source Files;Demo" name="unnamed" />
<ProjectSessionItem path="lpc2294_crossworks;openblt_olimex_lpc_l2294_20mhz;Source Files;Demo;Boot" name="unnamed" />
</Project>
<Register1>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_lpc_l2294_20mhz" />
</Register1>
<Register2>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_lpc_l2294_20mhz" />
</Register2>
<Register3>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_lpc_l2294_20mhz" />
</Register3>
<Register4>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_lpc_l2294_20mhz" />
</Register4>
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
<TraceWindow>
<Trace enabled="Yes" />
</TraceWindow>
<Watch1>
<Watches active="1" update="Never" />
</Watch1>
<Watch2>
<Watches active="0" update="Never" />
</Watch2>
<Watch3>
<Watches active="0" update="Never" />
</Watch3>
<Watch4>
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\main.c" y="53" path="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\main.c" left="0" selected="1" name="unnamed" top="45" />
</Files>
<ARMCrossStudioWindow activeProject="openbtl_olimex_lpc_l2294_20mhz" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Source\ARM7_LPC2000\Crossworks" fileDialogDefaultFilter="*.c" autoConnectCapabilities="388479" debugSearchPath="" buildConfiguration="ARM Flash Debug" />
</session>

View File

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

View File

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

View File

@ -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<sizeof(pll_dividers)/sizeof(pll_dividers[0]); p_sel_cnt++)
{
/* check f_cco with this pll divider */
f_cco = BOOT_CPU_SYSTEM_SPEED_KHZ * 2 * pll_dividers[p_sel_cnt];
if ( (f_cco >= 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 *************************************/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,40 +0,0 @@
<!DOCTYPE CrossStudio_Project_File>
<solution Name="lpc2294_crossworks" target="8" version="2">
<project Name="demoprog_olimex_lpc_l2294_20mhz">
<configuration Name="Common" arm_long_calls="Yes" arm_simulator_memory_simulation_filename="$(PackagesDir)/targets/Philips_LPC210X/LPC2000SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="LPC22;0x20000;0x4000;0x400000;0x100000;0x0;0x0" arm_target_loader_parameter="20000000" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_preprocessor_definitions="__TARGET_PROCESSOR=LPC2294;OSCILLATOR_CLOCK_FREQUENCY=20000000" c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../../../../Source;$(ProjectDir)/../../../../Source/ARM7_LPC2000;$(ProjectDir)/../../../../Source/ARM7_LPC2000/Crossworks" gcc_entry_point="_start" gcc_optimization_level="None" link_include_standard_libraries="Yes" link_include_startup_code="No" linker_DebugIO_enabled="Yes" linker_additional_files="$(PackagesDir)/lib/liblpc2000$(LibExt)$(LIB)" linker_additional_options="" linker_keep_symbols="_vectors;EntryFromProg;ExtFlashTestData" linker_output_format="srec" project_directory="" project_type="Executable"/>
<configuration Name="RAM" target_reset_script="RAMReset()"/>
<configuration Name="Flash" arm_target_flash_loader_file_path="$(PackagesDir)/targets/Olimex_LPC_E2294/Release/Loader_rpc.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" target_reset_script="FLASHReset()"/>
<folder Name="Source Files">
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc"/>
<folder Name="Demo">
<folder Name="Prog">
<file file_name="../boot.c"/>
<file file_name="../boot.h"/>
<file file_name="../cstart.s"/>
<file file_name="../header.h"/>
<file file_name="../irq.c"/>
<file file_name="../irq.h"/>
<file file_name="../led.c"/>
<file file_name="../led.h"/>
<file file_name="../lpc2294.h"/>
<file file_name="../main.c"/>
<file file_name="../timer.c"/>
<file file_name="../timer.h"/>
<file file_name="../vectors.c"/>
</folder>
</folder>
</folder>
<folder Name="System Files">
<file file_name="$(PackagesDir)/targets/Olimex_LPC_E2294/LPC_E2294_Target.js">
<configuration Name="Common" file_type="Reset Script"/>
</file>
<file file_name="../memory.x">
<configuration Name="Common" file_type="Linker Script"/>
</file>
</folder>
</project>
<configuration Name="ARM Flash Debug" inherited_configurations="ARM;Flash;Debug"/>
<configuration Name="ARM" Platform="ARM" arm_instruction_set="ARM" arm_library_instruction_set="ARM" c_preprocessor_definitions="__ARM" hidden="Yes"/>
<configuration Name="Flash" c_preprocessor_definitions="__FLASH_BUILD" hidden="Yes"/>
<configuration Name="Debug" build_debug_information="Yes" c_preprocessor_definitions="DEBUG" gcc_optimization_level="None" hidden="Yes" link_include_startup_code="No"/>
</solution>

View File

@ -1,60 +0,0 @@
<!DOCTYPE CrossStudio_for_ARM_Session_File>
<session>
<Bookmarks/>
<Breakpoints/>
<ExecutionProfileWindow/>
<Memory1>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
</Memory1>
<Memory2>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
</Memory2>
<Memory3>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
</Memory3>
<Memory4>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
</Memory4>
<Project>
<ProjectSessionItem path="lpc2294_crossworks" name="unnamed" />
<ProjectSessionItem path="lpc2294_crossworks;demoprog_olimex_lpc_l2294_20mhz" name="unnamed" />
<ProjectSessionItem path="lpc2294_crossworks;demoprog_olimex_lpc_l2294_20mhz;Source Files" name="unnamed" />
<ProjectSessionItem path="lpc2294_crossworks;demoprog_olimex_lpc_l2294_20mhz;Source Files;Demo" name="unnamed" />
<ProjectSessionItem path="lpc2294_crossworks;demoprog_olimex_lpc_l2294_20mhz;Source Files;Demo;Prog" name="unnamed" />
</Project>
<Register1>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
</Register1>
<Register2>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
</Register2>
<Register3>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
</Register3>
<Register4>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
</Register4>
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
<TraceWindow>
<Trace enabled="Yes" />
</TraceWindow>
<Watch1>
<Watches active="1" update="Never" />
</Watch1>
<Watch2>
<Watches active="0" update="Never" />
</Watch2>
<Watch3>
<Watches active="0" update="Never" />
</Watch3>
<Watch4>
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\main.c" y="45" path="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\main.c" left="0" selected="0" name="unnamed" top="45" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\boot.c" y="85" path="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\boot.c" left="0" selected="0" name="unnamed" top="85" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\boot.h" y="40" path="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\boot.h" left="0" selected="0" name="unnamed" top="0" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\header.h" y="0" path="C:\Work\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\header.h" left="0" selected="1" name="unnamed" top="0" />
</Files>
<ARMCrossStudioWindow activeProject="demoprog_olimex_lpc_l2294_20mhz" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog" fileDialogDefaultFilter="*.c" autoConnectCapabilities="388479" debugSearchPath="" buildConfiguration="ARM Flash Debug" />
</session>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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<sizeof(pll_dividers)/sizeof(pll_dividers[0]); p_sel_cnt++)
{
/* check f_cco with this pll divider */
f_cco = BOOT_CPU_SYSTEM_SPEED_KHZ * 2 * pll_dividers[p_sel_cnt];
if ( (f_cco >= 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 *************************************/

View File

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

View File

@ -1,7 +0,0 @@
/**
\defgroup Prog_ARM7_LPC2000_Olimex_LPC_L2294_Crossworks User Program
\brief User Program.
\ingroup ARM7_LPC2000_Olimex_LPC_L2294_Crossworks
*/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,19 +1,22 @@
<!DOCTYPE CrossStudio_for_ARM_Session_File>
<!DOCTYPE CrossStudio_Session_File>
<session>
<Bookmarks/>
<Breakpoints/>
<ExecutionProfileWindow/>
<FrameBufferWindow>
<FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
</FrameBufferWindow>
<Memory1>
<MemoryWindow autoEvaluate="0" addressText="0x4000" numColumns="8" sizeText="128" dataSize="1" radix="16" name="openbtl_olimex_efm32g880" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="0x4000" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="128" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_efm32g880" addressSpace="" />
</Memory1>
<Memory2>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_efm32g880" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_efm32g880" addressSpace="" />
</Memory2>
<Memory3>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_efm32g880" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_efm32g880" addressSpace="" />
</Memory3>
<Memory4>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_efm32g880" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_efm32g880" addressSpace="" />
</Memory4>
<Project>
<ProjectSessionItem path="EFM32G880_crossworks" name="unnamed" />
@ -21,20 +24,18 @@
<ProjectSessionItem path="EFM32G880_crossworks;openbtl_olimex_efm32g880;Source Files" name="unnamed" />
<ProjectSessionItem path="EFM32G880_crossworks;openbtl_olimex_efm32g880;Source Files;Demo" name="unnamed" />
<ProjectSessionItem path="EFM32G880_crossworks;openbtl_olimex_efm32g880;Source Files;Demo;Boot" name="unnamed" />
<ProjectSessionItem path="EFM32G880_crossworks;openbtl_olimex_efm32g880;Source Files;Demo;Boot;Lib" name="unnamed" />
<ProjectSessionItem path="EFM32G880_crossworks;openbtl_olimex_efm32g880;Source Files;Demo;Boot;Lib;Cmsis" name="unnamed" />
</Project>
<Register1>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_efm32g880" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_efm32g880" />
</Register1>
<Register2>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_efm32g880" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_efm32g880" />
</Register2>
<Register3>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_efm32g880" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_efm32g880" />
</Register3>
<Register4>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_efm32g880" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_efm32g880" />
</Register4>
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
<TraceWindow>
@ -53,8 +54,7 @@
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\users\voorburg\desktop\target\demo\armcm3_efm32_olimex_em32g880f128stk_crossworks\boot\lib\cmsis\cm3\devicesupport\energymicro\efm32\efm32.h" y="499" path="C:\users\voorburg\desktop\target\demo\armcm3_efm32_olimex_em32g880f128stk_crossworks\boot\lib\cmsis\cm3\devicesupport\energymicro\efm32\efm32.h" left="18" selected="0" name="unnamed" top="485" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Users\voorburg\Desktop\Target\Demo\ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks\Boot\main.c" y="0" path="C:\Users\voorburg\Desktop\Target\Demo\ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks\Boot\main.c" left="18" selected="1" name="unnamed" top="0" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Default" x="0" debugPath="../main.c" y="0" path="../main.c" left="0" selected="1" name="unnamed" top="0" />
</Files>
<ARMCrossStudioWindow activeProject="openbtl_olimex_efm32g880" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Source\ARMCM3_EFM32\Crossworks" fileDialogDefaultFilter="*.c" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Debug" />
<ARMCrossStudioWindow activeProject="openbtl_olimex_efm32g880" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:/Work/software/OpenBLT/Target/Source/ARMCM3_EFM32/Crossworks" fileDialogDefaultFilter="*.c" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Debug" />
</session>

View File

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

View File

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

View File

@ -1,19 +1,22 @@
<!DOCTYPE CrossStudio_for_ARM_Session_File>
<!DOCTYPE CrossStudio_Session_File>
<session>
<Bookmarks/>
<Breakpoints/>
<ExecutionProfileWindow/>
<FrameBufferWindow>
<FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
</FrameBufferWindow>
<Memory1>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory1>
<Memory2>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory2>
<Memory3>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory3>
<Memory4>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory4>
<Project>
<ProjectSessionItem path="EFM32G880_crossworks" name="unnamed" />
@ -24,16 +27,16 @@
<ProjectSessionItem path="EFM32G880_crossworks;demoprog_olimex_efm32g880;Source Files;Demo;Prog" name="unnamed" />
</Project>
<Register1>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register1>
<Register2>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register2>
<Register3>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register3>
<Register4>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register4>
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
<TraceWindow>
@ -52,7 +55,7 @@
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Users\voorburg\Desktop\Target\Demo\ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks\Prog\main.c" y="0" path="C:\Users\voorburg\Desktop\Target\Demo\ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks\Prog\main.c" left="0" selected="1" name="unnamed" top="0" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Default" x="0" debugPath="../main.c" y="0" path="../main.c" left="0" selected="1" name="unnamed" top="0" />
</Files>
<ARMCrossStudioWindow activeProject="demoprog_olimex_efm32g880" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:\usr\feaser\software\OpenBLT\Target\Demo\ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks\Prog" fileDialogDefaultFilter="*.c" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Debug" />
<ARMCrossStudioWindow activeProject="demoprog_olimex_efm32g880" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_EFM32_Olimex_EM32G880F128STK_Crossworks/Prog" fileDialogDefaultFilter="*.c" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Debug" />
</session>

View File

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

View File

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

View File

@ -1,106 +1,172 @@
<!DOCTYPE CrossStudio_Project_File>
<solution Name="stm32f103_crossworks" target="8" version="2">
<project Name="openblt_olimex_stm32h103">
<configuration Name="Common" Placement="Flash" Target="STM32F103RB" arm_architecture="v7M" arm_core_type="Cortex-M3" arm_linker_heap_size="128" arm_linker_jtag_pad_pre_dr="1" arm_linker_jtag_pad_pre_ir="5" arm_linker_process_stack_size="0" arm_linker_stack_size="128" arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000" arm_target_debug_interface_type="ADIv5" arm_target_loader_applicable_loaders="Flash" arm_target_loader_default_loader="Flash" arm_target_loader_parameter="8000000" arm_use_gcc_libraries="Yes" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_only_additional_options="-I./..;-I./../lib/CMSIS/CM3/CoreSupport;-I./../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x;-I./../lib/USB_FS_DEVICE/inc;-I./../../../../Source;-I./../../../../Source/ARMCM3_STM32F1;-I./../../../../Source/ARMCM3_STM32F1/Crossworks" c_user_include_directories="$(TargetsDir)/STM32/include" gcc_optimization_level="Level 1" link_include_standard_libraries="Yes" linker_keep_symbols="_vectors;EntryFromProg" linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml" linker_output_format="srec" linker_printf_enabled="No" linker_printf_width_precision_supported="No" linker_scanf_enabled="No" linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml" oscillator_frequency="8MHz" project_directory="" project_type="Executable" property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml" target_get_partname_script="GetPartName()" target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)" target_reset_script="Reset()"/>
<configuration Name="Flash" arm_target_flash_loader_file_path="$(TargetsDir)/STM32/Release/Loader_rpc.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" arm_target_loader_can_lock_all="No" arm_target_loader_can_lock_range="No" arm_target_loader_can_unlock_all="No" arm_target_loader_can_unlock_range="No" target_reset_script="FLASHReset()"/>
<configuration
Name="Common"
Placement="Flash"
Target="STM32F103RB"
arm_architecture="v7M"
arm_core_type="Cortex-M3"
arm_linker_heap_size="128"
arm_linker_jtag_pad_pre_dr="1"
arm_linker_jtag_pad_pre_ir="5"
arm_linker_process_stack_size="0"
arm_linker_stack_size="128"
arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll"
arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000"
arm_target_debug_interface_type="ADIv5"
arm_target_loader_applicable_loaders="Flash"
arm_target_loader_default_loader="Flash"
arm_target_loader_parameter="8000000"
arm_use_gcc_libraries="Yes"
build_intermediate_directory="$(Configuration)/../../obj"
build_output_directory="$(ProjectDir)/../bin"
c_only_additional_options="-I./..;-I./../lib/CMSIS/CM3/CoreSupport;-I./../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x;-I./../lib/USB_FS_DEVICE/inc;-I./../../../../Source;-I./../../../../Source/ARMCM3_STM32F1;-I./../../../../Source/ARMCM3_STM32F1/Crossworks"
c_preprocessor_definitions=""
c_user_include_directories="$(TargetsDir)/STM32/include"
gcc_optimization_level="Level 1"
link_include_standard_libraries="Yes"
linker_keep_symbols="_vectors;EntryFromProg"
linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml"
linker_output_format="srec"
linker_printf_enabled="No"
linker_printf_width_precision_supported="No"
linker_scanf_enabled="No"
linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml"
oscillator_frequency="8MHz"
project_directory=""
project_type="Executable"
property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml"
target_get_partname_script="GetPartName()"
target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)"
target_reset_script="Reset()" />
<configuration
Name="Flash"
arm_target_flash_loader_file_path="$(TargetsDir)/STM32/Release/Loader_rpc.elf"
arm_target_flash_loader_type="LIBMEM RPC Loader"
arm_target_loader_can_lock_all="No"
arm_target_loader_can_lock_range="No"
arm_target_loader_can_unlock_all="No"
arm_target_loader_can_unlock_range="No"
target_reset_script="FLASHReset()" />
<folder Name="Source Files">
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc"/>
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc" />
<folder Name="Demo">
<folder Name="Boot" file_name="">
<file file_name="../hooks.c"/>
<file file_name="../main.c"/>
<folder Name="Boot">
<file file_name="../hooks.c" />
<file file_name="../main.c" />
<folder Name="lib">
<folder Name="CoreSupport">
<file file_name="../lib/CMSIS/CM3/CoreSupport/core_cm3.c"/>
<file file_name="../lib/CMSIS/CM3/CoreSupport/core_cm3.h"/>
<file file_name="../lib/CMSIS/CM3/CoreSupport/core_cm3.h" />
</folder>
<folder Name="DeviceSupport">
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h"/>
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c"/>
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h"/>
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h" />
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c" />
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h" />
</folder>
<folder Name="UsbFullspeed">
<file file_name="../lib/USB_FS_DEVICE/inc/usb_core.h"/>
<file file_name="../lib/USB_FS_DEVICE/inc/usb_def.h"/>
<file file_name="../lib/USB_FS_DEVICE/inc/usb_init.h"/>
<file file_name="../lib/USB_FS_DEVICE/inc/usb_int.h"/>
<file file_name="../lib/USB_FS_DEVICE/inc/usb_lib.h"/>
<file file_name="../lib/USB_FS_DEVICE/inc/usb_mem.h"/>
<file file_name="../lib/USB_FS_DEVICE/inc/usb_regs.h"/>
<file file_name="../lib/USB_FS_DEVICE/inc/usb_sil.h"/>
<file file_name="../lib/USB_FS_DEVICE/inc/usb_type.h"/>
<file file_name="../lib/USB_FS_DEVICE/src/usb_core.c"/>
<file file_name="../lib/USB_FS_DEVICE/src/usb_init.c"/>
<file file_name="../lib/USB_FS_DEVICE/src/usb_int.c"/>
<file file_name="../lib/USB_FS_DEVICE/src/usb_mem.c"/>
<file file_name="../lib/USB_FS_DEVICE/src/usb_regs.c"/>
<file file_name="../lib/USB_FS_DEVICE/src/usb_sil.c"/>
<file file_name="../lib/USB_FS_DEVICE/inc/usb_core.h" />
<file file_name="../lib/USB_FS_DEVICE/inc/usb_def.h" />
<file file_name="../lib/USB_FS_DEVICE/inc/usb_init.h" />
<file file_name="../lib/USB_FS_DEVICE/inc/usb_int.h" />
<file file_name="../lib/USB_FS_DEVICE/inc/usb_lib.h" />
<file file_name="../lib/USB_FS_DEVICE/inc/usb_mem.h" />
<file file_name="../lib/USB_FS_DEVICE/inc/usb_regs.h" />
<file file_name="../lib/USB_FS_DEVICE/inc/usb_sil.h" />
<file file_name="../lib/USB_FS_DEVICE/inc/usb_type.h" />
<file file_name="../lib/USB_FS_DEVICE/src/usb_core.c" />
<file file_name="../lib/USB_FS_DEVICE/src/usb_init.c" />
<file file_name="../lib/USB_FS_DEVICE/src/usb_int.c" />
<file file_name="../lib/USB_FS_DEVICE/src/usb_mem.c" />
<file file_name="../lib/USB_FS_DEVICE/src/usb_regs.c" />
<file file_name="../lib/USB_FS_DEVICE/src/usb_sil.c" />
</folder>
</folder>
<file file_name="../usb_conf.h"/>
<file file_name="../usb_desc.c"/>
<file file_name="../usb_desc.h"/>
<file file_name="../usb_endp.c"/>
<file file_name="../usb_istr.c"/>
<file file_name="../usb_istr.h"/>
<file file_name="../usb_prop.c"/>
<file file_name="../usb_prop.h"/>
<file file_name="../usb_pwr.c"/>
<file file_name="../usb_pwr.h"/>
<file file_name="../blt_conf.h"/>
<file file_name="../usb_conf.h" />
<file file_name="../usb_desc.c" />
<file file_name="../usb_desc.h" />
<file file_name="../usb_endp.c" />
<file file_name="../usb_istr.c" />
<file file_name="../usb_istr.h" />
<file file_name="../usb_prop.c" />
<file file_name="../usb_prop.h" />
<file file_name="../usb_pwr.c" />
<file file_name="../usb_pwr.h" />
<file file_name="../blt_conf.h" />
</folder>
</folder>
<folder Name="Source" file_name="">
<folder Name="ARMCM3_STM32F1" file_name="">
<folder Name="Crossworks" file_name="">
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/cpu_comp.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/cstart.s"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/vectors.c"/>
<folder Name="Source">
<folder Name="ARMCM3_STM32F1">
<folder Name="Crossworks">
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/cpu_comp.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/cstart.s" />
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/vectors.c" />
</folder>
<file file_name="../../../../Source/ARMCM3_STM32F1/can.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/cpu.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/flash.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/flash.h"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/nvm.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/timer.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/types.h"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/uart.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/usb.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/can.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/cpu.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/flash.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/flash.h" />
<file file_name="../../../../Source/ARMCM3_STM32F1/nvm.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/timer.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/types.h" />
<file file_name="../../../../Source/ARMCM3_STM32F1/uart.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/usb.c" />
</folder>
<file file_name="../../../../Source/assert.c"/>
<file file_name="../../../../Source/assert.h"/>
<file file_name="../../../../Source/backdoor.c"/>
<file file_name="../../../../Source/backdoor.h"/>
<file file_name="../../../../Source/boot.c"/>
<file file_name="../../../../Source/boot.h"/>
<file file_name="../../../../Source/com.c"/>
<file file_name="../../../../Source/com.h"/>
<file file_name="../../../../Source/cop.c"/>
<file file_name="../../../../Source/cop.h"/>
<file file_name="../../../../Source/plausibility.h"/>
<file file_name="../../../../Source/xcp.c"/>
<file file_name="../../../../Source/xcp.h"/>
<file file_name="../../../../Source/can.h"/>
<file file_name="../../../../Source/cpu.h"/>
<file file_name="../../../../Source/nvm.h"/>
<file file_name="../../../../Source/timer.h"/>
<file file_name="../../../../Source/uart.h"/>
<file file_name="../../../../Source/usb.h"/>
<file file_name="../../../../Source/assert.c" />
<file file_name="../../../../Source/assert.h" />
<file file_name="../../../../Source/backdoor.c" />
<file file_name="../../../../Source/backdoor.h" />
<file file_name="../../../../Source/boot.c" />
<file file_name="../../../../Source/boot.h" />
<file file_name="../../../../Source/com.c" />
<file file_name="../../../../Source/com.h" />
<file file_name="../../../../Source/cop.c" />
<file file_name="../../../../Source/cop.h" />
<file file_name="../../../../Source/plausibility.h" />
<file file_name="../../../../Source/xcp.c" />
<file file_name="../../../../Source/xcp.h" />
<file file_name="../../../../Source/can.h" />
<file file_name="../../../../Source/cpu.h" />
<file file_name="../../../../Source/nvm.h" />
<file file_name="../../../../Source/timer.h" />
<file file_name="../../../../Source/uart.h" />
<file file_name="../../../../Source/usb.h" />
</folder>
</folder>
<folder Name="System Files" file_name="">
<folder Name="System Files">
<file file_name="$(TargetsDir)/STM32/STM32_Target.js">
<configuration Name="Common" file_type="Reset Script"/>
<configuration Name="Common" file_type="Reset Script" />
</file>
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/memory.x">
<configuration Name="Common" file_type="Linker Script"/>
<configuration Name="Common" file_type="Linker Script" />
</file>
</folder>
<configuration Name="Debug" c_only_additional_options=""/>
<configuration Name="Debug" c_only_additional_options="" />
</project>
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug"/>
<configuration Name="THUMB" Platform="ARM" arm_instruction_set="THUMB" arm_library_instruction_set="THUMB" c_preprocessor_definitions="__THUMB" hidden="Yes"/>
<configuration Name="Debug" build_debug_information="Yes" c_preprocessor_definitions="DEBUG" gcc_optimization_level="None" hidden="Yes" link_include_startup_code="No"/>
<configuration Name="THUMB Release" inherited_configurations="THUMB;Release"/>
<configuration Name="Release" build_debug_information="No" c_additional_options="-g1" c_preprocessor_definitions="NDEBUG" gcc_optimization_level="Level 1" hidden="Yes" link_include_startup_code="No"/>
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug" />
<configuration
Name="THUMB"
Platform="ARM"
arm_instruction_set="THUMB"
arm_library_instruction_set="THUMB"
c_preprocessor_definitions="__THUMB"
hidden="Yes" />
<configuration
Name="Debug"
build_debug_information="Yes"
c_preprocessor_definitions="DEBUG"
gcc_optimization_level="None"
hidden="Yes"
link_include_startup_code="No" />
<configuration
Name="THUMB Release"
inherited_configurations="THUMB;Release" />
<configuration
Name="Release"
build_debug_information="No"
c_additional_options="-g1"
c_preprocessor_definitions="NDEBUG"
gcc_optimization_level="Level 1"
hidden="Yes"
link_include_startup_code="No" />
</solution>

View File

@ -1,23 +1,28 @@
<!DOCTYPE CrossStudio_for_ARM_Session_File>
<!DOCTYPE CrossStudio_Session_File>
<session>
<Bookmarks/>
<Breakpoints/>
<Breakpoints>
<Exceptions set="MemManage;UsageFault_Coprocessor;UsageFault_CheckingError;UsageFault_StateError;BusFault;ExceptionEntryReturnFault;HardFault" />
</Breakpoints>
<ExecutionProfileWindow/>
<FrameBufferWindow>
<FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
</FrameBufferWindow>
<Memory1>
<MemoryWindow autoEvaluate="0" addressText="0x08004004" numColumns="8" sizeText="4" dataSize="1" radix="16" name="openbtl_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="0x08004004" numColumns="8" sizeText="4" dataSize="1" radix="16" name="openblt_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="0x08004004" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="4" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="0x08004004" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="4" viewMode="0" dataSize="1" radix="16" name="openblt_olimex_stm32h103" addressSpace="" />
</Memory1>
<Memory2>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openblt_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openblt_olimex_stm32h103" addressSpace="" />
</Memory2>
<Memory3>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openblt_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openblt_olimex_stm32h103" addressSpace="" />
</Memory3>
<Memory4>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openblt_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_stm32h103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openblt_olimex_stm32h103" addressSpace="" />
</Memory4>
<Project>
<ProjectSessionItem path="stm32f103_crossworks" name="unnamed" />
@ -25,22 +30,28 @@
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32h103;Source Files" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32h103;Source Files;Demo" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32h103;Source Files;Demo;Boot" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32h103;Source Files;Demo;Boot;lib" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32h103;Source Files;Demo;Boot;lib;CoreSupport" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32h103;Source Files;Demo;Boot;lib;DeviceSupport" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32h103;Source Files;Source" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32h103;Source Files;Source;ARMCM3_STM32F1" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32h103;Source Files;Source;ARMCM3_STM32F1;Crossworks" name="unnamed" />
</Project>
<Register1>
<RegisterWindow openNodes="CPU" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_stm32h103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU - Current Context;CPU" decimalNodes="" octalNodes="" asciiNodes="" name="openblt_olimex_stm32h103" />
<RegisterWindow openNodes="CPU" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_stm32h103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openblt_olimex_stm32h103" />
</Register1>
<Register2>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_stm32h103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU - Current Context;CPU" decimalNodes="" octalNodes="" asciiNodes="" name="openblt_olimex_stm32h103" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_stm32h103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openblt_olimex_stm32h103" />
</Register2>
<Register3>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_stm32h103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU - Current Context;CPU" decimalNodes="" octalNodes="" asciiNodes="" name="openblt_olimex_stm32h103" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_stm32h103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openblt_olimex_stm32h103" />
</Register3>
<Register4>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_stm32h103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU - Current Context;CPU" decimalNodes="" octalNodes="" asciiNodes="" name="openblt_olimex_stm32h103" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_stm32h103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openblt_olimex_stm32h103" />
</Register4>
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
<TraceWindow>
@ -48,8 +59,8 @@
</TraceWindow>
<Watch1>
<Watches active="1" update="Never" >
<Watchpoint linenumber="0" radix="-1" name="fifoCtrl[0]" expression="fifoCtrl[0]" filename="" />
<Watchpoint linenumber="0" radix="-1" name="fifoPipeBulkIN" expression="fifoPipeBulkIN" filename="" />
<Watchpoint evalMode="0" linenumber="0" numelements="0" radix="-1" name="fifoCtrl[0]" list="" expression="fifoCtrl[0]" filename="../ide" />
<Watchpoint evalMode="0" linenumber="0" numelements="0" radix="-1" name="fifoPipeBulkIN" list="" expression="fifoPipeBulkIN" filename="../ide" />
</Watches>
</Watch1>
<Watch2>
@ -62,7 +73,9 @@
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM3_STM32F1_Olimex_STM32H103_Crossworks\Boot\main.c" y="48" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM3_STM32F1_Olimex_STM32H103_Crossworks\Boot\main.c" left="0" selected="1" name="unnamed" top="4" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="../main.c" y="48" path="../main.c" left="0" selected="1" name="unnamed" top="9" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Default" x="0" debugPath="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h" y="64" path="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h" left="0" selected="0" name="unnamed" top="31" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="" x="0" debugPath="../../../../Source/ARMCM3_STM32F1/Crossworks/vectors.c" y="30" path="../../../../Source/ARMCM3_STM32F1/Crossworks/vectors.c" left="0" selected="0" name="unnamed" top="17" />
</Files>
<ARMCrossStudioWindow activeProject="openblt_olimex_stm32h103" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Source\ARMCM3_STM32F1\Crossworks" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
<ARMCrossStudioWindow activeProject="openblt_olimex_stm32h103" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:/Work/software/OpenBLT/Target/Source/ARMCM3_STM32F1/Crossworks" fileDialogDefaultFilter="*.c" autoConnectCapabilities="3711" debugSearchPath="" buildConfiguration="THUMB Debug" />
</session>

View File

@ -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 <stdint.h>
/* 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

View File

@ -1,243 +0,0 @@
<html>
<head>
<title>CMSIS Debug Support</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<style>
<!--
/*-----------------------------------------------------------
Keil Software CHM Style Sheet
-----------------------------------------------------------*/
body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family:
Verdana, Arial, 'Sans Serif' }
a:link { color: #0000FF; text-decoration: underline }
a:visited { color: #0000FF; text-decoration: underline }
a:active { color: #FF0000; text-decoration: underline }
a:hover { color: #FF0000; text-decoration: underline }
h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold;
text-align: Center; margin-right: 3 }
h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold;
background-color: #CCCCCC; margin-top: 24; margin-bottom: 3;
padding: 6 }
h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color:
#CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC;
margin-left: 24; margin-right: 24 }
ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
ol { margin-top: 6pt; margin-bottom: 0 }
li { clear: both; margin-bottom: 6pt }
table { font-size: 100%; border-width: 0; padding: 0 }
th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align:
bottom; padding-right: 6pt }
tr { text-align: left; vertical-align: top }
td { text-align: left; vertical-align: top; padding-right: 6pt }
.ToolT { font-size: 8pt; color: #808080 }
.TinyT { font-size: 8pt; text-align: Center }
code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier;
line-height: 120%; font-style: normal }
/*-----------------------------------------------------------
Notes
-----------------------------------------------------------*/
p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
/*-----------------------------------------------------------
Expanding/Contracting Divisions
-----------------------------------------------------------*/
#expand { text-decoration: none; margin-bottom: 3pt }
img.expand { border-style: none; border-width: medium }
div.expand { display: none; margin-left: 9pt; margin-top: 0 }
/*-----------------------------------------------------------
Where List Tags
-----------------------------------------------------------*/
p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
table.wh { width: 100% }
td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom:
6pt }
td.whDesc { padding-bottom: 6pt }
/*-----------------------------------------------------------
Keil Table Tags
-----------------------------------------------------------*/
table.kt { border: 1pt solid #000000 }
th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt;
padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
tr.kt { }
td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0;
padding-left: 6pt; padding-right: 6pt; padding-top: 2pt;
padding-bottom: 2pt }
/*-----------------------------------------------------------
-----------------------------------------------------------*/
-->
</style>
</head>
<body>
<h1>CMSIS Debug Support</h1>
<hr>
<h2>Cortex-M3 ITM Debug Access</h2>
<p>
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:
</p>
<ul>
<li>ITM Channel 0: used for printf-style output via the debug interface.</li>
<li>ITM Channel 31: is reserved for RTOS kernel awareness debugging.</li>
</ul>
<h2>Debug IN / OUT functions</h2>
<p>CMSIS provides following debug functions:</p>
<ul>
<li>ITM_SendChar (uses ITM channel 0)</li>
<li>ITM_ReceiveChar (uses global variable)</li>
<li>ITM_CheckChar (uses global variable)</li>
</ul>
<h3>ITM_SendChar</h3>
<p>
<strong>ITM_SendChar</strong> is used to transmit a character over ITM channel 0 from
the microcontroller system to the debug system. <br>
Only a 8 bit value is transmitted.
</p>
<pre>
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) &amp;&amp;
(ITM-&gt;TCR & ITM_TCR_ITMENA) &amp;&amp;
(ITM-&gt;TER & (1UL &lt;&lt; 0)) )
{
while (ITM-&gt;PORT[0].u32 == 0);
ITM-&gt;PORT[0].u8 = (uint8_t)ch;
}
return (ch);
}</pre>
<h3>ITM_ReceiveChar</h3>
<p>
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.
</p>
<p>
The globale variable <strong>ITM_RxBuffer</strong> is used to transmit a 8 bit value from debug system
to microcontroller system. <strong>ITM_RxBuffer</strong> is 32 bit wide to enshure a proper handshake.
</p>
<pre>
extern volatile int ITM_RxBuffer; /* variable to receive characters */
</pre>
<p>
A dedicated bit pattern is used to determin if <strong>ITM_RxBuffer</strong> is empty
or contains a valid value.
</p>
<pre>
#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */
</pre>
<p>
<strong>ITM_ReceiveChar</strong> 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.
</p>
<pre>
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);
}
</pre>
<h3>ITM_CheckChar</h3>
<p>
<strong>ITM_CheckChar</strong> is used to check if a character is received.
</p>
<pre>
static __INLINE int ITM_CheckChar (void) {
if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
return (0); /* no character available */
} else {
return (1); /* character available */
}
}</pre>
<h2>ITM Debug Support in uVision</h2>
<p>
uVision uses in a debug session the <strong>Debug (printf) Viewer</strong> window to
display the debug data.
</p>
<p>Direction microcontroller system -&gt; uVision:</p>
<ul>
<li>
Characters received via ITM communication channel 0 are written in a printf style
to <strong>Debug (printf) Viewer</strong> window.
</li>
</ul>
<p>Direction uVision -&gt; microcontroller system:</p>
<ul>
<li>Check if <strong>ITM_RxBuffer</strong> variable is available (only performed once).</li>
<li>Read character from <strong>Debug (printf) Viewer</strong> window.</li>
<li>If <strong>ITM_RxBuffer</strong> empty write character to <strong>ITM_RxBuffer</strong>.</li>
</ul>
<p class="Note">Note</p>
<ul>
<li><p>Current solution does not use a buffer machanism for trasmitting the characters.</p>
</li>
</ul>
<h2>RTX Kernel awareness in uVision</h2>
<p>
uVision / RTX are using a simple and efficient solution for RTX Kernel awareness.
No format overhead is necessary.<br>
uVsion debugger decodes the RTX events via the 32 / 16 / 8 bit ITM write access
to ITM communication channel 31.
</p>
<p>Following RTX events are traced:</p>
<ul>
<li>Task Create / Delete event
<ol>
<li>32 bit access. Task start address is transmitted</li>
<li>16 bit access. Task ID and Create/Delete flag are transmitted<br>
High byte holds Create/Delete flag, Low byte holds TASK ID.
</li>
</ol>
</li>
<li>Task switch event
<ol>
<li>8 bit access. Task ID of current task is transmitted</li>
</ol>
</li>
</ul>
<p class="Note">Note</p>
<ul>
<li><p>Other RTOS information could be retrieved via memory read access in a polling mode manner.</p>
</li>
</ul>
<p class="MsoNormal"><span lang="EN-GB">&nbsp;</span></p>
<hr>
<p class="TinyT">Copyright © KEIL - An ARM Company.<br>
All rights reserved.<br>
Visit our web site at <a href="http://www.keil.com">www.keil.com</a>.
</p>
</body>
</html>

View File

@ -1,320 +0,0 @@
<html>
<head>
<title>CMSIS Changes</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<style>
<!--
/*-----------------------------------------------------------
Keil Software CHM Style Sheet
-----------------------------------------------------------*/
body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family:
Verdana, Arial, 'Sans Serif' }
a:link { color: #0000FF; text-decoration: underline }
a:visited { color: #0000FF; text-decoration: underline }
a:active { color: #FF0000; text-decoration: underline }
a:hover { color: #FF0000; text-decoration: underline }
h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold;
text-align: Center; margin-right: 3 }
h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold;
background-color: #CCCCCC; margin-top: 24; margin-bottom: 3;
padding: 6 }
h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color:
#CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC;
margin-left: 24; margin-right: 24 }
ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
ol { margin-top: 6pt; margin-bottom: 0 }
li { clear: both; margin-bottom: 6pt }
table { font-size: 100%; border-width: 0; padding: 0 }
th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align:
bottom; padding-right: 6pt }
tr { text-align: left; vertical-align: top }
td { text-align: left; vertical-align: top; padding-right: 6pt }
.ToolT { font-size: 8pt; color: #808080 }
.TinyT { font-size: 8pt; text-align: Center }
code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier;
line-height: 120%; font-style: normal }
/*-----------------------------------------------------------
Notes
-----------------------------------------------------------*/
p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
/*-----------------------------------------------------------
Expanding/Contracting Divisions
-----------------------------------------------------------*/
#expand { text-decoration: none; margin-bottom: 3pt }
img.expand { border-style: none; border-width: medium }
div.expand { display: none; margin-left: 9pt; margin-top: 0 }
/*-----------------------------------------------------------
Where List Tags
-----------------------------------------------------------*/
p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
table.wh { width: 100% }
td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom:
6pt }
td.whDesc { padding-bottom: 6pt }
/*-----------------------------------------------------------
Keil Table Tags
-----------------------------------------------------------*/
table.kt { border: 1pt solid #000000 }
th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt;
padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
tr.kt { }
td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0;
padding-left: 6pt; padding-right: 6pt; padding-top: 2pt;
padding-bottom: 2pt }
/*-----------------------------------------------------------
-----------------------------------------------------------*/
-->
</style>
</head>
<body>
<h1>Changes to CMSIS version V1.20</h1>
<hr>
<h2>1. Removed CMSIS Middelware packages</h2>
<p>
CMSIS Middleware is on hold from ARM side until a agreement between all CMSIS partners is found.
</p>
<h2>2. SystemFrequency renamed to SystemCoreClock</h2>
<p>
The variable name <strong>SystemCoreClock</strong> is more precise than <strong>SystemFrequency</strong>
because the variable holds the clock value at which the core is running.
</p>
<h2>3. Changed startup concept</h2>
<p>
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.
</p>
<h3>Changed startup concept</h3>
<ul>
<li>
SystemInit() is called from startup file before <strong>premain</strong>.
</li>
<li>
<strong>SystemInit()</strong> configures the clock system and also configures
an existing external memory controller.
</li>
<li>
<strong>SystemInit()</strong> must not use global variables.
</li>
<li>
<strong>SystemCoreClock</strong> is initialized with a correct predefined value.
</li>
<li>
Additional function <strong>void SystemCoreClockUpdate (void)</strong> is provided.<br>
<strong>SystemCoreClockUpdate()</strong> updates the variable <strong>SystemCoreClock</strong>
and must be called whenever the core clock is changed.<br>
<strong>SystemCoreClockUpdate()</strong> evaluates the clock register settings and calculates
the current core clock.
</li>
</ul>
<h2>4. Advanced Debug Functions</h2>
<p>
ITM communication channel is only capable for OUT direction. To allow also communication for
IN direction a simple concept is provided.
</p>
<ul>
<li>
Global variable <strong>volatile int ITM_RxBuffer</strong> used for IN data.
</li>
<li>
Function <strong>int ITM_CheckChar (void)</strong> checks if a new character is available.
</li>
<li>
Function <strong>int ITM_ReceiveChar (void)</strong> retrieves the new character.
</li>
</ul>
<p>
For detailed explanation see file <strong>CMSIS debug support.htm</strong>.
</p>
<h2>5. Core Register Bit Definitions</h2>
<p>
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.
</p>
<p>
e.g. SysTick structure with bit definitions
</p>
<pre>
/** @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 */</pre>
<h2>7. DoxyGen Tags</h2>
<p>
DoxyGen tags in files core_cm3.[c,h] and core_cm0.[c,h] are reworked to create proper documentation
using DoxyGen.
</p>
<h2>8. Folder Structure</h2>
<p>
The folder structure is changed to differentiate the single support packages.
</p>
<ul>
<li>CM0</li>
<li>CM3
<ul>
<li>CoreSupport</li>
<li>DeviceSupport</li>
<ul>
<li>Vendor
<ul>
<li>Device
<ul>
<li>Startup
<ul>
<li>Toolchain</li>
<li>Toolchain</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>Device</li>
<li>...</li>
</ul>
</li>
<li>Vendor</li>
<li>...</li>
</ul>
</li>
<li>Example
<ul>
<li>Toolchain
<ul>
<li>Device</li>
<li>Device</li>
<li>...</li>
</ul>
</li>
<li>Toolchain</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>Documentation</li>
</ul>
<h2>9. Open Points</h2>
<p>
Following points need to be clarified and solved:
</p>
<ul>
<li>
<p>
Equivalent C and Assembler startup files.
</p>
<p>
Is there a need for having C startup files although assembler startup files are
very efficient and do not need to be changed?
<p/>
</li>
<li>
<p>
Placing of HEAP in external RAM.
</p>
<p>
It must be possible to place HEAP in external RAM if the device supports an
external memory controller.
</p>
</li>
<li>
<p>
Placing of STACK /HEAP.
</p>
<p>
STACK should always be placed at the end of internal RAM.
</p>
<p>
If HEAP is placed in internal RAM than it should be placed after RW ZI section.
</p>
</li>
<li>
<p>
Removing core_cm3.c and core_cm0.c.
</p>
<p>
On a long term the functions in core_cm3.c and core_cm0.c must be replaced with
appropriate compiler intrinsics.
</p>
</li>
</ul>
<h2>10. Limitations</h2>
<p>
The following limitations are not covered with the current CMSIS version:
</p>
<ul>
<li>
No <strong>C startup files</strong> for ARM toolchain are provided.
</li>
<li>
No <strong>C startup files</strong> for GNU toolchain are provided.
</li>
<li>
No <strong>C startup files</strong> for IAR toolchain are provided.
</li>
<li>
No <strong>Tasking</strong> projects are provided yet.
</li>
</ul>

View File

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

View File

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

View File

@ -1,98 +1,144 @@
<!DOCTYPE CrossStudio_Project_File>
<solution Name="stm32f103_crossworks" target="8" version="2">
<project Name="demoprog_olimex_stm32h103">
<configuration Name="Common" Placement="Flash" Target="STM32F103RB" arm_architecture="v7M" arm_core_type="Cortex-M3" arm_linker_heap_size="128" arm_linker_jtag_pad_pre_dr="1" arm_linker_jtag_pad_pre_ir="5" arm_linker_process_stack_size="0" arm_linker_stack_size="128" arm_long_calls="No" arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000" arm_target_debug_interface_type="ADIv5" arm_target_loader_applicable_loaders="Flash" arm_target_loader_default_loader="Flash" arm_target_loader_parameter="8000000" arm_use_gcc_libraries="Yes" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_only_additional_options="" c_preprocessor_definitions="USE_STDPERIPH_DRIVER ;VECT_TAB_FLASH;GCC_ARMCM3" c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../lib/stdperiphlib;$(ProjectDir)/../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc;$(ProjectDir)/../lib/stdperiphlib/CMSIS/CM3/CoreSupport;$(ProjectDir)/../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x" gcc_optimization_level="None" link_include_standard_libraries="Yes" linker_keep_symbols="_vectors" linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml" linker_output_format="srec" linker_printf_enabled="No" linker_printf_width_precision_supported="No" linker_scanf_enabled="No" linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml" oscillator_frequency="8MHz" project_directory="" project_type="Executable" property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml" target_get_partname_script="GetPartName()" target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)" target_reset_script="Reset()"/>
<configuration Name="Flash" arm_target_flash_loader_file_path="$(TargetsDir)/STM32/Release/Loader_rpc.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" arm_target_loader_can_lock_all="No" arm_target_loader_can_lock_range="No" arm_target_loader_can_unlock_all="No" arm_target_loader_can_unlock_range="No" target_reset_script="FLASHReset()"/>
<configuration
Name="Common"
Placement="Flash"
Target="STM32F103RB"
arm_architecture="v7M"
arm_core_type="Cortex-M3"
arm_linker_heap_size="128"
arm_linker_jtag_pad_pre_dr="1"
arm_linker_jtag_pad_pre_ir="5"
arm_linker_process_stack_size="0"
arm_linker_stack_size="128"
arm_long_calls="No"
arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll"
arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000"
arm_target_debug_interface_type="ADIv5"
arm_target_loader_applicable_loaders="Flash"
arm_target_loader_default_loader="Flash"
arm_target_loader_parameter="8000000"
arm_use_gcc_libraries="Yes"
build_intermediate_directory="$(Configuration)/../../obj"
build_output_directory="$(ProjectDir)/../bin"
c_only_additional_options=""
c_preprocessor_definitions="USE_STDPERIPH_DRIVER ;VECT_TAB_FLASH;GCC_ARMCM3"
c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../lib/stdperiphlib;$(ProjectDir)/../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc;$(ProjectDir)/../lib/stdperiphlib/CMSIS/CM3/CoreSupport;$(ProjectDir)/../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x"
gcc_optimization_level="None"
link_include_standard_libraries="Yes"
linker_keep_symbols="_vectors"
linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml"
linker_output_format="srec"
linker_printf_enabled="No"
linker_printf_width_precision_supported="No"
linker_scanf_enabled="No"
linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml"
oscillator_frequency="8MHz"
project_directory=""
project_type="Executable"
property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml"
target_get_partname_script="GetPartName()"
target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)"
target_reset_script="Reset()" />
<configuration
Name="Flash"
arm_target_flash_loader_file_path="$(TargetsDir)/STM32/Release/Loader_rpc.elf"
arm_target_flash_loader_type="LIBMEM RPC Loader"
arm_target_loader_can_lock_all="No"
arm_target_loader_can_lock_range="No"
arm_target_loader_can_unlock_all="No"
arm_target_loader_can_unlock_range="No"
target_reset_script="FLASHReset()" />
<folder Name="Source Files">
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc"/>
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc" />
<folder Name="Demo">
<folder Name="Prog">
<file file_name="../cstart.s"/>
<file file_name="../header.h"/>
<file file_name="../led.c"/>
<file file_name="../led.h"/>
<file file_name="../main.c"/>
<file file_name="../timer.c"/>
<file file_name="../timer.h"/>
<file file_name="../vectors.c"/>
<file file_name="../cstart.s" />
<file file_name="../header.h" />
<file file_name="../led.c" />
<file file_name="../led.h" />
<file file_name="../main.c" />
<file file_name="../timer.c" />
<file file_name="../timer.h" />
<file file_name="../vectors.c" />
</folder>
</folder>
</folder>
<folder Name="System Files">
<file file_name="$(TargetsDir)/STM32/STM32_Target.js">
<configuration Name="Common" file_type="Reset Script"/>
<configuration Name="Common" file_type="Reset Script" />
</file>
<file file_name="../memory.x">
<configuration Name="Common" file_type="Linker Script"/>
<configuration Name="Common" file_type="Linker Script" />
</file>
</folder>
<configuration Name="Debug" c_only_additional_options=""/>
<configuration Name="Debug" c_only_additional_options="" />
<folder Name="Library Files">
<file file_name="../lib/stdperiphlib/stm32f10x_conf.h"/>
<file file_name="../lib/stdperiphlib/stm32f10x_conf.h" />
<folder Name="STM32F10x_StdPeriph_Driver">
<folder Name="inc">
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/misc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_adc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_bkp.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_can.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_cec.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_crc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dac.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dbgmcu.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dma.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_exti.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_flash.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_fsmc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_i2c.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_iwdg.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_pwr.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rtc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_sdio.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_tim.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_wwdg.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/misc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_adc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_bkp.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_can.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_cec.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_crc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dac.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dbgmcu.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dma.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_exti.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_flash.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_fsmc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_i2c.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_iwdg.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_pwr.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rtc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_sdio.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_tim.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_wwdg.h" />
</folder>
<folder Name="src">
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/misc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/misc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c" />
</folder>
</folder>
<folder Name="CMSIS">
<folder Name="CM3">
<folder Name="CoreSupport">
<file file_name="../lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h" />
</folder>
<folder Name="DeviceSupport">
<folder Name="ST">
<folder Name="STM32F10x">
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h" />
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c" />
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h" />
</folder>
</folder>
</folder>
@ -100,9 +146,30 @@
</folder>
</folder>
</project>
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug"/>
<configuration Name="THUMB" Platform="ARM" arm_instruction_set="THUMB" arm_library_instruction_set="THUMB" c_preprocessor_definitions="__THUMB" hidden="Yes"/>
<configuration Name="Debug" build_debug_information="Yes" c_preprocessor_definitions="DEBUG" gcc_optimization_level="None" hidden="Yes" link_include_startup_code="No"/>
<configuration Name="THUMB Release" inherited_configurations="THUMB;Release"/>
<configuration Name="Release" build_debug_information="No" c_additional_options="-g1" c_preprocessor_definitions="NDEBUG" gcc_optimization_level="Level 1" hidden="Yes" link_include_startup_code="No"/>
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug" />
<configuration
Name="THUMB"
Platform="ARM"
arm_instruction_set="THUMB"
arm_library_instruction_set="THUMB"
c_preprocessor_definitions="__THUMB"
hidden="Yes" />
<configuration
Name="Debug"
build_debug_information="Yes"
c_preprocessor_definitions="DEBUG"
gcc_optimization_level="None"
hidden="Yes"
link_include_startup_code="No" />
<configuration
Name="THUMB Release"
inherited_configurations="THUMB;Release" />
<configuration
Name="Release"
build_debug_information="No"
c_additional_options="-g1"
c_preprocessor_definitions="NDEBUG"
gcc_optimization_level="Level 1"
hidden="Yes"
link_include_startup_code="No" />
</solution>

View File

@ -1,19 +1,22 @@
<!DOCTYPE CrossStudio_for_ARM_Session_File>
<!DOCTYPE CrossStudio_Session_File>
<session>
<Bookmarks/>
<Breakpoints/>
<ExecutionProfileWindow/>
<FrameBufferWindow>
<FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
</FrameBufferWindow>
<Memory1>
<MemoryWindow autoEvaluate="0" addressText="0" numColumns="8" sizeText="32" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="0" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="32" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory1>
<Memory2>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory2>
<Memory3>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory3>
<Memory4>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory4>
<Project>
<ProjectSessionItem path="stm32f103_crossworks" name="unnamed" />
@ -23,16 +26,16 @@
<ProjectSessionItem path="stm32f103_crossworks;demoprog_olimex_stm32h103;Source Files;Demo;Prog" name="unnamed" />
</Project>
<Register1>
<RegisterWindow openNodes="CPU" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="CPU" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register1>
<Register2>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register2>
<Register3>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register3>
<Register4>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register4>
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
<TraceWindow>
@ -51,7 +54,7 @@
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM3_STM32F1_Olimex_STM32H103_Crossworks\Prog\main.c" y="19" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM3_STM32F1_Olimex_STM32H103_Crossworks\Prog\main.c" left="0" selected="1" name="unnamed" top="15" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="../main.c" y="19" path="../main.c" left="0" selected="1" name="unnamed" top="15" />
</Files>
<ARMCrossStudioWindow activeProject="demoprog_olimex_stm32h103" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:\usr\feaser\software\OpenBLT\Target\Demo\ARMCM3_STM32_Olimex_STM32P103_Crossworks\Prog" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
<ARMCrossStudioWindow activeProject="demoprog_olimex_stm32h103" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Prog" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
</session>

View File

@ -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 <stdint.h>
/* 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

View File

@ -1,243 +0,0 @@
<html>
<head>
<title>CMSIS Debug Support</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<style>
<!--
/*-----------------------------------------------------------
Keil Software CHM Style Sheet
-----------------------------------------------------------*/
body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family:
Verdana, Arial, 'Sans Serif' }
a:link { color: #0000FF; text-decoration: underline }
a:visited { color: #0000FF; text-decoration: underline }
a:active { color: #FF0000; text-decoration: underline }
a:hover { color: #FF0000; text-decoration: underline }
h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold;
text-align: Center; margin-right: 3 }
h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold;
background-color: #CCCCCC; margin-top: 24; margin-bottom: 3;
padding: 6 }
h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color:
#CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC;
margin-left: 24; margin-right: 24 }
ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
ol { margin-top: 6pt; margin-bottom: 0 }
li { clear: both; margin-bottom: 6pt }
table { font-size: 100%; border-width: 0; padding: 0 }
th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align:
bottom; padding-right: 6pt }
tr { text-align: left; vertical-align: top }
td { text-align: left; vertical-align: top; padding-right: 6pt }
.ToolT { font-size: 8pt; color: #808080 }
.TinyT { font-size: 8pt; text-align: Center }
code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier;
line-height: 120%; font-style: normal }
/*-----------------------------------------------------------
Notes
-----------------------------------------------------------*/
p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
/*-----------------------------------------------------------
Expanding/Contracting Divisions
-----------------------------------------------------------*/
#expand { text-decoration: none; margin-bottom: 3pt }
img.expand { border-style: none; border-width: medium }
div.expand { display: none; margin-left: 9pt; margin-top: 0 }
/*-----------------------------------------------------------
Where List Tags
-----------------------------------------------------------*/
p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
table.wh { width: 100% }
td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom:
6pt }
td.whDesc { padding-bottom: 6pt }
/*-----------------------------------------------------------
Keil Table Tags
-----------------------------------------------------------*/
table.kt { border: 1pt solid #000000 }
th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt;
padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
tr.kt { }
td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0;
padding-left: 6pt; padding-right: 6pt; padding-top: 2pt;
padding-bottom: 2pt }
/*-----------------------------------------------------------
-----------------------------------------------------------*/
-->
</style>
</head>
<body>
<h1>CMSIS Debug Support</h1>
<hr>
<h2>Cortex-M3 ITM Debug Access</h2>
<p>
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:
</p>
<ul>
<li>ITM Channel 0: used for printf-style output via the debug interface.</li>
<li>ITM Channel 31: is reserved for RTOS kernel awareness debugging.</li>
</ul>
<h2>Debug IN / OUT functions</h2>
<p>CMSIS provides following debug functions:</p>
<ul>
<li>ITM_SendChar (uses ITM channel 0)</li>
<li>ITM_ReceiveChar (uses global variable)</li>
<li>ITM_CheckChar (uses global variable)</li>
</ul>
<h3>ITM_SendChar</h3>
<p>
<strong>ITM_SendChar</strong> is used to transmit a character over ITM channel 0 from
the microcontroller system to the debug system. <br>
Only a 8 bit value is transmitted.
</p>
<pre>
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) &amp;&amp;
(ITM-&gt;TCR & ITM_TCR_ITMENA) &amp;&amp;
(ITM-&gt;TER & (1UL &lt;&lt; 0)) )
{
while (ITM-&gt;PORT[0].u32 == 0);
ITM-&gt;PORT[0].u8 = (uint8_t)ch;
}
return (ch);
}</pre>
<h3>ITM_ReceiveChar</h3>
<p>
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.
</p>
<p>
The globale variable <strong>ITM_RxBuffer</strong> is used to transmit a 8 bit value from debug system
to microcontroller system. <strong>ITM_RxBuffer</strong> is 32 bit wide to enshure a proper handshake.
</p>
<pre>
extern volatile int ITM_RxBuffer; /* variable to receive characters */
</pre>
<p>
A dedicated bit pattern is used to determin if <strong>ITM_RxBuffer</strong> is empty
or contains a valid value.
</p>
<pre>
#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */
</pre>
<p>
<strong>ITM_ReceiveChar</strong> 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.
</p>
<pre>
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);
}
</pre>
<h3>ITM_CheckChar</h3>
<p>
<strong>ITM_CheckChar</strong> is used to check if a character is received.
</p>
<pre>
static __INLINE int ITM_CheckChar (void) {
if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
return (0); /* no character available */
} else {
return (1); /* character available */
}
}</pre>
<h2>ITM Debug Support in uVision</h2>
<p>
uVision uses in a debug session the <strong>Debug (printf) Viewer</strong> window to
display the debug data.
</p>
<p>Direction microcontroller system -&gt; uVision:</p>
<ul>
<li>
Characters received via ITM communication channel 0 are written in a printf style
to <strong>Debug (printf) Viewer</strong> window.
</li>
</ul>
<p>Direction uVision -&gt; microcontroller system:</p>
<ul>
<li>Check if <strong>ITM_RxBuffer</strong> variable is available (only performed once).</li>
<li>Read character from <strong>Debug (printf) Viewer</strong> window.</li>
<li>If <strong>ITM_RxBuffer</strong> empty write character to <strong>ITM_RxBuffer</strong>.</li>
</ul>
<p class="Note">Note</p>
<ul>
<li><p>Current solution does not use a buffer machanism for trasmitting the characters.</p>
</li>
</ul>
<h2>RTX Kernel awareness in uVision</h2>
<p>
uVision / RTX are using a simple and efficient solution for RTX Kernel awareness.
No format overhead is necessary.<br>
uVsion debugger decodes the RTX events via the 32 / 16 / 8 bit ITM write access
to ITM communication channel 31.
</p>
<p>Following RTX events are traced:</p>
<ul>
<li>Task Create / Delete event
<ol>
<li>32 bit access. Task start address is transmitted</li>
<li>16 bit access. Task ID and Create/Delete flag are transmitted<br>
High byte holds Create/Delete flag, Low byte holds TASK ID.
</li>
</ol>
</li>
<li>Task switch event
<ol>
<li>8 bit access. Task ID of current task is transmitted</li>
</ol>
</li>
</ul>
<p class="Note">Note</p>
<ul>
<li><p>Other RTOS information could be retrieved via memory read access in a polling mode manner.</p>
</li>
</ul>
<p class="MsoNormal"><span lang="EN-GB">&nbsp;</span></p>
<hr>
<p class="TinyT">Copyright © KEIL - An ARM Company.<br>
All rights reserved.<br>
Visit our web site at <a href="http://www.keil.com">www.keil.com</a>.
</p>
</body>
</html>

View File

@ -1,320 +0,0 @@
<html>
<head>
<title>CMSIS Changes</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<style>
<!--
/*-----------------------------------------------------------
Keil Software CHM Style Sheet
-----------------------------------------------------------*/
body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family:
Verdana, Arial, 'Sans Serif' }
a:link { color: #0000FF; text-decoration: underline }
a:visited { color: #0000FF; text-decoration: underline }
a:active { color: #FF0000; text-decoration: underline }
a:hover { color: #FF0000; text-decoration: underline }
h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold;
text-align: Center; margin-right: 3 }
h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold;
background-color: #CCCCCC; margin-top: 24; margin-bottom: 3;
padding: 6 }
h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color:
#CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC;
margin-left: 24; margin-right: 24 }
ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
ol { margin-top: 6pt; margin-bottom: 0 }
li { clear: both; margin-bottom: 6pt }
table { font-size: 100%; border-width: 0; padding: 0 }
th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align:
bottom; padding-right: 6pt }
tr { text-align: left; vertical-align: top }
td { text-align: left; vertical-align: top; padding-right: 6pt }
.ToolT { font-size: 8pt; color: #808080 }
.TinyT { font-size: 8pt; text-align: Center }
code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier;
line-height: 120%; font-style: normal }
/*-----------------------------------------------------------
Notes
-----------------------------------------------------------*/
p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
/*-----------------------------------------------------------
Expanding/Contracting Divisions
-----------------------------------------------------------*/
#expand { text-decoration: none; margin-bottom: 3pt }
img.expand { border-style: none; border-width: medium }
div.expand { display: none; margin-left: 9pt; margin-top: 0 }
/*-----------------------------------------------------------
Where List Tags
-----------------------------------------------------------*/
p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
table.wh { width: 100% }
td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom:
6pt }
td.whDesc { padding-bottom: 6pt }
/*-----------------------------------------------------------
Keil Table Tags
-----------------------------------------------------------*/
table.kt { border: 1pt solid #000000 }
th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt;
padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
tr.kt { }
td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0;
padding-left: 6pt; padding-right: 6pt; padding-top: 2pt;
padding-bottom: 2pt }
/*-----------------------------------------------------------
-----------------------------------------------------------*/
-->
</style>
</head>
<body>
<h1>Changes to CMSIS version V1.20</h1>
<hr>
<h2>1. Removed CMSIS Middelware packages</h2>
<p>
CMSIS Middleware is on hold from ARM side until a agreement between all CMSIS partners is found.
</p>
<h2>2. SystemFrequency renamed to SystemCoreClock</h2>
<p>
The variable name <strong>SystemCoreClock</strong> is more precise than <strong>SystemFrequency</strong>
because the variable holds the clock value at which the core is running.
</p>
<h2>3. Changed startup concept</h2>
<p>
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.
</p>
<h3>Changed startup concept</h3>
<ul>
<li>
SystemInit() is called from startup file before <strong>premain</strong>.
</li>
<li>
<strong>SystemInit()</strong> configures the clock system and also configures
an existing external memory controller.
</li>
<li>
<strong>SystemInit()</strong> must not use global variables.
</li>
<li>
<strong>SystemCoreClock</strong> is initialized with a correct predefined value.
</li>
<li>
Additional function <strong>void SystemCoreClockUpdate (void)</strong> is provided.<br>
<strong>SystemCoreClockUpdate()</strong> updates the variable <strong>SystemCoreClock</strong>
and must be called whenever the core clock is changed.<br>
<strong>SystemCoreClockUpdate()</strong> evaluates the clock register settings and calculates
the current core clock.
</li>
</ul>
<h2>4. Advanced Debug Functions</h2>
<p>
ITM communication channel is only capable for OUT direction. To allow also communication for
IN direction a simple concept is provided.
</p>
<ul>
<li>
Global variable <strong>volatile int ITM_RxBuffer</strong> used for IN data.
</li>
<li>
Function <strong>int ITM_CheckChar (void)</strong> checks if a new character is available.
</li>
<li>
Function <strong>int ITM_ReceiveChar (void)</strong> retrieves the new character.
</li>
</ul>
<p>
For detailed explanation see file <strong>CMSIS debug support.htm</strong>.
</p>
<h2>5. Core Register Bit Definitions</h2>
<p>
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.
</p>
<p>
e.g. SysTick structure with bit definitions
</p>
<pre>
/** @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 */</pre>
<h2>7. DoxyGen Tags</h2>
<p>
DoxyGen tags in files core_cm3.[c,h] and core_cm0.[c,h] are reworked to create proper documentation
using DoxyGen.
</p>
<h2>8. Folder Structure</h2>
<p>
The folder structure is changed to differentiate the single support packages.
</p>
<ul>
<li>CM0</li>
<li>CM3
<ul>
<li>CoreSupport</li>
<li>DeviceSupport</li>
<ul>
<li>Vendor
<ul>
<li>Device
<ul>
<li>Startup
<ul>
<li>Toolchain</li>
<li>Toolchain</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>Device</li>
<li>...</li>
</ul>
</li>
<li>Vendor</li>
<li>...</li>
</ul>
</li>
<li>Example
<ul>
<li>Toolchain
<ul>
<li>Device</li>
<li>Device</li>
<li>...</li>
</ul>
</li>
<li>Toolchain</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>Documentation</li>
</ul>
<h2>9. Open Points</h2>
<p>
Following points need to be clarified and solved:
</p>
<ul>
<li>
<p>
Equivalent C and Assembler startup files.
</p>
<p>
Is there a need for having C startup files although assembler startup files are
very efficient and do not need to be changed?
<p/>
</li>
<li>
<p>
Placing of HEAP in external RAM.
</p>
<p>
It must be possible to place HEAP in external RAM if the device supports an
external memory controller.
</p>
</li>
<li>
<p>
Placing of STACK /HEAP.
</p>
<p>
STACK should always be placed at the end of internal RAM.
</p>
<p>
If HEAP is placed in internal RAM than it should be placed after RW ZI section.
</p>
</li>
<li>
<p>
Removing core_cm3.c and core_cm0.c.
</p>
<p>
On a long term the functions in core_cm3.c and core_cm0.c must be replaced with
appropriate compiler intrinsics.
</p>
</li>
</ul>
<h2>10. Limitations</h2>
<p>
The following limitations are not covered with the current CMSIS version:
</p>
<ul>
<li>
No <strong>C startup files</strong> for ARM toolchain are provided.
</li>
<li>
No <strong>C startup files</strong> for GNU toolchain are provided.
</li>
<li>
No <strong>C startup files</strong> for IAR toolchain are provided.
</li>
<li>
No <strong>Tasking</strong> projects are provided yet.
</li>
</ul>

View File

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

View File

@ -1,102 +1,168 @@
<!DOCTYPE CrossStudio_Project_File>
<solution Name="stm32f103_crossworks" target="8" version="2">
<project Name="openblt_olimex_stm32p103">
<configuration Name="Common" Placement="Flash" Target="STM32F103RB" arm_architecture="v7M" arm_core_type="Cortex-M3" arm_linker_heap_size="128" arm_linker_jtag_pad_pre_dr="1" arm_linker_jtag_pad_pre_ir="5" arm_linker_process_stack_size="0" arm_linker_stack_size="128" arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000" arm_target_debug_interface_type="ADIv5" arm_target_loader_applicable_loaders="Flash" arm_target_loader_default_loader="Flash" arm_target_loader_parameter="8000000" arm_use_gcc_libraries="Yes" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_only_additional_options="-I./..;-I./../lib/fatfs;-I./../lib/STM32F10x_StdPeriph_Driver;-I./../lib/STM32F10x_StdPeriph_Driver/inc;-I./../lib/CMSIS/CM3/CoreSupport;-I./../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x;-I./../../../../Source;-I./../../../../Source/third_party/fatfs/src;-I./../../../../Source/ARMCM3_STM32F1;-I./../../../../Source/ARMCM3_STM32F1/Crossworks" c_preprocessor_definitions="USE_STDPERIPH_DRIVER ;VECT_TAB_FLASH;GCC_ARMCM3" c_user_include_directories="$(TargetsDir)/STM32/include" gcc_optimization_level="Level 1" link_include_standard_libraries="Yes" linker_keep_symbols="_vectors;EntryFromProg" linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml" linker_output_format="srec" linker_printf_enabled="No" linker_printf_width_precision_supported="No" linker_scanf_enabled="No" linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml" oscillator_frequency="8MHz" project_directory="" project_type="Executable" property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml" target_get_partname_script="GetPartName()" target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)" target_reset_script="Reset()"/>
<configuration Name="Flash" arm_target_flash_loader_file_path="$(TargetsDir)/STM32/Release/Loader_rpc.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" arm_target_loader_can_lock_all="No" arm_target_loader_can_lock_range="No" arm_target_loader_can_unlock_all="No" arm_target_loader_can_unlock_range="No" target_reset_script="FLASHReset()"/>
<configuration
Name="Common"
Placement="Flash"
Target="STM32F103RB"
arm_architecture="v7M"
arm_core_type="Cortex-M3"
arm_linker_heap_size="128"
arm_linker_jtag_pad_pre_dr="1"
arm_linker_jtag_pad_pre_ir="5"
arm_linker_process_stack_size="0"
arm_linker_stack_size="128"
arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll"
arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000"
arm_target_debug_interface_type="ADIv5"
arm_target_loader_applicable_loaders="Flash"
arm_target_loader_default_loader="Flash"
arm_target_loader_parameter="8000000"
arm_use_gcc_libraries="Yes"
build_intermediate_directory="$(Configuration)/../../obj"
build_output_directory="$(ProjectDir)/../bin"
c_only_additional_options="-I./..;-I./../lib/fatfs;-I./../lib/STM32F10x_StdPeriph_Driver;-I./../lib/STM32F10x_StdPeriph_Driver/inc;-I./../lib/CMSIS/CM3/CoreSupport;-I./../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x;-I./../../../../Source;-I./../../../../Source/third_party/fatfs/src;-I./../../../../Source/ARMCM3_STM32F1;-I./../../../../Source/ARMCM3_STM32F1/Crossworks"
c_preprocessor_definitions="STM32F10X_MD;USE_STDPERIPH_DRIVER ;VECT_TAB_FLASH;GCC_ARMCM3"
c_user_include_directories="$(TargetsDir)/STM32/include"
gcc_optimization_level="Level 1"
link_include_standard_libraries="Yes"
linker_keep_symbols="_vectors;EntryFromProg"
linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml"
linker_output_format="srec"
linker_printf_enabled="No"
linker_printf_width_precision_supported="No"
linker_scanf_enabled="No"
linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml"
oscillator_frequency="8MHz"
project_directory=""
project_type="Executable"
property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml"
target_get_partname_script="GetPartName()"
target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)"
target_reset_script="Reset()" />
<configuration
Name="Flash"
arm_target_flash_loader_file_path="$(TargetsDir)/STM32/Release/Loader_rpc.elf"
arm_target_flash_loader_type="LIBMEM RPC Loader"
arm_target_loader_can_lock_all="No"
arm_target_loader_can_lock_range="No"
arm_target_loader_can_unlock_all="No"
arm_target_loader_can_unlock_range="No"
target_reset_script="FLASHReset()" />
<folder Name="Source Files">
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc"/>
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc" />
<folder Name="Demo">
<folder Name="Boot" file_name="">
<file file_name="../hooks.c"/>
<file file_name="../main.c"/>
<file file_name="../stm32f10x.h"/>
<folder Name="Boot">
<file file_name="../hooks.c" />
<file file_name="../main.c" />
<file file_name="../stm32f10x.h" />
<folder Name="lib">
<folder Name="cmsis" file_name="">
<file file_name="../lib/CMSIS/CM3/CoreSupport/core_cm3.c"/>
<file file_name="../lib/CMSIS/CM3/CoreSupport/core_cm3.h"/>
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h"/>
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c"/>
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h"/>
<folder Name="cmsis">
<file file_name="../lib/CMSIS/CM3/CoreSupport/core_cm3.h" />
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h" />
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c" />
<file file_name="../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h" />
</folder>
<folder Name="fatfs" file_name="">
<file file_name="../lib/fatfs/ffconf.h"/>
<file file_name="../lib/fatfs/mmc.c"/>
<folder Name="fatfs">
<file file_name="../lib/fatfs/ffconf.h" />
<file file_name="../lib/fatfs/mmc.c" />
</folder>
<folder Name="stdperiphlib" file_name="">
<file file_name="../lib/STM32F10x_StdPeriph_Driver/stm32f10x_conf.h"/>
<file file_name="../lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c"/>
<file file_name="../lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c"/>
<file file_name="../lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c"/>
<file file_name="../lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c"/>
<file file_name="../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h"/>
<file file_name="../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h"/>
<file file_name="../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h"/>
<file file_name="../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h"/>
<folder Name="stdperiphlib">
<file file_name="../lib/STM32F10x_StdPeriph_Driver/stm32f10x_conf.h" />
<file file_name="../lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c" />
<file file_name="../lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c" />
<file file_name="../lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c" />
<file file_name="../lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c" />
<file file_name="../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h" />
<file file_name="../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h" />
<file file_name="../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h" />
<file file_name="../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h" />
</folder>
</folder>
<file file_name="../blt_conf.h"/>
<file file_name="../blt_conf.h" />
</folder>
</folder>
<folder Name="Source" file_name="">
<folder Name="ARMCM3_STM32F1" file_name="">
<folder Name="Crossworks" file_name=""/>
<file file_name="../../../../Source/ARMCM3_STM32F1/can.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/cpu.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/flash.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/flash.h"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/nvm.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/timer.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/types.h"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/uart.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/usb.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/cpu_comp.c"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/cstart.s"/>
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/vectors.c"/>
<folder Name="Source">
<folder Name="ARMCM3_STM32F1">
<folder Name="Crossworks" />
<file file_name="../../../../Source/ARMCM3_STM32F1/can.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/cpu.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/flash.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/flash.h" />
<file file_name="../../../../Source/ARMCM3_STM32F1/nvm.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/timer.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/types.h" />
<file file_name="../../../../Source/ARMCM3_STM32F1/uart.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/usb.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/cpu_comp.c" />
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/cstart.s" />
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/vectors.c" />
</folder>
<file file_name="../../../../Source/assert.c"/>
<file file_name="../../../../Source/assert.h"/>
<file file_name="../../../../Source/backdoor.c"/>
<file file_name="../../../../Source/backdoor.h"/>
<file file_name="../../../../Source/boot.c"/>
<file file_name="../../../../Source/boot.h"/>
<file file_name="../../../../Source/com.c"/>
<file file_name="../../../../Source/com.h"/>
<file file_name="../../../../Source/cop.c"/>
<file file_name="../../../../Source/cop.h"/>
<file file_name="../../../../Source/plausibility.h"/>
<file file_name="../../../../Source/xcp.c"/>
<file file_name="../../../../Source/xcp.h"/>
<file file_name="../../../../Source/file.c"/>
<file file_name="../../../../Source/file.h"/>
<file file_name="../../../../Source/assert.c" />
<file file_name="../../../../Source/assert.h" />
<file file_name="../../../../Source/backdoor.c" />
<file file_name="../../../../Source/backdoor.h" />
<file file_name="../../../../Source/boot.c" />
<file file_name="../../../../Source/boot.h" />
<file file_name="../../../../Source/com.c" />
<file file_name="../../../../Source/com.h" />
<file file_name="../../../../Source/cop.c" />
<file file_name="../../../../Source/cop.h" />
<file file_name="../../../../Source/plausibility.h" />
<file file_name="../../../../Source/xcp.c" />
<file file_name="../../../../Source/xcp.h" />
<file file_name="../../../../Source/file.c" />
<file file_name="../../../../Source/file.h" />
<folder Name="third_party">
<folder Name="fatfs" file_name="">
<file file_name="../../../../Source/third_party/fatfs/src/diskio.h"/>
<file file_name="../../../../Source/third_party/fatfs/src/ff.c"/>
<file file_name="../../../../Source/third_party/fatfs/src/ff.h"/>
<file file_name="../../../../Source/third_party/fatfs/src/integer.h"/>
<file file_name="../../../../Source/third_party/fatfs/src/option/unicode.c"/>
<folder Name="fatfs">
<file file_name="../../../../Source/third_party/fatfs/src/diskio.h" />
<file file_name="../../../../Source/third_party/fatfs/src/ff.c" />
<file file_name="../../../../Source/third_party/fatfs/src/ff.h" />
<file file_name="../../../../Source/third_party/fatfs/src/integer.h" />
<file file_name="../../../../Source/third_party/fatfs/src/option/unicode.c" />
</folder>
</folder>
<file file_name="../../../../Source/can.h"/>
<file file_name="../../../../Source/cpu.h"/>
<file file_name="../../../../Source/nvm.h"/>
<file file_name="../../../../Source/timer.h"/>
<file file_name="../../../../Source/uart.h"/>
<file file_name="../../../../Source/can.h" />
<file file_name="../../../../Source/cpu.h" />
<file file_name="../../../../Source/nvm.h" />
<file file_name="../../../../Source/timer.h" />
<file file_name="../../../../Source/uart.h" />
</folder>
</folder>
<folder Name="System Files" file_name="">
<folder Name="System Files">
<file file_name="$(TargetsDir)/STM32/STM32_Target.js">
<configuration Name="Common" file_type="Reset Script"/>
<configuration Name="Common" file_type="Reset Script" />
</file>
<file file_name="../../../../Source/ARMCM3_STM32F1/Crossworks/memory.x">
<configuration Name="Common" file_type="Linker Script"/>
<configuration Name="Common" file_type="Linker Script" />
</file>
</folder>
<configuration Name="Debug" c_only_additional_options=""/>
<configuration Name="Debug" c_only_additional_options="" />
</project>
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug"/>
<configuration Name="THUMB" Platform="ARM" arm_instruction_set="THUMB" arm_library_instruction_set="THUMB" c_preprocessor_definitions="__THUMB" hidden="Yes"/>
<configuration Name="Debug" build_debug_information="Yes" c_preprocessor_definitions="DEBUG" gcc_optimization_level="None" hidden="Yes" link_include_startup_code="No"/>
<configuration Name="THUMB Release" inherited_configurations="THUMB;Release"/>
<configuration Name="Release" build_debug_information="No" c_additional_options="-g1" c_preprocessor_definitions="NDEBUG" gcc_optimization_level="Level 1" hidden="Yes" link_include_startup_code="No"/>
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug" />
<configuration
Name="THUMB"
Platform="ARM"
arm_instruction_set="THUMB"
arm_library_instruction_set="THUMB"
c_preprocessor_definitions="__THUMB"
hidden="Yes" />
<configuration
Name="Debug"
build_debug_information="Yes"
c_preprocessor_definitions="DEBUG"
gcc_optimization_level="None"
hidden="Yes"
link_include_startup_code="No" />
<configuration
Name="THUMB Release"
inherited_configurations="THUMB;Release" />
<configuration
Name="Release"
build_debug_information="No"
c_additional_options="-g1"
c_preprocessor_definitions="NDEBUG"
gcc_optimization_level="Level 1"
hidden="Yes"
link_include_startup_code="No" />
</solution>

View File

@ -1,19 +1,28 @@
<!DOCTYPE CrossStudio_for_ARM_Session_File>
<!DOCTYPE CrossStudio_Session_File>
<session>
<Bookmarks/>
<Breakpoints/>
<Breakpoints>
<Exceptions set="MemManage;UsageFault_Coprocessor;UsageFault_CheckingError;UsageFault_StateError;BusFault;ExceptionEntryReturnFault;HardFault" />
</Breakpoints>
<ExecutionProfileWindow/>
<FrameBufferWindow>
<FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
</FrameBufferWindow>
<Memory1>
<MemoryWindow autoEvaluate="0" addressText="0x08004004" numColumns="8" sizeText="4" dataSize="1" radix="16" name="openbtl_olimex_stm32p103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="0x08004004" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="4" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_stm32p103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="0x08004004" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="4" viewMode="0" dataSize="1" radix="16" name="openblt_olimex_stm32p103" addressSpace="" />
</Memory1>
<Memory2>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_stm32p103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_stm32p103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openblt_olimex_stm32p103" addressSpace="" />
</Memory2>
<Memory3>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_stm32p103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_stm32p103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openblt_olimex_stm32p103" addressSpace="" />
</Memory3>
<Memory4>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="openbtl_olimex_stm32p103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openbtl_olimex_stm32p103" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="openblt_olimex_stm32p103" addressSpace="" />
</Memory4>
<Project>
<ProjectSessionItem path="stm32f103_crossworks" name="unnamed" />
@ -21,18 +30,24 @@
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32p103;Source Files" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32p103;Source Files;Demo" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32p103;Source Files;Demo;Boot" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32p103;Source Files;Demo;Boot;lib" name="unnamed" />
<ProjectSessionItem path="stm32f103_crossworks;openblt_olimex_stm32p103;Source Files;Demo;Boot;lib;cmsis" name="unnamed" />
</Project>
<Register1>
<RegisterWindow openNodes="CPU" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_stm32p103" />
<RegisterWindow openNodes="CPU" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_stm32p103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" name="openblt_olimex_stm32p103" />
</Register1>
<Register2>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_stm32p103" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_stm32p103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" name="openblt_olimex_stm32p103" />
</Register2>
<Register3>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_stm32p103" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_stm32p103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" name="openblt_olimex_stm32p103" />
</Register3>
<Register4>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="openbtl_olimex_stm32p103" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="openbtl_olimex_stm32p103" />
<RegisterWindow openNodes="CPU - Current Context" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" name="openblt_olimex_stm32p103" />
</Register4>
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
<TraceWindow>
@ -40,9 +55,9 @@
</TraceWindow>
<Watch1>
<Watches active="1" update="Never" >
<Watchpoint linenumber="124" radix="-1" name="free_running_counter_now" expression="free_running_counter_now" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="152" radix="-1" name="free_running_counter_accumulative" expression="free_running_counter_accumulative" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="121" radix="-1" name="free_running_counter_last" expression="free_running_counter_last" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint evalMode="0" linenumber="124" numelements="0" radix="-1" name="free_running_counter_now" list="" expression="free_running_counter_now" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint evalMode="0" linenumber="152" numelements="0" radix="-1" name="free_running_counter_accumulative" list="" expression="free_running_counter_accumulative" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint evalMode="0" linenumber="121" numelements="0" radix="-1" name="free_running_counter_last" list="" expression="free_running_counter_last" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
</Watches>
</Watch1>
<Watch2>
@ -55,7 +70,7 @@
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM3_STM32F1_Olimex_STM32P103_Crossworks\Boot\main.c" y="0" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM3_STM32F1_Olimex_STM32P103_Crossworks\Boot\main.c" left="18" selected="1" name="unnamed" top="0" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="../main.c" y="51" path="../main.c" left="0" selected="1" name="unnamed" top="31" />
</Files>
<ARMCrossStudioWindow activeProject="openbtl_olimex_stm32p103" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Source\ARMCM3_STM32F1\Crossworks" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
<ARMCrossStudioWindow activeProject="openblt_olimex_stm32p103" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:/Work/software/OpenBLT/Target/Source/ARMCM3_STM32F1/Crossworks" fileDialogDefaultFilter="*.c" autoConnectCapabilities="3711" debugSearchPath="" buildConfiguration="THUMB Debug" />
</session>

View File

@ -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 <stdint.h>
/* 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

View File

@ -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 <cmsis_iar.h>
#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/
/* TI CCS specific functions */
#include <cmsis_ccs.h>
#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 */

View File

@ -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 <cmsis_iar.h>
#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/
/* TI CCS specific functions */
#include <cmsis_ccs.h>
#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 */

View File

@ -1,243 +0,0 @@
<html>
<head>
<title>CMSIS Debug Support</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<style>
<!--
/*-----------------------------------------------------------
Keil Software CHM Style Sheet
-----------------------------------------------------------*/
body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family:
Verdana, Arial, 'Sans Serif' }
a:link { color: #0000FF; text-decoration: underline }
a:visited { color: #0000FF; text-decoration: underline }
a:active { color: #FF0000; text-decoration: underline }
a:hover { color: #FF0000; text-decoration: underline }
h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold;
text-align: Center; margin-right: 3 }
h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold;
background-color: #CCCCCC; margin-top: 24; margin-bottom: 3;
padding: 6 }
h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color:
#CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC;
margin-left: 24; margin-right: 24 }
ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
ol { margin-top: 6pt; margin-bottom: 0 }
li { clear: both; margin-bottom: 6pt }
table { font-size: 100%; border-width: 0; padding: 0 }
th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align:
bottom; padding-right: 6pt }
tr { text-align: left; vertical-align: top }
td { text-align: left; vertical-align: top; padding-right: 6pt }
.ToolT { font-size: 8pt; color: #808080 }
.TinyT { font-size: 8pt; text-align: Center }
code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier;
line-height: 120%; font-style: normal }
/*-----------------------------------------------------------
Notes
-----------------------------------------------------------*/
p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
/*-----------------------------------------------------------
Expanding/Contracting Divisions
-----------------------------------------------------------*/
#expand { text-decoration: none; margin-bottom: 3pt }
img.expand { border-style: none; border-width: medium }
div.expand { display: none; margin-left: 9pt; margin-top: 0 }
/*-----------------------------------------------------------
Where List Tags
-----------------------------------------------------------*/
p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
table.wh { width: 100% }
td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom:
6pt }
td.whDesc { padding-bottom: 6pt }
/*-----------------------------------------------------------
Keil Table Tags
-----------------------------------------------------------*/
table.kt { border: 1pt solid #000000 }
th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt;
padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
tr.kt { }
td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0;
padding-left: 6pt; padding-right: 6pt; padding-top: 2pt;
padding-bottom: 2pt }
/*-----------------------------------------------------------
-----------------------------------------------------------*/
-->
</style>
</head>
<body>
<h1>CMSIS Debug Support</h1>
<hr>
<h2>Cortex-M3 ITM Debug Access</h2>
<p>
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:
</p>
<ul>
<li>ITM Channel 0: used for printf-style output via the debug interface.</li>
<li>ITM Channel 31: is reserved for RTOS kernel awareness debugging.</li>
</ul>
<h2>Debug IN / OUT functions</h2>
<p>CMSIS provides following debug functions:</p>
<ul>
<li>ITM_SendChar (uses ITM channel 0)</li>
<li>ITM_ReceiveChar (uses global variable)</li>
<li>ITM_CheckChar (uses global variable)</li>
</ul>
<h3>ITM_SendChar</h3>
<p>
<strong>ITM_SendChar</strong> is used to transmit a character over ITM channel 0 from
the microcontroller system to the debug system. <br>
Only a 8 bit value is transmitted.
</p>
<pre>
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) &amp;&amp;
(ITM-&gt;TCR & ITM_TCR_ITMENA) &amp;&amp;
(ITM-&gt;TER & (1UL &lt;&lt; 0)) )
{
while (ITM-&gt;PORT[0].u32 == 0);
ITM-&gt;PORT[0].u8 = (uint8_t)ch;
}
return (ch);
}</pre>
<h3>ITM_ReceiveChar</h3>
<p>
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.
</p>
<p>
The globale variable <strong>ITM_RxBuffer</strong> is used to transmit a 8 bit value from debug system
to microcontroller system. <strong>ITM_RxBuffer</strong> is 32 bit wide to enshure a proper handshake.
</p>
<pre>
extern volatile int ITM_RxBuffer; /* variable to receive characters */
</pre>
<p>
A dedicated bit pattern is used to determin if <strong>ITM_RxBuffer</strong> is empty
or contains a valid value.
</p>
<pre>
#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */
</pre>
<p>
<strong>ITM_ReceiveChar</strong> 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.
</p>
<pre>
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);
}
</pre>
<h3>ITM_CheckChar</h3>
<p>
<strong>ITM_CheckChar</strong> is used to check if a character is received.
</p>
<pre>
static __INLINE int ITM_CheckChar (void) {
if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
return (0); /* no character available */
} else {
return (1); /* character available */
}
}</pre>
<h2>ITM Debug Support in uVision</h2>
<p>
uVision uses in a debug session the <strong>Debug (printf) Viewer</strong> window to
display the debug data.
</p>
<p>Direction microcontroller system -&gt; uVision:</p>
<ul>
<li>
Characters received via ITM communication channel 0 are written in a printf style
to <strong>Debug (printf) Viewer</strong> window.
</li>
</ul>
<p>Direction uVision -&gt; microcontroller system:</p>
<ul>
<li>Check if <strong>ITM_RxBuffer</strong> variable is available (only performed once).</li>
<li>Read character from <strong>Debug (printf) Viewer</strong> window.</li>
<li>If <strong>ITM_RxBuffer</strong> empty write character to <strong>ITM_RxBuffer</strong>.</li>
</ul>
<p class="Note">Note</p>
<ul>
<li><p>Current solution does not use a buffer machanism for trasmitting the characters.</p>
</li>
</ul>
<h2>RTX Kernel awareness in uVision</h2>
<p>
uVision / RTX are using a simple and efficient solution for RTX Kernel awareness.
No format overhead is necessary.<br>
uVsion debugger decodes the RTX events via the 32 / 16 / 8 bit ITM write access
to ITM communication channel 31.
</p>
<p>Following RTX events are traced:</p>
<ul>
<li>Task Create / Delete event
<ol>
<li>32 bit access. Task start address is transmitted</li>
<li>16 bit access. Task ID and Create/Delete flag are transmitted<br>
High byte holds Create/Delete flag, Low byte holds TASK ID.
</li>
</ol>
</li>
<li>Task switch event
<ol>
<li>8 bit access. Task ID of current task is transmitted</li>
</ol>
</li>
</ul>
<p class="Note">Note</p>
<ul>
<li><p>Other RTOS information could be retrieved via memory read access in a polling mode manner.</p>
</li>
</ul>
<p class="MsoNormal"><span lang="EN-GB">&nbsp;</span></p>
<hr>
<p class="TinyT">Copyright © KEIL - An ARM Company.<br>
All rights reserved.<br>
Visit our web site at <a href="http://www.keil.com">www.keil.com</a>.
</p>
</body>
</html>

View File

@ -1,320 +0,0 @@
<html>
<head>
<title>CMSIS Changes</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<style>
<!--
/*-----------------------------------------------------------
Keil Software CHM Style Sheet
-----------------------------------------------------------*/
body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family:
Verdana, Arial, 'Sans Serif' }
a:link { color: #0000FF; text-decoration: underline }
a:visited { color: #0000FF; text-decoration: underline }
a:active { color: #FF0000; text-decoration: underline }
a:hover { color: #FF0000; text-decoration: underline }
h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold;
text-align: Center; margin-right: 3 }
h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold;
background-color: #CCCCCC; margin-top: 24; margin-bottom: 3;
padding: 6 }
h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color:
#CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC;
margin-left: 24; margin-right: 24 }
ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
ol { margin-top: 6pt; margin-bottom: 0 }
li { clear: both; margin-bottom: 6pt }
table { font-size: 100%; border-width: 0; padding: 0 }
th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align:
bottom; padding-right: 6pt }
tr { text-align: left; vertical-align: top }
td { text-align: left; vertical-align: top; padding-right: 6pt }
.ToolT { font-size: 8pt; color: #808080 }
.TinyT { font-size: 8pt; text-align: Center }
code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier;
line-height: 120%; font-style: normal }
/*-----------------------------------------------------------
Notes
-----------------------------------------------------------*/
p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
/*-----------------------------------------------------------
Expanding/Contracting Divisions
-----------------------------------------------------------*/
#expand { text-decoration: none; margin-bottom: 3pt }
img.expand { border-style: none; border-width: medium }
div.expand { display: none; margin-left: 9pt; margin-top: 0 }
/*-----------------------------------------------------------
Where List Tags
-----------------------------------------------------------*/
p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
table.wh { width: 100% }
td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom:
6pt }
td.whDesc { padding-bottom: 6pt }
/*-----------------------------------------------------------
Keil Table Tags
-----------------------------------------------------------*/
table.kt { border: 1pt solid #000000 }
th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt;
padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
tr.kt { }
td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0;
padding-left: 6pt; padding-right: 6pt; padding-top: 2pt;
padding-bottom: 2pt }
/*-----------------------------------------------------------
-----------------------------------------------------------*/
-->
</style>
</head>
<body>
<h1>Changes to CMSIS version V1.20</h1>
<hr>
<h2>1. Removed CMSIS Middelware packages</h2>
<p>
CMSIS Middleware is on hold from ARM side until a agreement between all CMSIS partners is found.
</p>
<h2>2. SystemFrequency renamed to SystemCoreClock</h2>
<p>
The variable name <strong>SystemCoreClock</strong> is more precise than <strong>SystemFrequency</strong>
because the variable holds the clock value at which the core is running.
</p>
<h2>3. Changed startup concept</h2>
<p>
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.
</p>
<h3>Changed startup concept</h3>
<ul>
<li>
SystemInit() is called from startup file before <strong>premain</strong>.
</li>
<li>
<strong>SystemInit()</strong> configures the clock system and also configures
an existing external memory controller.
</li>
<li>
<strong>SystemInit()</strong> must not use global variables.
</li>
<li>
<strong>SystemCoreClock</strong> is initialized with a correct predefined value.
</li>
<li>
Additional function <strong>void SystemCoreClockUpdate (void)</strong> is provided.<br>
<strong>SystemCoreClockUpdate()</strong> updates the variable <strong>SystemCoreClock</strong>
and must be called whenever the core clock is changed.<br>
<strong>SystemCoreClockUpdate()</strong> evaluates the clock register settings and calculates
the current core clock.
</li>
</ul>
<h2>4. Advanced Debug Functions</h2>
<p>
ITM communication channel is only capable for OUT direction. To allow also communication for
IN direction a simple concept is provided.
</p>
<ul>
<li>
Global variable <strong>volatile int ITM_RxBuffer</strong> used for IN data.
</li>
<li>
Function <strong>int ITM_CheckChar (void)</strong> checks if a new character is available.
</li>
<li>
Function <strong>int ITM_ReceiveChar (void)</strong> retrieves the new character.
</li>
</ul>
<p>
For detailed explanation see file <strong>CMSIS debug support.htm</strong>.
</p>
<h2>5. Core Register Bit Definitions</h2>
<p>
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.
</p>
<p>
e.g. SysTick structure with bit definitions
</p>
<pre>
/** @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 */</pre>
<h2>7. DoxyGen Tags</h2>
<p>
DoxyGen tags in files core_cm3.[c,h] and core_cm0.[c,h] are reworked to create proper documentation
using DoxyGen.
</p>
<h2>8. Folder Structure</h2>
<p>
The folder structure is changed to differentiate the single support packages.
</p>
<ul>
<li>CM0</li>
<li>CM3
<ul>
<li>CoreSupport</li>
<li>DeviceSupport</li>
<ul>
<li>Vendor
<ul>
<li>Device
<ul>
<li>Startup
<ul>
<li>Toolchain</li>
<li>Toolchain</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>Device</li>
<li>...</li>
</ul>
</li>
<li>Vendor</li>
<li>...</li>
</ul>
</li>
<li>Example
<ul>
<li>Toolchain
<ul>
<li>Device</li>
<li>Device</li>
<li>...</li>
</ul>
</li>
<li>Toolchain</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>Documentation</li>
</ul>
<h2>9. Open Points</h2>
<p>
Following points need to be clarified and solved:
</p>
<ul>
<li>
<p>
Equivalent C and Assembler startup files.
</p>
<p>
Is there a need for having C startup files although assembler startup files are
very efficient and do not need to be changed?
<p/>
</li>
<li>
<p>
Placing of HEAP in external RAM.
</p>
<p>
It must be possible to place HEAP in external RAM if the device supports an
external memory controller.
</p>
</li>
<li>
<p>
Placing of STACK /HEAP.
</p>
<p>
STACK should always be placed at the end of internal RAM.
</p>
<p>
If HEAP is placed in internal RAM than it should be placed after RW ZI section.
</p>
</li>
<li>
<p>
Removing core_cm3.c and core_cm0.c.
</p>
<p>
On a long term the functions in core_cm3.c and core_cm0.c must be replaced with
appropriate compiler intrinsics.
</p>
</li>
</ul>
<h2>10. Limitations</h2>
<p>
The following limitations are not covered with the current CMSIS version:
</p>
<ul>
<li>
No <strong>C startup files</strong> for ARM toolchain are provided.
</li>
<li>
No <strong>C startup files</strong> for GNU toolchain are provided.
</li>
<li>
No <strong>C startup files</strong> for IAR toolchain are provided.
</li>
<li>
No <strong>Tasking</strong> projects are provided yet.
</li>
</ul>

View File

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

View File

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

View File

@ -1,100 +1,146 @@
<!DOCTYPE CrossStudio_Project_File>
<solution Name="stm32f103_crossworks" target="8" version="2">
<project Name="demoprog_olimex_stm32p103">
<configuration Name="Common" Placement="Flash" Target="STM32F103RB" arm_architecture="v7M" arm_core_type="Cortex-M3" arm_linker_heap_size="128" arm_linker_jtag_pad_pre_dr="1" arm_linker_jtag_pad_pre_ir="5" arm_linker_process_stack_size="0" arm_linker_stack_size="128" arm_long_calls="Yes" arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000" arm_target_debug_interface_type="ADIv5" arm_target_loader_applicable_loaders="Flash" arm_target_loader_default_loader="Flash" arm_target_loader_parameter="8000000" arm_use_gcc_libraries="Yes" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_only_additional_options="" c_preprocessor_definitions="USE_STDPERIPH_DRIVER ;VECT_TAB_FLASH;GCC_ARMCM3" c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../lib/stdperiphlib;$(ProjectDir)/../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc;$(ProjectDir)/../lib/stdperiphlib/CMSIS/CM3/CoreSupport;$(ProjectDir)/../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x" gcc_optimization_level="None" link_include_standard_libraries="Yes" linker_keep_symbols="_vectors" linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml" linker_output_format="srec" linker_printf_enabled="No" linker_printf_width_precision_supported="No" linker_scanf_enabled="No" linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml" oscillator_frequency="8MHz" project_directory="" project_type="Executable" property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml" target_get_partname_script="GetPartName()" target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)" target_reset_script="Reset()"/>
<configuration Name="Flash" arm_target_flash_loader_file_path="$(TargetsDir)/STM32/Release/Loader_rpc.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" arm_target_loader_can_lock_all="No" arm_target_loader_can_lock_range="No" arm_target_loader_can_unlock_all="No" arm_target_loader_can_unlock_range="No" target_reset_script="FLASHReset()"/>
<configuration
Name="Common"
Placement="Flash"
Target="STM32F103RB"
arm_architecture="v7M"
arm_core_type="Cortex-M3"
arm_linker_heap_size="128"
arm_linker_jtag_pad_pre_dr="1"
arm_linker_jtag_pad_pre_ir="5"
arm_linker_process_stack_size="0"
arm_linker_stack_size="128"
arm_long_calls="Yes"
arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll"
arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000"
arm_target_debug_interface_type="ADIv5"
arm_target_loader_applicable_loaders="Flash"
arm_target_loader_default_loader="Flash"
arm_target_loader_parameter="8000000"
arm_use_gcc_libraries="Yes"
build_intermediate_directory="$(Configuration)/../../obj"
build_output_directory="$(ProjectDir)/../bin"
c_only_additional_options=""
c_preprocessor_definitions="STM32F10X_MD;USE_STDPERIPH_DRIVER ;VECT_TAB_FLASH;GCC_ARMCM3"
c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../lib/stdperiphlib;$(ProjectDir)/../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc;$(ProjectDir)/../lib/stdperiphlib/CMSIS/CM3/CoreSupport;$(ProjectDir)/../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x"
gcc_optimization_level="None"
link_include_standard_libraries="Yes"
linker_keep_symbols="_vectors"
linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml"
linker_output_format="srec"
linker_printf_enabled="No"
linker_printf_width_precision_supported="No"
linker_scanf_enabled="No"
linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml"
oscillator_frequency="8MHz"
project_directory=""
project_type="Executable"
property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml"
target_get_partname_script="GetPartName()"
target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)"
target_reset_script="Reset()" />
<configuration
Name="Flash"
arm_target_flash_loader_file_path="$(TargetsDir)/STM32/Release/Loader_rpc.elf"
arm_target_flash_loader_type="LIBMEM RPC Loader"
arm_target_loader_can_lock_all="No"
arm_target_loader_can_lock_range="No"
arm_target_loader_can_unlock_all="No"
arm_target_loader_can_unlock_range="No"
target_reset_script="FLASHReset()" />
<folder Name="Source Files">
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc"/>
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc" />
<folder Name="Demo">
<folder Name="Prog">
<file file_name="../cstart.s"/>
<file file_name="../header.h"/>
<file file_name="../led.c"/>
<file file_name="../led.h"/>
<file file_name="../main.c"/>
<file file_name="../timer.c"/>
<file file_name="../timer.h"/>
<file file_name="../vectors.c"/>
<file file_name="../boot.c"/>
<file file_name="../boot.h"/>
<file file_name="../cstart.s" />
<file file_name="../header.h" />
<file file_name="../led.c" />
<file file_name="../led.h" />
<file file_name="../main.c" />
<file file_name="../timer.c" />
<file file_name="../timer.h" />
<file file_name="../vectors.c" />
<file file_name="../boot.c" />
<file file_name="../boot.h" />
</folder>
</folder>
</folder>
<folder Name="System Files">
<file file_name="$(TargetsDir)/STM32/STM32_Target.js">
<configuration Name="Common" file_type="Reset Script"/>
<configuration Name="Common" file_type="Reset Script" />
</file>
<file file_name="../memory.x">
<configuration Name="Common" file_type="Linker Script"/>
<configuration Name="Common" file_type="Linker Script" />
</file>
</folder>
<configuration Name="Debug" c_only_additional_options=""/>
<configuration Name="Debug" c_only_additional_options="" />
<folder Name="Library Files">
<file file_name="../lib/stdperiphlib/stm32f10x_conf.h"/>
<file file_name="../lib/stdperiphlib/stm32f10x_conf.h" />
<folder Name="STM32F10x_StdPeriph_Driver">
<folder Name="inc">
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/misc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_adc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_bkp.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_can.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_cec.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_crc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dac.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dbgmcu.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dma.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_exti.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_flash.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_fsmc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_i2c.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_iwdg.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_pwr.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rtc.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_sdio.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_tim.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_wwdg.h"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/misc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_adc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_bkp.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_can.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_cec.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_crc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dac.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dbgmcu.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dma.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_exti.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_flash.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_fsmc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_i2c.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_iwdg.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_pwr.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rtc.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_sdio.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_tim.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_wwdg.h" />
</folder>
<folder Name="src">
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/misc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c"/>
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/misc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c" />
<file file_name="../lib/stdperiphlib/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c" />
</folder>
</folder>
<folder Name="CMSIS">
<folder Name="CM3">
<folder Name="CoreSupport">
<file file_name="../lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.c"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/CoreSupport/core_cm3.h" />
</folder>
<folder Name="DeviceSupport">
<folder Name="ST">
<folder Name="STM32F10x">
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h"/>
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h" />
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c" />
<file file_name="../lib/stdperiphlib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h" />
</folder>
</folder>
</folder>
@ -102,9 +148,30 @@
</folder>
</folder>
</project>
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug"/>
<configuration Name="THUMB" Platform="ARM" arm_instruction_set="THUMB" arm_library_instruction_set="THUMB" c_preprocessor_definitions="__THUMB" hidden="Yes"/>
<configuration Name="Debug" build_debug_information="Yes" c_preprocessor_definitions="DEBUG" gcc_optimization_level="None" hidden="Yes" link_include_startup_code="No"/>
<configuration Name="THUMB Release" inherited_configurations="THUMB;Release"/>
<configuration Name="Release" build_debug_information="No" c_additional_options="-g1" c_preprocessor_definitions="NDEBUG" gcc_optimization_level="Level 1" hidden="Yes" link_include_startup_code="No"/>
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug" />
<configuration
Name="THUMB"
Platform="ARM"
arm_instruction_set="THUMB"
arm_library_instruction_set="THUMB"
c_preprocessor_definitions="__THUMB"
hidden="Yes" />
<configuration
Name="Debug"
build_debug_information="Yes"
c_preprocessor_definitions="DEBUG"
gcc_optimization_level="None"
hidden="Yes"
link_include_startup_code="No" />
<configuration
Name="THUMB Release"
inherited_configurations="THUMB;Release" />
<configuration
Name="Release"
build_debug_information="No"
c_additional_options="-g1"
c_preprocessor_definitions="NDEBUG"
gcc_optimization_level="Level 1"
hidden="Yes"
link_include_startup_code="No" />
</solution>

View File

@ -1,19 +1,22 @@
<!DOCTYPE CrossStudio_for_ARM_Session_File>
<!DOCTYPE CrossStudio_Session_File>
<session>
<Bookmarks/>
<Breakpoints/>
<ExecutionProfileWindow/>
<FrameBufferWindow>
<FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
</FrameBufferWindow>
<Memory1>
<MemoryWindow autoEvaluate="0" addressText="0" numColumns="8" sizeText="32" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="0" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="32" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory1>
<Memory2>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory2>
<Memory3>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory3>
<Memory4>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" name="" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="" addressOrder="0" refreshPeriod="0" columnsText="" sizeText="" viewMode="0" dataSize="1" radix="16" name="" addressSpace="" />
</Memory4>
<Project>
<ProjectSessionItem path="stm32f103_crossworks" name="unnamed" />
@ -23,16 +26,16 @@
<ProjectSessionItem path="stm32f103_crossworks;demoprog_olimex_stm32p103;Source Files;Demo;Prog" name="unnamed" />
</Project>
<Register1>
<RegisterWindow openNodes="CPU" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="CPU" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register1>
<Register2>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register2>
<Register3>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register3>
<Register4>
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="" />
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
</Register4>
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
<TraceWindow>
@ -51,7 +54,7 @@
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM3_STM32F1_Olimex_STM32P103_Crossworks\Prog\main.c" y="0" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM3_STM32F1_Olimex_STM32P103_Crossworks\Prog\main.c" left="0" selected="1" name="unnamed" top="0" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="../main.c" y="0" path="../main.c" left="0" selected="1" name="unnamed" top="0" />
</Files>
<ARMCrossStudioWindow activeProject="demoprog_olimex_stm32p103" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:\usr\feaser\software\OpenBLT\Target\Demo\ARMCM3_STM32_Olimex_STM32P103_Crossworks\Prog" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
<ARMCrossStudioWindow activeProject="demoprog_olimex_stm32p103" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Prog" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
</session>

View File

@ -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 <stdint.h>
/* 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

View File

@ -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 <cmsis_iar.h>
#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/
/* TI CCS specific functions */
#include <cmsis_ccs.h>
#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 */

View File

@ -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 <cmsis_iar.h>
#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/
/* TI CCS specific functions */
#include <cmsis_ccs.h>
#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 */

View File

@ -1,243 +0,0 @@
<html>
<head>
<title>CMSIS Debug Support</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<style>
<!--
/*-----------------------------------------------------------
Keil Software CHM Style Sheet
-----------------------------------------------------------*/
body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family:
Verdana, Arial, 'Sans Serif' }
a:link { color: #0000FF; text-decoration: underline }
a:visited { color: #0000FF; text-decoration: underline }
a:active { color: #FF0000; text-decoration: underline }
a:hover { color: #FF0000; text-decoration: underline }
h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold;
text-align: Center; margin-right: 3 }
h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold;
background-color: #CCCCCC; margin-top: 24; margin-bottom: 3;
padding: 6 }
h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color:
#CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC;
margin-left: 24; margin-right: 24 }
ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
ol { margin-top: 6pt; margin-bottom: 0 }
li { clear: both; margin-bottom: 6pt }
table { font-size: 100%; border-width: 0; padding: 0 }
th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align:
bottom; padding-right: 6pt }
tr { text-align: left; vertical-align: top }
td { text-align: left; vertical-align: top; padding-right: 6pt }
.ToolT { font-size: 8pt; color: #808080 }
.TinyT { font-size: 8pt; text-align: Center }
code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier;
line-height: 120%; font-style: normal }
/*-----------------------------------------------------------
Notes
-----------------------------------------------------------*/
p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
/*-----------------------------------------------------------
Expanding/Contracting Divisions
-----------------------------------------------------------*/
#expand { text-decoration: none; margin-bottom: 3pt }
img.expand { border-style: none; border-width: medium }
div.expand { display: none; margin-left: 9pt; margin-top: 0 }
/*-----------------------------------------------------------
Where List Tags
-----------------------------------------------------------*/
p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
table.wh { width: 100% }
td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom:
6pt }
td.whDesc { padding-bottom: 6pt }
/*-----------------------------------------------------------
Keil Table Tags
-----------------------------------------------------------*/
table.kt { border: 1pt solid #000000 }
th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt;
padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
tr.kt { }
td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0;
padding-left: 6pt; padding-right: 6pt; padding-top: 2pt;
padding-bottom: 2pt }
/*-----------------------------------------------------------
-----------------------------------------------------------*/
-->
</style>
</head>
<body>
<h1>CMSIS Debug Support</h1>
<hr>
<h2>Cortex-M3 ITM Debug Access</h2>
<p>
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:
</p>
<ul>
<li>ITM Channel 0: used for printf-style output via the debug interface.</li>
<li>ITM Channel 31: is reserved for RTOS kernel awareness debugging.</li>
</ul>
<h2>Debug IN / OUT functions</h2>
<p>CMSIS provides following debug functions:</p>
<ul>
<li>ITM_SendChar (uses ITM channel 0)</li>
<li>ITM_ReceiveChar (uses global variable)</li>
<li>ITM_CheckChar (uses global variable)</li>
</ul>
<h3>ITM_SendChar</h3>
<p>
<strong>ITM_SendChar</strong> is used to transmit a character over ITM channel 0 from
the microcontroller system to the debug system. <br>
Only a 8 bit value is transmitted.
</p>
<pre>
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) &amp;&amp;
(ITM-&gt;TCR & ITM_TCR_ITMENA) &amp;&amp;
(ITM-&gt;TER & (1UL &lt;&lt; 0)) )
{
while (ITM-&gt;PORT[0].u32 == 0);
ITM-&gt;PORT[0].u8 = (uint8_t)ch;
}
return (ch);
}</pre>
<h3>ITM_ReceiveChar</h3>
<p>
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.
</p>
<p>
The globale variable <strong>ITM_RxBuffer</strong> is used to transmit a 8 bit value from debug system
to microcontroller system. <strong>ITM_RxBuffer</strong> is 32 bit wide to enshure a proper handshake.
</p>
<pre>
extern volatile int ITM_RxBuffer; /* variable to receive characters */
</pre>
<p>
A dedicated bit pattern is used to determin if <strong>ITM_RxBuffer</strong> is empty
or contains a valid value.
</p>
<pre>
#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */
</pre>
<p>
<strong>ITM_ReceiveChar</strong> 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.
</p>
<pre>
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);
}
</pre>
<h3>ITM_CheckChar</h3>
<p>
<strong>ITM_CheckChar</strong> is used to check if a character is received.
</p>
<pre>
static __INLINE int ITM_CheckChar (void) {
if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
return (0); /* no character available */
} else {
return (1); /* character available */
}
}</pre>
<h2>ITM Debug Support in uVision</h2>
<p>
uVision uses in a debug session the <strong>Debug (printf) Viewer</strong> window to
display the debug data.
</p>
<p>Direction microcontroller system -&gt; uVision:</p>
<ul>
<li>
Characters received via ITM communication channel 0 are written in a printf style
to <strong>Debug (printf) Viewer</strong> window.
</li>
</ul>
<p>Direction uVision -&gt; microcontroller system:</p>
<ul>
<li>Check if <strong>ITM_RxBuffer</strong> variable is available (only performed once).</li>
<li>Read character from <strong>Debug (printf) Viewer</strong> window.</li>
<li>If <strong>ITM_RxBuffer</strong> empty write character to <strong>ITM_RxBuffer</strong>.</li>
</ul>
<p class="Note">Note</p>
<ul>
<li><p>Current solution does not use a buffer machanism for trasmitting the characters.</p>
</li>
</ul>
<h2>RTX Kernel awareness in uVision</h2>
<p>
uVision / RTX are using a simple and efficient solution for RTX Kernel awareness.
No format overhead is necessary.<br>
uVsion debugger decodes the RTX events via the 32 / 16 / 8 bit ITM write access
to ITM communication channel 31.
</p>
<p>Following RTX events are traced:</p>
<ul>
<li>Task Create / Delete event
<ol>
<li>32 bit access. Task start address is transmitted</li>
<li>16 bit access. Task ID and Create/Delete flag are transmitted<br>
High byte holds Create/Delete flag, Low byte holds TASK ID.
</li>
</ol>
</li>
<li>Task switch event
<ol>
<li>8 bit access. Task ID of current task is transmitted</li>
</ol>
</li>
</ul>
<p class="Note">Note</p>
<ul>
<li><p>Other RTOS information could be retrieved via memory read access in a polling mode manner.</p>
</li>
</ul>
<p class="MsoNormal"><span lang="EN-GB">&nbsp;</span></p>
<hr>
<p class="TinyT">Copyright © KEIL - An ARM Company.<br>
All rights reserved.<br>
Visit our web site at <a href="http://www.keil.com">www.keil.com</a>.
</p>
</body>
</html>

View File

@ -1,320 +0,0 @@
<html>
<head>
<title>CMSIS Changes</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<style>
<!--
/*-----------------------------------------------------------
Keil Software CHM Style Sheet
-----------------------------------------------------------*/
body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family:
Verdana, Arial, 'Sans Serif' }
a:link { color: #0000FF; text-decoration: underline }
a:visited { color: #0000FF; text-decoration: underline }
a:active { color: #FF0000; text-decoration: underline }
a:hover { color: #FF0000; text-decoration: underline }
h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold;
text-align: Center; margin-right: 3 }
h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold;
background-color: #CCCCCC; margin-top: 24; margin-bottom: 3;
padding: 6 }
h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color:
#CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC;
margin-left: 24; margin-right: 24 }
ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
ol { margin-top: 6pt; margin-bottom: 0 }
li { clear: both; margin-bottom: 6pt }
table { font-size: 100%; border-width: 0; padding: 0 }
th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align:
bottom; padding-right: 6pt }
tr { text-align: left; vertical-align: top }
td { text-align: left; vertical-align: top; padding-right: 6pt }
.ToolT { font-size: 8pt; color: #808080 }
.TinyT { font-size: 8pt; text-align: Center }
code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier;
line-height: 120%; font-style: normal }
/*-----------------------------------------------------------
Notes
-----------------------------------------------------------*/
p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
/*-----------------------------------------------------------
Expanding/Contracting Divisions
-----------------------------------------------------------*/
#expand { text-decoration: none; margin-bottom: 3pt }
img.expand { border-style: none; border-width: medium }
div.expand { display: none; margin-left: 9pt; margin-top: 0 }
/*-----------------------------------------------------------
Where List Tags
-----------------------------------------------------------*/
p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
table.wh { width: 100% }
td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom:
6pt }
td.whDesc { padding-bottom: 6pt }
/*-----------------------------------------------------------
Keil Table Tags
-----------------------------------------------------------*/
table.kt { border: 1pt solid #000000 }
th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt;
padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
tr.kt { }
td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0;
padding-left: 6pt; padding-right: 6pt; padding-top: 2pt;
padding-bottom: 2pt }
/*-----------------------------------------------------------
-----------------------------------------------------------*/
-->
</style>
</head>
<body>
<h1>Changes to CMSIS version V1.20</h1>
<hr>
<h2>1. Removed CMSIS Middelware packages</h2>
<p>
CMSIS Middleware is on hold from ARM side until a agreement between all CMSIS partners is found.
</p>
<h2>2. SystemFrequency renamed to SystemCoreClock</h2>
<p>
The variable name <strong>SystemCoreClock</strong> is more precise than <strong>SystemFrequency</strong>
because the variable holds the clock value at which the core is running.
</p>
<h2>3. Changed startup concept</h2>
<p>
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.
</p>
<h3>Changed startup concept</h3>
<ul>
<li>
SystemInit() is called from startup file before <strong>premain</strong>.
</li>
<li>
<strong>SystemInit()</strong> configures the clock system and also configures
an existing external memory controller.
</li>
<li>
<strong>SystemInit()</strong> must not use global variables.
</li>
<li>
<strong>SystemCoreClock</strong> is initialized with a correct predefined value.
</li>
<li>
Additional function <strong>void SystemCoreClockUpdate (void)</strong> is provided.<br>
<strong>SystemCoreClockUpdate()</strong> updates the variable <strong>SystemCoreClock</strong>
and must be called whenever the core clock is changed.<br>
<strong>SystemCoreClockUpdate()</strong> evaluates the clock register settings and calculates
the current core clock.
</li>
</ul>
<h2>4. Advanced Debug Functions</h2>
<p>
ITM communication channel is only capable for OUT direction. To allow also communication for
IN direction a simple concept is provided.
</p>
<ul>
<li>
Global variable <strong>volatile int ITM_RxBuffer</strong> used for IN data.
</li>
<li>
Function <strong>int ITM_CheckChar (void)</strong> checks if a new character is available.
</li>
<li>
Function <strong>int ITM_ReceiveChar (void)</strong> retrieves the new character.
</li>
</ul>
<p>
For detailed explanation see file <strong>CMSIS debug support.htm</strong>.
</p>
<h2>5. Core Register Bit Definitions</h2>
<p>
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.
</p>
<p>
e.g. SysTick structure with bit definitions
</p>
<pre>
/** @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 */</pre>
<h2>7. DoxyGen Tags</h2>
<p>
DoxyGen tags in files core_cm3.[c,h] and core_cm0.[c,h] are reworked to create proper documentation
using DoxyGen.
</p>
<h2>8. Folder Structure</h2>
<p>
The folder structure is changed to differentiate the single support packages.
</p>
<ul>
<li>CM0</li>
<li>CM3
<ul>
<li>CoreSupport</li>
<li>DeviceSupport</li>
<ul>
<li>Vendor
<ul>
<li>Device
<ul>
<li>Startup
<ul>
<li>Toolchain</li>
<li>Toolchain</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>Device</li>
<li>...</li>
</ul>
</li>
<li>Vendor</li>
<li>...</li>
</ul>
</li>
<li>Example
<ul>
<li>Toolchain
<ul>
<li>Device</li>
<li>Device</li>
<li>...</li>
</ul>
</li>
<li>Toolchain</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>Documentation</li>
</ul>
<h2>9. Open Points</h2>
<p>
Following points need to be clarified and solved:
</p>
<ul>
<li>
<p>
Equivalent C and Assembler startup files.
</p>
<p>
Is there a need for having C startup files although assembler startup files are
very efficient and do not need to be changed?
<p/>
</li>
<li>
<p>
Placing of HEAP in external RAM.
</p>
<p>
It must be possible to place HEAP in external RAM if the device supports an
external memory controller.
</p>
</li>
<li>
<p>
Placing of STACK /HEAP.
</p>
<p>
STACK should always be placed at the end of internal RAM.
</p>
<p>
If HEAP is placed in internal RAM than it should be placed after RW ZI section.
</p>
</li>
<li>
<p>
Removing core_cm3.c and core_cm0.c.
</p>
<p>
On a long term the functions in core_cm3.c and core_cm0.c must be replaced with
appropriate compiler intrinsics.
</p>
</li>
</ul>
<h2>10. Limitations</h2>
<p>
The following limitations are not covered with the current CMSIS version:
</p>
<ul>
<li>
No <strong>C startup files</strong> for ARM toolchain are provided.
</li>
<li>
No <strong>C startup files</strong> for GNU toolchain are provided.
</li>
<li>
No <strong>C startup files</strong> for IAR toolchain are provided.
</li>
<li>
No <strong>Tasking</strong> projects are provided yet.
</li>
</ul>

Some files were not shown because too many files have changed in this diff Show More