OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [testbench/] [acv_uart.c] - Diff between revs 381 and 396

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 381 Rev 396
Line 1... Line 1...
/* UART test using ACV */
/* UART test using ACV */
 
 
#include "spr_defs.h"
#include "spr_defs.h"
#include "support.h"
#include "support.h"
 
 
 
/* use this macro to comment out nonworking parts */
 
#define COMPLETE    0
 
 
#define UART_ADDR   (0x9c000000)
#define UART_ADDR   (0x9c000000)
#define UART_RBR    (UART_ADDR + 0)
#define UART_RBR    (UART_ADDR + 0)
#define UART_THR    (UART_ADDR + 0)
#define UART_THR    (UART_ADDR + 0)
#define UART_IER    (UART_ADDR + 1)
#define UART_IER    (UART_ADDR + 1)
#define UART_IIR    (UART_ADDR + 2)
#define UART_IIR    (UART_ADDR + 2)
Line 80... Line 83...
    ASSERT(getreg (UART_RBR) == 0x00); //0
    ASSERT(getreg (UART_RBR) == 0x00); //0
    ASSERT(getreg (UART_IER) == 0x00); //1
    ASSERT(getreg (UART_IER) == 0x00); //1
    ASSERT(getreg (UART_IIR) == 0xc1); //2
    ASSERT(getreg (UART_IIR) == 0xc1); //2
    ASSERT(getreg (UART_LCR) == 0x03); //3
    ASSERT(getreg (UART_LCR) == 0x03); //3
    ASSERT(getreg (UART_MCR) == 0x00); //4
    ASSERT(getreg (UART_MCR) == 0x00); //4
//    ASSERT(getreg (UART_LSR) == 0x60); //5
#if COMPLETE
//    ASSERT(getreg (UART_MSR) == 0x00); //6
    ASSERT(getreg (UART_LSR) == 0x60); //5
 
    ASSERT(getreg (UART_MSR) == 0x00); //6
 
#endif
 
 
    setreg(UART_LCR, LCR_DIVL); //enable latches
    setreg(UART_LCR, LCR_DIVL); //enable latches
    ASSERT(getreg (UART_DLL) == 0x00); //0
    ASSERT(getreg (UART_DLL) == 0x00); //0
    ASSERT(getreg (UART_DLH) == 0x00); //1
    ASSERT(getreg (UART_DLH) == 0x00); //1
    setreg(UART_LCR, 0x00); //disable latches
    setreg(UART_LCR, 0x00); //disable latches
  }
  }
 
 
 
#if COMPLETE
  { /* test if status registers are read only */
  { /* test if status registers are read only */
    /*unsigned long tmp;
    unsigned long tmp;
    int i;
    int i;
    tmp = getreg (UART_LSR);
    tmp = getreg (UART_LSR);
    setreg (UART_LSR, ~tmp);
    setreg (UART_LSR, ~tmp);
    ASSERT(getreg (UART_LSR) == tmp);
    ASSERT(getreg (UART_LSR) == tmp);
 
 
    for (i = 0; i < 9; i++) {
    for (i = 0; i < 9; i++) {
      setreg (UART_LSR, 1 << i);
      setreg (UART_LSR, 1 << i);
      ASSERT(getreg (UART_LSR) == tmp);
      ASSERT(getreg (UART_LSR) == tmp);
    }
    }
    */
 
    /*tmp = getreg (UART_MSR);
    tmp = getreg (UART_MSR);
    setreg (UART_MSR, ~tmp);
    setreg (UART_MSR, ~tmp);
    ASSERT(getreg (UART_MSR) == tmp);
    ASSERT(getreg (UART_MSR) == tmp);
 
 
    for (i = 0; i < 9; i++) {
    for (i = 0; i < 9; i++) {
      setreg (UART_MSR, 1 << i);
      setreg (UART_MSR, 1 << i);
      ASSERT(getreg (UART_MSR) == tmp);
      ASSERT(getreg (UART_MSR) == tmp);
    }*/
    }
  }
  }
 
#endif
 
 
  ASSERT (!(getreg (UART_LSR) & 0x1f));
  ASSERT (!(getreg (UART_LSR) & 0x1f));
  { /* test whether MCR is write only, be careful not to set the loopback bit */
  { /* test whether MCR is write only, be careful not to set the loopback bit */
    /*ASSERT(getreg (UART_MCR) == 0x00);
#if COMPLETE
    setreg (UART_MCR, 0x45);
    ASSERT(getreg (UART_MCR) == 0x00);
    ASSERT(getreg (UART_MCR) == 0x00);
    setreg (UART_MCR, 0x45);
    setreg (UART_MCR, 0xaa);
    ASSERT(getreg (UART_MCR) == 0x00);
    ASSERT(getreg (UART_MCR) == 0x00);*/
    setreg (UART_MCR, 0xaa);
 
    ASSERT(getreg (UART_MCR) == 0x00);
 
#endif
  }
  }
  ASSERT (!(getreg (UART_LSR) & 0x1f));
  ASSERT (!(getreg (UART_LSR) & 0x1f));
  { /* Test if Divisor latch byte holds the data */
  { /* Test if Divisor latch byte holds the data */
    int i;
    int i;
    setreg(UART_LCR, LCR_DIVL); //enable latches
    setreg(UART_LCR, LCR_DIVL); //enable latches
Line 208... Line 218...
    while (!(getreg (UART_LSR) & LSR_TXE));
    while (!(getreg (UART_LSR) & LSR_TXE));
    NO_ERROR();
    NO_ERROR();
    setreg (UART_THR, *s); /* send character */
    setreg (UART_THR, *s); /* send character */
    NO_ERROR();
    NO_ERROR();
// igor   for (i = 0; i < 1600; i++) /* wait at least ten chars before sending next one */
// igor   for (i = 0; i < 1600; i++) /* wait at least ten chars before sending next one */
    for (i = 0; i < 16; i++) /* wait at least ten chars before sending next one */
    for (i = 0; i < 16; i++) /* wait at few chars before sending next one */
      asm volatile ("l.nop");
      asm volatile ("l.nop");
    s++;
    s++;
  }
  }
 
 
  while (!(getreg (UART_LSR) & LSR_TXE));
  while (!(getreg (UART_LSR) & LSR_TXE));

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.