]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/portable/Tasking/ARM_CM4F/port_asm.asm
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
[freertos] / FreeRTOS / Source / portable / Tasking / ARM_CM4F / port_asm.asm
index 285f51ca7bfc479358d2744ccc3ac72bd7aaf03f..6b47555fa85bc29dc568564fcc25f14c5d5a25bf 100644 (file)
@@ -1,72 +1,52 @@
 ;/*\r
-;    FreeRTOS V7.1.1 - Copyright (C) 2012 Real Time Engineers Ltd.\r
-;\r
-;\r
-;    ***************************************************************************\r
-;     *                                                                       *\r
-;     *    FreeRTOS tutorial books are available in pdf and paperback.        *\r
-;     *    Complete, revised, and edited pdf reference manuals are also       *\r
-;     *    available.                                                         *\r
-;     *                                                                       *\r
-;     *    Purchasing FreeRTOS documentation will not only help you, by       *\r
-;     *    ensuring you get running as quickly as possible and with an        *\r
-;     *    in-depth knowledge of how to use FreeRTOS, it will also help       *\r
-;     *    the FreeRTOS project to continue with its mission of providing     *\r
-;     *    professional grade, cross platform, de facto standard solutions    *\r
-;     *    for microcontrollers - completely free of charge!                  *\r
-;     *                                                                       *\r
-;     *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *\r
-;     *                                                                       *\r
-;     *    Thank you for using FreeRTOS, and thank you for your support!      *\r
-;     *                                                                       *\r
-;    ***************************************************************************\r
-;\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
-;    >>>NOTE<<< The modification to the GPL is included to allow you to\r
-;    distribute a combined work that includes FreeRTOS without being obliged to\r
-;    provide the source code for proprietary components outside of the FreeRTOS\r
-;    kernel.  FreeRTOS is distributed in the hope that it will be useful, but\r
-;    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
-;    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
-;    more details. You should have received a copy of the GNU General Public\r
-;    License and the FreeRTOS license exception along with FreeRTOS; if not it\r
-;    can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
-;    by writing to Richard Barry, contact details for whom are available on the\r
-;    FreeRTOS WEB site.\r
-;\r
-;    1 tab == 4 spaces!\r
-;\r
-;    http://www.FreeRTOS.org - Documentation, latest information, license and\r
-;    contact details.\r
-;\r
-;    http://www.SafeRTOS.com - A version that is certified for use in safety\r
-;    critical systems.\r
-;\r
-;    http://www.OpenRTOS.com - Commercial support, development, porting,\r
-;    licensing and training services.\r
-;*/\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; *\r
+; * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
+; * this software and associated documentation files (the "Software"), to deal in\r
+; * the Software without restriction, including without limitation the rights to\r
+; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
+; * the Software, and to permit persons to whom the Software is furnished to do so,\r
+; * subject to the following conditions:\r
+; *\r
+; * The above copyright notice and this permission notice shall be included in all\r
+; * copies or substantial portions of the Software.\r
+; *\r
+; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
+; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
+; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+; *\r
+; * http://www.FreeRTOS.org\r
+; * http://aws.amazon.com/freertos\r
+; *\r
+; * 1 tab == 4 spaces!\r
+; */\r
+\r
 \r
        .extern pxCurrentTCB\r
        .extern vTaskSwitchContext\r
        .extern ulMaxSyscallInterruptPriorityConst\r
 \r
-       .global PendSV_Handler\r
+       .global _vector_14\r
+       .global _lc_ref__vector_pp_14\r
        .global SVC_Handler\r
        .global vPortStartFirstTask\r
        .global vPortEnableVFP\r
-       \r
+       .global ulPortSetInterruptMask\r
+       .global vPortClearInterruptMask\r
+\r
 ;-----------------------------------------------------------\r
 \r
        .section .text\r
        .thumb\r
        .align 4\r
-PendSV_Handler: .type func\r
+_vector_14: .type func\r
+\r
        mrs r0, psp\r
+       isb\r
 \r
        ;Get the location of the current TCB.\r
        ldr.w   r3, =pxCurrentTCB\r
@@ -83,13 +63,14 @@ PendSV_Handler: .type func
        ;Save the new top of stack into the first member of the TCB.\r
        str r0, [r2]\r
 \r
-       stmdb sp!, {r3, r14}\r
+       stmdb sp!, {r0, r3}\r
        ldr.w r0, =ulMaxSyscallInterruptPriorityConst\r
+       ldr r0, [r0]\r
        msr basepri, r0\r
        bl vTaskSwitchContext\r
        mov r0, #0\r
        msr basepri, r0\r
-       ldmia sp!, {r3, r14}\r
+       ldmia sp!, {r0, r3}\r
 \r
        ;The first item in pxCurrentTCB is the task top of stack.\r
        ldr r1, [r3]\r
@@ -104,9 +85,66 @@ PendSV_Handler: .type func
        vldmiaeq r0!, {s16-s31}\r
 \r
        msr psp, r0\r
+       isb\r
        bx r14\r
 \r
-       .size   PendSV_Handler, $-PendSV_Handler\r
+       .size   _vector_14, $-_vector_14\r
+       .endsec\r
+\r
+;-----------------------------------------------------------\r
+\r
+; This function is an XMC4000 silicon errata workaround.  It will get used when\r
+; the SILICON_BUG_PMC_CM_001 linker macro is defined.\r
+       .section .text\r
+       .thumb\r
+       .align 4\r
+_lc_ref__vector_pp_14: .type func\r
+\r
+       mrs r0, psp\r
+       isb\r
+\r
+       ;Get the location of the current TCB.\r
+       ldr.w   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
+       ldr.w r0, =ulMaxSyscallInterruptPriorityConst\r
+       ldr r0, [r0]\r
+       msr basepri, r0\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 too.\r
+       tst r14, #0x10\r
+       it eq\r
+       vldmiaeq r0!, {s16-s31}\r
+\r
+       msr psp, r0\r
+       isb\r
+       push { lr }\r
+       pop { pc } ; XMC4000 specific errata workaround.  Do not used "bx lr" here.\r
+\r
+       .size   _lc_ref__vector_pp_14, $-_lc_ref__vector_pp_14\r
        .endsec\r
 \r
 ;-----------------------------------------------------------\r
@@ -122,6 +160,7 @@ SVC_Handler: .type func
        ;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
@@ -142,6 +181,9 @@ vPortStartFirstTask .type func
        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
        .size   vPortStartFirstTask, $-vPortStartFirstTask\r
        .endsec\r
@@ -163,6 +205,32 @@ vPortEnableVFP .type func
        .size   vPortEnableVFP, $-vPortEnableVFP\r
        .endsec\r
 \r
+;-----------------------------------------------------------\r
+\r
+       .section .text\r
+       .thumb\r
+       .align 4\r
+ulPortSetInterruptMask:\r
+       mrs r0, basepri\r
+       ldr.w r1, =ulMaxSyscallInterruptPriorityConst\r
+       ldr r1, [r1]\r
+       msr basepri, r1\r
+       bx r14\r
+       .size   ulPortSetInterruptMask, $-ulPortSetInterruptMask\r
+       .endsec\r
+\r
+;-----------------------------------------------------------\r
+\r
+       .section .text\r
+       .thumb\r
+       .align 4\r
+vPortClearInterruptMask:\r
+       msr basepri, r0\r
+       bx r14\r
+       .size   vPortClearInterruptMask, $-vPortClearInterruptMask\r
+       .endsec\r
+\r
+;-----------------------------------------------------------\r
 \r
        .end\r
-       \r
+\r