mirror of
https://github.com/espressif/openthread.git
synced 2026-09-09 02:30:11 +00:00
[efr32] update to Silicon Labs SDK v2.7 (#4447)
Updated makefiles for v2.7 SDK Replaced RAIL timers with sleeptimers.
This commit is contained in:
committed by
Jonathan Hui
parent
b87545f0c8
commit
73e30d1d7b
@@ -26,6 +26,8 @@
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
export SDKVERSION ?= v2.7
|
||||
|
||||
.NOTPARALLEL:
|
||||
|
||||
AR = arm-none-eabi-ar
|
||||
@@ -89,12 +91,12 @@ EFR32_MBEDTLS_CPPFLAGS = -DMBEDTLS_CONFIG_FILE='\"mbedtls-config.h\"'
|
||||
EFR32_MBEDTLS_CPPFLAGS += -DMBEDTLS_USER_CONFIG_FILE='\"efr32-mbedtls-config.h\"'
|
||||
EFR32_MBEDTLS_CPPFLAGS += -D$(MCU)
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/examples/platforms/efr32mg12/crypto
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/util/third_party/mbedtls/configs
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/CMSIS/Include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/util/third_party/mbedtls/sl_crypto/include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/Device/SiliconLabs/EFR32MG12P/Include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/emlib/inc
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/radio/rail_lib/chip/efr32/efr32xg1x
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/configs
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/CMSIS/Include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/sl_crypto/include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/Device/SiliconLabs/EFR32MG12P/Include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/emlib/inc
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/radio/rail_lib/chip/efr32/efr32xg1x
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/mbedtls
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/mbedtls/repo/include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/mbedtls/repo/include/mbedtls
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
export SDKVERSION ?= v2.7
|
||||
|
||||
.NOTPARALLEL:
|
||||
|
||||
AR = arm-none-eabi-ar
|
||||
@@ -74,13 +76,13 @@ EFR32_MBEDTLS_CPPFLAGS = -DMBEDTLS_CONFIG_FILE='\"mbedtls-config.h\"'
|
||||
EFR32_MBEDTLS_CPPFLAGS += -DMBEDTLS_USER_CONFIG_FILE='\"efr32-mbedtls-config.h\"'
|
||||
EFR32_MBEDTLS_CPPFLAGS += -D$(MCU)
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/examples/platforms/efr32mg21/crypto
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/util/third_party/mbedtls/configs
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/CMSIS/Include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/util/third_party/mbedtls/sl_crypto/include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/Device/SiliconLabs/EFR32MG21/Include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/emlib/inc
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/radio/rail_lib/chip/efr32/efr32xg2x
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/v2.6/hardware/kit/common/drivers
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/configs
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/CMSIS/Include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/sl_crypto/include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/Device/SiliconLabs/EFR32MG21/Include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/emlib/inc
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/radio/rail_lib/chip/efr32/efr32xg2x
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/hardware/kit/common/drivers
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/mbedtls
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/mbedtls/repo/include
|
||||
EFR32_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/mbedtls/repo/include/mbedtls
|
||||
|
||||
@@ -44,10 +44,10 @@ override CXXFLAGS := $(filter-out -Wundef,$(CXXFLAGS)
|
||||
|
||||
EFR32_BOARD_DIR = $(shell echo $(BOARD) | tr A-Z a-z)
|
||||
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)
|
||||
|
||||
libopenthread_efr32mg12_a_CPPFLAGS = \
|
||||
-DPLATFORM_HEADER=\"@top_builddir@/third_party/silabs/gecko_sdk_suite/v2.6/platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-DPLATFORM_HEADER=\"platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-DNVIC_CONFIG=\"platform/base/hal/micro/cortexm3/efm32/nvic-config.h\" \
|
||||
-Wno-sign-compare \
|
||||
-DCORTEXM3 \
|
||||
@@ -84,9 +84,12 @@ libopenthread_efr32mg12_a_CPPFLAGS =
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/ustimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/rtcdrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emlib/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/halconfig/inc/hal-config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/common/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/mpu/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/util/plugin/plugin-common/fem-control \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-missing-field-initializers \
|
||||
|
||||
@@ -40,9 +40,9 @@ fi )
|
||||
LDADD_COMMON += \
|
||||
$(top_builddir)/examples/platforms/efr32mg12/libopenthread-efr32mg12.a \
|
||||
$(top_builddir)/third_party/silabs/libsilabs-efr32mg12-sdk.a \
|
||||
$(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/radio/rail_lib/autogen/librail_release/$(LIBRAIL) \
|
||||
$(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/radio/rail_lib/autogen/librail_release/$(LIBRAIL) \
|
||||
$(NULL)
|
||||
|
||||
LDFLAGS_COMMON += \
|
||||
-T $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/efr32mg12p.ld \
|
||||
-T $(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/efr32mg12p.ld \
|
||||
$(NULL)
|
||||
|
||||
@@ -40,8 +40,8 @@ $ ./script/bootstrap
|
||||
|
||||
2. Install Flex (Gecko) SDK including RAIL Library from Simplicity Studio.
|
||||
- Connect EFR32MG12P Wireless Starter Kit to Simplicity Studio.
|
||||
- Find Flex SDK v2.6 in the Software Update page and click Install.
|
||||
- Flex SDK v2.6 will be installed in the path: `/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite`.
|
||||
- Find Flex SDK v2.7 in the Software Update page and click Install.
|
||||
- Flex SDK v2.7 will be installed in the path: `/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite`.
|
||||
|
||||
For more information on configuring, building, and installing applications for the Wireless Gecko (EFR32)
|
||||
portfolio using FLEX, see [Getting Started with the Silicon Labs Flex Software Development Kit for the
|
||||
@@ -263,4 +263,4 @@ The following toolchain has been used for testing and verification:
|
||||
- gcc version 7.3.1
|
||||
|
||||
The EFR32 example has been verified with following Flex SDK/RAIL Library version:
|
||||
- Flex SDK version 2.6.0.0
|
||||
- Flex SDK version 2.7.0.0
|
||||
|
||||
@@ -47,61 +47,34 @@
|
||||
|
||||
#include "em_core.h"
|
||||
#include "rail.h"
|
||||
#include "sl_sleeptimer.h"
|
||||
|
||||
#define XTAL_ACCURACY 200
|
||||
#define US_IN_MS 1000
|
||||
|
||||
// Minimum duration of an alarm in milliseconds. Used to avoid setting the absolute
|
||||
// expiry time of an alarm to the current time or slightly in the past.
|
||||
#define TIMER_EPSILON_MS 1
|
||||
static sl_sleeptimer_timer_handle_t sl_handle;
|
||||
static uint32_t sAlarm = 0;
|
||||
static bool sIsRunning = false;
|
||||
|
||||
// The longest Rail can set a timer is 53 minutes. Timers of a longer duration
|
||||
// must wake up before this and set another timer for the remainder. We currently
|
||||
// split long delays in 30 minute intervals using a value of 1800000.
|
||||
#define RAIL_TIMER_MAX_DELTA_MS 1800000
|
||||
|
||||
static uint32_t sTimerHi = 0;
|
||||
static uint32_t sTimerLo = 0;
|
||||
static uint32_t sAlarmT0 = 0;
|
||||
static uint32_t sAlarmDt = 0;
|
||||
static bool sIsRunning = false;
|
||||
|
||||
static void RAILCb_TimerExpired(RAIL_Handle_t aHandle)
|
||||
static void AlarmCallback(sl_sleeptimer_timer_handle_t *aHandle, void *aData)
|
||||
{
|
||||
otSysEventSignalPending();
|
||||
}
|
||||
|
||||
void efr32AlarmInit(void)
|
||||
{
|
||||
}
|
||||
|
||||
uint64_t otPlatTimeGet(void)
|
||||
{
|
||||
uint32_t timer_lo;
|
||||
uint64_t timer_us;
|
||||
|
||||
CORE_DECLARE_IRQ_STATE;
|
||||
CORE_ENTER_CRITICAL();
|
||||
|
||||
timer_lo = RAIL_GetTime();
|
||||
|
||||
if (timer_lo < sTimerLo)
|
||||
{
|
||||
sTimerHi++;
|
||||
}
|
||||
|
||||
sTimerLo = timer_lo;
|
||||
|
||||
timer_us = (((uint64_t)sTimerHi << 32) | sTimerLo);
|
||||
|
||||
CORE_EXIT_CRITICAL();
|
||||
|
||||
return timer_us;
|
||||
memset(&sl_handle, 0, sizeof sl_handle);
|
||||
}
|
||||
|
||||
uint32_t otPlatAlarmMilliGetNow(void)
|
||||
{
|
||||
return otPlatTimeGet() / US_IN_MS;
|
||||
uint64_t ticks;
|
||||
uint64_t now;
|
||||
sl_status_t status;
|
||||
|
||||
ticks = sl_sleeptimer_get_tick_count64();
|
||||
status = sl_sleeptimer_tick64_to_ms(ticks, &now);
|
||||
assert(status == SL_STATUS_OK);
|
||||
return (uint32_t)now;
|
||||
}
|
||||
|
||||
uint32_t otPlatTimeGetXtalAccuracy(void)
|
||||
@@ -109,115 +82,54 @@ uint32_t otPlatTimeGetXtalAccuracy(void)
|
||||
return XTAL_ACCURACY;
|
||||
}
|
||||
|
||||
void otPlatAlarmMilliStartAt(otInstance *aInstance, uint32_t t0, uint32_t dt)
|
||||
void otPlatAlarmMilliStartAt(otInstance *aInstance, uint32_t aT0, uint32_t aDt)
|
||||
{
|
||||
OT_UNUSED_VARIABLE(aInstance);
|
||||
uint32_t expires_microsec;
|
||||
RAIL_Status_t status;
|
||||
sl_status_t status;
|
||||
int32_t remaining;
|
||||
uint32_t ticks;
|
||||
|
||||
assert(gRailHandle != NULL);
|
||||
|
||||
if (sIsRunning)
|
||||
{
|
||||
RAIL_CancelTimer(gRailHandle);
|
||||
}
|
||||
|
||||
sAlarmT0 = t0;
|
||||
sAlarmDt = dt;
|
||||
|
||||
if (dt > RAIL_TIMER_MAX_DELTA_MS)
|
||||
{
|
||||
dt = RAIL_TIMER_MAX_DELTA_MS;
|
||||
}
|
||||
else if (dt < TIMER_EPSILON_MS)
|
||||
{
|
||||
dt = TIMER_EPSILON_MS;
|
||||
}
|
||||
|
||||
expires_microsec = (t0 + dt) * US_IN_MS;
|
||||
status = RAIL_SetTimer(gRailHandle, expires_microsec, RAIL_TIME_ABSOLUTE, RAILCb_TimerExpired);
|
||||
|
||||
if (status != RAIL_STATUS_NO_ERROR)
|
||||
{
|
||||
// The RAIL timer could not be set due to expiration time being in the past with respect to RAIL's current
|
||||
// time which is in microseconds. We fallback to using a relative timer from the current time.
|
||||
|
||||
expires_microsec = dt * US_IN_MS;
|
||||
status = RAIL_SetTimer(gRailHandle, expires_microsec, RAIL_TIME_DELAY, RAILCb_TimerExpired);
|
||||
|
||||
if (status != RAIL_STATUS_NO_ERROR)
|
||||
{
|
||||
otLogCritPlat("Alarm start timer failed, status: %d, dt: %u, t0: %u, now: %u", status, dt, t0,
|
||||
otPlatAlarmMilliGetNow());
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
sl_sleeptimer_stop_timer(&sl_handle);
|
||||
|
||||
sAlarm = aT0 + aDt;
|
||||
remaining = (int32_t)(sAlarm - otPlatAlarmMilliGetNow());
|
||||
sIsRunning = true;
|
||||
|
||||
if (remaining <= 0)
|
||||
{
|
||||
otSysEventSignalPending();
|
||||
}
|
||||
else
|
||||
{
|
||||
status = sl_sleeptimer_ms32_to_tick(remaining, &ticks);
|
||||
assert(status == SL_STATUS_OK);
|
||||
|
||||
status = sl_sleeptimer_start_timer(&sl_handle, ticks, AlarmCallback, NULL, 0,
|
||||
SL_SLEEPTIMER_NO_HIGH_PRECISION_HF_CLOCKS_REQUIRED_FLAG);
|
||||
assert(status == SL_STATUS_OK);
|
||||
}
|
||||
}
|
||||
|
||||
void otPlatAlarmMilliStop(otInstance *aInstance)
|
||||
{
|
||||
OT_UNUSED_VARIABLE(aInstance);
|
||||
|
||||
sl_sleeptimer_stop_timer(&sl_handle);
|
||||
sIsRunning = false;
|
||||
|
||||
assert(gRailHandle != NULL);
|
||||
RAIL_CancelTimer(gRailHandle);
|
||||
}
|
||||
|
||||
void efr32AlarmProcess(otInstance *aInstance)
|
||||
{
|
||||
uint32_t now;
|
||||
uint32_t new_expires_microsec;
|
||||
uint32_t dt;
|
||||
RAIL_Status_t status;
|
||||
int32_t remaining;
|
||||
|
||||
otEXPECT(sIsRunning);
|
||||
|
||||
assert(gRailHandle != NULL);
|
||||
|
||||
if (RAIL_IsTimerExpired(gRailHandle))
|
||||
if (sIsRunning)
|
||||
{
|
||||
sIsRunning = false;
|
||||
remaining = (int32_t)(sAlarm - otPlatAlarmMilliGetNow());
|
||||
|
||||
if (sAlarmDt > RAIL_TIMER_MAX_DELTA_MS)
|
||||
if (remaining <= 0)
|
||||
{
|
||||
// We split longer delays in two due to the maximum allowed timer in RAIL. Here we
|
||||
// re-arm the RAIL timer with the remaining part of the alarm.
|
||||
sIsRunning = false;
|
||||
|
||||
now = otPlatAlarmMilliGetNow();
|
||||
dt = (sAlarmT0 + sAlarmDt) - now;
|
||||
|
||||
if (dt > RAIL_TIMER_MAX_DELTA_MS)
|
||||
{
|
||||
dt = RAIL_TIMER_MAX_DELTA_MS;
|
||||
}
|
||||
else if (dt < TIMER_EPSILON_MS)
|
||||
{
|
||||
dt = TIMER_EPSILON_MS;
|
||||
}
|
||||
|
||||
new_expires_microsec = (now + dt) * US_IN_MS;
|
||||
status = RAIL_SetTimer(gRailHandle, new_expires_microsec, RAIL_TIME_ABSOLUTE, RAILCb_TimerExpired);
|
||||
|
||||
if (status != RAIL_STATUS_NO_ERROR)
|
||||
{
|
||||
new_expires_microsec = dt * US_IN_MS;
|
||||
status = RAIL_SetTimer(gRailHandle, new_expires_microsec, RAIL_TIME_DELAY, RAILCb_TimerExpired);
|
||||
|
||||
if (status != RAIL_STATUS_NO_ERROR)
|
||||
{
|
||||
otLogCritPlat("Alarm extend timer failed, status: %d, dt: %u, now: %u", status, dt,
|
||||
otPlatAlarmMilliGetNow());
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
|
||||
sIsRunning = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
#if OPENTHREAD_CONFIG_DIAG_ENABLE
|
||||
if (otPlatDiagModeGet())
|
||||
{
|
||||
@@ -230,6 +142,4 @@ void efr32AlarmProcess(otInstance *aInstance)
|
||||
}
|
||||
}
|
||||
}
|
||||
exit:
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -29,5 +29,5 @@
|
||||
#include "hal-config.h"
|
||||
|
||||
#if (HAL_FEM_ENABLE)
|
||||
#include "../../../third_party/silabs/gecko_sdk_suite/v2.6/util/plugin/plugin-common/fem-control/fem-control.c"
|
||||
#include "util/plugin/plugin-common/fem-control/fem-control.c"
|
||||
#endif
|
||||
|
||||
@@ -33,7 +33,7 @@ override CFLAGS := $(filter-out -Wconversion,$(CFLA
|
||||
override CXXFLAGS := $(filter-out -Wconversion,$(CXXFLAGS))
|
||||
|
||||
EFR32_BOARD_DIR = $(shell echo $(BOARD) | tr A-Z a-z)
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)
|
||||
|
||||
$(top_builddir)/examples/platforms/efr32mg12/libopenthread-efr32mg12.a:
|
||||
(cd $(top_builddir)/examples/platforms/efr32mg12/ && $(MAKE) $(AM_MAKEFLAGS) libopenthread-efr32mg12.a )
|
||||
@@ -45,7 +45,7 @@ CPPFLAGS_COMMON += \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/src/core \
|
||||
-I$(top_srcdir)/examples/platforms \
|
||||
-DPLATFORM_HEADER=\"@top_builddir@/third_party/silabs/gecko_sdk_suite/v2.6/platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-DPLATFORM_HEADER=\"platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-Wno-sign-compare \
|
||||
-DCORTEXM3 \
|
||||
-D__START=main \
|
||||
@@ -78,12 +78,14 @@ CPPFLAGS_COMMON += \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/ustimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/rtcdrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emlib/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/halconfig/inc/hal-config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/util/plugin/plugin-common/fem-control \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/micro/cortexm3/efm32/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/plugin \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/common/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/protocol/thread \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/micro/cortexm3/efm32 \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/protocol/thread/stack \
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
#include "hal-config.h"
|
||||
#include "hal_common.h"
|
||||
#include "openthread-system.h"
|
||||
#include "rtcdriver.h"
|
||||
#include <assert.h>
|
||||
#include <common/logging.hpp>
|
||||
#include <openthread-core-config.h>
|
||||
|
||||
@@ -33,7 +33,7 @@ override CFLAGS := $(filter-out -Wconversion,$(CFLA
|
||||
override CXXFLAGS := $(filter-out -Wconversion,$(CXXFLAGS))
|
||||
|
||||
EFR32_BOARD_DIR = $(shell echo $(BOARD) | tr A-Z a-z)
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)
|
||||
|
||||
$(top_builddir)/examples/platforms/efr32mg12/libopenthread-efr32mg12.a:
|
||||
(cd $(top_builddir)/examples/platforms/efr32mg12/ && $(MAKE) $(AM_MAKEFLAGS) libopenthread-efr32mg12.a )
|
||||
@@ -45,7 +45,7 @@ CPPFLAGS_COMMON += \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/src/core \
|
||||
-I$(top_srcdir)/examples/platforms \
|
||||
-DPLATFORM_HEADER=\"@top_builddir@/third_party/silabs/gecko_sdk_suite/v2.6/platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-DPLATFORM_HEADER=\"platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-Wno-sign-compare \
|
||||
-DCORTEXM3 \
|
||||
-D__START=main \
|
||||
@@ -78,12 +78,14 @@ CPPFLAGS_COMMON += \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/ustimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/rtcdrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emlib/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/halconfig/inc/hal-config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/util/plugin/plugin-common/fem-control \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/micro/cortexm3/efm32/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/plugin \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/common/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/protocol/thread \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/micro/cortexm3/efm32 \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/protocol/thread/stack \
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#include "hal_common.h"
|
||||
#include "openthread-system.h"
|
||||
#include "platform-efr32.h"
|
||||
#include "rtcdriver.h"
|
||||
#include <common/logging.hpp>
|
||||
#include <openthread-core-config.h>
|
||||
#include <openthread/cli.h>
|
||||
|
||||
@@ -32,23 +32,25 @@
|
||||
* This file includes the platform-specific initializers.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "openthread-system.h"
|
||||
#include <openthread/tasklet.h>
|
||||
#include <openthread/platform/uart.h>
|
||||
|
||||
#include "common/logging.hpp"
|
||||
|
||||
#include "bsp.h"
|
||||
#include "em_chip.h"
|
||||
#include "em_cmu.h"
|
||||
#include "em_core.h"
|
||||
#include "em_emu.h"
|
||||
#include "em_system.h"
|
||||
#include "hal-config.h"
|
||||
#include "hal_common.h"
|
||||
#include "rail.h"
|
||||
#include "rtcdriver.h"
|
||||
#include "sl_mpu.h"
|
||||
#include "sl_sleeptimer.h"
|
||||
|
||||
#include "openthread-core-efr32-config.h"
|
||||
#include "platform-efr32.h"
|
||||
@@ -70,6 +72,7 @@ void otSysInit(int argc, char *argv[])
|
||||
{
|
||||
OT_UNUSED_VARIABLE(argc);
|
||||
OT_UNUSED_VARIABLE(argv);
|
||||
sl_status_t status;
|
||||
|
||||
__disable_irq();
|
||||
|
||||
@@ -84,7 +87,13 @@ void otSysInit(int argc, char *argv[])
|
||||
CHIP_Init();
|
||||
halInitChipSpecific();
|
||||
BSP_Init(BSP_INIT_BCC);
|
||||
RTCDRV_Init();
|
||||
|
||||
CMU_ClockSelectSet(cmuClock_LFE, cmuSelect_LFRCO);
|
||||
CMU_ClockEnable(cmuClock_CORELE, true);
|
||||
CMU_ClockEnable(cmuClock_RTCC, true);
|
||||
|
||||
status = sl_sleeptimer_init();
|
||||
assert(status == SL_STATUS_OK);
|
||||
|
||||
#if (HAL_FEM_ENABLE)
|
||||
initFem();
|
||||
|
||||
@@ -44,7 +44,7 @@ override CXXFLAGS := $(filter-out -Wundef,$(CXXFLAGS)
|
||||
|
||||
EFR32_BOARD_DIR = $(shell echo $(BOARD) | tr A-Z a-z)
|
||||
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)
|
||||
|
||||
libopenthread_efr32mg21_a_CPPFLAGS = \
|
||||
-DEFR32_SERIES2_CONFIG1_MICRO \
|
||||
@@ -78,9 +78,12 @@ libopenthread_efr32mg21_a_CPPFLAGS =
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/ustimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/rtcdrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emlib/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/halconfig/inc/hal-config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/common/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/mpu/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/util/plugin/plugin-common/fem-control \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-missing-field-initializers \
|
||||
|
||||
@@ -40,9 +40,9 @@ fi )
|
||||
LDADD_COMMON += \
|
||||
$(top_builddir)/examples/platforms/efr32mg21/libopenthread-efr32mg21.a \
|
||||
$(top_builddir)/third_party/silabs/libsilabs-efr32mg21-sdk.a \
|
||||
$(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/radio/rail_lib/autogen/librail_release/$(LIBRAIL) \
|
||||
$(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/radio/rail_lib/autogen/librail_release/$(LIBRAIL) \
|
||||
$(NULL)
|
||||
|
||||
LDFLAGS_COMMON += \
|
||||
-T $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6/platform/Device/SiliconLabs/EFR32MG21/Source/GCC/efr32mg21.ld \
|
||||
-T $(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)/platform/Device/SiliconLabs/EFR32MG21/Source/GCC/efr32mg21.ld \
|
||||
$(NULL)
|
||||
|
||||
@@ -36,8 +36,8 @@ $ ./script/bootstrap
|
||||
|
||||
2. Install Flex (Gecko) SDK including RAIL Library from Simplicity Studio.
|
||||
- Connect EFR32MG21 Wireless Starter Kit to Simplicity Studio.
|
||||
- Find Flex SDK v2.6 in the Software Update page and click Install.
|
||||
- Flex SDK v2.6 will be installed in the path: `/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite`.
|
||||
- Find Flex SDK v2.7 in the Software Update page and click Install.
|
||||
- Flex SDK v2.7 will be installed in the path: `/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite`.
|
||||
|
||||
For more information on configuring, building, and installing applications for the Wireless Gecko (EFR32)
|
||||
portfolio using FLEX, see [Getting Started with the Silicon Labs Flex Software Development Kit for the
|
||||
@@ -213,4 +213,4 @@ The following toolchain has been used for testing and verification:
|
||||
- gcc version 7.3.1
|
||||
|
||||
The EFR32 example has been verified with following Flex SDK/RAIL Library version:
|
||||
- Flex SDK version 2.6.0.0
|
||||
- Flex SDK version 2.7.0.0
|
||||
|
||||
@@ -47,61 +47,34 @@
|
||||
|
||||
#include "em_core.h"
|
||||
#include "rail.h"
|
||||
#include "sl_sleeptimer.h"
|
||||
|
||||
#define XTAL_ACCURACY 200
|
||||
#define US_IN_MS 1000
|
||||
|
||||
// Minimum duration of an alarm in milliseconds. Used to avoid setting the absolute
|
||||
// expiry time of an alarm to the current time or slightly in the past.
|
||||
#define TIMER_EPSILON_MS 1
|
||||
static sl_sleeptimer_timer_handle_t sl_handle;
|
||||
static uint32_t sAlarm = 0;
|
||||
static bool sIsRunning = false;
|
||||
|
||||
// The longest Rail can set a timer is 53 minutes. Timers of a longer duration
|
||||
// must wake up before this and set another timer for the remainder. We currently
|
||||
// split long delays in 30 minute intervals using a value of 1800000.
|
||||
#define RAIL_TIMER_MAX_DELTA_MS 1800000
|
||||
|
||||
static uint32_t sTimerHi = 0;
|
||||
static uint32_t sTimerLo = 0;
|
||||
static uint32_t sAlarmT0 = 0;
|
||||
static uint32_t sAlarmDt = 0;
|
||||
static bool sIsRunning = false;
|
||||
|
||||
static void RAILCb_TimerExpired(RAIL_Handle_t aHandle)
|
||||
static void AlarmCallback(sl_sleeptimer_timer_handle_t *aHandle, void *aData)
|
||||
{
|
||||
otSysEventSignalPending();
|
||||
}
|
||||
|
||||
void efr32AlarmInit(void)
|
||||
{
|
||||
}
|
||||
|
||||
uint64_t otPlatTimeGet(void)
|
||||
{
|
||||
uint32_t timer_lo;
|
||||
uint64_t timer_us;
|
||||
|
||||
CORE_DECLARE_IRQ_STATE;
|
||||
CORE_ENTER_CRITICAL();
|
||||
|
||||
timer_lo = RAIL_GetTime();
|
||||
|
||||
if (timer_lo < sTimerLo)
|
||||
{
|
||||
sTimerHi++;
|
||||
}
|
||||
|
||||
sTimerLo = timer_lo;
|
||||
|
||||
timer_us = (((uint64_t)sTimerHi << 32) | sTimerLo);
|
||||
|
||||
CORE_EXIT_CRITICAL();
|
||||
|
||||
return timer_us;
|
||||
memset(&sl_handle, 0, sizeof sl_handle);
|
||||
}
|
||||
|
||||
uint32_t otPlatAlarmMilliGetNow(void)
|
||||
{
|
||||
return otPlatTimeGet() / US_IN_MS;
|
||||
uint64_t ticks;
|
||||
uint64_t now;
|
||||
sl_status_t status;
|
||||
|
||||
ticks = sl_sleeptimer_get_tick_count64();
|
||||
status = sl_sleeptimer_tick64_to_ms(ticks, &now);
|
||||
assert(status == SL_STATUS_OK);
|
||||
return (uint32_t)now;
|
||||
}
|
||||
|
||||
uint32_t otPlatTimeGetXtalAccuracy(void)
|
||||
@@ -109,115 +82,54 @@ uint32_t otPlatTimeGetXtalAccuracy(void)
|
||||
return XTAL_ACCURACY;
|
||||
}
|
||||
|
||||
void otPlatAlarmMilliStartAt(otInstance *aInstance, uint32_t t0, uint32_t dt)
|
||||
void otPlatAlarmMilliStartAt(otInstance *aInstance, uint32_t aT0, uint32_t aDt)
|
||||
{
|
||||
OT_UNUSED_VARIABLE(aInstance);
|
||||
uint32_t expires_microsec;
|
||||
RAIL_Status_t status;
|
||||
sl_status_t status;
|
||||
int32_t remaining;
|
||||
uint32_t ticks;
|
||||
|
||||
assert(gRailHandle != NULL);
|
||||
|
||||
if (sIsRunning)
|
||||
{
|
||||
RAIL_CancelTimer(gRailHandle);
|
||||
}
|
||||
|
||||
sAlarmT0 = t0;
|
||||
sAlarmDt = dt;
|
||||
|
||||
if (dt > RAIL_TIMER_MAX_DELTA_MS)
|
||||
{
|
||||
dt = RAIL_TIMER_MAX_DELTA_MS;
|
||||
}
|
||||
else if (dt < TIMER_EPSILON_MS)
|
||||
{
|
||||
dt = TIMER_EPSILON_MS;
|
||||
}
|
||||
|
||||
expires_microsec = (t0 + dt) * US_IN_MS;
|
||||
status = RAIL_SetTimer(gRailHandle, expires_microsec, RAIL_TIME_ABSOLUTE, RAILCb_TimerExpired);
|
||||
|
||||
if (status != RAIL_STATUS_NO_ERROR)
|
||||
{
|
||||
// The RAIL timer could not be set due to expiration time being in the past with respect to RAIL's current
|
||||
// time which is in microseconds. We fallback to using a relative timer from the current time.
|
||||
|
||||
expires_microsec = dt * US_IN_MS;
|
||||
status = RAIL_SetTimer(gRailHandle, expires_microsec, RAIL_TIME_DELAY, RAILCb_TimerExpired);
|
||||
|
||||
if (status != RAIL_STATUS_NO_ERROR)
|
||||
{
|
||||
otLogCritPlat("Alarm start timer failed, status: %d, dt: %u, t0: %u, now: %u", status, dt, t0,
|
||||
otPlatAlarmMilliGetNow());
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
sl_sleeptimer_stop_timer(&sl_handle);
|
||||
|
||||
sAlarm = aT0 + aDt;
|
||||
remaining = (int32_t)(sAlarm - otPlatAlarmMilliGetNow());
|
||||
sIsRunning = true;
|
||||
|
||||
if (remaining <= 0)
|
||||
{
|
||||
otSysEventSignalPending();
|
||||
}
|
||||
else
|
||||
{
|
||||
status = sl_sleeptimer_ms32_to_tick(remaining, &ticks);
|
||||
assert(status == SL_STATUS_OK);
|
||||
|
||||
status = sl_sleeptimer_start_timer(&sl_handle, ticks, AlarmCallback, NULL, 0,
|
||||
SL_SLEEPTIMER_NO_HIGH_PRECISION_HF_CLOCKS_REQUIRED_FLAG);
|
||||
assert(status == SL_STATUS_OK);
|
||||
}
|
||||
}
|
||||
|
||||
void otPlatAlarmMilliStop(otInstance *aInstance)
|
||||
{
|
||||
OT_UNUSED_VARIABLE(aInstance);
|
||||
|
||||
sl_sleeptimer_stop_timer(&sl_handle);
|
||||
sIsRunning = false;
|
||||
|
||||
assert(gRailHandle != NULL);
|
||||
RAIL_CancelTimer(gRailHandle);
|
||||
}
|
||||
|
||||
void efr32AlarmProcess(otInstance *aInstance)
|
||||
{
|
||||
uint32_t now;
|
||||
uint32_t new_expires_microsec;
|
||||
uint32_t dt;
|
||||
RAIL_Status_t status;
|
||||
int32_t remaining;
|
||||
|
||||
otEXPECT(sIsRunning);
|
||||
|
||||
assert(gRailHandle != NULL);
|
||||
|
||||
if (RAIL_IsTimerExpired(gRailHandle))
|
||||
if (sIsRunning)
|
||||
{
|
||||
sIsRunning = false;
|
||||
remaining = (int32_t)(sAlarm - otPlatAlarmMilliGetNow());
|
||||
|
||||
if (sAlarmDt > RAIL_TIMER_MAX_DELTA_MS)
|
||||
if (remaining <= 0)
|
||||
{
|
||||
// We split longer delays in two due to the maximum allowed timer in RAIL. Here we
|
||||
// re-arm the RAIL timer with the remaining part of the alarm.
|
||||
sIsRunning = false;
|
||||
|
||||
now = otPlatAlarmMilliGetNow();
|
||||
dt = (sAlarmT0 + sAlarmDt) - now;
|
||||
|
||||
if (dt > RAIL_TIMER_MAX_DELTA_MS)
|
||||
{
|
||||
dt = RAIL_TIMER_MAX_DELTA_MS;
|
||||
}
|
||||
else if (dt < TIMER_EPSILON_MS)
|
||||
{
|
||||
dt = TIMER_EPSILON_MS;
|
||||
}
|
||||
|
||||
new_expires_microsec = (now + dt) * US_IN_MS;
|
||||
status = RAIL_SetTimer(gRailHandle, new_expires_microsec, RAIL_TIME_ABSOLUTE, RAILCb_TimerExpired);
|
||||
|
||||
if (status != RAIL_STATUS_NO_ERROR)
|
||||
{
|
||||
new_expires_microsec = dt * US_IN_MS;
|
||||
status = RAIL_SetTimer(gRailHandle, new_expires_microsec, RAIL_TIME_DELAY, RAILCb_TimerExpired);
|
||||
|
||||
if (status != RAIL_STATUS_NO_ERROR)
|
||||
{
|
||||
otLogCritPlat("Alarm extend timer failed, status: %d, dt: %u, now: %u", status, dt,
|
||||
otPlatAlarmMilliGetNow());
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
|
||||
sIsRunning = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
#if OPENTHREAD_CONFIG_DIAG_ENABLE
|
||||
if (otPlatDiagModeGet())
|
||||
{
|
||||
@@ -230,6 +142,4 @@ void efr32AlarmProcess(otInstance *aInstance)
|
||||
}
|
||||
}
|
||||
}
|
||||
exit:
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -29,5 +29,5 @@
|
||||
#include "hal-config.h"
|
||||
|
||||
#if (HAL_FEM_ENABLE)
|
||||
#include "../../../third_party/silabs/gecko_sdk_suite/v2.6/util/plugin/plugin-common/fem-control/fem-control.c"
|
||||
#include "util/plugin/plugin-common/fem-control/fem-control.c"
|
||||
#endif
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "utils/soft_source_match_table.h"
|
||||
|
||||
#include "board_config.h"
|
||||
#include "em_cmu.h"
|
||||
#include "em_core.h"
|
||||
#include "em_system.h"
|
||||
#include "openthread-core-efr32-config.h"
|
||||
|
||||
@@ -33,7 +33,7 @@ override CFLAGS := $(filter-out -Wconversion,$(CFLA
|
||||
override CXXFLAGS := $(filter-out -Wconversion,$(CXXFLAGS))
|
||||
|
||||
EFR32_BOARD_DIR = $(shell echo $(BOARD) | tr A-Z a-z)
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)
|
||||
|
||||
$(top_builddir)/examples/platforms/efr32mg21/libopenthread-efr32mg21.a:
|
||||
(cd $(top_builddir)/examples/platforms/efr32mg21/ && $(MAKE) $(AM_MAKEFLAGS) libopenthread-efr32mg21.a )
|
||||
@@ -45,7 +45,7 @@ CPPFLAGS_COMMON += \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/src/core \
|
||||
-I$(top_srcdir)/examples/platforms \
|
||||
-DPLATFORM_HEADER=\"@top_builddir@/third_party/silabs/gecko_sdk_suite/v2.6/platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-DPLATFORM_HEADER=\"platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-Wno-sign-compare \
|
||||
-DCORTEXM3 \
|
||||
-D__START=main \
|
||||
@@ -78,12 +78,14 @@ CPPFLAGS_COMMON += \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/ustimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/rtcdrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emlib/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/halconfig/inc/hal-config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/util/plugin/plugin-common/fem-control \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/micro/cortexm3/efm32/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/plugin \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/common/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/protocol/thread \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/micro/cortexm3/efm32 \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/protocol/thread/stack \
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
#include "hal-config-board.h"
|
||||
#include "hal_common.h"
|
||||
#include "openthread-system.h"
|
||||
#include "rtcdriver.h"
|
||||
#include <assert.h>
|
||||
#include <common/logging.hpp>
|
||||
#include <openthread-core-config.h>
|
||||
|
||||
@@ -33,7 +33,7 @@ override CFLAGS := $(filter-out -Wconversion,$(CFLA
|
||||
override CXXFLAGS := $(filter-out -Wconversion,$(CXXFLAGS))
|
||||
|
||||
EFR32_BOARD_DIR = $(shell echo $(BOARD) | tr A-Z a-z)
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)
|
||||
|
||||
$(top_builddir)/examples/platforms/efr32mg21/libopenthread-efr32mg21.a:
|
||||
(cd $(top_builddir)/examples/platforms/efr32mg21/ && $(MAKE) $(AM_MAKEFLAGS) libopenthread-efr32mg21.a )
|
||||
@@ -45,7 +45,7 @@ CPPFLAGS_COMMON += \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/src/core \
|
||||
-I$(top_srcdir)/examples/platforms \
|
||||
-DPLATFORM_HEADER=\"@top_builddir@/third_party/silabs/gecko_sdk_suite/v2.6/platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-DPLATFORM_HEADER=\"platform/base/hal/micro/cortexm3/compiler/gcc.h\" \
|
||||
-Wno-sign-compare \
|
||||
-DCORTEXM3 \
|
||||
-D__START=main \
|
||||
@@ -70,7 +70,7 @@ CPPFLAGS_COMMON += \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/hardware/kit/EFR32MG21_$(BOARD)/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/CMSIS/Include \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/ \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/Device/SiliconLabs/EFR32MG21/Include \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/Device/SiliconLabs/EFR32MG21/Include \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/common/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/gpiointerrupt/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/uartdrv/inc \
|
||||
@@ -78,12 +78,14 @@ CPPFLAGS_COMMON += \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/ustimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/rtcdrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emlib/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/halconfig/inc/hal-config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/util/plugin/plugin-common/fem-control \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/micro/cortexm3/efm32/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/plugin \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/common/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/protocol/thread \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/base/hal/micro/cortexm3/efm32 \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/protocol/thread/stack \
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#include "hal_common.h"
|
||||
#include "openthread-system.h"
|
||||
#include "platform-efr32.h"
|
||||
#include "rtcdriver.h"
|
||||
#include <common/logging.hpp>
|
||||
#include <openthread-core-config.h>
|
||||
#include <openthread/cli.h>
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
* This file includes the platform-specific initializers.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "openthread-system.h"
|
||||
@@ -41,13 +42,15 @@
|
||||
|
||||
#include "bsp.h"
|
||||
#include "em_chip.h"
|
||||
#include "em_cmu.h"
|
||||
#include "em_core.h"
|
||||
#include "em_emu.h"
|
||||
#include "em_system.h"
|
||||
#include "hal-config.h"
|
||||
#include "hal_common.h"
|
||||
#include "rail.h"
|
||||
#include "rtcdriver.h"
|
||||
#include "sl_mpu.h"
|
||||
#include "sl_sleeptimer.h"
|
||||
|
||||
#include "openthread-core-efr32-config.h"
|
||||
#include "platform-efr32.h"
|
||||
@@ -70,6 +73,7 @@ void otSysInit(int argc, char *argv[])
|
||||
{
|
||||
OT_UNUSED_VARIABLE(argc);
|
||||
OT_UNUSED_VARIABLE(argv);
|
||||
sl_status_t status;
|
||||
|
||||
__disable_irq();
|
||||
|
||||
@@ -84,7 +88,12 @@ void otSysInit(int argc, char *argv[])
|
||||
CHIP_Init();
|
||||
halInitChipSpecific();
|
||||
BSP_Init(BSP_INIT_BCC);
|
||||
RTCDRV_Init();
|
||||
|
||||
CMU_OscillatorEnable(cmuOsc_LFRCO, true, true);
|
||||
CMU_ClockEnable(cmuClock_RTCC, true);
|
||||
|
||||
status = sl_sleeptimer_init();
|
||||
assert(status == SL_STATUS_OK);
|
||||
|
||||
#if (HAL_FEM_ENABLE)
|
||||
initFem();
|
||||
|
||||
Vendored
+45
-40
@@ -58,7 +58,7 @@ override CXXFLAGS := $(filter-out -Wundef,$(CXXFLAGS)
|
||||
|
||||
EFR32_BOARD_DIR = $(shell echo $(BOARD) | tr A-Z a-z)
|
||||
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v2.6
|
||||
EFR32MG_SDK_SRCDIR = $(top_srcdir)/third_party/silabs/gecko_sdk_suite/$(SDKVERSION)
|
||||
|
||||
COMMONCPPFLAGS = \
|
||||
-D__STARTUP_CLEAR_BSS \
|
||||
@@ -66,7 +66,6 @@ COMMONCPPFLAGS
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/src/core \
|
||||
-I$(top_srcdir)/third_party/silabs/rail_config \
|
||||
-I$(top_srcdir)/examples/platforms/efr32mg21/$(EFR32_BOARD_DIR) \
|
||||
-I$(EFR32MG_SDK_SRCDIR) \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/radio/rail_lib/common \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/radio/rail_lib/chip/efr32 \
|
||||
@@ -84,9 +83,12 @@ COMMONCPPFLAGS
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/ustimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/dmadrv/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emdrv/rtcdrv/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/emlib/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/halconfig/inc/hal-config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/common/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/mpu/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/inc \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/service/sleeptimer/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/util/plugin/plugin-common/fem-control \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-missing-field-initializers \
|
||||
@@ -98,55 +100,58 @@ SILABS_EFR32MG12_CPPFLAGS
|
||||
$(NULL)
|
||||
|
||||
SILABS_EFR32MG21_CPPFLAGS = \
|
||||
-I$(top_srcdir)/examples/platforms/efr32mg21/$(EFR32_BOARD_DIR) \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/hardware/kit/EFR32MG21_$(BOARD)/config \
|
||||
-I$(EFR32MG_SDK_SRCDIR)/platform/Device/SiliconLabs/EFR32MG21P/Include \
|
||||
$(NULL)
|
||||
|
||||
SILABS_COMMON_SOURCES = \
|
||||
rail_config/rail_config.c \
|
||||
gecko_sdk_suite/v2.6/hardware/kit/common/bsp/bsp_bcc.c \
|
||||
gecko_sdk_suite/v2.6/hardware/kit/common/bsp/bsp_init.c \
|
||||
gecko_sdk_suite/v2.6/hardware/kit/common/bsp/bsp_stk.c \
|
||||
gecko_sdk_suite/v2.6/hardware/kit/common/bsp/bsp_stk_leds.c \
|
||||
gecko_sdk_suite/v2.6/platform/emdrv/dmadrv/src/dmadrv.c \
|
||||
gecko_sdk_suite/v2.6/platform/emdrv/gpiointerrupt/src/gpiointerrupt.c \
|
||||
gecko_sdk_suite/v2.6/platform/emdrv/rtcdrv/src/rtcdriver.c \
|
||||
gecko_sdk_suite/v2.6/platform/emdrv/uartdrv/src/uartdrv.c \
|
||||
gecko_sdk_suite/v2.6/platform/emdrv/ustimer/src/ustimer.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_adc.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_cmu.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_core.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_crypto.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_emu.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_gpio.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_ldma.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_leuart.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_msc.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_rmu.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_rtcc.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_system.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_timer.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_usart.c \
|
||||
gecko_sdk_suite/v2.6/platform/radio/rail_lib/hal/efr32/hal_efr.c \
|
||||
gecko_sdk_suite/v2.6/platform/radio/rail_lib/hal/hal_common.c \
|
||||
gecko_sdk_suite/v2.6/util/third_party/mbedtls/library/ecp.c \
|
||||
gecko_sdk_suite/v2.6/util/third_party/mbedtls/sl_crypto/src/crypto_aes.c \
|
||||
gecko_sdk_suite/v2.6/util/third_party/mbedtls/sl_crypto/src/crypto_ecp.c \
|
||||
gecko_sdk_suite/v2.6/util/third_party/mbedtls/sl_crypto/src/crypto_management.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/hardware/kit/common/bsp/bsp_bcc.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/hardware/kit/common/bsp/bsp_init.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/hardware/kit/common/bsp/bsp_stk.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/hardware/kit/common/bsp/bsp_stk_leds.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emdrv/dmadrv/src/dmadrv.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emdrv/gpiointerrupt/src/gpiointerrupt.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emdrv/uartdrv/src/uartdrv.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emdrv/ustimer/src/ustimer.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_adc.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_cmu.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_core.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_crypto.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_emu.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_gpio.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_ldma.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_leuart.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_msc.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_rmu.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_rtcc.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_system.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_timer.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_usart.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/radio/rail_lib/hal/efr32/hal_efr.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/radio/rail_lib/hal/hal_common.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/service/mpu/src/sl_mpu.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/service/sleeptimer/src/sl_sleeptimer.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/service/sleeptimer/src/sl_sleeptimer_hal_rtcc.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/library/ecp.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/sl_crypto/src/crypto_aes.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/sl_crypto/src/crypto_ecp.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/sl_crypto/src/crypto_management.c \
|
||||
$(NULL)
|
||||
|
||||
SILABS_EFR32MG12_SOURCES = \
|
||||
gecko_sdk_suite/v2.6/platform/Device/SiliconLabs/EFR32MG12P/Source/system_efr32mg12p.c \
|
||||
gecko_sdk_suite/v2.6/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/startup_efr32mg12p.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/Device/SiliconLabs/EFR32MG12P/Source/system_efr32mg12p.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/startup_efr32mg12p.c \
|
||||
$(NULL)
|
||||
|
||||
SILABS_EFR32MG21_SOURCES = \
|
||||
gecko_sdk_suite/v2.6/platform/Device/SiliconLabs/EFR32MG21/Source/system_efr32mg21.c \
|
||||
gecko_sdk_suite/v2.6/platform/Device/SiliconLabs/EFR32MG21/Source/GCC/startup_efr32mg21.c \
|
||||
gecko_sdk_suite/v2.6/platform/emlib/src/em_se.c \
|
||||
gecko_sdk_suite/v2.6/util/third_party/mbedtls/sl_crypto/src/se_trng.c \
|
||||
gecko_sdk_suite/v2.6/util/third_party/mbedtls/sl_crypto/src/se_aes.c \
|
||||
gecko_sdk_suite/v2.6/util/third_party/mbedtls/sl_crypto/src/se_management.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/Device/SiliconLabs/EFR32MG21/Source/system_efr32mg21.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/Device/SiliconLabs/EFR32MG21/Source/GCC/startup_efr32mg21.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/platform/emlib/src/em_se.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/sl_crypto/src/se_trng.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/sl_crypto/src/se_aes.c \
|
||||
gecko_sdk_suite/$(SDKVERSION)/util/third_party/mbedtls/sl_crypto/src/se_management.c \
|
||||
$(NULL)
|
||||
|
||||
libsilabs_efr32mg12_sdk_a_CPPFLAGS = \
|
||||
|
||||
Reference in New Issue
Block a user