Fix a16f serial bugs

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@568 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2008-01-26 14:35:25 +00:00
parent c5d3ec31ab
commit 108b7be44f
3 changed files with 30 additions and 35 deletions

View File

@ -149,7 +149,7 @@ _z16f_reset:
#endif
/* Perform VERY early UART initialization so that we can use it here */
#if defined(CONFIG_ARCH_LOWPUTC) || defined(CONFIG_ARCH_LOWGETC)
#if defined(CONFIG_ARCH_LOWPUTC) || defined(CONFIG_ARCH_LOWGETC) || CONFIG_NFILE_DESCRIPTORS == 0
call _z16f_lowuartinit /* Initialize the UART for debugging */
#endif
/* Initialize the hardware stack overflow register */

View File

@ -41,7 +41,7 @@
#include <nuttx/config.h>
#include "chip/chip.h"
#if defined(CONFIG_ARCH_LOWPUTC) || defined(CONFIG_ARCH_LOWGETC)
#if defined(CONFIG_ARCH_LOWPUTC) || defined(CONFIG_ARCH_LOWGETC) || CONFIG_NFILE_DESCRIPTORS == 0
/*************************************************************************
* External References / External Definitions
@ -96,19 +96,6 @@ _z16f_lowuartinit:
udiv r0, r3 /* BRG = (freq + baud * 8)/(baud * 16) */
#ifdef CONFIG_UART0_SERIAL_CONSOLE
ld.w Z16F_UART0_BR, r0 /* Z16F_UART0_BR = BRG */
/* Set the GPIO Alternate Function Register Lo (AFL) register */
ld r0, #%30
or.b Z16F_GPIOA_AFL, r0 /* Z16F_GPIOA_AFL |= %30 */
/* Enable UART receive (REN) and transmit (TEN) */
clr.b Z16F_UART0_CTL1 /* Z16F_UART0_CTL1 = 0 */
ld r0, #(Z16F_UARTCTL0_TEN|Z16F_UARTCTL0_REN)
ld.b Z16F_UART0_CTL0, r0 /* Z16F_UART0_CTL0 = %c0 */
#else
ld.w Z16F_UART1_BR, r0 /* Z16F_UART1_BR = BRG */
/* Set the GPIO Alternate Function Register Lo (AFL) register */
@ -121,6 +108,19 @@ _z16f_lowuartinit:
clr.b Z16F_UART1_CTL1 /* Z16F_UART1_CTL1 = 0 */
ld r0, #(Z16F_UARTCTL0_TEN|Z16F_UARTCTL0_REN)
ld.b Z16F_UART1_CTL0, r0 /* Z16F_UART1_CTL0 = %c0 */
#else
ld.w Z16F_UART0_BR, r0 /* Z16F_UART0_BR = BRG */
/* Set the GPIO Alternate Function Register Lo (AFL) register */
ld r0, #%30
or.b Z16F_GPIOA_AFL, r0 /* Z16F_GPIOA_AFL |= %30 */
/* Enable UART receive (REN) and transmit (TEN) */
clr.b Z16F_UART0_CTL1 /* Z16F_UART0_CTL1 = 0 */
ld r0, #(Z16F_UARTCTL0_TEN|Z16F_UARTCTL0_REN)
ld.b Z16F_UART0_CTL0, r0 /* Z16F_UART0_CTL0 = %c0 */
#endif
popmlo <r0, r3> /* Restore registers */
ret /* Return */

View File

@ -649,39 +649,35 @@ int up_putc(int ch)
****************************************************************************/
#ifdef CONFIG_UART1_SERIAL_CONSOLE
# define z16f_contrde() \
do { \
int tmp; \
for (tmp = 1000 ; tmp > 0 ; tmp--) \
if ((getreg8(Z16F_UART1_STAT0) & Z16F_UARTSTAT0_TDRE) != 0) \
break; \
} while (0)
# define z16f_contrde() \
((getreg8(Z16F_UART1_STAT0) & Z16F_UARTSTAT0_TDRE) != 0)
# define z16f_contxd(ch) \
putreg8((ubyte)(ch), Z16F_UART1_STAT0)
putreg8((ubyte)(ch), Z16F_UART1_TXD)
#else
# define z16f_contrde() \
do { \
int tmp; \
for (tmp = 1000 ; tmp > 0 ; tmp--) \
if ((getreg8(Z16F_UART0_STAT0) & Z16F_UARTSTAT0_TDRE) != 0) \
break; \
} while (0)
# define z16f_contrde() \
((getreg8(Z16F_UART0_STAT0) & Z16F_UARTSTAT0_TDRE) != 0)
# define z16f_contxd(ch) \
putreg8((ubyte)(ch), Z16F_UART0_STAT0)
putreg8((ubyte)(ch), Z16F_UART0_TXD)
#endif
/****************************************************************************
* Private Functions
****************************************************************************/
static void _up_putc(int ch)
{
int tmp;
for (tmp = 1000 ; tmp > 0 && !z16f_contrde(); tmp--);
z16f_contxd(ch);
}
/****************************************************************************
* Public Functions
****************************************************************************/
int up_putc(int ch)
{
z16f_contrde();
z16f_contxd(ch);
_up_putc(ch);
/* Check for LF */
@ -689,8 +685,7 @@ int up_putc(int ch)
{
/* Add CR */
z16f_contrde();
z16f_contxd('\r');
_up_putc('\r');
}
return ch;