diff options
Diffstat (limited to 'cpu/mpc5xxx/serial.c')
| -rw-r--r-- | cpu/mpc5xxx/serial.c | 56 | 
1 files changed, 56 insertions, 0 deletions
| diff --git a/cpu/mpc5xxx/serial.c b/cpu/mpc5xxx/serial.c index 6cb523d3c..430d63f74 100644 --- a/cpu/mpc5xxx/serial.c +++ b/cpu/mpc5xxx/serial.c @@ -166,6 +166,25 @@ void serial_putc(const char c)  }  #if defined(CONFIG_SERIAL_MULTI) +void serial_putc_raw_dev(unsigned long dev_base, const char c) +#else +void serial_putc_raw(const char c) +#endif +{ +#if defined(CONFIG_SERIAL_MULTI) +	volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; +#else +	volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; +#endif +	/* Wait for last character to go. */ +	while (!(psc->psc_status & PSC_SR_TXEMP)) +		; + +	psc->psc_buffer_8 = c; +} + + +#if defined(CONFIG_SERIAL_MULTI)  void serial_puts_dev (unsigned long dev_base, const char *s)  #else  void serial_puts (const char *s) @@ -240,6 +259,43 @@ void serial_setbrg(void)  }  #if defined(CONFIG_SERIAL_MULTI) +void serial_setrts_dev (unsigned long dev_base, int s) +#else +void serial_setrts(int s) +#endif +{ +#if defined(CONFIG_SERIAL_MULTI) +	volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; +#else +	volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; +#endif + +	if (s) { +		/* Assert RTS (become LOW) */ +		psc->op1 = 0x1; +	} +	else { +		/* Negate RTS (become HIGH) */ +		psc->op0 = 0x1; +	} +} + +#if defined(CONFIG_SERIAL_MULTI) +int serial_getcts_dev (unsigned long dev_base) +#else +int serial_getcts(void) +#endif +{ +#if defined(CONFIG_SERIAL_MULTI) +	volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; +#else +	volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; +#endif + +	return (psc->ip & 0x1) ? 0 : 1; +} + +#if defined(CONFIG_SERIAL_MULTI)  int serial0_init(void)  {  	return (serial_init_dev(PSC_BASE)); |