Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SPI_TFT_ILI9341 by
Diff: SPI_TFT_ILI9341.cpp
- Revision:
- 10:4b70a6915f06
- Parent:
- 9:1d3d41128693
- Child:
- 11:365aa15eaa0f
--- a/SPI_TFT_ILI9341.cpp Tue Aug 19 21:16:56 2014 +0000
+++ b/SPI_TFT_ILI9341.cpp Sun Aug 31 19:25:33 2014 +0000
@@ -20,6 +20,9 @@
#include "mbed.h"
#define BPP 16 // Bits per pixel
+
+// if display is the only slave into the SPI bus, we can skip driving CS at every cmd
+//#define USE_CS
//extern Serial pc;
//extern DigitalOut xx; // debug !!
@@ -68,7 +71,9 @@
wr_8(0xE8);
break;
}
- // _cs = 1;
+#ifdef USE_CS
+ _cs = 1;
+#endif
WindowMax();
}
@@ -77,29 +82,25 @@
void SPI_TFT_ILI9341::wr_cmd(unsigned char cmd)
{
_dc = 0;
- // _cs = 0;
+#ifdef USE_CS
+ _cs = 0;
+#endif
_spi.write(cmd); // write 16bit, 00 (NOP cmd) then 8bit cmd
- // _cs = 1;
+ _dc = 1;
}
// write 8bit data/parameter
void SPI_TFT_ILI9341::wr_8(unsigned char value)
{
- _dc = 1;
- // _cs = 0;
_spi.format(8,0); // changing format takes time but wr_8 is used only for init and set orientation
_spi.write(value); // mbed lib
_spi.format(16,0);
- // _cs = 1;
}
// write 16bit data/parameter
void SPI_TFT_ILI9341::wr_16(unsigned int value)
{
- _dc = 1;
- // _cs = 0;
_spi.write(value);
- // _cs = 1;
}
// the ILI9341 can read
@@ -108,11 +109,15 @@
{
unsigned char r;
_dc = 0;
- // _cs = 0;
+#ifdef USE_CS
+ _cs = 0;
+#endif
_spi.write(cmd); // mbed lib
_dc = 1; // fixed
r = _spi.write(0) >> 8;
- // _cs = 1;
+#ifdef USE_CS
+ _cs = 1;
+#endif
return(r);
}
// for cmd that return 24bits (need a dummy cycle after cmd)
@@ -121,7 +126,9 @@
unsigned int d = 0;
unsigned short r;
_dc = 0;
- // _cs = 0;
+#ifdef USE_CS
+ _cs = 0;
+#endif
_spi.write(cmd);
_dc = 1;
r = _spi.write(0); // we get only 15bit valid, first bit was the dummy cycle
@@ -129,10 +136,11 @@
r = _spi.write(0);
d = (d << 16) | r;
d = d >> 7;
- // we clocked 7 more bit so ILI waiting for 8th, we need to rest spi
+ // we clocked 7 more bit so ILI waiting for 8th, we need to reset spi bus with CS
_cs = 1;
+#ifndef USE_CS //if CS is not used, force fixed LOW again
_cs = 0;
-// _cs = 0;
+#endif
return(d);
}
// for cmd that return 32bits (need a dummy cycle after cmd)
@@ -141,7 +149,9 @@
unsigned int d = 0;
unsigned short r;
_dc = 0;
- // _cs = 0;
+#ifdef USE_CS
+ _cs = 0;
+#endif
_spi.write(cmd);
_dc = 1;
r = _spi.write(0); // we get only 15bit valid, first bit was the dummy cycle
@@ -152,8 +162,9 @@
d = (d << 1) | (r >> 15);
// we clocked 15 more bit so ILI waiting for 16th, we need to rest spi
_cs = 1;
+#ifndef USE_CS //if CS is not used, force fixed LOW again
_cs = 0;
-// _cs = 1;
+#endif
return(d);
}
// undocumented cmd 0xD9 found in some code example
@@ -162,6 +173,9 @@
char data=0;
wr_cmd(0xd9); /* ext command */
wr_8(0x10+xParameter); /* 0x11 is the first Parameter */
+#ifdef USE_CS
+ _cs = 1;
+#endif
data = wr_cmd_rd8(Addr);
return data;
}
@@ -336,6 +350,9 @@
wr_cmd(0x29); // display on
wait_ms(150);
+#ifdef USE_CS
+ _cs = 1;
+#endif
WindowMax ();
@@ -348,6 +365,9 @@
wr_16(y);
wr_cmd(0x2C); // send pixel
wr_16(color);
+#ifdef USE_CS
+ _cs = 1;
+#endif
}
@@ -360,6 +380,9 @@
wr_cmd(0x2B);
wr_16(y);
wr_16(y+h-1);
+#ifdef USE_CS
+ _cs = 1;
+#endif
}
@@ -375,11 +398,13 @@
int pixels = ( width() * height());
WindowMax();
wr_cmd(0x2C); // send pixel
- unsigned int i;
- for (i = 0; i < pixels; i++)
+ for (int i = 0; i < pixels; i++)
{
wr_16(_background);
}
+#ifdef USE_CS
+ _cs = 1;
+#endif
}
@@ -640,8 +665,7 @@
}
}
}
-
- WindowMax();
+ WindowMax(); // maybe we can skip this
if ((w + 2) < hor) { // x offset to next char
char_x += w + 2;
} else char_x += hor;
