Jolyon Hill / mbed-dev

Fork of mbed-dev by mbed official

Committer:
jolyon
Date:
Mon Oct 10 14:36:54 2016 +0000
Revision:
149:6f3fb14e6942
Parent:
144:ef7eb2e8f9f7
Working with LPC1764 & inverted LEDS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /* .include "vector_defns.h" */
<> 144:ef7eb2e8f9f7 2
<> 144:ef7eb2e8f9f7 3
<> 144:ef7eb2e8f9f7 4
<> 144:ef7eb2e8f9f7 5 .section .privileged_code, "ax"
<> 144:ef7eb2e8f9f7 6 .arm
<> 144:ef7eb2e8f9f7 7
<> 144:ef7eb2e8f9f7 8
<> 144:ef7eb2e8f9f7 9 .weak __mbed_fiq
<> 144:ef7eb2e8f9f7 10 .weak __mbed_undef
<> 144:ef7eb2e8f9f7 11 .weak __mbed_prefetch_abort
<> 144:ef7eb2e8f9f7 12 .weak __mbed_data_abort
<> 144:ef7eb2e8f9f7 13 .weak __mbed_irq
<> 144:ef7eb2e8f9f7 14 .weak __mbed_swi
<> 144:ef7eb2e8f9f7 15 .weak __mbed_dcc_irq
<> 144:ef7eb2e8f9f7 16 .weak __mbed_reset
<> 144:ef7eb2e8f9f7 17 .global __mbed_init_realmonitor
<> 144:ef7eb2e8f9f7 18 .weak SVC_Handler
<> 144:ef7eb2e8f9f7 19 .weak IRQ_Handler
<> 144:ef7eb2e8f9f7 20 /* .global __mbed_init */
<> 144:ef7eb2e8f9f7 21
<> 144:ef7eb2e8f9f7 22
<> 144:ef7eb2e8f9f7 23
<> 144:ef7eb2e8f9f7 24
<> 144:ef7eb2e8f9f7 25 __mbed_fiq:
<> 144:ef7eb2e8f9f7 26 B __mbed_fiq
<> 144:ef7eb2e8f9f7 27 __mbed_undef:
<> 144:ef7eb2e8f9f7 28 LDR PC, =0x7fffffa0
<> 144:ef7eb2e8f9f7 29 __mbed_prefetch_abort:
<> 144:ef7eb2e8f9f7 30 LDR PC, =0x7fffffb0
<> 144:ef7eb2e8f9f7 31 __mbed_data_abort:
<> 144:ef7eb2e8f9f7 32 LDR PC, =0x7fffffc0
<> 144:ef7eb2e8f9f7 33 __mbed_irq:
<> 144:ef7eb2e8f9f7 34 /*
<> 144:ef7eb2e8f9f7 35 If RTOS is enabled then goto RTOS IRQ handler
<> 144:ef7eb2e8f9f7 36 */
<> 144:ef7eb2e8f9f7 37 PUSH {R0}
<> 144:ef7eb2e8f9f7 38 LDR R0, =IRQ_Handler
<> 144:ef7eb2e8f9f7 39 CMP R0, #0
<> 144:ef7eb2e8f9f7 40 POP {R0}
<> 144:ef7eb2e8f9f7 41 BNE IRQ_Handler
<> 144:ef7eb2e8f9f7 42 /*
<> 144:ef7eb2e8f9f7 43 else use CMSIS IRQ handler
<> 144:ef7eb2e8f9f7 44 */
<> 144:ef7eb2e8f9f7 45 MSR CPSR_c, #0x1F|0x80|0x40
<> 144:ef7eb2e8f9f7 46
<> 144:ef7eb2e8f9f7 47 STMDB sp!, {r0-r3,r12,lr}
<> 144:ef7eb2e8f9f7 48
<> 144:ef7eb2e8f9f7 49 MOV r0, #0xFFFFFF00
<> 144:ef7eb2e8f9f7 50 LDR r0, [r0]
<> 144:ef7eb2e8f9f7 51
<> 144:ef7eb2e8f9f7 52 MOV lr, pc
<> 144:ef7eb2e8f9f7 53 BX r0
<> 144:ef7eb2e8f9f7 54
<> 144:ef7eb2e8f9f7 55 MOV r0, #0xFFFFFF00
<> 144:ef7eb2e8f9f7 56 STR r0, [r0]
<> 144:ef7eb2e8f9f7 57
<> 144:ef7eb2e8f9f7 58 LDMFD sp!,{r0-r3,r12,lr}
<> 144:ef7eb2e8f9f7 59
<> 144:ef7eb2e8f9f7 60 MSR CPSR_c, #0x12|0x80|0x40
<> 144:ef7eb2e8f9f7 61
<> 144:ef7eb2e8f9f7 62 SUBS pc, lr, #4
<> 144:ef7eb2e8f9f7 63
<> 144:ef7eb2e8f9f7 64 __mbed_swi:
<> 144:ef7eb2e8f9f7 65 /*
<> 144:ef7eb2e8f9f7 66 If RTOS is enabled then goto RTOS SVC handler
<> 144:ef7eb2e8f9f7 67 */
<> 144:ef7eb2e8f9f7 68 PUSH {R0}
<> 144:ef7eb2e8f9f7 69 LDR R0, =SVC_Handler
<> 144:ef7eb2e8f9f7 70 CMP R0, #0
<> 144:ef7eb2e8f9f7 71 POP {R0}
<> 144:ef7eb2e8f9f7 72 BNE SVC_Handler
<> 144:ef7eb2e8f9f7 73 /*
<> 144:ef7eb2e8f9f7 74 else use CMSIS SVC handler
<> 144:ef7eb2e8f9f7 75 */
<> 144:ef7eb2e8f9f7 76 STMFD sp!, {a4, r4, ip, lr}
<> 144:ef7eb2e8f9f7 77
<> 144:ef7eb2e8f9f7 78 LDR r4, =0x40000040
<> 144:ef7eb2e8f9f7 79
<> 144:ef7eb2e8f9f7 80 LDR a4, =0x00940000
<> 144:ef7eb2e8f9f7 81 LDR PC, =0x7ffff820
<> 144:ef7eb2e8f9f7 82
<> 144:ef7eb2e8f9f7 83 __mbed_dcc_irq:
<> 144:ef7eb2e8f9f7 84 LDMFD sp!,{r0-r3,r12,lr}
<> 144:ef7eb2e8f9f7 85
<> 144:ef7eb2e8f9f7 86 MSR CPSR_c, #0x12|0x80|0x40
<> 144:ef7eb2e8f9f7 87
<> 144:ef7eb2e8f9f7 88 SUB lr, lr, #4
<> 144:ef7eb2e8f9f7 89 STMFD sp!, {ip,lr}
<> 144:ef7eb2e8f9f7 90
<> 144:ef7eb2e8f9f7 91 LDR LR, =0xfffff000
<> 144:ef7eb2e8f9f7 92 STR LR, [LR, #0xf00]
<> 144:ef7eb2e8f9f7 93
<> 144:ef7eb2e8f9f7 94 LDR PC, =0x7fffffe0
<> 144:ef7eb2e8f9f7 95 /*
<> 144:ef7eb2e8f9f7 96 __mbed_reset is called after reset
<> 144:ef7eb2e8f9f7 97 we setup the stacks and realmonitor, then call Reset_Handler like on M3
<> 144:ef7eb2e8f9f7 98 */
<> 144:ef7eb2e8f9f7 99
<> 144:ef7eb2e8f9f7 100 .section .text, "ax"
<> 144:ef7eb2e8f9f7 101 .arm
<> 144:ef7eb2e8f9f7 102 .global Reset_handler
<> 144:ef7eb2e8f9f7 103 Reset_Handler:
<> 144:ef7eb2e8f9f7 104 .extern __libc_init_array
<> 144:ef7eb2e8f9f7 105 .extern SystemInit
<> 144:ef7eb2e8f9f7 106 .weak software_init_hook
<> 144:ef7eb2e8f9f7 107 LDR R0, =SystemInit
<> 144:ef7eb2e8f9f7 108 MOV LR, PC
<> 144:ef7eb2e8f9f7 109 BX R0
<> 144:ef7eb2e8f9f7 110
<> 144:ef7eb2e8f9f7 111 /* if (software_init_hook) // give control to the RTOS
<> 144:ef7eb2e8f9f7 112 software_init_hook(); // this will also call __libc_init_array
<> 144:ef7eb2e8f9f7 113 */
<> 144:ef7eb2e8f9f7 114 LDR R0, =software_init_hook
<> 144:ef7eb2e8f9f7 115 CMP R0, #0
<> 144:ef7eb2e8f9f7 116 BEQ nortos
<> 144:ef7eb2e8f9f7 117 ORR R0,R0,#1 /* set thumb address */
<> 144:ef7eb2e8f9f7 118 BX R0
<> 144:ef7eb2e8f9f7 119 /* else */
<> 144:ef7eb2e8f9f7 120 nortos:
<> 144:ef7eb2e8f9f7 121 LDR R0, =__libc_init_array
<> 144:ef7eb2e8f9f7 122 MOV LR, PC
<> 144:ef7eb2e8f9f7 123 BX R0
<> 144:ef7eb2e8f9f7 124
<> 144:ef7eb2e8f9f7 125 MSR CPSR_c, #0x1F /* enable irq */
<> 144:ef7eb2e8f9f7 126
<> 144:ef7eb2e8f9f7 127 LDR R0, =main
<> 144:ef7eb2e8f9f7 128 BX R0
<> 144:ef7eb2e8f9f7 129
<> 144:ef7eb2e8f9f7 130 __mbed_reset:
<> 144:ef7eb2e8f9f7 131 LDR R0, =( __SRAM_segment_end__ )
<> 144:ef7eb2e8f9f7 132
<> 144:ef7eb2e8f9f7 133 MSR CPSR_c, #0x1B|0x80|0x40
<> 144:ef7eb2e8f9f7 134 MOV SP, R0
<> 144:ef7eb2e8f9f7 135 SUB R0, R0, #0x00000040
<> 144:ef7eb2e8f9f7 136
<> 144:ef7eb2e8f9f7 137 MSR CPSR_c, #0x17|0x80|0x40
<> 144:ef7eb2e8f9f7 138 MOV SP, R0
<> 144:ef7eb2e8f9f7 139 SUB R0, R0, #0x00000040
<> 144:ef7eb2e8f9f7 140
<> 144:ef7eb2e8f9f7 141 MSR CPSR_c, #0x11|0x80|0x40
<> 144:ef7eb2e8f9f7 142 MOV SP, R0
<> 144:ef7eb2e8f9f7 143 SUB R0, R0, #0x00000040
<> 144:ef7eb2e8f9f7 144
<> 144:ef7eb2e8f9f7 145 MSR CPSR_c, #0x12|0x80|0x40
<> 144:ef7eb2e8f9f7 146 MOV SP, R0
<> 144:ef7eb2e8f9f7 147 SUB R0, R0, #0x00000040
<> 144:ef7eb2e8f9f7 148
<> 144:ef7eb2e8f9f7 149 MSR CPSR_c, #0x13|0x80|0x40
<> 144:ef7eb2e8f9f7 150 MOV SP, R0
<> 144:ef7eb2e8f9f7 151 SUB R0, R0, #0x00000040
<> 144:ef7eb2e8f9f7 152
<> 144:ef7eb2e8f9f7 153 /*
<> 144:ef7eb2e8f9f7 154 MSR CPSR_c, #0x10|0x80|0x40
<> 144:ef7eb2e8f9f7 155 MOV SP, R0
<> 144:ef7eb2e8f9f7 156 */
<> 144:ef7eb2e8f9f7 157 MSR CPSR_c, #0x1F|0x80|0x40
<> 144:ef7eb2e8f9f7 158 MOV SP, R0
<> 144:ef7eb2e8f9f7 159
<> 144:ef7eb2e8f9f7 160 MSR CPSR_c, #0x13|0x80|0x40 /* execute in Supervisor mode */
<> 144:ef7eb2e8f9f7 161
<> 144:ef7eb2e8f9f7 162 /* Relocate .data section (Copy from ROM to RAM) */
<> 144:ef7eb2e8f9f7 163 LDR R1, =__text_end__ /* _etext */
<> 144:ef7eb2e8f9f7 164 LDR R2, =__data_start__ /* _data */
<> 144:ef7eb2e8f9f7 165 LDR R3, =__data_end__ /* _edata */
<> 144:ef7eb2e8f9f7 166 CMP R2, R3
<> 144:ef7eb2e8f9f7 167 BEQ DataIsEmpty
<> 144:ef7eb2e8f9f7 168 LoopRel: CMP R2, R3
<> 144:ef7eb2e8f9f7 169 LDRLO R0, [R1], #4
<> 144:ef7eb2e8f9f7 170 STRLO R0, [R2], #4
<> 144:ef7eb2e8f9f7 171 BLO LoopRel
<> 144:ef7eb2e8f9f7 172 DataIsEmpty:
<> 144:ef7eb2e8f9f7 173
<> 144:ef7eb2e8f9f7 174 /* Clear .bss section (Zero init) */
<> 144:ef7eb2e8f9f7 175 MOV R0, #0
<> 144:ef7eb2e8f9f7 176 LDR R1, =__bss_start__
<> 144:ef7eb2e8f9f7 177 LDR R2, =__bss_end__
<> 144:ef7eb2e8f9f7 178 CMP R1,R2
<> 144:ef7eb2e8f9f7 179 BEQ BSSIsEmpty
<> 144:ef7eb2e8f9f7 180 LoopZI: CMP R1, R2
<> 144:ef7eb2e8f9f7 181 STRLO R0, [R1], #4
<> 144:ef7eb2e8f9f7 182 BLO LoopZI
<> 144:ef7eb2e8f9f7 183 BSSIsEmpty:
<> 144:ef7eb2e8f9f7 184
<> 144:ef7eb2e8f9f7 185
<> 144:ef7eb2e8f9f7 186 /* Init realmonitor */
<> 144:ef7eb2e8f9f7 187 /*
<> 144:ef7eb2e8f9f7 188 LDR R0, =__mbed_init_realmonitor
<> 144:ef7eb2e8f9f7 189 MOV LR, PC
<> 144:ef7eb2e8f9f7 190 BX R0
<> 144:ef7eb2e8f9f7 191 */
<> 144:ef7eb2e8f9f7 192
<> 144:ef7eb2e8f9f7 193 /* Go to Reset_Handler */
<> 144:ef7eb2e8f9f7 194 LDR R0, =Reset_Handler
<> 144:ef7eb2e8f9f7 195 BX R0