Skip to content

Commit e47f80b

Browse files
committed
Added support for I2S for Inkplate6.
1 parent a888b95 commit e47f80b

File tree

5 files changed

+382
-159
lines changed

5 files changed

+382
-159
lines changed

src/Inkplate.cpp

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@ int Inkplate::einkOn()
121121
pinsAsOutputs();
122122
LE_CLEAR;
123123
OE_CLEAR;
124+
#if !defined(ARDUINO_ESP32_DEV) && !defined(ARDUINO_INKPLATE6V2) // Not used on Inkplate6 anymore.
124125
CL_CLEAR;
126+
#endif
125127
SPH_SET;
126128
GMOD_SET;
127129
SPV_SET;
@@ -157,7 +159,11 @@ void Inkplate::einkOff()
157159
return;
158160
OE_CLEAR;
159161
GMOD_CLEAR;
162+
#if !defined(ARDUINO_ESP32_DEV) && !defined(ARDUINO_INKPLATE6V2) // Not used on Inkplate6 anymore.
160163
GPIO.out &= ~(DATA | LE | CL);
164+
#else
165+
LE_CLEAR;
166+
#endif
161167
CKV_CLEAR;
162168
SPH_CLEAR;
163169
SPV_CLEAR;
@@ -176,6 +182,8 @@ void Inkplate::einkOff()
176182
WAKEUP_CLEAR;
177183
#endif
178184

185+
pinsZstate();
186+
179187
setPanelState(0);
180188
}
181189

@@ -233,11 +241,13 @@ void Inkplate::vscan_start()
233241
*/
234242
void Inkplate::hscan_start(uint32_t _d)
235243
{
244+
#if !defined(ARDUINO_ESP32_DEV) && !defined(ARDUINO_INKPLATE6V2)
236245
SPH_CLEAR;
237246
GPIO.out_w1ts = (_d) | CL;
238247
GPIO.out_w1tc = DATA | CL;
239248
SPH_SET;
240249
CKV_SET;
250+
#endif
241251
}
242252

243253
/**
@@ -258,14 +268,15 @@ void Inkplate::vscan_end()
258268
*/
259269
void Inkplate::pinsZstate()
260270
{
261-
pinMode(0, INPUT);
262271
pinMode(2, INPUT);
263272
pinMode(32, INPUT);
264273
pinMode(33, INPUT);
265274
pinModeInternal(IO_INT_ADDR, ioRegsInt, OE, INPUT);
266275
pinModeInternal(IO_INT_ADDR, ioRegsInt, GMOD, INPUT);
267276
pinModeInternal(IO_INT_ADDR, ioRegsInt, SPV, INPUT);
268277

278+
// Set up the EPD Data and CL pins for I2S (only on Inkplate6).
279+
pinMode(0, INPUT);
269280
pinMode(4, INPUT);
270281
pinMode(5, INPUT);
271282
pinMode(18, INPUT);
@@ -274,21 +285,41 @@ void Inkplate::pinsZstate()
274285
pinMode(25, INPUT);
275286
pinMode(26, INPUT);
276287
pinMode(27, INPUT);
288+
289+
#if defined(ARDUINO_ESP32_DEV) || defined(ARDUINO_INKPLATE6V2)
290+
// Disable clock for the EPD.
291+
myI2S->conf1.tx_stop_en = 0;
292+
#endif
277293
}
278294

279295
/**
280296
* @brief pinsAsOutputs sets all tps pins as outputs
281297
*/
282298
void Inkplate::pinsAsOutputs()
283299
{
284-
pinMode(0, OUTPUT);
285300
pinMode(2, OUTPUT);
286301
pinMode(32, OUTPUT);
287302
pinMode(33, OUTPUT);
288303
pinModeInternal(IO_INT_ADDR, ioRegsInt, OE, OUTPUT);
289304
pinModeInternal(IO_INT_ADDR, ioRegsInt, GMOD, OUTPUT);
290305
pinModeInternal(IO_INT_ADDR, ioRegsInt, SPV, OUTPUT);
291306

307+
#if defined(ARDUINO_ESP32_DEV) || defined(ARDUINO_INKPLATE6V2)
308+
// Set up the EPD Data and CL pins for I2S.
309+
setI2S1pin(0, I2S1O_BCK_OUT_IDX, 0);
310+
setI2S1pin(4, I2S1O_DATA_OUT0_IDX, 0);
311+
setI2S1pin(5, I2S1O_DATA_OUT1_IDX, 0);
312+
setI2S1pin(18, I2S1O_DATA_OUT2_IDX, 0);
313+
setI2S1pin(19, I2S1O_DATA_OUT3_IDX, 0);
314+
setI2S1pin(23, I2S1O_DATA_OUT4_IDX, 0);
315+
setI2S1pin(25, I2S1O_DATA_OUT5_IDX, 0);
316+
setI2S1pin(26, I2S1O_DATA_OUT6_IDX, 0);
317+
setI2S1pin(27, I2S1O_DATA_OUT7_IDX, 0);
318+
319+
// Start sending clock to the EPD.
320+
myI2S->conf1.tx_stop_en = 0;
321+
#else
322+
pinMode(0, OUTPUT);
292323
pinMode(4, OUTPUT);
293324
pinMode(5, OUTPUT);
294325
pinMode(18, OUTPUT);
@@ -297,6 +328,7 @@ void Inkplate::pinsAsOutputs()
297328
pinMode(25, OUTPUT);
298329
pinMode(26, OUTPUT);
299330
pinMode(27, OUTPUT);
331+
#endif
300332
}
301333

302334
#endif

0 commit comments

Comments
 (0)