[PATCH 4/4] Initial support for Nuttx on TI Calypso platform: Memory initialization Switch lights in ostest example

Stefan Richter ichgeh at l--putt.de
Tue May 24 19:19:17 UTC 2011


Now, nuttx.bin should build and run on your phone. No console output yet but
turns on backlight of compal E99 and off when ostest has finished.
---
 apps/examples/ostest/main.c               |   50 ++++++++++++++++++
 nuttx/arch/arm/src/calypso/calypso_heap.c |   81
+++++++++++++++++++++++++++++
 nuttx/arch/arm/src/common/up_internal.h   |    3 +-
 3 files changed, 133 insertions(+), 1 deletions(-)
 create mode 100644 nuttx/arch/arm/src/calypso/calypso_heap.c

diff --git a/apps/examples/ostest/main.c b/apps/examples/ostest/main.c
index 327ec60..641c3c9 100644
--- a/apps/examples/ostest/main.c
+++ b/apps/examples/ostest/main.c
@@ -33,6 +33,53 @@
  *

****************************************************************************/

+/*
+ * Debug stuff for Compal E99
+ * taken from Osmocom-BB init.c
+ *
+ * Turn on backlight on entry and off when done
+ */
+
+#include <stdint.h>
+#include <arch/calypso/memory.h>
+
+#define ARMIO_LATCH_OUT 0xfffe4802
+#define IO_CNTL_REG	0xfffe4804
+#define ASIC_CONF_REG	0xfffef008
+
+static void lights_on(void)
+{
+	uint16_t reg;
+
+	reg = readw(ASIC_CONF_REG);
+	/* LCD Set I/O(3) / SA0 to I/O(3) mode */
+	reg &= ~( (1 << 12) | (1 << 10) | (1 << 7) | (1 << 1)) ;
+	/* don't set function pins to I2C Mode, C155 uses UWire */
+	/* TWL3025: Set SPI+RIF RX clock to rising edge */
+	reg |= (1 << 13) | (1 << 14);
+	writew(reg, ASIC_CONF_REG);
+
+	/* LCD Set I/O(3) to output mode and enable C155 backlight (IO1) */
+	/* FIXME: Put the display backlight control to backlight.c */
+	reg = readw(IO_CNTL_REG);
+	reg &= ~( (1 << 3) | (1 << 1));
+	writew(reg, IO_CNTL_REG);
+
+	/* LCD Set I/O(3) output low */
+	reg = readw(ARMIO_LATCH_OUT);
+	reg &= ~(1 << 3);
+	reg |= (1 << 1);
+	writew(reg, ARMIO_LATCH_OUT);
+}
+
+static void lights_off(void)
+{
+	uint16_t reg;
+	reg = readw(ARMIO_LATCH_OUT);
+	reg &= ~(1 << 1);
+	writew(reg, ARMIO_LATCH_OUT);
+}
+
 /****************************************************************************
  * Included Files

****************************************************************************/
@@ -421,6 +468,7 @@ static int user_main(int argc, char *argv[])
 #endif
     }
   printf("user_main: Exitting\n");
+  lights_off();
   return 0;
 }

@@ -457,6 +505,8 @@ int user_start(int argc, char *argv[])
 {
   int result;

+  lights_on();
+
   /* Verify that stdio works first */

   stdio_test();
diff --git a/nuttx/arch/arm/src/calypso/calypso_heap.c
b/nuttx/arch/arm/src/calypso/calypso_heap.c
new file mode 100644
index 0000000..d35a76f
--- /dev/null
+++ b/nuttx/arch/arm/src/calypso/calypso_heap.c
@@ -0,0 +1,81 @@
+/****************************************************************************
+ * calypso_heap.c
+ * Initialize memory interfaces of Calypso MCU
+ *
+ *   Copyright (C) 2011 Stefan Richter <ichgeh at l--putt.de>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+
****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+
+#include <nuttx/arch.h>
+#include <arch/board/board.h>
+
+#include <arch/calypso/clock.h>
+#include <arch/calypso/timer.h>
+
+#include "up_arch.h"
+#include "up_internal.h"
+
+/****************************************************************************
+ * Name: up_addregion
+ *
+ * Description:
+ *   This function is called right after basics are initialized and right
+ *   before IRQ system setup.
+ *
+
****************************************************************************/
+
+void up_addregion(void)
+{
+	/* Disable watchdog in first non-common function */
+	wdog_enable(0);
+
+	// XXX: change to initialization of extern memory with save defaults
+	/* Configure memory interface */
+	calypso_mem_cfg(CALYPSO_nCS0, 3, CALYPSO_MEM_16bit, 1);
+	calypso_mem_cfg(CALYPSO_nCS1, 3, CALYPSO_MEM_16bit, 1);
+	calypso_mem_cfg(CALYPSO_nCS2, 5, CALYPSO_MEM_16bit, 1);
+	calypso_mem_cfg(CALYPSO_nCS3, 5, CALYPSO_MEM_16bit, 1);
+	calypso_mem_cfg(CALYPSO_CS4, 0, CALYPSO_MEM_8bit, 1);
+	calypso_mem_cfg(CALYPSO_nCS6, 0, CALYPSO_MEM_32bit, 1);
+	calypso_mem_cfg(CALYPSO_nCS7, 0, CALYPSO_MEM_32bit, 0);
+
+	/* Set VTCXO_DIV2 = 1, configure PLL for 104 MHz and give ARM half of
that */
+	calypso_clock_set(2, CALYPSO_PLL13_104_MHZ, ARM_MCLK_DIV_2);
+
+	/* Configure the RHEA bridge with some sane default values */
+	calypso_rhea_cfg(0, 0, 0xff, 0, 1, 0, 0);
+}
diff --git a/nuttx/arch/arm/src/common/up_internal.h
b/nuttx/arch/arm/src/common/up_internal.h
index 803a656..21c34e2 100644
--- a/nuttx/arch/arm/src/common/up_internal.h
+++ b/nuttx/arch/arm/src/common/up_internal.h
@@ -64,9 +64,10 @@
 #if CONFIG_NFILE_DESCRIPTORS == 0 || defined(CONFIG_DEV_LOWCONSOLE)
 #  undef CONFIG_USE_SERIALDRIVER
 #  undef CONFIG_USE_EARLYSERIALINIT
+
 #elif defined(CONFIG_DEV_CONSOLE) && CONFIG_NFILE_DESCRIPTORS > 0
 #  define CONFIG_USE_SERIALDRIVER 1
-#  define CONFIG_USE_EARLYSERIALINIT 1
+#  undef CONFIG_USE_EARLYSERIALINIT
 #endif

 /* Check if an interrupt stack size is configured */
-- 
1.7.1





More information about the baseband-devel mailing list