summaryrefslogtreecommitdiff
path: root/nuttx/arch/z16
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-01-22 11:50:37 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-01-22 11:50:37 -0600
commita63cf27d1fd4cd630244783a8c892021c41e1e19 (patch)
tree9c0b7588b30d58b825ae6ef982dbc44d71c21674 /nuttx/arch/z16
parentad896536097c687b2933a9c0417f9b49ec9930c4 (diff)
downloadnuttx-a63cf27d1fd4cd630244783a8c892021c41e1e19.tar.gz
nuttx-a63cf27d1fd4cd630244783a8c892021c41e1e19.tar.bz2
nuttx-a63cf27d1fd4cd630244783a8c892021c41e1e19.zip
configs/16z: Add support for 16z board
Diffstat (limited to 'nuttx/arch/z16')
-rw-r--r--nuttx/arch/z16/src/z16f/Kconfig4
-rw-r--r--nuttx/arch/z16/src/z16f/chip.h16
-rwxr-xr-xnuttx/arch/z16/src/z16f/z16f_lowuart.S128
-rw-r--r--nuttx/arch/z16/src/z16f/z16f_serial.c88
4 files changed, 179 insertions, 57 deletions
diff --git a/nuttx/arch/z16/src/z16f/Kconfig b/nuttx/arch/z16/src/z16f/Kconfig
index 5efc061a5..eaa490057 100644
--- a/nuttx/arch/z16/src/z16f/Kconfig
+++ b/nuttx/arch/z16/src/z16f/Kconfig
@@ -9,12 +9,12 @@ comment "Z16F Configuration Options"
# UART0/1 always enabled
config Z16F_UART0
- bool
+ bool "UART0"
default y
select ARCH_HAVE_UART0
config Z16F_UART1
- bool
+ bool "UART1"
default y
select ARCH_HAVE_UART1
diff --git a/nuttx/arch/z16/src/z16f/chip.h b/nuttx/arch/z16/src/z16f/chip.h
index bf4b7fd0c..e8cfba560 100644
--- a/nuttx/arch/z16/src/z16f/chip.h
+++ b/nuttx/arch/z16/src/z16f/chip.h
@@ -226,6 +226,22 @@
#define Z16F_SYSEXCP_PRIOSC Z16F_SYSEXCPL_PRIOSC
#define Z16F_SYSEXCP_WDT Z16F_SYSEXCPL_WDT
+/* External memory interface ********************************************************/
+
+#define Z16F_EXTCT _HX32(ffffe070) /* External Interface Control */
+#define Z16F_EXTCS0H _HX32(ffffe072) /* Chip Select 0 Control High */
+#define Z16F_EXTCS0L _HX32(ffffe073) /* Chip Select 0 Control Low */
+#define Z16F_EXTCS1H _HX32(ffffe074) /* Chip Select 1 Control High */
+#define Z16F_EXTCS1L _HX32(ffffe075) /* Chip Select 1 Control Low */
+#define Z16F_EXTCS2H _HX32(ffffe076) /* Chip Select 2 Control High */
+#define Z16F_EXTCS2L _HX32(ffffe077) /* Chip Select 2 Control Low */
+#define Z16F_EXTCS3H _HX32(ffffe078) /* Chip Select 3 Control High */
+#define Z16F_EXTCS3L _HX32(ffffe079) /* Chip Select 3 Control Low */
+#define Z16F_EXTCS4H _HX32(ffffe07a) /* Chip Select 4 Control High */
+#define Z16F_EXTCS4L _HX32(ffffe07b) /* Chip Select 4 Control Low */
+#define Z16F_EXTCS5H _HX32(ffffe07c) /* Chip Select 5 Control High */
+#define Z16F_EXTCS5L _HX32(ffffe07d) /* Chip Select 5 Control Low */
+
/* Oscillator control registers *****************************************************/
#define Z16F_OSC_CTL _HX32(ffffe0A0) /* 8-bit: Oscillator Control */
diff --git a/nuttx/arch/z16/src/z16f/z16f_lowuart.S b/nuttx/arch/z16/src/z16f/z16f_lowuart.S
index 62d42b6e9..b511f9a10 100755
--- a/nuttx/arch/z16/src/z16f/z16f_lowuart.S
+++ b/nuttx/arch/z16/src/z16f/z16f_lowuart.S
@@ -45,6 +45,22 @@
#ifdef USE_LOWUARTINIT
/*************************************************************************
+ * Pre-processor Definitions
+ *************************************************************************/
+
+#ifndef CONFIG_Z16F_UART0
+# undef CONFIG_UART0_SERIAL_CONSOLE
+#endif
+
+#ifndef CONFIG_Z16F_UART1
+# undef CONFIG_UART1_SERIAL_CONSOLE
+#endif
+
+#if defined(CONFIG_UART0_SERIAL_CONSOLE) || defined(CONFIG_UART1_SERIAL_CONSOLE)
+# define HAVE_Z16F_SERIAL_CONSOLE
+#endif
+
+/*************************************************************************
* External References / External Definitions
*************************************************************************/
@@ -80,47 +96,54 @@
*************************************************************************/
_z16f_lowuartinit:
+
+#ifdef HAVE_Z16F_SERIAL_CONSOLE
/* Calculate and set the baud rate generation register */
#ifdef CONFIG_UART1_SERIAL_CONSOLE
- ld r3, #CONFIG_UART1_BAUD /* r3 = Selected UART1 baud */
+ ld r3, #CONFIG_UART1_BAUD /* r3 = Selected UART1 baud */
#else
- ld r3, #CONFIG_UART0_BAUD /* r3 = Selected UART0 (default) baud */
+ ld r3, #CONFIG_UART0_BAUD /* r3 = Selected UART0 (default) baud */
#endif
- ld r0, r3 /* r0 = baud */
- sll r0, #3 /* r0 = baud * 8 */
- add r0, #_SYS_CLK_FREQ /* r3 = freq + baud * 8 */
- sll r3, #4 /* r3 = baud * 16 */
- udiv r0, r3 /* BRG = (freq + baud * 8)/(baud * 16) */
+ ld r0, r3 /* r0 = baud */
+ sll r0, #3 /* r0 = baud * 8 */
+ add r0, #_SYS_CLK_FREQ /* r3 = freq + baud * 8 */
+ sll r3, #4 /* r3 = baud * 16 */
+ udiv r0, r3 /* BRG = (freq + baud * 8)/(baud * 16) */
#ifdef CONFIG_UART1_SERIAL_CONSOLE
ld.w Z16F_UART1_BR, r0 /* Z16F_UART1_BR = BRG */
/* Set the GPIO Alternate Function Register Lo (AFL) register */
- ld r0, #%30
- or.b Z16F_GPIOD_AFL, r0 /* Z16F_GPIOD_AFL |= %30 */
+ ld r0, #%30
+ or.b Z16F_GPIOD_AFL, r0 /* Z16F_GPIOD_AFL |= %30 */
/* Enable UART receive (REN) and transmit (TEN) */
- 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 */
+ 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 */
+ 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 */
+ 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 */
+ 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
- ret /* Return */
+#endif /* HAVE_Z16F_SERIAL_CONSOLE */
+
+ ret /* Return */
+
#endif /* USE_LOWUARTINIT */
/*************************************************************************
@@ -141,18 +164,21 @@ _z16f_lowuartinit:
#ifdef CONFIG_Z16_LOWPUTC
_up_lowputc:
+
+#ifdef HAVE_Z16F_SERIAL_CONSOLE
/* Check if the character to output is a linefeed */
- ext.ub r0, r1 /* r0=Character masked to 8-bits */
- cp r0, #10 /* Is it a linefeed ('\n') */
- jp ne, _z16f_xmitc /* No? Jump to _z16f_xmitc with character in r1 */
+ ext.ub r0, r1 /* r0=Character masked to 8-bits */
+ cp r0, #10 /* Is it a linefeed ('\n') */
+ jp ne, _z16f_xmitc /* No? Jump to _z16f_xmitc with character in r1 */
/* Output a carriage return before the linefeed */
- ld r1, #13 /* Output carriage reuturn ('\r') */
- call _z16f_xmitc /* Call _z16f_xmitc with r1='\r' */
- ld r1, #10 /* Restore r1=linefeed to output */
- /* Fall through to _z16f_xmitc with linefeed in r1 */
+ ld r1, #13 /* Output carriage reuturn ('\r') */
+ call _z16f_xmitc /* Call _z16f_xmitc with r1='\r' */
+ ld r1, #10 /* Restore r1=linefeed to output */
+ /* Fall through to _z16f_xmitc with linefeed in r1 */
+#endif /* HAVE_Z16F_SERIAL_CONSOLE */
/*************************************************************************
* Name: _z16f_xmitc
@@ -172,17 +198,24 @@ _up_lowputc:
_z16f_xmitc:
_z16f_xmitc1:
- ld r0, Z16F_UARTSTAT0_TDRE /* TDRE=Transmitter Data Register Empty */
+
+#ifdef HAVE_Z16F_SERIAL_CONSOLE
+ ld r0, Z16F_UARTSTAT0_TDRE /* TDRE=Transmitter Data Register Empty */
+
#ifdef CONFIG_UART1_SERIAL_CONSOLE
- tm.b Z16F_UART1_STAT0, r0 /* r0 = Z16F_UART1_STAT0 */
- jp eq, _z16f_xmitc1 /* While (!(Z16F_UART1_STAT0 & TDRE)) */
+ tm.b Z16F_UART1_STAT0, r0 /* r0 = Z16F_UART1_STAT0 */
+ jp eq, _z16f_xmitc1 /* While (!(Z16F_UART1_STAT0 & TDRE)) */
ld.b Z16F_UART1_TXD, r1 /* Z16F_UART1_TXD = r1 (character) */
+
#else
- tm.b Z16F_UART0_STAT0, r0 /* r0 = Z16F_UART0_STAT1 */
- jp eq, _z16f_xmitc1 /* While (!(Z16F_UART0_STAT0 & TDRE)) */
+ tm.b Z16F_UART0_STAT0, r0 /* r0 = Z16F_UART0_STAT1 */
+ jp eq, _z16f_xmitc1 /* While (!(Z16F_UART0_STAT0 & TDRE)) */
ld.b Z16F_UART0_TXD, r1 /* Z16F_UART0_TXD = r1 (character) */
+
#endif
- ret /* Return */
+#endif /* HAVE_Z16F_SERIAL_CONSOLE */
+
+ ret /* Return */
#endif /* CONFIG_Z16_LOWPUTC */
@@ -203,26 +236,35 @@ _z16f_xmitc1:
#ifdef CONFIG_Z16_LOWGETC
_up_lowgetc:
_up_lowgetc1:
- ld r0, #Z16F_UARTSTAT0_RDA /* RDA=Receive data available */
+
+#ifdef HAVE_Z16F_SERIAL_CONSOLE
+ ld r0, #Z16F_UARTSTAT0_RDA /* RDA=Receive data available */
+
#ifdef CONFIG_UART1_SERIAL_CONSOLE
tm.b Z16F_UART1_STAT0, r0
- jp eq, _up_lowgetc1 /* While (!Z16F_UART1_STAT0 & RDA)) */
+ jp eq, _up_lowgetc1 /* While (!Z16F_UART1_STAT0 & RDA)) */
ld.ub r0, Z16F_UART1_RXD /* r0 = Z16F_UART1_RXD */
+
#else
tm.b Z16F_UART0_STAT0,r0 /* While (!Z16F_UART0_STAT0 & RDA) */
- jp eq, _up_lowgetc1
+ jp eq, _up_lowgetc1
ld.ub r0, Z16F_UART0_RXD /* r0 = Z16F_UART0_RXD */
+
#endif
- cp r0, #%0d /* Test for '\r' */
- jp eq, _up_lowgetc2
- cp r0, #%0d /* Test \r + high bit */
- jp ne, _up_lowgetc3
+ cp r0, #%0d /* Test for '\r' */
+ jp eq, _up_lowgetc2
+
+ cp r0, #%0d /* Test \r + high bit */
+ jp ne, _up_lowgetc3
+
_up_lowgetc2:
- ld r0, #%0a /* Convert '\r' to '\n' */
-_up_lowgetc3: /* Return value in r0 */
- ret /* Return */
+ ld r0, #%0a /* Convert '\r' to '\n' */
+
+_up_lowgetc3: /* Return value in r0 */
+#endif /* HAVE_Z16F_SERIAL_CONSOLE */
+
+ ret /* Return */
#endif
end
-
diff --git a/nuttx/arch/z16/src/z16f/z16f_serial.c b/nuttx/arch/z16/src/z16f/z16f_serial.c
index d2f196025..0d4e4876d 100644
--- a/nuttx/arch/z16/src/z16f/z16f_serial.c
+++ b/nuttx/arch/z16/src/z16f/z16f_serial.c
@@ -1,7 +1,7 @@
/****************************************************************************
* arch/z16/src/z16f/z16f_serial.c
*
- * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2008-2009, 2012, 2014 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -129,12 +129,18 @@ static const struct uart_ops_s g_uart_ops =
/* I/O buffers */
+#ifdef CONFIG_Z16F_UART0
static char g_uart0rxbuffer[CONFIG_UART0_RXBUFSIZE];
static char g_uart0txbuffer[CONFIG_UART0_TXBUFSIZE];
+#endif
+
+#ifdef CONFIG_Z16F_UART1
static char g_uart1rxbuffer[CONFIG_UART1_RXBUFSIZE];
static char g_uart1txbuffer[CONFIG_UART1_TXBUFSIZE];
+#endif
-/* This describes the state of the DM320 uart0 port. */
+#ifdef CONFIG_Z16F_UART0
+/* This describes the state of the ZNEO uart0 port. */
static struct z16f_uart_s g_uart0priv =
{
@@ -178,8 +184,10 @@ static uart_dev_t g_uart0port =
&g_uart_ops, /* ops */
&g_uart0priv, /* priv */
};
+#endif
-/* This describes the state of the DM320 uart1 port. */
+#ifdef CONFIG_Z16F_UART1
+/* This describes the state of the ZNEO uart1 port. */
static struct z16f_uart_s g_uart1priv =
{
@@ -223,17 +231,47 @@ static uart_dev_t g_uart1port =
&g_uart_ops, /* ops */
&g_uart1priv, /* priv */
};
+#endif
/* Now, which one with be tty0/console and which tty1? */
-#ifdef CONFIG_UART1_SERIAL_CONSOLE
-# define CONSOLE_DEV g_uart1port
-# define TTYS0_DEV g_uart1port
-# define TTYS1_DEV g_uart0port
+#ifndef CONFIG_Z16F_UART0
+# undef CONFIG_UART0_SERIAL_CONSOLE
+#endif
+
+#ifndef CONFIG_Z16F_UART1
+# undef CONFIG_UART1_SERIAL_CONSOLE
+#endif
+
+/* First pick the console and ttys0. This could be either of UART0-1 */
+
+#if defined(CONFIG_UART0_SERIAL_CONSOLE)
+# define CONSOLE_DEV g_uart0port /* UART0 is console */
+# define TTYS0_DEV g_uart0port /* UART0 is ttyS0 */
+# define UART0_ASSIGNED 1
+#elif defined(CONFIG_UART1_SERIAL_CONSOLE)
+# define CONSOLE_DEV g_uart1port /* UART1 is console */
+# define TTYS0_DEV g_uart1port /* UART1 is ttyS0 */
+# define UART1_ASSIGNED 1
#else
-# define CONSOLE_DEV g_uart0port
-# define TTYS0_DEV g_uart0port
-# define TTYS1_DEV g_uart1port
+# undef CONSOLE_DEV /* No console */
+# if defined(CONFIG_KINETIS_UART0)
+# define TTYS0_DEV g_uart0port /* UART0 is ttyS0 */
+# define UART0_ASSIGNED 1
+# elif defined(CONFIG_KINETIS_UART1)
+# define TTYS0_DEV g_uart1port /* UART1 is ttyS0 */
+# define UART1_ASSIGNED 1
+# endif
+#endif
+
+/* Pick ttys1. This could be either of UART0-1 excluding the console UART. */
+
+#if defined(CONFIG_KINETIS_UART0) && !defined(UART0_ASSIGNED)
+# define TTYS1_DEV g_uart0port /* UART0 is ttyS1 */
+# define UART0_ASSIGNED 1
+#elif defined(CONFIG_KINETIS_UART1) && !defined(UART1_ASSIGNED)
+# define TTYS1_DEV g_uart1port /* UART1 is ttyS1 */
+# define UART1_ASSIGNED 1
#endif
/****************************************************************************
@@ -277,6 +315,7 @@ static void z16f_restoreuartirq(struct uart_dev_s *dev, uint8_t state)
* Name: z16f_consoleput
****************************************************************************/
+#ifdef CONSOLE_DEV
static void z16f_consoleput(uint8_t ch)
{
struct z16f_uart_s *priv = (struct z16f_uart_s*)CONSOLE_DEV.priv;
@@ -292,6 +331,7 @@ static void z16f_consoleput(uint8_t ch)
putreg8(ch, priv->uartbase + Z16F_UART_TXD);
}
+#endif
/****************************************************************************
* Name: z16f_setup
@@ -434,14 +474,19 @@ static int z16f_rxinterrupt(int irq, void *context)
struct z16f_uart_s *priv;
uint8_t status;
+#ifdef CONFIG_Z16F_UART1
if (g_uart1priv.rxirq == irq)
{
dev = &g_uart1port;
}
- else if (g_uart0priv.rxirq == irq)
+ else
+#endif
+#ifdef CONFIG_Z16F_UART0
+ if (g_uart0priv.rxirq == irq)
{
dev = &g_uart0port;
}
+#endif
else
{
PANIC();
@@ -483,14 +528,19 @@ static int z16f_txinterrupt(int irq, void *context)
struct z16f_uart_s *priv;
uint8_t status;
+#ifdef CONFIG_Z16F_UART1
if (g_uart1priv.txirq == irq)
{
dev = &g_uart1port;
}
- else if (g_uart0priv.txirq == irq)
+ else
+#endif
+#ifdef CONFIG_Z16F_UART0
+ if (g_uart0priv.txirq == irq)
{
dev = &g_uart0port;
}
+#endif
else
{
PANIC();
@@ -682,11 +732,17 @@ void up_earlyserialinit(void)
{
/* REVISIT: UART GPIO AFL register is not initialized */
+#ifdef TTYS0_DEV
(void)z16f_disableuartirq(&TTYS0_DEV);
+#endif
+#ifdef TTYS1_DEV
(void)z16f_disableuartirq(&TTYS1_DEV);
+#endif
+#ifdef CONSOLE_DEV
CONSOLE_DEV.isconsole = true;
z16f_setup(&CONSOLE_DEV);
+#endif
}
/****************************************************************************
@@ -700,9 +756,15 @@ void up_earlyserialinit(void)
void up_serialinit(void)
{
+#ifdef CONSOLE_DEV
(void)uart_register("/dev/console", &CONSOLE_DEV);
+#endif
+#ifdef TTYS0_DEV
(void)uart_register("/dev/ttyS0", &TTYS0_DEV);
+#endif
+#ifdef TTYS1_DEV
(void)uart_register("/dev/ttyS1", &TTYS1_DEV);
+#endif
}
/****************************************************************************
@@ -713,6 +775,7 @@ void up_serialinit(void)
*
****************************************************************************/
+#ifdef CONSOLE_DEV
int up_putc(int ch)
{
uint8_t state;
@@ -744,6 +807,7 @@ int up_putc(int ch)
z16f_restoreuartirq(&CONSOLE_DEV, state);
return ch;
}
+#endif
#else /* USE_SERIALDRIVER */