Skip to content

Commit 73b133e

Browse files
committed
start1
1 parent 0caa53e commit 73b133e

File tree

2 files changed

+47
-70
lines changed

2 files changed

+47
-70
lines changed

Adafruit_EPD.cpp

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@
5050
#include <stdlib.h>
5151

5252
#include "Adafruit_EPD.h"
53-
#include "Adafruit_GFX.h"
54-
#include <SPI.h>
5553

5654
bool Adafruit_EPD::_isInTransaction = false;
5755

@@ -86,6 +84,13 @@ Adafruit_EPD::Adafruit_EPD(int width, int height, int8_t spi_mosi,
8684
use_sram = false;
8785
}
8886
hwSPI = false;
87+
88+
spi_dev = new Adafruit_SPIDevice(CS, spi_clock, spi_miso, spi_mosi,
89+
1000000, // frequency
90+
SPI_BITORDER_MSBFIRST, // bit order
91+
SPI_MODE0 // data mode
92+
);
93+
8994
singleByteTxns = false;
9095
buffer1_size = buffer2_size = 0;
9196
buffer1_addr = buffer2_addr = 0;
@@ -121,6 +126,13 @@ Adafruit_EPD::Adafruit_EPD(int width, int height, int8_t DC, int8_t RST,
121126
use_sram = false;
122127
}
123128
hwSPI = true;
129+
130+
spi_dev = new Adafruit_SPIDevice(CS,
131+
1000000, // frequency
132+
SPI_BITORDER_MSBFIRST, // bit order
133+
SPI_MODE0 // data mode
134+
);
135+
124136
singleByteTxns = false;
125137
buffer1_size = buffer2_size = 0;
126138
buffer1_addr = buffer2_addr = 0;
@@ -162,30 +174,18 @@ void Adafruit_EPD::begin(bool reset) {
162174
// set pin directions
163175
pinMode(_dc_pin, OUTPUT);
164176
pinMode(_cs_pin, OUTPUT);
165-
#ifdef HAVE_PORTREG
166-
csport = portOutputRegister(digitalPinToPort(_cs_pin));
167-
cspinmask = digitalPinToBitMask(_cs_pin);
168-
dcport = portOutputRegister(digitalPinToPort(_dc_pin));
169-
dcpinmask = digitalPinToBitMask(_dc_pin);
177+
178+
#if defined(BUSIO_USE_FAST_PINIO)
179+
csPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(_cs_pin));
180+
csPinMask = digitalPinToBitMask(_cs_pin);
181+
dcPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(_dc_pin));
182+
dcPinMask = digitalPinToBitMask(_dc_pin);
170183
#endif
171184

172185
csHigh();
173186

174-
if (!hwSPI) {
175-
// set pins for software-SPI
176-
pinMode(_sid_pin, OUTPUT);
177-
pinMode(_sclk_pin, OUTPUT);
178-
#ifdef HAVE_PORTREG
179-
clkport = portOutputRegister(digitalPinToPort(_sclk_pin));
180-
clkpinmask = digitalPinToBitMask(_sclk_pin);
181-
mosiport = portOutputRegister(digitalPinToPort(_sid_pin));
182-
mosipinmask = digitalPinToBitMask(_sid_pin);
183-
#endif
184-
} else {
185-
_spi->begin();
186-
#ifndef SPI_HAS_TRANSACTION
187-
_spi->setClockDivider(4);
188-
#endif
187+
if (!spi_dev->begin()) {
188+
return;
189189
}
190190

191191
if (reset) {
@@ -615,15 +615,18 @@ uint8_t Adafruit_EPD::SPItransfer(uint8_t d) {
615615
*/
616616
/**************************************************************************/
617617
void Adafruit_EPD::csHigh() {
618+
619+
#ifdef BUSIO_USE_FAST_PINIO
620+
*csPort |= csPinMask;
621+
#else
622+
digitalWrite(_cs_pin, HIGH);
623+
#endif
624+
618625
#ifdef SPI_HAS_TRANSACTION
619626
_spi->endTransaction();
620627
_isInTransaction = false;
621628
#endif
622-
#ifdef HAVE_PORTREG
623-
*csport |= cspinmask;
624-
#else
625-
digitalWrite(_cs_pin, HIGH);
626-
#endif
629+
627630
}
628631

629632
/**************************************************************************/
@@ -632,17 +635,20 @@ void Adafruit_EPD::csHigh() {
632635
*/
633636
/**************************************************************************/
634637
void Adafruit_EPD::csLow() {
638+
635639
#ifdef SPI_HAS_TRANSACTION
636640
if (!_isInTransaction) {
637641
_spi->beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
638642
_isInTransaction = true;
639643
}
640644
#endif
641-
#ifdef HAVE_PORTREG
642-
*csport &= ~cspinmask;
645+
646+
#ifdef BUSIO_USE_FAST_PINIO
647+
*csPort &= ~csPinMask;
643648
#else
644649
digitalWrite(_cs_pin, LOW);
645650
#endif
651+
646652
}
647653

648654
/**************************************************************************/
@@ -651,8 +657,8 @@ void Adafruit_EPD::csLow() {
651657
*/
652658
/**************************************************************************/
653659
void Adafruit_EPD::dcHigh() {
654-
#ifdef HAVE_PORTREG
655-
*dcport |= dcpinmask;
660+
#ifdef BUSIO_USE_FAST_PINIO
661+
*dcPort |= dcPinMask;
656662
#else
657663
digitalWrite(_dc_pin, HIGH);
658664
#endif
@@ -664,8 +670,8 @@ void Adafruit_EPD::dcHigh() {
664670
*/
665671
/**************************************************************************/
666672
void Adafruit_EPD::dcLow() {
667-
#ifdef HAVE_PORTREG
668-
*dcport &= ~dcpinmask;
673+
#ifdef BUSIO_USE_FAST_PINIO
674+
*dcPort &= ~dcPinMask;
669675
#else
670676
digitalWrite(_dc_pin, LOW);
671677
#endif

Adafruit_EPD.h

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -20,40 +20,13 @@
2020
#ifndef _Adafruit_EPD_H_
2121
#define _Adafruit_EPD_H_
2222

23-
#if ARDUINO >= 100
24-
#include "Arduino.h"
25-
#else
26-
#include "WProgram.h"
27-
#endif
28-
2923
//#define EPD_DEBUG
3024

3125
#define RAMBUFSIZE 64 ///< size of the ram buffer
3226

33-
#if defined(__SAM3X8E__)
34-
typedef volatile RwReg PortReg; ///< a port register for fast access
35-
typedef uint32_t PortMask; ///< a port register mask for your pin
36-
#define HAVE_PORTREG
37-
#elif defined(ARDUINO_ARCH_SAMD)
38-
// not supported
39-
#elif defined(ESP8266) || defined(ESP32) || defined(ARDUINO_STM32_FEATHER) || \
40-
defined(__arc__)
41-
typedef volatile uint32_t PortReg; ///< a port register for fast access
42-
typedef uint32_t PortMask; ///< a port register mask for your pin
43-
#elif defined(__AVR__)
44-
typedef volatile uint8_t PortReg; ///< a port register for fast access
45-
typedef uint8_t PortMask; ///< a port register mask for your pin
46-
#define HAVE_PORTREG
47-
#else
48-
// chances are its 32 bit so assume that
49-
typedef volatile uint32_t PortReg; ///< a port register for fast access
50-
typedef uint32_t PortMask; ///< a port register mask for your pin
51-
#endif
52-
27+
#include <Adafruit_SPIDevice.h>
5328
#include "Adafruit_MCPSRAM.h"
54-
5529
#include <Adafruit_GFX.h>
56-
#include <SPI.h>
5730

5831
/**************************************************************************/
5932
/*!
@@ -149,6 +122,7 @@ class Adafruit_EPD : public Adafruit_GFX {
149122
_cs_pin, ///< chip select pin
150123
_busy_pin; ///< busy pin
151124
SPIClass *_spi = NULL; ///< SPI object
125+
Adafruit_SPIDevice *spi_dev = NULL; ///< SPI object
152126
static bool _isInTransaction; ///< true if SPI bus is in trasnfer state
153127
bool singleByteTxns; ///< if true CS will go high after every data byte
154128
///< transferred
@@ -179,16 +153,13 @@ class Adafruit_EPD : public Adafruit_GFX {
179153

180154
bool use_sram; ///< true if we are using an SRAM chip as a framebuffer
181155
bool hwSPI; ///< true if using hardware SPI
182-
#ifdef HAVE_PORTREG
183-
PortReg *mosiport, ///< mosi port register
184-
*clkport, ///< serial clock port register
185-
*csport, ///< chip select port register
186-
*dcport; ///< data/command port register
187-
PortMask mosipinmask, ///< mosi pin mask
188-
clkpinmask, ///< serial clock pin mask
189-
cspinmask, ///< chip select pin mask
190-
dcpinmask; ///< data / command pin mask
156+
157+
158+
#if defined(BUSIO_USE_FAST_PINIO)
159+
BusIO_PortReg *csPort, *dcPort;
160+
BusIO_PortMask csPinMask, dcPinMask;
191161
#endif
162+
192163
void csLow();
193164
void csHigh();
194165
void dcHigh();

0 commit comments

Comments
 (0)