From 0ef371899d91e7222f2f3d03415673c48af76b88 Mon Sep 17 00:00:00 2001 From: Alexandre Abadie Date: Sun, 8 Dec 2019 00:18:38 +0100 Subject: [PATCH 1/2] boards/hifive1b: add arduino feature --- boards/hifive1b/Makefile.features | 3 ++ boards/hifive1b/include/arduino_board.h | 64 ++++++++++++++++++++++++ boards/hifive1b/include/arduino_pinmap.h | 64 ++++++++++++++++++++++++ boards/hifive1b/include/board.h | 3 +- 4 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 boards/hifive1b/include/arduino_board.h create mode 100644 boards/hifive1b/include/arduino_pinmap.h diff --git a/boards/hifive1b/Makefile.features b/boards/hifive1b/Makefile.features index 2f669e7ccb..9ab282f177 100644 --- a/boards/hifive1b/Makefile.features +++ b/boards/hifive1b/Makefile.features @@ -9,3 +9,6 @@ FEATURES_PROVIDED += periph_rtt #FEATURES_PROVIDED += periph_spi FEATURES_PROVIDED += periph_timer FEATURES_PROVIDED += periph_uart + +# Put other features for this board (in alphabetical order) +FEATURES_PROVIDED += arduino diff --git a/boards/hifive1b/include/arduino_board.h b/boards/hifive1b/include/arduino_board.h new file mode 100644 index 0000000000..46a14a6e64 --- /dev/null +++ b/boards/hifive1b/include/arduino_board.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2019 Inria + * + * 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_hifive1b + * @{ + * + * @file + * @brief Configuration of the Arduino API for the SiFive HiFive1b board + * + * @author Alexandre Abadie + */ + +#ifndef ARDUINO_BOARD_H +#define ARDUINO_BOARD_H + +#include "arduino_pinmap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief One on-board red LED is connected to pin 6 on this board + */ +#define ARDUINO_LED (6) + +/** + * @brief Look-up table for the Arduino's digital pins + */ +static const gpio_t arduino_pinmap[] = { + ARDUINO_PIN_0, + ARDUINO_PIN_1, + ARDUINO_PIN_2, + ARDUINO_PIN_3, + ARDUINO_PIN_4, + ARDUINO_PIN_5, + ARDUINO_PIN_6, + ARDUINO_PIN_7, + ARDUINO_PIN_8, + ARDUINO_PIN_9, + ARDUINO_PIN_10, + ARDUINO_PIN_11, + ARDUINO_PIN_12, + ARDUINO_PIN_13, + ARDUINO_PIN_14, + ARDUINO_PIN_15, + ARDUINO_PIN_16, + ARDUINO_PIN_17, + ARDUINO_PIN_18, + ARDUINO_PIN_19, +}; + +#ifdef __cplusplus +} +#endif + +#endif /* ARDUINO_BOARD_H */ +/** @} */ diff --git a/boards/hifive1b/include/arduino_pinmap.h b/boards/hifive1b/include/arduino_pinmap.h new file mode 100644 index 0000000000..d2ee77400e --- /dev/null +++ b/boards/hifive1b/include/arduino_pinmap.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2019 Inria + * + * 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_hifive1b + * @{ + * + * @file + * @brief Mapping from MCU pins to Arduino pins for the SiFive HiFive1b board + * + * You can use the defines in this file for simplified interaction with the + * Arduino specific pin numbers. + * + * @author Alexandre Abadie + */ + +#ifndef ARDUINO_PINMAP_H +#define ARDUINO_PINMAP_H + +#include "periph/gpio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @name Mapping of MCU pins to Arduino pins + * @{ + */ + +/* Digital pins */ +#define ARDUINO_PIN_0 GPIO_PIN(0, 16) /* UART0_RX */ +#define ARDUINO_PIN_1 GPIO_PIN(0, 17) /* UART0_TX */ +#define ARDUINO_PIN_2 GPIO_PIN(0, 18) +#define ARDUINO_PIN_3 GPIO_PIN(0, 19) /* PWM1 */ +#define ARDUINO_PIN_4 GPIO_PIN(0, 20) /* PWM1 */ +#define ARDUINO_PIN_5 GPIO_PIN(0, 21) /* PWM1 */ +#define ARDUINO_PIN_6 GPIO_PIN(0, 22) /* PWM1 */ +#define ARDUINO_PIN_7 GPIO_PIN(0, 23) +#define ARDUINO_PIN_8 GPIO_PIN(0, 0) /* PWM0 */ +#define ARDUINO_PIN_9 GPIO_PIN(0, 1) /* PWM0 */ +#define ARDUINO_PIN_10 GPIO_PIN(0, 2) /* SPI SS/PWM0 */ +#define ARDUINO_PIN_11 GPIO_PIN(0, 3) /* SPI MOSI/PWM0 */ +#define ARDUINO_PIN_12 GPIO_PIN(0, 4) /* SPI MISO */ +#define ARDUINO_PIN_13 GPIO_PIN(0, 5) /* SPI SCK */ +#define ARDUINO_PIN_14 GPIO_UNDEF +#define ARDUINO_PIN_15 GPIO_PIN(0, 9) +#define ARDUINO_PIN_16 GPIO_PIN(0, 10) /* PWM2 */ +#define ARDUINO_PIN_17 GPIO_PIN(0, 11) /* PWM2 */ +#define ARDUINO_PIN_18 GPIO_PIN(0, 12) /* SDA/PWM2 */ +#define ARDUINO_PIN_19 GPIO_PIN(0, 13) /* SCL/PWM2 */ +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* ARDUINO_PINMAP_H */ +/** @} */ diff --git a/boards/hifive1b/include/board.h b/boards/hifive1b/include/board.h index 5dd1f57481..4898fc400a 100644 --- a/boards/hifive1b/include/board.h +++ b/boards/hifive1b/include/board.h @@ -21,7 +21,8 @@ #ifndef BOARD_H #define BOARD_H -#include "periph/gpio.h" +#include "cpu.h" +#include "arduino_pinmap.h" #ifdef __cplusplus extern "C" { From b49cca2d0c1fe2f4a5f2524f4da0d122d6068b94 Mon Sep 17 00:00:00 2001 From: Alexandre Abadie Date: Fri, 13 Dec 2019 16:22:25 +0100 Subject: [PATCH 2/2] cpu/fe310: include thread.h in cpu.h This ensures the ARRAY_SIZE macro is implicitly available --- cpu/fe310/include/cpu.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpu/fe310/include/cpu.h b/cpu/fe310/include/cpu.h index eed309e459..2d209c3c9e 100644 --- a/cpu/fe310/include/cpu.h +++ b/cpu/fe310/include/cpu.h @@ -25,6 +25,8 @@ #ifndef CPU_H #define CPU_H +#include "thread.h" + #ifdef __cplusplus extern "C" { #endif