]> begriffs open source - freertos/blob - portable/IAR/LPC2000/ISR_Support.h
Style: uncrustify kernel files
[freertos] / portable / IAR / LPC2000 / ISR_Support.h
1 ;/*\r
2 ; * FreeRTOS Kernel V10.3.1\r
3 ; * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4 ; *\r
5 ; * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6 ; * this software and associated documentation files (the "Software"), to deal in\r
7 ; * the Software without restriction, including without limitation the rights to\r
8 ; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9 ; * the Software, and to permit persons to whom the Software is furnished to do so,\r
10 ; * subject to the following conditions:\r
11 ; *\r
12 ; * The above copyright notice and this permission notice shall be included in all\r
13 ; * copies or substantial portions of the Software.\r
14 ; *\r
15 ; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16 ; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17 ; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18 ; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19 ; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20 ; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21 ; *\r
22 ; * http://www.FreeRTOS.org\r
23 ; * http://aws.amazon.com/freertos\r
24 ; *\r
25 ; */\r
26 \r
27         EXTERN pxCurrentTCB\r
28         EXTERN ulCriticalNesting\r
29 \r
30 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
31 ; Context save and restore macro definitions\r
32 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
33 \r
34 portSAVE_CONTEXT MACRO\r
35 \r
36         ; Push R0 as we are going to use the register.\r
37         STMDB   SP!, {R0}\r
38 \r
39         ; Set R0 to point to the task stack pointer.\r
40         STMDB   SP, {SP}^\r
41         NOP\r
42         SUB             SP, SP, #4\r
43         LDMIA   SP!, {R0}\r
44 \r
45         ; Push the return address onto the stack.\r
46         STMDB   R0!, {LR}\r
47 \r
48         ; Now we have saved LR we can use it instead of R0.\r
49         MOV             LR, R0\r
50 \r
51         ; Pop R0 so we can save it onto the system mode stack.\r
52         LDMIA   SP!, {R0}\r
53 \r
54         ; Push all the system mode registers onto the task stack.\r
55         STMDB   LR, {R0-LR}^\r
56         NOP\r
57         SUB             LR, LR, #60\r
58 \r
59         ; Push the SPSR onto the task stack.\r
60         MRS             R0, SPSR\r
61         STMDB   LR!, {R0}\r
62 \r
63         LDR             R0, =ulCriticalNesting\r
64         LDR             R0, [R0]\r
65         STMDB   LR!, {R0}\r
66 \r
67         ; Store the new top of stack for the task.\r
68         LDR             R1, =pxCurrentTCB\r
69         LDR             R0, [R1]\r
70         STR             LR, [R0]\r
71 \r
72         ENDM\r
73 \r
74 \r
75 portRESTORE_CONTEXT MACRO\r
76 \r
77         ; Set the LR to the task stack.\r
78         LDR             R1, =pxCurrentTCB\r
79         LDR             R0, [R1]\r
80         LDR             LR, [R0]\r
81 \r
82         ; The critical nesting depth is the first item on the stack.\r
83         ; Load it into the ulCriticalNesting variable.\r
84         LDR             R0, =ulCriticalNesting\r
85         LDMFD   LR!, {R1}\r
86         STR             R1, [R0]\r
87 \r
88         ; Get the SPSR from the stack.\r
89         LDMFD   LR!, {R0}\r
90         MSR             SPSR_cxsf, R0\r
91 \r
92         ; Restore all system mode registers for the task.\r
93         LDMFD   LR, {R0-R14}^\r
94         NOP\r
95 \r
96         ; Restore the return address.\r
97         LDR             LR, [LR, #+60]\r
98 \r
99         ; And return - correcting the offset in the LR to obtain the\r
100         ; correct address.\r
101         SUBS    PC, LR, #4\r
102 \r
103         ENDM\r
104 \r