ZNeo Serial: Need to configure UART1 alternate function

This commit is contained in:
Gregory Nutt 2014-04-26 09:43:40 -06:00
parent 344ed99bd4
commit 07bc8e53ff
3 changed files with 173 additions and 137 deletions

View File

@ -406,7 +406,6 @@ _c0_isr:
ld r1, #Z16F_IRQ_C0 /* r1 = Port C0, both edges DMA0 IRQ number */ ld r1, #Z16F_IRQ_C0 /* r1 = Port C0, both edges DMA0 IRQ number */
/* Join common interrupt handling logic */ /* Join common interrupt handling logic */
/************************************************************************** /**************************************************************************
* Name: _common_isr * Name: _common_isr
* *

View File

@ -90,7 +90,7 @@
* Description: * Description:
* Initialize UART0 or UART1 * Initialize UART0 or UART1
* *
* Parameters: * Input Parameters:
* None * None
* *
*************************************************************************/ *************************************************************************/
@ -111,6 +111,8 @@ _z16f_lowuartinit:
sll r3, #4 /* r3 = baud * 16 */ sll r3, #4 /* r3 = baud * 16 */
udiv r0, r3 /* BRG = (freq + baud * 8)/(baud * 16) */ udiv r0, r3 /* BRG = (freq + baud * 8)/(baud * 16) */
/* Hacks to get a serial console available ASAP */
#ifdef CONFIG_UART1_SERIAL_CONSOLE #ifdef CONFIG_UART1_SERIAL_CONSOLE
ld.w Z16F_UART1_BR, r0 /* Z16F_UART1_BR = BRG */ ld.w Z16F_UART1_BR, r0 /* Z16F_UART1_BR = BRG */
@ -152,10 +154,10 @@ _z16f_lowuartinit:
* Description: * Description:
* Send one character to the selected serial console * Send one character to the selected serial console
* *
* Parmeters: * Input Parameters:
* r1 = character * r1 = character
* *
* Return: * Returned Value:
* None * None
* *
* Modifies r0 (and maybe r1) * Modifies r0 (and maybe r1)

View File

@ -435,6 +435,7 @@ static int z16f_attach(struct uart_dev_s *dev)
irq_detach(priv->rxirq); irq_detach(priv->rxirq);
} }
} }
return ret; return ret;
} }
@ -451,8 +452,10 @@ static int z16f_attach(struct uart_dev_s *dev)
static void z16f_detach(struct uart_dev_s *dev) static void z16f_detach(struct uart_dev_s *dev)
{ {
struct z16f_uart_s *priv = (struct z16f_uart_s*)dev->priv; struct z16f_uart_s *priv = (struct z16f_uart_s*)dev->priv;
up_disable_irq(priv->rxirq); up_disable_irq(priv->rxirq);
up_disable_irq(priv->txirq); up_disable_irq(priv->txirq);
irq_detach(priv->rxirq); irq_detach(priv->rxirq);
irq_detach(priv->txirq); irq_detach(priv->txirq);
} }
@ -484,8 +487,8 @@ static int z16f_rxinterrupt(int irq, void *context)
{ {
dev = &g_uart0port; dev = &g_uart0port;
} }
#endif
else else
#endif
{ {
PANIC(); PANIC();
} }
@ -504,7 +507,7 @@ static int z16f_rxinterrupt(int irq, void *context)
if (status & Z16F_UARTSTAT0_RDA) if (status & Z16F_UARTSTAT0_RDA)
{ {
/* Handline an incoming, receive byte */ /* Handle an incoming, received byte */
uart_recvchars(dev); uart_recvchars(dev);
} }
@ -539,8 +542,8 @@ static int z16f_txinterrupt(int irq, void *context)
{ {
dev = &g_uart0port; dev = &g_uart0port;
} }
#endif
else else
#endif
{ {
PANIC(); PANIC();
} }
@ -593,6 +596,7 @@ static int z16f_receive(struct uart_dev_s *dev, uint32_t *status)
rxd = getreg8(priv->uartbase + Z16F_UART_RXD); rxd = getreg8(priv->uartbase + Z16F_UART_RXD);
stat0 = getreg8(priv->uartbase + Z16F_UART_STAT0); stat0 = getreg8(priv->uartbase + Z16F_UART_STAT0);
*status = (uint32_t)rxd | (((uint32_t)stat0) << 8); *status = (uint32_t)rxd | (((uint32_t)stat0) << 8);
return rxd; return rxd;
} }
@ -730,15 +734,46 @@ static bool z16f_txempty(struct uart_dev_s *dev)
void up_earlyserialinit(void) void up_earlyserialinit(void)
{ {
/* REVISIT: UART GPIO AFL register is not initialized */ uint8_t regval;
/* Configure UART alternate pin functions */
#ifdef CONFIG_Z16F_UART0
/* UART0 is PA4 and PA5, alternate function 1 */
regval = getreg8(Z16F_GPIOA_AFL);
regval |= 0x30;
putreg8(regval, Z16F_GPIOA_AFL);
regval = getreg8(Z16F_GPIOA_AFH);
regval &= ~0x30;
putreg8(regval, Z16F_GPIOA_AFH);
#endif
#ifdef CONFIG_Z16F_UART1
/* UART1 is PD4 and PD5, alternate function 1 */
regval = getreg8(Z16F_GPIOD_AFL);
regval |= 0x30;
putreg8(regval, Z16F_GPIOD_AFL);
regval = getreg8(Z16F_GPIOD_AFH);
regval &= ~0x30;
putreg8(regval, Z16F_GPIOD_AFH);
#endif
/* Disable UART interrupts */
#ifdef TTYS0_DEV #ifdef TTYS0_DEV
(void)z16f_disableuartirq(&TTYS0_DEV); (void)z16f_disableuartirq(&TTYS0_DEV);
#endif #endif
#ifdef TTYS1_DEV #ifdef TTYS1_DEV
(void)z16f_disableuartirq(&TTYS1_DEV); (void)z16f_disableuartirq(&TTYS1_DEV);
#endif #endif
/* Configuration any serial console */
#ifdef CONSOLE_DEV #ifdef CONSOLE_DEV
CONSOLE_DEV.isconsole = true; CONSOLE_DEV.isconsole = true;
z16f_setup(&CONSOLE_DEV); z16f_setup(&CONSOLE_DEV);