Modified fomat and add low power
This commit is contained in:
parent
0266967898
commit
e8eaaed1fe
|
@ -1,5 +1,45 @@
|
|||
Apollo2 MCU是基于Ambiq Micro的Apollo MCU产品系列的第二代控制器。
|
||||
Ambiq使用专利亚阈值功率优化技术(Subthreshold Power Optimized Technology, SPOT)平台来实现惊人的功耗降低,其功耗通常比性能相近的其它MCU产品降低5至10倍。
|
||||
Apollo2 MCU采用32位ARM Cortex-M4F微控制器,集成了高达1 MB的闪存和256 KB的RAM,以适应无线电和传感器开销,同时仍留有足够的应用代码空间。
|
||||
Ambiq使用专利亚阈值功率优化技术(Subthreshold Power Optimized Technology, SPOT)平台来实现惊人的功耗降低,其功耗通常比性能相近的其它MCU产品降低5至10倍。
|
||||
Apollo2 MCU采用32位ARM Cortex-M4F微控制器,集成了高达1 MB的闪存和256 KB的RAM,以适应无线电和传感器开销,同时仍留有足够的应用代码空间。该微控制器还包括串行主机和UART端口,用于与无线电和传感器通信,包括加速度计,陀螺仪和磁力计。
|
||||
|
||||
board info:Apollo2 Evaluation Board(http://ambiqmicro.com/apollo-ultra-low-power-mcu/apollo2-mcu-20170703/)
|
||||
Features
|
||||
Ultra-low supply current
|
||||
10 μA/MHz executing from flash at 3.3 V
|
||||
10 μA/MHz executing from RAM at 3.3 V
|
||||
|
||||
High-performance ARM Cortex-M4 Processor
|
||||
Up to 48 MHz clock frequency
|
||||
Floating point unit
|
||||
Memory protection unit
|
||||
Wake-up interrupt controller with 32 interrupts
|
||||
|
||||
Ultra-low power memory:
|
||||
Up to 1 MB of flash memory for code/data
|
||||
Up to 256 KB of low leakage RAM for code/data
|
||||
16kB 1 or 2-way Associative Cache
|
||||
|
||||
Ultra-low power interface for off-chip sensors:
|
||||
14 bit, 15-channel, up to 1.2 MS/s ADC
|
||||
Voltage Comparator
|
||||
Temperature sensor with +/-2C accuracy
|
||||
|
||||
Flexible serial peripherals:
|
||||
6x I2C/SPI master for communication with sensors,?radios, and other peripherals
|
||||
1x I2C/SPI slave for host communications
|
||||
2x UART for communication with peripherals and?legacy devices
|
||||
PDM for mono and stereo audio microphone
|
||||
|
||||
Rich set of clock sources:
|
||||
32.768 kHz XTAL oscillator
|
||||
Low frequency RC oscillator – 1.024 kHz
|
||||
High frequency RC oscillator – 48 MHz
|
||||
RTC based on Ambiq’s AM08X5/18X5 families
|
||||
|
||||
Wide operating range: 1.8-3.6 V, –40 to 85°C
|
||||
|
||||
Compact package options:
|
||||
2.5 x 2.5 mm 49-pin CSP with 34 GPIO
|
||||
4.5 x 4.5 mm 64-pin BGA with 50 GPIO
|
||||
|
||||
Board info
|
||||
Apollo2 Evaluation Board(http://ambiqmicro.com/apollo-ultra-low-power-mcu/apollo2-mcu-20170703/)
|
Binary file not shown.
After Width: | Height: | Size: 291 KiB |
|
@ -2,8 +2,8 @@ Import('RTT_ROOT')
|
|||
Import('rtconfig')
|
||||
from building import *
|
||||
|
||||
cwd = os.path.join(str(Dir('#')), 'applications')
|
||||
src = Glob('*.c')
|
||||
cwd = os.path.join(str(Dir('#')), 'applications')
|
||||
src = Glob('*.c')
|
||||
CPPPATH = [cwd, str(Dir('#'))]
|
||||
|
||||
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* File : application.c
|
||||
* File : main.c
|
||||
* This file is part of RT-Thread RTOS
|
||||
* COPYRIGHT (C) 2006 - 2017, RT-Thread Development Team
|
||||
*
|
||||
|
@ -23,7 +23,7 @@
|
|||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef RT_USING_FINSH
|
||||
#include <finsh.h>
|
||||
#include <shell.h>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
@ -69,15 +88,6 @@ void SysTick_Configuration(void)
|
|||
AM_HAL_STIMER_CFG_COMPARE_A_ENABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
/*@}*/
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -16,14 +16,14 @@
|
|||
|
||||
/* SECTION: RT_DEBUG */
|
||||
/* Thread Debug */
|
||||
#define RT_DEBUG
|
||||
//#define RT_DEBUG
|
||||
//#define RT_DEBUG_INIT 1
|
||||
#define RT_USING_OVERFLOW_CHECK
|
||||
//#define RT_USING_OVERFLOW_CHECK
|
||||
|
||||
/* Using Hook */
|
||||
//#define RT_USING_HOOK
|
||||
|
||||
//#define RT_USING_IDLE_HOOK
|
||||
#define RT_USING_IDLE_HOOK
|
||||
|
||||
#define IDLE_THREAD_STACK_SIZE 384
|
||||
|
||||
|
@ -60,6 +60,9 @@
|
|||
#define RT_USING_SMALL_MEM
|
||||
#define RT_USING_TINY_SIZE
|
||||
|
||||
/* Using USER MAIN */
|
||||
#define RT_USING_USER_MAIN
|
||||
|
||||
// <bool name="RT_USING_COMPONENTS_INIT" description="Using RT-Thread components initialization" default="true" />
|
||||
#define RT_USING_COMPONENTS_INIT
|
||||
|
||||
|
@ -78,13 +81,16 @@
|
|||
// <string name="RT_CONSOLE_DEVICE_NAME" description="The device name for console" default="uart1" />
|
||||
#define RT_CONSOLE_DEVICE_NAME "uart0"
|
||||
|
||||
/* Using GPIO pin framework */
|
||||
#define RT_USING_PIN
|
||||
|
||||
// #define RT_USING_SPI
|
||||
|
||||
/* SECTION: finsh, a C-Express shell */
|
||||
#define RT_USING_FINSH
|
||||
/* configure finsh parameters */
|
||||
#define FINSH_THREAD_PRIORITY 6
|
||||
#define FINSH_THREAD_STACK_SIZE 512
|
||||
#define FINSH_THREAD_STACK_SIZE 1024
|
||||
#define FINSH_HISTORY_LINES 1
|
||||
/* Using symbol table */
|
||||
#define FINSH_USING_SYMTAB
|
||||
|
|
Loading…
Reference in New Issue