50
50
#include < stdlib.h>
51
51
52
52
#include " Adafruit_EPD.h"
53
- #include " Adafruit_GFX.h"
54
- #include < SPI.h>
55
53
56
54
bool Adafruit_EPD::_isInTransaction = false ;
57
55
@@ -86,6 +84,13 @@ Adafruit_EPD::Adafruit_EPD(int width, int height, int8_t spi_mosi,
86
84
use_sram = false ;
87
85
}
88
86
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
+
89
94
singleByteTxns = false ;
90
95
buffer1_size = buffer2_size = 0 ;
91
96
buffer1_addr = buffer2_addr = 0 ;
@@ -121,6 +126,13 @@ Adafruit_EPD::Adafruit_EPD(int width, int height, int8_t DC, int8_t RST,
121
126
use_sram = false ;
122
127
}
123
128
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
+
124
136
singleByteTxns = false ;
125
137
buffer1_size = buffer2_size = 0 ;
126
138
buffer1_addr = buffer2_addr = 0 ;
@@ -162,30 +174,18 @@ void Adafruit_EPD::begin(bool reset) {
162
174
// set pin directions
163
175
pinMode (_dc_pin, OUTPUT);
164
176
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);
170
183
#endif
171
184
172
185
csHigh ();
173
186
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 ;
189
189
}
190
190
191
191
if (reset) {
@@ -615,15 +615,18 @@ uint8_t Adafruit_EPD::SPItransfer(uint8_t d) {
615
615
*/
616
616
/* *************************************************************************/
617
617
void Adafruit_EPD::csHigh () {
618
+
619
+ #ifdef BUSIO_USE_FAST_PINIO
620
+ *csPort |= csPinMask;
621
+ #else
622
+ digitalWrite (_cs_pin, HIGH);
623
+ #endif
624
+
618
625
#ifdef SPI_HAS_TRANSACTION
619
626
_spi->endTransaction ();
620
627
_isInTransaction = false ;
621
628
#endif
622
- #ifdef HAVE_PORTREG
623
- *csport |= cspinmask;
624
- #else
625
- digitalWrite (_cs_pin, HIGH);
626
- #endif
629
+
627
630
}
628
631
629
632
/* *************************************************************************/
@@ -632,17 +635,20 @@ void Adafruit_EPD::csHigh() {
632
635
*/
633
636
/* *************************************************************************/
634
637
void Adafruit_EPD::csLow () {
638
+
635
639
#ifdef SPI_HAS_TRANSACTION
636
640
if (!_isInTransaction) {
637
641
_spi->beginTransaction (SPISettings (4000000 , MSBFIRST, SPI_MODE0));
638
642
_isInTransaction = true ;
639
643
}
640
644
#endif
641
- #ifdef HAVE_PORTREG
642
- *csport &= ~cspinmask;
645
+
646
+ #ifdef BUSIO_USE_FAST_PINIO
647
+ *csPort &= ~csPinMask;
643
648
#else
644
649
digitalWrite (_cs_pin, LOW);
645
650
#endif
651
+
646
652
}
647
653
648
654
/* *************************************************************************/
@@ -651,8 +657,8 @@ void Adafruit_EPD::csLow() {
651
657
*/
652
658
/* *************************************************************************/
653
659
void Adafruit_EPD::dcHigh () {
654
- #ifdef HAVE_PORTREG
655
- *dcport |= dcpinmask ;
660
+ #ifdef BUSIO_USE_FAST_PINIO
661
+ *dcPort |= dcPinMask ;
656
662
#else
657
663
digitalWrite (_dc_pin, HIGH);
658
664
#endif
@@ -664,8 +670,8 @@ void Adafruit_EPD::dcHigh() {
664
670
*/
665
671
/* *************************************************************************/
666
672
void Adafruit_EPD::dcLow () {
667
- #ifdef HAVE_PORTREG
668
- *dcport &= ~dcpinmask ;
673
+ #ifdef BUSIO_USE_FAST_PINIO
674
+ *dcPort &= ~dcPinMask ;
669
675
#else
670
676
digitalWrite (_dc_pin, LOW);
671
677
#endif
0 commit comments