Skip to content

Commit

Permalink
Port to Arduino Due
Browse files Browse the repository at this point in the history
Library now supports Arduino Due
  • Loading branch information
driverblock committed Jun 5, 2014
1 parent 87f82c4 commit 2c35032
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 22 deletions.
41 changes: 21 additions & 20 deletions Adafruit_SSD1331.cpp
Expand Up @@ -17,7 +17,11 @@
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1331.h"
#include "glcdfont.c"

#ifdef __avr__
#include <avr/pgmspace.h>
#endif

#include "pins_arduino.h"
#include "wiring_private.h"
#include <SPI.h>
Expand All @@ -30,10 +34,7 @@ inline void Adafruit_SSD1331::spiwrite(uint8_t c) {
SPI.transfer(c);
return;
}

volatile uint8_t *sclkportreg = portOutputRegister(sclkport);
volatile uint8_t *sidportreg = portOutputRegister(sidport);


int8_t i;

*sclkportreg |= sclkpin;
Expand All @@ -59,31 +60,31 @@ inline void Adafruit_SSD1331::spiwrite(uint8_t c) {


void Adafruit_SSD1331::writeCommand(uint8_t c) {
*portOutputRegister(rsport) &= ~ rspin;
*rsportreg &= ~ rspin;
//digitalWrite(_rs, LOW);

*portOutputRegister(csport) &= ~ cspin;
*csportreg &= ~ cspin;
//digitalWrite(_cs, LOW);

//Serial.print("C ");
spiwrite(c);

*portOutputRegister(csport) |= cspin;
*csportreg |= cspin;
//digitalWrite(_cs, HIGH);
}


void Adafruit_SSD1331::writeData(uint8_t c) {
*portOutputRegister(rsport) |= rspin;
*rsportreg |= rspin;
//digitalWrite(_rs, HIGH);

*portOutputRegister(csport) &= ~ cspin;
*csportreg &= ~ cspin;
//digitalWrite(_cs, LOW);

//Serial.print("D ");
spiwrite(c);

*portOutputRegister(csport) |= cspin;
*csportreg |= cspin;
//digitalWrite(_cs, HIGH);
}

Expand Down Expand Up @@ -256,24 +257,24 @@ void Adafruit_SSD1331::drawPixel(int16_t x, int16_t y, uint16_t color)
goTo(x, y);

// setup for data
*portOutputRegister(rsport) |= rspin;
*portOutputRegister(csport) &= ~ cspin;
*rsportreg |= rspin;
*csportreg &= ~ cspin;

spiwrite(color >> 8);
spiwrite(color);

*portOutputRegister(csport) |= cspin;
*csportreg |= cspin;
}

void Adafruit_SSD1331::pushColor(uint16_t color) {
// setup for data
*portOutputRegister(rsport) |= rspin;
*portOutputRegister(csport) &= ~ cspin;
*rsportreg |= rspin;
*csportreg &= ~ cspin;

spiwrite(color >> 8);
spiwrite(color);

*portOutputRegister(csport) |= cspin;
*csportreg |= cspin;
}


Expand All @@ -283,11 +284,11 @@ void Adafruit_SSD1331::begin(void) {

if (_sclk) {
pinMode(_sclk, OUTPUT);
sclkport = digitalPinToPort(_sclk);
sclkportreg = portOutputRegister(digitalPinToPort(_sclk));
sclkpin = digitalPinToBitMask(_sclk);

pinMode(_sid, OUTPUT);
sidport = digitalPinToPort(_sid);
sidportreg = portOutputRegister(digitalPinToPort(_sid));
sidpin = digitalPinToBitMask(_sid);
} else {
// using the hardware SPI
Expand All @@ -299,10 +300,10 @@ void Adafruit_SSD1331::begin(void) {
pinMode(_cs, OUTPUT);
digitalWrite(_cs, LOW);
cspin = digitalPinToBitMask(_cs);
csport = digitalPinToPort(_cs);
csportreg = portOutputRegister(digitalPinToPort(_cs));

rspin = digitalPinToBitMask(_rs);
rsport = digitalPinToPort(_rs);
rsportreg = portOutputRegister(digitalPinToPort(_rs));

if (_rst) {
pinMode(_rst, OUTPUT);
Expand Down
13 changes: 11 additions & 2 deletions Adafruit_SSD1331.h
Expand Up @@ -20,6 +20,15 @@
#include "WProgram.h"
#endif

#ifdef __SAM3X8E__
typedef volatile RwReg PortReg;
typedef uint32_t PortMask;
#define _BV(b) (1<<(b))
#else
typedef volatile uint8_t PortReg;
typedef uint8_t PortMask;
#endif

// Select one of these defines to set the pixel color order
#define SSD1331_COLORORDER_RGB
// #define SSD1331_COLORORDER_BGR
Expand Down Expand Up @@ -99,6 +108,6 @@ class Adafruit_SSD1331 : public virtual Adafruit_GFX {
void spiwrite(uint8_t);

uint8_t _cs, _rs, _rst, _sid, _sclk;
uint8_t csport, rsport, sidport, sclkport;
uint8_t cspin, rspin, sidpin, sclkpin;
PortReg *csportreg, *rsportreg, *sidportreg, *sclkportreg;
PortMask cspin, rspin, sidpin, sclkpin;
};

0 comments on commit 2c35032

Please sign in to comment.