mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 00:14:22 +08:00
Progress of LPC43xx build environment
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4904 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
+340
-167
File diff suppressed because it is too large
Load Diff
@@ -129,27 +129,51 @@
|
|||||||
#define BOARD_FLASHCFG_VALUE 0x0000303a
|
#define BOARD_FLASHCFG_VALUE 0x0000303a
|
||||||
|
|
||||||
/* LED definitions *********************************************************/
|
/* LED definitions *********************************************************/
|
||||||
/* The Lincoln 80 has 2 LEDs along the bottom of the board. Green or off.
|
/* The LPC4330-Xplorer has 2 user-controllable LEDs labeled D2 an D3 in the
|
||||||
* If CONFIG_ARCH_LEDS is defined, the LEDs will be controlled as follows
|
* schematic and on but referred to has LED1 and LED2 here, respectively.
|
||||||
* for NuttX debug functionality (where NC means "No Change").
|
|
||||||
*
|
*
|
||||||
* During the boot phases. LED1 and LED2 will show boot status.
|
* LED1 D2 GPIO1[12]
|
||||||
|
* LED2 D3 GPIO1[11]
|
||||||
|
*
|
||||||
|
* LEDs are pulled high to a low output illuminates the LED.
|
||||||
|
*
|
||||||
|
* LED index values for use with lpc43_setled()
|
||||||
*/
|
*/
|
||||||
/* LED1 LED2 */
|
|
||||||
#define LED_STARTED 0 /* OFF OFF */
|
#define BOARD_LED1 0
|
||||||
#define LED_HEAPALLOCATE 1 /* GREEN OFF */
|
#define BOARD_LED2 1
|
||||||
#define LED_IRQSENABLED 2 /* OFF GREEN */
|
#define BOARD_NLEDS 2
|
||||||
#define LED_STACKCREATED 3 /* OFF OFF */
|
|
||||||
|
/* LED bits for use with lpc43_setleds() */
|
||||||
|
|
||||||
|
#define BOARD_LED1_BIT (1 << BOARD_LED1)
|
||||||
|
#define BOARD_LED2_BIT (1 << BOARD_LED2)
|
||||||
|
|
||||||
|
/* If CONFIG_ARCH_LEDS is defined, the LEDs will be controlled as follows
|
||||||
|
* for NuttX debug functionality (where NC means "No Change"). If
|
||||||
|
* CONFIG_ARCH_LEDS is not defined, then the LEDs are completely under
|
||||||
|
* control of the application. The following interfaces are then available
|
||||||
|
* for application control of the LEDs:
|
||||||
|
*
|
||||||
|
* void lpc43_ledinit(void);
|
||||||
|
* void lpc43_setled(int led, bool ledon);
|
||||||
|
* void lpc43_setleds(uint8_t ledset);
|
||||||
|
*/
|
||||||
|
/* ON OFF */
|
||||||
|
/* LED1 LED2 LED1 LED2 */
|
||||||
|
#define LED_STARTED 0 /* OFF OFF - - */
|
||||||
|
#define LED_HEAPALLOCATE 1 /* ON OFF - - */
|
||||||
|
#define LED_IRQSENABLED 1 /* ON OFF - - */
|
||||||
|
#define LED_STACKCREATED 1 /* ON OFF - - */
|
||||||
|
#define LED_INIRQ 2 /* NC ON NC OFF */
|
||||||
|
#define LED_SIGNAL 2 /* NC ON NC OFF */
|
||||||
|
#define LED_ASSERTION 2 /* NC ON NC OFF */
|
||||||
|
#define LED_PANIC 2 /* NC ON NC OFF */
|
||||||
|
|
||||||
/* After the system is booted, this logic will no longer use LEDs 1 & 2.
|
/* After the system is booted, this logic will no longer use LEDs 1 & 2.
|
||||||
* They are available for use the application software using lpc43_led
|
* They are available for use the application software using lpc43_led
|
||||||
* (prototyped below)
|
* (prototyped below)
|
||||||
*/
|
*/
|
||||||
/* LED1 LED2 LED3 LED4 */
|
|
||||||
#define LED_INIRQ 4 /* NC NC NC ON (momentary) */
|
|
||||||
#define LED_SIGNAL 5 /* NC NC NC ON (momentary) */
|
|
||||||
#define LED_ASSERTION 6 /* NC NC NC ON (momentary) */
|
|
||||||
#define LED_PANIC 7 /* NC NC NC ON (1Hz flashing) */
|
|
||||||
|
|
||||||
#define GPIO_SSP0_SCK GPIO_SSP0_SCK_1
|
#define GPIO_SSP0_SCK GPIO_SSP0_SCK_1
|
||||||
#define GPIO_SSP0_SSEL GPIO_SSP0_SSEL_1
|
#define GPIO_SSP0_SSEL GPIO_SSP0_SSEL_1
|
||||||
@@ -201,16 +225,20 @@ extern "C" {
|
|||||||
|
|
||||||
EXTERN void lpc43_boardinitialize(void);
|
EXTERN void lpc43_boardinitialize(void);
|
||||||
|
|
||||||
/****************************************************************************
|
/*****************************************************************************
|
||||||
* Name: lpc43_led
|
* Name: lpc43_ledinit, lpc43_setled, and lpc43_setleds
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* Once the system has booted, these functions can be used to control LEDs 1 & 2
|
* If CONFIG_ARCH_LEDS is defined, then NuttX will control the on-board
|
||||||
|
* LEDs. If CONFIG_ARCH_LEDS is not defined, then the following interfaces
|
||||||
|
* are available to control the LEDs from user applications.
|
||||||
*
|
*
|
||||||
************************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_LEDS
|
#ifndef CONFIG_ARCH_LEDS
|
||||||
EXTERN void lpc43_led(int lednum, int state);
|
EXTERN void lpc43_ledinit(void);
|
||||||
|
EXTERN void lpc43_setled(int led, bool ledon);
|
||||||
|
EXTERN void lpc43_setleds(uint8_t ledset);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef EXTERN
|
#undef EXTERN
|
||||||
|
|||||||
@@ -40,15 +40,39 @@ include ${TOPDIR}/.config
|
|||||||
ifeq ($(CONFIG_LPC43_CODESOURCERYW),y)
|
ifeq ($(CONFIG_LPC43_CODESOURCERYW),y)
|
||||||
# CodeSourcery under Windows
|
# CodeSourcery under Windows
|
||||||
CROSSDEV = arm-none-eabi-
|
CROSSDEV = arm-none-eabi-
|
||||||
|
ARCROSSDEV = arm-none-eabi-
|
||||||
WINTOOL = y
|
WINTOOL = y
|
||||||
ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -mfloat-abi=soft
|
ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -mfloat-abi=soft
|
||||||
endif
|
endif
|
||||||
ifeq ($(CONFIG_LPC43_CODESOURCERYL),y)
|
ifeq ($(CONFIG_LPC43_CODESOURCERYL),y)
|
||||||
# CodeSourcery under Linux
|
# CodeSourcery under Linux
|
||||||
CROSSDEV = arm-none-eabi-
|
CROSSDEV = arm-none-eabi-
|
||||||
|
ARCROSSDEV = arm-none-eabi-
|
||||||
ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -mfloat-abi=soft
|
ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -mfloat-abi=soft
|
||||||
MAXOPTIMIZATION = -O2
|
MAXOPTIMIZATION = -O2
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(CONFIG_LPC43_ATOLLIC_LITE),y)
|
||||||
|
# Atollic toolchain under Windows
|
||||||
|
CROSSDEV = arm-atollic-eabi-
|
||||||
|
ARCROSSDEV =
|
||||||
|
WINTOOL = y
|
||||||
|
ifeq ($(CONFIG_ARCH_FPU),y)
|
||||||
|
ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
||||||
|
else
|
||||||
|
ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(CONFIG_LPC43_ATOLLIC_PRO),y)
|
||||||
|
# Atollic toolchain under Windows
|
||||||
|
CROSSDEV = arm-atollic-eabi-
|
||||||
|
ARCROSSDEV = arm-atollic-eabi-
|
||||||
|
WINTOOL = y
|
||||||
|
ifeq ($(CONFIG_ARCH_FPU),y)
|
||||||
|
ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
||||||
|
else
|
||||||
|
ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft
|
||||||
|
endif
|
||||||
|
endif
|
||||||
ifeq ($(CONFIG_LPC43_DEVKITARM),y)
|
ifeq ($(CONFIG_LPC43_DEVKITARM),y)
|
||||||
# devkitARM under Windows
|
# devkitARM under Windows
|
||||||
CROSSDEV = arm-eabi-
|
CROSSDEV = arm-eabi-
|
||||||
@@ -58,6 +82,7 @@ endif
|
|||||||
ifeq ($(CONFIG_LPC43_BUILDROOT),y)
|
ifeq ($(CONFIG_LPC43_BUILDROOT),y)
|
||||||
# NuttX buildroot under Linux or Cygwin
|
# NuttX buildroot under Linux or Cygwin
|
||||||
CROSSDEV = arm-elf-
|
CROSSDEV = arm-elf-
|
||||||
|
ARCROSSDEV = arm-elf-
|
||||||
ARCHCPUFLAGS = -mtune=cortex-m4 -march=armv7-m -mfloat-abi=soft
|
ARCHCPUFLAGS = -mtune=cortex-m4 -march=armv7-m -mfloat-abi=soft
|
||||||
MAXOPTIMIZATION = -Os
|
MAXOPTIMIZATION = -Os
|
||||||
endif
|
endif
|
||||||
@@ -69,22 +94,22 @@ ifeq ($(WINTOOL),y)
|
|||||||
MKDEP = $(TOPDIR)/tools/mknulldeps.sh
|
MKDEP = $(TOPDIR)/tools/mknulldeps.sh
|
||||||
ARCHINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}"
|
ARCHINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}"
|
||||||
ARCHXXINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}" -isystem "${shell cygpath -w $(TOPDIR)/include/cxx}"
|
ARCHXXINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}" -isystem "${shell cygpath -w $(TOPDIR)/include/cxx}"
|
||||||
ARCHSCRIPT = -T "${shell cygpath -w $(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/scripts/ld.script}"
|
ARCHSCRIPT = -T "${shell cygpath -w $(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/scripts/ramconfig.ld}"
|
||||||
MAXOPTIMIZATION = -O2
|
MAXOPTIMIZATION = -O2
|
||||||
else
|
else
|
||||||
# Linux/Cygwin-native toolchain
|
# Linux/Cygwin-native toolchain
|
||||||
MKDEP = $(TOPDIR)/tools/mkdeps.sh
|
MKDEP = $(TOPDIR)/tools/mkdeps.sh
|
||||||
ARCHINCLUDES = -I. -isystem $(TOPDIR)/include
|
ARCHINCLUDES = -I. -isystem $(TOPDIR)/include
|
||||||
ARCHXXINCLUDES = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
|
ARCHXXINCLUDES = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
|
||||||
ARCHSCRIPT = -T$(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/scripts/ld.script
|
ARCHSCRIPT = -T$(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/scripts/ramconfig.ld
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CC = $(CROSSDEV)gcc
|
CC = $(CROSSDEV)gcc
|
||||||
CXX = $(CROSSDEV)g++
|
CXX = $(CROSSDEV)g++
|
||||||
CPP = $(CROSSDEV)gcc -E
|
CPP = $(CROSSDEV)gcc -E
|
||||||
LD = $(CROSSDEV)ld
|
LD = $(CROSSDEV)ld
|
||||||
AR = $(CROSSDEV)ar rcs
|
AR = $(ARCROSSDEV)ar rcs
|
||||||
NM = $(CROSSDEV)nm
|
NM = $(ARCROSSDEV)nm
|
||||||
OBJCOPY = $(CROSSDEV)objcopy
|
OBJCOPY = $(CROSSDEV)objcopy
|
||||||
OBJDUMP = $(CROSSDEV)objdump
|
OBJDUMP = $(CROSSDEV)objdump
|
||||||
|
|
||||||
@@ -98,7 +123,7 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ARCHCFLAGS = -fno-builtin
|
ARCHCFLAGS = -fno-builtin
|
||||||
ARCHCXXFLAGS = -fno-builtin -fno-exceptions
|
ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fno-rtti
|
||||||
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow
|
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow
|
||||||
ARCHWARNINGSXX = -Wall -Wshadow
|
ARCHWARNINGSXX = -Wall -Wshadow
|
||||||
ARCHDEFINES =
|
ARCHDEFINES =
|
||||||
|
|||||||
@@ -52,7 +52,9 @@
|
|||||||
# CONFIG_DRAM_SIZE - Describes the installed DRAM.
|
# CONFIG_DRAM_SIZE - Describes the installed DRAM.
|
||||||
# CONFIG_DRAM_START - The start address of DRAM (physical)
|
# CONFIG_DRAM_START - The start address of DRAM (physical)
|
||||||
# CONFIG_DRAM_END - Last address+1 of installed RAM
|
# CONFIG_DRAM_END - Last address+1 of installed RAM
|
||||||
# CONFIG_ARCH_IRQPRIO - The ST32F103Z supports interrupt prioritization
|
# CONFIG_ARCH_IRQPRIO - The Cortex-M4 supports interrupt prioritization
|
||||||
|
# CONFIG_ARCH_FPU - The Cortex-M4 supports a floating point unit (FPU)
|
||||||
|
# (But, unfortunately, most versions of GCC do not support it).
|
||||||
# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
|
# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
|
||||||
# stack. If defined, this symbol is the size of the interrupt
|
# stack. If defined, this symbol is the size of the interrupt
|
||||||
# stack in bytes. If not defined, the user task stacks will be
|
# stack in bytes. If not defined, the user task stacks will be
|
||||||
@@ -68,6 +70,9 @@
|
|||||||
# the 100 second delay then adjust CONFIG_BOARD_LOOPSPERMSEC until
|
# the 100 second delay then adjust CONFIG_BOARD_LOOPSPERMSEC until
|
||||||
# the delay actually is 100 seconds.
|
# the delay actually is 100 seconds.
|
||||||
# CONFIG_ARCH_DMA - Support DMA initialization
|
# CONFIG_ARCH_DMA - Support DMA initialization
|
||||||
|
# CONFIG_ARMV7M_CMNVECTOR - This must be defined to indicate that the
|
||||||
|
# LPC43xx port using the ARMv7 common vector logic. There are two
|
||||||
|
# variants
|
||||||
#
|
#
|
||||||
CONFIG_ARCH=arm
|
CONFIG_ARCH=arm
|
||||||
CONFIG_ARCH_ARM=y
|
CONFIG_ARCH_ARM=y
|
||||||
@@ -81,6 +86,7 @@ CONFIG_DRAM_SIZE=(128*1024)
|
|||||||
CONFIG_DRAM_START=0x10000000
|
CONFIG_DRAM_START=0x10000000
|
||||||
CONFIG_DRAM_END=(CONFIG_DRAM_START+CONFIG_DRAM_SIZE)
|
CONFIG_DRAM_END=(CONFIG_DRAM_START+CONFIG_DRAM_SIZE)
|
||||||
CONFIG_ARCH_IRQPRIO=y
|
CONFIG_ARCH_IRQPRIO=y
|
||||||
|
CONFIG_ARCH_FPU=n
|
||||||
CONFIG_ARCH_INTERRUPTSTACK=n
|
CONFIG_ARCH_INTERRUPTSTACK=n
|
||||||
CONFIG_ARCH_STACKDUMP=y
|
CONFIG_ARCH_STACKDUMP=y
|
||||||
CONFIG_ARCH_BOOTLOADER=n
|
CONFIG_ARCH_BOOTLOADER=n
|
||||||
@@ -92,8 +98,10 @@ CONFIG_ARCH_DMA=n
|
|||||||
#
|
#
|
||||||
# Identify toolchain and linker options
|
# Identify toolchain and linker options
|
||||||
#
|
#
|
||||||
CONFIG_LPC43_CODESOURCERYW=n
|
CONFIG_LPC43_CODESOURCERYW=y
|
||||||
CONFIG_LPC43_CODESOURCERYL=y
|
CONFIG_LPC43_CODESOURCERYL=n
|
||||||
|
CONFIG_LPC43_ATOLLIC_LITE=n
|
||||||
|
CONFIG_LPC43_ATOLLIC_PRO=n
|
||||||
CONFIG_LPC43_DEVKITARM=n
|
CONFIG_LPC43_DEVKITARM=n
|
||||||
CONFIG_LPC43_BUILDROOT=n
|
CONFIG_LPC43_BUILDROOT=n
|
||||||
|
|
||||||
|
|||||||
@@ -47,12 +47,24 @@ if [ -z "${PATH_ORIG}" ]; then
|
|||||||
export PATH_ORIG="${PATH}"
|
export PATH_ORIG="${PATH}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# TOOLCHAIN_BIN must be defined to the full path to the location where you
|
# This the Cygwin path to the location where I installed the CodeSourcery
|
||||||
# have installed the toolchain of your choice. Modify the following:
|
# toolchain under windows. You will also have to edit this if you install
|
||||||
|
# the CodeSourcery toolchain in any other location
|
||||||
|
export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery G++ Lite/bin"
|
||||||
|
|
||||||
export TOOLCHAIN_BIN="${WD}/../buildroot/build_arm_nofpu/staging_dir/bin"
|
# These are the Cygwin paths to the locations where I installed the Atollic
|
||||||
|
# toolchain under windows. You will also have to edit this if you install
|
||||||
|
# the Atollic toolchain in any other location. /usr/bin is added before
|
||||||
|
# the Atollic bin path because there is are binaries named gcc.exe and g++.exe
|
||||||
|
# at those locations as well.
|
||||||
|
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for ARM Pro 2.3.0/ARMTools/bin"
|
||||||
|
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for STMicroelectronics STM32 Lite 2.3.0/ARMTools/bin"
|
||||||
|
|
||||||
# Andd add the toolchain path to the PATH variable
|
# This the Cygwin path to the location where I build the buildroot
|
||||||
|
# toolchain.
|
||||||
|
#export TOOLCHAIN_BIN="${WD}/../misc/buildroot/build_arm_nofpu/staging_dir/bin"
|
||||||
|
|
||||||
|
# Andd add the selected toolchain path to the PATH variable
|
||||||
|
|
||||||
export PATH="${TOOLCHAIN_BIN}:/sbin:/usr/sbin:${PATH_ORIG}"
|
export PATH="${TOOLCHAIN_BIN}:/sbin:/usr/sbin:${PATH_ORIG}"
|
||||||
echo "PATH : ${PATH}"
|
echo "PATH : ${PATH}"
|
||||||
|
|||||||
@@ -0,0 +1,122 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* configs/lpc4330-xplorer/scripts/ramconfig.ld
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* The LPC4330 on the LPC4330-Xplorer has the following memory resources:
|
||||||
|
*
|
||||||
|
* 1. 4096Kb of SPIFI FLASH beginning at address 0x1400:0000
|
||||||
|
* 2. 264KB of total SRAM:
|
||||||
|
* a. 128KB of SRAM in the CPU block beginning at address 0x1000:0000
|
||||||
|
* b. 72KB beginning at address 0x1008:0000 and
|
||||||
|
* c. 64KB of AHB SRAM in three banks beginning at addresses 0x2000:0000,
|
||||||
|
* 0x2000:8000 and 0x2000:C000.
|
||||||
|
*
|
||||||
|
* Here we assume that:
|
||||||
|
*
|
||||||
|
* 1. We will be running out of SRAM at 0x1000:0000, and
|
||||||
|
* 2. All .data and .bss will all fit into the 72KB SRAM block.
|
||||||
|
*
|
||||||
|
* NOTE: That initialized data is kept in the program memory SRAM and copied
|
||||||
|
* to .data SRAM. This is wasteful and unnecessary but provides a good test
|
||||||
|
* for future, FLASH-resident code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
progmem (rx) : ORIGIN = 0x10000000, LENGTH = 128K
|
||||||
|
datamem (rwx) : ORIGIN = 0x10080000, LENGTH = 72K
|
||||||
|
}
|
||||||
|
|
||||||
|
OUTPUT_ARCH(arm)
|
||||||
|
ENTRY(__start) /* Treat __start as the anchor for dead code stripping */
|
||||||
|
EXTERN(_vectors) /* Force the vectors to be included in the output */
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text : {
|
||||||
|
_stext = ABSOLUTE(.);
|
||||||
|
*(.vectors)
|
||||||
|
*(.text .text.*)
|
||||||
|
*(.fixup)
|
||||||
|
*(.gnu.warning)
|
||||||
|
*(.rodata .rodata.*)
|
||||||
|
*(.gnu.linkonce.t.*)
|
||||||
|
*(.glue_7)
|
||||||
|
*(.glue_7t)
|
||||||
|
*(.got)
|
||||||
|
*(.gcc_except_table)
|
||||||
|
*(.gnu.linkonce.r.*)
|
||||||
|
_etext = ABSOLUTE(.);
|
||||||
|
} > progmem
|
||||||
|
|
||||||
|
_eronly = ABSOLUTE(.); /* See below */
|
||||||
|
|
||||||
|
.data : {
|
||||||
|
_sdata = ABSOLUTE(.);
|
||||||
|
*(.data .data.*)
|
||||||
|
*(.gnu.linkonce.d.*)
|
||||||
|
CONSTRUCTORS
|
||||||
|
_edata = ABSOLUTE(.);
|
||||||
|
} > datamem AT > progmem
|
||||||
|
|
||||||
|
.ARM.extab : {
|
||||||
|
*(.ARM.extab*)
|
||||||
|
} >datamem
|
||||||
|
|
||||||
|
.ARM.exidx : {
|
||||||
|
__exidx_start = ABSOLUTE(.);
|
||||||
|
*(.ARM.exidx*)
|
||||||
|
__exidx_end = ABSOLUTE(.);
|
||||||
|
} >datamem
|
||||||
|
|
||||||
|
.bss : { /* BSS */
|
||||||
|
_sbss = ABSOLUTE(.);
|
||||||
|
*(.bss .bss.*)
|
||||||
|
*(.gnu.linkonce.b.*)
|
||||||
|
*(COMMON)
|
||||||
|
_ebss = ABSOLUTE(.);
|
||||||
|
} > datamem
|
||||||
|
/* Stabs debugging sections. */
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
.stab.excl 0 : { *(.stab.excl) }
|
||||||
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||||
|
.stab.index 0 : { *(.stab.index) }
|
||||||
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||||
|
.comment 0 : { *(.comment) }
|
||||||
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||||
|
.debug_info 0 : { *(.debug_info) }
|
||||||
|
.debug_line 0 : { *(.debug_line) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
}
|
||||||
+23
-15
@@ -1,5 +1,5 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* configs/lpc4330-xplorer/scripts/ld.script
|
* configs/lpc4330-xplorer/scripts/spiconfig.ld
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
||||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
@@ -33,22 +33,30 @@
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/* The LPC4330 on the LPC4330-Xplorer has 4096Kb of SPIFI FLASH beginning at
|
/* The LPC4330 on the LPC4330-Xplorer has the following memory resources:
|
||||||
* address 0x1400:0000 and 264K of total SRAM: 128Kb of SRAM in the CPU block
|
*
|
||||||
* beginning at address 0x1000:0000, 72Kb beginning at address 0x1008:0000 and
|
* 1. 4096Kb of SPIFI FLASH beginning at address 0x1400:0000
|
||||||
* 64Kb of AHB SRAM in three banks beginning at addresses 0x2000:0000,
|
* 2. 264KB of total SRAM:
|
||||||
* 0x2000:8000 and 0x2000:C000. Here we assume that .data and .bss will all
|
* a. 128KB of SRAM in the CPU block beginning at address 0x1000:0000
|
||||||
* fit into the 128Kb CPU SRAM address range.
|
* b. 72KB beginning at address 0x1008:0000 and
|
||||||
|
* c. 64KB of AHB SRAM in three banks beginning at addresses 0x2000:0000,
|
||||||
|
* 0x2000:8000 and 0x2000:C000.
|
||||||
|
*
|
||||||
|
* Here we assume that:
|
||||||
|
*
|
||||||
|
* 1. We will be running out of SPIFI flash at 0x1400:0000, and
|
||||||
|
* 2. All .data and .bss will all fit into the 128KB CPU SRAM block.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
flash (rx) : ORIGIN = 0x1c000000, LENGTH = 1024K
|
progmem (rx) : ORIGIN = 0x14000000, LENGTH = 1024K
|
||||||
sram (rwx) : ORIGIN = 0x10000000, LENGTH = 96K
|
datamem (rwx) : ORIGIN = 0x10000000, LENGTH = 128K
|
||||||
}
|
}
|
||||||
|
|
||||||
OUTPUT_ARCH(arm)
|
OUTPUT_ARCH(arm)
|
||||||
ENTRY(_stext)
|
ENTRY(__start) /* Treat __start as the anchor for dead code stripping */
|
||||||
|
EXTERN(_vectors) /* Force the vectors to be included in the output */
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
.text : {
|
.text : {
|
||||||
@@ -65,7 +73,7 @@ SECTIONS
|
|||||||
*(.gcc_except_table)
|
*(.gcc_except_table)
|
||||||
*(.gnu.linkonce.r.*)
|
*(.gnu.linkonce.r.*)
|
||||||
_etext = ABSOLUTE(.);
|
_etext = ABSOLUTE(.);
|
||||||
} > flash
|
} > progmem
|
||||||
|
|
||||||
_eronly = ABSOLUTE(.); /* See below */
|
_eronly = ABSOLUTE(.); /* See below */
|
||||||
|
|
||||||
@@ -75,17 +83,17 @@ SECTIONS
|
|||||||
*(.gnu.linkonce.d.*)
|
*(.gnu.linkonce.d.*)
|
||||||
CONSTRUCTORS
|
CONSTRUCTORS
|
||||||
_edata = ABSOLUTE(.);
|
_edata = ABSOLUTE(.);
|
||||||
} > sram AT > flash
|
} > datamem AT > progmem
|
||||||
|
|
||||||
.ARM.extab : {
|
.ARM.extab : {
|
||||||
*(.ARM.extab*)
|
*(.ARM.extab*)
|
||||||
} >sram
|
} >datamem
|
||||||
|
|
||||||
.ARM.exidx : {
|
.ARM.exidx : {
|
||||||
__exidx_start = ABSOLUTE(.);
|
__exidx_start = ABSOLUTE(.);
|
||||||
*(.ARM.exidx*)
|
*(.ARM.exidx*)
|
||||||
__exidx_end = ABSOLUTE(.);
|
__exidx_end = ABSOLUTE(.);
|
||||||
} >sram
|
} >datamem
|
||||||
|
|
||||||
.bss : { /* BSS */
|
.bss : { /* BSS */
|
||||||
_sbss = ABSOLUTE(.);
|
_sbss = ABSOLUTE(.);
|
||||||
@@ -93,7 +101,7 @@ SECTIONS
|
|||||||
*(.gnu.linkonce.b.*)
|
*(.gnu.linkonce.b.*)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
_ebss = ABSOLUTE(.);
|
_ebss = ABSOLUTE(.);
|
||||||
} > sram
|
} > datamem
|
||||||
/* Stabs debugging sections. */
|
/* Stabs debugging sections. */
|
||||||
.stab 0 : { *(.stab) }
|
.stab 0 : { *(.stab) }
|
||||||
.stabstr 0 : { *(.stabstr) }
|
.stabstr 0 : { *(.stabstr) }
|
||||||
@@ -38,18 +38,28 @@
|
|||||||
CFLAGS += -I$(TOPDIR)/sched
|
CFLAGS += -I$(TOPDIR)/sched
|
||||||
|
|
||||||
ASRCS =
|
ASRCS =
|
||||||
CSRCS = up_boot.c up_leds.c
|
CSRCS = up_boot.c
|
||||||
|
|
||||||
ifeq ($(CONFIG_NSH_ARCHINIT),y)
|
ifeq ($(CONFIG_NSH_ARCHINIT),y)
|
||||||
CSRCS += up_nsh.c
|
CSRCS += up_nsh.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_USBMSC),y)
|
ifeq ($(CONFIG_ARCH_FPU),y)
|
||||||
CSRCS += up_usbmsc.c
|
CSRCS += up_ostest.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARCH_LEDS),y)
|
||||||
|
CSRCS += up_autoleds.c
|
||||||
|
else
|
||||||
|
CSRCS += up_userleds.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARCH_BUTTONS),y)
|
ifeq ($(CONFIG_ARCH_BUTTONS),y)
|
||||||
CSRCS += up_buttons.c
|
CSRCS += up_buttons.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_USBMSC),y)
|
||||||
|
CSRCS += up_usbmsc.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
AOBJS = $(ASRCS:.S=$(OBJEXT))
|
AOBJS = $(ASRCS:.S=$(OBJEXT))
|
||||||
|
|||||||
+85
-101
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* configs/lpc4330-xplorer/src/up_leds.c
|
* configs/lpc4330-xplorer/src/up_autoleds.c
|
||||||
* arch/arm/src/board/up_leds.c
|
* arch/arm/src/board/up_autoleds.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
||||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
@@ -50,28 +50,57 @@
|
|||||||
#include "up_arch.h"
|
#include "up_arch.h"
|
||||||
#include "up_internal.h"
|
#include "up_internal.h"
|
||||||
|
|
||||||
#include "lpc43_internal.h"
|
#include "xplorer_internal.h"
|
||||||
|
|
||||||
#include "lpc4330_xplorer_internal.h"
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_LEDS
|
#ifdef CONFIG_ARCH_LEDS
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Definitions
|
* Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
/* LED definitions **********************************************************/
|
||||||
|
/* The LPC4330-Xplorer has 2 user-controllable LEDs labeled D2 an D3 in the
|
||||||
|
* schematic and on but referred to has LED1 and LED2 here, respectively.
|
||||||
|
*
|
||||||
|
* LED1 D2 GPIO1[12]
|
||||||
|
* LED2 D3 GPIO1[11]
|
||||||
|
*
|
||||||
|
* LEDs are pulled high to a low output illuminates the LED.
|
||||||
|
*
|
||||||
|
* If CONFIG_ARCH_LEDS is defined, the LEDs will be controlled as follows
|
||||||
|
* for NuttX debug functionality (where NC means "No Change").
|
||||||
|
*
|
||||||
|
* ON OFF
|
||||||
|
* LED1 LED2 LED1 LED2
|
||||||
|
* LED_STARTED 0 OFF OFF - -
|
||||||
|
* LED_HEAPALLOCATE 1 ON OFF - -
|
||||||
|
* LED_IRQSENABLED 1 ON OFF - -
|
||||||
|
* LED_STACKCREATED 1 ON OFF - -
|
||||||
|
* LED_INIRQ 2 NC ON NC OFF
|
||||||
|
* LED_SIGNAL 2 NC ON NC OFF
|
||||||
|
* LED_ASSERTION 2 NC ON NC OFF
|
||||||
|
* LED_PANIC 2 NC ON NC OFF
|
||||||
|
*
|
||||||
|
* If CONFIG_ARCH_LEDS is not defined, then the LEDs are completely under
|
||||||
|
* control of the application. The following interfaces are then available
|
||||||
|
* for application control of the LEDs:
|
||||||
|
*
|
||||||
|
* void lpc43_ledinit(void);
|
||||||
|
* void lpc43_setled(int led, bool ledon);
|
||||||
|
* void lpc43_setleds(uint8_t ledset);
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Debug definitions ********************************************************/
|
||||||
/* Enables debug output from this file (needs CONFIG_DEBUG with
|
/* Enables debug output from this file (needs CONFIG_DEBUG with
|
||||||
* CONFIG_DEBUG_VERBOSE too)
|
* CONFIG_DEBUG_VERBOSE too)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#undef LED_DEBUG /* Define to enable debug */
|
#ifdef CONFIG_DEBUG_LED
|
||||||
#undef LED_VERBOSE /* Define to enable verbose debug */
|
|
||||||
|
|
||||||
#ifdef LED_DEBUG
|
|
||||||
# define leddbg lldbg
|
# define leddbg lldbg
|
||||||
# ifdef LED_VERBOSE
|
# ifdef CONFIG_DEBUG_VERBOSE
|
||||||
|
# define LED_VERBOSE 1
|
||||||
# define ledvdbg lldbg
|
# define ledvdbg lldbg
|
||||||
# else
|
# else
|
||||||
|
# undef LED_VERBOSE
|
||||||
# define ledvdbg(x...)
|
# define ledvdbg(x...)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
@@ -80,43 +109,28 @@
|
|||||||
# define ledvdbg(x...)
|
# define ledvdbg(x...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Dump GPIO registers */
|
|
||||||
|
|
||||||
#ifdef LED_VERBOSE
|
|
||||||
# define led_dumpgpio(m) lpc43_dumpgpio(LPC4330_XPLORER_LED2, m)
|
|
||||||
#else
|
|
||||||
# define led_dumpgpio(m)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/* LED definitions ******************************************************************
|
|
||||||
|
|
||||||
The LPC4330-Xplorer has 2 LEDs along the bottom of the board. Green or off.
|
|
||||||
If CONFIG_ARCH_LEDS is defined, the LEDs will be controlled as follows for NuttX
|
|
||||||
debug functionality (where NC means "No Change").
|
|
||||||
|
|
||||||
During the boot phases. LED1 and LED2 will show boot status.
|
|
||||||
|
|
||||||
LED1 LED2
|
|
||||||
STARTED OFF OFF
|
|
||||||
HEAPALLOCATE BLUE OFF
|
|
||||||
IRQSENABLED OFF BLUE
|
|
||||||
STACKCREATED OFF OFF
|
|
||||||
|
|
||||||
After the system is booted, this logic will no longer use LEDs 1 & 2. They
|
|
||||||
are available for use by applications using lpc43_led (prototyped below)
|
|
||||||
*/
|
|
||||||
|
|
||||||
static bool g_initialized;
|
|
||||||
static int g_nestcount;
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Functions
|
* Private Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: led_dumppins
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef LED_VERBOSE
|
||||||
|
static void led_dumppins(FAR const char *msg)
|
||||||
|
{
|
||||||
|
lpc43_dumppinconfig(PINCONFIG_LED1, msg);
|
||||||
|
lpc43_dumpgpio(GPIO_LED2, msg);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
# define led_dumppins(m)
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -127,14 +141,19 @@ static int g_nestcount;
|
|||||||
|
|
||||||
void up_ledinit(void)
|
void up_ledinit(void)
|
||||||
{
|
{
|
||||||
/* Configure all LED GPIO lines */
|
/* Configure all LED pins as GPIO outputs */
|
||||||
|
|
||||||
led_dumpgpio("up_ledinit() Entry)");
|
led_dumppins("up_ledinit() Entry)");
|
||||||
|
|
||||||
lpc43_configgpio(LPC4330_XPLORER_LED1);
|
/* Configure LED pins as GPIOs, then configure GPIOs as outputs */
|
||||||
lpc43_configgpio(LPC4330_XPLORER_LED2);
|
|
||||||
|
|
||||||
led_dumpgpio("up_ledinit() Exit");
|
lpc43_pinconfig(PINCONFIG_LED1);
|
||||||
|
lpc43_gpioconfig(GPIO_LED1);
|
||||||
|
|
||||||
|
lpc43_pinconfig(PINCONFIG_LED2);
|
||||||
|
lpc43_gpioconfig(GPIO_LED2);
|
||||||
|
|
||||||
|
led_dumppins("up_ledinit() Exit");
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@@ -143,44 +162,22 @@ void up_ledinit(void)
|
|||||||
|
|
||||||
void up_ledon(int led)
|
void up_ledon(int led)
|
||||||
{
|
{
|
||||||
/* We will control LED1 and LED2 not yet completed the boot sequence. */
|
|
||||||
|
|
||||||
if (!g_initialized)
|
|
||||||
{
|
|
||||||
int led1 = 0;
|
|
||||||
int led2 = 0;
|
|
||||||
switch (led)
|
|
||||||
{
|
|
||||||
case LED_STACKCREATED:
|
|
||||||
g_initialized = true;
|
|
||||||
case LED_STARTED:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LED_HEAPALLOCATE:
|
|
||||||
led1 = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LED_IRQSENABLED:
|
|
||||||
led2 = 1;
|
|
||||||
}
|
|
||||||
lpc43_led(LPC4330_XPLORER_LED1,led1);
|
|
||||||
lpc43_led(LPC4330_XPLORER_LED2,led2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We will always control the HB LED */
|
|
||||||
|
|
||||||
switch (led)
|
switch (led)
|
||||||
{
|
{
|
||||||
case LED_INIRQ:
|
default:
|
||||||
case LED_SIGNAL:
|
case 0:
|
||||||
case LED_ASSERTION:
|
lpc43_gpiowrite(GPIO_LED1, true); /* LED1 OFF */
|
||||||
case LED_PANIC:
|
lpc43_gpiowrite(GPIO_LED2, true); /* LED2 OFF */
|
||||||
lpc43_gpiowrite(LPC4330_XPLORER_HEARTBEAT, false);
|
break;
|
||||||
g_nestcount++;
|
|
||||||
|
|
||||||
default:
|
case 1:
|
||||||
break;
|
lpc43_gpiowrite(GPIO_LED1, false); /* LED1 ON */
|
||||||
|
lpc43_gpiowrite(GPIO_LED2, true); /* LED2 OFF */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
lpc43_gpiowrite(GPIO_LED2, false); /* LED2 ON */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,30 +187,17 @@ void up_ledon(int led)
|
|||||||
|
|
||||||
void up_ledoff(int led)
|
void up_ledoff(int led)
|
||||||
{
|
{
|
||||||
/* In all states, OFF can only mean turning off the HB LED */
|
switch (led)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
break;
|
||||||
|
|
||||||
if (g_nestcount <= 1)
|
case 2:
|
||||||
{
|
lpc43_gpiowrite(GPIO_LED2, true); /* LED2 OFF */
|
||||||
lpc43_led(LPC4330_XPLORER_HEARTBEAT, true);
|
break;
|
||||||
g_nestcount = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_nestcount--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************************
|
|
||||||
* Name: lpc43_led
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Once the system has booted, these functions can be used to control the LEDs
|
|
||||||
*
|
|
||||||
************************************************************************************/
|
|
||||||
|
|
||||||
void lpc43_led(int lednum, int state)
|
|
||||||
|
|
||||||
{
|
|
||||||
lpc43_gpiowrite(lednum, state);
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_ARCH_LEDS */
|
#endif /* CONFIG_ARCH_LEDS */
|
||||||
@@ -47,8 +47,7 @@
|
|||||||
#include "up_arch.h"
|
#include "up_arch.h"
|
||||||
#include "up_internal.h"
|
#include "up_internal.h"
|
||||||
|
|
||||||
#include "lpc43_internal.h"
|
#include "xplorer_internal.h"
|
||||||
#include "lpc4330_xplorer_internal.h"
|
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* Definitions
|
* Definitions
|
||||||
|
|||||||
@@ -47,8 +47,7 @@
|
|||||||
|
|
||||||
#include <arch/board/board.h>
|
#include <arch/board/board.h>
|
||||||
|
|
||||||
#include "lpc43_internal.h"
|
#include "xplorer_internal.h"
|
||||||
#include "lpc4330_xplorer_internal.h"
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_BUTTONS
|
#ifdef CONFIG_ARCH_BUTTONS
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
/************************************************************************************
|
||||||
|
* configs/lpc4330-xplorer/src/up_ostest.c
|
||||||
|
* arch/arm/src/board/up_ostest.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Included Files
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
#include <arch/irq.h>
|
||||||
|
#include <arch/board/board.h>
|
||||||
|
|
||||||
|
#include "up_arch.h"
|
||||||
|
#include "up_internal.h"
|
||||||
|
#include "xplorer-internal.h"
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Definitions
|
||||||
|
************************************************************************************/
|
||||||
|
/* Configuration ********************************************************************/
|
||||||
|
|
||||||
|
#undef HAVE_FPU
|
||||||
|
#if defined(CONFIG_ARCH_FPU) && defined(CONFIG_EXAMPLES_OSTEST_FPUSIZE) && \
|
||||||
|
defined(CONFIG_SCHED_WAITPID) && !defined(CONFIG_DISABLE_SIGNALS) && \
|
||||||
|
!defined(CONFIG_ARMV7M_CMNVECTOR)
|
||||||
|
# define HAVE_FPU 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_FPU
|
||||||
|
|
||||||
|
#if CONFIG_EXAMPLES_OSTEST_FPUSIZE != (4*SW_FPU_REGS)
|
||||||
|
# error "CONFIG_EXAMPLES_OSTEST_FPUSIZE has the wrong size"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Private Data
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
static uint32_t g_saveregs[XCPTCONTEXT_REGS];
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Private Functions
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
************************************************************************************/
|
||||||
|
/* Given an array of size CONFIG_EXAMPLES_OSTEST_FPUSIZE, this function will return
|
||||||
|
* the current FPU registers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void arch_getfpu(FAR uint32_t *fpusave)
|
||||||
|
{
|
||||||
|
irqstate_t flags;
|
||||||
|
|
||||||
|
/* Take a snapshot of the thread context right now */
|
||||||
|
|
||||||
|
flags = irqsave();
|
||||||
|
up_saveusercontext(g_saveregs);
|
||||||
|
|
||||||
|
/* Return only the floating register values */
|
||||||
|
|
||||||
|
memcpy(fpusave, &g_saveregs[REG_S0], (4*SW_FPU_REGS));
|
||||||
|
irqrestore(flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Given two arrays of size CONFIG_EXAMPLES_OSTEST_FPUSIZE this function
|
||||||
|
* will compare them and return true if they are identical.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool arch_cmpfpu(FAR const uint32_t *fpusave1, FAR const uint32_t *fpusave2)
|
||||||
|
{
|
||||||
|
return memcmp(fpusave1, fpusave2, (4*SW_FPU_REGS)) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_FPU */
|
||||||
@@ -0,0 +1,157 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* configs/lpc4330-xplorer/src/up_userleds.c
|
||||||
|
* arch/arm/src/board/up_userleds.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
#include <arch/board/board.h>
|
||||||
|
|
||||||
|
#include "chip.h"
|
||||||
|
#include "up_arch.h"
|
||||||
|
#include "up_internal.h"
|
||||||
|
|
||||||
|
#include "xplorer_internal.h"
|
||||||
|
|
||||||
|
#ifndef CONFIG_ARCH_LEDS
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
/* LED definitions **********************************************************/
|
||||||
|
/* The LPC4330-Xplorer has 2 user-controllable LEDs labeled D2 an D3 in the
|
||||||
|
* schematic and on but referred to has LED1 and LED2 here, respectively.
|
||||||
|
*
|
||||||
|
* LED1 D2 GPIO1[12]
|
||||||
|
* LED2 D3 GPIO1[11]
|
||||||
|
*
|
||||||
|
* LEDs are pulled high to a low output illuminates the LED.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Debug definitions ********************************************************/
|
||||||
|
/* Enables debug output from this file (needs CONFIG_DEBUG with
|
||||||
|
* CONFIG_DEBUG_VERBOSE too)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEBUG_LED
|
||||||
|
# define leddbg lldbg
|
||||||
|
# ifdef CONFIG_DEBUG_VERBOSE
|
||||||
|
# define LED_VERBOSE 1
|
||||||
|
# define ledvdbg lldbg
|
||||||
|
# else
|
||||||
|
# undef LED_VERBOSE
|
||||||
|
# define ledvdbg(x...)
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# undef LED_VERBOSE
|
||||||
|
# define leddbg(x...)
|
||||||
|
# define ledvdbg(x...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Data
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: led_dumppins
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef LED_VERBOSE
|
||||||
|
static void led_dumppins(FAR const char *msg)
|
||||||
|
{
|
||||||
|
lpc43_dumppinconfig(PINCONFIG_LED1, msg);
|
||||||
|
lpc43_dumpgpio(GPIO_LED2, msg);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
# define led_dumppins(m)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: lpc43_ledinit
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
void lpc43_ledinit(void)
|
||||||
|
{
|
||||||
|
/* Configure all LED GPIO lines */
|
||||||
|
|
||||||
|
led_dumppins("lpc43_ledinit() Entry)");
|
||||||
|
|
||||||
|
/* Configure LED pins as GPIOs, then configure GPIOs as outputs */
|
||||||
|
|
||||||
|
lpc43_pinconfig(PINCONFIG_LED1);
|
||||||
|
lpc43_gpioconfig(GPIO_LED1);
|
||||||
|
|
||||||
|
lpc43_pinconfig(PINCONFIG_LED2);
|
||||||
|
lpc43_gpioconfig(GPIO_LED2);
|
||||||
|
|
||||||
|
led_dumppins("lpc43_ledinit() Exit");
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: lpc43_setled
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
void lpc43_setled(int led, bool ledon)
|
||||||
|
{
|
||||||
|
uint16_t gpiocfg = (led == BOARD_LED1 ? BOARD_LED1 : BOARD_LED2);
|
||||||
|
lpc43_gpiowrite(GPIO_LED1, !ledon);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: lpc43_setleds
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
void lpc43_setleds(uint8_t ledset)
|
||||||
|
{
|
||||||
|
lpc43_gpiowrite(BOARD_LED1, (ledset & BOARD_LED1_BIT) == 0);
|
||||||
|
lpc43_gpiowrite(BOARD_LED2, (ledset & BOARD_LED2_BIT) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !CONFIG_ARCH_LEDS */
|
||||||
+22
-13
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* configs/lpc4330-xplorer/src/lpc4330_xplorer_internal.h
|
* configs/lpc4330-xplorer/src/xplorer_internal.h
|
||||||
* arch/arm/src/board/lpc4330-xplorer_internal.n
|
* arch/arm/src/board/xplorer_internal.n
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
||||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
@@ -34,8 +34,8 @@
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef _CONFIGS_LPC4330_XPLORER_SRC_LPC4330_XPLORER_INTERNAL_H
|
#ifndef _CONFIGS_LPC4330_XPLORER_SRC_XPLORER_INTERNAL_H
|
||||||
#define _CONFIGS_LPC4330_XPLORER_SRC_LPC4330_XPLORER_INTERNAL_H
|
#define _CONFIGS_LPC4330_XPLORER_SRC_XPLORER_INTERNAL_H
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Included Files
|
* Included Files
|
||||||
@@ -44,6 +44,9 @@
|
|||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
#include <nuttx/compiler.h>
|
#include <nuttx/compiler.h>
|
||||||
|
|
||||||
|
#include "lpc43_pinconfig.h"
|
||||||
|
#include "lpc43_gpio.h"
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Definitions
|
* Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -55,14 +58,20 @@
|
|||||||
* gpio1[11] - LED D3 J10-17 LED2
|
* gpio1[11] - LED D3 J10-17 LED2
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#define LPC4330_XPLORER_LED1 (GPIO_OUTPUT | GPIO_PORT1 | GPIO_PIN12)
|
/* Definitions to configure LED pins as GPIOs:
|
||||||
#define LPC4330_XPLORER_LED1_OFF LPC4330_XPLORER_LED1
|
*
|
||||||
#define LPC4330_XPLORER_LED1_ON (LPC4330_XPLORER_LED1 | GPIO_VALUE_ONE)
|
* - Floating
|
||||||
#define LPC4330_XPLORER_LED2 (GPIO_OUTPUT | GPIO_PORT1 | GPIO_PIN11)
|
* - Normal drive
|
||||||
#define LPC4330_XPLORER_LED2_OFF LPC4330_XPLORER_LED2
|
* - No buffering, glitch filtering, slew=slow
|
||||||
#define LPC4330_XPLORER_LED2_ON (LPC4330_XPLORER_LED2 | GPIO_VALUE_ONE)
|
*/
|
||||||
|
|
||||||
#define LPC4330_XPLORER_HEARTBEAT LPC4330_XPLORER_LED2
|
#define PINCONFIG_LED1 PINCONF_GPIO1p12
|
||||||
|
#define PINCONFIG_LED2 PINCONF_GPIO1p11
|
||||||
|
|
||||||
|
/* Definitions to configure LED GPIOs as outputs */
|
||||||
|
|
||||||
|
#define GPIO_LED1 (GPIO_MODE_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT1 | GPIO_PIN12)
|
||||||
|
#define GPIO_LED2 (GPIO_MODE_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT1 | GPIO_PIN11)
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Buttons GPIO PIN SIGNAL NAME
|
* Buttons GPIO PIN SIGNAL NAME
|
||||||
@@ -70,7 +79,7 @@
|
|||||||
* gpio0[7] - User Button SW2 J8-25 BTN1
|
* gpio0[7] - User Button SW2 J8-25 BTN1
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#define LPC4330_XPLORER_BUT1 (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT0 | GPIO_PIN7)
|
#define LPC4330_XPLORER_BUT1 (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT0 | GPIO_PIN7)
|
||||||
|
|
||||||
/* Button IRQ numbers */
|
/* Button IRQ numbers */
|
||||||
|
|
||||||
@@ -101,4 +110,4 @@
|
|||||||
extern void weak_function lpc43_sspinitialize(void);
|
extern void weak_function lpc43_sspinitialize(void);
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
#endif /* _CONFIGS_LPC4330_XPLORER_SRC_LPC4330_XPLORER_INTERNAL_H */
|
#endif /* _CONFIGS_LPC4330_XPLORER_SRC_XPLORER_INTERNAL_H */
|
||||||
@@ -64,7 +64,7 @@ GNU Toolchain Options
|
|||||||
the setenv.h file if your make cannot find the tools.
|
the setenv.h file if your make cannot find the tools.
|
||||||
|
|
||||||
NOTE: the CodeSourcery (for Windows), Atollic, devkitARM, and Raisonance toolchains are
|
NOTE: the CodeSourcery (for Windows), Atollic, devkitARM, and Raisonance toolchains are
|
||||||
Windows native toolchains. The CodeSourcey (for Linux) and NuttX buildroot
|
Windows native toolchains. The CodeSourcery (for Linux) and NuttX buildroot
|
||||||
toolchains are Cygwin and/or Linux native toolchains. There are several limitations
|
toolchains are Cygwin and/or Linux native toolchains. There are several limitations
|
||||||
to using a Windows based toolchain in a Cygwin environment. The three biggest are:
|
to using a Windows based toolchain in a Cygwin environment. The three biggest are:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user