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