From 579e04be25464c01078145c844ca8c1a1fa59ba2 Mon Sep 17 00:00:00 2001 From: Michael Uman Date: Mon, 20 Jan 2020 05:37:47 -0800 Subject: [PATCH] Cleanup SPI_Multiple_Buses (#3527) * Utilize prepoc symbols for SPI pins * Adjusts for GPIO pins when ALTERNATE_PINS is set --- .../SPI_Multiple_Buses/SPI_Multiple_Buses.ino | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/libraries/SPI/examples/SPI_Multiple_Buses/SPI_Multiple_Buses.ino b/libraries/SPI/examples/SPI_Multiple_Buses/SPI_Multiple_Buses.ino index 76ead2d0..3d46aadf 100644 --- a/libraries/SPI/examples/SPI_Multiple_Buses/SPI_Multiple_Buses.ino +++ b/libraries/SPI/examples/SPI_Multiple_Buses/SPI_Multiple_Buses.ino @@ -15,6 +15,30 @@ */ #include +// Define ALTERNATE_PINS to use non-standard GPIO pins for SPI bus + +#ifdef ALTERNATE_PINS + #define VSPI_MISO 2 + #define VSPI_MOSI 4 + #define VSPI_SCLK 0 + #define VSPI_SS 33 + + #define HSPI_MISO 26 + #define HSPI_MOSI 27 + #define HSPI_SCLK 25 + #define HSPI_SS 32 +#else + #define VSPI_MISO MISO + #define VSPI_MOSI MOSI + #define VSPI_SCLK SCK + #define VSPI_SS SS + + #define HSPI_MISO 12 + #define HSPI_MOSI 13 + #define HSPI_SCLK 14 + #define HSPI_SS 15 +#endif + static const int spiClk = 1000000; // 1 MHz //uninitalised pointers to SPI objects @@ -28,22 +52,28 @@ void setup() { //clock miso mosi ss +#ifndef ALTERNATE_PINS //initialise vspi with default pins //SCLK = 18, MISO = 19, MOSI = 23, SS = 5 vspi->begin(); +#else //alternatively route through GPIO pins of your choice - //hspi->begin(0, 2, 4, 33); //SCLK, MISO, MOSI, SS - + vspi->begin(VSPI_SCLK, VSPI_MISO, VSPI_MOSI, VSPI_SS); //SCLK, MISO, MOSI, SS +#endif + +#ifndef ALTERNATE_PINS //initialise hspi with default pins //SCLK = 14, MISO = 12, MOSI = 13, SS = 15 - hspi->begin(); + hspi->begin(); +#else //alternatively route through GPIO pins - //hspi->begin(25, 26, 27, 32); //SCLK, MISO, MOSI, SS + hspi->begin(HSPI_SCLK, HSPI_MISO, HSPI_MOSI, HSPI_SS); //SCLK, MISO, MOSI, SS +#endif //set up slave select pins as outputs as the Arduino API //doesn't handle automatically pulling SS low - pinMode(5, OUTPUT); //VSPI SS - pinMode(15, OUTPUT); //HSPI SS + pinMode(VSPI_SS, OUTPUT); //VSPI SS + pinMode(HSPI_SS, OUTPUT); //HSPI SS } @@ -60,9 +90,9 @@ void vspiCommand() { //use it as you would the regular arduino SPI API vspi->beginTransaction(SPISettings(spiClk, MSBFIRST, SPI_MODE0)); - digitalWrite(5, LOW); //pull SS slow to prep other end for transfer + digitalWrite(VSPI_SS, LOW); //pull SS slow to prep other end for transfer vspi->transfer(data); - digitalWrite(5, HIGH); //pull ss high to signify end of data transfer + digitalWrite(VSPI_SS, HIGH); //pull ss high to signify end of data transfer vspi->endTransaction(); } @@ -70,8 +100,8 @@ void hspiCommand() { byte stuff = 0b11001100; hspi->beginTransaction(SPISettings(spiClk, MSBFIRST, SPI_MODE0)); - digitalWrite(15, LOW); + digitalWrite(HSPI_SS, LOW); hspi->transfer(stuff); - digitalWrite(15, HIGH); + digitalWrite(HSPI_SS, HIGH); hspi->endTransaction(); }