/************************************************
Monitor LPC2478
*************************************************/
#include <arch/nxp/lpc24xx.h>
#include "monarm.h"
/* LCD_E em P1.31 */
#define LCD_E	0x80
/* LCD_RS em P1.30 */
#define LCD_RS	0x40
/* LCD_RW no pino 23 da P4 */
#define LCD_RW	(1<<23)
/* LCD dados nos bits 0 a 7 da P2 */

void LCDcomando(int c)
{
FIO2PIN0=c;
FIO1CLR3=LCD_RS;
espera_ms(1);
FIO1SET3=LCD_E;
espera_ms(1);
FIO1CLR3=LCD_E;
espera_ms(20);
}

void LCDputchar(int c)
{
//while(!(U0LSR & THREMPTY));
U0THR = c;
FIO2PIN0=c;
FIO1SET3=LCD_RS;
espera_ms(1);
FIO1SET3=LCD_E;
espera_ms(1);
FIO1CLR3=LCD_E;
espera_ms(8);
}

void LCDinit(void)
{
FIO2DIR |= 0xff;	/* P0.0 a P0.7 como saidas (dados do LCD) */
FIO1DIR |= (LCD_E | LCD_RS) << 24;
FIO4DIR |= LCD_RW;
FIO4CLR = LCD_RW;
FIO1CLR3=LCD_E;
espera_ms(200);
LCDcomando(0x38);
LCDcomando(1);
LCDcomando(0x0e);
}

void LCDprompt(void)
{
LCDcomando(1);
LCDputs("FENG   ADC0=\r\n");
LCDcomando(0xc0);
LCDputs("PUCRS  ");
}

void LCDputs(char *s)
{
while(*s && !(U0LSR & 1)) LCDputchar(*s++);
}
