]> git.sur5r.net Git - freertos/blob - FreeRTOS/Source/portable/IAR/78K0R/portasm.s26
Update to MIT licensed FreeRTOS V10.0.0 - see https://www.freertos.org/History.txt
[freertos] / FreeRTOS / Source / portable / IAR / 78K0R / portasm.s26
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 "ISR_Support.h"\r
30 ;------------------------------------------------------------------------------\r
31 \r
32 #if __CORE__ != __78K0R__\r
33         #error "This file is only for 78K0R Devices"\r
34 #endif\r
35 \r
36 #define CS                    0xFFFFC\r
37 #define ES                    0xFFFFD\r
38 \r
39 ; Functions implemented in this file\r
40 ;------------------------------------------------------------------------------\r
41         PUBLIC    vPortYield\r
42         PUBLIC    vPortStart\r
43 \r
44 ; Functions used by scheduler\r
45 ;------------------------------------------------------------------------------\r
46         EXTERN    vTaskSwitchContext\r
47         EXTERN    xTaskIncrementTick\r
48 \r
49 ; Tick ISR Prototype\r
50 ;------------------------------------------------------------------------------\r
51 ;       EXTERN    ?CL78K0R_V2_L00\r
52 \r
53         PUBWEAK   `??MD_INTTM05??INTVEC 68`\r
54         PUBLIC    MD_INTTM05\r
55 \r
56 MD_INTTM05    SYMBOL "MD_INTTM05"\r
57 `??MD_INTTM05??INTVEC 68` SYMBOL "??INTVEC 68", MD_INTTM05\r
58 \r
59 \r
60 \r
61 ;------------------------------------------------------------------------------\r
62 ;   Yield to another task.  Implemented as a software interrupt.  The return\r
63 ;   address and PSW will have been saved to the stack automatically before\r
64 ;   this code runs.\r
65 ;\r
66 ;   Input:  NONE\r
67 ;\r
68 ;   Call:   CALL    vPortYield\r
69 ;\r
70 ;   Output: NONE\r
71 ;\r
72 ;------------------------------------------------------------------------------\r
73     RSEG CODE:CODE\r
74 vPortYield:\r
75         portSAVE_CONTEXT                        ; Save the context of the current task.\r
76         call      vTaskSwitchContext    ; Call the scheduler to select the next task.\r
77         portRESTORE_CONTEXT                     ; Restore the context of the next task to run.\r
78         retb\r
79 \r
80 \r
81 ;------------------------------------------------------------------------------\r
82 ;   Restore the context of the first task that is going to run.\r
83 ;\r
84 ;   Input:  NONE\r
85 ;\r
86 ;   Call:   CALL    vPortStart\r
87 ;\r
88 ;   Output: NONE\r
89 ;\r
90 ;------------------------------------------------------------------------------\r
91     RSEG CODE:CODE\r
92 vPortStart:\r
93         portRESTORE_CONTEXT                 ; Restore the context of whichever task the ...\r
94         reti                                            ; An interrupt stack frame is used so the task\r
95                                     ; is started using a RETI instruction.\r
96 \r
97 ;------------------------------------------------------------------------------\r
98 ;   Perform the necessary steps of the Tick Count Increment and Task Switch\r
99 ;   depending on the chosen kernel configuration\r
100 ;\r
101 ;   Input:  NONE\r
102 ;\r
103 ;   Call:   ISR\r
104 ;\r
105 ;   Output: NONE\r
106 ;\r
107 ;------------------------------------------------------------------------------\r
108 \r
109 MD_INTTM05:\r
110 \r
111         portSAVE_CONTEXT                        ; Save the context of the current task.\r
112         call      xTaskIncrementTick    ; Call the timer tick function.\r
113 #if configUSE_PREEMPTION == 1\r
114         call      vTaskSwitchContext    ; Call the scheduler to select the next task.\r
115 #endif\r
116         portRESTORE_CONTEXT                     ; Restore the context of the next task to run.\r
117         reti\r
118 \r
119 \r
120 \r
121 ;       REQUIRE ?CL78K0R_V2_L00\r
122         COMMON INTVEC:CODE:ROOT(1)      ; Set ISR location to the Interrupt vector table.\r
123         ORG 68\r
124 `??MD_INTTM05??INTVEC 68`:\r
125         DW MD_INTTM05\r
126 \r
127         COMMON INTVEC:CODE:ROOT(1)      ; Set ISR location to the Interrupt vector table.\r
128         ORG 126\r
129 `??vPortYield??INTVEC 126`:\r
130         DW vPortYield\r
131 \r
132                                                                         ; Set value for the usCriticalNesting.\r
133         RSEG NEAR_ID:CONST:SORT:NOROOT(1)\r
134 `?<Initializer for usCriticalNesting>`:\r
135         DW 10\r
136 \r
137 ;#endif\r
138 \r
139       END