]> begriffs open source - freertos/blob - portable/Rowley/MSP430F449/portext.asm
[AUTO][RELEASE]: Bump file header version to "10.6.2"
[freertos] / portable / Rowley / MSP430F449 / portext.asm
1 /*
2  * FreeRTOS Kernel V10.6.2
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 #include "FreeRTOSConfig.h"
30 #include "portasm.h"
31
32
33 .CODE
34
35 /*
36  * The RTOS tick ISR.
37  *
38  * If the cooperative scheduler is in use this simply increments the tick
39  * count.
40  *
41  * If the preemptive scheduler is in use a context switch can also occur.
42  */
43 _vTickISR:
44         portSAVE_CONTEXT
45
46         call    #_xTaskIncrementTick
47         cmp.w   #0x00, r15
48                 jeq     _SkipContextSwitch
49         call    #_vTaskSwitchContext
50 _SkipContextSwitch:
51         portRESTORE_CONTEXT
52 /*-----------------------------------------------------------*/
53
54
55 /*
56  * Manual context switch called by the portYIELD() macro.
57  */
58 _vPortYield::
59
60         /* Mimic an interrupt by pushing the SR. */
61         push    SR
62
63         /* Now the SR is stacked we can disable interrupts. */
64         dint
65
66         /* Save the context of the current task. */
67         portSAVE_CONTEXT
68
69         /* Switch to the highest priority task that is ready to run. */
70         call    #_vTaskSwitchContext
71
72         /* Restore the context of the new task. */
73         portRESTORE_CONTEXT
74 /*-----------------------------------------------------------*/
75
76
77 /*
78  * Start off the scheduler by initialising the RTOS tick timer, then restoring
79  * the context of the first task.
80  */
81 _xPortStartScheduler::
82
83         /* Setup the hardware to generate the tick.  Interrupts are disabled
84         when this function is called. */
85         call    #_prvSetupTimerInterrupt
86
87         /* Restore the context of the first task that is going to run. */
88         portRESTORE_CONTEXT
89 /*-----------------------------------------------------------*/
90
91
92         /* Place the tick ISR in the correct vector. */
93         .VECTORS
94
95         .KEEP
96
97         ORG     TIMERA0_VECTOR
98         DW      _vTickISR
99
100
101
102         END
103