summaryrefslogtreecommitdiff
path: root/bsp/apollo2/board
diff options
context:
space:
mode:
authorlin <[email protected]>2017-09-20 11:14:45 +0800
committerlin <[email protected]>2017-09-20 11:14:45 +0800
commite8eaaed1fea72444d91012e24951669f818c123a (patch)
tree05169ec041708bbf80da68e55020aceb8cc03172 /bsp/apollo2/board
parent026696789813cededdd0539dd84fea8f7a71602e (diff)
Modified fomat and add low power
Diffstat (limited to 'bsp/apollo2/board')
-rw-r--r--bsp/apollo2/board/Sconscript4
-rw-r--r--bsp/apollo2/board/board.c111
-rw-r--r--bsp/apollo2/board/board.h33
-rw-r--r--bsp/apollo2/board/led.c9
4 files changed, 113 insertions, 44 deletions
diff --git a/bsp/apollo2/board/Sconscript b/bsp/apollo2/board/Sconscript
index aa1e87d860..2f2dc9eb48 100644
--- a/bsp/apollo2/board/Sconscript
+++ b/bsp/apollo2/board/Sconscript
@@ -2,8 +2,8 @@ Import('RTT_ROOT')
Import('rtconfig')
from building import *
-cwd = GetCurrentDir()
-src = Glob('*.c')
+cwd = GetCurrentDir()
+src = Glob('*.c')
CPPPATH = [cwd]
#remove other no use files
diff --git a/bsp/apollo2/board/board.c b/bsp/apollo2/board/board.c
index 8e1c3b8e88..d9e202570b 100644
--- a/bsp/apollo2/board/board.c
+++ b/bsp/apollo2/board/board.c
@@ -1,11 +1,21 @@
/*
* File : board.c
* This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2009 RT-Thread Develop Team
+ * COPYRIGHT (C) 2006 - 2017, RT-Thread Development Team
*
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rt-thread.org/license/LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Change Logs:
* Date Author Notes
@@ -19,11 +29,23 @@
#include "am_mcu_apollo.h"
#include "hal/am_hal_clkgen.h"
#include "hal/am_hal_cachectrl.h"
-#include "hw_uart.h"
+#include "uart.h"
+#include "led.h"
+
+#ifdef __CC_ARM
+extern int Image$$RW_IRAM1$$ZI$$Limit;
+#define AM_SRAM_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit)
+#elif __ICCARM__
+#pragma section="HEAP"
+#define AM_SRAM_BEGIN (__segment_end("HEAP"))
+#else
+extern int __bss_end;
+#define NRF_SRAM_BEGIN (&__bss_end)
+#endif
#define TICK_RATE_HZ RT_TICK_PER_SECOND
#define SYSTICK_CLOCK_HZ ( 32768UL )
-#define WAKE_INTERVAL ( (uint32_t) ((SYSTICK_CLOCK_HZ / TICK_RATE_HZ)) )
+#define WAKE_INTERVAL ( (uint32_t) ((SYSTICK_CLOCK_HZ / TICK_RATE_HZ)))
/**
* This is the timer interrupt service routine.
@@ -34,16 +56,16 @@ void am_stimer_cmpr0_isr(void)
/* Check the timer interrupt status */
am_hal_stimer_int_clear(AM_HAL_STIMER_INT_COMPAREA);
am_hal_stimer_compare_delta_set(0, WAKE_INTERVAL);
-
+
if (rt_thread_self() != RT_NULL)
{
- /* enter interrupt */
- rt_interrupt_enter();
+ /* enter interrupt */
+ rt_interrupt_enter();
- rt_tick_increase();
+ rt_tick_increase();
- /* leave interrupt */
- rt_interrupt_leave();
+ /* leave interrupt */
+ rt_interrupt_leave();
}
}
@@ -53,13 +75,10 @@ void am_stimer_cmpr0_isr(void)
*/
void SysTick_Configuration(void)
{
- /* Set the main clk */
- am_hal_clkgen_sysclk_select(AM_HAL_CLKGEN_SYSCLK_MAX);
-
/* Enable compare A interrupt in STIMER */
am_hal_stimer_int_enable(AM_HAL_STIMER_INT_COMPAREA);
- /* Enable the timer interrupt in the NVIC */
+ /* Enable the timer interrupt in the NVIC, making sure to use the appropriate priority level */
am_hal_interrupt_enable(AM_HAL_INTERRUPT_STIMER_CMPR0);
/* Configure the STIMER and run */
@@ -70,15 +89,6 @@ void SysTick_Configuration(void)
}
/**
- * This is the CacheCtrl Enable.
- *
- */
-void CacheCtrl_Enable(void)
-{
- am_hal_cachectrl_enable(&am_hal_cachectrl_defaults);
-}
-
-/**
* This is the low power operation.
* This function enables several power-saving features of the MCU, and
* disables some of the less-frequently used peripherals. It also sets the
@@ -100,7 +110,7 @@ void am_low_power_init(void)
/* Stop the XT and LFRC */
am_hal_clkgen_osc_stop(AM_HAL_CLKGEN_OSC_XT);
- // am_hal_clkgen_osc_stop(AM_HAL_CLKGEN_OSC_LFRC);
+ am_hal_clkgen_osc_stop(AM_HAL_CLKGEN_OSC_LFRC);
/* Disable the RTC */
am_hal_rtc_osc_disable();
@@ -112,7 +122,11 @@ void am_low_power_init(void)
*/
void deep_power_save(void)
{
- am_hal_sysctrl_sleep(AM_HAL_SYSCTRL_SLEEP_DEEP);
+ am_hal_interrupt_master_disable();
+
+ am_hal_sysctrl_sleep(AM_HAL_SYSCTRL_SLEEP_DEEP);
+
+ am_hal_interrupt_master_enable();
}
/**
@@ -120,27 +134,48 @@ void deep_power_save(void)
*/
void rt_hw_board_init(void)
{
- /* Set the clock frequency */
- SysTick_Configuration();
-
- /* Set the default cache configuration */
- CacheCtrl_Enable();
+ /* Set the system clock to maximum frequency */
+ am_hal_clkgen_sysclk_select(AM_HAL_CLKGEN_SYSCLK_MAX);
+
+ /* Set the default cache configuration */
+ am_hal_cachectrl_enable(&am_hal_cachectrl_defaults);
/* Configure the board for low power operation */
- //am_low_power_init();
-
-#ifdef RT_USING_IDLE_HOOK
- rt_thread_idle_sethook(deep_power_save);
+ am_low_power_init();
+
+ /* Config SysTick */
+ SysTick_Configuration();
+
+#ifdef RT_USING_IDLE_HOOK
+ /* Set sleep deep mode */
+ rt_thread_idle_sethook(deep_power_save);
+
+#ifndef NO_FPU
+ /* Enable the floating point module, and configure the core for lazy stacking */
+ am_hal_sysctrl_fpu_enable();
+ am_hal_sysctrl_fpu_stacking_enable(true);
+#else
+ am_hal_sysctrl_fpu_disable();
+#endif
+
+ /* Turn off unused Flash & SRAM */
+ am_hal_pwrctrl_memory_enable(AM_HAL_PWRCTRL_MEMEN_FLASH512K);
+ am_hal_pwrctrl_memory_enable(AM_HAL_PWRCTRL_MEMEN_SRAM32K);
+
#endif
-
+
#ifdef RT_USING_CONSOLE
- rt_hw_uart_init();
+ rt_hw_uart_init();
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
+
+#ifdef RT_USING_HEAP
+ rt_system_heap_init((void*)AM_SRAM_BEGIN, (void*)AM_SRAM_END);
+#endif
}
/*@}*/
diff --git a/bsp/apollo2/board/board.h b/bsp/apollo2/board/board.h
index 8bafd7dfa2..a93892c3b2 100644
--- a/bsp/apollo2/board/board.h
+++ b/bsp/apollo2/board/board.h
@@ -1,16 +1,45 @@
+/*
+ * File : board.h
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2006 - 2017, RT-Thread Development Team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2017-09-14 Haley first implementation
+ */
#ifndef __BOARD_H_
#define __BOARD_H_
#include <rtthread.h>
// <o> Internal SRAM memory size[Kbytes] <8-256>
-// <i>Default: 256
+// <i>Default: 256
#define AM_SRAM_SIZE 256
#define AM_SRAM_END (0x10000000 + AM_SRAM_SIZE * 1024)
/* USART driver select. */
#define RT_USING_UART0
-#define RT_USING_UART1
+//#define RT_USING_UART1
+
+/* LED driver select. */
+#define RT_USING_LED0
+//#define RT_USING_LED1
+//#define RT_USING_LED2
+//#define RT_USING_LED3
void rt_hw_board_init(void);
diff --git a/bsp/apollo2/board/led.c b/bsp/apollo2/board/led.c
index bb8d1e1532..1cf68b5605 100644
--- a/bsp/apollo2/board/led.c
+++ b/bsp/apollo2/board/led.c
@@ -43,6 +43,7 @@
*/
void rt_hw_led_on(rt_uint8_t LEDNum)
{
+#ifdef RT_USING_PIN
if(LEDNum == 0)
rt_pin_write(AM_GPIO_LED0, PIN_LOW);
@@ -54,6 +55,7 @@ void rt_hw_led_on(rt_uint8_t LEDNum)
else if(LEDNum == 3)
rt_pin_write(AM_GPIO_LED3, PIN_LOW);
+#endif
}
/**
@@ -67,6 +69,7 @@ void rt_hw_led_on(rt_uint8_t LEDNum)
*/
void rt_hw_led_off(rt_uint8_t LEDNum)
{
+#ifdef RT_USING_PIN
if(LEDNum == 0)
rt_pin_write(AM_GPIO_LED0, PIN_HIGH);
@@ -78,6 +81,7 @@ void rt_hw_led_off(rt_uint8_t LEDNum)
else if(LEDNum == 3)
rt_pin_write(AM_GPIO_LED3, PIN_HIGH);
+#endif
}
/**
@@ -91,6 +95,7 @@ void rt_hw_led_off(rt_uint8_t LEDNum)
*/
int rt_hw_led_init(void)
{
+#ifdef RT_USING_PIN
#if defined(RT_USING_LED0)
/* config led */
rt_pin_mode(AM_GPIO_LED0, PIN_MODE_OUTPUT);
@@ -122,10 +127,10 @@ int rt_hw_led_init(void)
/* turns off the led */
rt_hw_led_off(3);
#endif /* RT_USING_LED1 */
-
+#endif
return 0;
}
-#ifdef RT_USING_PIN
+#ifdef RT_USING_COMPONENTS_INIT
INIT_BOARD_EXPORT(rt_hw_led_init);
#endif