Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Can't Receive Data on UART0

2006-03-11 by Nice Guy

I have tried everything I can think of, but I can not receive data on
the UART.  I know the UART and all other hardware is good, because I
can program the part over the exact same setup.  All I want to do is
send anything I receive back out, Just emulate a loopback as a first
step.  I can send data out the uart all day long. Below is my code, I
must be doing something stupid.  VPB Clock is set the same as the PLL
clock. Thanks for any help.

int main(void)
{
	sysInit();                              // Init system stuff
	uart0Init(9600, UART_8N1);
	uart0Puts("UP!\n\r");
	while(1)
	{
		uart0Putch(uart0Getch());
	}
	return(0);
}

int uart0Init(int baud, int mode)
{
	// clear needed pinsel bits and set to correct values
	PINSEL0 &= ~(PINSEL_FUNC(3,1)|PINSEL_FUNC(3,0));
	PINSEL0 |= PINSEL_FUNC(1,1) | PINSEL_FUNC(1,0);

	U0LCR = BIT7|mode;
	U0DLL = ((XTAL * M_OSC) / (baud * 16)) & 0xFF;
	U0DLM = (((XTAL * M_OSC) /(baud * 16)) >> 8) & 0xFF;
	U0LCR &= ~BIT7;

	U0IER = 0x00;             // disable all interrupts
	U0IIR = 0x00;             // clear interrupt ID register
	U0LSR = 0x00;             // clear line status register
	U0FCR = BIT2|BIT1|BIT0;
	return(0);
}

int uart0Putch(int ch)
{
  while (!(U0LSR & BIT5))          // wait for TX buffer to empty
    continue;                           // also either WDOG()

  U0THR = (unsigned char)ch;  // put char to Transmit Holding Register
  return (unsigned char)ch;      // return char ("stdio-compatible"?)
}

const char *uart0Puts(const char *string)
{
	char ch;

	while ((ch = *string)) {
		if (uart0Putch(ch)<0) break;
		string++;
	}

	return string;
}

int uart0Getch(void)
{
	if(U0LSR & BIT0)
	return U0RBR;
	return -1;
}

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.