]> begriffs open source - freertos/blob - portable/IAR/MSP430/portext.s43
FreeRTOS MPU: Remove MPU region number check (#1261)
[freertos] / portable / IAR / MSP430 / portext.s43
1 /*
2  * FreeRTOS Kernel <DEVELOPMENT BRANCH>
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 #include "FreeRTOSConfig.h"
29 #include "portasm.h"
30
31     IMPORT xTaskIncrementTick
32     IMPORT vTaskSwitchContext
33     IMPORT vPortSetupTimerInterrupt
34
35     EXPORT vTickISR
36     EXPORT vPortYield
37     EXPORT xPortStartScheduler
38
39     RSEG CODE
40
41 /*
42  * The RTOS tick ISR.
43  *
44  * If the cooperative scheduler is in use this simply increments the tick
45  * count.
46  *
47  * If the preemptive scheduler is in use a context switch can also occur.
48  */
49 vTickISR:
50     portSAVE_CONTEXT
51
52     call    #xTaskIncrementTick
53     cmp.w   #0x0, R12
54     jeq     SkipContextSwitch
55     call    #vTaskSwitchContext
56 SkipContextSwitch:
57
58     portRESTORE_CONTEXT
59 /*-----------------------------------------------------------*/
60
61
62 /*
63  * Manual context switch called by the portYIELD() macro.
64  */
65 vPortYield:
66
67     /* Mimic an interrupt by pushing the SR. */
68     push    SR
69
70     /* Now the SR is stacked we can disable interrupts. */
71     dint
72
73     /* Save the context of the current task. */
74     portSAVE_CONTEXT
75
76     /* Switch to the highest priority task that is ready to run. */
77     call    #vTaskSwitchContext
78
79     /* Restore the context of the new task. */
80     portRESTORE_CONTEXT
81 /*-----------------------------------------------------------*/
82
83
84 /*
85  * Start off the scheduler by initialising the RTOS tick timer, then restoring
86  * the context of the first task.
87  */
88 xPortStartScheduler:
89
90     /* Setup the hardware to generate the tick.  Interrupts are disabled
91     when this function is called. */
92     call    #vPortSetupTimerInterrupt
93
94     /* Restore the context of the first task that is going to run. */
95     portRESTORE_CONTEXT
96 /*-----------------------------------------------------------*/
97
98
99     /* Install vTickISR as the timer A0 interrupt. */
100     ASEG
101     ORG 0xFFE0 + TIMERA0_VECTOR
102
103     _vTickISR_: DC16 vTickISR
104
105
106     END