SPI transaction for Arduino's
This commit is contained in:
parent
4f28c07c0d
commit
97a9d77fa7
2 changed files with 42 additions and 0 deletions
|
|
@ -36,25 +36,43 @@ inline void TFT_ILI9163C::spiwrite(uint8_t c){
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::writecommand(uint8_t c){
|
void TFT_ILI9163C::writecommand(uint8_t c){
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0));
|
||||||
|
#endif
|
||||||
*rsport &= ~rspinmask;//low
|
*rsport &= ~rspinmask;//low
|
||||||
*csport &= ~cspinmask;//low
|
*csport &= ~cspinmask;//low
|
||||||
spiwrite(c);
|
spiwrite(c);
|
||||||
*csport |= cspinmask;//hi
|
*csport |= cspinmask;//hi
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.endTransaction();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::writedata(uint8_t c){
|
void TFT_ILI9163C::writedata(uint8_t c){
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0));
|
||||||
|
#endif
|
||||||
*rsport |= rspinmask;
|
*rsport |= rspinmask;
|
||||||
*csport &= ~cspinmask;
|
*csport &= ~cspinmask;
|
||||||
spiwrite(c);
|
spiwrite(c);
|
||||||
*csport |= cspinmask;
|
*csport |= cspinmask;
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.endTransaction();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::writedata16(uint16_t d){
|
void TFT_ILI9163C::writedata16(uint16_t d){
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0));
|
||||||
|
#endif
|
||||||
*rsport |= rspinmask;
|
*rsport |= rspinmask;
|
||||||
*csport &= ~cspinmask;
|
*csport &= ~cspinmask;
|
||||||
spiwrite(d >> 8);
|
spiwrite(d >> 8);
|
||||||
spiwrite(d);
|
spiwrite(d);
|
||||||
*csport |= cspinmask;
|
*csport |= cspinmask;
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.endTransaction();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::setBitrate(uint32_t n){
|
void TFT_ILI9163C::setBitrate(uint32_t n){
|
||||||
|
|
@ -76,25 +94,43 @@ inline void TFT_ILI9163C::spiwrite(uint8_t c){
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::writecommand(uint8_t c){
|
void TFT_ILI9163C::writecommand(uint8_t c){
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0));
|
||||||
|
#endif
|
||||||
rsport->PIO_CODR |= rspinmask;//LO
|
rsport->PIO_CODR |= rspinmask;//LO
|
||||||
csport->PIO_CODR |= cspinmask;//LO
|
csport->PIO_CODR |= cspinmask;//LO
|
||||||
spiwrite(c);
|
spiwrite(c);
|
||||||
csport->PIO_SODR |= cspinmask;//HI
|
csport->PIO_SODR |= cspinmask;//HI
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.endTransaction();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::writedata(uint8_t c){
|
void TFT_ILI9163C::writedata(uint8_t c){
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0));
|
||||||
|
#endif
|
||||||
rsport->PIO_SODR |= rspinmask;//HI
|
rsport->PIO_SODR |= rspinmask;//HI
|
||||||
csport->PIO_CODR |= cspinmask;//LO
|
csport->PIO_CODR |= cspinmask;//LO
|
||||||
spiwrite(c);
|
spiwrite(c);
|
||||||
csport->PIO_SODR |= cspinmask;//HI
|
csport->PIO_SODR |= cspinmask;//HI
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.endTransaction();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFT_ILI9163C::writedata16(uint16_t d){
|
void TFT_ILI9163C::writedata16(uint16_t d){
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0));
|
||||||
|
#endif
|
||||||
rsport->PIO_SODR |= rspinmask;//HI
|
rsport->PIO_SODR |= rspinmask;//HI
|
||||||
csport->PIO_CODR |= cspinmask;//LO
|
csport->PIO_CODR |= cspinmask;//LO
|
||||||
spiwrite(d >> 8);
|
spiwrite(d >> 8);
|
||||||
spiwrite(d);
|
spiwrite(d);
|
||||||
csport->PIO_SODR |= cspinmask;//HI
|
csport->PIO_SODR |= cspinmask;//HI
|
||||||
|
#ifdef SPI_HAS_TRANSACTION
|
||||||
|
SPI.endTransaction();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -126,9 +162,11 @@ void TFT_ILI9163C::begin(void) {
|
||||||
cspinmask = digitalPinToBitMask(_cs);
|
cspinmask = digitalPinToBitMask(_cs);
|
||||||
rspinmask = digitalPinToBitMask(_rs);
|
rspinmask = digitalPinToBitMask(_rs);
|
||||||
SPI.begin();
|
SPI.begin();
|
||||||
|
#if !defined (SPI_HAS_TRANSACTION)
|
||||||
SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz
|
SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz
|
||||||
SPI.setBitOrder(MSBFIRST);
|
SPI.setBitOrder(MSBFIRST);
|
||||||
SPI.setDataMode(SPI_MODE0);
|
SPI.setDataMode(SPI_MODE0);
|
||||||
|
#endif
|
||||||
// toggle RST low to reset; CS low so it'll listen to us
|
// toggle RST low to reset; CS low so it'll listen to us
|
||||||
*csport &= ~cspinmask;
|
*csport &= ~cspinmask;
|
||||||
#elif defined(__SAM3X8E__)
|
#elif defined(__SAM3X8E__)
|
||||||
|
|
@ -139,9 +177,11 @@ void TFT_ILI9163C::begin(void) {
|
||||||
cspinmask = digitalPinToBitMask(_cs);
|
cspinmask = digitalPinToBitMask(_cs);
|
||||||
rspinmask = digitalPinToBitMask(_rs);
|
rspinmask = digitalPinToBitMask(_rs);
|
||||||
SPI.begin();
|
SPI.begin();
|
||||||
|
#if !defined (SPI_HAS_TRANSACTION)
|
||||||
SPI.setClockDivider(11); // 8 MHz
|
SPI.setClockDivider(11); // 8 MHz
|
||||||
SPI.setBitOrder(MSBFIRST);
|
SPI.setBitOrder(MSBFIRST);
|
||||||
SPI.setDataMode(SPI_MODE0);
|
SPI.setDataMode(SPI_MODE0);
|
||||||
|
#endif
|
||||||
// toggle RST low to reset; CS low so it'll listen to us
|
// toggle RST low to reset; CS low so it'll listen to us
|
||||||
csport ->PIO_CODR |= cspinmask; // Set control bits to LOW (idle)
|
csport ->PIO_CODR |= cspinmask; // Set control bits to LOW (idle)
|
||||||
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
|
||||||
|
|
|
||||||
|
|
@ -120,9 +120,11 @@ Done!
|
||||||
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
|
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
|
||||||
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
|
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
|
||||||
typedef unsigned char prog_uchar;
|
typedef unsigned char prog_uchar;
|
||||||
|
#define SPICLOCK 8000000
|
||||||
#endif
|
#endif
|
||||||
#ifdef __AVR__
|
#ifdef __AVR__
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
|
#define SPICLOCK 8000000
|
||||||
#endif
|
#endif
|
||||||
#if defined(__MK20DX128__) || defined(__MK20DX256__)
|
#if defined(__MK20DX128__) || defined(__MK20DX256__)
|
||||||
#define SPICLOCK 30000000
|
#define SPICLOCK 30000000
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue