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;
    }
}      

Files at this revision

API Documentation at this revision

Comitter:
trevieze
Date:
Fri Aug 04 19:47:21 2017 +0000
Parent:
34:7eea44b19734
Commit message:
Added Gimp Graphic Display Routine for Compass

Changed in this revision

Graphics/GraphicsDisplay.cpp Show annotated file Show diff for this revision Revisions of this file
Graphics/GraphicsDisplay.h Show annotated file Show diff for this revision Revisions of this file
diff -r 7eea44b19734 -r 0ced7cf0ec8c Graphics/GraphicsDisplay.cpp
--- a/Graphics/GraphicsDisplay.cpp	Fri Apr 28 01:45:26 2017 +0000
+++ b/Graphics/GraphicsDisplay.cpp	Fri Aug 04 19:47:21 2017 +0000
@@ -333,7 +333,7 @@
 }
 void GraphicsDisplay::Bitmap(int x, int y, int w, int h,unsigned char *bitmap)
 {
-    int  j;
+    int  i,j;
     unsigned char  padd;
     unsigned short *bitmap_ptr = (unsigned short *)bitmap;    
 
@@ -349,12 +349,34 @@
     window(x, y, w-cropX, h-cropY);
     bitmap_ptr += ((h - 1)* (w + padd)); // begin of last line in array (first line of image)(standard bmp scan direction is left->right bottom->top)
     for (j = 0; j < h-cropY; j++) {         //Lines
-        window_pushpixelbuf(bitmap_ptr, w-cropX);
-        bitmap_ptr -= w+padd;
+        for (i = 0; i < w-cropX; i++) {
+            window_pushpixelbuf(bitmap_ptr, w-cropX);
+            //bitmap_ptr++; 
+            bitmap_ptr -= w+padd;
+        }
+        bitmap_ptr -= 2*w;
+        bitmap_ptr -= padd;    
     }
     if(auto_up) copy_to_lcd();
 }
 
+//Draw XBitMap Files (*.xbm), exported from GIMP,
+//Usage: Export from GIMP to *.xbm, rename *.xbm to *.c and open in editor.
+//C Array can be directly used with this function
+void GraphicsDisplay::drawXBitmap(int16_t x, int16_t y,const uint8_t *bitmap, int16_t w, int16_t h,uint16_t color) {
+  int16_t i, j, byteWidth = (w + 7) >> 3;
+  window(x, y, w, h);
+  
+    for (j=0; j<h; j++) {
+    for (i=0; i<w; i++ ) {
+      if (*(bitmap + j * byteWidth + (i >> 3)) & (1 << (i & 7))) { 
+        pixel(x+i, y+j, color);
+      }  
+    }
+  }
+}
+
+
 // local filesystem is not implemented in kinetis board , but you can add a SD card
 // fixme this whole functions needs testing and speedup
 int GraphicsDisplay::BMP_16(int x, int y, const char *Name_BMP)
diff -r 7eea44b19734 -r 0ced7cf0ec8c Graphics/GraphicsDisplay.h
--- a/Graphics/GraphicsDisplay.h	Fri Apr 28 01:45:26 2017 +0000
+++ b/Graphics/GraphicsDisplay.h	Fri Aug 04 19:47:21 2017 +0000
@@ -256,8 +256,8 @@
    *   use Gimp to create / load , save as BMP, option 16 bit R5 G6 B5
    *   copy to internal file system or SD card           
    */      
-  int BMP_16(int x, int y, const char *Name_BMP);  
     
+    int BMP_16(int x, int y, const char *charName_BMP);   
     
     
   /** select the font to use
@@ -324,6 +324,7 @@
       */
     bool get_auto_up(void); 
     
+    void drawXBitmap(int16_t x, int16_t y,const uint8_t *bitmap, int16_t w, int16_t h,uint16_t color);
     
     
 private: