Added SPI burst mode to spi 8 bit.

Dependents:   Bicycl_Computer_NUCLEO-F411RE Bicycl_Computer_NUCLEO-L476RG

Fork of UniGraphic by GraphicsDisplay

Added SPI burst mode to this graphics driver. If whoever wants this rolled in to repository let me know. I replaced _spi.write(); with fastWrite(); and clearRX();

SPI8.cpp

// need to re-create SPI firmware to access SPI handle
static SPI_HandleTypeDef SpiHandle;

void SPI8::fastWrite(int data) {
    
      SpiHandle.Instance = SPI1;
    // Check if data is transmitted
    while ((SpiHandle.Instance->SR & SPI_SR_TXE) == 0);
    SpiHandle.Instance->DR = data;
}
    
void SPI8::clearRX( void ) {
        SpiHandle.Instance = SPI1;
    //Check if the RX buffer is busy
    //While busy, keep checking
    while (SpiHandle.Instance->SR & SPI_SR_BSY){   
        // Check RX buffer readable
        while ((SpiHandle.Instance->SR & SPI_SR_RXNE) == 0);
        int dummy = SpiHandle.Instance->DR;
    }
}      
Revision:
11:b842b8e332cb
Parent:
10:668cf78ff93a
Child:
15:b9483ba842c8
diff -r 668cf78ff93a -r b842b8e332cb Display/TFT.cpp
--- a/Display/TFT.cpp	Thu Feb 19 00:33:27 2015 +0000
+++ b/Display/TFT.cpp	Fri Feb 20 21:32:25 2015 +0000
@@ -18,7 +18,7 @@
 
 #include "TFT.h"
 
-//#include "mbed_debug.h"
+#include "mbed_debug.h"
 
 #define SWAP(a, b)  { a ^= b; b ^= a; a ^= b; }
 
@@ -38,6 +38,8 @@
     scrollareasize=0;
     usefastwindow=false;
     fastwindowready=false;
+    is18bit=false;
+    isBGR=false;
   //  cls();
   //  locate(0,0);
 }
@@ -64,6 +66,8 @@
     scrollareasize=0;
     usefastwindow=false;
     fastwindowready=false;
+    is18bit=false;
+    isBGR=false;
   //  locate(0,0);
 }
 void TFT::wr_cmd8(unsigned char cmd)
@@ -93,7 +97,7 @@
     }
 unsigned short TFT::rd_gram()
     {
-        return proto->rd_gram();
+        return proto->rd_gram(is18bit); // protocol will handle 18to16 bit conversion
     }
 unsigned int TFT::rd_reg_data32(unsigned char reg)
     {
@@ -237,7 +241,7 @@
     unsigned short color;
   //  proto->wr_gram(color);   // 2C expects 16bit parameters
     color = rd_gram();
-    if(mipistd) color = BGR2RGB(color); // in case, convert BGR to RGB (should depend on cmd36 bit3) but maybe is device specific
+    if(isBGR) color = BGR2RGB(color); // in case, convert BGR to RGB (should depend on cmd36 bit3) but maybe is device specific
     return color;
 }
 void TFT::setscrollarea (int startY, int areasize) // ie 0,480 for whole screen
@@ -268,6 +272,27 @@
   //  proto->wr_gram(0,screensize_X*screensize_Y);
     wr_gram(_background,screensize_X*screensize_Y);
 }
+// try to get read gram pixel format, could be 16bit or 18bit, RGB or BGR
+void TFT::auto_gram_read_format()
+{
+    unsigned short px=0xCDB1;
+    unsigned short rback, rback18;
+    pixel(0,0,px);
+    window4read(0,0,1,1);
+    rback=proto->rd_gram(0); // try 16bit
+    window4read(0,0,1,1);
+    rback18=proto->rd_gram(1); // try 18bit converted to 16
+    if((rback18==px) || (BGR2RGB(rback18)==px))
+    {
+        is18bit=true;
+        if(BGR2RGB(rback18)==px) isBGR=true;
+    }
+    else if((rback==px) || (BGR2RGB(rback)==px))
+    {
+        if(BGR2RGB(rback)==px) isBGR=true;
+    }
+ //   else debug("\r\nfail to identify gram read color format,\r\nsent %.4X read16 %.4X read18 %.4X", px, rback, rback18);    
+}
 // try to identify display controller
 void TFT::identify()
 {