diff --git a/boards/slstk3701a/Kconfig b/boards/slstk3701a/Kconfig new file mode 100644 index 0000000000..dcbd19a447 --- /dev/null +++ b/boards/slstk3701a/Kconfig @@ -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" diff --git a/boards/slstk3701a/Makefile b/boards/slstk3701a/Makefile new file mode 100644 index 0000000000..39108f4589 --- /dev/null +++ b/boards/slstk3701a/Makefile @@ -0,0 +1,5 @@ +MODULE = board + +DIRS = $(RIOTBOARD)/common/silabs + +include $(RIOTBASE)/Makefile.base diff --git a/boards/slstk3701a/Makefile.dep b/boards/slstk3701a/Makefile.dep new file mode 100644 index 0000000000..1208c3a05e --- /dev/null +++ b/boards/slstk3701a/Makefile.dep @@ -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 diff --git a/boards/slstk3701a/Makefile.features b/boards/slstk3701a/Makefile.features new file mode 100644 index 0000000000..b4827287fc --- /dev/null +++ b/boards/slstk3701a/Makefile.features @@ -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 diff --git a/boards/slstk3701a/Makefile.include b/boards/slstk3701a/Makefile.include new file mode 100644 index 0000000000..52633b1c80 --- /dev/null +++ b/boards/slstk3701a/Makefile.include @@ -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 diff --git a/boards/slstk3701a/board.c b/boards/slstk3701a/board.c new file mode 100644 index 0000000000..a5ff45751f --- /dev/null +++ b/boards/slstk3701a/board.c @@ -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 + * @author Bas Stottelaar + * + * @} + */ + +#include "board.h" +#include "board_common.h" + +void board_init(void) +{ +#ifndef RIOTBOOT + /* perform common board initialization */ + board_common_init(); +#endif +} diff --git a/boards/slstk3701a/doc.txt b/boards/slstk3701a/doc.txt new file mode 100644 index 0000000000..5535d3c6eb --- /dev/null +++ b/boards/slstk3701a/doc.txt @@ -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). + */ diff --git a/boards/slstk3701a/include/board.h b/boards/slstk3701a/include/board.h new file mode 100644 index 0000000000..6eff534c58 --- /dev/null +++ b/boards/slstk3701a/include/board.h @@ -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 + * @author Bas Stottelaar + */ + +#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 */ +/** @} */ diff --git a/boards/slstk3701a/include/gpio_params.h b/boards/slstk3701a/include/gpio_params.h new file mode 100644 index 0000000000..699df52cc3 --- /dev/null +++ b/boards/slstk3701a/include/gpio_params.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2016-2020 Bas Stottelaar + * + * 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 + */ + +#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 */ +/** @} */ diff --git a/boards/slstk3701a/include/periph_conf.h b/boards/slstk3701a/include/periph_conf.h new file mode 100644 index 0000000000..a188846d49 --- /dev/null +++ b/boards/slstk3701a/include/periph_conf.h @@ -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 + * @author Bas Stottelaar + */ + +#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 */ +/** @} */