mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-04 08:01:38 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
 | 
						|
 | 
						|
/* The ESP32 has four SPi buses, however as of right now only two of
 | 
						|
 * them are available to use, HSPI and VSPI. Simply using the SPI API 
 | 
						|
 * as illustrated in Arduino examples will use HSPI, leaving VSPI unused.
 | 
						|
 * 
 | 
						|
 * However if we simply intialise two instance of the SPI class for both
 | 
						|
 * of these buses both can be used. However when just using these the Arduino
 | 
						|
 * way only will actually be outputting at a time.
 | 
						|
 * 
 | 
						|
 * Logic analyser capture is in the same folder as this example as
 | 
						|
 * "multiple_bus_output.png"
 | 
						|
 * 
 | 
						|
 * created 30/04/2018 by Alistair Symonds
 | 
						|
 */
 | 
						|
#include <SPI.h>
 | 
						|
 | 
						|
static const int spiClk = 1000000; // 1 MHz
 | 
						|
 | 
						|
//uninitalised pointers to SPI objects
 | 
						|
SPIClass * vspi = NULL;
 | 
						|
SPIClass * hspi = NULL;
 | 
						|
 | 
						|
void setup() {
 | 
						|
  //initialise two instances of the SPIClass attached to VSPI and HSPI respectively
 | 
						|
  vspi = new SPIClass(VSPI);
 | 
						|
  hspi = new SPIClass(HSPI);
 | 
						|
  
 | 
						|
  //clock miso mosi ss
 | 
						|
 | 
						|
  //initialise vspi with default pins
 | 
						|
  //SCLK = 18, MISO = 19, MOSI = 23, SS = 5
 | 
						|
  vspi->begin();
 | 
						|
  //alternatively route through GPIO pins of your choice
 | 
						|
  //hspi->begin(0, 2, 4, 33); //SCLK, MISO, MOSI, SS
 | 
						|
  
 | 
						|
  //initialise hspi with default pins
 | 
						|
  //SCLK = 14, MISO = 12, MOSI = 13, SS = 15
 | 
						|
  hspi->begin(); 
 | 
						|
  //alternatively route through GPIO pins
 | 
						|
  //hspi->begin(25, 26, 27, 32); //SCLK, MISO, MOSI, SS
 | 
						|
 | 
						|
  //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
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
// the loop function runs over and over again until power down or reset
 | 
						|
void loop() {
 | 
						|
  //use the SPI buses
 | 
						|
  vspiCommand();
 | 
						|
  hspiCommand();
 | 
						|
  delay(100);
 | 
						|
}
 | 
						|
 | 
						|
void vspiCommand() {
 | 
						|
  byte data = 0b01010101; // junk data to illustrate usage
 | 
						|
 | 
						|
  //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
 | 
						|
  vspi->transfer(data);  
 | 
						|
  digitalWrite(5, HIGH); //pull ss high to signify end of data transfer
 | 
						|
  vspi->endTransaction();
 | 
						|
}
 | 
						|
 | 
						|
void hspiCommand() {
 | 
						|
  byte stuff = 0b11001100;
 | 
						|
  
 | 
						|
  hspi->beginTransaction(SPISettings(spiClk, MSBFIRST, SPI_MODE0));
 | 
						|
  digitalWrite(15, LOW);
 | 
						|
  hspi->transfer(stuff);
 | 
						|
  digitalWrite(15, HIGH);
 | 
						|
  hspi->endTransaction();
 | 
						|
}
 |