Driver Library for our displays

Dependents:   dm_bubbles dm_calc dm_paint dm_sdcard_with_adapter ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers DmTftIli9341.cpp Source File

DmTftIli9341.cpp

00001 /**********************************************************************************************
00002  Copyright (c) 2014 DisplayModule. All rights reserved.
00003 
00004  Redistribution and use of this source code, part of this source code or any compiled binary
00005  based on this source code is permitted as long as the above copyright notice and following
00006  disclaimer is retained.
00007 
00008  DISCLAIMER:
00009  THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
00010  NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
00011  ********************************************************************************************/
00012 
00013 //Tested on NUCLEO-F401RE, LPCXpresso11U68, LPCXpresso824-MAX platform.
00014 
00015 #include "DmTftIli9341.h"
00016 #if defined (DM_TOOLCHAIN_ARDUINO)
00017 DmTftIli9341::DmTftIli9341(uint8_t cs, uint8_t dc)
00018 :DmTftBase(240, 320)
00019 #elif defined (DM_TOOLCHAIN_MBED)
00020 DmTftIli9341::DmTftIli9341(PinName cs, PinName dc, PinName mosi, PinName miso, PinName clk)
00021 :DmTftBase(240, 320), spi(mosi, miso, clk)
00022 #endif
00023 {
00024   _cs = cs;
00025   _dc = dc;
00026 }
00027 
00028 DmTftIli9341::~DmTftIli9341() {
00029 #if defined (DM_TOOLCHAIN_MBED)
00030 delete _pinCS;
00031 delete _pinDC;
00032 
00033 _pinCS = NULL;
00034 _pinDC = NULL;
00035 #endif
00036 }
00037 
00038 void DmTftIli9341::writeBus(uint8_t data) {
00039 #if defined (DM_TOOLCHAIN_ARDUINO)
00040   SPCR = _spiSettings;         // SPI Control Register
00041   SPDR = data;                 // SPI Data Register
00042   while(!(SPSR & _BV(SPIF)));  // SPI Status Register Wait for transmission to finish
00043 #elif defined (DM_TOOLCHAIN_MBED)
00044   spi.write(data);
00045 #endif
00046 }
00047 
00048 void DmTftIli9341::sendCommand(uint8_t index) {
00049   cbi(_pinDC, _bitmaskDC);
00050   writeBus(index);
00051 }
00052 
00053 void DmTftIli9341::send8BitData(uint8_t data) {
00054   sbi(_pinDC, _bitmaskDC);
00055   writeBus(data);
00056 }
00057 
00058 void DmTftIli9341::sendData(uint16_t data) {
00059   uint8_t dh = data>>8;
00060   uint8_t dl = data&0xff;
00061 
00062   sbi(_pinDC, _bitmaskDC);
00063   writeBus(dh);
00064   writeBus(dl);
00065 }
00066 
00067 void DmTftIli9341::setAddress(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
00068   sendCommand(0x2A); // Set Column
00069   sendData(x0);
00070   sendData(x1);
00071 
00072   sendCommand(0x2B);  // Set Page
00073   sendData(y0);
00074   sendData(y1);
00075 
00076   sendCommand(0x2c);
00077 }
00078 
00079 void DmTftIli9341::init(void) {
00080   setTextColor(BLACK, WHITE);
00081 #if defined (DM_TOOLCHAIN_ARDUINO)
00082   _pinCS  = portOutputRegister(digitalPinToPort(_cs));
00083   _bitmaskCS  = digitalPinToBitMask(_cs);
00084   _pinDC  = portOutputRegister(digitalPinToPort(_dc));
00085   _bitmaskDC  = digitalPinToBitMask(_dc);
00086   pinMode(_cs,OUTPUT);
00087   pinMode(_dc,OUTPUT);
00088 
00089   sbi(_pinCS, _bitmaskCS);
00090 
00091   SPI.begin();
00092   SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz (full! speed!)
00093   SPI.setBitOrder(MSBFIRST);
00094   SPI.setDataMode(SPI_MODE0);
00095   _spiSettings = SPCR;
00096 #elif defined (DM_TOOLCHAIN_MBED)
00097   _pinCS = new DigitalOut(_cs);
00098   _pinDC = new DigitalOut(_dc);
00099   sbi(_pinCS, _bitmaskCS);
00100   
00101   spi.format(8,0);
00102   spi.frequency(8000000); // Max SPI speed for display is 10 and for 17 for LPC15xx  
00103 #endif
00104   cbi(_pinCS, _bitmaskCS);
00105   delay(135); // This much delay needed??
00106 
00107   // ILI9341 init
00108   sendCommand(0x11);
00109   delay(120);
00110 
00111   sendCommand(0xCF);
00112   send8BitData(0x00);
00113   send8BitData(0xc3);
00114   send8BitData(0X30);
00115 
00116   sendCommand(0xED);
00117   send8BitData(0x64);
00118   send8BitData(0x03);
00119   send8BitData(0X12);
00120   send8BitData(0X81);
00121 
00122   sendCommand(0xE8);
00123   send8BitData(0x85);
00124   send8BitData(0x10);
00125   send8BitData(0x79);
00126 
00127   sendCommand(0xCB);
00128   send8BitData(0x39);
00129   send8BitData(0x2C);
00130   send8BitData(0x00);
00131   send8BitData(0x34);
00132   send8BitData(0x02);
00133 
00134   sendCommand(0xF7);
00135   send8BitData(0x20);
00136 
00137   sendCommand(0xEA);
00138   send8BitData(0x00);
00139   send8BitData(0x00);
00140 
00141   sendCommand(0xC0);    //Power control
00142   send8BitData(0x22);   //VRH[5:0]
00143 
00144   sendCommand(0xC1);    //Power control
00145   send8BitData(0x11);   //SAP[2:0];BT[3:0]
00146 
00147   sendCommand(0xC5);    //VCM control
00148   send8BitData(0x3d);
00149   send8BitData(0x20);
00150 
00151   sendCommand(0xC7);    //VCM control2
00152   send8BitData(0xAA); //0xB0
00153 
00154   sendCommand(0x36);    // Memory Access Control
00155   send8BitData(0x08);
00156 
00157   sendCommand(0x3A);
00158   send8BitData(0x55);
00159 
00160   sendCommand(0xB1);
00161   send8BitData(0x00);
00162   send8BitData(0x13);
00163 
00164   sendCommand(0xB6);    // Display Function Control
00165   send8BitData(0x0A);
00166   send8BitData(0xA2);
00167 
00168   sendCommand(0xF6);
00169   send8BitData(0x01);
00170   send8BitData(0x30);
00171 
00172   sendCommand(0xF2);    // 3Gamma Function Disable
00173   send8BitData(0x00);
00174 
00175   sendCommand(0x26);    //Gamma curve selected
00176   send8BitData(0x01);
00177 
00178   sendCommand(0xE0);    //Set Gamma
00179   send8BitData(0x0F);
00180   send8BitData(0x3F);
00181   send8BitData(0x2F);
00182   send8BitData(0x0C);
00183   send8BitData(0x10);
00184   send8BitData(0x0A);
00185   send8BitData(0x53);
00186   send8BitData(0XD5);
00187   send8BitData(0x40);
00188   send8BitData(0x0A);
00189   send8BitData(0x13);
00190   send8BitData(0x03);
00191   send8BitData(0x08);
00192   send8BitData(0x03);
00193   send8BitData(0x00);
00194 
00195   sendCommand(0XE1);    //Set Gamma
00196   send8BitData(0x00);
00197   send8BitData(0x00);
00198 
00199   send8BitData(0x10);
00200   send8BitData(0x03);
00201   send8BitData(0x0F);
00202   send8BitData(0x05);
00203   send8BitData(0x2C);
00204   send8BitData(0xA2);
00205   send8BitData(0x3F);
00206   send8BitData(0x05);
00207   send8BitData(0x0E);
00208   send8BitData(0x0C);
00209   send8BitData(0x37);
00210   send8BitData(0x3C);
00211   send8BitData(0x0F);
00212 
00213   sendCommand(0x11);    //Exit Sleep
00214   delay(120);
00215   sendCommand(0x29);    //Display on
00216   delay(50);
00217   sbi(_pinCS, _bitmaskCS);
00218   clearScreen();
00219 }
00220 
00221 /*********************************************************************************************************
00222   END FILE
00223 *********************************************************************************************************/
00224 
00225