Skip to content

Commit 7be0b49

Browse files
Allow obscure-but-needed case of no TFT chip select (-1)
1 parent 1ea46e2 commit 7be0b49

File tree

3 files changed

+39
-22
lines changed

3 files changed

+39
-22
lines changed

Adafruit_SPITFT.cpp

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -87,21 +87,30 @@ Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h,
8787
_miso = miso;
8888
_freq = 0;
8989
#ifdef USE_FAST_PINIO
90-
csport = (RwReg *)portOutputRegister(digitalPinToPort(_cs));
91-
cspinmask = digitalPinToBitMask(_cs);
92-
dcport = (RwReg *)portOutputRegister(digitalPinToPort(_dc));
93-
dcpinmask = digitalPinToBitMask(_dc);
94-
clkport = (RwReg *)portOutputRegister(digitalPinToPort(_sclk));
95-
clkpinmask = digitalPinToBitMask(_sclk);
96-
mosiport = (RwReg *)portOutputRegister(digitalPinToPort(_mosi));
97-
mosipinmask = digitalPinToBitMask(_mosi);
90+
dcport = (RwReg *)portOutputRegister(digitalPinToPort(dc));
91+
dcpinmask = digitalPinToBitMask(dc);
92+
clkport = (RwReg *)portOutputRegister(digitalPinToPort(sclk));
93+
clkpinmask = digitalPinToBitMask(sclk);
94+
mosiport = (RwReg *)portOutputRegister(digitalPinToPort(mosi));
95+
mosipinmask = digitalPinToBitMask(mosi);
9896
if(miso >= 0){
99-
misoport = (RwReg *)portInputRegister(digitalPinToPort(_miso));
100-
misopinmask = digitalPinToBitMask(_miso);
97+
misoport = (RwReg *)portInputRegister(digitalPinToPort(miso));
98+
misopinmask = digitalPinToBitMask(miso);
10199
} else {
102100
misoport = 0;
103101
misopinmask = 0;
104102
}
103+
if(cs >= 0) {
104+
csport = (RwReg *)portOutputRegister(digitalPinToPort(cs));
105+
cspinmask = digitalPinToBitMask(cs);
106+
} else {
107+
// No chip-select line defined; might be permanently tied to GND.
108+
// Assign a valid GPIO register (though not used for CS), and an
109+
// empty pin bitmask...the nonsense bit-twiddling might be faster
110+
// than checking _cs and possibly branching.
111+
csport = dcport;
112+
cspinmask = 0;
113+
}
105114
#endif
106115
}
107116

@@ -126,16 +135,22 @@ Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h,
126135
_miso = -1;
127136
_freq = 0;
128137
#ifdef USE_FAST_PINIO
129-
csport = (RwReg *)portOutputRegister(digitalPinToPort(_cs));
130-
cspinmask = digitalPinToBitMask(_cs);
131-
dcport = (RwReg *)portOutputRegister(digitalPinToPort(_dc));
132-
dcpinmask = digitalPinToBitMask(_dc);
133138
clkport = 0;
134139
clkpinmask = 0;
135140
mosiport = 0;
136141
mosipinmask = 0;
137142
misoport = 0;
138143
misopinmask = 0;
144+
dcport = (RwReg *)portOutputRegister(digitalPinToPort(dc));
145+
dcpinmask = digitalPinToBitMask(dc);
146+
if(cs >= 0) {
147+
csport = (RwReg *)portOutputRegister(digitalPinToPort(cs));
148+
cspinmask = digitalPinToBitMask(cs);
149+
} else {
150+
// See notes in prior constructor.
151+
csport = dcport;
152+
cspinmask = 0;
153+
}
139154
#endif
140155
}
141156

@@ -150,10 +165,12 @@ void Adafruit_SPITFT::initSPI(uint32_t freq)
150165
_freq = freq;
151166

152167
// Control Pins
168+
if(_cs >= 0) {
169+
pinMode(_cs, OUTPUT);
170+
digitalWrite(_cs, HIGH); // Deselect
171+
}
153172
pinMode(_dc, OUTPUT);
154173
digitalWrite(_dc, LOW);
155-
pinMode(_cs, OUTPUT);
156-
digitalWrite(_cs, HIGH);
157174

158175
// Software SPI
159176
if(_sclk >= 0){

Adafruit_SPITFT_Macros.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
#ifdef USE_FAST_PINIO
99
#define SPI_DC_HIGH() *dcport |= dcpinmask
1010
#define SPI_DC_LOW() *dcport &= ~dcpinmask
11-
#define SPI_CS_HIGH() *csport |= cspinmask
11+
#define SPI_CS_HIGH() *csport |= cspinmask
1212
#define SPI_CS_LOW() *csport &= ~cspinmask
1313
#else
1414
#define SPI_DC_HIGH() digitalWrite(_dc, HIGH)
1515
#define SPI_DC_LOW() digitalWrite(_dc, LOW)
16-
#define SPI_CS_HIGH() digitalWrite(_cs, HIGH)
17-
#define SPI_CS_LOW() digitalWrite(_cs, LOW)
16+
#define SPI_CS_HIGH() { if(_cs >= 0) digitalWrite(_cs, HIGH) }
17+
#define SPI_CS_LOW() { if(_cs >= 0) digitalWrite(_cs, LOW) }
1818
#endif
1919

2020
/*
@@ -24,8 +24,8 @@
2424
#ifdef USE_FAST_PINIO
2525
#define SSPI_MOSI_HIGH() *mosiport |= mosipinmask
2626
#define SSPI_MOSI_LOW() *mosiport &= ~mosipinmask
27-
#define SSPI_SCK_HIGH() *clkport |= clkpinmask
28-
#define SSPI_SCK_LOW() *clkport &= ~clkpinmask
27+
#define SSPI_SCK_HIGH() *clkport |= clkpinmask
28+
#define SSPI_SCK_LOW() *clkport &= ~clkpinmask
2929
#define SSPI_MISO_READ() ((*misoport & misopinmask) != 0)
3030
#else
3131
#define SSPI_MOSI_HIGH() digitalWrite(_mosi, HIGH)

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Adafruit GFX Library
2-
version=1.2.6
2+
version=1.2.7
33
author=Adafruit
44
maintainer=Adafruit <[email protected]>
55
sentence=Adafruit GFX graphics core library, this is the 'core' class that all our other graphics libraries derive from.

0 commit comments

Comments
 (0)