SPI based library for the ST7735 LCD controller.

Dependents:   RayCastingEngine RETRO_LCD_PerformanceTest RETRO_loop_test RETRO_RickGame ... more

Revision:
5:21c987ee68d2
Parent:
4:88d22437119c
Child:
6:67d3d4a953e0
--- a/LCD_ST7735.cpp	Sun Sep 21 07:01:15 2014 +0000
+++ b/LCD_ST7735.cpp	Sun Oct 05 22:24:22 2014 +0000
@@ -16,7 +16,7 @@
         _spi(mosiPin, misoPin, clkPin)        
 {        
     _spi.format(8, 3);
-    _spi.frequency(15000000);
+    _spi.frequency(8000000);
     
     initDisplay();
     clearScreen();
@@ -26,7 +26,7 @@
 
 void LCD_ST7735::setOrientation(Orientation orientation, bool flip)
 {
-    const static uint8_t my = 0x80;
+    const static uint8_t my = 0x80; 
     const static uint8_t mx = 0x40;
     const static uint8_t mv = 0x20;
     
@@ -443,11 +443,11 @@
 {
     reset();
     
-    write(CMD_SLPOUT);
+    writeCommand(CMD_SLPOUT);
     
     write(CMD_FRMCTR1, (uint8_t[]){0x01, 0x2c, 0x2d}, 3);
-    write(CMD_FRMCTR1, (uint8_t[]){0x01, 0x2c, 0x2d}, 3);
-    write(CMD_FRMCTR1, (uint8_t[]){0x01, 0x2c, 0x2d, 0x01, 0x2c, 0x2d}, 6);
+    write(CMD_FRMCTR2, (uint8_t[]){0x01, 0x2c, 0x2d}, 3);
+    write(CMD_FRMCTR3, (uint8_t[]){0x01, 0x2c, 0x2d, 0x01, 0x2c, 0x2d}, 6);
     
     write(CMD_INVCTR, (uint8_t[]){0x07}, 1);
     
@@ -498,7 +498,7 @@
     write(CMD_COLMOD, (uint8_t[]){0x05}, 1);            
     
     // Enable display
-    write(CMD_DISPON);            
+    writeCommand(CMD_DISPON);            
     
     setBacklight(true);
 }
@@ -530,78 +530,83 @@
     uint8_t y2h = (uint8_t)(y2 >> 8);
     write(CMD_RASET, (uint8_t[]){y1h, y1l, y2h, y2l}, 4);    
 }
-
-void LCD_ST7735::write(uint8_t cmd)
+        
+void LCD_ST7735::writeCommand(uint8_t cmd)
 {
-    write(cmd, NULL, 0);
+    _cs = 0;
+    _ds = 0;    
+    _spi.fastWrite(cmd);
+    _spi.waitWhileBusy();
+    _spi.clearRx();
+    _cs = 1;
 }
 
 void LCD_ST7735::write(uint8_t cmd, uint8_t data[], int dataLen)
 {
-    _ds = 0;
     _cs = 0;
-    _spi.write(cmd);   
+    _ds = 0;    
+    _spi.fastWrite(cmd);
+    _spi.waitWhileBusy();
     if (data != NULL & dataLen > 0)
     {
         _ds = 1;        
         for(int i = 0; i < dataLen; ++i)
         {            
-            _spi.write(data[i]);
+            _spi.fastWrite(data[i]); 
         }        
+        _spi.waitWhileBusy();
         _ds = 0; 
     }    
-    _cs = 1;    
+    _spi.clearRx();
+    _cs = 1;
 }
 
 void LCD_ST7735::write(uint8_t cmd, uint16_t data)
 {
-    _ds = 0;
-    _cs = 0;
-    _spi.write(cmd);   
-    _ds = 1;        
-    _spi.write(data >> 8);
-    _spi.write(data);
-    _ds = 0; 
+    _cs = 0; 
+    _ds = 0;    
+    _spi.fastWrite(cmd);       
+    _spi.waitWhileBusy();
+    _ds = 1;            
+    _spi.fastWrite(data >> 8);
+    _spi.fastWrite(data);
+    _spi.waitWhileBusy();
+    _spi.clearRx();
+    _ds = 0;     
     _cs = 1;
 }
 
-void LCD_ST7735::writeData(uint8_t data)
-{
-    _ds = 1;
-    _cs = 0;        
-    _spi.write(data);
-    _ds = 0; 
-    _cs = 1; 
-}
-
 void LCD_ST7735::beginBatchCommand(uint8_t cmd)
 {
-    _ds = 0;    
     _cs = 0;
-    _spi.write(cmd);   
+    _ds = 0;        
+    _spi.fastWrite(cmd);   
+    _spi.waitWhileBusy();
     _ds = 1;
 }
 
 void LCD_ST7735::writeBatchData(uint8_t data)
 {
-    _spi.write(data);
+    _spi.fastWrite(data);
 }
 
 void LCD_ST7735::writeBatchData(uint8_t dataHigh, uint8_t dataLow)
 {
-    _spi.write(dataHigh);
-    _spi.write(dataLow);
+    _spi.fastWrite(dataHigh);
+    _spi.fastWrite(dataLow);
 }
 
 
 void LCD_ST7735::writeBatchData(uint16_t data)
 {
-    _spi.write(data >> 8);
-    _spi.write(data); 
+    _spi.fastWrite(data >> 8);
+    _spi.fastWrite(data); 
 }
 
 void LCD_ST7735::endBatchCommand()
 {
+    _spi.waitWhileBusy();
+    _spi.clearRx();
     _ds = 0; 
     _cs = 1; 
 }