1 /* 2 * FreeRTOS Kernel V11.1.0 3 * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 * 5 * SPDX-License-Identifier: MIT 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy of 8 * this software and associated documentation files (the "Software"), to deal in 9 * the Software without restriction, including without limitation the rights to 10 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 * the Software, and to permit persons to whom the Software is furnished to do so, 12 * subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included in all 15 * copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 * 24 * https://www.FreeRTOS.org 25 * https://github.com/FreeRTOS 26 * 27 */ 28 29 #ifndef PORTASM_H 30 #define PORTASM_H 31 32 portSAVE_CONTEXT macro 33 34 IMPORT pxCurrentTCB 35 IMPORT usCriticalNesting 36 37 /* Save the remaining registers. */ 38 push r4 39 push r5 40 push r6 41 push r7 42 push r8 43 push r9 44 push r10 45 push r11 46 push r12 47 push r13 48 push r14 49 push r15 50 mov.w &usCriticalNesting, r14 51 push r14 52 mov.w &pxCurrentTCB, r12 53 mov.w r1, 0(r12) 54 endm 55 /*-----------------------------------------------------------*/ 56 57 portRESTORE_CONTEXT macro 58 mov.w &pxCurrentTCB, r12 59 mov.w @r12, r1 60 pop r15 61 mov.w r15, &usCriticalNesting 62 pop r15 63 pop r14 64 pop r13 65 pop r12 66 pop r11 67 pop r10 68 pop r9 69 pop r8 70 pop r7 71 pop r6 72 pop r5 73 pop r4 74 75 /* The last thing on the stack will be the status register. 76 * Ensure the power down bits are clear ready for the next 77 * time this power down register is popped from the stack. */ 78 bic.w #0xf0, 0(SP) 79 80 reti 81 endm 82 /*-----------------------------------------------------------*/ 83 84 #endif /* ifndef PORTASM_H */ 85