Skip to content
Snippets Groups Projects
Unverified Commit 157d8e2f authored by Peter Kietzmann's avatar Peter Kietzmann Committed by GitHub
Browse files

Merge pull request #8102 from haukepetersen/opt_boards_nrf52based

boards/nrf52-based: factor out shared code
parents 70d29912 41ec9b25
Branches
No related tags found
No related merge requests found
Showing
with 197 additions and 288 deletions
MODULE = boards_common_nrf52
include $(RIOTBASE)/Makefile.base
ifneq (,$(filter saul_default,$(USEMODULE)))
USEMODULE += saul_gpio
endif
# Put defined MCU peripherals here (in alphabetical order)
FEATURES_PROVIDED += periph_gpio
FEATURES_PROVIDED += periph_rtt
FEATURES_PROVIDED += periph_spi
FEATURES_PROVIDED += periph_timer
FEATURES_PROVIDED += periph_uart
# Various other features (if any)
FEATURES_PROVIDED += radio_nrfmin
# The board MPU family (used for grouping by the CI system)
FEATURES_MCU_GROUP = cortex_m4_3
-include $(RIOTCPU)/nrf52/Makefile.features
# this module contains shared code for all boards using the nrf52 CPU
export CPU = nrf52
# include this module into the build
INCLUDES += -I$(RIOTBOARD)/common/nrf52xxxdk/include
USEMODULE += boards_common_nrf52
# set default port depending on operating system
PORT_LINUX ?= /dev/ttyACM0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
include $(RIOTMAKE)/tools/serial.inc.mk
# setup JLink for flashing
export JLINK_DEVICE := nrf52
# special options when using SoftDevice
ifneq (,$(filter nordic_softdevice_ble,$(USEPKG)))
export JLINK_PRE_FLASH := erase\nloadfile $(BINDIR)/softdevice.hex
export FLASH_ADDR := 0x1f000
export LINKER_SCRIPT ?= $(RIOTCPU)/$(CPU)/ldscripts/$(CPU_MODEL)_sd.ld
endif
include $(RIOTMAKE)/tools/jlink.inc.mk
File moved
/* /*
* Copyright (C) 2016 Freie Universität Berlin * Copyright (C) 2017 Feie Universität Berlin
* *
* This file is subject to the terms and conditions of the GNU Lesser * This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level * General Public License v2.1. See the file LICENSE in the top level
...@@ -7,27 +7,34 @@ ...@@ -7,27 +7,34 @@
*/ */
/** /**
* @ingroup boards_nrf52dk * @defgroup boards_common_nrf52 Shared nRF52 code
* @ingroup boards_common
* @brief Shared configuration for all nRF52-based boards
* @{ * @{
* *
* @file * @file
* @brief Board initialization for the nRF52 DK * @brief Shared configuration for the all nRF52-based boards
* *
* @author Hauke Petersen <hauke.petersen@fu-berlin.de> * @author Hauke Petersen <hauke.petersen@fu-berlin.de>
*
* @}
*/ */
#ifndef BOARD_COMMON_H
#define BOARD_COMMON_H
#include "cpu.h" #include "cpu.h"
#include "board.h"
void board_init(void) #ifdef __cplusplus
{ extern "C" {
/* initialize the boards LEDs */ #endif
NRF_P0->DIRSET = (LED0_MASK | LED1_MASK | LED2_MASK | LED3_MASK);
NRF_P0->OUTSET = (LED0_MASK | LED1_MASK | LED2_MASK | LED3_MASK); /**
NRF_P0->OUTSET = (LED0_MASK | LED1_MASK | LED2_MASK | LED3_MASK); * @brief Initialize the platform
*/
void board_init(void);
/* initialize the CPU */ #ifdef __cplusplus
cpu_init();
} }
#endif
#endif /* BOARD_COMMON_H */
/** @} */
...@@ -33,44 +33,52 @@ extern "C" { ...@@ -33,44 +33,52 @@ extern "C" {
static const saul_gpio_params_t saul_gpio_params[] = static const saul_gpio_params_t saul_gpio_params[] =
{ {
{ {
.name = "LED 1", .name = "LED 1",
.pin = LED0_PIN, .pin = LED0_PIN,
.mode = GPIO_OUT .mode = GPIO_OUT,
.flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR),
}, },
{ {
.name = "LED 2", .name = "LED 2",
.pin = LED1_PIN, .pin = LED1_PIN,
.mode = GPIO_OUT .mode = GPIO_OUT,
.flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR),
}, },
{ {
.name = "LED 3", .name = "LED 3",
.pin = LED2_PIN, .pin = LED2_PIN,
.mode = GPIO_OUT .mode = GPIO_OUT,
.flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR),
}, },
{ {
.name = "LED 4", .name = "LED 4",
.pin = LED3_PIN, .pin = LED3_PIN,
.mode = GPIO_OUT .mode = GPIO_OUT,
.flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR),
}, },
{ {
.name = "Button 1", .name = "Button 1",
.pin = BTN0_PIN, .pin = BTN0_PIN,
.mode = BTN0_MODE .mode = BTN0_MODE,
.flags = SAUL_GPIO_INVERTED,
}, },
{ {
.name = "Button 2", .name = "Button 2",
.pin = BTN1_PIN, .pin = BTN1_PIN,
.mode = BTN1_MODE .mode = BTN1_MODE,
.flags = SAUL_GPIO_INVERTED,
}, },
{ {
.name = "Button 3", .name = "Button 3",
.pin = BTN2_PIN, .pin = BTN2_PIN,
.mode = BTN2_MODE .mode = BTN2_MODE,
.flags = SAUL_GPIO_INVERTED,
}, },
{ {
.name = "Button 4", .name = "Button 4",
.pin = BTN3_PIN, .pin = BTN3_PIN,
.mode = BTN3_MODE .mode = BTN3_MODE,
.flags = SAUL_GPIO_INVERTED,
} }
}; };
......
MODULE = board MODULE = board
DIRS = $(RIOTBOARD)/common/nrf52xxxdk
include $(RIOTBASE)/Makefile.base include $(RIOTBASE)/Makefile.base
ifneq (,$(filter saul_default,$(USEMODULE))) include $(RIOTBOARD)/common/nrf52xxxdk/Makefile.dep
USEMODULE += saul_gpio
endif
ifneq (,$(filter gnrc_netdev_default netdev_default,$(USEMODULE)))
USEMODULE += nrfmin
endif
# Put defined MCU peripherals here (in alphabetical order) include $(RIOTBOARD)/common/nrf52xxxdk/Makefile.features
FEATURES_PROVIDED += periph_gpio
FEATURES_PROVIDED += periph_rtt
FEATURES_PROVIDED += periph_spi
FEATURES_PROVIDED += periph_timer
FEATURES_PROVIDED += periph_uart
# Various other features (if any)
FEATURES_PROVIDED += radio_nrfmin
# The board MPU family (used for grouping by the CI system)
FEATURES_MCU_GROUP = cortex_m4_3
-include $(RIOTCPU)/nrf52/Makefile.features
# define the cpu used by the nRF52 DK
export CPU = nrf52
export CPU_MODEL = nrf52840xxaa export CPU_MODEL = nrf52840xxaa
# set default port depending on operating system include $(RIOTBOARD)/common/nrf52xxxdk/Makefile.include
PORT_LINUX ?= /dev/ttyACM0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
# setup JLink for flashing
export JLINK_DEVICE := nrf52
# special options when using SoftDevice
ifneq (,$(filter nordic_softdevice_ble,$(USEPKG)))
export JLINK_PRE_FLASH := erase\nloadfile $(BINDIR)/softdevice.hex
export FLASH_ADDR := 0x1f000
export LINKER_SCRIPT ?= $(RIOTCPU)/$(CPU)/ldscripts/$(CPU_MODEL)_sd.ld
endif
include $(RIOTMAKE)/tools/jlink.inc.mk
# setup serial terminal
include $(RIOTMAKE)/tools/serial.inc.mk
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#ifndef BOARD_H #ifndef BOARD_H
#define BOARD_H #define BOARD_H
#include "cpu.h" #include "board_common.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
...@@ -74,11 +74,6 @@ extern "C" { ...@@ -74,11 +74,6 @@ extern "C" {
#define BTN3_MODE GPIO_IN_PU #define BTN3_MODE GPIO_IN_PU
/** @} */ /** @} */
/**
* @brief Initialize board specific hardware, including clock, LEDs and std-IO
*/
void board_init(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
/*
* Copyright (C) 2017 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup boards_nrf52840dk
* @{
*
* @file
* @brief Configuration of SAUL mapped GPIO pins
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
* @author Sebastian Meiling <s@mlng.net>
*/
#ifndef GPIO_PARAMS_H
#define GPIO_PARAMS_H
#include "board.h"
#include "saul/periph.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief LED configuration
*/
static const saul_gpio_params_t saul_gpio_params[] =
{
{
.name = "LED 1",
.pin = LED0_PIN,
.mode = GPIO_OUT
},
{
.name = "LED 2",
.pin = LED1_PIN,
.mode = GPIO_OUT
},
{
.name = "LED 3",
.pin = LED2_PIN,
.mode = GPIO_OUT
},
{
.name = "LED 4",
.pin = LED3_PIN,
.mode = GPIO_OUT
},
{
.name = "Button 1",
.pin = BTN0_PIN,
.mode = BTN0_MODE
},
{
.name = "Button 2",
.pin = BTN1_PIN,
.mode = BTN1_MODE
},
{
.name = "Button 3",
.pin = BTN2_PIN,
.mode = BTN2_MODE
},
{
.name = "Button 4",
.pin = BTN3_PIN,
.mode = BTN3_MODE
}
};
#ifdef __cplusplus
}
#endif
#endif /* GPIO_PARAMS_H */
/** @} */
/*
* Copyright (C) 2017 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup boards_nrf52840dk
* @{
*
* @file
* @brief Peripheral configuration for the nRF52840 DK
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
*
*/
#ifndef PERIPH_CONF_H
#define PERIPH_CONF_H
#include "periph_cpu.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name Clock configuration
*
* @note The radio will not work with the internal RC oscillator!
*
* @{
*/
#define CLOCK_HFCLK (32U) /* set to 0: internal RC oscillator
* 32: 32MHz crystal */
#define CLOCK_LFCLK (1) /* set to 0: internal RC oscillator
* 1: 32.768 kHz crystal
* 2: derived from HFCLK */
/** @} */
/**
* @name Timer configuration
* @{
*/
static const timer_conf_t timer_config[] = {
{
.dev = NRF_TIMER1,
.channels = 3,
.bitmode = TIMER_BITMODE_BITMODE_32Bit,
.irqn = TIMER1_IRQn
}
};
#define TIMER_0_ISR isr_timer1
#define TIMER_NUMOF (sizeof(timer_config) / sizeof(timer_config[0]))
/** @} */
/**
* @name Real time counter configuration
* @{
*/
#define RTT_NUMOF (1U)
#define RTT_DEV (1) /* NRF_RTC1 */
#define RTT_MAX_VALUE (0x00ffffff)
#define RTT_FREQUENCY (1024)
/** @} */
/**
* @name UART configuration
* @{
*/
#define UART_NUMOF (1U)
#define UART_PIN_RX GPIO_PIN(0, 8)
#define UART_PIN_TX GPIO_PIN(0, 6)
/** @} */
/**
* @name SPI configuration
* @{
*/
static const spi_conf_t spi_config[] = {
{
.dev = NRF_SPI0,
.sclk = 15,
.mosi = 13,
.miso = 14
}
};
#define SPI_NUMOF (sizeof(spi_config) / sizeof(spi_config[0]))
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* PERIPH_CONF_H */
MODULE = board MODULE = board
DIRS = $(RIOTBOARD)/common/nrf52xxxdk
include $(RIOTBASE)/Makefile.base include $(RIOTBASE)/Makefile.base
ifneq (,$(filter saul_default,$(USEMODULE))) include $(RIOTBOARD)/common/nrf52xxxdk/Makefile.dep
USEMODULE += saul_gpio
endif
ifeq (,$(filter nrfmin,$(USEMODULE))) ifeq (,$(filter nrfmin,$(USEMODULE)))
ifneq (,$(filter gnrc_netdev_default,$(USEMODULE))) ifneq (,$(filter gnrc_netdev_default,$(USEMODULE)))
USEPKG += nordic_softdevice_ble USEPKG += nordic_softdevice_ble
endif endif
else
ifneq (,$(filter gnrc_netdev_default netdev_default,$(USEMODULE)))
USEMODULE += nrfmin
endif
endif endif
# Put defined MCU peripherals here (in alphabetical order) include $(RIOTBOARD)/common/nrf52xxxdk/Makefile.features
FEATURES_PROVIDED += periph_gpio
FEATURES_PROVIDED += periph_rtt
FEATURES_PROVIDED += periph_spi
FEATURES_PROVIDED += periph_timer
FEATURES_PROVIDED += periph_uart
# Various other features (if any)
FEATURES_PROVIDED += radio_nrfmin
# The board MPU family (used for grouping by the CI system)
FEATURES_MCU_GROUP = cortex_m4_3
-include $(RIOTCPU)/nrf52/Makefile.features
# define the cpu used by the nRF52 DK
export CPU = nrf52
export CPU_MODEL = nrf52832xxaa export CPU_MODEL = nrf52832xxaa
# set default port depending on operating system include $(RIOTBOARD)/common/nrf52xxxdk/Makefile.include
PORT_LINUX ?= /dev/ttyACM0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
# setup JLink for flashing
export JLINK_DEVICE := nrf52
# special options when using SoftDevice
ifneq (,$(filter nordic_softdevice_ble,$(USEPKG)))
export JLINK_PRE_FLASH := erase\nloadfile $(BINDIR)/softdevice.hex
export FLASH_ADDR := 0x1f000
export LINKER_SCRIPT ?= $(RIOTCPU)/$(CPU)/ldscripts/$(CPU_MODEL)_sd.ld
endif
include $(RIOTMAKE)/tools/jlink.inc.mk
# setup serial terminal
include $(RIOTMAKE)/tools/serial.inc.mk
/* /*
* Copyright (C) 2016 Feie Universität Berlin * Copyright (C) 2016-2017 Feie Universität Berlin
* *
* This file is subject to the terms and conditions of the GNU Lesser * This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level * General Public License v2.1. See the file LICENSE in the top level
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#ifndef BOARD_H #ifndef BOARD_H
#define BOARD_H #define BOARD_H
#include "cpu.h" #include "board_common.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
...@@ -37,26 +37,27 @@ extern "C" { ...@@ -37,26 +37,27 @@ extern "C" {
#define LED2_PIN GPIO_PIN(0, 19) #define LED2_PIN GPIO_PIN(0, 19)
#define LED3_PIN GPIO_PIN(0, 20) #define LED3_PIN GPIO_PIN(0, 20)
#define LED_PORT (NRF_P0)
#define LED0_MASK (1 << 17) #define LED0_MASK (1 << 17)
#define LED1_MASK (1 << 18) #define LED1_MASK (1 << 18)
#define LED2_MASK (1 << 19) #define LED2_MASK (1 << 19)
#define LED3_MASK (1 << 20) #define LED3_MASK (1 << 20)
#define LED0_ON (NRF_P0->OUTCLR = LED0_MASK) #define LED0_ON (LED_PORT->OUTCLR = LED0_MASK)
#define LED0_OFF (NRF_P0->OUTSET = LED0_MASK) #define LED0_OFF (LED_PORT->OUTSET = LED0_MASK)
#define LED0_TOGGLE (NRF_P0->OUT ^= LED0_MASK) #define LED0_TOGGLE (LED_PORT->OUT ^= LED0_MASK)
#define LED1_ON (NRF_P0->OUTCLR = LED1_MASK) #define LED1_ON (LED_PORT->OUTCLR = LED1_MASK)
#define LED1_OFF (NRF_P0->OUTSET = LED1_MASK) #define LED1_OFF (LED_PORT->OUTSET = LED1_MASK)
#define LED1_TOGGLE (NRF_P0->OUT ^= LED1_MASK) #define LED1_TOGGLE (LED_PORT->OUT ^= LED1_MASK)
#define LED2_ON (NRF_P0->OUTCLR = LED2_MASK) #define LED2_ON (LED_PORT->OUTCLR = LED2_MASK)
#define LED2_OFF (NRF_P0->OUTSET = LED2_MASK) #define LED2_OFF (LED_PORT->OUTSET = LED2_MASK)
#define LED2_TOGGLE (NRF_P0->OUT ^= LED2_MASK) #define LED2_TOGGLE (LED_PORT->OUT ^= LED2_MASK)
#define LED3_ON (NRF_P0->OUTCLR = LED3_MASK) #define LED3_ON (LED_PORT->OUTCLR = LED3_MASK)
#define LED3_OFF (NRF_P0->OUTSET = LED3_MASK) #define LED3_OFF (LED_PORT->OUTSET = LED3_MASK)
#define LED3_TOGGLE (NRF_P0->OUT ^= LED3_MASK) #define LED3_TOGGLE (LED_PORT->OUT ^= LED3_MASK)
/** @} */ /** @} */
/** /**
...@@ -73,11 +74,6 @@ extern "C" { ...@@ -73,11 +74,6 @@ extern "C" {
#define BTN3_MODE GPIO_IN_PU #define BTN3_MODE GPIO_IN_PU
/** @} */ /** @} */
/**
* @brief Initialize board specific hardware, including clock, LEDs and std-IO
*/
void board_init(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment