URL
https://opencores.org/ocsvn/openmsp430/openmsp430/trunk
Subversion Repositories openmsp430
[/] [openmsp430/] [trunk/] [core/] [sim/] [rtl_sim/] [src/] [sing-op_reti.s43] - Rev 19
Go to most recent revision | Compare with Previous | Blame | View Log
/*===========================================================================*//* Copyright (C) 2001 Authors *//* *//* This source file may be used and distributed without restriction provided *//* that this copyright statement is not removed from the file and that any *//* derivative work contains the original copyright notice and the associated *//* disclaimer. *//* *//* This source file is free software; you can redistribute it and/or modify *//* it under the terms of the GNU Lesser General Public License as published *//* by the Free Software Foundation; either version 2.1 of the License, or *//* (at your option) any later version. *//* *//* This source 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 Lesser General Public *//* License for more details. *//* *//* You should have received a copy of the GNU Lesser General Public License *//* along with this source; if not, write to the Free Software Foundation, *//* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *//* *//*===========================================================================*//* SINGLE-OPERAND ARITHMETIC: CALL INSTRUCTION *//*---------------------------------------------------------------------------*//* Test the CALL instruction. *//* *//* Author(s): *//* - Olivier Girard, olgirard@gmail.com *//* *//*---------------------------------------------------------------------------*//* $Rev: 19 $ *//* $LastChangedBy: olivier.girard $ *//* $LastChangedDate: 2009-08-04 23:47:15 +0200 (Tue, 04 Aug 2009) $ *//*===========================================================================*/.global mainmov #0x1234, r3mov #0x1234, r4mov #0x1234, r5mov #0x1234, r6mov #0x1234, r7mov #0x1234, r8mov #0x1234, r9mov #0x1234, r10mov #0x1234, r11mov #0x1234, r12mov #0x1234, r13mov #0x1234, r14main:# Test RESET vector#------------------------mov #0x1000, r15# Test RETI instruction#------------------------# Pre-initialize stackmov #0x0252, r1push #RETI_ROUTINEpush #0x0145mov #0x0000, &0x0200# Run RETI testmov #0x0000, r2mov #0x0000, r5retiend_of_reti_test:mov #0x2000, r15# Test IRQ 0#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0x3000, r15wait_irq00:cmp #0x5678, r6jne wait_irq00mov #0x3001, r15# Test IRQ 1#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0x4000, r15wait_irq01:cmp #0x9abc, r6jne wait_irq01mov #0x4001, r15# Test IRQ 2#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0x5000, r15wait_irq02:cmp #0xdef1, r6jne wait_irq02mov #0x5001, r15# Test IRQ 3#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0x6000, r15wait_irq03:cmp #0x2345, r6jne wait_irq03mov #0x6001, r15# Test IRQ 4#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0x7000, r15wait_irq04:cmp #0x6789, r6jne wait_irq04mov #0x7001, r15# Test IRQ 5#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0x8000, r15wait_irq05:cmp #0xabcd, r6jne wait_irq05mov #0x8001, r15# Test IRQ 6#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0x9000, r15wait_irq06:cmp #0xef12, r6jne wait_irq06mov #0x9001, r15# Test IRQ 7#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0xa000, r15wait_irq07:cmp #0x3456, r6jne wait_irq07mov #0xa001, r15# Test IRQ 8#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0xb000, r15wait_irq08:cmp #0x789a, r6jne wait_irq08mov #0xb001, r15# Test IRQ 9#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0xc000, r15wait_irq09:cmp #0xbcde, r6jne wait_irq09mov #0xc001, r15# Test IRQ 10#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0xd000, r15wait_irq10:cmp #0xf123, r6jne wait_irq10mov #0xd001, r15# Test IRQ 11#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0xe000, r15wait_irq11:cmp #0x4567, r6jne wait_irq11mov #0xe001, r15# Test IRQ 12#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0xf000, r15wait_irq12:cmp #0x89ab, r6jne wait_irq12mov #0xf001, r15# Test IRQ 13#-------------------------mov #0x0008, r2 ; Enable interruptsmov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0xf100, r15wait_irq13:cmp #0xcdef, r6jne wait_irq13mov #0xf101, r15# Test IRQ NMI: rising edge#----------------------------.set WDTCTL, 0x0120.set IE1, 0x0000.set IFG1, 0x0002mov #0x5a00, &WDTCTL ; NMI Edge selection: risingbic.b #0x0010, &IFG1 ; Clear NMI flagbis.b #0x0010, &IE1 ; Enable NMImov #0x0000, r6mov #0xaaaa, r7mov #0x5555, r8mov #0xf200, r15wait_nmi:mov #0xa5a5, &0x0200cmp #0x0123, r6jne wait_nmimov.b &IE1, r9mov.b &IFG1, r10mov #0xf201, r15/* ---------------------- END OF TEST --------------- */end_of_test:nopbr #0xffff/* ---------------------- FUNCTIONS --------------- */RETI_ROUTINE:mov #0x1234, r5jmp end_of_reti_testIRQ00_ROUTINE:mov #0x5678, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ01_ROUTINE:mov #0x9abc, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ02_ROUTINE:mov #0xdef1, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ03_ROUTINE:mov #0x2345, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ04_ROUTINE:mov #0x6789, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ05_ROUTINE:mov #0xabcd, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ06_ROUTINE:mov #0xef12, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ07_ROUTINE:mov #0x3456, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ08_ROUTINE:mov #0x789a, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ09_ROUTINE:mov #0xbcde, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ10_ROUTINE:mov #0xf123, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ11_ROUTINE:mov #0x4567, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ12_ROUTINE:mov #0x89ab, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiIRQ13_ROUTINE:mov #0xcdef, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretiNMI_ROUTINE:mov #0x0123, r6mov r2, r7 ; Save Status registermov r1, r8 ; Save Stack registerretinopnopnopnopnop/* ---------------------- INTERRUPT VECTORS --------------- */.section .vectors, "a".word IRQ00_ROUTINE ; Interrupt 0 (lowest priority) <unused>.word IRQ01_ROUTINE ; Interrupt 1 <unused>.word IRQ02_ROUTINE ; Interrupt 2 <unused>.word IRQ03_ROUTINE ; Interrupt 3 <unused>.word IRQ04_ROUTINE ; Interrupt 4 <unused>.word IRQ05_ROUTINE ; Interrupt 5 <unused>.word IRQ06_ROUTINE ; Interrupt 6 <unused>.word IRQ07_ROUTINE ; Interrupt 7 <unused>.word IRQ08_ROUTINE ; Interrupt 8 <unused>.word IRQ09_ROUTINE ; Interrupt 9 <unused>.word IRQ10_ROUTINE ; Interrupt 10 Watchdog timer.word IRQ11_ROUTINE ; Interrupt 11 <unused>.word IRQ12_ROUTINE ; Interrupt 12 <unused>.word IRQ13_ROUTINE ; Interrupt 13 <unused>.word NMI_ROUTINE ; Interrupt 14 NMI.word main ; Interrupt 15 (highest priority) RESET
Go to most recent revision | Compare with Previous | Blame | View Log
