SD card interface

Committer:
lharoon
Date:
Mon Oct 08 11:14:07 2012 +0000
Revision:
0:22612ae617a0
1st edition

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lharoon 0:22612ae617a0 1 /* Linker script for mbed LPC1768 */
lharoon 0:22612ae617a0 2 GROUP(-lstdc++ -lsupc++ -lm -lc -lnosys -lgcc)
lharoon 0:22612ae617a0 3
lharoon 0:22612ae617a0 4 /* Linker script to configure memory regions. */
lharoon 0:22612ae617a0 5 MEMORY
lharoon 0:22612ae617a0 6 {
lharoon 0:22612ae617a0 7 FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 32K
lharoon 0:22612ae617a0 8 RAM (rwx) : ORIGIN = 0x100000C0, LENGTH = 0xF40
lharoon 0:22612ae617a0 9 }
lharoon 0:22612ae617a0 10
lharoon 0:22612ae617a0 11 /* Linker script to place sections and symbol values. Should be used together
lharoon 0:22612ae617a0 12 * with other linker script that defines memory regions FLASH and RAM.
lharoon 0:22612ae617a0 13 * It references following symbols, which must be defined in code:
lharoon 0:22612ae617a0 14 * Reset_Handler : Entry of reset handler
lharoon 0:22612ae617a0 15 *
lharoon 0:22612ae617a0 16 * It defines following symbols, which code can use without definition:
lharoon 0:22612ae617a0 17 * __exidx_start
lharoon 0:22612ae617a0 18 * __exidx_end
lharoon 0:22612ae617a0 19 * __etext
lharoon 0:22612ae617a0 20 * __data_start__
lharoon 0:22612ae617a0 21 * __preinit_array_start
lharoon 0:22612ae617a0 22 * __preinit_array_end
lharoon 0:22612ae617a0 23 * __init_array_start
lharoon 0:22612ae617a0 24 * __init_array_end
lharoon 0:22612ae617a0 25 * __fini_array_start
lharoon 0:22612ae617a0 26 * __fini_array_end
lharoon 0:22612ae617a0 27 * __data_end__
lharoon 0:22612ae617a0 28 * __bss_start__
lharoon 0:22612ae617a0 29 * __bss_end__
lharoon 0:22612ae617a0 30 * __end__
lharoon 0:22612ae617a0 31 * end
lharoon 0:22612ae617a0 32 * __HeapLimit
lharoon 0:22612ae617a0 33 * __StackLimit
lharoon 0:22612ae617a0 34 * __StackTop
lharoon 0:22612ae617a0 35 * __stack
lharoon 0:22612ae617a0 36 */
lharoon 0:22612ae617a0 37 ENTRY(Reset_Handler)
lharoon 0:22612ae617a0 38
lharoon 0:22612ae617a0 39 SECTIONS
lharoon 0:22612ae617a0 40 {
lharoon 0:22612ae617a0 41 .text :
lharoon 0:22612ae617a0 42 {
lharoon 0:22612ae617a0 43 KEEP(*(.isr_vector))
lharoon 0:22612ae617a0 44 *(.text*)
lharoon 0:22612ae617a0 45
lharoon 0:22612ae617a0 46 KEEP(*(.init))
lharoon 0:22612ae617a0 47 KEEP(*(.fini))
lharoon 0:22612ae617a0 48
lharoon 0:22612ae617a0 49 /* .ctors */
lharoon 0:22612ae617a0 50 *crtbegin.o(.ctors)
lharoon 0:22612ae617a0 51 *crtbegin?.o(.ctors)
lharoon 0:22612ae617a0 52 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
lharoon 0:22612ae617a0 53 *(SORT(.ctors.*))
lharoon 0:22612ae617a0 54 *(.ctors)
lharoon 0:22612ae617a0 55
lharoon 0:22612ae617a0 56 /* .dtors */
lharoon 0:22612ae617a0 57 *crtbegin.o(.dtors)
lharoon 0:22612ae617a0 58 *crtbegin?.o(.dtors)
lharoon 0:22612ae617a0 59 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
lharoon 0:22612ae617a0 60 *(SORT(.dtors.*))
lharoon 0:22612ae617a0 61 *(.dtors)
lharoon 0:22612ae617a0 62
lharoon 0:22612ae617a0 63 *(.rodata*)
lharoon 0:22612ae617a0 64
lharoon 0:22612ae617a0 65 KEEP(*(.eh_frame*))
lharoon 0:22612ae617a0 66 } > FLASH
lharoon 0:22612ae617a0 67
lharoon 0:22612ae617a0 68 .ARM.extab :
lharoon 0:22612ae617a0 69 {
lharoon 0:22612ae617a0 70 *(.ARM.extab* .gnu.linkonce.armextab.*)
lharoon 0:22612ae617a0 71 } > FLASH
lharoon 0:22612ae617a0 72
lharoon 0:22612ae617a0 73 __exidx_start = .;
lharoon 0:22612ae617a0 74 .ARM.exidx :
lharoon 0:22612ae617a0 75 {
lharoon 0:22612ae617a0 76 *(.ARM.exidx* .gnu.linkonce.armexidx.*)
lharoon 0:22612ae617a0 77 } > FLASH
lharoon 0:22612ae617a0 78 __exidx_end = .;
lharoon 0:22612ae617a0 79
lharoon 0:22612ae617a0 80 __etext = .;
lharoon 0:22612ae617a0 81
lharoon 0:22612ae617a0 82 .data : AT (__etext)
lharoon 0:22612ae617a0 83 {
lharoon 0:22612ae617a0 84 __data_start__ = .;
lharoon 0:22612ae617a0 85 *(vtable)
lharoon 0:22612ae617a0 86 *(.data*)
lharoon 0:22612ae617a0 87
lharoon 0:22612ae617a0 88 . = ALIGN(4);
lharoon 0:22612ae617a0 89 /* preinit data */
lharoon 0:22612ae617a0 90 PROVIDE (__preinit_array_start = .);
lharoon 0:22612ae617a0 91 KEEP(*(.preinit_array))
lharoon 0:22612ae617a0 92 PROVIDE (__preinit_array_end = .);
lharoon 0:22612ae617a0 93
lharoon 0:22612ae617a0 94 . = ALIGN(4);
lharoon 0:22612ae617a0 95 /* init data */
lharoon 0:22612ae617a0 96 PROVIDE (__init_array_start = .);
lharoon 0:22612ae617a0 97 KEEP(*(SORT(.init_array.*)))
lharoon 0:22612ae617a0 98 KEEP(*(.init_array))
lharoon 0:22612ae617a0 99 PROVIDE (__init_array_end = .);
lharoon 0:22612ae617a0 100
lharoon 0:22612ae617a0 101
lharoon 0:22612ae617a0 102 . = ALIGN(4);
lharoon 0:22612ae617a0 103 /* finit data */
lharoon 0:22612ae617a0 104 PROVIDE (__fini_array_start = .);
lharoon 0:22612ae617a0 105 KEEP(*(SORT(.fini_array.*)))
lharoon 0:22612ae617a0 106 KEEP(*(.fini_array))
lharoon 0:22612ae617a0 107 PROVIDE (__fini_array_end = .);
lharoon 0:22612ae617a0 108
lharoon 0:22612ae617a0 109 . = ALIGN(4);
lharoon 0:22612ae617a0 110 /* All data end */
lharoon 0:22612ae617a0 111 __data_end__ = .;
lharoon 0:22612ae617a0 112
lharoon 0:22612ae617a0 113 } > RAM
lharoon 0:22612ae617a0 114
lharoon 0:22612ae617a0 115 .bss :
lharoon 0:22612ae617a0 116 {
lharoon 0:22612ae617a0 117 __bss_start__ = .;
lharoon 0:22612ae617a0 118 *(.bss*)
lharoon 0:22612ae617a0 119 *(COMMON)
lharoon 0:22612ae617a0 120 __bss_end__ = .;
lharoon 0:22612ae617a0 121 } > RAM
lharoon 0:22612ae617a0 122
lharoon 0:22612ae617a0 123 .heap :
lharoon 0:22612ae617a0 124 {
lharoon 0:22612ae617a0 125 __end__ = .;
lharoon 0:22612ae617a0 126 end = __end__;
lharoon 0:22612ae617a0 127 *(.heap*)
lharoon 0:22612ae617a0 128 __HeapLimit = .;
lharoon 0:22612ae617a0 129 } > RAM
lharoon 0:22612ae617a0 130
lharoon 0:22612ae617a0 131 /* .stack_dummy section doesn't contains any symbols. It is only
lharoon 0:22612ae617a0 132 * used for linker to calculate size of stack sections, and assign
lharoon 0:22612ae617a0 133 * values to stack symbols later */
lharoon 0:22612ae617a0 134 .stack_dummy :
lharoon 0:22612ae617a0 135 {
lharoon 0:22612ae617a0 136 *(.stack)
lharoon 0:22612ae617a0 137 } > RAM
lharoon 0:22612ae617a0 138
lharoon 0:22612ae617a0 139 /* Set stack top to end of RAM, and stack limit move down by
lharoon 0:22612ae617a0 140 * size of stack_dummy section */
lharoon 0:22612ae617a0 141 __StackTop = ORIGIN(RAM) + LENGTH(RAM);
lharoon 0:22612ae617a0 142 __StackLimit = __StackTop - SIZEOF(.stack_dummy);
lharoon 0:22612ae617a0 143 PROVIDE(__stack = __StackTop);
lharoon 0:22612ae617a0 144
lharoon 0:22612ae617a0 145 /* Check if data + heap + stack exceeds RAM limit */
lharoon 0:22612ae617a0 146 ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
lharoon 0:22612ae617a0 147 }
lharoon 0:22612ae617a0 148