fixed Teensy LC SPI error, now works in SPI1
This commit is contained in:
parent
27e7df560a
commit
9fc39798a9
2 changed files with 69 additions and 63 deletions
|
|
@ -21,12 +21,15 @@
|
||||||
_sclk = sclk;
|
_sclk = sclk;
|
||||||
}
|
}
|
||||||
#elif defined(__MKL26Z64__)
|
#elif defined(__MKL26Z64__)
|
||||||
TFT_ILI9163C::TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin,bool useSPI1) : Adafruit_GFX(_TFTWIDTH,_TFTHEIGHT)
|
TFT_ILI9163C::TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin,uint8_t mosi,uint8_t sclk) : Adafruit_GFX(_TFTWIDTH,_TFTHEIGHT)
|
||||||
{
|
{
|
||||||
_cs = cspin;
|
_cs = cspin;
|
||||||
_rs = dcpin;
|
_rs = dcpin;
|
||||||
_rst = rstpin;
|
_rst = rstpin;
|
||||||
_useSPI1 = useSPI1;
|
_mosi = mosi;
|
||||||
|
_sclk = sclk;
|
||||||
|
_useSPI1 = false;
|
||||||
|
if ((_mosi == 0 || _mosi == 21) && (_sclk == 20)) _useSPI1 = true;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
TFT_ILI9163C::TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin) : Adafruit_GFX(_TFTWIDTH,_TFTHEIGHT)
|
TFT_ILI9163C::TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin) : Adafruit_GFX(_TFTWIDTH,_TFTHEIGHT)
|
||||||
|
|
@ -169,45 +172,60 @@
|
||||||
|
|
||||||
void TFT_ILI9163C::writecommand(uint8_t c)
|
void TFT_ILI9163C::writecommand(uint8_t c)
|
||||||
{
|
{
|
||||||
|
if (_useSPI1){
|
||||||
|
SPI1.beginTransaction(ILI9163C_SPI);
|
||||||
|
digitalWriteFast(_rs,LOW);
|
||||||
|
digitalWriteFast(_cs,LOW);
|
||||||
|
SPI1.transfer(c);
|
||||||
|
digitalWriteFast(_cs,HIGH);
|
||||||
|
SPI1.endTransaction();
|
||||||
|
} else {
|
||||||
SPI.beginTransaction(ILI9163C_SPI);
|
SPI.beginTransaction(ILI9163C_SPI);
|
||||||
digitalWriteFast(_rs,LOW);
|
digitalWriteFast(_rs,LOW);
|
||||||
digitalWriteFast(_cs,LOW);
|
digitalWriteFast(_cs,LOW);
|
||||||
if (_useSPI1){
|
|
||||||
SPI1.transfer(c);
|
|
||||||
} else {
|
|
||||||
SPI.transfer(c);
|
SPI.transfer(c);
|
||||||
}
|
|
||||||
digitalWriteFast(_cs,HIGH);
|
digitalWriteFast(_cs,HIGH);
|
||||||
SPI.endTransaction();
|
SPI.endTransaction();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::writedata(uint8_t c)
|
void TFT_ILI9163C::writedata(uint8_t c)
|
||||||
{
|
{
|
||||||
|
if (_useSPI1){
|
||||||
|
SPI1.beginTransaction(ILI9163C_SPI);
|
||||||
|
digitalWriteFast(_rs,HIGH);
|
||||||
|
digitalWriteFast(_cs,LOW);
|
||||||
|
SPI1.transfer(c);
|
||||||
|
digitalWriteFast(_cs,HIGH);
|
||||||
|
SPI1.endTransaction();
|
||||||
|
} else {
|
||||||
SPI.beginTransaction(ILI9163C_SPI);
|
SPI.beginTransaction(ILI9163C_SPI);
|
||||||
digitalWriteFast(_rs,HIGH);
|
digitalWriteFast(_rs,HIGH);
|
||||||
digitalWriteFast(_cs,LOW);
|
digitalWriteFast(_cs,LOW);
|
||||||
if (_useSPI1){
|
|
||||||
SPI1.transfer(c);
|
|
||||||
} else {
|
|
||||||
SPI.transfer(c);
|
SPI.transfer(c);
|
||||||
}
|
|
||||||
digitalWriteFast(_cs,HIGH);
|
digitalWriteFast(_cs,HIGH);
|
||||||
SPI.endTransaction();
|
SPI.endTransaction();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::writedata16(uint16_t d)
|
void TFT_ILI9163C::writedata16(uint16_t d)
|
||||||
{
|
{
|
||||||
|
if (_useSPI1){
|
||||||
|
SPI1.beginTransaction(ILI9163C_SPI);
|
||||||
|
digitalWriteFast(_rs,HIGH);
|
||||||
|
digitalWriteFast(_cs,LOW);
|
||||||
|
SPI1.transfer16(d);
|
||||||
|
digitalWriteFast(_cs,HIGH);
|
||||||
|
SPI1.endTransaction();
|
||||||
|
} else {
|
||||||
SPI.beginTransaction(ILI9163C_SPI);
|
SPI.beginTransaction(ILI9163C_SPI);
|
||||||
digitalWriteFast(_rs,HIGH);
|
digitalWriteFast(_rs,HIGH);
|
||||||
digitalWriteFast(_cs,LOW);
|
digitalWriteFast(_cs,LOW);
|
||||||
if (_useSPI1){
|
|
||||||
SPI1.transfer16(d);
|
|
||||||
} else {
|
|
||||||
SPI.transfer16(d);
|
SPI.transfer16(d);
|
||||||
}
|
|
||||||
digitalWriteFast(_cs,HIGH);
|
digitalWriteFast(_cs,HIGH);
|
||||||
SPI.endTransaction();
|
SPI.endTransaction();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::setBitrate(uint32_t n)
|
void TFT_ILI9163C::setBitrate(uint32_t n)
|
||||||
{
|
{
|
||||||
|
|
@ -310,13 +328,36 @@ void TFT_ILI9163C::begin(void)
|
||||||
#elif defined(__MKL26Z64__)//Teensy LC (preliminary)
|
#elif defined(__MKL26Z64__)//Teensy LC (preliminary)
|
||||||
pinMode(_rs, OUTPUT);
|
pinMode(_rs, OUTPUT);
|
||||||
pinMode(_cs, OUTPUT);
|
pinMode(_cs, OUTPUT);
|
||||||
|
|
||||||
if (_useSPI1){
|
if (_useSPI1){
|
||||||
ILI9163C_SPI = SPISettings(12000000, MSBFIRST, SPI_MODE0);
|
if ((_mosi == 0 || _mosi == 21) && (_sclk == 20)) {//identify alternate SPI channel 1 (24Mhz)
|
||||||
SPI1.begin();
|
|
||||||
} else {
|
|
||||||
ILI9163C_SPI = SPISettings(24000000, MSBFIRST, SPI_MODE0);
|
ILI9163C_SPI = SPISettings(24000000, MSBFIRST, SPI_MODE0);
|
||||||
|
SPI1.setMOSI(_mosi);
|
||||||
|
SPI1.setSCK(_sclk);
|
||||||
|
SPI1.begin();
|
||||||
|
_useSPI1 = true; //confirm
|
||||||
|
} else {
|
||||||
|
bitSet(_initError,0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!SPI.pinIsChipSelect(_cs)) {//ERROR
|
||||||
|
bitSet(_initError,1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((_mosi == 11 || _mosi == 7) && (_sclk == 13 || _sclk == 14)) {//valid SPI pins?
|
||||||
|
ILI9163C_SPI = SPISettings(12000000, MSBFIRST, SPI_MODE0);
|
||||||
|
SPI.setMOSI(_mosi);
|
||||||
|
SPI.setSCK(_sclk);
|
||||||
SPI.begin();
|
SPI.begin();
|
||||||
|
_useSPI1 = false; //confirm
|
||||||
|
} else {
|
||||||
|
bitSet(_initError,0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!SPI.pinIsChipSelect(_cs)) {//ERROR
|
||||||
|
bitSet(_initError,1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
digitalWriteFast(_cs, LOW);
|
digitalWriteFast(_cs, LOW);
|
||||||
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
||||||
|
|
@ -325,7 +366,7 @@ void TFT_ILI9163C::begin(void)
|
||||||
SPI.setMOSI(_mosi);
|
SPI.setMOSI(_mosi);
|
||||||
SPI.setSCK(_sclk);
|
SPI.setSCK(_sclk);
|
||||||
} else {
|
} else {
|
||||||
bitSet(_initError,1);
|
bitSet(_initError,0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SPI.begin();
|
SPI.begin();
|
||||||
|
|
@ -335,7 +376,7 @@ void TFT_ILI9163C::begin(void)
|
||||||
} else {
|
} else {
|
||||||
pcs_data = 0;
|
pcs_data = 0;
|
||||||
pcs_command = 0;
|
pcs_command = 0;
|
||||||
bitSet(_initError,0);
|
bitSet(_initError,1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#else//all the rest of possible boards
|
#else//all the rest of possible boards
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ class TFT_ILI9163C : public Adafruit_GFX {
|
||||||
#if defined(__MK20DX128__) || defined(__MK20DX256__)
|
#if defined(__MK20DX128__) || defined(__MK20DX256__)
|
||||||
TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin=255,uint8_t mosi=11,uint8_t sclk=13);
|
TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin=255,uint8_t mosi=11,uint8_t sclk=13);
|
||||||
#elif defined(__MKL26Z64__)
|
#elif defined(__MKL26Z64__)
|
||||||
TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin=255,bool useSPI1=false);
|
TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin=255,uint8_t mosi=11,uint8_t sclk=13);
|
||||||
#else
|
#else
|
||||||
TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin=255);
|
TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin=255);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -183,42 +183,6 @@ class TFT_ILI9163C : public Adafruit_GFX {
|
||||||
volatile uint8_t _Mactrl_Data;//container for the memory access control data
|
volatile uint8_t _Mactrl_Data;//container for the memory access control data
|
||||||
uint8_t _colorspaceData;
|
uint8_t _colorspaceData;
|
||||||
|
|
||||||
/* inline void startTransaction(void){
|
|
||||||
//__attribute__((always_inline)) {
|
|
||||||
#if defined(SPI_HAS_TRANSACTION)
|
|
||||||
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0));
|
|
||||||
#endif
|
|
||||||
#if defined(__AVR__)
|
|
||||||
*csport &= ~cspinmask;//low
|
|
||||||
#elif defined(__SAM3X8E__)
|
|
||||||
csport->PIO_CODR |= cspinmask;//LO
|
|
||||||
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
|
||||||
//nop
|
|
||||||
#elif defined(__MKL26Z64__)
|
|
||||||
digitalWriteFast(_cs,LOW);
|
|
||||||
#else
|
|
||||||
digitalWrite(_cs,LOW);
|
|
||||||
#endif
|
|
||||||
} */
|
|
||||||
|
|
||||||
/* inline void stopTransaction(void){
|
|
||||||
//__attribute__((always_inline)) {
|
|
||||||
#if defined(__AVR__)
|
|
||||||
*csport |= cspinmask;//hi
|
|
||||||
#elif defined(__SAM3X8E__)
|
|
||||||
csport->PIO_SODR |= cspinmask;//HI
|
|
||||||
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
|
||||||
//nop
|
|
||||||
#elif defined(__MKL26Z64__)
|
|
||||||
digitalWriteFast(_cs,HIGH);
|
|
||||||
#else
|
|
||||||
digitalWrite(_cs,HIGH);
|
|
||||||
#endif
|
|
||||||
#if defined(SPI_HAS_TRANSACTION)
|
|
||||||
SPI.endTransaction();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
#if defined(__AVR__)
|
#if defined(__AVR__)
|
||||||
void spiwrite(uint8_t);
|
void spiwrite(uint8_t);
|
||||||
volatile uint8_t *dataport, *clkport, *csport, *rsport;
|
volatile uint8_t *dataport, *clkport, *csport, *rsport;
|
||||||
|
|
@ -231,11 +195,12 @@ class TFT_ILI9163C : public Adafruit_GFX {
|
||||||
uint32_t datapinmask, clkpinmask, cspinmask, rspinmask;
|
uint32_t datapinmask, clkpinmask, cspinmask, rspinmask;
|
||||||
#elif defined(__MKL26Z64__)
|
#elif defined(__MKL26Z64__)
|
||||||
uint8_t _cs,_rs,_rst;
|
uint8_t _cs,_rs,_rst;
|
||||||
|
uint8_t _mosi, _sclk;
|
||||||
bool _useSPI1;
|
bool _useSPI1;
|
||||||
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
||||||
uint8_t _cs, _rs, _rst;
|
uint8_t _cs, _rs, _rst;
|
||||||
uint8_t pcs_data, pcs_command;
|
uint8_t pcs_data, pcs_command;
|
||||||
uint8_t _miso, _mosi, _sclk;
|
uint8_t _mosi, _sclk;
|
||||||
|
|
||||||
void _setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);//graphic Addressing for Teensy
|
void _setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);//graphic Addressing for Teensy
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue