From 52096aeb80a4f90995c42d2509de58e3305193ef Mon Sep 17 00:00:00 2001 From: Theo Date: Fri, 22 Sep 2023 15:34:30 +0200 Subject: [PATCH] Add activation of SPI0 on arduino due --- boards/arm/sam34/arduino-due/include/board.h | 5 ++ boards/arm/sam34/arduino-due/src/Makefile | 4 ++ .../arm/sam34/arduino-due/src/sam_bringup.c | 19 ++++++++ boards/arm/sam34/arduino-due/src/sam_spidev.c | 46 +++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 boards/arm/sam34/arduino-due/src/sam_spidev.c diff --git a/boards/arm/sam34/arduino-due/include/board.h b/boards/arm/sam34/arduino-due/include/board.h index dab441f593..d026978c40 100644 --- a/boards/arm/sam34/arduino-due/include/board.h +++ b/boards/arm/sam34/arduino-due/include/board.h @@ -131,6 +131,11 @@ #define BOARD_FWS 4 +/* Serial Peripheral Interface (SPI) */ + +#define GPIO_SPI0_SPCK GPIO_SPI0_SPCK_1 +#define GPIO_SPI0_CS (GPIO_OUTPUT | GPIO_CFG_DEFAULT | GPIO_OUTPUT_SET | GPIO_PORT_PIOC | GPIO_PIN21) + /* LED definitions **********************************************************/ /* There are three user-controllable LEDs on board the Arduino Due board: diff --git a/boards/arm/sam34/arduino-due/src/Makefile b/boards/arm/sam34/arduino-due/src/Makefile index 37665e80cc..21b8eb37fc 100644 --- a/boards/arm/sam34/arduino-due/src/Makefile +++ b/boards/arm/sam34/arduino-due/src/Makefile @@ -49,4 +49,8 @@ ifeq ($(CONFIG_BOARDCTL),y) CSRCS += sam_appinit.c endif +ifeq ($(CONFIG_SAM34_SPI0),y) +CSRCS += sam_spidev.c +endif + include $(TOPDIR)/boards/Board.mk diff --git a/boards/arm/sam34/arduino-due/src/sam_bringup.c b/boards/arm/sam34/arduino-due/src/sam_bringup.c index ab17323292..414c85b47b 100644 --- a/boards/arm/sam34/arduino-due/src/sam_bringup.c +++ b/boards/arm/sam34/arduino-due/src/sam_bringup.c @@ -30,10 +30,12 @@ #include #include #include +#include #include "arduino-due.h" #include +#include "sam_spi.h" /**************************************************************************** * Pre-processor Definitions @@ -138,6 +140,23 @@ int sam_bringup(void) } #endif +#ifdef CONFIG_SAM34_SPI0 + sam_configgpio(GPIO_SPI0_CS); + + struct spi_dev_s *spi; + spi = sam_spibus_initialize(0); + + if (!spi) + { + syslog(LOG_ERR, "ERROR: Failed to initialize SPI port 0\n"); + return -1; + } + else + { + spi_register(spi, 0); + } +#endif + UNUSED(ret); return OK; } diff --git a/boards/arm/sam34/arduino-due/src/sam_spidev.c b/boards/arm/sam34/arduino-due/src/sam_spidev.c new file mode 100644 index 0000000000..96055b054e --- /dev/null +++ b/boards/arm/sam34/arduino-due/src/sam_spidev.c @@ -0,0 +1,46 @@ +/**************************************************************************** + * boards/arm/sam34/arduino-due/src/sam_spidev.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include + +#include "sam_spi.h" +#include "hardware/sam3x_pinmap.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +void sam_spi0select(uint32_t devid, bool selected) +{ + spiinfo("devid: %08x CS: %s\n", + (unsigned int)devid, selected ? "assert" : "de-assert"); + sam_gpiowrite(GPIO_SPI0_CS, !selected); +} + +uint8_t sam_spi0status(struct spi_dev_s *dev, uint32_t devid) +{ + spiinfo("Returning nothing\n"); + return 0; +}