From 9a5be09f06d4613a0e49110b2d491759a1b620b9 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 18 May 2012 01:30:54 +0200 Subject: [PATCH] [sam] Refactoring API for SPI library --- hardware/arduino/sam/libraries/SPI/SPI.cpp | 75 ++++++++----------- hardware/arduino/sam/libraries/SPI/SPI.h | 23 +++--- .../DueX_ATFlashSignatureCheck.ino | 48 ++++++------ .../arduino/sam/libraries/SPI/keywords.txt | 16 ++-- .../sam/variants/arduino_due_x/variant.h | 1 + 5 files changed, 77 insertions(+), 86 deletions(-) diff --git a/hardware/arduino/sam/libraries/SPI/SPI.cpp b/hardware/arduino/sam/libraries/SPI/SPI.cpp index 4c61f2cf2..277aee37c 100644 --- a/hardware/arduino/sam/libraries/SPI/SPI.cpp +++ b/hardware/arduino/sam/libraries/SPI/SPI.cpp @@ -10,75 +10,71 @@ #include "SPI.h" -SPIClass::SPIClass(Spi *_spi, uint32_t _id, void(*_initCb)(void), uint32_t *_ss) : +SPIClass::SPIClass(Spi *_spi, uint32_t _id, void(*_initCb)(void)) : spi(_spi), id(_id), initCb(_initCb) { - for (int i=0; i 0 -extern SPIClass SPI_0; +extern SPIClass SPI; #endif #endif diff --git a/hardware/arduino/sam/libraries/SPI/examples/DueX_ATFlashSignatureCheck/DueX_ATFlashSignatureCheck.ino b/hardware/arduino/sam/libraries/SPI/examples/DueX_ATFlashSignatureCheck/DueX_ATFlashSignatureCheck.ino index 4613abfd7..009369bc7 100644 --- a/hardware/arduino/sam/libraries/SPI/examples/DueX_ATFlashSignatureCheck/DueX_ATFlashSignatureCheck.ino +++ b/hardware/arduino/sam/libraries/SPI/examples/DueX_ATFlashSignatureCheck/DueX_ATFlashSignatureCheck.ino @@ -1,38 +1,34 @@ #include -#define FLASH_SPI_CHAN 3 +// Flash memory is connected on SPI pin SS3 +#define FLASH PIN_SPI_SS3 void setup() { - Serial1.begin(9600); - SPI_0.begin(); - SPI_0.addSlave(FLASH_SPI_CHAN); - SPI_0.setClockDivider(2); // We are too fast with 1 + Serial.begin(9600); + SPI.begin(FLASH); + SPI.setClockDivider(2); // We are too fast with 1 } void loop() { - Serial1.println("Sending 'Identify' cmd to flash => 9F"); + Serial.println("Sending 'Identify' cmd to flash => 9F"); - // Send cmd and receive response on the same transaction - // Parameter "false" keeps the SS pin active - SPI_0.transfer(0x9f, FLASH_SPI_CHAN, false); - char a1 = SPI_0.transfer(0x00, FLASH_SPI_CHAN, false); - char a2 = SPI_0.transfer(0x00, FLASH_SPI_CHAN, false); - char a3 = SPI_0.transfer(0x00, FLASH_SPI_CHAN, false); - char a4 = SPI_0.transfer(0x00, FLASH_SPI_CHAN, false); - char a5 = SPI_0.transfer(0x00, FLASH_SPI_CHAN); + // Send "identify" command (9f) and receive response + // on the same SPI transaction. Parameter SPI_CONTINUE + // keeps the SS pin active. + SPI.transfer(FLASH, 0x9f, SPI_CONTINUE); + char a1 = SPI.transfer(FLASH, 0x00, SPI_CONTINUE); + char a2 = SPI.transfer(FLASH, 0x00, SPI_CONTINUE); + char a3 = SPI.transfer(FLASH, 0x00, SPI_CONTINUE); + char a4 = SPI.transfer(FLASH, 0x00, SPI_CONTINUE); + char a5 = SPI.transfer(FLASH, 0x00); - Serial1.print("Received signature: "); - Serial1.print(a1, HEX); - Serial1.print(" "); - Serial1.print(a2, HEX); - Serial1.print(" "); - Serial1.print(a3, HEX); - Serial1.print(" "); - Serial1.print(a4, HEX); - Serial1.print(" "); - Serial1.print(a5, HEX); - Serial1.println(); + // Print response over serial port + Serial.print("Received signature: "); + Serial.print(a1, HEX); + Serial.print(a2, HEX); + Serial.print(a3, HEX); + Serial.print(a4, HEX); + Serial.println(a5, HEX); delay(1000); } - diff --git a/hardware/arduino/sam/libraries/SPI/keywords.txt b/hardware/arduino/sam/libraries/SPI/keywords.txt index 326b698da..47738f9fa 100644 --- a/hardware/arduino/sam/libraries/SPI/keywords.txt +++ b/hardware/arduino/sam/libraries/SPI/keywords.txt @@ -6,16 +6,15 @@ # Datatypes (KEYWORD1) ####################################### -SPI_0 KEYWORD1 +SPI KEYWORD1 ####################################### # Methods and Functions (KEYWORD2) ####################################### begin KEYWORD2 -addSlave KEYWORD2 end KEYWORD2 transfer KEYWORD2 -setBitOrder KEYWORD2 +#setBitOrder KEYWORD2 setDataMode KEYWORD2 setClockDivider KEYWORD2 @@ -23,7 +22,10 @@ setClockDivider KEYWORD2 ####################################### # Constants (LITERAL1) ####################################### -SPI_MODE0 LITERAL1 -SPI_MODE1 LITERAL1 -SPI_MODE2 LITERAL1 -SPI_MODE3 LITERAL1 \ No newline at end of file +SPI_MODE0 LITERAL1 +SPI_MODE1 LITERAL1 +SPI_MODE2 LITERAL1 +SPI_MODE3 LITERAL1 + +SPI_CONTINUE LITERAL1 +SPI_LAST LITERAL1 diff --git a/hardware/arduino/sam/variants/arduino_due_x/variant.h b/hardware/arduino/sam/variants/arduino_due_x/variant.h index 6f11f1aab..283751fb5 100644 --- a/hardware/arduino/sam/variants/arduino_due_x/variant.h +++ b/hardware/arduino/sam/variants/arduino_due_x/variant.h @@ -92,6 +92,7 @@ extern "C"{ #define PIN_SPI_MOSI (75u) #define PIN_SPI_MISO (74u) #define PIN_SPI_SCK (76u) +#define SPI_PIN_TO_SPI_CHANNEL(x) (x==PIN_SPI_SS0 ? 0 : (x==PIN_SPI_SS1 ? 1 : (x==PIN_SPI_SS2 ? 2 : 3))) static const uint8_t SS = PIN_SPI_SS0 ; static const uint8_t SS1 = PIN_SPI_SS1 ;