/* FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd. All rights reserved VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. *************************************************************************** * * * FreeRTOS provides completely free yet professionally developed, * * robust, strictly quality controlled, supported, and cross * * platform software that has become a de facto standard. * * * * Help yourself get started quickly and support the FreeRTOS * * project by purchasing a FreeRTOS tutorial book, reference * * manual, or both from: http://www.FreeRTOS.org/Documentation * * * * Thank you! * * * *************************************************************************** This file is part of the FreeRTOS distribution. FreeRTOS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (version 2) as published by the Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. >>! NOTE: The modification to the GPL is included to allow you to distribute >>! a combined work that includes FreeRTOS without being obliged to provide >>! the source code for proprietary components outside of the FreeRTOS >>! kernel. FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Full license text is available from the following link: http://www.freertos.org/a00114.html 1 tab == 4 spaces! *************************************************************************** * * * Having a problem? Start by reading the FAQ "My application does * * not run, what could be wrong?" * * * * http://www.FreeRTOS.org/FAQHelp.html * * * *************************************************************************** http://www.FreeRTOS.org - Documentation, books, training, latest versions, license and Real Time Engineers Ltd. contact details. http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, including FreeRTOS+Trace - an indispensable productivity tool, a DOS compatible FAT file system, and our tiny thread aware UDP/IP stack. http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS licenses offer ticketed support, indemnification and middleware. http://www.SafeRTOS.com - High Integrity Systems also provide a safety engineered and independently SIL3 certified version for use in safety and mission critical applications that require provable dependability. 1 tab == 4 spaces! */ PUBLIC _vRegTest1Implementation PUBLIC _vRegTest2Implementation EXTERN _ulRegTest1CycleCount EXTERN _ulRegTest2CycleCount RSEG CODE:CODE(4) _vRegTest1Implementation: /* Set each register to a known value. */ MOV.L #0x33333333, R15 MVTACHI R15 MOV.L #0x44444444, R15 MVTACLO R15 MOV.L #1, R1 MOV.L #2, R2 MOV.L #3, R3 MOV.L #4, R4 MOV.L #5, R5 MOV.L #6, R6 MOV.L #7, R7 MOV.L #8, R8 MOV.L #9, R9 MOV.L #10, R10 MOV.L #11, R11 MOV.L #12, R12 MOV.L #13, R13 MOV.L #14, R14 MOV.L #15, R15 /* Loop, checking each iteration that each register still contains the expected value. */ TestLoop1: /* Push the registers that are going to get clobbered. */ PUSHM R14-R15 /* Increment the loop counter to show this task is still getting CPU time. */ MOV.L #_ulRegTest1CycleCount, R14 MOV.L [ R14 ], R15 ADD #1, R15 MOV.L R15, [ R14 ] /* Yield to extend the text coverage. Set the bit in the ITU SWINTR register. */ MOV.L #1, R14 MOV.L #0872E0H, R15 MOV.B R14, [R15] NOP NOP /* Check the accumulator value. */ MVFACHI R15 CMP #0x33333333, R15 BNE RegTest2Error MVFACMI R15 CMP #0x33334444, R15 BNE RegTest2Error /* Restore the clobbered registers. */ POPM R14-R15 /* Now compare each register to ensure it still contains the value that was set before this loop was entered. */ CMP #1, R1 BNE RegTest1Error CMP #2, R2 BNE RegTest1Error CMP #3, R3 BNE RegTest1Error CMP #4, R4 BNE RegTest1Error CMP #5, R5 BNE RegTest1Error CMP #6, R6 BNE RegTest1Error CMP #7, R7 BNE RegTest1Error CMP #8, R8 BNE RegTest1Error CMP #9, R9 BNE RegTest1Error CMP #10, R10 BNE RegTest1Error CMP #11, R11 BNE RegTest1Error CMP #12, R12 BNE RegTest1Error CMP #13, R13 BNE RegTest1Error CMP #14, R14 BNE RegTest1Error CMP #15, R15 BNE RegTest1Error /* All comparisons passed, start a new iteration of this loop. */ BRA TestLoop1 /* A compare failed, just loop here so the loop counter stops incrementing causing the check timer to indicate the error. */ RegTest1Error: BRA RegTest1Error /*-----------------------------------------------------------*/ _vRegTest2Implementation: /* Set each register to a known value. */ MOV.L #0x11111111, R15 MVTACHI R15 MOV.L #0x22222222, R15 MVTACLO R15 MOV.L #100, R1 MOV.L #200, R2 MOV.L #300, R3 MOV.L #400, R4 MOV.L #500, R5 MOV.L #600, R6 MOV.L #700, R7 MOV.L #800, R8 MOV.L #900, R9 MOV.L #1000, R10 MOV.L #1001, R11 MOV.L #1002, R12 MOV.L #1003, R13 MOV.L #1004, R14 MOV.L #1005, R15 /* Loop, checking each iteration that each register still contains the expected value. */ TestLoop2: /* Push the registers that are going to get clobbered. */ PUSHM R14-R15 /* Increment the loop counter to show this task is still getting CPU time. */ MOV.L #_ulRegTest2CycleCount, R14 MOV.L [ R14 ], R15 ADD #1, R15 MOV.L R15, [ R14 ] /* Check the accumulator value. */ MVFACHI R15 CMP #0x11111111, R15 BNE RegTest2Error MVFACMI R15 CMP #0x11112222, R15 BNE RegTest2Error /* Restore the clobbered registers. */ POPM R14-R15 /* Now compare each register to ensure it still contains the value that was set before this loop was entered. */ CMP #100, R1 BNE RegTest2Error CMP #200, R2 BNE RegTest2Error CMP #300, R3 BNE RegTest2Error CMP #400, R4 BNE RegTest2Error CMP #500, R5 BNE RegTest2Error CMP #600, R6 BNE RegTest2Error CMP #700, R7 BNE RegTest2Error CMP #800, R8 BNE RegTest2Error CMP #900, R9 BNE RegTest2Error CMP #1000, R10 BNE RegTest2Error CMP #1001, R11 BNE RegTest2Error CMP #1002, R12 BNE RegTest2Error CMP #1003, R13 BNE RegTest2Error CMP #1004, R14 BNE RegTest2Error CMP #1005, R15 BNE RegTest2Error /* All comparisons passed, start a new iteration of this loop. */ BRA TestLoop2 /* A compare failed, just loop here so the loop counter stops incrementing causing the check timer to indicate the error. */ RegTest2Error: BRA RegTest2Error /*-----------------------------------------------------------*/ END