Merge remote-tracking branch 'origin/master' into bas24

This commit is contained in:
Gregory Nutt 2014-10-28 17:19:17 -06:00
commit cf8304f47f
17 changed files with 436 additions and 117 deletions

View file

@ -63,6 +63,11 @@ Installing Cygwin
of the Cygwin utilities that you will need to build NuttX. The
build will fail in numerous places because of missing packages.
NOTE: You don't really have to install EVERYTHING but I cannot
answer the question "Then what should I install?" I don't know
the answer to that and so will continue to recommend installing
EVERYTHING.
After installing Cygwin, you will get lots of links for installed
tools and shells. I use the RXVT native shell. It is fast and reliable
and does not require you to run the Cygwin X server (which is neither
@ -70,6 +75,10 @@ Installing Cygwin
instructions assume that you are at a bash command line prompt in
either Linux or in Cygwin shell.
UPDATE: The last time I installed EVERTHING, the download was
about 5GiB. The server I selected was also very slow so it took
over a day to do the whole install!
Download and Unpack
-------------------
@ -110,7 +119,7 @@ Semi-Optional apps/ Package
nuttx/ apps/
This is important because the NuttX build will expect to find the
apps directory in that (default) location. )That default location
apps directory in that (default) location. That default location
can be changed by editing your NuttX configuration file, but that
is another story).
@ -134,10 +143,20 @@ Installation Directories with Spaces in the Path
Downloading from Repositories
-----------------------------
The current NuttX du jour is available in from a GIT repository. Download
instructions are available here:
Cloning the Repository
https://sourceforge.net/p/nuttx/git
The current NuttX du jour is available in from a GIT repository. Cloning
instructions are available here:
https://sourceforge.net/p/nuttx/git
Cloning NuttX Inside Cygwin
If you are cloning the NuttX repository, it is recommended to avoid
automatic end of lines conversions by git. These conversions may break
some scripts like configure.sh. Before cloning, do the following:
git config --global core.autocrlf false
Notes about Header Files
------------------------
@ -528,7 +547,7 @@ SHELLS
In this case, bash is probably available and the #!/bin/bash at the
beginning of the file should do the job. If any scripts with #!/bin/sh
fail, try changing that ti #!/bin/bash and let me know about the change.
fail, try changing that to #!/bin/bash and let me know about the change.
2. FreeBSD with the Bourne Shell and no bash shell.
@ -848,7 +867,7 @@ General Pre-built Toolchain Issues
There may be incompatibilities with header files, libraries, and compiler
built-in functions at detailed below. For the most part, these issues
are handled in the existing make logic. But if you are breaking new ground,
then you may incounter these:
then you may encounter these:
4. Header Files. Most pre-built toolchains will build with a foreign C
library (usually newlib, but maybe uClibc or glibc if you are using a
@ -891,6 +910,42 @@ General Pre-built Toolchain Issues
your toolchain since they will be using different versions of
binutils and possibly different ABIs.
Building Original Linux Boards in Cygwin
Some default board configurations are set to build under Linux and others
to build under Windows with Cygwin. Various default toolchains may also
be used in each configuration. It is possible to change the default
setup. Here, for example, is what you must do in order to compile a
default Linux configuration in the Cygwin environment using the
CodeSourceery for Windows toolchain. After instantiating a "canned"
NuttX configuration, run the target 'menuconfig' and set the following
items:
Build Setup->Build Host Platform->Windows
Build Setup->Windows Build Environment->Cygwin
System Type->Toolchain Selection->CodeSourcery GNU Toolchain under Windows
In Windows 7 it may be required to open the Cygwin shell as Administrator
("Run As" option, right button) you find errors like "Permission denied".
Recovering from Bad Configurations
Many people make the mistake of configuring NuttX with the "canned"
configuration and then just typing 'make' with disastrous consequences;
the build may fail with mysterious, uninterpretable, and irrecoverable
build errors. If, for example, you do this with an unmodified Linux
configuration in a Windows/Cgwin environment, you will corrupt the
build environment. The environment will be corrupted because of POSIX vs
Windows path issues and with issues related to symbolic links. If you
make the mistake of doing this, the easiest way to recover is to just
start over: Do 'make distclean' to remove every trace of the corrupted
configuration, reconfigure from scratch, and make certain that the set
the configuration correctly for your platform before attempting to make
again.
Just fixing the configuration file after you have instantiated the bad
configuration with 'make' is not enough.
DOCUMENTATION
^^^^^^^^^^^^^

View file

@ -77,7 +77,7 @@
#define EFM32_USART0_BASE 0x4000c000 /* USART0 base address */
#define EFM32_USART1_BASE 0x4000c400 /* USART1 base address */
#define EFM32_USART2_BASE 0x4000c800 /* USART2 base address */
#define EFM32_UART0_BASE 0x4000e00 /* UART0 base address */
#define EFM32_UART0_BASE 0x4000e000 /* UART0 base address */
#define EFM32_TIMER0_BASE 0x40010000 /* TIMER0 base address */
#define EFM32_TIMER1_BASE 0x40010400 /* TIMER1 base address */
#define EFM32_TIMER2_BASE 0x40010800 /* TIMER2 base address */

View file

@ -166,7 +166,7 @@ static void efm32_enable_lfxo(void)
{
/* Enable the LFXO */
putreg32(CMU_OSCENCMD_LFRCOEN, EFM32_CMU_OSCENCMD);
putreg32(CMU_OSCENCMD_LFXOEN, EFM32_CMU_OSCENCMD);
efm32_statuswait(CMU_STATUS_LFXORDY);
}
@ -610,6 +610,7 @@ static inline uint32_t efm32_lfaclk_config(uint32_t lfaclksel, bool ulfrco,
case CMU_LFCLKSEL_LFA_LFRCO:
{
efm32_enable_lfrco();
lfaclk = BOARD_LFRCO_FREQUENCY;
}
break;

View file

@ -266,7 +266,7 @@ static inline void efm32_setmode(uintptr_t base, uint8_t pin, uint8_t mode)
regval = getreg32(regaddr);
regval &= ~((uint32_t)15 << shift);
regval |= ~((uint32_t)mode << shift);
regval |= (uint32_t)mode << shift;
putreg32(regval, regaddr);
}

View file

@ -51,6 +51,8 @@
#include "chip/efm32_usart.h"
#include "chip/efm32_leuart.h"
#include "chip/efm32_cmu.h"
#include "efm32_gpio.h"
#include "efm32_lowputc.h"
/****************************************************************************
@ -204,17 +206,16 @@ static void efm32_uart_setbaud(uintptr_t base, uint32_t baud)
clkdiv = 0;
}
DEBUGASSERT(clkdiv <= _USART_CLKDIV_MASK);
/* Set up the selected oversampling and baud divisor */
/* Set up the selected oversampling and baud */
regval = getreg32(base + EFM32_USART_CTRL_OFFSET);
regval &= ~_USART_CTRL_OVS_MASK;
regval |= ovs;
regval = getreg32(base + EFM32_USART_CTRL_OFFSET);
regval &= ~_USART_CTRL_OVS_MASK;
regval |= ovs;
putreg32(regval, base + EFM32_USART_CTRL_OFFSET);
putreg32((uint32_t)clkdiv & _USART_CLKDIV_DIV_MASK,
base + EFM32_USART_CLKDIV_OFFSET);
regval = (uint32_t)clkdiv << _USART_CLKDIV_DIV_SHIFT;
DEBUGASSERT((regval & _USART_CLKDIV_MASK) == regval);
putreg32(regval, base + EFM32_USART_CLKDIV_OFFSET);
}
#endif
@ -342,9 +343,71 @@ void efm32_lowsetup(void)
putreg32(regval, EFM32_CMU_LFBCLKEN0);
#endif /* HAVE_LEUART_DEVICE */
/* Set location in the ROUTE register */
#if defined(HAVE_UART_DEVICE) || defined(HAVE_SPI_DEVICE)
/* Enable output on U[S]ART output pins */
#ifdef CONFIG_EFM32_USART0
efm32_configgpio(GPIO_INPUT | GPIO_INT_NONE | BOARD_USART0_RX_GPIO);
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_USART0_TX_GPIO);
#ifdef CONFIG_EFM32_USART0_ISSPI
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_USART0_CLK_GPIO);
#endif
#endif
#ifdef CONFIG_EFM32_USART1
efm32_configgpio(GPIO_INPUT | GPIO_INT_NONE | BOARD_USART1_RX_GPIO);
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_USART1_TX_GPIO);
#ifdef CONFIG_EFM32_USART1_ISSPI
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_USART1_CLK_GPIO);
#endif
#endif
#ifdef CONFIG_EFM32_USART2
efm32_configgpio(GPIO_INPUT | GPIO_INT_NONE | BOARD_USART2_RX_GPIO);
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_USART2_TX_GPIO);
#ifdef CONFIG_EFM32_USART2_ISSPI
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_USART2_CLK_GPIO);
#endif
#endif
#ifdef CONFIG_EFM32_UART0
efm32_configgpio(GPIO_INPUT | GPIO_INT_NONE | BOARD_UART0_RX_GPIO);
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_UART0_TX_GPIO);
#endif
#ifdef CONFIG_EFM32_UART1
efm32_configgpio(GPIO_INPUT | GPIO_INT_NONE | BOARD_UART1_RX_GPIO);
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_UART1_TX_GPIO);
#endif
#endif /* HAVE_UART_DEVICE */
#ifdef HAVE_LEUART_DEVICE
/* Enable output on LEUART output pins */
#ifdef CONFIG_EFM32_LEUART0
efm32_configgpio(GPIO_INPUT | GPIO_INT_NONE | BOARD_LEUART0_RX_GPIO);
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_LEUART0_TX_GPIO);
#endif
#ifdef CONFIG_EFM32_LEUART1
efm32_configgpio(GPIO_INPUT | GPIO_INT_NONE | BOARD_LEUART1_RX_GPIO);
efm32_configgpio(GPIO_OUTPUT_PUSHPULL | GPIO_OUTPUT_CLEAR |
GPIO_DRIVE_STANDARD | BOARD_LEUART1_TX_GPIO);
#endif
#endif /* HAVE_LEUART_DEVICE */
#if defined(HAVE_UART_DEVICE) || defined(HAVE_SPI_DEVICE)
/* Set location in the U[S]ART ROUTE registers */
#ifdef HAVE_UART_DEVICE
#ifdef CONFIG_EFM32_USART0
regval = (USART_ROUTE_RXPEN | USART_ROUTE_TXPEN |
(BOARD_USART0_ROUTE_LOCATION << _USART_ROUTE_LOCATION_SHIFT));
@ -386,13 +449,15 @@ void efm32_lowsetup(void)
#endif /* HAVE_UART_DEVICE */
#ifdef HAVE_LEUART_DEVICE
#ifdef CONFIG_EFM32_UART0
/* Set location in the LEUART ROUTE registers */
#ifdef CONFIG_EFM32_LEUART0
regval = (LEUART_ROUTE_RXPEN | LEUART_ROUTE_TXPEN |
(BOARD_LEUART0_ROUTE_LOCATION << _LEUART_ROUTE_LOCATION_SHIFT));
putreg32(regval, EFM32_LEUART0_ROUTE);
#endif
#ifdef CONFIG_EFM32_UART1
#ifdef CONFIG_EFM32_LEUART1
regval = (LEUART_ROUTE_RXPEN | LEUART_ROUTE_TXPEN |
(BOARD_LEUART1_ROUTE_LOCATION << _LEUART_ROUTE_LOCATION_SHIFT));
putreg32(regval, EFM32_LEUART1_ROUTE);

View file

@ -1546,7 +1546,7 @@ static int spi_portinitialize(struct efm32_spidev_s *priv)
* 1. USART GPIO pins were configured in efm32_lowsetup(). Chip select
* pins must be configured by board specific logic before
* efm32_spi_initialize() is called.
* 2. Clocking for the USART as also enabled in up_lowsetup();
* 2. Clocking for the USART as also enabled in efm32_lowsetup();
*/
/* Set bits for synchronous mode */

View file

@ -51,15 +51,23 @@
#include "up_arch.h"
#include "up_internal.h"
#include "efm32_config.h"
#include "efm32_lowputc.h"
#include "efm32_clockconfig.h"
#include "efm32_start.h"
#ifdef CONFIG_ARCH_FPU
# include "nvic.h"
#endif
/****************************************************************************
* Private Function prototypes
****************************************************************************/
#ifdef CONFIG_ARCH_FPU
static inline void efm32_fpuconfig(void);
#endif
#ifdef CONFIG_DEBUG_STACK
static void go_os_start(void *pv, unsigned int nbytes)
__attribute__ ((naked,no_instrument_function,noreturn));
@ -81,7 +89,7 @@ static void go_os_start(void *pv, unsigned int nbytes)
# if defined(CONFIG_ARMV7M_ITMSYSLOG)
# define showprogress(c) (void)syslog_putc(c)
# elif defined(HAVE_UART_CONSOLE) || defined(HAVE_LEUART_CONSOLE)
# define showprogress(c) up_lowputc(c)
# define showprogress(c) efm32_lowputc(c)
# else
# define showprogress(c)
# endif
@ -89,6 +97,96 @@ static void go_os_start(void *pv, unsigned int nbytes)
# define showprogress(c)
#endif
/****************************************************************************
* Name: efm32_fpuconfig
*
* Description:
* Configure the FPU. Relative bit settings:
*
* CPACR: Enables access to CP10 and CP11
* CONTROL.FPCA: Determines whether the FP extension is active in the
* current context:
* FPCCR.ASPEN: Enables automatic FP state preservation, then the
* processor sets this bit to 1 on successful completion of any FP
* instruction.
* FPCCR.LSPEN: Enables lazy context save of FP state. When this is
* done, the processor reserves space on the stack for the FP state,
* but does not save that state information to the stack.
*
* Software must not change the value of the ASPEN bit or LSPEN bit while either:
* - the CPACR permits access to CP10 and CP11, that give access to the FP
* extension, or
* - the CONTROL.FPCA bit is set to 1
*
****************************************************************************/
#ifdef CONFIG_ARCH_FPU
#ifdef CONFIG_ARMV7M_CMNVECTOR
static inline void efm32_fpuconfig(void)
{
uint32_t regval;
/* Set CONTROL.FPCA so that we always get the extended context frame
* with the volatile FP registers stacked above the basic context.
*/
regval = getcontrol();
regval |= (1 << 2);
setcontrol(regval);
/* Ensure that FPCCR.LSPEN is disabled, so that we don't have to contend
* with the lazy FP context save behaviour. Clear FPCCR.ASPEN since we
* are going to turn on CONTROL.FPCA for all contexts.
*/
regval = getreg32(NVIC_FPCCR);
regval &= ~((1 << 31) | (1 << 30));
putreg32(regval, NVIC_FPCCR);
/* Enable full access to CP10 and CP11 */
regval = getreg32(NVIC_CPACR);
regval |= ((3 << (2*10)) | (3 << (2*11)));
putreg32(regval, NVIC_CPACR);
}
#else
static inline void efm32_fpuconfig(void)
{
uint32_t regval;
/* Clear CONTROL.FPCA so that we do not get the extended context frame
* with the volatile FP registers stacked in the saved context.
*/
regval = getcontrol();
regval &= ~(1 << 2);
setcontrol(regval);
/* Ensure that FPCCR.LSPEN is disabled, so that we don't have to contend
* with the lazy FP context save behaviour. Clear FPCCR.ASPEN since we
* are going to keep CONTROL.FPCA off for all contexts.
*/
regval = getreg32(NVIC_FPCCR);
regval &= ~((1 << 31) | (1 << 30));
putreg32(regval, NVIC_FPCCR);
/* Enable full access to CP10 and CP11 */
regval = getreg32(NVIC_CPACR);
regval |= ((3 << (2*10)) | (3 << (2*11)));
putreg32(regval, NVIC_CPACR);
}
#endif
#else
# define efm32_fpuconfig()
#endif
/****************************************************************************
* Name: go_os_start
*
@ -149,6 +247,7 @@ void __start(void)
/* Configure the uart so that we can get debug output as soon as possible */
efm32_clockconfig();
efm32_fpuconfig();
efm32_lowsetup();
showprogress('A');
@ -179,7 +278,6 @@ void __start(void)
/* Perform early serial initialization */
up_earlyserialinit();
showprogress('D');
/* For the case of the separate user-/kernel-space build, perform whatever
@ -193,6 +291,11 @@ void __start(void)
showprogress('E');
#endif
/* Initialize onboard resources */
efm32_boardinitialize();
showprogress('F');
/* Then start NuttX */
showprogress('\r');

View file

@ -370,11 +370,11 @@
#if defined(CONFIG_ARCH_CHIP_SAM4E)
#define TC_CMR_SBSMPLR_SHIFT (20) /* Bits 20-22: Loading Edge Subsampling Ratio */
#define TC_CMR_SBSMPLR_MASK (7 << TC_CMR_SBSMPLR_SHIFT)
# define TC_CMR_SBSMPLR_ ONE (0 << TC_CMR_SBSMPLR_SHIFT) /* Load on each selected edge */
# define TC_CMR_SBSMPLR_ HALF (1 << TC_CMR_SBSMPLR_SHIFT) /* Load on every 2 selected edges */
# define TC_CMR_SBSMPLR_ 4TH (2 << TC_CMR_SBSMPLR_SHIFT) /* Load on every 4 selected edges */
# define TC_CMR_SBSMPLR_ 8TH (3 << TC_CMR_SBSMPLR_SHIFT) /* Load on every 8 selected edges */
# define TC_CMR_SBSMPLR_ 16TH (4 << TC_CMR_SBSMPLR_SHIFT) /* Load on every 16 selected edges */
# define TC_CMR_SBSMPLR_ONE (0 << TC_CMR_SBSMPLR_SHIFT) /* Load on each selected edge */
# define TC_CMR_SBSMPLR_HALF (1 << TC_CMR_SBSMPLR_SHIFT) /* Load on every 2 selected edges */
# define TC_CMR_SBSMPLR_4TH (2 << TC_CMR_SBSMPLR_SHIFT) /* Load on every 4 selected edges */
# define TC_CMR_SBSMPLR_8TH (3 << TC_CMR_SBSMPLR_SHIFT) /* Load on every 8 selected edges */
# define TC_CMR_SBSMPLR_16TH (4 << TC_CMR_SBSMPLR_SHIFT) /* Load on every 16 selected edges */
#endif
/* TC Channel Mode Register -- Waveform mode only */

View file

@ -2547,6 +2547,7 @@ static int up_pm_prepare(struct pm_callback_s *cb, enum pm_state_e pmstate)
*
****************************************************************************/
#if USE_EARLYSERIALINIT
void up_earlyserialinit(void)
{
#ifdef HAVE_UART
@ -2569,6 +2570,7 @@ void up_earlyserialinit(void)
#endif
#endif /* HAVE UART */
}
#endif
/****************************************************************************
* Name: up_serialinit

View file

@ -16,11 +16,20 @@ README
• On-board SEGGER J-Link USB emulator
• ARM 20 pin JTAG/SWD standard Debug in/out connector
CONTENTS
=======
• Status
• LEDs
• Serial Console
• Using the J-Link GDB Server
• Configurations
STATUS
======
My board is on order and has not arrived as of this writing. So no debug
has yet been done. So the status is code-complete but untested.
Testing has just begun. So the status is code-complete but only
partially tested.
LEDs
====
@ -45,7 +54,7 @@ LEDs
include/board.h and src/efm32_autoleds.c. The LEDs are used to
encode OS-related events as follows:
SYMBOL Meaning LED1* LED2 LED3 LED4
SYMBOL Meaning LED0* LED1 LED2 LED3
----------------- ----------------------- ------ ----- ----- ------
LED_STARTED NuttX has been started ON OFF OFF OFF
LED_HEAPALLOCATE Heap has been allocated OFF ON OFF OFF
@ -57,14 +66,14 @@ LEDs
LED_PANIC The system has crashed N/C N/C N/C ON
LED_IDLE STM32 is is sleep mode (Optional, not used)
* If LED1, LED2, LED3 are statically on, then NuttX probably failed to boot
* If LED0, LED1, LED2 are statically on, then NuttX probably failed to boot
and these LEDs will give you some indication of where the failure was
** The normal state is LED3 ON and LED1 faintly glowing. This faint glow
** The normal state is LED2 ON and LED3 faintly glowing. This faint glow
is because of timer interrupt that result in the LED being illuminated
on a small proportion of the time.
*** LED2 may also flicker normally if signals are processed.
*** LED1 may also flicker normally if signals are processed.
Serial Console
SERIAL CONSOLE
==============
Pin Availability
@ -133,8 +142,58 @@ Serial Console
send commands to the BC. When EFM_BC_EN is low, EFM_BC_TX and EFM_BC_RX
can be used by other applications.
Configurations
USING THE J-LINK GDB SERVER
===========================
1. Star the J-Link GDB server. You should see the start-up confiration
window. SelectL
a. Target device = EFM32G880F128
b. Select Target interface = SWD
2. Press OK. The GDB server should start and the last message in the Log
output should be "Waiting for GDB connection".
3. In a terminal window, start GDB:
arm-none-eabi-gdb
4. Connect to the J-Link GDB serer:
(gdb) target remote local host
5. Load and run nuttx
(gdb) mon halt
(gdb) load nuttx
(gdb) mon reset go
I had to tinker with the setup a few times repeating the same steps above
before things finally began to work. Don't know why.
To debug code already burned into FLASH:
1. Start the GDB server as above.
2. In a terminal window, start GDB:
arm-none-eabi-gdb
3. Connect to the J-Link GDB serer:
(gdb) target remote local host
3. Load the nuttx symbol file, reset, and debug
(gdb) mon halt
(gdb) file nuttx
(gdb) mon reset
(gdb) s
...
CONFIGURATIONS
==============
Each EFM32 Gecko Starter Kit configuration is maintained in a sub-directory
and can be selected as follow:

View file

@ -172,37 +172,32 @@
/* LED index values for use with efm32_setled() */
#define BOARD_LED1 0
#define BOARD_LED2 1
#define BOARD_LED3 2
#define BOARD_LED4 3
#define BOARD_LED0 0
#define BOARD_LED1 1
#define BOARD_LED2 2
#define BOARD_LED3 3
#define BOARD_NLEDS 4
#define BOARD_LED_GREEN BOARD_LED1
#define BOARD_LED_ORANGE BOARD_LED2
#define BOARD_LED_RED BOARD_LED3
#define BOARD_LED_BLUE BOARD_LED4
/* LED bits for use with efm32_setleds() */
#define BOARD_LED0_BIT (1 << BOARD_LED0)
#define BOARD_LED1_BIT (1 << BOARD_LED1)
#define BOARD_LED2_BIT (1 << BOARD_LED2)
#define BOARD_LED3_BIT (1 << BOARD_LED3)
#define BOARD_LED4_BIT (1 << BOARD_LED4)
/* If CONFIG_ARCH_LEDs is defined, then NuttX will control the 4 LEDs on
* board the EFM32 Gecko Starter Kit. The following definitions describe
* how NuttX controls the LEDs in this configuration:
*/
#define LED_STARTED 0 /* LED1 */
#define LED_HEAPALLOCATE 1 /* LED2 */
#define LED_IRQSENABLED 2 /* LED1 + LED2 */
#define LED_STACKCREATED 3 /* LED3 */
#define LED_INIRQ 4 /* LED1 + LED3 */
#define LED_SIGNAL 5 /* LED2 + LED3 */
#define LED_ASSERTION 6 /* LED1 + LED2 + LED3 */
#define LED_PANIC 7 /* N/C + N/C + N/C + LED4 */
#define LED_STARTED 0 /* LED0 */
#define LED_HEAPALLOCATE 1 /* LED1 */
#define LED_IRQSENABLED 2 /* LED0 + LED1 */
#define LED_STACKCREATED 3 /* LED2 */
#define LED_INIRQ 4 /* LED0 + LED2 */
#define LED_SIGNAL 5 /* LED1 + LED3 */
#define LED_ASSERTION 6 /* LED0 + LED2 + LED2 */
#define LED_PANIC 7 /* N/C + N/C + N/C + LED3 */
/* Pin routing **************************************************************/
/* UART0:
@ -211,6 +206,8 @@
* U0_TX #1 PE0 **AVAILABLE at TP129**
*/
#define BOARD_UART0_RX_GPIO (GPIO_PORTE|GPIO_PIN1)
#define BOARD_UART0_TX_GPIO (GPIO_PORTE|GPIO_PIN0)
#define BOARD_UART0_ROUTE_LOCATION _USART_ROUTE_LOCATION_LOC1
/****************************************************************************

View file

@ -139,9 +139,11 @@ CONFIG_EFM32_HAVE_USART2=y
CONFIG_EFM32_HAVE_UART0=y
# CONFIG_EFM32_HAVE_UART1 is not set
CONFIG_EFM32_HAVE_LEUART1=y
# CONFIG_EFM32_USART is not set
# CONFIG_EFM32_USART_ISUART is not set
# CONFIG_EFM32_USART_ISSPI is not set
CONFIG_EFM32_UART=y
# CONFIG_EFM32_LEUART is not set
# CONFIG_EFM32_DMA is not set
# CONFIG_EFM32_USART0 is not set
# CONFIG_EFM32_USART1 is not set
# CONFIG_EFM32_USART2 is not set
@ -399,6 +401,7 @@ CONFIG_ARCH_HAVE_UART0=y
#
CONFIG_MCU_SERIAL=y
CONFIG_STANDARD_SERIAL=y
# CONFIG_ARCH_HAVE_SERIAL_TERMIOS is not set
CONFIG_UART0_SERIAL_CONSOLE=y
# CONFIG_OTHER_SERIAL_CONSOLE is not set
# CONFIG_NO_SERIAL_CONSOLE is not set

View file

@ -78,13 +78,13 @@
* value to the LED.
*/
#define GPIO_LED1 (GPIO_OUTPUT_WIREDOR_PULLDOWN|\
#define GPIO_LED0 (GPIO_OUTPUT_WIREDOR_PULLDOWN|\
GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN0)
#define GPIO_LED2 (GPIO_OUTPUT_WIREDOR_PULLDOWN|\
#define GPIO_LED1 (GPIO_OUTPUT_WIREDOR_PULLDOWN|\
GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN1)
#define GPIO_LED3 (GPIO_OUTPUT_WIREDOR_PULLDOWN|\
#define GPIO_LED2 (GPIO_OUTPUT_WIREDOR_PULLDOWN|\
GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN2)
#define GPIO_LED4 (GPIO_OUTPUT_WIREDOR_PULLDOWN|\
#define GPIO_LED3 (GPIO_OUTPUT_WIREDOR_PULLDOWN|\
GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN3)
/****************************************************************************

View file

@ -72,10 +72,10 @@
/* The following definitions map the encoded LED setting to GPIO settings */
#define EFM32F4_LED1 (1 << 0)
#define EFM32F4_LED2 (1 << 1)
#define EFM32F4_LED3 (1 << 2)
#define EFM32F4_LED4 (1 << 3)
#define EFM32_LED0 (1 << 0)
#define EFM32_LED1 (1 << 1)
#define EFM32_LED2 (1 << 2)
#define EFM32_LED3 (1 << 3)
#define ON_SETBITS_SHIFT (0)
#define ON_CLRBITS_SHIFT (4)
@ -92,45 +92,45 @@
#define OFF_SETBITS(v) (SETBITS(OFF_BITS(v))
#define OFF_CLRBITS(v) (CLRBITS(OFF_BITS(v))
#define LED_STARTED_ON_SETBITS ((EFM32F4_LED1) << ON_SETBITS_SHIFT)
#define LED_STARTED_ON_CLRBITS ((EFM32F4_LED2|EFM32F4_LED3|EFM32F4_LED4) << ON_CLRBITS_SHIFT)
#define LED_STARTED_ON_SETBITS ((EFM32_LED0) << ON_SETBITS_SHIFT)
#define LED_STARTED_ON_CLRBITS ((EFM32_LED1|EFM32_LED2|EFM32_LED3) << ON_CLRBITS_SHIFT)
#define LED_STARTED_OFF_SETBITS (0 << OFF_SETBITS_SHIFT)
#define LED_STARTED_OFF_CLRBITS ((EFM32F4_LED1|EFM32F4_LED2|EFM32F4_LED3|EFM32F4_LED4) << OFF_CLRBITS_SHIFT)
#define LED_STARTED_OFF_CLRBITS ((EFM32_LED0|EFM32_LED1|EFM32_LED2|EFM32_LED3) << OFF_CLRBITS_SHIFT)
#define LED_HEAPALLOCATE_ON_SETBITS ((EFM32F4_LED2) << ON_SETBITS_SHIFT)
#define LED_HEAPALLOCATE_ON_CLRBITS ((EFM32F4_LED1|EFM32F4_LED3|EFM32F4_LED4) << ON_CLRBITS_SHIFT)
#define LED_HEAPALLOCATE_OFF_SETBITS ((EFM32F4_LED1) << OFF_SETBITS_SHIFT)
#define LED_HEAPALLOCATE_OFF_CLRBITS ((EFM32F4_LED2|EFM32F4_LED3|EFM32F4_LED4) << OFF_CLRBITS_SHIFT)
#define LED_HEAPALLOCATE_ON_SETBITS ((EFM32_LED1) << ON_SETBITS_SHIFT)
#define LED_HEAPALLOCATE_ON_CLRBITS ((EFM32_LED0|EFM32_LED2|EFM32_LED3) << ON_CLRBITS_SHIFT)
#define LED_HEAPALLOCATE_OFF_SETBITS ((EFM32_LED0) << OFF_SETBITS_SHIFT)
#define LED_HEAPALLOCATE_OFF_CLRBITS ((EFM32_LED1|EFM32_LED2|EFM32_LED3) << OFF_CLRBITS_SHIFT)
#define LED_IRQSENABLED_ON_SETBITS ((EFM32F4_LED1|EFM32F4_LED2) << ON_SETBITS_SHIFT)
#define LED_IRQSENABLED_ON_CLRBITS ((EFM32F4_LED3|EFM32F4_LED4) << ON_CLRBITS_SHIFT)
#define LED_IRQSENABLED_OFF_SETBITS ((EFM32F4_LED2) << OFF_SETBITS_SHIFT)
#define LED_IRQSENABLED_OFF_CLRBITS ((EFM32F4_LED1|EFM32F4_LED3|EFM32F4_LED4) << OFF_CLRBITS_SHIFT)
#define LED_IRQSENABLED_ON_SETBITS ((EFM32_LED0|EFM32_LED1) << ON_SETBITS_SHIFT)
#define LED_IRQSENABLED_ON_CLRBITS ((EFM32_LED2|EFM32_LED3) << ON_CLRBITS_SHIFT)
#define LED_IRQSENABLED_OFF_SETBITS ((EFM32_LED1) << OFF_SETBITS_SHIFT)
#define LED_IRQSENABLED_OFF_CLRBITS ((EFM32_LED0|EFM32_LED2|EFM32_LED3) << OFF_CLRBITS_SHIFT)
#define LED_STACKCREATED_ON_SETBITS ((EFM32F4_LED3) << ON_SETBITS_SHIFT)
#define LED_STACKCREATED_ON_CLRBITS ((EFM32F4_LED1|EFM32F4_LED2|EFM32F4_LED4) << ON_CLRBITS_SHIFT)
#define LED_STACKCREATED_OFF_SETBITS ((EFM32F4_LED1|EFM32F4_LED2) << OFF_SETBITS_SHIFT)
#define LED_STACKCREATED_OFF_CLRBITS ((EFM32F4_LED3|EFM32F4_LED4) << OFF_CLRBITS_SHIFT)
#define LED_STACKCREATED_ON_SETBITS ((EFM32_LED2) << ON_SETBITS_SHIFT)
#define LED_STACKCREATED_ON_CLRBITS ((EFM32_LED0|EFM32_LED1|EFM32_LED3) << ON_CLRBITS_SHIFT)
#define LED_STACKCREATED_OFF_SETBITS ((EFM32_LED0|EFM32_LED1) << OFF_SETBITS_SHIFT)
#define LED_STACKCREATED_OFF_CLRBITS ((EFM32_LED2|EFM32_LED3) << OFF_CLRBITS_SHIFT)
#define LED_INIRQ_ON_SETBITS ((EFM32F4_LED1) << ON_SETBITS_SHIFT)
#define LED_INIRQ_ON_SETBITS ((EFM32_LED0) << ON_SETBITS_SHIFT)
#define LED_INIRQ_ON_CLRBITS ((0) << ON_CLRBITS_SHIFT)
#define LED_INIRQ_OFF_SETBITS ((0) << OFF_SETBITS_SHIFT)
#define LED_INIRQ_OFF_CLRBITS ((EFM32F4_LED1) << OFF_CLRBITS_SHIFT)
#define LED_INIRQ_OFF_CLRBITS ((EFM32_LED0) << OFF_CLRBITS_SHIFT)
#define LED_SIGNAL_ON_SETBITS ((EFM32F4_LED2) << ON_SETBITS_SHIFT)
#define LED_SIGNAL_ON_SETBITS ((EFM32_LED1) << ON_SETBITS_SHIFT)
#define LED_SIGNAL_ON_CLRBITS ((0) << ON_CLRBITS_SHIFT)
#define LED_SIGNAL_OFF_SETBITS ((0) << OFF_SETBITS_SHIFT)
#define LED_SIGNAL_OFF_CLRBITS ((EFM32F4_LED2) << OFF_CLRBITS_SHIFT)
#define LED_SIGNAL_OFF_CLRBITS ((EFM32_LED1) << OFF_CLRBITS_SHIFT)
#define LED_ASSERTION_ON_SETBITS ((EFM32F4_LED4) << ON_SETBITS_SHIFT)
#define LED_ASSERTION_ON_SETBITS ((EFM32_LED3) << ON_SETBITS_SHIFT)
#define LED_ASSERTION_ON_CLRBITS ((0) << ON_CLRBITS_SHIFT)
#define LED_ASSERTION_OFF_SETBITS ((0) << OFF_SETBITS_SHIFT)
#define LED_ASSERTION_OFF_CLRBITS ((EFM32F4_LED4) << OFF_CLRBITS_SHIFT)
#define LED_ASSERTION_OFF_CLRBITS ((EFM32_LED3) << OFF_CLRBITS_SHIFT)
#define LED_PANIC_ON_SETBITS ((EFM32F4_LED4) << ON_SETBITS_SHIFT)
#define LED_PANIC_ON_SETBITS ((EFM32_LED3) << ON_SETBITS_SHIFT)
#define LED_PANIC_ON_CLRBITS ((0) << ON_CLRBITS_SHIFT)
#define LED_PANIC_OFF_SETBITS ((0) << OFF_SETBITS_SHIFT)
#define LED_PANIC_OFF_CLRBITS ((EFM32F4_LED4) << OFF_CLRBITS_SHIFT)
#define LED_PANIC_OFF_CLRBITS ((EFM32_LED3) << OFF_CLRBITS_SHIFT)
/****************************************************************************
* Private Data
@ -169,48 +169,48 @@ static const uint16_t g_ledbits[8] =
static inline void led_clrbits(unsigned int clrbits)
{
if ((clrbits & EFM32F4_LED1) != 0)
if ((clrbits & EFM32_LED0) != 0)
{
efm32_gpiowrite(GPIO_LED0, false);
}
if ((clrbits & EFM32_LED1) != 0)
{
efm32_gpiowrite(GPIO_LED1, false);
}
if ((clrbits & EFM32F4_LED2) != 0)
if ((clrbits & EFM32_LED2) != 0)
{
efm32_gpiowrite(GPIO_LED2, false);
}
if ((clrbits & EFM32F4_LED3) != 0)
if ((clrbits & EFM32_LED3) != 0)
{
efm32_gpiowrite(GPIO_LED3, false);
}
if ((clrbits & EFM32F4_LED4) != 0)
{
efm32_gpiowrite(GPIO_LED4, false);
}
}
static inline void led_setbits(unsigned int setbits)
{
if ((setbits & EFM32F4_LED1) != 0)
if ((setbits & EFM32_LED0) != 0)
{
efm32_gpiowrite(GPIO_LED0, true);
}
if ((setbits & EFM32_LED1) != 0)
{
efm32_gpiowrite(GPIO_LED1, true);
}
if ((setbits & EFM32F4_LED2) != 0)
if ((setbits & EFM32_LED2) != 0)
{
efm32_gpiowrite(GPIO_LED2, true);
}
if ((setbits & EFM32F4_LED3) != 0)
if ((setbits & EFM32_LED3) != 0)
{
efm32_gpiowrite(GPIO_LED3, true);
}
if ((setbits & EFM32F4_LED4) != 0)
{
efm32_gpiowrite(GPIO_LED4, true);
}
}
static void led_setonoff(unsigned int bits)
@ -229,12 +229,12 @@ static void led_setonoff(unsigned int bits)
void board_led_initialize(void)
{
/* Configure LED1-4 GPIOs for output */
/* Configure LED0-4 GPIOs for output */
efm32_configgpio(GPIO_LED0);
efm32_configgpio(GPIO_LED1);
efm32_configgpio(GPIO_LED2);
efm32_configgpio(GPIO_LED3);
efm32_configgpio(GPIO_LED4);
}
/****************************************************************************

View file

@ -78,7 +78,7 @@
static gpio_pinset_t g_ledcfg[BOARD_NLEDS] =
{
GPIO_LED1, GPIO_LED2, GPIO_LED3, GPIO_LED4
GPIO_LED0, GPIO_LED1, GPIO_LED2, GPIO_LED3
};
/****************************************************************************
@ -193,12 +193,12 @@ static int led_pm_prepare(struct pm_callback_s *cb , enum pm_state_e pmstate)
void efm32_ledinit(void)
{
/* Configure LED1-4 GPIOs for output */
/* Configure LED0-4 GPIOs for output */
efm32_configgpio(GPIO_LED0);
efm32_configgpio(GPIO_LED1);
efm32_configgpio(GPIO_LED2);
efm32_configgpio(GPIO_LED3);
efm32_configgpio(GPIO_LED4);
}
/****************************************************************************
@ -219,10 +219,10 @@ void efm32_setled(int led, bool ledon)
void efm32_setleds(uint8_t ledset)
{
efm32_gpiowrite(GPIO_LED1, (ledset & BOARD_LED1_BIT) == 0);
efm32_gpiowrite(GPIO_LED2, (ledset & BOARD_LED2_BIT) == 0);
efm32_gpiowrite(GPIO_LED3, (ledset & BOARD_LED3_BIT) == 0);
efm32_gpiowrite(GPIO_LED4, (ledset & BOARD_LED4_BIT) == 0);
efm32_gpiowrite(GPIO_LED0, (ledset & BOARD_LED0_BIT) != 0);
efm32_gpiowrite(GPIO_LED1, (ledset & BOARD_LED1_BIT) != 0);
efm32_gpiowrite(GPIO_LED2, (ledset & BOARD_LED2_BIT) != 0);
efm32_gpiowrite(GPIO_LED3, (ledset & BOARD_LED3_BIT) != 0);
}
/****************************************************************************

View file

@ -237,6 +237,8 @@
* U0_TX #1 PE0 **AVAILABLE at EXT-18**
*/
#define BOARD_UART0_RX_GPIO (GPIO_PORTE|GPIO_PIN1)
#define BOARD_UART0_TX_GPIO (GPIO_PORTE|GPIO_PIN0)
#define BOARD_UART0_ROUTE_LOCATION _USART_ROUTE_LOCATION_LOC1
/* LEUART1:
@ -245,6 +247,8 @@
* LEU1_TX #0 PC6 LEU1_TX to DB-9 connector
*/
#define BOARD_LEUART1_RX_GPIO (GPIO_PORTC|GPIO_PIN7)
#define BOARD_LEUART1_TX_GPIO (GPIO_PORTC|GPIO_PIN6)
#define BOARD_LEUART1_ROUTE_LOCATION _LEUART_ROUTE_LOCATION_LOC0
/****************************************************************************

View file

@ -76,6 +76,7 @@ CONFIG_ARCH="arm"
# CONFIG_ARCH_CHIP_C5471 is not set
# CONFIG_ARCH_CHIP_CALYPSO is not set
# CONFIG_ARCH_CHIP_DM320 is not set
# CONFIG_ARCH_CHIP_EFM32 is not set
# CONFIG_ARCH_CHIP_IMX is not set
# CONFIG_ARCH_CHIP_KINETIS is not set
# CONFIG_ARCH_CHIP_KL is not set
@ -120,7 +121,7 @@ CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW=y
# CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL is not set
# CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIW is not set
# CONFIG_ARMV7M_TOOLCHAIN_RAISONANCE is not set
# CONFIG_SERIAL_TERMIOS is not set
# CONFIG_ARMV7M_ITMSYSLOG is not set
#
# STM32 Configuration Options
@ -188,6 +189,7 @@ CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW=y
# CONFIG_ARCH_CHIP_STM32F303VB is not set
# CONFIG_ARCH_CHIP_STM32F303VC is not set
# CONFIG_ARCH_CHIP_STM32F401RE is not set
# CONFIG_ARCH_CHIP_STM32F411RE is not set
# CONFIG_ARCH_CHIP_STM32F405RG is not set
# CONFIG_ARCH_CHIP_STM32F405VG is not set
# CONFIG_ARCH_CHIP_STM32F405ZG is not set
@ -219,6 +221,7 @@ CONFIG_ARCH_CHIP_STM32F407VG=y
# CONFIG_STM32_STM32F30XX is not set
CONFIG_STM32_STM32F40XX=y
# CONFIG_STM32_STM32F401 is not set
# CONFIG_STM32_STM32F411 is not set
# CONFIG_STM32_STM32F405 is not set
CONFIG_STM32_STM32F407=y
# CONFIG_STM32_STM32F427 is not set
@ -259,6 +262,10 @@ CONFIG_STM32_HAVE_CAN1=y
CONFIG_STM32_HAVE_CAN2=y
CONFIG_STM32_HAVE_RNG=y
CONFIG_STM32_HAVE_ETHMAC=y
CONFIG_STM32_HAVE_SPI2=y
CONFIG_STM32_HAVE_SPI3=y
# CONFIG_STM32_HAVE_SPI4 is not set
# CONFIG_STM32_HAVE_SPI5 is not set
# CONFIG_STM32_ADC1 is not set
# CONFIG_STM32_ADC2 is not set
# CONFIG_STM32_ADC3 is not set
@ -340,7 +347,15 @@ CONFIG_STM32_USART=y
# CONFIG_STM32_SPI_DMA is not set
#
# USB Host Configuration
# USB FS Host Configuration
#
#
# USB HS Host Configuration
#
#
# USB Host Debug Configuration
#
#
@ -424,6 +439,7 @@ CONFIG_NSH_MMCSDMINOR=0
#
# Board-Specific Options
#
# CONFIG_STM32F4DISBB is not set
#
# RTOS Features
@ -453,6 +469,9 @@ CONFIG_PREALLOC_TIMERS=4
#
# Tasks and Scheduling
#
# CONFIG_INIT_NONE is not set
CONFIG_INIT_ENTRYPOINT=y
# CONFIG_INIT_FILEPATH is not set
CONFIG_USER_ENTRYPOINT="nsh_main"
CONFIG_RR_INTERVAL=200
CONFIG_TASK_NAME_SIZE=0
@ -507,6 +526,13 @@ CONFIG_SIG_SIGCONDTIMEDOUT=16
CONFIG_PREALLOC_MQ_MSGS=4
CONFIG_MQ_MAXMSGSIZE=32
#
# Work Queue Support
#
# CONFIG_SCHED_WORKQUEUE is not set
# CONFIG_SCHED_HPWORK is not set
# CONFIG_SCHED_LPWORK is not set
#
# Stack and heap information
#
@ -581,6 +607,7 @@ CONFIG_ARCH_HAVE_USART2=y
# CONFIG_ARCH_HAVE_USART6 is not set
# CONFIG_ARCH_HAVE_USART7 is not set
# CONFIG_ARCH_HAVE_USART8 is not set
# CONFIG_ARCH_HAVE_OTHER_UART is not set
#
# USART Configuration
@ -588,7 +615,10 @@ CONFIG_ARCH_HAVE_USART2=y
CONFIG_USART2_ISUART=y
CONFIG_MCU_SERIAL=y
CONFIG_STANDARD_SERIAL=y
CONFIG_ARCH_HAVE_SERIAL_TERMIOS=y
# CONFIG_SERIAL_TERMIOS is not set
CONFIG_USART2_SERIAL_CONSOLE=y
# CONFIG_OTHER_SERIAL_CONSOLE is not set
# CONFIG_NO_SERIAL_CONSOLE is not set
#
@ -641,6 +671,8 @@ CONFIG_USART2_2STOP=0
# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set
# CONFIG_FS_READABLE is not set
# CONFIG_FS_WRITABLE is not set
# CONFIG_FS_NAMED_SEMAPHORES is not set
CONFIG_FS_MQUEUE_MPATH="/var/mqueue"
# CONFIG_FS_RAMMAP is not set
# CONFIG_FS_FAT is not set
# CONFIG_FS_NXFFS is not set
@ -652,7 +684,6 @@ CONFIG_USART2_2STOP=0
#
# System Logging
#
# CONFIG_SYSLOG is not set
#
@ -674,7 +705,7 @@ CONFIG_MM_REGIONS=2
# CONFIG_AUDIO is not set
#
# Binary Formats
# Binary Loader
#
# CONFIG_BINFMT_DISABLE is not set
# CONFIG_BINFMT_EXEPATH is not set
@ -717,7 +748,6 @@ CONFIG_LIB_SENDFILE_BUFSIZE=512
#
# Non-standard Library Support
#
# CONFIG_SCHED_WORKQUEUE is not set
# CONFIG_LIB_KBDCODEC is not set
# CONFIG_LIB_SLCDCODEC is not set