From 99966b318a409e74157c70569b7d1ea145039672 Mon Sep 17 00:00:00 2001 From: Dylan Laduranty <dylan.laduranty@mesotic.com> Date: Mon, 21 Jan 2019 17:07:18 +0100 Subject: [PATCH] board/common/saml1x: add common configuration --- boards/common/saml1x/Makefile | 3 + boards/common/saml1x/Makefile.dep | 3 + boards/common/saml1x/Makefile.features | 13 ++ boards/common/saml1x/Makefile.include | 12 ++ boards/common/saml1x/board.c | 44 ++++++ boards/common/saml1x/include/board.h | 76 ++++++++++ boards/common/saml1x/include/gpio_params.h | 53 +++++++ boards/common/saml1x/include/periph_conf.h | 155 +++++++++++++++++++++ 8 files changed, 359 insertions(+) create mode 100644 boards/common/saml1x/Makefile create mode 100644 boards/common/saml1x/Makefile.dep create mode 100644 boards/common/saml1x/Makefile.features create mode 100644 boards/common/saml1x/Makefile.include create mode 100644 boards/common/saml1x/board.c create mode 100644 boards/common/saml1x/include/board.h create mode 100644 boards/common/saml1x/include/gpio_params.h create mode 100644 boards/common/saml1x/include/periph_conf.h diff --git a/boards/common/saml1x/Makefile b/boards/common/saml1x/Makefile new file mode 100644 index 0000000000..c4777b072a --- /dev/null +++ b/boards/common/saml1x/Makefile @@ -0,0 +1,3 @@ +MODULE = boards_common_saml1x + +include $(RIOTBASE)/Makefile.base diff --git a/boards/common/saml1x/Makefile.dep b/boards/common/saml1x/Makefile.dep new file mode 100644 index 0000000000..5472bf8b8d --- /dev/null +++ b/boards/common/saml1x/Makefile.dep @@ -0,0 +1,3 @@ +ifneq (,$(filter saul_default,$(USEMODULE))) + USEMODULE += saul_gpio +endif diff --git a/boards/common/saml1x/Makefile.features b/boards/common/saml1x/Makefile.features new file mode 100644 index 0000000000..fcac28be9e --- /dev/null +++ b/boards/common/saml1x/Makefile.features @@ -0,0 +1,13 @@ +# Put defined MCU peripherals here (in alphabetical order) +FEATURES_PROVIDED += periph_adc +FEATURES_PROVIDED += periph_i2c +FEATURES_PROVIDED += periph_rtc +FEATURES_PROVIDED += periph_rtt +FEATURES_PROVIDED += periph_spi +FEATURES_PROVIDED += periph_timer +FEATURES_PROVIDED += periph_uart + +# The board MPU family (used for grouping by the CI system) +FEATURES_MCU_GROUP = cortex_m23 + +include $(RIOTCPU)/saml1x/Makefile.features diff --git a/boards/common/saml1x/Makefile.include b/boards/common/saml1x/Makefile.include new file mode 100644 index 0000000000..9105268c48 --- /dev/null +++ b/boards/common/saml1x/Makefile.include @@ -0,0 +1,12 @@ +# define the cpu used by the saml11 board +export CPU = saml1x + +# set edbg device type +EDBG_DEVICE_TYPE = mchp_cm23 + +USEMODULE += boards_common_saml1x + +include $(RIOTMAKE)/boards/sam0.inc.mk + +# add the common header files to the include path +INCLUDES += -I$(RIOTBOARD)/common/saml1x/include diff --git a/boards/common/saml1x/board.c b/boards/common/saml1x/board.c new file mode 100644 index 0000000000..2aed9531f6 --- /dev/null +++ b/boards/common/saml1x/board.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2019 Mesotic SAS + * + * 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_common_saml1x + * @{ + * + * @file board.c + * @brief Board specific implementations for the Microchip + * SAML10 and SAML11 Xplained Pro board + * + * @author Dylan Laduranty <dylan.laduranty@mesotic.com> + * + * @} + */ + +#include "cpu.h" +#include "board.h" +#include "periph/gpio.h" + +void led_init(void); + +void board_init(void) +{ + /* initialize the boards LEDs */ + led_init(); + /* initialize the CPU */ + cpu_init(); + +} + + +/** + * @brief Initialize the boards on-board LED + */ +void led_init(void) +{ + gpio_init(GPIO_PIN(PA, 7), GPIO_OUT); +} diff --git a/boards/common/saml1x/include/board.h b/boards/common/saml1x/include/board.h new file mode 100644 index 0000000000..b8a535e158 --- /dev/null +++ b/boards/common/saml1x/include/board.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2019 Mesotic SAS + * + * 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. + */ + +/** + * @defgroup boards_common_saml1x Microchip SAML1X + * @ingroup boards + * @brief Support for SAML10 and SAML11 boards + * @{ + * + * @file + * @brief Board specific definitions for the Microchip + * SAML10 & SAML11 Xplained Pro board. + * + * @author Dylan Laduranty <dylan.laduranty@mesotic.com> + */ + +#ifndef BOARD_H +#define BOARD_H + +#include "cpu.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @name PORT selection macros + * @{ + */ +#ifdef CPU_FAM_SAML11 +#define _PORT PORT_SEC +#else +#define _PORT PORT +#endif +/** @} */ + +/** + * @name LED pin definitions and handlers + * @{ + */ +#define LED0_PIN GPIO_PIN(PA, 7) + +#define LED_PORT _PORT->Group[PA] +#define LED0_MASK (1 << 7) + +#define LED0_ON (LED_PORT.OUTCLR.reg = LED0_MASK) +#define LED0_OFF (LED_PORT.OUTSET.reg = LED0_MASK) +#define LED0_TOGGLE (LED_PORT.OUTTGL.reg = LED0_MASK) +/** @} */ + +/** + * @name SW0 (Button) pin definitions + * @{ + */ +#define BTN0_PORT _PORT->Group[PA] +#define BTN0_PIN GPIO_PIN(PA, 27) +#define BTN0_MODE GPIO_IN_PU +/** @} */ + + +/** + * @brief Initialize board specific hardware, including clock, LEDs and std-IO + */ +void board_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* BOARD_H */ +/** @} */ diff --git a/boards/common/saml1x/include/gpio_params.h b/boards/common/saml1x/include/gpio_params.h new file mode 100644 index 0000000000..4bdec6222a --- /dev/null +++ b/boards/common/saml1x/include/gpio_params.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 Mesotic SAS + * + * 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_common_saml1x + * @{ + * + * @file + * @brief Board specific configuration of direct mapped GPIOs + * + * @author Dylan Laduranty <dylan.laduranty@mesotic.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(orange)", + .pin = LED0_PIN, + .mode = GPIO_OUT, + .flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR) + }, + { + .name = "Button(SW0)", + .pin = BTN0_PIN, + .mode = BTN0_MODE, + .flags = SAUL_GPIO_INVERTED + }, +}; + +#ifdef __cplusplus +} +#endif + +#endif /* GPIO_PARAMS_H */ +/** @} */ diff --git a/boards/common/saml1x/include/periph_conf.h b/boards/common/saml1x/include/periph_conf.h new file mode 100644 index 0000000000..b060916b5a --- /dev/null +++ b/boards/common/saml1x/include/periph_conf.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2019 Mesotic SAS + * + * 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_common_saml1x + * @{ + * + * @file + * @brief Peripheral MCU configuration for the Microchip + * SAML10 & SAML11 Xplained Pro board + * + * @author Dylan Laduranty <dylan.laduranty@mesotic.com> + */ + +#ifndef PERIPH_CONF_H +#define PERIPH_CONF_H + +#include "periph_cpu.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief GCLK reference speed + */ +#define CLOCK_CORECLOCK (16000000U) + +/** + * @name Timer peripheral configuration + * @{ + */ +#define TIMER_NUMOF (1U) +#define TIMER_0_EN 1 + +/* Timer 0 configuration */ +#define TIMER_0_DEV TC0->COUNT32 +#define TIMER_0_CHANNELS 1 +#define TIMER_0_MAX_VALUE (0xffffffff) +#define TIMER_0_ISR isr_tc0 +/** @} */ + +/** + * @name UART configuration + * @{ + */ +static const uart_conf_t uart_config[] = { + { /* Virtual COM Port */ + .dev = &SERCOM2->USART, + .rx_pin = GPIO_PIN(PA,25), + .tx_pin = GPIO_PIN(PA,24), + .mux = GPIO_MUX_D, + .rx_pad = UART_PAD_RX_3, + .tx_pad = UART_PAD_TX_2, + .flags = UART_FLAG_NONE, + .gclk_src = GCLK_PCHCTRL_GEN_GCLK0 + } +}; + +/* interrupt function name mapping */ +#define UART_0_ISR isr_sercom2_2 + +#define UART_NUMOF (sizeof(uart_config) / sizeof(uart_config[0])) +/** @} */ + +/** + * @name SPI configuration + * @{ + */ +static const spi_conf_t spi_config[] = { + { + .dev = &(SERCOM0->SPI), + .miso_pin = GPIO_PIN(PA, 4), + .mosi_pin = GPIO_PIN(PA, 14), + .clk_pin = GPIO_PIN(PA, 15), + .miso_mux = GPIO_MUX_D, + .mosi_mux = GPIO_MUX_D, + .clk_mux = GPIO_MUX_D, + .miso_pad = SPI_PAD_MISO_0, + .mosi_pad = SPI_PAD_MOSI_2_SCK_3 + + } +}; + +#define SPI_NUMOF (sizeof(spi_config) / sizeof(spi_config[0])) +/** @} */ + +/** + * @name I2C configuration + * @{ + */ +static const i2c_conf_t i2c_config[] = { + { + .dev = &(SERCOM1->I2CM), + .speed = I2C_SPEED_NORMAL, + .scl_pin = GPIO_PIN(PA, 17), + .sda_pin = GPIO_PIN(PA, 16), + .mux = GPIO_MUX_C, + .gclk_src = GCLK_PCHCTRL_GEN_GCLK0, + .flags = I2C_FLAG_NONE + } +}; + +#define I2C_NUMOF (sizeof(i2c_config) / sizeof(i2c_config[0])) +/** @} */ + +/** + * @name RTC configuration + * @{ + */ +#define RTC_NUMOF (1) +#define EXTERNAL_OSC32_SOURCE 1 +#define INTERNAL_OSC32_SOURCE 0 +#define ULTRA_LOW_POWER_INTERNAL_OSC_SOURCE 0 +/** @} */ + +/** + * @name RTT configuration + * @{ + */ +#define RTT_FREQUENCY (32768U) +#define RTT_MAX_VALUE (0xffffffffU) +#define RTT_NUMOF (1) +/** @} */ + +/** + * @name ADC Configuration + * @{ + */ +#define ADC_NUMOF (1U) + +/* ADC 0 Default values */ +#define ADC_0_CLK_SOURCE 0 /* GCLK_GENERATOR_0 */ +#define ADC_0_PRESCALER ADC_CTRLB_PRESCALER_DIV256 + +static const adc_conf_chan_t adc_channels[] = { + /* port, pin, muxpos */ + {GPIO_PIN(PA, 10), ADC_INPUTCTRL_MUXPOS(ADC_INPUTCTRL_MUXPOS_AIN8)}, +}; + +#define ADC_0_NEG_INPUT ADC_INPUTCTRL_MUXNEG(0x18u) +#define ADC_0_REF_DEFAULT ADC_REFCTRL_REFSEL_INTVCC2 +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* PERIPH_CONF_H */ +/** @} */ -- GitLab