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:
2:713844a55c4e
Parent:
0:75ec1b3cde17
Child:
3:48f3282c2be8
--- a/Graphics/GraphicsDisplay.cpp	Fri Feb 13 15:25:10 2015 +0000
+++ b/Graphics/GraphicsDisplay.cpp	Fri Feb 13 23:17:55 2015 +0000
@@ -7,8 +7,8 @@
 #define SWAP(a, b)  { a ^= b; b ^= a; a ^= b; }
 GraphicsDisplay::GraphicsDisplay(const char *name):TextDisplay(name) {
     set_font((unsigned char*)Terminal6x8);
-    foreground(0xFFFF);
-    background(0x0000);
+ //   foreground(0xFFFF);
+ //   background(0x0000);
     char_x = 0;
     char_y = 0;
     oriented_width=0;
@@ -76,19 +76,19 @@
 }
 void GraphicsDisplay::hline(int x0, int x1, int y, unsigned short color)
 {
-    int len;
-    len = x1 - x0 + 1;
+    int len = x1 - x0 + 1;
     window(x0,y,len,1);
-    for (int j=0; j<len; j++) window_pushpixel(color);
+ //   for (int j=0; j<len; j++) window_pushpixel(color);
+    window_pushpixel(color, len);
     if(auto_up) copy_to_lcd();
     return;
 }
 void GraphicsDisplay::vline(int x, int y0, int y1, unsigned short color)
 {
-    int len;
-    len = y1 - y0 + 1;
+    int len = y1 - y0 + 1;
     window(x,y0,1,len);
-    for (int y=0; y<len; y++) window_pushpixel(color);
+  //  for (int y=0; y<len; y++) window_pushpixel(color);
+    window_pushpixel(color, len);
     if(auto_up) copy_to_lcd();
     return;
 }
@@ -194,7 +194,8 @@
     int w = x1 - x0 + 1;
     unsigned int pixels = h * w;
     window(x0,y0,w,h);
-    for (unsigned int p=0; p<pixels; p++) window_pushpixel(color);
+ //   for (unsigned int p=0; p<pixels; p++) window_pushpixel(color);
+    window_pushpixel(color, pixels);
     if(auto_up) copy_to_lcd();
     return;
 }
@@ -327,7 +328,7 @@
     for (j = 0; j < h; j++) {         //Lines
         if((h + y) >= oriented_height) break; // no need to crop Y
         for (i = 0; i < w; i++) {     // one line
-                if((w + x) < oriented_width) window_pushpixel(*bitmap_ptr);
+                if((w + x) < oriented_width) window_pushpixel(*bitmap_ptr); //fixme, send chunk w-cropX lenght and incr bitmapptr if out of margin
                 bitmap_ptr++;
         }
         bitmap_ptr -= 2*w;
@@ -405,10 +406,13 @@
         off = j * (PixelWidth  * 2 + padd) + start_data;   // start of line
         fseek(Image, off ,SEEK_SET);
         fread(line,1,PixelWidth * 2,Image);       // read a line - slow 
-        for (i = 0; i < PixelWidth; i++) {        // copy pixel data to TFT
+  /*      for (i = 0; i < PixelWidth; i++)
+        {        // copy pixel data to TFT
      //       wr_16(line[i]);                  // one 16 bit pixel   
             window_pushpixel(line[i]);
-        } 
+            
+        } */
+        window_pushpixelbuf(line, PixelWidth);
      }
     free (line);
     fclose(Image);
@@ -425,6 +429,14 @@
         window_pushpixel(_background);
     }
 }
+void GraphicsDisplay::set_auto_up(bool up)
+{
+    if(up) auto_up = true;
+    else auto_up = false;
+}
+bool GraphicsDisplay::get_auto_up(void)
+{
+    return (auto_up);
+}
 
 
-