[PATCH 4/4] Initial support for Nuttx on TI Calypso platform
l--putt
ichgeh at l--putt.de
Tue May 24 23:06:41 CEST 2011
>From 5740d42bda68bb8deef495aa01592c846a121e32 Mon Sep 17 00:00:00 2001
From: Stefan Richter <ichgeh at l--putt.de>
Date: Tue, 24 May 2011 21:19:17 +0200
Subject: [PATCH 4/4] Initial support for Nuttx on TI Calypso platform:
Memory initialization
Switch lights in ostest example
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