From eab1df305f055159c2c5999bd71d95fb81ef6f8a Mon Sep 17 00:00:00 2001 From: Ian Harvey Date: Sat, 10 Jan 2015 09:03:11 +0000 Subject: [PATCH] SPI library fixes for Microduino / other boards with only 1 SPI --- STM32F1XX/libraries/SPI/src/SPI.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/STM32F1XX/libraries/SPI/src/SPI.cpp b/STM32F1XX/libraries/SPI/src/SPI.cpp index ad08ca5..b9eb7d2 100644 --- a/STM32F1XX/libraries/SPI/src/SPI.cpp +++ b/STM32F1XX/libraries/SPI/src/SPI.cpp @@ -60,16 +60,24 @@ static void enable_device(spi_dev *dev, spi_cfg_flag endianness, spi_mode mode); +#if (BOARD_NR_SPI >= 3) && !defined(STM32_HIGH_DENSITY) +#error "The SPI library is misconfigured: 3 SPI ports only available on high density STM32 devices" +#endif + static const spi_pins board_spi_pins[] __FLASH__ = { +#if BOARD_NR_SPI >= 1 {BOARD_SPI1_NSS_PIN, BOARD_SPI1_SCK_PIN, BOARD_SPI1_MISO_PIN, BOARD_SPI1_MOSI_PIN}, +#endif +#if BOARD_NR_SPI >= 2 {BOARD_SPI2_NSS_PIN, BOARD_SPI2_SCK_PIN, BOARD_SPI2_MISO_PIN, BOARD_SPI2_MOSI_PIN}, -#ifdef STM32_HIGH_DENSITY +#endif +#if BOARD_NR_SPI >= 3 {BOARD_SPI3_NSS_PIN, BOARD_SPI3_SCK_PIN, BOARD_SPI3_MISO_PIN, @@ -84,13 +92,17 @@ static const spi_pins board_spi_pins[] __FLASH__ = { SPIClass::SPIClass(uint32 spi_num) { switch (spi_num) { +#if BOARD_NR_SPI >= 1 case 1: this->spi_d = SPI1; break; +#endif +#if BOARD_NR_SPI >= 2 case 2: this->spi_d = SPI2; break; -#ifdef STM32_HIGH_DENSITY +#endif +#if BOARD_NR_SPI >= 3 case 3: this->spi_d = SPI3; break; @@ -347,9 +359,13 @@ static spi_baud_rate determine_baud_rate(spi_dev *dev, SPIFrequency freq); static const spi_pins* dev_to_spi_pins(spi_dev *dev) { switch (dev->clk_id) { +#if BOARD_NR_SPI >= 1 case RCC_SPI1: return board_spi_pins; +#endif +#if BOARD_NR_SPI >= 2 case RCC_SPI2: return board_spi_pins + 1; -#ifdef STM32_HIGH_DENSITY +#endif +#if BOARD_NR_SPI >= 3 case RCC_SPI3: return board_spi_pins + 2; #endif default: return NULL;