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));
|