SPI based library for the ST7735 LCD controller.
Dependents: RayCastingEngine RETRO_LCD_PerformanceTest RETRO_loop_test RETRO_RickGame ... more
Diff: LCD_ST7735.cpp
- 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; }