]> git.sur5r.net Git - freertos/blob - FreeRTOS/Source/portable/IAR/ARM_CM3/portasm.s
Update license information text files for the CLI, TCP and UDP products to be correct...
[freertos] / FreeRTOS / Source / portable / IAR / ARM_CM3 / portasm.s
1 /*\r
2  * FreeRTOS Kernel V10.0.0\r
3  * Copyright (C) 2017 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. If you wish to use our Amazon\r
14  * FreeRTOS name, please do so in a fair use way that does not cause confusion.\r
15  *\r
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
18  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
19  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
20  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
22  *\r
23  * http://www.FreeRTOS.org\r
24  * http://aws.amazon.com/freertos\r
25  *\r
26  * 1 tab == 4 spaces!\r
27  */\r
28 \r
29 #include <FreeRTOSConfig.h>\r
30 \r
31         RSEG    CODE:CODE(2)\r
32         thumb\r
33 \r
34         EXTERN pxCurrentTCB\r
35         EXTERN vTaskSwitchContext\r
36 \r
37         PUBLIC xPortPendSVHandler\r
38         PUBLIC vPortSVCHandler\r
39         PUBLIC vPortStartFirstTask\r
40 \r
41 \r
42 \r
43 /*-----------------------------------------------------------*/\r
44 \r
45 xPortPendSVHandler:\r
46         mrs r0, psp\r
47         isb\r
48         ldr     r3, =pxCurrentTCB                       /* Get the location of the current TCB. */\r
49         ldr     r2, [r3]\r
50 \r
51         stmdb r0!, {r4-r11}                             /* Save the remaining registers. */\r
52         str r0, [r2]                                    /* Save the new top of stack into the first member of the TCB. */\r
53 \r
54         stmdb sp!, {r3, r14}\r
55         mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY\r
56         msr basepri, r0\r
57         dsb\r
58         isb\r
59         bl vTaskSwitchContext\r
60         mov r0, #0\r
61         msr basepri, r0\r
62         ldmia sp!, {r3, r14}\r
63 \r
64         ldr r1, [r3]\r
65         ldr r0, [r1]                                    /* The first item in pxCurrentTCB is the task top of stack. */\r
66         ldmia r0!, {r4-r11}                             /* Pop the registers. */\r
67         msr psp, r0\r
68         isb\r
69         bx r14\r
70 \r
71 \r
72 /*-----------------------------------------------------------*/\r
73 \r
74 vPortSVCHandler:\r
75         /* Get the location of the current TCB. */\r
76         ldr     r3, =pxCurrentTCB\r
77         ldr r1, [r3]\r
78         ldr r0, [r1]\r
79         /* Pop the core registers. */\r
80         ldmia r0!, {r4-r11}\r
81         msr psp, r0\r
82         isb\r
83         mov r0, #0\r
84         msr     basepri, r0\r
85         orr r14, r14, #13\r
86         bx r14\r
87 \r
88 /*-----------------------------------------------------------*/\r
89 \r
90 vPortStartFirstTask\r
91         /* Use the NVIC offset register to locate the stack. */\r
92         ldr r0, =0xE000ED08\r
93         ldr r0, [r0]\r
94         ldr r0, [r0]\r
95         /* Set the msp back to the start of the stack. */\r
96         msr msp, r0\r
97         /* Call SVC to start the first task, ensuring interrupts are enabled. */\r
98         cpsie i\r
99         cpsie f\r
100         dsb\r
101         isb\r
102         svc 0\r
103 \r
104         END\r