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

Subversion Repositories or1k

[/] [or1k/] [tags/] [rel-0-3-0-rc2/] [or1ksim/] [testbench/] [acv_uart.c] - Diff between revs 1024 and 1048

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

Rev 1024 Rev 1048
Line 39... Line 39...
#define LSR_BREAK   (0x10)
#define LSR_BREAK   (0x10)
#define LSR_TXFE    (0x20)
#define LSR_TXFE    (0x20)
#define LSR_TXE     (0x40)
#define LSR_TXE     (0x40)
#define LSR_ERR     (0x80)
#define LSR_ERR     (0x80)
 
 
#define UART_INT_LINE 15 /* To which interrupt is uart connected */
#define UART_INT_LINE 19 /* To which interrupt is uart connected */
 
 
/* fails if x is false */
/* fails if x is false */
#define ASSERT(x) ((x)?1: fail (__FUNCTION__, __LINE__))
#define ASSERT(x) ((x)?1: fail (__FUNCTION__, __LINE__))
/* Waits a few cycles that uart can prepare its data */
/* Waits a few cycles that uart can prepare its data */
#define WAIT() {asm ("l.nop");asm ("l.nop");asm ("l.nop");asm ("l.nop");}
#define WAIT() {asm ("l.nop");asm ("l.nop");asm ("l.nop");asm ("l.nop");}
Line 74... Line 74...
inline unsigned long getreg (unsigned long addr)
inline unsigned long getreg (unsigned long addr)
{
{
  return *((volatile unsigned char *)addr);
  return *((volatile unsigned char *)addr);
}
}
 
 
static volatile int int_cnt = 0;
static volatile int int_cnt;
static volatile unsigned int_iir = 0;
static volatile unsigned int_iir;
static volatile unsigned int_lsr = 0;
static volatile unsigned int_lsr;
static int int_rbr = 0;
static int int_rbr;
 
 
void interrupt_handler ()
void interrupt_handler ()
{
{
  unsigned x;
  unsigned x;
  printf ("Int\n");
  printf ("Int\n");
Line 509... Line 509...
  int i;
  int i;
  printf ("interrupt_test\n");
  printf ("interrupt_test\n");
  /* Configure UART for interrupt mode */
  /* Configure UART for interrupt mode */
  ASSERT(getreg (UART_IIR) == 0xc1); /* nothing should be happening */
  ASSERT(getreg (UART_IIR) == 0xc1); /* nothing should be happening */
  setreg (UART_LCR, LCR_DIVL);
  setreg (UART_LCR, LCR_DIVL);
  setreg (UART_DLH, 6 >> 8);            /* Set relatively slow speed, so we can hanlde interrupts properly */
  setreg (UART_DLH, 12 >> 8);            /* Set relatively slow speed, so we can hanlde interrupts properly */
  setreg (UART_DLL, 6 & 0xff);
  setreg (UART_DLL, 12 & 0xff);
  setreg (UART_LCR, 0x03);    /* 8N1 @ 6 */
  setreg (UART_LCR, 0x03);    /* 8N1 @ 6 */
 
 
  ASSERT (int_cnt == 0);   /* We should not have got any interrupts before this test */
  ASSERT (int_cnt == 0);   /* We should not have got any interrupts before this test */
  setreg (UART_FCR, 0x01); /* Set trigger level = 1 char, fifo should not be reset */
  setreg (UART_FCR, 0x01); /* Set trigger level = 1 char, fifo should not be reset */
  setreg (UART_IER, 0x07); /* Enable interrupts: line status, THR empty, data ready */
  setreg (UART_IER, 0x07); /* Enable interrupts: line status, THR empty, data ready */
Line 750... Line 750...
{
{
  printf ("line_error_test\n");
  printf ("line_error_test\n");
 
 
  /* Test framing error if we change speed */
  /* Test framing error if we change speed */
  setreg (UART_LCR, LCR_DIVL);
  setreg (UART_LCR, LCR_DIVL);
  setreg (UART_DLH, 2 >> 8);
  setreg (UART_DLH, 12 >> 8);
  setreg (UART_DLL, 2 & 0xff);
  setreg (UART_DLL, 12 & 0xff);
  setreg (UART_LCR, 0x03);    /* 8N1 @ 2 */
  setreg (UART_LCR, 0x03);    /* 8N1 @ 3 */
  MARK();
  MARK();
 
 
  send_char ('c');
  send_char ('c');
  ASSERT (int_cnt == 0);
  ASSERT (int_cnt == 0);
  setreg (UART_IER, 0x04); /* Enable interrupts: line status */
  setreg (UART_IER, 0x04); /* Enable interrupts: line status */
Line 799... Line 799...
 
 
  /* Enable interrupts */
  /* Enable interrupts */
  mtspr (SPR_SR, mfspr(SPR_SR) | SPR_SR_IEE);
  mtspr (SPR_SR, mfspr(SPR_SR) | SPR_SR_IEE);
  mtspr (SPR_PICMR, mfspr(SPR_PICMR) | (0x00000001L << UART_INT_LINE));
  mtspr (SPR_PICMR, mfspr(SPR_PICMR) | (0x00000001L << UART_INT_LINE));
 
 
 
  int_cnt = 0;
 
  int_iir = 0;
 
  int_lsr = 0;
 
  int_rbr = 0;
 
 
  register_test ();
  register_test ();
  init_8n1 ();
  init_8n1 ();
  send_recv_test ();
  send_recv_test ();
  break_test ();
  break_test ();
  different_modes_test ();
  different_modes_test ();

powered by: WebSVN 2.1.0

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