mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 189:f392fc9709a3 1 ;/*
AnnaBridge 189:f392fc9709a3 2 ; * Copyright (c) 2014-2018 ARM Limited. All rights reserved.
AnnaBridge 189:f392fc9709a3 3 ; *
AnnaBridge 189:f392fc9709a3 4 ; * SPDX-License-Identifier: Apache-2.0
AnnaBridge 189:f392fc9709a3 5 ; *
AnnaBridge 189:f392fc9709a3 6 ; * Licensed under the Apache License, Version 2.0 (the License); you may
AnnaBridge 189:f392fc9709a3 7 ; * not use this file except in compliance with the License.
AnnaBridge 189:f392fc9709a3 8 ; * You may obtain a copy of the License at
AnnaBridge 189:f392fc9709a3 9 ; *
AnnaBridge 189:f392fc9709a3 10 ; * www.apache.org/licenses/LICENSE-2.0
AnnaBridge 189:f392fc9709a3 11 ; *
AnnaBridge 189:f392fc9709a3 12 ; * Unless required by applicable law or agreed to in writing, software
AnnaBridge 189:f392fc9709a3 13 ; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
AnnaBridge 189:f392fc9709a3 14 ; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 189:f392fc9709a3 15 ; * See the License for the specific language governing permissions and
AnnaBridge 189:f392fc9709a3 16 ; * limitations under the License.
AnnaBridge 189:f392fc9709a3 17 ; *
AnnaBridge 189:f392fc9709a3 18 ; * -----------------------------------------------------------------------------
AnnaBridge 189:f392fc9709a3 19 ; *
AnnaBridge 189:f392fc9709a3 20 ; * Title: Cortex-M Fault Exception handlers ( Common for both ARMv7M and ARMV6M )
AnnaBridge 189:f392fc9709a3 21 ; *
AnnaBridge 189:f392fc9709a3 22 ; * -----------------------------------------------------------------------------
AnnaBridge 189:f392fc9709a3 23 ; */
AnnaBridge 189:f392fc9709a3 24 #ifndef MBED_FAULT_HANDLER_DISABLED
AnnaBridge 189:f392fc9709a3 25
AnnaBridge 189:f392fc9709a3 26 #ifndef DOMAIN_NS
AnnaBridge 189:f392fc9709a3 27 #define DOMAIN_NS 1
AnnaBridge 189:f392fc9709a3 28 #endif
AnnaBridge 189:f392fc9709a3 29
AnnaBridge 189:f392fc9709a3 30 FAULT_TYPE_HARD_FAULT EQU 0x10
AnnaBridge 189:f392fc9709a3 31 FAULT_TYPE_MEMMANAGE_FAULT EQU 0x20
AnnaBridge 189:f392fc9709a3 32 FAULT_TYPE_BUS_FAULT EQU 0x30
AnnaBridge 189:f392fc9709a3 33 FAULT_TYPE_USAGE_FAULT EQU 0x40
AnnaBridge 189:f392fc9709a3 34
AnnaBridge 189:f392fc9709a3 35 PRESERVE8
AnnaBridge 189:f392fc9709a3 36 THUMB
AnnaBridge 189:f392fc9709a3 37
AnnaBridge 189:f392fc9709a3 38 AREA |.text|, CODE, READONLY
AnnaBridge 189:f392fc9709a3 39
AnnaBridge 189:f392fc9709a3 40 HardFault_Handler\
AnnaBridge 189:f392fc9709a3 41 PROC
AnnaBridge 189:f392fc9709a3 42 EXPORT HardFault_Handler
AnnaBridge 189:f392fc9709a3 43 LDR R3,=FAULT_TYPE_HARD_FAULT
AnnaBridge 189:f392fc9709a3 44 B Fault_Handler
AnnaBridge 189:f392fc9709a3 45 ENDP
AnnaBridge 189:f392fc9709a3 46
AnnaBridge 189:f392fc9709a3 47 MemManage_Handler\
AnnaBridge 189:f392fc9709a3 48 PROC
AnnaBridge 189:f392fc9709a3 49 EXPORT MemManage_Handler
AnnaBridge 189:f392fc9709a3 50 LDR R3,=FAULT_TYPE_MEMMANAGE_FAULT
AnnaBridge 189:f392fc9709a3 51 B Fault_Handler
AnnaBridge 189:f392fc9709a3 52 ENDP
AnnaBridge 189:f392fc9709a3 53
AnnaBridge 189:f392fc9709a3 54 BusFault_Handler\
AnnaBridge 189:f392fc9709a3 55 PROC
AnnaBridge 189:f392fc9709a3 56 EXPORT BusFault_Handler
AnnaBridge 189:f392fc9709a3 57 LDR R3,=FAULT_TYPE_BUS_FAULT
AnnaBridge 189:f392fc9709a3 58 B Fault_Handler
AnnaBridge 189:f392fc9709a3 59 ENDP
AnnaBridge 189:f392fc9709a3 60
AnnaBridge 189:f392fc9709a3 61 UsageFault_Handler\
AnnaBridge 189:f392fc9709a3 62 PROC
AnnaBridge 189:f392fc9709a3 63 EXPORT UsageFault_Handler
AnnaBridge 189:f392fc9709a3 64 LDR R3,=FAULT_TYPE_USAGE_FAULT
AnnaBridge 189:f392fc9709a3 65 B Fault_Handler
AnnaBridge 189:f392fc9709a3 66 ENDP
AnnaBridge 189:f392fc9709a3 67
AnnaBridge 189:f392fc9709a3 68 Fault_Handler PROC
AnnaBridge 189:f392fc9709a3 69 EXPORT Fault_Handler
AnnaBridge 189:f392fc9709a3 70 #if (DOMAIN_NS == 1)
AnnaBridge 189:f392fc9709a3 71 IMPORT mbed_fault_handler
AnnaBridge 189:f392fc9709a3 72 IMPORT mbed_fault_context
AnnaBridge 189:f392fc9709a3 73
AnnaBridge 189:f392fc9709a3 74 MRS R0,MSP
AnnaBridge 189:f392fc9709a3 75 LDR R1,=0x4
AnnaBridge 189:f392fc9709a3 76 MOV R2,LR
AnnaBridge 189:f392fc9709a3 77 TST R2,R1 ; Check EXC_RETURN for bit 2
AnnaBridge 189:f392fc9709a3 78 BEQ Fault_Handler_Continue
AnnaBridge 189:f392fc9709a3 79 MRS R0,PSP
AnnaBridge 189:f392fc9709a3 80
AnnaBridge 189:f392fc9709a3 81 Fault_Handler_Continue
AnnaBridge 189:f392fc9709a3 82 MOV R12,R3
AnnaBridge 189:f392fc9709a3 83 LDR R3,=mbed_fault_context
AnnaBridge 189:f392fc9709a3 84 LDR R1,[R3]
AnnaBridge 189:f392fc9709a3 85 LDR R2,[R0] ; Capture R0
AnnaBridge 189:f392fc9709a3 86 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 87 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 88 LDR R2,[R0,#4] ; Capture R1
AnnaBridge 189:f392fc9709a3 89 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 90 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 91 LDR R2,[R0,#8] ; Capture R2
AnnaBridge 189:f392fc9709a3 92 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 93 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 94 LDR R2,[R0,#12] ; Capture R3
AnnaBridge 189:f392fc9709a3 95 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 96 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 97 STMIA R1!,{R4-R7} ; Capture R4..R7
AnnaBridge 189:f392fc9709a3 98 MOV R7,R8 ; Capture R8
AnnaBridge 189:f392fc9709a3 99 STR R7,[R1]
AnnaBridge 189:f392fc9709a3 100 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 101 MOV R7,R9 ; Capture R9
AnnaBridge 189:f392fc9709a3 102 STR R7,[R1]
AnnaBridge 189:f392fc9709a3 103 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 104 MOV R7,R10 ; Capture R10
AnnaBridge 189:f392fc9709a3 105 STR R7,[R1]
AnnaBridge 189:f392fc9709a3 106 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 107 MOV R7,R11 ; Capture R11
AnnaBridge 189:f392fc9709a3 108 STR R7,[R1]
AnnaBridge 189:f392fc9709a3 109 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 110 LDR R2,[R0,#16] ; Capture R12
AnnaBridge 189:f392fc9709a3 111 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 112 ADDS R1,#8 ; Add 8 here to capture LR next, we will capture SP later
AnnaBridge 189:f392fc9709a3 113 LDR R2,[R0,#20] ; Capture LR
AnnaBridge 189:f392fc9709a3 114 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 115 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 116 LDR R2,[R0,#24] ; Capture PC
AnnaBridge 189:f392fc9709a3 117 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 118 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 119 LDR R2,[R0,#28] ; Capture xPSR
AnnaBridge 189:f392fc9709a3 120 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 121 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 122 ; Adjust stack pointer to its original value and capture it
AnnaBridge 189:f392fc9709a3 123 MOV R3,R0
AnnaBridge 189:f392fc9709a3 124 ADDS R3,#0x20 ; Add 0x20 to get the SP value prior to exception
AnnaBridge 189:f392fc9709a3 125 LDR R6,=0x200
AnnaBridge 189:f392fc9709a3 126 TST R2,R6 ; Check for if STK was aligned by checking bit-9 in xPSR value
AnnaBridge 189:f392fc9709a3 127 BEQ Fault_Handler_Continue1
AnnaBridge 189:f392fc9709a3 128 ADDS R3,#0x4
AnnaBridge 189:f392fc9709a3 129
AnnaBridge 189:f392fc9709a3 130 Fault_Handler_Continue1
AnnaBridge 189:f392fc9709a3 131 MOV R5,LR
AnnaBridge 189:f392fc9709a3 132 LDR R6,=0x10 ; Check for bit-4 to see if FP context was saved
AnnaBridge 189:f392fc9709a3 133 TST R5,R6
AnnaBridge 189:f392fc9709a3 134 BNE Fault_Handler_Continue2
AnnaBridge 189:f392fc9709a3 135 ADDS R3,#0x48 ; 16 FP regs + FPCSR + 1 Reserved
AnnaBridge 189:f392fc9709a3 136
AnnaBridge 189:f392fc9709a3 137 Fault_Handler_Continue2
AnnaBridge 189:f392fc9709a3 138 MOV R4,R1
AnnaBridge 189:f392fc9709a3 139 SUBS R4,#0x10 ; Set the location of SP in ctx
AnnaBridge 189:f392fc9709a3 140 STR R3,[R4] ; Capture the adjusted SP
AnnaBridge 189:f392fc9709a3 141 MRS R2,PSP ; Get PSP
AnnaBridge 189:f392fc9709a3 142 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 143 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 144 MRS R2,MSP ; Get MSP
AnnaBridge 189:f392fc9709a3 145 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 146 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 147 MOV R2,LR ; Get current LR(EXC_RETURN)
AnnaBridge 189:f392fc9709a3 148 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 149 ADDS R1,#4
AnnaBridge 189:f392fc9709a3 150 MRS R2,CONTROL ; Get CONTROL Reg
AnnaBridge 189:f392fc9709a3 151 STR R2,[R1]
AnnaBridge 189:f392fc9709a3 152 MOV R0,R12
AnnaBridge 189:f392fc9709a3 153 LDR R1,=mbed_fault_context
AnnaBridge 189:f392fc9709a3 154 BL mbed_fault_handler
AnnaBridge 189:f392fc9709a3 155 #endif
AnnaBridge 189:f392fc9709a3 156 B . ; Just in case we come back here
AnnaBridge 189:f392fc9709a3 157 ENDP
AnnaBridge 189:f392fc9709a3 158
AnnaBridge 189:f392fc9709a3 159 #endif
AnnaBridge 189:f392fc9709a3 160
AnnaBridge 189:f392fc9709a3 161 END