mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
boards/slstk3701a: add Silabs EFM32 Giant Gecko GG11 Starter Kit
This commit is contained in:
parent
b34f48c233
commit
77769905cd
32
boards/slstk3701a/Kconfig
Normal file
32
boards/slstk3701a/Kconfig
Normal file
@ -0,0 +1,32 @@
|
||||
# Copyright (c) 2020 HAW Hamburg
|
||||
#
|
||||
# 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.
|
||||
|
||||
config BOARD
|
||||
default "slstk3701a" if BOARD_SLSTK3701A
|
||||
|
||||
config BOARD_SLSTK3701A
|
||||
bool
|
||||
default y
|
||||
select BOARD_COMMON_SILABS
|
||||
select CPU_MODEL_EFM32GG11B820F2048GL192
|
||||
select HAS_PERIPH_ADC
|
||||
select HAS_PERIPH_DAC
|
||||
select HAS_PERIPH_I2C
|
||||
select HAS_PERIPH_RTC
|
||||
select HAS_PERIPH_RTT
|
||||
select HAS_PERIPH_SPI
|
||||
select HAS_PERIPH_TIMER
|
||||
select HAS_PERIPH_UART
|
||||
select HAS_PERIPH_UART_MODECFG
|
||||
select HAS_PERIPH_USBDEV
|
||||
|
||||
select HAVE_SAUL_GPIO
|
||||
select HAVE_SI7021
|
||||
|
||||
select MODULE_SILABS_AEM if TEST_KCONFIG
|
||||
select MODULE_SILABS_BC if TEST_KCONFIG
|
||||
|
||||
source "$(RIOTBOARD)/common/silabs/Kconfig"
|
5
boards/slstk3701a/Makefile
Normal file
5
boards/slstk3701a/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
MODULE = board
|
||||
|
||||
DIRS = $(RIOTBOARD)/common/silabs
|
||||
|
||||
include $(RIOTBASE)/Makefile.base
|
13
boards/slstk3701a/Makefile.dep
Normal file
13
boards/slstk3701a/Makefile.dep
Normal file
@ -0,0 +1,13 @@
|
||||
ifneq (,$(filter saul_default,$(USEMODULE)))
|
||||
USEMODULE += efm32_coretemp
|
||||
USEMODULE += saul_gpio
|
||||
USEMODULE += si7021
|
||||
endif
|
||||
|
||||
# add board common drivers
|
||||
USEMODULE += boards_common_silabs
|
||||
USEMODULE += silabs_aem
|
||||
USEMODULE += silabs_bc
|
||||
|
||||
# include board common dependencies
|
||||
include $(RIOTBOARD)/common/silabs/Makefile.dep
|
16
boards/slstk3701a/Makefile.features
Normal file
16
boards/slstk3701a/Makefile.features
Normal file
@ -0,0 +1,16 @@
|
||||
CPU = efm32
|
||||
CPU_FAM = efm32gg11b
|
||||
CPU_MODEL = efm32gg11b820f2048gl192
|
||||
|
||||
# Put defined MCU peripherals here (in alphabetical order)
|
||||
FEATURES_PROVIDED += periph_adc
|
||||
FEATURES_PROVIDED += periph_dac
|
||||
FEATURES_PROVIDED += periph_i2c
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_rtt
|
||||
FEATURES_PROVIDED += periph_spi
|
||||
FEATURES_PROVIDED += periph_timer
|
||||
FEATURES_PROVIDED += periph_uart periph_uart_modecfg
|
||||
FEATURES_PROVIDED += periph_usbdev
|
||||
|
||||
include $(RIOTBOARD)/common/silabs/Makefile.features
|
12
boards/slstk3701a/Makefile.include
Normal file
12
boards/slstk3701a/Makefile.include
Normal file
@ -0,0 +1,12 @@
|
||||
# set default port depending on operating system
|
||||
PORT_LINUX ?= /dev/ttyACM0
|
||||
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
|
||||
|
||||
# setup serial terminal
|
||||
include $(RIOTMAKE)/tools/serial.inc.mk
|
||||
|
||||
# setup JLink for flashing
|
||||
JLINK_PRE_FLASH = r
|
||||
|
||||
# include board common
|
||||
include $(RIOTBOARD)/common/silabs/Makefile.include
|
31
boards/slstk3701a/board.c
Normal file
31
boards/slstk3701a/board.c
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2015-2020 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_slstk3701a
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Board specific implementations SLSTK3701A board
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
* @author Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include "board.h"
|
||||
#include "board_common.h"
|
||||
|
||||
void board_init(void)
|
||||
{
|
||||
#ifndef RIOTBOOT
|
||||
/* perform common board initialization */
|
||||
board_common_init();
|
||||
#endif
|
||||
}
|
288
boards/slstk3701a/doc.txt
Normal file
288
boards/slstk3701a/doc.txt
Normal file
@ -0,0 +1,288 @@
|
||||
/**
|
||||
* @defgroup boards_slstk3701a Silicon Labs SLSTK3701A starter kit
|
||||
* @ingroup boards
|
||||
* @brief Support for Silicon Labs SLSTK3701A starter kit
|
||||
|
||||
## Overview
|
||||
|
||||
Silicon Labs EFM32 Giant Gecko GG11 Starter Kit is equipped with the EFM32 microcontroller.
|
||||
It is specifically designed for low-power applications, having energy-saving
|
||||
peripherals, different energy modes and short wake-up times.
|
||||
|
||||
The starter kit is equipped with an Advanced Energy Monitor. This allows you to
|
||||
actively measure the power consumption of your hardware and code, in real-time.
|
||||
|
||||
## Hardware
|
||||
|
||||
### MCU
|
||||
|
||||
| MCU | EFM32GG11B820F2048GL192 |
|
||||
|-----------------|------------------------------------------------------|
|
||||
| Family | ARM Cortex-M4F |
|
||||
| Vendor | Silicon Labs |
|
||||
| Vendor Family | EFM32 Giant Gecko 11B |
|
||||
| RAM | 512.0 KiB |
|
||||
| Flash | 2048.0 KiB |
|
||||
| EEPROM | no |
|
||||
| Frequency | up to 50 MHz |
|
||||
| FPU | yes |
|
||||
| MPU | yes |
|
||||
| DMA | 24 channels |
|
||||
| Timers | 4 x 32-bit + 7 x 16-bit + 1 x 16-bit (low power) |
|
||||
| ADCs | 2 x 12-bit ADC (1 Msample/s) |
|
||||
| DACs | 2 x 12-bit VDAC (500 ksamples/s), 1 x IDAC |
|
||||
| I2Cs | 3 x |
|
||||
| SPIs | 4 x USART |
|
||||
| UARTs | 4 x USART, 1 x LEUART |
|
||||
| USB | 1 x Low Energy Full-Speed USB 2.0 |
|
||||
| Ethernet | Ethernet MAC 10/100 Mbps |
|
||||
| Vcc | 1.85 V - 3.8 V |
|
||||
| Datasheet | [Datasheet](https://www.silabs.com/documents/public/data-sheets/efm32gg11-datasheet.pdf) |
|
||||
| Manual | [Manual](https://www.silabs.com/documents/public/reference-manuals/efm32gg11-rm.pdf) |
|
||||
| Board Manual | [Board Manual](https://www.silabs.com/documents/public/user-guides/ug287-stk3701.pdf) |
|
||||
| Board Schematic | Can be downloaded using Silicon Labs' Simplicity Studio |
|
||||
|
||||
### Pinout
|
||||
|
||||
This is the pinout of the expansion header on the right side of the board.
|
||||
PIN 1 is the bottom-left contact when the header faces you horizontally.
|
||||
|
||||
| RIOT Peripheral | Name | PIN | PIN | Name | RIOT Peripheral |
|
||||
|-----------------|------|-----|-----|--------|-----------------|
|
||||
| | 3V3 | 20 | 19 | ID SDA | |
|
||||
| | 5V | 18 | 17 | ID SCL | |
|
||||
| I2C_DEV(0):SDA | PC0 | 16 | 15 | PC1 | I2C_DEV(0):SCL |
|
||||
| UART_DEV(1):RX | PE9 | 14 | 13 | PB9 | |
|
||||
| UART_DEV(1):TX | PE8 | 12 | 11 | PB11 | DAC_LINE(0) |
|
||||
| | PE13 | 10 | 9 | PC5 | I2C_DEV(1):SCL |
|
||||
| SPI_DEV(0):CLK | PE12 | 8 | 7 | PC4 | I2C_DEV(1):SDA |
|
||||
| SPI_DEV(0):MISO | PE11 | 6 | 5 | PA13 | |
|
||||
| SPI_DEV(0):MOSI | PE10 | 4 | 3 | PA12 | |
|
||||
| | VMCU | 2 | 1 | GND | |
|
||||
|
||||
**Note**: not all starter kits by Silicon Labs share the same pinout!
|
||||
|
||||
**Note:** some pins are connected to the board controller, when enabled!
|
||||
|
||||
### Peripheral mapping
|
||||
|
||||
| Peripheral | Number | Hardware | Pins | Comments |
|
||||
|-------------|---------|------------|------------------|-------------------------------------|
|
||||
| ADC | 0 | ADC0:CH0 | | Internal temperature |
|
||||
| ADC | 1 | ADC0:CH1 | | AVDD |
|
||||
| DAC | 0 | DAC0:OUT0 | PB11 | AVVD as reference voltage |
|
||||
| I2C | 0 | I2C0 | SDA:PC0, SCL:PC1 | Normal speed |
|
||||
| I2C | 1 | I2C1 | SDA:PC7, SCL:PC5 | Normal speed |
|
||||
| I2C | 2 | I2C2 | SDA:PI4, SCL:PI5 | Normal speed, Sensor I2C bus |
|
||||
| HWCRYPTO | - | - | | AES128/AES256, SHA1, SHA224/SHA256 |
|
||||
| HWRNG | - | TNRG0 | | True Random Number Generator (TRNG) |
|
||||
| RTT | - | RTCC | | 1 Hz interval, either RTT or RTC |
|
||||
| RTC | - | RTCC | | 1 Hz interval, either RTT or RTC |
|
||||
| SPI | 0 | USART0 | MOSI:PE10, MISO:PE11, CLK:PE12 | |
|
||||
| Timer | 0 | WTIMER0 + WTIMER1 | | WTIMER0 is used as prescaler |
|
||||
| Timer | 1 | TIMER0 + TIMER1 | | TIMER0 is used as prescaler |
|
||||
| Timer | 2 | LETIMER0 | | |
|
||||
| UART | 0 | USART4 | RX:PH5, TX:PH4 | Default STDIO |
|
||||
| UART | 1 | USART5 | RX:PE9, TX:PE8 | |
|
||||
|
||||
### User interface
|
||||
|
||||
| Peripheral | Mapped to | Pin | Comments |
|
||||
|------------|-----------|-----------|------------|
|
||||
| Button | PB0_PIN | PC8 | |
|
||||
| | PB1_PIN | PC9 | |
|
||||
| LED | LED0R_PIN | PH10 | |
|
||||
| | LED0G_PIN | PH11 | |
|
||||
| | LED0B_PIN | PH12 | |
|
||||
| | LED1R_PIN | PH13 | |
|
||||
| | LED1G_PIN | PH14 | |
|
||||
| | LED1B_PIN | PH15 | |
|
||||
| | LED0_PIN | LED0R_PIN | |
|
||||
| | LED1_PIN | LED1R_PIN | |
|
||||
|
||||
## Implementation Status
|
||||
|
||||
| Device | ID | Supported | Comments |
|
||||
|------------------|------------|-----------|----------------------------------------------------|
|
||||
| MCU | EFM32GG11B | yes | Power modes supported |
|
||||
| Low-level driver | ADC | yes | |
|
||||
| | DAC | yes | VDAC, IDAC is not supported |
|
||||
| | Ethernet | no | |
|
||||
| | Flash | yes | |
|
||||
| | GPIO | yes | Interrupts are shared across pins (see ref manual) |
|
||||
| | HW Crypto | yes | |
|
||||
| | I2C | yes | |
|
||||
| | PWM | yes | |
|
||||
| | RTCC | yes | As RTT or RTC |
|
||||
| | SPI | yes | Only master mode |
|
||||
| | Timer | yes | |
|
||||
| | TRNG | yes | True Random Number Generator |
|
||||
| | UART | yes | USART is shared with SPI. LEUART baud rate limited |
|
||||
| | USB | yes | Device mode |
|
||||
|
||||
## Board configuration
|
||||
|
||||
### Board controller
|
||||
|
||||
The starter kit is equipped with a Board Controller. This controller provides a
|
||||
virtual serial port. The board controller is enabled via a GPIO pin.
|
||||
|
||||
By default, this pin is enabled. You can disable the board controller module by
|
||||
passing `DISABLE_MODULE=silabs_bc` to the `make` command.
|
||||
|
||||
**Note:** to use the virtual serial port, ensure you have the latest board
|
||||
controller firmware installed.
|
||||
|
||||
**Note:** the board controller *always* configures the virtual serial port at
|
||||
115200 baud with 8 bits, no parity and one stop bit. This also means that it
|
||||
expects data from the MCU with the same settings.
|
||||
|
||||
### Advanced Energy Monitor
|
||||
|
||||
This development kit has an Advanced Energy Monitor. It can be connected to the
|
||||
Simplicity Studio development software.
|
||||
|
||||
This development kit can measure energy consumption and correlate this with the
|
||||
code. It allows you to measure energy consumption on code-level.
|
||||
|
||||
The board controller is responsible for measuring energy consumption. For
|
||||
real-time code correlation, the CoreDebug peripheral will be configured to
|
||||
output MCU register data and interrupt data via the SWO port.
|
||||
|
||||
By default, this feature is enabled. It can be disabled by passing
|
||||
`DISABLE_MODULE=silabs_aem` to the `make` command.
|
||||
|
||||
Note that Simplicity Studio requires debug symbols to correlate code. RIOT-OS
|
||||
defaults to GDB debug symbols, but Simplicity Studio requires DWARF-2 debug
|
||||
symbols (`-gdwarf-2` for GCC).
|
||||
|
||||
### Clock selection
|
||||
|
||||
There are several clock sources that are available for the different
|
||||
peripherals. You are advised to read [AN0004.0]
|
||||
(https://www.silabs.com/documents/public/application-notes/an0004.0-efm32-cmu.pdf)
|
||||
to get familiar with the different clocks.
|
||||
|
||||
| Source | Internal | Speed | Comments |
|
||||
|--------|----------|------------|------------------------------------|
|
||||
| HFRCO | Yes | 19 MHz | Enabled during startup, changeable |
|
||||
| HFXO | No | 50 MHz | |
|
||||
| LFRCO | Yes | 32.768 kHz | |
|
||||
| LFXO | No | 32.768 kHz | |
|
||||
| ULFRCO | No | 1 kHz | Not very reliable as a time source |
|
||||
|
||||
The sources can be used to clock following branches:
|
||||
|
||||
| Branch | Sources | Comments |
|
||||
|--------|-------------------------|------------------------------|
|
||||
| HF | HFRCO, HFXO | Core, peripherals |
|
||||
| LFA | LFRCO, LFXO | Low-power timers |
|
||||
| LFB | LFRCO, LFXO, CORELEDIV2 | Low-power UART |
|
||||
| LFE | LFRCO, LFXO | Real-time Clock and Calendar |
|
||||
|
||||
CORELEDIV2 is a source that depends on the clock source that powers the core.
|
||||
It is divided by 2 or 4 to not exceed maximum clock frequencies (EMLIB takes
|
||||
care of this).
|
||||
|
||||
The frequencies mentioned in the tables above are specific for this starter
|
||||
kit.
|
||||
|
||||
It is important that the clock speeds are known to the code, for proper
|
||||
calculations of speeds and baud rates. If the HFXO or LFXO are different from
|
||||
the speeds above, ensure to pass `EFM32_HFXO_FREQ=freq_in_hz` and
|
||||
`EFM32_LFXO_FREQ=freq_in_hz` to your compiler.
|
||||
|
||||
You can override the branch's clock source by adding `CLOCK_LFA=source` to your
|
||||
compiler defines, e.g. `CLOCK_LFA=cmuSelect_LFRCO`.
|
||||
|
||||
### Low-power peripherals
|
||||
|
||||
The low-power UART is capable of providing an UART peripheral using a low-speed
|
||||
clock. When the LFB clock source is the LFRCO or LFXO, it can still be used in
|
||||
EM2. However, this limits the baud rate to 9600 baud. If a higher baud rate is
|
||||
desired, set the clock source to CORELEDIV2.
|
||||
|
||||
**Note:** peripheral mappings in your board definitions will not be affected by
|
||||
this setting. Ensure you do not refer to any low-power peripherals.
|
||||
|
||||
### RTC or RTT
|
||||
|
||||
RIOT-OS has support for *Real-Time Tickers* and *Real-Time Clocks*.
|
||||
|
||||
However, this board MCU family has support for a 32-bit *Real-Time Clock and
|
||||
Calendar*, which can be configured in ticker mode **or** calendar mode.
|
||||
Therefore, only one of both peripherals can be enabled at the same time.
|
||||
|
||||
Configured at 1 Hz interval, the RTCC will overflow each 136 years.
|
||||
|
||||
### Hardware crypto
|
||||
This MCU is equipped with a hardware-accelerated crypto peripheral that can
|
||||
speed up AES128, AES256, SHA1, SHA256 and several other cryptographic
|
||||
computations.
|
||||
|
||||
A peripheral driver interface is proposed, but not yet implemented.
|
||||
|
||||
### Usage of EMLIB
|
||||
|
||||
This port makes uses of EMLIB by Silicon Labs to abstract peripheral registers.
|
||||
While some overhead is to be expected, it ensures proper setup of devices,
|
||||
provides chip errata and simplifies development. The exact overhead depends on
|
||||
the application and peripheral usage, but the largest overhead is expected
|
||||
during peripheral setup. A lot of read/write/get/set methods are implemented as
|
||||
inline methods or macros (which have no overhead).
|
||||
|
||||
Another advantage of EMLIB are the included assertions. These assertions ensure
|
||||
that peripherals are used properly. To enable this, pass `DEBUG_EFM` to your
|
||||
compiler.
|
||||
|
||||
### Pin locations
|
||||
|
||||
The EFM32 platform supports peripherals to be mapped to different pins
|
||||
(predefined locations). The definitions in `periph_conf.h` mostly consist of a
|
||||
location number and the actual pins. The actual pins are required to configure
|
||||
the pins via GPIO driver, while the location is used to map the peripheral to
|
||||
these pins.
|
||||
|
||||
In other words, these definitions must match. Refer to the data sheet for more
|
||||
information.
|
||||
|
||||
This MCU has extended pin mapping support. Each pin of a peripheral can be
|
||||
connected separately to one of the predefined pins for that peripheral.
|
||||
|
||||
## Flashing the device
|
||||
|
||||
The board provides a on-board SEGGER J-Link debugger through the micro USB
|
||||
board so that flashing and debugging is very easy.
|
||||
|
||||
Flashing is supported by RIOT-OS using the command below:
|
||||
|
||||
```
|
||||
make flash
|
||||
```
|
||||
|
||||
To run the GDB debugger, use the command:
|
||||
|
||||
```
|
||||
make debug
|
||||
```
|
||||
|
||||
Or, to connect with your own debugger:
|
||||
|
||||
```
|
||||
make debug-server
|
||||
```
|
||||
|
||||
Some boards have (limited) support for emulation, which can be started with:
|
||||
|
||||
```
|
||||
make emulate
|
||||
```
|
||||
|
||||
## Supported Toolchains
|
||||
For using the Silicon Labs SLSTK3701A starter kit we strongly recommend
|
||||
the usage of the [GNU Tools for ARM Embedded Processors](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm)
|
||||
toolchain.
|
||||
|
||||
## License information
|
||||
* Silicon Labs' EMLIB: zlib-style license (permits distribution of source).
|
||||
*/
|
138
boards/slstk3701a/include/board.h
Normal file
138
boards/slstk3701a/include/board.h
Normal file
@ -0,0 +1,138 @@
|
||||
/*
|
||||
* Copyright (C) 2015-2020 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_slstk3701a
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Board specific definitions for the SLSTK3701A starter kit
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
* @author Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef BOARD_H
|
||||
#define BOARD_H
|
||||
|
||||
#include "cpu.h"
|
||||
#include "periph_conf.h"
|
||||
#include "periph/gpio.h"
|
||||
#include "periph/spi.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @name Xtimer configuration
|
||||
*
|
||||
* The timer runs at 1000 kHz to increase accuracy, or at 32.768 kHz if
|
||||
* LETIMER is used.
|
||||
* @{
|
||||
*/
|
||||
#if IS_ACTIVE(CONFIG_EFM32_XTIMER_USE_LETIMER)
|
||||
#define XTIMER_DEV (TIMER_DEV(2))
|
||||
#define XTIMER_HZ (32768UL)
|
||||
#define XTIMER_WIDTH (16)
|
||||
#else
|
||||
#define XTIMER_DEV (TIMER_DEV(0))
|
||||
#define XTIMER_HZ (1000000UL)
|
||||
#define XTIMER_WIDTH (32)
|
||||
#endif
|
||||
#define XTIMER_CHAN (0)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Board controller configuration
|
||||
*
|
||||
* Define the GPIO pin to enable the BC, to allow serial communication
|
||||
* via the USB port.
|
||||
* @{
|
||||
*/
|
||||
#define BC_PIN GPIO_PIN(PE, 1)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Push button pin definitions
|
||||
* @{
|
||||
*/
|
||||
#define PB0_PIN GPIO_PIN(PC, 8)
|
||||
#define PB1_PIN GPIO_PIN(PC, 9)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name LED pin definitions
|
||||
* @{
|
||||
*/
|
||||
#define LED0R_PIN GPIO_PIN(PH, 10)
|
||||
#define LED0G_PIN GPIO_PIN(PH, 11)
|
||||
#define LED0B_PIN GPIO_PIN(PH, 12)
|
||||
#define LED1R_PIN GPIO_PIN(PH, 13)
|
||||
#define LED1G_PIN GPIO_PIN(PH, 14)
|
||||
#define LED1B_PIN GPIO_PIN(PH, 15)
|
||||
#define LED0_PIN LED0R_PIN
|
||||
#define LED1_PIN LED1R_PIN
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Macros for controlling the on-board LEDs
|
||||
* @{
|
||||
*/
|
||||
#define LED0_ON gpio_set(LED0_PIN)
|
||||
#define LED0_OFF gpio_clear(LED0_PIN)
|
||||
#define LED0_TOGGLE gpio_toggle(LED0_PIN)
|
||||
#define LED1_ON gpio_set(LED1_PIN)
|
||||
#define LED1_OFF gpio_clear(LED1_PIN)
|
||||
#define LED1_TOGGLE gpio_toggle(LED1_PIN)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Display configuration
|
||||
*
|
||||
* Connection to the on-board Sharp Memory LCD (LS013B7DH03).
|
||||
* @{
|
||||
*/
|
||||
#define DISP_SPI SPI_DEV(0)
|
||||
#define DISP_COM_PIN GPIO_PIN(PA, 11)
|
||||
#define DISP_CS_PIN GPIO_PIN(PC, 14)
|
||||
#define DISP_EN_PIN GPIO_PIN(PA, 9)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Temperature sensor configuration
|
||||
*
|
||||
* Connection to the on-board temperature/humidity sensor (Si7021).
|
||||
* @{
|
||||
*/
|
||||
#define SI7021_I2C I2C_DEV(2)
|
||||
#define SI7021_EN_PIN GPIO_PIN(PB, 3)
|
||||
|
||||
#define SI70XX_PARAM_I2C_DEV SI7021_I2C
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Core temperature sensor configuration
|
||||
*
|
||||
* Connection to the on-chip temperature sensor.
|
||||
* @{
|
||||
*/
|
||||
#define CORETEMP_ADC ADC_LINE(0)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief Initialize the board (GPIO, sensors, clocks).
|
||||
*/
|
||||
void board_init(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* BOARD_H */
|
||||
/** @} */
|
63
boards/slstk3701a/include/gpio_params.h
Normal file
63
boards/slstk3701a/include/gpio_params.h
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (C) 2016-2020 Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*
|
||||
* 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_slstk3701a
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Board specific configuration of direct mapped GPIOs
|
||||
*
|
||||
* @author Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef GPIO_PARAMS_H
|
||||
#define GPIO_PARAMS_H
|
||||
|
||||
#include "board.h"
|
||||
#include "saul/periph.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIO pin configuration
|
||||
*/
|
||||
static const saul_gpio_params_t saul_gpio_params[] =
|
||||
{
|
||||
{
|
||||
.name = "LED 0",
|
||||
.pin = LED0_PIN,
|
||||
.mode = GPIO_OUT
|
||||
},
|
||||
{
|
||||
.name = "LED 1",
|
||||
.pin = LED1_PIN,
|
||||
.mode = GPIO_OUT
|
||||
},
|
||||
{
|
||||
.name = "Button 1",
|
||||
.pin = PB0_PIN,
|
||||
.mode = GPIO_IN_PU,
|
||||
.flags = SAUL_GPIO_INVERTED
|
||||
},
|
||||
{
|
||||
.name = "Button 2",
|
||||
.pin = PB1_PIN,
|
||||
.mode = GPIO_IN_PU,
|
||||
.flags = SAUL_GPIO_INVERTED
|
||||
}
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GPIO_PARAMS_H */
|
||||
/** @} */
|
265
boards/slstk3701a/include/periph_conf.h
Normal file
265
boards/slstk3701a/include/periph_conf.h
Normal file
@ -0,0 +1,265 @@
|
||||
/*
|
||||
* Copyright (C) 2015-2020 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_slstk3701a
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Configuration of CPU peripherals for the SLSTK3701A starter kit
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
* @author Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_CONF_H
|
||||
#define PERIPH_CONF_H
|
||||
|
||||
#include "cpu.h"
|
||||
#include "periph_cpu.h"
|
||||
#include "em_cmu.h"
|
||||
#include "usbdev_cfg_otg_fs.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @name Clock configuration
|
||||
* @{
|
||||
*/
|
||||
#ifndef CLOCK_HF
|
||||
#define CLOCK_HF cmuSelect_HFXO
|
||||
#endif
|
||||
#ifndef CLOCK_CORE_DIV
|
||||
#define CLOCK_CORE_DIV cmuClkDiv_1
|
||||
#endif
|
||||
#ifndef CLOCK_LFA
|
||||
#define CLOCK_LFA cmuSelect_LFXO
|
||||
#endif
|
||||
#ifndef CLOCK_LFB
|
||||
#define CLOCK_LFB cmuSelect_LFXO
|
||||
#endif
|
||||
#ifndef CLOCK_LFE
|
||||
#define CLOCK_LFE cmuSelect_LFXO
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name ADC configuration
|
||||
* @{
|
||||
*/
|
||||
static const adc_conf_t adc_config[] = {
|
||||
{
|
||||
.dev = ADC0,
|
||||
.cmu = cmuClock_ADC0,
|
||||
}
|
||||
};
|
||||
|
||||
static const adc_chan_conf_t adc_channel_config[] = {
|
||||
{
|
||||
.dev = 0,
|
||||
.input = adcPosSelTEMP,
|
||||
.reference = adcRef1V25,
|
||||
.acq_time = adcAcqTime8
|
||||
},
|
||||
{
|
||||
.dev = 0,
|
||||
.input = adcPosSelAVDD,
|
||||
.reference = adcRef5V,
|
||||
.acq_time = adcAcqTime8
|
||||
}
|
||||
};
|
||||
|
||||
#define ADC_DEV_NUMOF ARRAY_SIZE(adc_config)
|
||||
#define ADC_NUMOF ARRAY_SIZE(adc_channel_config)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name DAC configuration
|
||||
* @{
|
||||
*/
|
||||
static const dac_conf_t dac_config[] = {
|
||||
{
|
||||
.dev = VDAC0,
|
||||
.ref = vdacRefAvdd,
|
||||
.cmu = cmuClock_VDAC0,
|
||||
},
|
||||
};
|
||||
|
||||
static const dac_chan_conf_t dac_channel_config[] = {
|
||||
{
|
||||
.dev = 0,
|
||||
.index = 0,
|
||||
},
|
||||
};
|
||||
|
||||
#define DAC_DEV_NUMOF ARRAY_SIZE(dac_config)
|
||||
#define DAC_NUMOF ARRAY_SIZE(dac_channel_config)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name I2C configuration
|
||||
* @{
|
||||
*/
|
||||
static const i2c_conf_t i2c_config[] = {
|
||||
{
|
||||
.dev = I2C0,
|
||||
.sda_pin = GPIO_PIN(PC, 0),
|
||||
.scl_pin = GPIO_PIN(PC, 1),
|
||||
.loc = I2C_ROUTELOC0_SDALOC_LOC4 |
|
||||
I2C_ROUTELOC0_SCLLOC_LOC4,
|
||||
.cmu = cmuClock_I2C0,
|
||||
.irq = I2C0_IRQn,
|
||||
.speed = I2C_SPEED_NORMAL
|
||||
},
|
||||
{
|
||||
.dev = I2C1,
|
||||
.sda_pin = GPIO_PIN(PC, 7),
|
||||
.scl_pin = GPIO_PIN(PC, 5),
|
||||
.loc = I2C_ROUTELOC0_SDALOC_LOC0 |
|
||||
I2C_ROUTELOC0_SCLLOC_LOC0,
|
||||
.cmu = cmuClock_I2C1,
|
||||
.irq = I2C1_IRQn,
|
||||
.speed = I2C_SPEED_NORMAL
|
||||
},
|
||||
{
|
||||
.dev = I2C2,
|
||||
.sda_pin = GPIO_PIN(PI, 4),
|
||||
.scl_pin = GPIO_PIN(PI, 5),
|
||||
.loc = I2C_ROUTELOC0_SDALOC_LOC7 |
|
||||
I2C_ROUTELOC0_SCLLOC_LOC7,
|
||||
.cmu = cmuClock_I2C2,
|
||||
.irq = I2C2_IRQn,
|
||||
.speed = I2C_SPEED_NORMAL
|
||||
}
|
||||
};
|
||||
|
||||
#define I2C_NUMOF ARRAY_SIZE(i2c_config)
|
||||
#define I2C_0_ISR isr_i2c0
|
||||
#define I2C_1_ISR isr_i2c1
|
||||
#define I2C_2_ISR isr_i2c2
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name RTT configuration
|
||||
* @{
|
||||
*/
|
||||
#ifndef RTT_FREQUENCY
|
||||
#define RTT_FREQUENCY (1U)
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name SPI configuration
|
||||
* @{
|
||||
*/
|
||||
static const spi_dev_t spi_config[] = {
|
||||
{
|
||||
.dev = USART0,
|
||||
.mosi_pin = GPIO_PIN(PE, 10),
|
||||
.miso_pin = GPIO_PIN(PE, 11),
|
||||
.clk_pin = GPIO_PIN(PE, 12),
|
||||
.loc = USART_ROUTELOC0_TXLOC_LOC0 |
|
||||
USART_ROUTELOC0_RXLOC_LOC0 |
|
||||
USART_ROUTELOC0_CLKLOC_LOC0,
|
||||
.cmu = cmuClock_USART0,
|
||||
.irq = USART0_RX_IRQn
|
||||
}
|
||||
};
|
||||
|
||||
#define SPI_NUMOF ARRAY_SIZE(spi_config)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Timer configuration
|
||||
*
|
||||
* The implementation uses two timers in cascade mode.
|
||||
* @{
|
||||
*/
|
||||
static const timer_conf_t timer_config[] = {
|
||||
{
|
||||
.prescaler = {
|
||||
.dev = WTIMER0,
|
||||
.cmu = cmuClock_WTIMER0
|
||||
},
|
||||
.timer = {
|
||||
.dev = WTIMER1,
|
||||
.cmu = cmuClock_WTIMER1
|
||||
},
|
||||
.irq = WTIMER1_IRQn,
|
||||
.channel_numof = 3
|
||||
},
|
||||
{
|
||||
.prescaler = {
|
||||
.dev = TIMER0,
|
||||
.cmu = cmuClock_TIMER0
|
||||
},
|
||||
.timer = {
|
||||
.dev = TIMER1,
|
||||
.cmu = cmuClock_TIMER1
|
||||
},
|
||||
.irq = TIMER1_IRQn,
|
||||
.channel_numof = 3
|
||||
},
|
||||
{
|
||||
.prescaler = {
|
||||
.dev = NULL,
|
||||
.cmu = cmuClock_LETIMER0
|
||||
},
|
||||
.timer = {
|
||||
.dev = LETIMER0,
|
||||
.cmu = cmuClock_LETIMER0
|
||||
},
|
||||
.irq = LETIMER0_IRQn,
|
||||
.channel_numof = 2
|
||||
}
|
||||
};
|
||||
|
||||
#define TIMER_NUMOF ARRAY_SIZE(timer_config)
|
||||
#define TIMER_0_ISR isr_wtimer1
|
||||
#define TIMER_1_ISR isr_timer1
|
||||
#define TIMER_2_ISR isr_letimer0
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name UART configuration
|
||||
* @{
|
||||
*/
|
||||
static const uart_conf_t uart_config[] = {
|
||||
{
|
||||
.dev = USART4,
|
||||
.rx_pin = GPIO_PIN(PH, 5),
|
||||
.tx_pin = GPIO_PIN(PH, 4),
|
||||
.loc = USART_ROUTELOC0_RXLOC_LOC4 |
|
||||
USART_ROUTELOC0_TXLOC_LOC4,
|
||||
.cmu = cmuClock_USART4,
|
||||
.irq = USART4_RX_IRQn,
|
||||
},
|
||||
{
|
||||
.dev = USART5,
|
||||
.rx_pin = GPIO_PIN(PE, 9),
|
||||
.tx_pin = GPIO_PIN(PE, 8),
|
||||
.loc = USART_ROUTELOC0_RXLOC_LOC4 |
|
||||
USART_ROUTELOC0_TXLOC_LOC4,
|
||||
.cmu = cmuClock_USART5,
|
||||
.irq = USART5_RX_IRQn,
|
||||
}
|
||||
};
|
||||
|
||||
#define UART_NUMOF ARRAY_SIZE(uart_config)
|
||||
#define UART_0_ISR_RX isr_usart4_rx
|
||||
#define UART_1_ISR_RX isr_usart5_rx
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_CONF_H */
|
||||
/** @} */
|
Loading…
Reference in New Issue
Block a user