diff options
Diffstat (limited to 'nuttx/arch/arm/src/efm32/efm32_start.c')
-rw-r--r-- | nuttx/arch/arm/src/efm32/efm32_start.c | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/nuttx/arch/arm/src/efm32/efm32_start.c b/nuttx/arch/arm/src/efm32/efm32_start.c deleted file mode 100644 index 2b75930fb..000000000 --- a/nuttx/arch/arm/src/efm32/efm32_start.c +++ /dev/null @@ -1,223 +0,0 @@ -/**************************************************************************** - * arch/arm/src/efm32/efm32_start.c - * - * Copyright (C) 2009, 2011-2014 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 <assert.h> -#include <debug.h> -#include <nuttx/init.h> -#include <arch/board/board.h> -#include <arch/efm32/chip.h> - -#include "up_arch.h" -#include "up_internal.h" -#include "efm32_lowputc.h" - -#include "em_device.h" -#include "em_cmu.h" - -/**************************************************************************** - * Private Function prototypes - ****************************************************************************/ - -#ifdef CONFIG_DEBUG_STACK -static void go_os_start(void *pv, unsigned int nbytes) - __attribute__ ((naked,no_instrument_function,noreturn)); -#endif - -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: showprogress - * - * Description: - * Print a character on the UART to show boot status. - * - ****************************************************************************/ - -#ifdef CONFIG_DEBUG -# define showprogress(c) up_lowputc(c) -#else -# define showprogress(c) -#endif - -/**************************************************************************** - * Name: go_os_start - * - * Description: - * Set the IDLE stack to the - * - ****************************************************************************/ - -#ifdef CONFIG_DEBUG_STACK -static void go_os_start(void *pv, unsigned int nbytes) -{ - /* Set the IDLE stack to the stack coloration value then jump to - * os_start(). We take extreme care here because were currently - * executing on this stack. - * - * We want to avoid sneak stack access generated by the compiler. - */ - - __asm__ __volatile__ - ( - "\tmov r1, r1, lsr #2\n" /* R1 = nwords = nbytes >> 2 */ - "\tbeq 2f\n" /* (should not happen) */ - - "\tbic r0, r0, #3\n" /* R0 = Aligned stackptr */ - "\tmovw r2, #0xbeef\n" /* R2 = STACK_COLOR = 0xdeadbeef */ - "\tmovt r2, #0xdead\n" - - "1:\n" /* Top of the loop */ - "\tsub r1, r1, #1\n" /* R1 nwords-- */ - "\tcmp r1, #0\n" /* Check (nwords == 0) */ - "\tstr r2, [r0], #4\n" /* Save stack color word, increment stackptr */ - "\tbne 1b\n" /* Bottom of the loop */ - - "2:\n" - "\tmov r14, #0\n" /* LR = return address (none) */ - "\tb os_start\n" /* Branch to os_start */ - ); -} -#endif - -static void efm32_clockconfig(void) -{ - /* Devices boots with 14 MHz HFRCO as the HFCLK source. */ - /* Enable the GPIO clock. */ - CMU_ClockEnable(cmuClock_GPIO, true); -} - -static void efm32_gpioinit(void) -{ -} - -/**************************************************************************** - * Public Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: _start - * - * Description: - * This is the reset entry point. - * - ****************************************************************************/ - -void __start(void) -{ - const uint32_t *src; - uint32_t *dest; - - /* Configure the uart so that we can get debug output as soon as possible */ - - efm32_clockconfig(); - efm32_lowsetup(); - efm32_gpioinit(); - - showprogress('A'); - - /* Clear .bss. We'll do this inline (vs. calling memset) just to be - * certain that there are no issues with the state of global variables. - */ - - for (dest = &_sbss; dest < &_ebss; ) - { - *dest++ = 0; - } - - showprogress('B'); - - /* Move the initialized data section from his temporary holding spot in - * FLASH into the correct place in SRAM. The correct place in SRAM is - * give by _sdata and _edata. The temporary location is in FLASH at the - * end of all of the other read-only data (.text, .rodata) at _eronly. - */ - - for (src = &_eronly, dest = &_sdata; dest < &_edata; ) - { - *dest++ = *src++; - } - - showprogress('C'); - - /* Perform early serial initialization */ - -#ifdef USE_EARLYSERIALINIT - up_earlyserialinit(); -#endif - showprogress('D'); - - /* For the case of the separate user-/kernel-space build, perform whatever - * platform specific initialization of the user memory is required. - * Normally this just means initializing the user space .data and .bss - * segments. - */ - -#ifdef CONFIG_NUTTX_KERNEL - efm32_userspace(); - showprogress('E'); -#endif - - /* Initialize onboard resources */ - - efm32_boardinitialize(); - showprogress('F'); - - /* Then start NuttX */ - - showprogress('\r'); - showprogress('\n'); - -#ifdef CONFIG_DEBUG_STACK - /* Set the IDLE stack to the coloration value and jump into os_start() */ - - go_os_start((FAR void *)&_ebss, CONFIG_IDLETHREAD_STACKSIZE); -#else - /* Call os_start() */ - - os_start(); - - /* Shoulnd't get here */ - - for(;;); -#endif -} |