2 ; FreeRTOS V8.2.2 - Copyright (C) 2015 Real Time Engineers Ltd.
\r
3 ; All rights reserved
\r
5 ; VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
\r
7 ; This file is part of the FreeRTOS distribution.
\r
9 ; FreeRTOS is free software; you can redistribute it and/or modify it under
\r
10 ; the terms of the GNU General Public License (version 2) as published by the
\r
11 ; Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
\r
13 ; ***************************************************************************
\r
14 ; >>! NOTE: The modification to the GPL is included to allow you to !<<
\r
15 ; >>! distribute a combined work that includes FreeRTOS without being !<<
\r
16 ; >>! obliged to provide the source code for proprietary components !<<
\r
17 ; >>! outside of the FreeRTOS kernel. !<<
\r
18 ; ***************************************************************************
\r
20 ; FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
\r
21 ; WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
\r
22 ; FOR A PARTICULAR PURPOSE. Full license text is available on the following
\r
23 ; link: http://www.freertos.org/a00114.html
\r
25 ; ***************************************************************************
\r
27 ; * FreeRTOS provides completely free yet professionally developed, *
\r
28 ; * robust, strictly quality controlled, supported, and cross *
\r
29 ; * platform software that is more than just the market leader, it *
\r
30 ; * is the industry's de facto standard. *
\r
32 ; * Help yourself get started quickly while simultaneously helping *
\r
33 ; * to support the FreeRTOS project by purchasing a FreeRTOS *
\r
34 ; * tutorial book, reference manual, or both: *
\r
35 ; * http://www.FreeRTOS.org/Documentation *
\r
37 ; ***************************************************************************
\r
39 ; http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
\r
40 ; the FAQ page "My application does not run, what could be wrong?". Have you
\r
41 ; defined configASSERT()?
\r
43 ; http://www.FreeRTOS.org/support - In return for receiving this top quality
\r
44 ; embedded software for free we request you assist our global community by
\r
45 ; participating in the support forum.
\r
47 ; http://www.FreeRTOS.org/training - Investing in training allows your team to
\r
48 ; be as productive as possible as early as possible. Now you can receive
\r
49 ; FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
\r
50 ; Ltd, and the world's leading authority on the world's leading RTOS.
\r
52 ; http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
\r
53 ; including FreeRTOS+Trace - an indispensable productivity tool, a DOS
\r
54 ; compatible FAT file system, and our tiny thread aware UDP/IP stack.
\r
56 ; http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
\r
57 ; Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
\r
59 ; http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
\r
60 ; Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
\r
61 ; licenses offer ticketed support, indemnification and commercial middleware.
\r
63 ; http://www.SafeRTOS.com - High Integrity Systems also provide a safety
\r
64 ; engineered and independently SIL3 certified version for use in safety and
\r
65 ; mission critical applications that require provable dependability.
\r
67 ; 1 tab == 4 spaces!
\r
73 .ref vTaskSwitchContext
\r
74 .ref ulMaxSyscallInterruptPriority
\r
76 .def xPortPendSVHandler
\r
78 .def vPortSVCHandler
\r
79 .def vPortStartFirstTask
\r
82 NVICOffsetConst: .word 0xE000ED08
\r
83 CPACRConst: .word 0xE000ED88
\r
84 pxCurrentTCBConst: .word pxCurrentTCB
\r
85 ulMaxSyscallInterruptPriorityConst: .word ulMaxSyscallInterruptPriority
\r
87 ; -----------------------------------------------------------
\r
90 ulPortGetIPSR: .asmfunc
\r
94 ; -----------------------------------------------------------
\r
97 vPortSetInterruptMask: .asmfunc
\r
99 ldr r0, ulMaxSyscallInterruptPriorityConst
\r
104 ; -----------------------------------------------------------
\r
107 xPortPendSVHandler: .asmfunc
\r
111 ;/* Get the location of the current TCB. */
\r
112 ldr r3, pxCurrentTCBConst
\r
115 ;/* Is the task using the FPU context? If so, push high vfp registers. */
\r
118 vstmdbeq r0!, {s16-s31}
\r
120 ;/* Save the core registers. */
\r
121 stmdb r0!, {r4-r11, r14}
\r
123 ;/* Save the new top of stack into the first member of the TCB. */
\r
127 ldr r0, ulMaxSyscallInterruptPriorityConst
\r
132 bl vTaskSwitchContext
\r
137 ;/* The first item in pxCurrentTCB is the task top of stack. */
\r
141 ;/* Pop the core registers. */
\r
142 ldmia r0!, {r4-r11, r14}
\r
144 ;/* Is the task using the FPU context? If so, pop the high vfp registers
\r
148 vldmiaeq r0!, {s16-s31}
\r
155 ; -----------------------------------------------------------
\r
158 vPortSVCHandler: .asmfunc
\r
159 ;/* Get the location of the current TCB. */
\r
160 ldr r3, pxCurrentTCBConst
\r
163 ;/* Pop the core registers. */
\r
164 ldmia r0!, {r4-r11, r14}
\r
172 ; -----------------------------------------------------------
\r
175 vPortStartFirstTask: .asmfunc
\r
176 ;/* Use the NVIC offset register to locate the stack. */
\r
177 ldr r0, NVICOffsetConst
\r
180 ;/* Set the msp back to the start of the stack. */
\r
182 ;/* Call SVC to start the first task. */
\r
190 ; -----------------------------------------------------------
\r
193 vPortEnableVFP: .asmfunc
\r
194 ;/* The FPU enable bits are in the CPACR. */
\r
195 ldr.w r0, CPACRConst
\r
198 ;/* Enable CP10 and CP11 coprocessors, then save back. */
\r
199 orr r1, r1, #( 0xf << 20 )
\r
206 ; -----------------------------------------------------------
\r