diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2014-01-22 11:50:37 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2014-01-22 11:50:37 -0600 |
commit | a63cf27d1fd4cd630244783a8c892021c41e1e19 (patch) | |
tree | 9c0b7588b30d58b825ae6ef982dbc44d71c21674 /nuttx/arch/z16 | |
parent | ad896536097c687b2933a9c0417f9b49ec9930c4 (diff) | |
download | nuttx-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/Kconfig | 4 | ||||
-rw-r--r-- | nuttx/arch/z16/src/z16f/chip.h | 16 | ||||
-rwxr-xr-x | nuttx/arch/z16/src/z16f/z16f_lowuart.S | 128 | ||||
-rw-r--r-- | nuttx/arch/z16/src/z16f/z16f_serial.c | 88 |
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 */ |