]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/portable/IAR/ARM_CM7/r0p1/portasm.s
Kernel changes:
[freertos] / FreeRTOS / Source / portable / IAR / ARM_CM7 / r0p1 / portasm.s
diff --git a/FreeRTOS/Source/portable/IAR/ARM_CM7/r0p1/portasm.s b/FreeRTOS/Source/portable/IAR/ARM_CM7/r0p1/portasm.s
new file mode 100644 (file)
index 0000000..6aaadff
--- /dev/null
@@ -0,0 +1,187 @@
+/*\r
+    FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+       ***************************************************************************\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+       ***************************************************************************\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that is more than just the market leader, it     *\r
+     *    is the industry's de facto standard.                               *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly while simultaneously helping     *\r
+     *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
+     *    tutorial book, reference manual, or both:                          *\r
+     *    http://www.FreeRTOS.org/Documentation                              *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
+       the FAQ page "My application does not run, what could be wrong?".  Have you\r
+       defined configASSERT()?\r
+\r
+       http://www.FreeRTOS.org/support - In return for receiving this top quality\r
+       embedded software for free we request you assist our global community by\r
+       participating in the support forum.\r
+\r
+       http://www.FreeRTOS.org/training - Investing in training allows your team to\r
+       be as productive as possible as early as possible.  Now you can receive\r
+       FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
+       Ltd, and the world's leading authority on the world's leading RTOS.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
+    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
+    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and commercial middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+#include <FreeRTOSConfig.h>\r
+\r
+       RSEG    CODE:CODE(2)\r
+       thumb\r
+\r
+       EXTERN pxCurrentTCB\r
+       EXTERN vTaskSwitchContext\r
+\r
+       PUBLIC xPortPendSVHandler\r
+       PUBLIC vPortSVCHandler\r
+       PUBLIC vPortStartFirstTask\r
+       PUBLIC vPortEnableVFP\r
+\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+xPortPendSVHandler:\r
+       mrs r0, psp\r
+       isb\r
+       /* Get the location of the current TCB. */\r
+       ldr     r3, =pxCurrentTCB\r
+       ldr     r2, [r3]\r
+\r
+       /* Is the task using the FPU context?  If so, push high vfp registers. */\r
+       tst r14, #0x10\r
+       it eq\r
+       vstmdbeq r0!, {s16-s31}\r
+\r
+       /* Save the core registers. */\r
+       stmdb r0!, {r4-r11, r14}\r
+\r
+       /* Save the new top of stack into the first member of the TCB. */\r
+       str r0, [r2]\r
+\r
+       stmdb sp!, {r3}\r
+       mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY\r
+       cpsid i\r
+       msr basepri, r0\r
+       dsb\r
+       isb\r
+       cpsie i\r
+       bl vTaskSwitchContext\r
+       mov r0, #0\r
+       msr basepri, r0\r
+       ldmia sp!, {r3}\r
+\r
+       /* The first item in pxCurrentTCB is the task top of stack. */\r
+       ldr r1, [r3]\r
+       ldr r0, [r1]\r
+\r
+       /* Pop the core registers. */\r
+       ldmia r0!, {r4-r11, r14}\r
+\r
+       /* Is the task using the FPU context?  If so, pop the high vfp registers\r
+       too. */\r
+       tst r14, #0x10\r
+       it eq\r
+       vldmiaeq r0!, {s16-s31}\r
+\r
+       msr psp, r0\r
+       isb\r
+       #ifdef WORKAROUND_PMU_CM001 /* XMC4000 specific errata */\r
+               #if WORKAROUND_PMU_CM001 == 1\r
+                       push { r14 }\r
+                       pop { pc }\r
+               #endif\r
+       #endif\r
+\r
+       bx r14\r
+\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+vPortSVCHandler:\r
+       /* Get the location of the current TCB. */\r
+       ldr     r3, =pxCurrentTCB\r
+       ldr r1, [r3]\r
+       ldr r0, [r1]\r
+       /* Pop the core registers. */\r
+       ldmia r0!, {r4-r11, r14}\r
+       msr psp, r0\r
+       isb\r
+       mov r0, #0\r
+       msr     basepri, r0\r
+       bx r14\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+vPortStartFirstTask\r
+       /* Use the NVIC offset register to locate the stack. */\r
+       ldr r0, =0xE000ED08\r
+       ldr r0, [r0]\r
+       ldr r0, [r0]\r
+       /* Set the msp back to the start of the stack. */\r
+       msr msp, r0\r
+       /* Call SVC to start the first task. */\r
+       cpsie i\r
+       cpsie f\r
+       dsb\r
+       isb\r
+       svc 0\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+vPortEnableVFP:\r
+       /* The FPU enable bits are in the CPACR. */\r
+       ldr.w r0, =0xE000ED88\r
+       ldr     r1, [r0]\r
+\r
+       /* Enable CP10 and CP11 coprocessors, then save back. */\r
+       orr     r1, r1, #( 0xf << 20 )\r
+       str r1, [r0]\r
+       bx      r14\r
+\r
+\r
+\r
+       END\r
+\r