mirror of
https://github.com/adafruit/Adafruit-GFX-Library.git
synced 2024-10-03 18:18:46 -04:00
WIP fixes for Teensy 3.2
This commit is contained in:
parent
d81e3351f3
commit
3aafb3d2cf
@ -87,6 +87,9 @@ Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h,
|
||||
#if defined(USE_FAST_PINIO)
|
||||
#if defined(HAS_PORT_SET_CLR)
|
||||
#if defined(CORE_TEENSY)
|
||||
#if !defined(KINETISK)
|
||||
dcPinMask = digitalPinToBitMask(dc);
|
||||
#endif
|
||||
dcPortSet = portSetRegister(dc);
|
||||
dcPortClr = portClearRegister(dc);
|
||||
swspi.sckPortSet = portSetRegister(sck);
|
||||
@ -94,9 +97,15 @@ Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h,
|
||||
swspi.mosiPortSet = portSetRegister(mosi);
|
||||
swspi.mosiPortClr = portClearRegister(mosi);
|
||||
if(cs >= 0) {
|
||||
#if !defined(KINETISK)
|
||||
csPinMask = digitalPinToBitMask(cs);
|
||||
#endif
|
||||
csPortSet = portSetRegister(cs);
|
||||
csPortClr = portClearRegister(cs);
|
||||
} else {
|
||||
#if !defined(KINETISK)
|
||||
csPinMask = 0;
|
||||
#endif
|
||||
csPortSet = dcPortSet;
|
||||
csPortClr = dcPortClr;
|
||||
}
|
||||
@ -211,16 +220,23 @@ Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, SPIClass *spiClass,
|
||||
#if defined(USE_FAST_PINIO)
|
||||
#if defined(HAS_PORT_SET_CLR)
|
||||
#if defined(CORE_TEENSY)
|
||||
#if !defined(KINETISK)
|
||||
dcPinMask = digitalPinToBitMask(dc);
|
||||
#endif
|
||||
dcPortSet = portSetRegister(dc);
|
||||
dcPortClr = portClearRegister(dc);
|
||||
if(cs >= 0) {
|
||||
#if !defined(KINETISK)
|
||||
csPinMask = digitalPinToBitMask(cs);
|
||||
#endif
|
||||
csPortSet = portSetRegister(cs);
|
||||
csPortClr = portClearRegister(dc);
|
||||
csPortClr = portClearRegister(cs);
|
||||
} else { // see comments below
|
||||
#if !defined(KINETISK)
|
||||
csPinMask = 0;
|
||||
#endif
|
||||
csPortSet = dcPortSet;
|
||||
csPortClr = dcPortClr;
|
||||
csPinMask = 0;
|
||||
}
|
||||
#else // !CORE_TEENSY
|
||||
dcPinMask = digitalPinToBitMask(dc);
|
||||
@ -302,18 +318,25 @@ Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, tftBusWidth busWidth,
|
||||
#if defined(USE_FAST_PINIO)
|
||||
#if defined(HAS_PORT_SET_CLR)
|
||||
#if defined(CORE_TEENSY)
|
||||
tft8.wrPortSet =portSetRegister(wr);
|
||||
tft8.wrPortClr =portClearRegister(wr);
|
||||
dcPortSet =portSetRegister(dc);
|
||||
dcPortClr =portClearRegister(dc);
|
||||
tft8.wrPortSet = portSetRegister(wr);
|
||||
tft8.wrPortClr = portClearRegister(wr);
|
||||
#if !defined(KINETISK)
|
||||
dcPinMask = digitalPinToBitMask(dc);
|
||||
#endif
|
||||
dcPortSet = portSetRegister(dc);
|
||||
dcPortClr = portClearRegister(dc);
|
||||
if(cs >= 0) {
|
||||
csPinMask=digitalPinToBitMask(cs);
|
||||
csPortSet=portSetRegister(cs);
|
||||
csPortClr=portClearRegister(cs);
|
||||
#if !defined(KINETISK)
|
||||
csPinMask = digitalPinToBitMask(cs);
|
||||
#endif
|
||||
csPortSet = portSetRegister(cs);
|
||||
csPortClr = portClearRegister(cs);
|
||||
} else { // see comments below
|
||||
#if !defined(KINETISK)
|
||||
csPinMask = 0;
|
||||
#endif
|
||||
csPortSet = dcPortSet;
|
||||
csPortClr = dcPortClr;
|
||||
csPinMask = 0;
|
||||
}
|
||||
if(rd >= 0) { // if read-strobe pin specified...
|
||||
#if defined(KINETISK)
|
||||
@ -335,16 +358,16 @@ Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, tftBusWidth busWidth,
|
||||
tft8.dirSet = portModeRegister(d0);
|
||||
tft8.dirClr = portModeRegister(d0);
|
||||
#else // !CORE_TEENSY
|
||||
tft8.wrPinMask =digitalPinToBitMask(wr);
|
||||
tft8.wrPortSet =&(PORT->Group[g_APinDescription[wr].ulPort].OUTSET.reg);
|
||||
tft8.wrPortClr =&(PORT->Group[g_APinDescription[wr].ulPort].OUTCLR.reg);
|
||||
dcPinMask =digitalPinToBitMask(dc);
|
||||
dcPortSet =&(PORT->Group[g_APinDescription[dc].ulPort].OUTSET.reg);
|
||||
dcPortClr =&(PORT->Group[g_APinDescription[dc].ulPort].OUTCLR.reg);
|
||||
tft8.wrPinMask = digitalPinToBitMask(wr);
|
||||
tft8.wrPortSet = &(PORT->Group[g_APinDescription[wr].ulPort].OUTSET.reg);
|
||||
tft8.wrPortClr = &(PORT->Group[g_APinDescription[wr].ulPort].OUTCLR.reg);
|
||||
dcPinMask = digitalPinToBitMask(dc);
|
||||
dcPortSet = &(PORT->Group[g_APinDescription[dc].ulPort].OUTSET.reg);
|
||||
dcPortClr = &(PORT->Group[g_APinDescription[dc].ulPort].OUTCLR.reg);
|
||||
if(cs >= 0) {
|
||||
csPinMask=digitalPinToBitMask(cs);
|
||||
csPortSet=&(PORT->Group[g_APinDescription[cs].ulPort].OUTSET.reg);
|
||||
csPortClr=&(PORT->Group[g_APinDescription[cs].ulPort].OUTCLR.reg);
|
||||
csPinMask = digitalPinToBitMask(cs);
|
||||
csPortSet = &(PORT->Group[g_APinDescription[cs].ulPort].OUTSET.reg);
|
||||
csPortClr = &(PORT->Group[g_APinDescription[cs].ulPort].OUTCLR.reg);
|
||||
} else {
|
||||
// No chip-select line defined; might be permanently tied to GND.
|
||||
// Assign a valid GPIO register (though not used for CS), and an
|
||||
@ -926,8 +949,8 @@ void Adafruit_SPITFT::writeColor(uint16_t color, uint32_t len) {
|
||||
if(x & 0x8000) SPI_MOSI_HIGH();
|
||||
else SPI_MOSI_LOW();
|
||||
SPI_SCK_HIGH();
|
||||
SPI_SCK_LOW();
|
||||
x <<= 1;
|
||||
SPI_SCK_LOW();
|
||||
}
|
||||
#endif // end !__AVR__
|
||||
}
|
||||
|
@ -34,6 +34,9 @@
|
||||
#if defined(__AVR__)
|
||||
typedef uint8_t PORT_t; ///< PORT values are 8-bit
|
||||
#define USE_FAST_PINIO ///< Use direct PORT register access
|
||||
#elif defined(ARDUINO_STM32_FEATHER) // WICED
|
||||
typedef class HardwareSPI SPIClass; ///< SPI is a bit odd on WICED
|
||||
typedef uint32_t PORT_t; ///< PORT values are 32-bit
|
||||
#elif defined(__arm__)
|
||||
#if defined(ARDUINO_ARCH_SAMD)
|
||||
// Adafruit M0, M4
|
||||
@ -261,7 +264,11 @@ class Adafruit_SPITFT : public Adafruit_GFX {
|
||||
void SPI_CS_HIGH(void) {
|
||||
#if defined(USE_FAST_PINIO)
|
||||
#if defined(HAS_PORT_SET_CLR)
|
||||
#if defined(KINETISK)
|
||||
*csPortSet = 1;
|
||||
#else // !KINETISK
|
||||
*csPortSet = csPinMask;
|
||||
#endif // end !KINETISK
|
||||
#else // !HAS_PORT_SET_CLR
|
||||
*csPort |= csPinMaskSet;
|
||||
#endif // end !HAS_PORT_SET_CLR
|
||||
@ -279,7 +286,11 @@ class Adafruit_SPITFT : public Adafruit_GFX {
|
||||
void SPI_CS_LOW(void) {
|
||||
#if defined(USE_FAST_PINIO)
|
||||
#if defined(HAS_PORT_SET_CLR)
|
||||
#if defined(KINETISK)
|
||||
*csPortClr = 1;
|
||||
#else // !KINETISK
|
||||
*csPortClr = csPinMask;
|
||||
#endif // end !KINETISK
|
||||
#else // !HAS_PORT_SET_CLR
|
||||
*csPort &= csPinMaskClr;
|
||||
#endif // end !HAS_PORT_SET_CLR
|
||||
@ -363,7 +374,9 @@ class Adafruit_SPITFT : public Adafruit_GFX {
|
||||
PORTreg_t dcPort; ///< PORT register for data/command
|
||||
#endif // end HAS_PORT_SET_CLR
|
||||
#endif // end USE_FAST_PINIO
|
||||
#if !defined(ARDUINO_STM32_FEATHER)
|
||||
union {
|
||||
#endif
|
||||
struct { // Values specific to HARDWARE SPI:
|
||||
SPIClass *_spi; ///< SPI class pointer
|
||||
uint32_t _freq;
|
||||
@ -431,7 +444,9 @@ class Adafruit_SPITFT : public Adafruit_GFX {
|
||||
int8_t _rd; ///< Read strobe pin # (or -1)
|
||||
bool wide = 0; ///< If true, is 16-bit interface
|
||||
} tft8;
|
||||
#if !defined(ARDUINO_STM32_FEATHER)
|
||||
};
|
||||
#endif
|
||||
#if defined(USE_SPI_DMA) // Used by hardware SPI and tft8
|
||||
Adafruit_ZeroDMA dma; ///< DMA instance
|
||||
DmacDescriptor *dptr = NULL; ///< 1st descriptor
|
||||
@ -444,8 +459,8 @@ class Adafruit_SPITFT : public Adafruit_GFX {
|
||||
#endif
|
||||
#if defined(USE_FAST_PINIO)
|
||||
#if defined(HAS_PORT_SET_CLR)
|
||||
PORT_t csPinMask; ///< Bitmask for chip select
|
||||
#if !defined(KINETISK)
|
||||
PORT_t csPinMask; ///< Bitmask for chip select
|
||||
PORT_t dcPinMask; ///< Bitmask for data/command
|
||||
#endif // end !KINETISK
|
||||
#else // !HAS_PORT_SET_CLR
|
||||
|
Loading…
x
Reference in New Issue
Block a user