Use much faster GPIO pin 2 and 3 on Intel Galileo & Intel Galileo 2

This commit is contained in:
Kristian Sloth Lauszus 2015-03-19 20:09:27 +01:00
parent d881e514ee
commit 08ddabf7a5
3 changed files with 21 additions and 9 deletions

View file

@ -92,8 +92,9 @@ By default serial debugging is disabled. To turn it on simply change ```ENABLE_U
Currently the following boards are supported by the library: Currently the following boards are supported by the library:
* All official Arduino AVR boards (Uno, Duemilanove, Mega, Mega 2560, Mega ADK, Leonardo etc.) * All official Arduino AVR boards (Uno, Duemilanove, Mega, Mega 2560, Mega ADK, Leonardo etc.)
* Arduino Due and Arduino Galileo * Arduino Due, Intel Galileo and Intel Galileo 2
* If you are using the Arduino Due or Galileo, then you must include the Arduino SPI library like so: ```#include <SPI.h>``` in your .ino file. * If you are using the Arduino Due, Intel Galileo or Intel Galileo 2, then you must include the Arduino SPI library like so: ```#include <SPI.h>``` in your .ino file.
* Note that both the Intel Galileo and Intel Galileo 2 use pin 2 and 3 as INT and SS pin respectively by default, so some modifications to the shield are needed. See the "Interface modifications" section in the [hardware manual](https://www.circuitsathome.com/usb-host-shield-hardware-manual) for more information.
* Teensy (Teensy++ 1.0, Teensy 2.0, Teensy++ 2.0, and Teensy 3.x) * Teensy (Teensy++ 1.0, Teensy 2.0, Teensy++ 2.0, and Teensy 3.x)
* Note if you are using the Teensy 3.x you should download this SPI library as well: <https://github.com/xxxajk/spi4teensy3>. You should then add ```#include <spi4teensy3.h>``` to your .ino file. * Note if you are using the Teensy 3.x you should download this SPI library as well: <https://github.com/xxxajk/spi4teensy3>. You should then add ```#include <spi4teensy3.h>``` to your .ino file.
* Balanduino * Balanduino

View file

@ -37,8 +37,10 @@ typedef MAX3421e<P9, P8> MAX3421E; // Teensy++ 1.0 and 2.0
typedef MAX3421e<P53, P54> MAX3421E; // Arduino Mega ADK typedef MAX3421e<P53, P54> MAX3421E; // Arduino Mega ADK
#elif defined(ARDUINO_AVR_BALANDUINO) #elif defined(ARDUINO_AVR_BALANDUINO)
typedef MAX3421e<P20, P19> MAX3421E; // Balanduino typedef MAX3421e<P20, P19> MAX3421E; // Balanduino
#elif defined(__ARDUINO_X86__)
typedef MAX3421e<P3, P2> MAX3421E; // The Intel Galileo and Intel Galileo 2 both support much faster read and write speed at pin 2 and 3
#else #else
typedef MAX3421e<P10, P9> MAX3421E; // Official Arduinos (UNO, Duemilanove, Mega, 2560, Leonardo, Due etc.), Intel Galileo or Teensy 2.0 and 3.0 typedef MAX3421e<P10, P9> MAX3421E; // Official Arduinos (UNO, Duemilanove, Mega, 2560, Leonardo, Due etc.) or Teensy 2.0 and 3.0
#endif #endif
/* Common setup data constant combinations */ /* Common setup data constant combinations */

View file

@ -1015,30 +1015,39 @@ MAKE_PIN(P24, Pin_nRF51822_to_Arduino(D24));
#endif #endif
#elif defined(__ARDUINO_X86__) // Intel Galileo #elif defined(__ARDUINO_X86__) // Intel Galileo and Intel Galileo 2
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
// Pointers are 32 bits on x86 // Pointers are 32 bits on x86
#define pgm_read_pointer(p) pgm_read_dword(p) #define pgm_read_pointer(p) pgm_read_dword(p)
// Pin 2 and 3 support a higher rate, so it is recommended to use one of these as the SS pin.
// I know Intel Galileo 2 support higher rate at some other pins as well, but 2 and 3 are only
// available on the original Intel Galileo.
#define MAKE_PIN(className, pin) \ #define MAKE_PIN(className, pin) \
class className { \ class className { \
public: \ public: \
static void Set() { \ static void Set() { \
digitalWrite(pin, HIGH); \ fastDigitalWrite(pin, HIGH); \
} \ } \
static void Clear() { \ static void Clear() { \
digitalWrite(pin, LOW); \ fastDigitalWrite(pin, LOW); \
} \ } \
static void SetDirRead() { \ static void SetDirRead() { \
pinMode(pin, INPUT); \ if (pinToFastPin(pin)) \
pinMode(pin, INPUT_FAST); \
else \
pinMode(pin, INPUT); \
} \ } \
static void SetDirWrite() { \ static void SetDirWrite() { \
pinMode(pin, OUTPUT); \ if (pinToFastPin(pin)) \
pinMode(pin, OUTPUT_FAST); \
else \
pinMode(pin, OUTPUT); \
} \ } \
static uint8_t IsSet() { \ static uint8_t IsSet() { \
return digitalRead(pin); \ return fastDigitalRead(pin); \
} \ } \
}; };