[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:
Marven Gilhespie
2020-01-08 10:14:12 -08:00
committed by Jonathan Hui
parent b87545f0c8
commit 73e30d1d7b
24 changed files with 212 additions and 354 deletions
+8 -6
View File
@@ -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
+9 -7
View File
@@ -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
+6 -3
View File
@@ -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)
+3 -3
View File
@@ -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
+41 -131
View File
@@ -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;
}
+1 -1
View File
@@ -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>
+12 -3
View File
@@ -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();
+5 -2
View File
@@ -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)
+3 -3
View File
@@ -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
+41 -131
View File
@@ -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;
}
+1 -1
View File
@@ -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
+1
View File
@@ -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>
+11 -2
View File
@@ -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();
+45 -40
View File
@@ -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 = \