]> begriffs open source - cmsis-freertos/blob - Source/portable/Rowley/MSP430F449/portext.asm
Updated pack to FreeRTOS 10.4.4
[cmsis-freertos] / Source / portable / Rowley / MSP430F449 / portext.asm
1 /*
2  * FreeRTOS Kernel V10.4.4
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