URL
https://opencores.org/ocsvn/openmsp430/openmsp430/trunk
Subversion Repositories openmsp430
[/] [openmsp430/] [trunk/] [core/] [sim/] [rtl_sim/] [src/] [gpio_rdwr.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 *//* *//*===========================================================================*//* DIGITAL I/O *//*---------------------------------------------------------------------------*//* Test the Digital I/O interface: *//* - Read/Write register access. *//* - I/O Functionality. *//* *//* 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, 0x002E.set P3IN, 0x0018.set P3OUT, 0x0019.set P3DIR, 0x001A.set P3SEL, 0x001B.set P4IN, 0x001C.set P4OUT, 0x001D.set P4DIR, 0x001E.set P4SEL, 0x001F.set P5IN, 0x0030.set P5OUT, 0x0031.set P5DIR, 0x0032.set P5SEL, 0x0033.set P6IN, 0x0034.set P6OUT, 0x0035.set P6DIR, 0x0036.set P6SEL, 0x0037main:/* -------------- PORT 1: TEST RD/WR REGISTER ACCESS --------------- */mov.b #0xaa, &P1IN ; P1INmov.b &P1IN, &0x0200mov.b #0x55, &P1INmov.b &P1IN, &0x0201mov.b #0xaa, &P1OUT ; P1OUTmov.b &P1OUT, &0x0202mov.b #0x55, &P1OUTmov.b &P1OUT, &0x0203mov.b #0x5a, &P1DIR ; P1DIRmov.b &P1DIR, &0x0204mov.b #0xa5, &P1DIRmov.b &P1DIR, &0x0205mov.b #0x55, &P1IFG ; P1IFGmov.b &P1IFG, &0x0206mov.b #0xaa, &P1IFGmov.b &P1IFG, &0x0207mov.b #0xa5, &P1IES ; P1IESmov.b &P1IES, &0x0208mov.b #0x5a, &P1IESmov.b &P1IES, &0x0209mov.b #0xaa, &P1IE ; P1IEmov.b &P1IE, &0x020Amov.b #0x55, &P1IEmov.b &P1IE, &0x020Bmov.b #0xcd, &P1SEL ; P1SELmov.b &P1SEL, &0x020Cmov.b #0x32, &P1SELmov.b &P1SEL, &0x020Dmov.b #0x00, &P1IN ; Re-Initializemov.b #0x00, &P1OUTmov.b #0x00, &P1DIRmov.b #0x00, &P1IFGmov.b #0x00, &P1IESmov.b #0x00, &P1IEmov.b #0x00, &P1SELmov #0x0001, r15/* -------------- PORT 2: TEST RD/WR REGISTER ACCESS --------------- */mov.b #0xaa, &P2IN ; P2INmov.b &P2IN, &0x0210mov.b #0x55, &P2INmov.b &P2IN, &0x0211mov.b #0xaa, &P2OUT ; P2OUTmov.b &P2OUT, &0x0212mov.b #0x55, &P2OUTmov.b &P2OUT, &0x0213mov.b #0x5a, &P2DIR ; P2DIRmov.b &P2DIR, &0x0214mov.b #0xa5, &P2DIRmov.b &P2DIR, &0x0215mov.b #0x55, &P2IFG ; P2IFGmov.b &P2IFG, &0x0216mov.b #0xaa, &P2IFGmov.b &P2IFG, &0x0217mov.b #0xa5, &P2IES ; P2IESmov.b &P2IES, &0x0218mov.b #0x5a, &P2IESmov.b &P2IES, &0x0219mov.b #0xaa, &P2IE ; P2IEmov.b &P2IE, &0x021Amov.b #0x55, &P2IEmov.b &P2IE, &0x021Bmov.b #0xcd, &P2SEL ; P2SELmov.b &P2SEL, &0x021Cmov.b #0x32, &P2SELmov.b &P2SEL, &0x021Dmov.b #0x00, &P2IN ; Re-Initializemov.b #0x00, &P2OUTmov.b #0x00, &P2DIRmov.b #0x00, &P2IFGmov.b #0x00, &P2IESmov.b #0x00, &P2IEmov.b #0x00, &P2SELmov #0x0002, r15/* -------------- PORT 3: TEST RD/WR REGISTER ACCESS --------------- */mov.b #0xaa, &P3IN ; P3INmov.b &P3IN, &0x0220mov.b #0x55, &P3INmov.b &P3IN, &0x0221mov.b #0xaa, &P3OUT ; P3OUTmov.b &P3OUT, &0x0222mov.b #0x55, &P3OUTmov.b &P3OUT, &0x0223mov.b #0x5a, &P3DIR ; P3DIRmov.b &P3DIR, &0x0224mov.b #0xa5, &P3DIRmov.b &P3DIR, &0x0225mov.b #0xcd, &P3SEL ; P3SELmov.b &P3SEL, &0x0226mov.b #0x32, &P3SELmov.b &P3SEL, &0x0227mov.b #0x00, &P3IN ; Re-Initializemov.b #0x00, &P3OUTmov.b #0x00, &P3DIRmov.b #0x00, &P3SELmov #0x0003, r15/* -------------- PORT 4: TEST RD/WR REGISTER ACCESS --------------- */mov.b #0xaa, &P4IN ; P4INmov.b &P4IN, &0x0230mov.b #0x55, &P4INmov.b &P4IN, &0x0231mov.b #0xaa, &P4OUT ; P4OUTmov.b &P4OUT, &0x0232mov.b #0x55, &P4OUTmov.b &P4OUT, &0x0233mov.b #0x5a, &P4DIR ; P4DIRmov.b &P4DIR, &0x0234mov.b #0xa5, &P4DIRmov.b &P4DIR, &0x0235mov.b #0xcd, &P4SEL ; P4SELmov.b &P4SEL, &0x0236mov.b #0x32, &P4SELmov.b &P4SEL, &0x0237mov.b #0x00, &P4IN ; Re-Initializemov.b #0x00, &P4OUTmov.b #0x00, &P4DIRmov.b #0x00, &P4SELmov #0x0004, r15/* -------------- PORT 5: TEST RD/WR REGISTER ACCESS --------------- */mov.b #0xaa, &P5IN ; P5INmov.b &P5IN, &0x0240mov.b #0x55, &P5INmov.b &P5IN, &0x0241mov.b #0xaa, &P5OUT ; P5OUTmov.b &P5OUT, &0x0242mov.b #0x55, &P5OUTmov.b &P5OUT, &0x0243mov.b #0x5a, &P5DIR ; P5DIRmov.b &P5DIR, &0x0244mov.b #0xa5, &P5DIRmov.b &P5DIR, &0x0245mov.b #0xcd, &P5SEL ; P5SELmov.b &P5SEL, &0x0246mov.b #0x32, &P5SELmov.b &P5SEL, &0x0247mov.b #0x00, &P5IN ; Re-Initializemov.b #0x00, &P5OUTmov.b #0x00, &P5DIRmov.b #0x00, &P5SELmov #0x0005, r15/* -------------- PORT 6: TEST RD/WR REGISTER ACCESS --------------- */mov.b #0xaa, &P6IN ; P6INmov.b &P6IN, &0x0250mov.b #0x55, &P6INmov.b &P6IN, &0x0251mov.b #0xaa, &P6OUT ; P6OUTmov.b &P6OUT, &0x0252mov.b #0x55, &P6OUTmov.b &P6OUT, &0x0253mov.b #0x5a, &P6DIR ; P6DIRmov.b &P6DIR, &0x0254mov.b #0xa5, &P6DIRmov.b &P6DIR, &0x0255mov.b #0xcd, &P6SEL ; P6SELmov.b &P6SEL, &0x0256mov.b #0x32, &P6SELmov.b &P6SEL, &0x0257mov.b #0x00, &P6IN ; Re-Initializemov.b #0x00, &P6OUTmov.b #0x00, &P6DIRmov.b #0x00, &P6SELmov #0x0006, r15/* -------------- PORT 1: TEST I/O FUNCTIONALITY --------------- */mov #0x0200, r15 ;# Test Input pathp1_din_loop:mov.b &P1IN, 0(r15)inc r15cmp #0x0208, r15jne p1_din_loopmov.b #0x01, &P1OUT ; Test Output pathmov #0x1100, r15p1_dout_loop:rla.b &P1OUTinc r15cmp #0x1107, r15jne p1_dout_loopmov.b #0x01, &P1DIR ; Test Direction registermov #0x1200, r15p1_dir_loop:rla.b &P1DIRinc r15cmp #0x1207, r15jne p1_dir_loopmov.b #0x01, &P1SEL ; Test Function Select registermov #0x1300, r15p1_sel_loop:rla.b &P1SELinc r15cmp #0x1307, r15jne p1_sel_loopmov.b #0x00, &P1OUT ; Re-Initializemov.b #0x00, &P1DIRmov.b #0x00, &P1SEL/* -------------- PORT 2: TEST I/O FUNCTIONALITY --------------- */mov #0x0210, r15 ;# Test Input pathp2_din_loop:mov.b &P2IN, 0(r15)inc r15cmp #0x0218, r15jne p2_din_loopmov.b #0x01, &P2OUT ; Test Output pathmov #0x2100, r15p2_dout_loop:rla.b &P2OUTinc r15cmp #0x2107, r15jne p2_dout_loopmov.b #0x01, &P2DIR ; Test Direction registermov #0x2200, r15p2_dir_loop:rla.b &P2DIRinc r15cmp #0x2207, r15jne p2_dir_loopmov.b #0x01, &P2SEL ; Test Function Select registermov #0x2300, r15p2_sel_loop:rla.b &P2SELinc r15cmp #0x2307, r15jne p2_sel_loopmov.b #0x00, &P2OUT ; Re-Initializemov.b #0x00, &P2DIRmov.b #0x00, &P2SEL/* -------------- PORT 3: TEST I/O FUNCTIONALITY --------------- */mov #0x0220, r15 ;# Test Input pathp3_din_loop:mov.b &P3IN, 0(r15)inc r15cmp #0x0228, r15jne p3_din_loopmov.b #0x01, &P3OUT ; Test Output pathmov #0x3100, r15p3_dout_loop:rla.b &P3OUTinc r15cmp #0x3107, r15jne p3_dout_loopmov.b #0x01, &P3DIR ; Test Direction registermov #0x3200, r15p3_dir_loop:rla.b &P3DIRinc r15cmp #0x3207, r15jne p3_dir_loopmov.b #0x01, &P3SEL ; Test Function Select registermov #0x3300, r15p3_sel_loop:rla.b &P3SELinc r15cmp #0x3307, r15jne p3_sel_loopmov.b #0x00, &P3OUT ; Re-Initializemov.b #0x00, &P3DIRmov.b #0x00, &P3SEL/* -------------- PORT 4: TEST I/O FUNCTIONALITY --------------- */mov #0x0230, r15 ;# Test Input pathp4_din_loop:mov.b &P4IN, 0(r15)inc r15cmp #0x0238, r15jne p4_din_loopmov.b #0x01, &P4OUT ; Test Output pathmov #0x4100, r15p4_dout_loop:rla.b &P4OUTinc r15cmp #0x4107, r15jne p4_dout_loopmov.b #0x01, &P4DIR ; Test Direction registermov #0x4200, r15p4_dir_loop:rla.b &P4DIRinc r15cmp #0x4207, r15jne p4_dir_loopmov.b #0x01, &P4SEL ; Test Function Select registermov #0x4300, r15p4_sel_loop:rla.b &P4SELinc r15cmp #0x4307, r15jne p4_sel_loopmov.b #0x00, &P4OUT ; Re-Initializemov.b #0x00, &P4DIRmov.b #0x00, &P4SEL/* -------------- PORT 5: TEST I/O FUNCTIONALITY --------------- */mov #0x0240, r15 ;# Test Input pathp5_din_loop:mov.b &P5IN, 0(r15)inc r15cmp #0x0248, r15jne p5_din_loopmov.b #0x01, &P5OUT ; Test Output pathmov #0x5100, r15p5_dout_loop:rla.b &P5OUTinc r15cmp #0x5107, r15jne p5_dout_loopmov.b #0x01, &P5DIR ; Test Direction registermov #0x5200, r15p5_dir_loop:rla.b &P5DIRinc r15cmp #0x5207, r15jne p5_dir_loopmov.b #0x01, &P5SEL ; Test Function Select registermov #0x5300, r15p5_sel_loop:rla.b &P5SELinc r15cmp #0x5307, r15jne p5_sel_loopmov.b #0x00, &P5OUT ; Re-Initializemov.b #0x00, &P5DIRmov.b #0x00, &P5SEL/* -------------- PORT 6: TEST I/O FUNCTIONALITY --------------- */mov #0x0250, r15 ;# Test Input pathp6_din_loop:mov.b &P6IN, 0(r15)inc r15cmp #0x0258, r15jne p6_din_loopmov.b #0x01, &P6OUT ; Test Output pathmov #0x6100, r15p6_dout_loop:rla.b &P6OUTinc r15cmp #0x6107, r15jne p6_dout_loopmov.b #0x01, &P6DIR ; Test Direction registermov #0x6200, r15p6_dir_loop:rla.b &P6DIRinc r15cmp #0x6207, r15jne p6_dir_loopmov.b #0x01, &P6SEL ; Test Function Select registermov #0x6300, r15p6_sel_loop:rla.b &P6SELinc r15cmp #0x6307, r15jne p6_sel_loopmov.b #0x00, &P6OUT ; Re-Initializemov.b #0x00, &P6DIRmov.b #0x00, &P6SEL/* ---------------------- END OF TEST --------------- */end_of_test:nopbr #0xffff/* ---------------------- INTERRUPT VECTORS --------------- */.section .vectors, "a".word end_of_test ; Interrupt 0 (lowest priority) <unused>.word end_of_test ; Interrupt 1 <unused>.word end_of_test ; Interrupt 2 <unused>.word end_of_test ; 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
