]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/Full_Demo/RegTest_GCC.S
Baseline new RX projects before refining and tidying them up.
[freertos] / FreeRTOS / Demo / RX100_RX113-RSK_GCC_e2studio_IAR / src / Full_Demo / RegTest_GCC.S
diff --git a/FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/Full_Demo/RegTest_GCC.S b/FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/Full_Demo/RegTest_GCC.S
new file mode 100644 (file)
index 0000000..0d8d1e4
--- /dev/null
@@ -0,0 +1,235 @@
+;/*\r
+;    FreeRTOS V8.2.2 - 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
+;    ***************************************************************************\r
+;     *                                                                       *\r
+;     *    FreeRTOS provides completely free yet professionally developed,    *\r
+;     *    robust, strictly quality controlled, supported, and cross          *\r
+;     *    platform software that has become a de facto standard.             *\r
+;     *                                                                       *\r
+;     *    Help yourself get started quickly and support the FreeRTOS         *\r
+;     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+;     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+;     *                                                                       *\r
+;     *    Thank you!                                                         *\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
+;\r
+;    >>! NOTE: The modification to the GPL is included to allow you to distribute\r
+;    >>! a combined work that includes FreeRTOS without being obliged to provide\r
+;    >>! the source code for proprietary components outside of the FreeRTOS\r
+;    >>! kernel.\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 from the following\r
+;    link: http://www.freertos.org/a00114.html\r
+;\r
+;    1 tab == 4 spaces!\r
+;\r
+;    ***************************************************************************\r
+;     *                                                                       *\r
+;     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+;     *    not run, what could be wrong?"                                     *\r
+;     *                                                                       *\r
+;     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+;     *                                                                       *\r
+;    ***************************************************************************\r
+;\r
+;    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+;    license and Real Time Engineers Ltd. contact details.;\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.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+;    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+;    licenses offer ticketed support, indemnification and 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
+       .global _vRegTest1Implementation\r
+       .global _vRegTest2Implementation\r
+\r
+       .extern _ulRegTest1LoopCounter\r
+       .extern _ulRegTest2LoopCounter\r
+\r
+       .text\r
+\r
+\r
+;/* This function is explained in the comments at the top of main.c. */\r
+_vRegTest1Implementation:\r
+\r
+       ; Put a known value in each register.\r
+       MOV.L   #1, R1\r
+       MOV.L   #2, R2\r
+       MOV.L   #3, R3\r
+       MOV.L   #4, R4\r
+       MOV.L   #5, R5\r
+       MOV.L   #6, R6\r
+       MOV.L   #7, R7\r
+       MOV.L   #8, R8\r
+       MOV.L   #9, R9\r
+       MOV.L   #10, R10\r
+       MOV.L   #11, R11\r
+       MOV.L   #12, R12\r
+       MOV.L   #13, R13\r
+       MOV.L   #14, R14\r
+       MOV.L   #15, R15\r
+\r
+       ; Loop, checking each itteration that each register still contains the\r
+       ; expected value.\r
+TestLoop1:\r
+\r
+       ; Push the registers that are going to get clobbered.\r
+       PUSHM   R14-R15\r
+\r
+       ; Increment the loop counter to show this task is still getting CPU time.\r
+       MOV.L   #_ulRegTest1LoopCounter, R14\r
+       MOV.L   [ R14 ], R15\r
+       ADD             #1, R15\r
+       MOV.L   R15, [ R14 ]\r
+\r
+       ; Yield to extend the text coverage.  Set the bit in the ITU SWINTR register.\r
+       MOV.L   #1, R14\r
+       MOV.L   #0872E0H, R15\r
+       MOV.B   R14, [R15]\r
+       NOP\r
+       NOP\r
+\r
+       ; Restore the clobbered registers.\r
+       POPM    R14-R15\r
+\r
+       ; Now compare each register to ensure it still contains the value that was\r
+       ; set before this loop was entered.\r
+       CMP             #1, R1\r
+       BNE             RegTest1Error\r
+       CMP             #2, R2\r
+       BNE             RegTest1Error\r
+       CMP             #3, R3\r
+       BNE             RegTest1Error\r
+       CMP             #4, R4\r
+       BNE             RegTest1Error\r
+       CMP             #5, R5\r
+       BNE             RegTest1Error\r
+       CMP             #6, R6\r
+       BNE             RegTest1Error\r
+       CMP             #7, R7\r
+       BNE             RegTest1Error\r
+       CMP             #8, R8\r
+       BNE             RegTest1Error\r
+       CMP             #9, R9\r
+       BNE             RegTest1Error\r
+       CMP             #10, R10\r
+       BNE             RegTest1Error\r
+       CMP             #11, R11\r
+       BNE             RegTest1Error\r
+       CMP             #12, R12\r
+       BNE             RegTest1Error\r
+       CMP             #13, R13\r
+       BNE             RegTest1Error\r
+       CMP             #14, R14\r
+       BNE             RegTest1Error\r
+       CMP             #15, R15\r
+       BNE             RegTest1Error\r
+\r
+       ; All comparisons passed, start a new itteratio of this loop.\r
+       BRA             TestLoop1\r
+\r
+RegTest1Error:\r
+       ; A compare failed, just loop here so the loop counter stops incrementing\r
+       ; causing the check task to indicate the error.\r
+       BRA RegTest1Error\r
+;/*-----------------------------------------------------------*/\r
+\r
+;/* This function is explained in the comments at the top of main.c. */\r
+_vRegTest2Implementation:\r
+\r
+       ; Put a known value in each register.\r
+       MOV.L   #10, R1\r
+       MOV.L   #20, R2\r
+       MOV.L   #30, R3\r
+       MOV.L   #40, R4\r
+       MOV.L   #50, R5\r
+       MOV.L   #60, R6\r
+       MOV.L   #70, R7\r
+       MOV.L   #80, R8\r
+       MOV.L   #90, R9\r
+       MOV.L   #100, R10\r
+       MOV.L   #110, R11\r
+       MOV.L   #120, R12\r
+       MOV.L   #130, R13\r
+       MOV.L   #140, R14\r
+       MOV.L   #150, R15\r
+\r
+       ; Loop, checking on each itteration that each register still contains the\r
+       ; expected value.\r
+TestLoop2:\r
+\r
+       ; Push the registers that are going to get clobbered.\r
+       PUSHM   R14-R15\r
+\r
+       ; Increment the loop counter to show this task is still getting CPU time.\r
+       MOV.L   #_ulRegTest2LoopCounter, R14\r
+       MOV.L   [ R14 ], R15\r
+       ADD             #1, R15\r
+       MOV.L   R15, [ R14 ]\r
+\r
+       ; Restore the clobbered registers.\r
+       POPM    R14-R15\r
+\r
+       CMP             #10, R1\r
+       BNE             RegTest2Error\r
+       CMP             #20, R2\r
+       BNE             RegTest2Error\r
+       CMP             #30, R3\r
+       BNE             RegTest2Error\r
+       CMP             #40, R4\r
+       BNE             RegTest2Error\r
+       CMP             #50, R5\r
+       BNE             RegTest2Error\r
+       CMP             #60, R6\r
+       BNE             RegTest2Error\r
+       CMP             #70, R7\r
+       BNE             RegTest2Error\r
+       CMP             #80, R8\r
+       BNE             RegTest2Error\r
+       CMP             #90, R9\r
+       BNE             RegTest2Error\r
+       CMP             #100, R10\r
+       BNE             RegTest2Error\r
+       CMP             #110, R11\r
+       BNE             RegTest2Error\r
+       CMP             #120, R12\r
+       BNE             RegTest2Error\r
+       CMP             #130, R13\r
+       BNE             RegTest2Error\r
+       CMP             #140, R14\r
+       BNE             RegTest2Error\r
+       CMP             #150, R15\r
+       BNE             RegTest2Error\r
+\r
+       ; All comparisons passed, start a new itteratio of this loop.\r
+       BRA             TestLoop2\r
+\r
+RegTest2Error:\r
+       ; A compare failed, just loop here so the loop counter stops incrementing\r
+       ; - causing the check task to indicate the error.\r
+       BRA RegTest2Error\r
+       \r
+       .END\r