Official mbed Real Time Operating System based on the RTX implementation of the CMSIS-RTOS API open standard.

Dependents:   denki-yohou_b TestY201 Network-RTOS NTPClient_HelloWorld ... more

Deprecated

This is the mbed 2 rtos library. mbed OS 5 integrates the mbed library with mbed-rtos. With this, we have provided thread safety for all mbed APIs. If you'd like to learn about using mbed OS 5, please see the docs.

Committer:
mbed_official
Date:
Thu Apr 23 08:30:38 2015 +0100
Revision:
74:899aee34da6a
Parent:
68:d3d0e710b443
Synchronized with git revision ee76292c818b96111bb2c27a45ad80aa802c2dcf

Full URL: https://github.com/mbedmicro/mbed/commit/ee76292c818b96111bb2c27a45ad80aa802c2dcf/

Replaced SPI pin definitions for K64F in SD tests

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 49:77c8e4604045 1 /*----------------------------------------------------------------------------
mbed_official 49:77c8e4604045 2 * RL-ARM - RTX
mbed_official 49:77c8e4604045 3 *----------------------------------------------------------------------------
mbed_official 49:77c8e4604045 4 * Name: HAL_CM4.S
mbed_official 49:77c8e4604045 5 * Purpose: Hardware Abstraction Layer for Cortex-M4
mbed_official 49:77c8e4604045 6 * Rev.: V4.70
mbed_official 49:77c8e4604045 7 *----------------------------------------------------------------------------
mbed_official 49:77c8e4604045 8 *
mbed_official 49:77c8e4604045 9 * Copyright (c) 1999-2009 KEIL, 2009-2013 ARM Germany GmbH
mbed_official 49:77c8e4604045 10 * All rights reserved.
mbed_official 49:77c8e4604045 11 * Redistribution and use in source and binary forms, with or without
mbed_official 49:77c8e4604045 12 * modification, are permitted provided that the following conditions are met:
mbed_official 49:77c8e4604045 13 * - Redistributions of source code must retain the above copyright
mbed_official 49:77c8e4604045 14 * notice, this list of conditions and the following disclaimer.
mbed_official 49:77c8e4604045 15 * - Redistributions in binary form must reproduce the above copyright
mbed_official 49:77c8e4604045 16 * notice, this list of conditions and the following disclaimer in the
mbed_official 49:77c8e4604045 17 * documentation and/or other materials provided with the distribution.
mbed_official 68:d3d0e710b443 18 * - Neither the name of ARM nor the names of its contributors may be used
mbed_official 68:d3d0e710b443 19 * to endorse or promote products derived from this software without
mbed_official 49:77c8e4604045 20 * specific prior written permission.
mbed_official 49:77c8e4604045 21 *
mbed_official 68:d3d0e710b443 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 68:d3d0e710b443 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 49:77c8e4604045 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
mbed_official 49:77c8e4604045 25 * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
mbed_official 49:77c8e4604045 26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
mbed_official 68:d3d0e710b443 27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
mbed_official 68:d3d0e710b443 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
mbed_official 68:d3d0e710b443 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
mbed_official 68:d3d0e710b443 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
mbed_official 49:77c8e4604045 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
mbed_official 49:77c8e4604045 32 * POSSIBILITY OF SUCH DAMAGE.
mbed_official 49:77c8e4604045 33 *---------------------------------------------------------------------------*/
mbed_official 49:77c8e4604045 34
mbed_official 49:77c8e4604045 35 .file "HAL_CM4.S"
mbed_official 49:77c8e4604045 36 .syntax unified
mbed_official 49:77c8e4604045 37
mbed_official 49:77c8e4604045 38 .equ TCB_STACKF, 32
mbed_official 59:28712e303960 39 .equ TCB_TSTACK, 40
mbed_official 49:77c8e4604045 40
mbed_official 49:77c8e4604045 41
mbed_official 49:77c8e4604045 42 /*----------------------------------------------------------------------------
mbed_official 49:77c8e4604045 43 * Functions
mbed_official 49:77c8e4604045 44 *---------------------------------------------------------------------------*/
mbed_official 49:77c8e4604045 45
mbed_official 49:77c8e4604045 46 .thumb
mbed_official 49:77c8e4604045 47
mbed_official 49:77c8e4604045 48 .section ".text"
mbed_official 49:77c8e4604045 49 .align 2
mbed_official 49:77c8e4604045 50
mbed_official 49:77c8e4604045 51
mbed_official 49:77c8e4604045 52 /*--------------------------- rt_set_PSP ------------------------------------*/
mbed_official 49:77c8e4604045 53
mbed_official 49:77c8e4604045 54 # void rt_set_PSP (U32 stack);
mbed_official 49:77c8e4604045 55
mbed_official 49:77c8e4604045 56 .thumb_func
mbed_official 49:77c8e4604045 57 .type rt_set_PSP, %function
mbed_official 49:77c8e4604045 58 .global rt_set_PSP
mbed_official 49:77c8e4604045 59 rt_set_PSP:
mbed_official 49:77c8e4604045 60 .fnstart
mbed_official 49:77c8e4604045 61 .cantunwind
mbed_official 49:77c8e4604045 62
mbed_official 49:77c8e4604045 63 MSR PSP,R0
mbed_official 49:77c8e4604045 64 BX LR
mbed_official 49:77c8e4604045 65
mbed_official 49:77c8e4604045 66 .fnend
mbed_official 49:77c8e4604045 67 .size rt_set_PSP, .-rt_set_PSP
mbed_official 49:77c8e4604045 68
mbed_official 49:77c8e4604045 69
mbed_official 49:77c8e4604045 70 /*--------------------------- rt_get_PSP ------------------------------------*/
mbed_official 49:77c8e4604045 71
mbed_official 49:77c8e4604045 72 # U32 rt_get_PSP (void);
mbed_official 49:77c8e4604045 73
mbed_official 49:77c8e4604045 74 .thumb_func
mbed_official 49:77c8e4604045 75 .type rt_get_PSP, %function
mbed_official 49:77c8e4604045 76 .global rt_get_PSP
mbed_official 49:77c8e4604045 77 rt_get_PSP:
mbed_official 49:77c8e4604045 78 .fnstart
mbed_official 49:77c8e4604045 79 .cantunwind
mbed_official 49:77c8e4604045 80
mbed_official 49:77c8e4604045 81 MRS R0,PSP
mbed_official 49:77c8e4604045 82 BX LR
mbed_official 49:77c8e4604045 83
mbed_official 49:77c8e4604045 84 .fnend
mbed_official 49:77c8e4604045 85 .size rt_get_PSP, .-rt_get_PSP
mbed_official 49:77c8e4604045 86
mbed_official 49:77c8e4604045 87
mbed_official 49:77c8e4604045 88 /*--------------------------- os_set_env ------------------------------------*/
mbed_official 49:77c8e4604045 89
mbed_official 49:77c8e4604045 90 # void os_set_env (void);
mbed_official 49:77c8e4604045 91 /* Switch to Unprivileged/Privileged Thread mode, use PSP. */
mbed_official 49:77c8e4604045 92
mbed_official 49:77c8e4604045 93 .thumb_func
mbed_official 49:77c8e4604045 94 .type os_set_env, %function
mbed_official 49:77c8e4604045 95 .global os_set_env
mbed_official 49:77c8e4604045 96 os_set_env:
mbed_official 49:77c8e4604045 97 .fnstart
mbed_official 49:77c8e4604045 98 .cantunwind
mbed_official 49:77c8e4604045 99
mbed_official 49:77c8e4604045 100 MOV R0,SP /* PSP = MSP */
mbed_official 49:77c8e4604045 101 MSR PSP,R0
mbed_official 49:77c8e4604045 102 LDR R0,=os_flags
mbed_official 49:77c8e4604045 103 LDRB R0,[R0]
mbed_official 49:77c8e4604045 104 LSLS R0,#31
mbed_official 49:77c8e4604045 105 ITE NE
mbed_official 49:77c8e4604045 106 MOVNE R0,#0x02 /* Privileged Thread mode, use PSP */
mbed_official 49:77c8e4604045 107 MOVEQ R0,#0x03 /* Unprivileged Thread mode, use PSP */
mbed_official 49:77c8e4604045 108 MSR CONTROL,R0
mbed_official 49:77c8e4604045 109 BX LR
mbed_official 49:77c8e4604045 110
mbed_official 49:77c8e4604045 111 .fnend
mbed_official 49:77c8e4604045 112 .size os_set_env, .-os_set_env
mbed_official 49:77c8e4604045 113
mbed_official 49:77c8e4604045 114
mbed_official 49:77c8e4604045 115 /*--------------------------- _alloc_box ------------------------------------*/
mbed_official 49:77c8e4604045 116
mbed_official 49:77c8e4604045 117 # void *_alloc_box (void *box_mem);
mbed_official 49:77c8e4604045 118 /* Function wrapper for Unprivileged/Privileged mode. */
mbed_official 49:77c8e4604045 119
mbed_official 49:77c8e4604045 120 .thumb_func
mbed_official 49:77c8e4604045 121 .type _alloc_box, %function
mbed_official 49:77c8e4604045 122 .global _alloc_box
mbed_official 49:77c8e4604045 123 _alloc_box:
mbed_official 49:77c8e4604045 124 .fnstart
mbed_official 49:77c8e4604045 125 .cantunwind
mbed_official 49:77c8e4604045 126
mbed_official 49:77c8e4604045 127 LDR R12,=rt_alloc_box
mbed_official 49:77c8e4604045 128 MRS R3,IPSR
mbed_official 49:77c8e4604045 129 LSLS R3,#24
mbed_official 49:77c8e4604045 130 IT NE
mbed_official 49:77c8e4604045 131 BXNE R12
mbed_official 49:77c8e4604045 132 MRS R3,CONTROL
mbed_official 49:77c8e4604045 133 LSLS R3,#31
mbed_official 49:77c8e4604045 134 IT EQ
mbed_official 49:77c8e4604045 135 BXEQ R12
mbed_official 49:77c8e4604045 136 SVC 0
mbed_official 49:77c8e4604045 137 BX LR
mbed_official 49:77c8e4604045 138
mbed_official 49:77c8e4604045 139 .fnend
mbed_official 49:77c8e4604045 140 .size _alloc_box, .-_alloc_box
mbed_official 49:77c8e4604045 141
mbed_official 49:77c8e4604045 142
mbed_official 49:77c8e4604045 143 /*--------------------------- _free_box -------------------------------------*/
mbed_official 49:77c8e4604045 144
mbed_official 49:77c8e4604045 145 # int _free_box (void *box_mem, void *box);
mbed_official 49:77c8e4604045 146 /* Function wrapper for Unprivileged/Privileged mode. */
mbed_official 49:77c8e4604045 147
mbed_official 49:77c8e4604045 148 .thumb_func
mbed_official 49:77c8e4604045 149 .type _free_box, %function
mbed_official 49:77c8e4604045 150 .global _free_box
mbed_official 49:77c8e4604045 151 _free_box:
mbed_official 49:77c8e4604045 152 .fnstart
mbed_official 49:77c8e4604045 153 .cantunwind
mbed_official 49:77c8e4604045 154
mbed_official 49:77c8e4604045 155 LDR R12,=rt_free_box
mbed_official 49:77c8e4604045 156 MRS R3,IPSR
mbed_official 49:77c8e4604045 157 LSLS R3,#24
mbed_official 49:77c8e4604045 158 IT NE
mbed_official 49:77c8e4604045 159 BXNE R12
mbed_official 49:77c8e4604045 160 MRS R3,CONTROL
mbed_official 49:77c8e4604045 161 LSLS R3,#31
mbed_official 49:77c8e4604045 162 IT EQ
mbed_official 49:77c8e4604045 163 BXEQ R12
mbed_official 49:77c8e4604045 164 SVC 0
mbed_official 49:77c8e4604045 165 BX LR
mbed_official 49:77c8e4604045 166
mbed_official 49:77c8e4604045 167 .fnend
mbed_official 49:77c8e4604045 168 .size _free_box, .-_free_box
mbed_official 49:77c8e4604045 169
mbed_official 49:77c8e4604045 170
mbed_official 49:77c8e4604045 171 /*-------------------------- SVC_Handler ------------------------------------*/
mbed_official 49:77c8e4604045 172
mbed_official 49:77c8e4604045 173 # void SVC_Handler (void);
mbed_official 49:77c8e4604045 174
mbed_official 49:77c8e4604045 175 .thumb_func
mbed_official 49:77c8e4604045 176 .type SVC_Handler, %function
mbed_official 49:77c8e4604045 177 .global SVC_Handler
mbed_official 49:77c8e4604045 178 SVC_Handler:
mbed_official 49:77c8e4604045 179 .ifdef IFX_XMC4XXX
mbed_official 49:77c8e4604045 180 .global SVC_Handler_Veneer
mbed_official 49:77c8e4604045 181 SVC_Handler_Veneer:
mbed_official 49:77c8e4604045 182 .endif
mbed_official 49:77c8e4604045 183 .fnstart
mbed_official 49:77c8e4604045 184 .cantunwind
mbed_official 49:77c8e4604045 185
mbed_official 49:77c8e4604045 186 MRS R0,PSP /* Read PSP */
mbed_official 49:77c8e4604045 187 LDR R1,[R0,#24] /* Read Saved PC from Stack */
mbed_official 49:77c8e4604045 188 LDRB R1,[R1,#-2] /* Load SVC Number */
mbed_official 49:77c8e4604045 189 CBNZ R1,SVC_User
mbed_official 49:77c8e4604045 190
mbed_official 49:77c8e4604045 191 LDM R0,{R0-R3,R12} /* Read R0-R3,R12 from stack */
mbed_official 49:77c8e4604045 192 PUSH {R4,LR} /* Save EXC_RETURN */
mbed_official 49:77c8e4604045 193 BLX R12 /* Call SVC Function */
mbed_official 49:77c8e4604045 194 POP {R4,LR} /* Restore EXC_RETURN */
mbed_official 49:77c8e4604045 195
mbed_official 49:77c8e4604045 196 MRS R12,PSP /* Read PSP */
mbed_official 49:77c8e4604045 197 STM R12,{R0-R2} /* Store return values */
mbed_official 49:77c8e4604045 198
mbed_official 49:77c8e4604045 199 LDR R3,=os_tsk
mbed_official 49:77c8e4604045 200 LDM R3,{R1,R2} /* os_tsk.run, os_tsk.new */
mbed_official 49:77c8e4604045 201 CMP R1,R2
mbed_official 49:77c8e4604045 202 .ifdef IFX_XMC4XXX
mbed_official 49:77c8e4604045 203 ITT EQ
mbed_official 49:77c8e4604045 204 PUSHEQ {LR}
mbed_official 49:77c8e4604045 205 POPEQ {PC}
mbed_official 49:77c8e4604045 206 .else
mbed_official 49:77c8e4604045 207 IT EQ
mbed_official 49:77c8e4604045 208 BXEQ LR /* RETI, no task switch */
mbed_official 49:77c8e4604045 209 .endif
mbed_official 49:77c8e4604045 210
mbed_official 49:77c8e4604045 211 CBZ R1,SVC_Next /* Runtask deleted? */
mbed_official 49:77c8e4604045 212 TST LR,#0x10 /* is it extended frame? */
mbed_official 74:899aee34da6a 213 #ifdef __FPU_PRESENT
mbed_official 49:77c8e4604045 214 ITTE EQ
mbed_official 49:77c8e4604045 215 VSTMDBEQ R12!,{S16-S31} /* yes, stack also VFP hi-regs */
mbed_official 74:899aee34da6a 216 #else
mbed_official 74:899aee34da6a 217 ITE EQ
mbed_official 74:899aee34da6a 218 #endif
mbed_official 49:77c8e4604045 219 MOVEQ R0,#0x01 /* os_tsk->stack_frame val */
mbed_official 49:77c8e4604045 220 MOVNE R0,#0x00
mbed_official 49:77c8e4604045 221 STRB R0,[R1,#TCB_STACKF] /* os_tsk.run->stack_frame = val */
mbed_official 49:77c8e4604045 222 STMDB R12!,{R4-R11} /* Save Old context */
mbed_official 49:77c8e4604045 223 STR R12,[R1,#TCB_TSTACK] /* Update os_tsk.run->tsk_stack */
mbed_official 49:77c8e4604045 224
mbed_official 49:77c8e4604045 225 PUSH {R2,R3}
mbed_official 49:77c8e4604045 226 BL rt_stk_check /* Check for Stack overflow */
mbed_official 49:77c8e4604045 227 POP {R2,R3}
mbed_official 49:77c8e4604045 228
mbed_official 49:77c8e4604045 229 SVC_Next:
mbed_official 49:77c8e4604045 230 STR R2,[R3] /* os_tsk.run = os_tsk.new */
mbed_official 49:77c8e4604045 231
mbed_official 49:77c8e4604045 232 LDR R12,[R2,#TCB_TSTACK] /* os_tsk.new->tsk_stack */
mbed_official 49:77c8e4604045 233 LDMIA R12!,{R4-R11} /* Restore New Context */
mbed_official 49:77c8e4604045 234 LDRB R0,[R2,#TCB_STACKF] /* Stack Frame */
mbed_official 49:77c8e4604045 235 CMP R0,#0 /* Basic/Extended Stack Frame */
mbed_official 74:899aee34da6a 236 #ifdef __FPU_PRESENT
mbed_official 49:77c8e4604045 237 ITTE NE
mbed_official 49:77c8e4604045 238 VLDMIANE R12!,{S16-S31} /* restore VFP hi-registers */
mbed_official 74:899aee34da6a 239 #else
mbed_official 74:899aee34da6a 240 ITE NE
mbed_official 74:899aee34da6a 241 #endif
mbed_official 49:77c8e4604045 242 MVNNE LR,#~0xFFFFFFED /* set EXC_RETURN value */
mbed_official 49:77c8e4604045 243 MVNEQ LR,#~0xFFFFFFFD
mbed_official 49:77c8e4604045 244 MSR PSP,R12 /* Write PSP */
mbed_official 49:77c8e4604045 245
mbed_official 49:77c8e4604045 246 SVC_Exit:
mbed_official 49:77c8e4604045 247 .ifdef IFX_XMC4XXX
mbed_official 49:77c8e4604045 248 PUSH {LR}
mbed_official 49:77c8e4604045 249 POP {PC}
mbed_official 49:77c8e4604045 250 .else
mbed_official 49:77c8e4604045 251 BX LR
mbed_official 49:77c8e4604045 252 .endif
mbed_official 49:77c8e4604045 253
mbed_official 49:77c8e4604045 254 /*------------------- User SVC ------------------------------*/
mbed_official 49:77c8e4604045 255
mbed_official 49:77c8e4604045 256 SVC_User:
mbed_official 49:77c8e4604045 257 PUSH {R4,LR} /* Save Registers */
mbed_official 49:77c8e4604045 258 LDR R2,=SVC_Count
mbed_official 49:77c8e4604045 259 LDR R2,[R2]
mbed_official 49:77c8e4604045 260 CMP R1,R2
mbed_official 49:77c8e4604045 261 BHI SVC_Done /* Overflow */
mbed_official 49:77c8e4604045 262
mbed_official 49:77c8e4604045 263 LDR R4,=SVC_Table-4
mbed_official 49:77c8e4604045 264 LDR R4,[R4,R1,LSL #2] /* Load SVC Function Address */
mbed_official 49:77c8e4604045 265
mbed_official 49:77c8e4604045 266 LDM R0,{R0-R3,R12} /* Read R0-R3,R12 from stack */
mbed_official 49:77c8e4604045 267 BLX R4 /* Call SVC Function */
mbed_official 49:77c8e4604045 268
mbed_official 49:77c8e4604045 269 MRS R12,PSP
mbed_official 49:77c8e4604045 270 STM R12,{R0-R3} /* Function return values */
mbed_official 49:77c8e4604045 271 SVC_Done:
mbed_official 49:77c8e4604045 272 POP {R4,PC} /* RETI */
mbed_official 49:77c8e4604045 273
mbed_official 49:77c8e4604045 274 .fnend
mbed_official 49:77c8e4604045 275 .size SVC_Handler, .-SVC_Handler
mbed_official 68:d3d0e710b443 276
mbed_official 49:77c8e4604045 277
mbed_official 49:77c8e4604045 278 /*-------------------------- PendSV_Handler ---------------------------------*/
mbed_official 49:77c8e4604045 279
mbed_official 49:77c8e4604045 280 # void PendSV_Handler (void);
mbed_official 49:77c8e4604045 281
mbed_official 49:77c8e4604045 282 .thumb_func
mbed_official 49:77c8e4604045 283 .type PendSV_Handler, %function
mbed_official 49:77c8e4604045 284 .global PendSV_Handler
mbed_official 49:77c8e4604045 285 .global Sys_Switch
mbed_official 49:77c8e4604045 286 PendSV_Handler:
mbed_official 49:77c8e4604045 287 .ifdef IFX_XMC4XXX
mbed_official 49:77c8e4604045 288 .global PendSV_Handler_Veneer
mbed_official 49:77c8e4604045 289 PendSV_Handler_Veneer:
mbed_official 49:77c8e4604045 290 .endif
mbed_official 49:77c8e4604045 291 .fnstart
mbed_official 49:77c8e4604045 292 .cantunwind
mbed_official 49:77c8e4604045 293
mbed_official 49:77c8e4604045 294 PUSH {R4,LR} /* Save EXC_RETURN */
mbed_official 49:77c8e4604045 295 BL rt_pop_req
mbed_official 49:77c8e4604045 296
mbed_official 49:77c8e4604045 297 Sys_Switch:
mbed_official 49:77c8e4604045 298 POP {R4,LR} /* Restore EXC_RETURN */
mbed_official 49:77c8e4604045 299
mbed_official 49:77c8e4604045 300 LDR R3,=os_tsk
mbed_official 49:77c8e4604045 301 LDM R3,{R1,R2} /* os_tsk.run, os_tsk.new */
mbed_official 49:77c8e4604045 302 CMP R1,R2
mbed_official 49:77c8e4604045 303 .ifdef IFX_XMC4XXX
mbed_official 49:77c8e4604045 304 ITT EQ
mbed_official 49:77c8e4604045 305 PUSHEQ {LR}
mbed_official 49:77c8e4604045 306 POPEQ {PC}
mbed_official 49:77c8e4604045 307 .else
mbed_official 49:77c8e4604045 308 IT EQ
mbed_official 49:77c8e4604045 309 BXEQ LR /* RETI, no task switch */
mbed_official 49:77c8e4604045 310 .endif
mbed_official 49:77c8e4604045 311
mbed_official 49:77c8e4604045 312 MRS R12,PSP /* Read PSP */
mbed_official 49:77c8e4604045 313 TST LR,#0x10 /* is it extended frame? */
mbed_official 74:899aee34da6a 314 #ifdef __FPU_PRESENT
mbed_official 49:77c8e4604045 315 ITTE EQ
mbed_official 49:77c8e4604045 316 VSTMDBEQ R12!,{S16-S31} /* yes, stack also VFP hi-regs */
mbed_official 74:899aee34da6a 317 #else
mbed_official 74:899aee34da6a 318 ITE EQ
mbed_official 74:899aee34da6a 319 #endif
mbed_official 49:77c8e4604045 320 MOVEQ R0,#0x01 /* os_tsk->stack_frame val */
mbed_official 49:77c8e4604045 321 MOVNE R0,#0x00
mbed_official 49:77c8e4604045 322 STRB R0,[R1,#TCB_STACKF] /* os_tsk.run->stack_frame = val */
mbed_official 49:77c8e4604045 323 STMDB R12!,{R4-R11} /* Save Old context */
mbed_official 49:77c8e4604045 324 STR R12,[R1,#TCB_TSTACK] /* Update os_tsk.run->tsk_stack */
mbed_official 49:77c8e4604045 325
mbed_official 49:77c8e4604045 326 PUSH {R2,R3}
mbed_official 49:77c8e4604045 327 BL rt_stk_check /* Check for Stack overflow */
mbed_official 49:77c8e4604045 328 POP {R2,R3}
mbed_official 49:77c8e4604045 329
mbed_official 49:77c8e4604045 330 STR R2,[R3] /* os_tsk.run = os_tsk.new */
mbed_official 49:77c8e4604045 331
mbed_official 49:77c8e4604045 332 LDR R12,[R2,#TCB_TSTACK] /* os_tsk.new->tsk_stack */
mbed_official 49:77c8e4604045 333 LDMIA R12!,{R4-R11} /* Restore New Context */
mbed_official 49:77c8e4604045 334 LDRB R0,[R2,#TCB_STACKF] /* Stack Frame */
mbed_official 49:77c8e4604045 335 CMP R0,#0 /* Basic/Extended Stack Frame */
mbed_official 74:899aee34da6a 336 #ifdef __FPU_PRESENT
mbed_official 49:77c8e4604045 337 ITTE NE
mbed_official 49:77c8e4604045 338 VLDMIANE R12!,{S16-S31} /* restore VFP hi-registers */
mbed_official 74:899aee34da6a 339 #else
mbed_official 74:899aee34da6a 340 ITE NE
mbed_official 74:899aee34da6a 341 #endif
mbed_official 49:77c8e4604045 342 MVNNE LR,#~0xFFFFFFED /* set EXC_RETURN value */
mbed_official 49:77c8e4604045 343 MVNEQ LR,#~0xFFFFFFFD
mbed_official 49:77c8e4604045 344 MSR PSP,R12 /* Write PSP */
mbed_official 49:77c8e4604045 345
mbed_official 49:77c8e4604045 346 Sys_Exit:
mbed_official 49:77c8e4604045 347 .ifdef IFX_XMC4XXX
mbed_official 49:77c8e4604045 348 PUSH {LR}
mbed_official 49:77c8e4604045 349 POP {PC}
mbed_official 49:77c8e4604045 350 .else
mbed_official 49:77c8e4604045 351 BX LR /* Return to Thread Mode */
mbed_official 49:77c8e4604045 352 .endif
mbed_official 49:77c8e4604045 353
mbed_official 49:77c8e4604045 354 .fnend
mbed_official 49:77c8e4604045 355 .size PendSV_Handler, .-PendSV_Handler
mbed_official 49:77c8e4604045 356
mbed_official 49:77c8e4604045 357
mbed_official 49:77c8e4604045 358 /*-------------------------- SysTick_Handler --------------------------------*/
mbed_official 49:77c8e4604045 359
mbed_official 49:77c8e4604045 360 # void SysTick_Handler (void);
mbed_official 49:77c8e4604045 361
mbed_official 49:77c8e4604045 362 .thumb_func
mbed_official 49:77c8e4604045 363 .type SysTick_Handler, %function
mbed_official 49:77c8e4604045 364 .global SysTick_Handler
mbed_official 49:77c8e4604045 365 SysTick_Handler:
mbed_official 49:77c8e4604045 366 .ifdef IFX_XMC4XXX
mbed_official 49:77c8e4604045 367 .global SysTick_Handler_Veneer
mbed_official 49:77c8e4604045 368 SysTick_Handler_Veneer:
mbed_official 49:77c8e4604045 369 .endif
mbed_official 49:77c8e4604045 370 .fnstart
mbed_official 49:77c8e4604045 371 .cantunwind
mbed_official 49:77c8e4604045 372
mbed_official 49:77c8e4604045 373 PUSH {R4,LR} /* Save EXC_RETURN */
mbed_official 49:77c8e4604045 374 BL rt_systick
mbed_official 49:77c8e4604045 375 B Sys_Switch
mbed_official 49:77c8e4604045 376
mbed_official 49:77c8e4604045 377 .fnend
mbed_official 49:77c8e4604045 378 .size SysTick_Handler, .-SysTick_Handler
mbed_official 49:77c8e4604045 379
mbed_official 49:77c8e4604045 380
mbed_official 49:77c8e4604045 381 /*-------------------------- OS_Tick_Handler --------------------------------*/
mbed_official 49:77c8e4604045 382
mbed_official 49:77c8e4604045 383 # void OS_Tick_Handler (void);
mbed_official 49:77c8e4604045 384
mbed_official 49:77c8e4604045 385 .thumb_func
mbed_official 49:77c8e4604045 386 .type OS_Tick_Handler, %function
mbed_official 49:77c8e4604045 387 .global OS_Tick_Handler
mbed_official 49:77c8e4604045 388 OS_Tick_Handler:
mbed_official 49:77c8e4604045 389 .fnstart
mbed_official 49:77c8e4604045 390 .cantunwind
mbed_official 49:77c8e4604045 391
mbed_official 49:77c8e4604045 392 PUSH {R4,LR} /* Save EXC_RETURN */
mbed_official 49:77c8e4604045 393 BL os_tick_irqack
mbed_official 49:77c8e4604045 394 BL rt_systick
mbed_official 49:77c8e4604045 395 B Sys_Switch
mbed_official 49:77c8e4604045 396
mbed_official 49:77c8e4604045 397 .fnend
mbed_official 49:77c8e4604045 398 .size OS_Tick_Handler, .-OS_Tick_Handler
mbed_official 49:77c8e4604045 399
mbed_official 49:77c8e4604045 400
mbed_official 49:77c8e4604045 401 .end
mbed_official 49:77c8e4604045 402
mbed_official 49:77c8e4604045 403 /*----------------------------------------------------------------------------
mbed_official 49:77c8e4604045 404 * end of file
mbed_official 49:77c8e4604045 405 *---------------------------------------------------------------------------*/