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;
|
||||
}
|
||||
#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;
|
||||
_rs = dcpin;
|
||||
_rst = rstpin;
|
||||
_useSPI1 = useSPI1;
|
||||
_mosi = mosi;
|
||||
_sclk = sclk;
|
||||
_useSPI1 = false;
|
||||
if ((_mosi == 0 || _mosi == 21) && (_sclk == 20)) _useSPI1 = true;
|
||||
}
|
||||
#else
|
||||
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)
|
||||
{
|
||||
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);
|
||||
digitalWriteFast(_rs,LOW);
|
||||
digitalWriteFast(_cs,LOW);
|
||||
if (_useSPI1){
|
||||
SPI1.transfer(c);
|
||||
} else {
|
||||
SPI.transfer(c);
|
||||
}
|
||||
digitalWriteFast(_cs,HIGH);
|
||||
SPI.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
digitalWriteFast(_rs,HIGH);
|
||||
digitalWriteFast(_cs,LOW);
|
||||
if (_useSPI1){
|
||||
SPI1.transfer(c);
|
||||
} else {
|
||||
SPI.transfer(c);
|
||||
}
|
||||
digitalWriteFast(_cs,HIGH);
|
||||
SPI.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
digitalWriteFast(_rs,HIGH);
|
||||
digitalWriteFast(_cs,LOW);
|
||||
if (_useSPI1){
|
||||
SPI1.transfer16(d);
|
||||
} else {
|
||||
SPI.transfer16(d);
|
||||
}
|
||||
digitalWriteFast(_cs,HIGH);
|
||||
SPI.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
void TFT_ILI9163C::setBitrate(uint32_t n)
|
||||
{
|
||||
|
|
@ -310,13 +328,36 @@ void TFT_ILI9163C::begin(void)
|
|||
#elif defined(__MKL26Z64__)//Teensy LC (preliminary)
|
||||
pinMode(_rs, OUTPUT);
|
||||
pinMode(_cs, OUTPUT);
|
||||
|
||||
if (_useSPI1){
|
||||
ILI9163C_SPI = SPISettings(12000000, MSBFIRST, SPI_MODE0);
|
||||
SPI1.begin();
|
||||
} else {
|
||||
if ((_mosi == 0 || _mosi == 21) && (_sclk == 20)) {//identify alternate SPI channel 1 (24Mhz)
|
||||
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();
|
||||
_useSPI1 = false; //confirm
|
||||
} else {
|
||||
bitSet(_initError,0);
|
||||
return;
|
||||
}
|
||||
if (!SPI.pinIsChipSelect(_cs)) {//ERROR
|
||||
bitSet(_initError,1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
digitalWriteFast(_cs, LOW);
|
||||
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
||||
|
|
@ -325,7 +366,7 @@ void TFT_ILI9163C::begin(void)
|
|||
SPI.setMOSI(_mosi);
|
||||
SPI.setSCK(_sclk);
|
||||
} else {
|
||||
bitSet(_initError,1);
|
||||
bitSet(_initError,0);
|
||||
return;
|
||||
}
|
||||
SPI.begin();
|
||||
|
|
@ -335,7 +376,7 @@ void TFT_ILI9163C::begin(void)
|
|||
} else {
|
||||
pcs_data = 0;
|
||||
pcs_command = 0;
|
||||
bitSet(_initError,0);
|
||||
bitSet(_initError,1);
|
||||
return;
|
||||
}
|
||||
#else//all the rest of possible boards
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ class TFT_ILI9163C : public Adafruit_GFX {
|
|||
#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);
|
||||
#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
|
||||
TFT_ILI9163C(uint8_t cspin,uint8_t dcpin,uint8_t rstpin=255);
|
||||
#endif
|
||||
|
|
@ -183,42 +183,6 @@ class TFT_ILI9163C : public Adafruit_GFX {
|
|||
volatile uint8_t _Mactrl_Data;//container for the memory access control data
|
||||
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__)
|
||||
void spiwrite(uint8_t);
|
||||
volatile uint8_t *dataport, *clkport, *csport, *rsport;
|
||||
|
|
@ -231,11 +195,12 @@ class TFT_ILI9163C : public Adafruit_GFX {
|
|||
uint32_t datapinmask, clkpinmask, cspinmask, rspinmask;
|
||||
#elif defined(__MKL26Z64__)
|
||||
uint8_t _cs,_rs,_rst;
|
||||
uint8_t _mosi, _sclk;
|
||||
bool _useSPI1;
|
||||
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
||||
uint8_t _cs, _rs, _rst;
|
||||
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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue