URL
https://opencores.org/ocsvn/openmsp430/openmsp430/trunk
Subversion Repositories openmsp430
[/] [openmsp430/] [trunk/] [core/] [sim/] [rtl_sim/] [src/] [gpio_irq.s43] - Rev 33
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 *//* *//*===========================================================================*//* DIGITAL I/O *//*---------------------------------------------------------------------------*//* Test the Digital I/O interface: *//* - Interrupts. *//* *//* 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 main.set P1IN, 0x0020.set P1OUT, 0x0021.set P1DIR, 0x0022.set P1IFG, 0x0023.set P1IES, 0x0024.set P1IE, 0x0025.set P1SEL, 0x0026.set P2IN, 0x0028.set P2OUT, 0x0029.set P2DIR, 0x002A.set P2IFG, 0x002B.set P2IES, 0x002C.set P2IE, 0x002D.set P2SEL, 0x002Emain:; Disable interruptsdintmov.b #0x00, &P1IEmov.b #0x00, &P2IE/* -------------- PORT 1: TEST INTERRUPT FLAGS --------------- */mov.b #0x00, &P1IES ;# TEST IF RISING EDGE ENABLEDmov #0x0200, r15 ;# Make sure rising edge is detected test 1p1ifg_re_loop1:nopnopmov.b &P1IFG, 0(r15)mov.b #0x00, &P1IFGinc r15cmp #0x0208, r15jne p1ifg_re_loop1mov #0x0210, r15 ;# Make sure falling edge is ignoredp1ifg_fe_loop1:nopnopmov.b &P1IFG, 0(r15)mov.b #0x00, &P1IFGinc r15cmp #0x0218, r15jne p1ifg_fe_loop1mov #0x0220, r15 ;# Make sure rising edge is detected test 2p1ifg_re_loop2:nopnopmov.b &P1IFG, 0(r15)inc r15cmp #0x0228, r15jne p1ifg_re_loop2mov.b #0x00, &P1IFGmov.b #0xff, &P1IES ;# TEST IF FALLING EDGE ENABLEDmov #0x0230, r15 ;# Make sure falling edge is detected test 1p1ifg_fe_loop2:nopnopmov.b &P1IFG, 0(r15)mov.b #0x00, &P1IFGinc r15cmp #0x0238, r15jne p1ifg_fe_loop2mov #0x0240, r15 ;# Make sure rising edge is ignoredp1ifg_re_loop3:nopnopmov.b &P1IFG, 0(r15)mov.b #0x00, &P1IFGinc r15cmp #0x0248, r15jne p1ifg_re_loop3mov #0x0250, r15 ;# Make sure falling edge is detected test 2p1ifg_fe_loop3:nopnopmov.b &P1IFG, 0(r15)inc r15cmp #0x0258, r15jne p1ifg_fe_loop3mov.b #0x00, &P1IFG/* -------------- PORT 2: TEST INTERRUPT FLAGS --------------- */mov.b #0x00, &P2IES ;# TEST IF RISING EDGE ENABLEDmov #0x0200, r15 ;# Make sure rising edge is detected test 1p2ifg_re_loop1:nopnopmov.b &P2IFG, 0(r15)mov.b #0x00, &P2IFGinc r15cmp #0x0208, r15jne p2ifg_re_loop1mov #0x0210, r15 ;# Make sure falling edge is ignoredp2ifg_fe_loop1:nopnopmov.b &P2IFG, 0(r15)mov.b #0x00, &P2IFGinc r15cmp #0x0218, r15jne p2ifg_fe_loop1mov #0x0220, r15 ;# Make sure rising edge is detected test 2p2ifg_re_loop2:nopnopmov.b &P2IFG, 0(r15)inc r15cmp #0x0228, r15jne p2ifg_re_loop2mov.b #0x00, &P2IFGmov.b #0xff, &P2IES ;# TEST IF FALLING EDGE ENABLEDmov #0x0230, r15 ;# Make sure falling edge is detected test 1p2ifg_fe_loop2:nopnopmov.b &P2IFG, 0(r15)mov.b #0x00, &P2IFGinc r15cmp #0x0238, r15jne p2ifg_fe_loop2mov #0x0240, r15 ;# Make sure rising edge is ignoredp2ifg_re_loop3:nopnopmov.b &P2IFG, 0(r15)mov.b #0x00, &P2IFGinc r15cmp #0x0248, r15jne p2ifg_re_loop3mov #0x0250, r15 ;# Make sure falling edge is detected test 2p2ifg_fe_loop3:nopnopmov.b &P2IFG, 0(r15)inc r15cmp #0x0258, r15jne p2ifg_fe_loop3mov.b #0x00, &P2IFG/* -------------- CLEAR MEMORY --------------- */mov #0x0200, r5mem_clear_loop:mov #0x00, 0(r5)incd r5cmp #0x0260, r5jne mem_clear_loop/* -------------- PORT 1: TEST INTERRUPT VECTOR --------------- */mov #0x0250, r1 ; Initialize stackeint ; Enable interruptsmov.b #0x0001, r6mov.b r6, &P1IEmov #0x0200, r15;p1_irq_loop:mov.b r6, &P1IFG ; Generate soft interruptnopnopnoprla r6mov.b r6, &P1IEinc r15cmp #0x0208, r15jne p1_irq_loop/* -------------- PORT 2: TEST INTERRUPT VECTOR --------------- */mov #0x0250, r1 ; Initialize stackeint ; Enable interruptsmov.b #0x0001, r6mov.b r6, &P2IEmov #0x0210, r15;p2_irq_loop:mov.b r6, &P2IFG ; Generate soft interruptnopnopnoprla r6mov.b r6, &P2IEinc r15cmp #0x0218, r15jne p2_irq_loop/* ---------------------- END OF TEST --------------- */end_of_test:nopbr #0xffff/* ---------------------- INTERRUPT ROUTINES --------------- */PORT1_VECTOR:mov.b &P1IFG, 0(r15)mov.b #0x00, &P1IFGretiPORT2_VECTOR:mov.b &P2IFG, 0(r15)mov.b #0x00, &P2IFGreti/* ---------------------- INTERRUPT VECTORS --------------- */.section .vectors, "a".word end_of_test ; Interrupt 0 (lowest priority) <unused>.word end_of_test ; Interrupt 1 <unused>.word PORT1_VECTOR ; Interrupt 2 <unused>.word PORT2_VECTOR ; Interrupt 3 <unused>.word end_of_test ; Interrupt 4 <unused>.word end_of_test ; Interrupt 5 <unused>.word end_of_test ; Interrupt 6 <unused>.word end_of_test ; Interrupt 7 <unused>.word end_of_test ; Interrupt 8 <unused>.word end_of_test ; Interrupt 9 <unused>.word end_of_test ; Interrupt 10 Watchdog timer.word end_of_test ; Interrupt 11 <unused>.word end_of_test ; Interrupt 12 <unused>.word end_of_test ; Interrupt 13 <unused>.word end_of_test ; Interrupt 14 NMI.word main ; Interrupt 15 (highest priority) RESET
Go to most recent revision | Compare with Previous | Blame | View Log
