URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [MSP430X_MSP430F5438_CCS4/] [Demo_Source/] [RegTest.asm] - Rev 584
Compare with Previous | Blame | View Log
;; FreeRTOS V6.1.1 - Copyright (C) 2011 Real Time Engineers Ltd.;; ***************************************************************************; * *; * If you are: *; * *; * + New to FreeRTOS, *; * + Wanting to learn FreeRTOS or multitasking in general quickly *; * + Looking for basic training, *; * + Wanting to improve your FreeRTOS skills and productivity *; * *; * then take a look at the FreeRTOS books - available as PDF or paperback *; * *; * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *; * http://www.FreeRTOS.org/Documentation *; * *; * A pdf reference manual is also available. Both are usually delivered *; * to your inbox within 20 minutes to two hours when purchased between 8am *; * and 8pm GMT (although please allow up to 24 hours in case of *; * exceptional circumstances). Thank you for your support! *; * *; ***************************************************************************;; 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 exception 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. See the GNU General Public License for; more details. You should have received a copy of the GNU General Public; License and the FreeRTOS license exception along with FreeRTOS; if not it; can be viewed here: http://www.freertos.org/a00114.html and also obtained; by writing to Richard Barry, contact details for whom are available on the; FreeRTOS WEB site.;; 1 tab == 4 spaces!;; http://www.FreeRTOS.org - Documentation, latest information, license and; contact details.;; http://www.SafeRTOS.com - A version that is certified for use in safety; critical systems.;; http://www.OpenRTOS.com - Commercial support, development, porting,; licensing and training services.; * The definition of the "register test" tasks, as described at the top of; * main.c.include data_model.h.if $DEFINED( __LARGE_DATA_MODEL__ ).define "cmp.a", cmp_x.define "incx.w", inc_x.else.define "cmp.w", cmp_x.define "inc.w", inc_x.endif.global usRegTest1Counter.global usRegTest2Counter.global vPortYield.def vRegTest1Task.def vRegTest2Task.text.align 2vRegTest1Task: .asmfunc; Fill each general purpose register with a known value.mov_x #0x4444, r4mov_x #0x5555, r5mov_x #0x6666, r6mov_x #0x7777, r7mov_x #0x8888, r8mov_x #0x9999, r9mov_x #0xaaaa, r10mov_x #0xbbbb, r11mov_x #0xcccc, r12mov_x #0xdddd, r13mov_x #0xeeee, r14mov_x #0xffff, r15prvRegTest1Loop:; Test each general purpose register to check that it still contains the; expected known value, jumping to vRegTest1Error if any register contains; an unexpected value.cmp_x #0x4444, r4jne vRegTest1Errorcmp_x #0x5555, r5jne vRegTest1Errorcmp_x #0x6666, r6jne vRegTest1Errorcmp_x #0x7777, r7jne vRegTest1Errorcmp_x #0x8888, r8jne vRegTest1Errorcmp_x #0x9999, r9jne vRegTest1Errorcmp_x #0xaaaa, r10jne vRegTest1Errorcmp_x #0xbbbb, r11jne vRegTest1Errorcmp_x #0xcccc, r12jne vRegTest1Errorcmp_x #0xdddd, r13jne vRegTest1Errorcmp_x #0xeeee, r14jne vRegTest1Errorcmp_x #0xffff, r15jne vRegTest1Error; This task is still running without jumping to vRegTest1Error, so increment; the loop counter so the check task knows the task is running error free.inc_x &usRegTest1Counter; Loop again, performing the same tests.jmp prvRegTest1LoopnopvRegTest1Error:jmp vRegTest1Errornop.endasmfunc; -----------------------------------------------------------; See the comments in vRegTest1Task. This task is the same, it just uses; different values in its registers..align 2vRegTest2Task: .asmfuncmov_x #0x4441, r4mov_x #0x5551, r5mov_x #0x6661, r6mov_x #0x7771, r7mov_x #0x8881, r8mov_x #0x9991, r9mov_x #0xaaa1, r10mov_x #0xbbb1, r11mov_x #0xccc1, r12mov_x #0xddd1, r13mov_x #0xeee1, r14mov_x #0xfff1, r15prvRegTest2Loop:cmp_x #0x4441, r4jne vRegTest2Errorcmp_x #0x5551, r5jne vRegTest2Errorcmp_x #0x6661, r6jne vRegTest2Errorcmp_x #0x7771, r7jne vRegTest2Errorcmp_x #0x8881, r8jne vRegTest2Errorcmp_x #0x9991, r9jne vRegTest2Errorcmp_x #0xaaa1, r10jne vRegTest2Errorcmp_x #0xbbb1, r11jne vRegTest2Errorcmp_x #0xccc1, r12jne vRegTest2Errorcmp_x #0xddd1, r13jne vRegTest2Errorcmp_x #0xeee1, r14jne vRegTest2Errorcmp_x #0xfff1, r15jne vRegTest2Error; Also perform a manual yield, just to increase the scope of the test.call_x #vPortYieldinc_x &usRegTest2Counterjmp prvRegTest2LoopnopvRegTest2Error:jmp vRegTest2Errornop.endasmfunc; /*-----------------------------------------------------------.end
