Modified version of the DmTftLibrary, optimized for the LPC4088 Experiment Base Board
Dependents: lpc4088_ebb_dm_calc lpc4088_ebb_dm_bubbles
Fork of DmTftLibrary by
DmTftIli9341.cpp@0:d6ff5fa503e8, 2014-05-13 (annotated)
- Committer:
- displaymodule
- Date:
- Tue May 13 09:31:24 2014 +0000
- Revision:
- 0:d6ff5fa503e8
First version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
displaymodule | 0:d6ff5fa503e8 | 1 | /********************************************************************************************** |
displaymodule | 0:d6ff5fa503e8 | 2 | Copyright (c) 2014 DisplayModule. All rights reserved. |
displaymodule | 0:d6ff5fa503e8 | 3 | |
displaymodule | 0:d6ff5fa503e8 | 4 | Redistribution and use of this source code, part of this source code or any compiled binary |
displaymodule | 0:d6ff5fa503e8 | 5 | based on this source code is permitted as long as the above copyright notice and following |
displaymodule | 0:d6ff5fa503e8 | 6 | disclaimer is retained. |
displaymodule | 0:d6ff5fa503e8 | 7 | |
displaymodule | 0:d6ff5fa503e8 | 8 | DISCLAIMER: |
displaymodule | 0:d6ff5fa503e8 | 9 | THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES |
displaymodule | 0:d6ff5fa503e8 | 10 | NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE. |
displaymodule | 0:d6ff5fa503e8 | 11 | ********************************************************************************************/ |
displaymodule | 0:d6ff5fa503e8 | 12 | |
displaymodule | 0:d6ff5fa503e8 | 13 | #include "DmTftIli9341.h" |
displaymodule | 0:d6ff5fa503e8 | 14 | #if defined (DM_TOOLCHAIN_ARDUINO) |
displaymodule | 0:d6ff5fa503e8 | 15 | DmTftIli9341::DmTftIli9341(uint8_t cs, uint8_t dc) |
displaymodule | 0:d6ff5fa503e8 | 16 | #elif defined (DM_TOOLCHAIN_MBED) |
displaymodule | 0:d6ff5fa503e8 | 17 | DmTftIli9341::DmTftIli9341(uint8_t cs, uint8_t dc, uint8_t miso, uint8_t mosi, uint8_t clk) |
displaymodule | 0:d6ff5fa503e8 | 18 | #endif |
displaymodule | 0:d6ff5fa503e8 | 19 | : DmTftBase(240, 320){ |
displaymodule | 0:d6ff5fa503e8 | 20 | _cs = cs; |
displaymodule | 0:d6ff5fa503e8 | 21 | _dc = dc; |
displaymodule | 0:d6ff5fa503e8 | 22 | #if defined (DM_TOOLCHAIN_MBED) |
displaymodule | 0:d6ff5fa503e8 | 23 | _miso = miso; |
displaymodule | 0:d6ff5fa503e8 | 24 | _mosi = mosi; |
displaymodule | 0:d6ff5fa503e8 | 25 | _clk = clk; |
displaymodule | 0:d6ff5fa503e8 | 26 | #endif |
displaymodule | 0:d6ff5fa503e8 | 27 | } |
displaymodule | 0:d6ff5fa503e8 | 28 | |
displaymodule | 0:d6ff5fa503e8 | 29 | DmTftIli9341::~DmTftIli9341() { |
displaymodule | 0:d6ff5fa503e8 | 30 | #if defined (DM_TOOLCHAIN_MBED) |
displaymodule | 0:d6ff5fa503e8 | 31 | delete _pinCS; |
displaymodule | 0:d6ff5fa503e8 | 32 | delete _pinDC; |
displaymodule | 0:d6ff5fa503e8 | 33 | delete _spi; |
displaymodule | 0:d6ff5fa503e8 | 34 | |
displaymodule | 0:d6ff5fa503e8 | 35 | _pinCS = NULL; |
displaymodule | 0:d6ff5fa503e8 | 36 | _pinDC = NULL; |
displaymodule | 0:d6ff5fa503e8 | 37 | _spi = NULL; |
displaymodule | 0:d6ff5fa503e8 | 38 | #endif |
displaymodule | 0:d6ff5fa503e8 | 39 | } |
displaymodule | 0:d6ff5fa503e8 | 40 | |
displaymodule | 0:d6ff5fa503e8 | 41 | void DmTftIli9341::writeBus(uint8_t data) { |
displaymodule | 0:d6ff5fa503e8 | 42 | #if defined (DM_TOOLCHAIN_ARDUINO) |
displaymodule | 0:d6ff5fa503e8 | 43 | SPCR = _spiSettings; // SPI Control Register |
displaymodule | 0:d6ff5fa503e8 | 44 | SPDR = data; // SPI Data Register |
displaymodule | 0:d6ff5fa503e8 | 45 | while(!(SPSR & _BV(SPIF))); // SPI Status Register Wait for transmission to finish |
displaymodule | 0:d6ff5fa503e8 | 46 | #elif defined (DM_TOOLCHAIN_MBED) |
displaymodule | 0:d6ff5fa503e8 | 47 | _spi->write(data); |
displaymodule | 0:d6ff5fa503e8 | 48 | #endif |
displaymodule | 0:d6ff5fa503e8 | 49 | } |
displaymodule | 0:d6ff5fa503e8 | 50 | |
displaymodule | 0:d6ff5fa503e8 | 51 | void DmTftIli9341::sendCommand(uint8_t index) { |
displaymodule | 0:d6ff5fa503e8 | 52 | // cbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 53 | cbi(_pinDC, _bitmaskDC); |
displaymodule | 0:d6ff5fa503e8 | 54 | |
displaymodule | 0:d6ff5fa503e8 | 55 | writeBus(index); |
displaymodule | 0:d6ff5fa503e8 | 56 | // sbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 57 | } |
displaymodule | 0:d6ff5fa503e8 | 58 | |
displaymodule | 0:d6ff5fa503e8 | 59 | void DmTftIli9341::send8BitData(uint8_t data) { |
displaymodule | 0:d6ff5fa503e8 | 60 | //cbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 61 | sbi(_pinDC, _bitmaskDC); |
displaymodule | 0:d6ff5fa503e8 | 62 | writeBus(data); |
displaymodule | 0:d6ff5fa503e8 | 63 | //sbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 64 | } |
displaymodule | 0:d6ff5fa503e8 | 65 | |
displaymodule | 0:d6ff5fa503e8 | 66 | void DmTftIli9341::sendData(uint16_t data) { |
displaymodule | 0:d6ff5fa503e8 | 67 | uint8_t dh = data>>8; |
displaymodule | 0:d6ff5fa503e8 | 68 | uint8_t dl = data&0xff; |
displaymodule | 0:d6ff5fa503e8 | 69 | |
displaymodule | 0:d6ff5fa503e8 | 70 | //cbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 71 | sbi(_pinDC, _bitmaskDC); |
displaymodule | 0:d6ff5fa503e8 | 72 | writeBus(dh); |
displaymodule | 0:d6ff5fa503e8 | 73 | writeBus(dl); |
displaymodule | 0:d6ff5fa503e8 | 74 | //sbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 75 | } |
displaymodule | 0:d6ff5fa503e8 | 76 | |
displaymodule | 0:d6ff5fa503e8 | 77 | void DmTftIli9341::setAddress(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { |
displaymodule | 0:d6ff5fa503e8 | 78 | sendCommand(0x2A); // Set Column |
displaymodule | 0:d6ff5fa503e8 | 79 | sendData(x0); |
displaymodule | 0:d6ff5fa503e8 | 80 | sendData(x1); |
displaymodule | 0:d6ff5fa503e8 | 81 | |
displaymodule | 0:d6ff5fa503e8 | 82 | sendCommand(0x2B); // Set Page |
displaymodule | 0:d6ff5fa503e8 | 83 | sendData(y0); |
displaymodule | 0:d6ff5fa503e8 | 84 | sendData(y1); |
displaymodule | 0:d6ff5fa503e8 | 85 | |
displaymodule | 0:d6ff5fa503e8 | 86 | sendCommand(0x2c); |
displaymodule | 0:d6ff5fa503e8 | 87 | } |
displaymodule | 0:d6ff5fa503e8 | 88 | |
displaymodule | 0:d6ff5fa503e8 | 89 | void DmTftIli9341::init(void) { |
displaymodule | 0:d6ff5fa503e8 | 90 | setTextColor(BLACK, WHITE); |
displaymodule | 0:d6ff5fa503e8 | 91 | #if defined (DM_TOOLCHAIN_ARDUINO) |
displaymodule | 0:d6ff5fa503e8 | 92 | _pinCS = portOutputRegister(digitalPinToPort(_cs)); |
displaymodule | 0:d6ff5fa503e8 | 93 | _bitmaskCS = digitalPinToBitMask(_cs); |
displaymodule | 0:d6ff5fa503e8 | 94 | _pinDC = portOutputRegister(digitalPinToPort(_dc)); |
displaymodule | 0:d6ff5fa503e8 | 95 | _bitmaskDC = digitalPinToBitMask(_dc); |
displaymodule | 0:d6ff5fa503e8 | 96 | pinMode(_cs,OUTPUT); |
displaymodule | 0:d6ff5fa503e8 | 97 | pinMode(_dc,OUTPUT); |
displaymodule | 0:d6ff5fa503e8 | 98 | |
displaymodule | 0:d6ff5fa503e8 | 99 | sbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 100 | |
displaymodule | 0:d6ff5fa503e8 | 101 | SPI.begin(); |
displaymodule | 0:d6ff5fa503e8 | 102 | SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz (full! speed!) |
displaymodule | 0:d6ff5fa503e8 | 103 | SPI.setBitOrder(MSBFIRST); |
displaymodule | 0:d6ff5fa503e8 | 104 | SPI.setDataMode(SPI_MODE0); |
displaymodule | 0:d6ff5fa503e8 | 105 | _spiSettings = SPCR; |
displaymodule | 0:d6ff5fa503e8 | 106 | #elif defined (DM_TOOLCHAIN_MBED) |
displaymodule | 0:d6ff5fa503e8 | 107 | _pinCS = new DigitalOut((PinName)_cs); |
displaymodule | 0:d6ff5fa503e8 | 108 | _pinDC = new DigitalOut((PinName)_dc); |
displaymodule | 0:d6ff5fa503e8 | 109 | sbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 110 | |
displaymodule | 0:d6ff5fa503e8 | 111 | _spi = new SPI((PinName)_mosi, (PinName)_miso, (PinName)_clk); |
displaymodule | 0:d6ff5fa503e8 | 112 | _spi->format(8,0); |
displaymodule | 0:d6ff5fa503e8 | 113 | _spi->frequency(8000000); // Max SPI speed for display is 10 and for 17 for LPC15xx |
displaymodule | 0:d6ff5fa503e8 | 114 | #endif |
displaymodule | 0:d6ff5fa503e8 | 115 | cbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 116 | delay(135); // This much delay needed?? |
displaymodule | 0:d6ff5fa503e8 | 117 | |
displaymodule | 0:d6ff5fa503e8 | 118 | // ILI9341 init |
displaymodule | 0:d6ff5fa503e8 | 119 | sendCommand(0x11); |
displaymodule | 0:d6ff5fa503e8 | 120 | delay(120); |
displaymodule | 0:d6ff5fa503e8 | 121 | |
displaymodule | 0:d6ff5fa503e8 | 122 | sendCommand(0xCF); |
displaymodule | 0:d6ff5fa503e8 | 123 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 124 | send8BitData(0xc3); |
displaymodule | 0:d6ff5fa503e8 | 125 | send8BitData(0X30); |
displaymodule | 0:d6ff5fa503e8 | 126 | |
displaymodule | 0:d6ff5fa503e8 | 127 | sendCommand(0xED); |
displaymodule | 0:d6ff5fa503e8 | 128 | send8BitData(0x64); |
displaymodule | 0:d6ff5fa503e8 | 129 | send8BitData(0x03); |
displaymodule | 0:d6ff5fa503e8 | 130 | send8BitData(0X12); |
displaymodule | 0:d6ff5fa503e8 | 131 | send8BitData(0X81); |
displaymodule | 0:d6ff5fa503e8 | 132 | |
displaymodule | 0:d6ff5fa503e8 | 133 | sendCommand(0xE8); |
displaymodule | 0:d6ff5fa503e8 | 134 | send8BitData(0x85); |
displaymodule | 0:d6ff5fa503e8 | 135 | send8BitData(0x10); |
displaymodule | 0:d6ff5fa503e8 | 136 | send8BitData(0x79); |
displaymodule | 0:d6ff5fa503e8 | 137 | |
displaymodule | 0:d6ff5fa503e8 | 138 | sendCommand(0xCB); |
displaymodule | 0:d6ff5fa503e8 | 139 | send8BitData(0x39); |
displaymodule | 0:d6ff5fa503e8 | 140 | send8BitData(0x2C); |
displaymodule | 0:d6ff5fa503e8 | 141 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 142 | send8BitData(0x34); |
displaymodule | 0:d6ff5fa503e8 | 143 | send8BitData(0x02); |
displaymodule | 0:d6ff5fa503e8 | 144 | |
displaymodule | 0:d6ff5fa503e8 | 145 | sendCommand(0xF7); |
displaymodule | 0:d6ff5fa503e8 | 146 | send8BitData(0x20); |
displaymodule | 0:d6ff5fa503e8 | 147 | |
displaymodule | 0:d6ff5fa503e8 | 148 | sendCommand(0xEA); |
displaymodule | 0:d6ff5fa503e8 | 149 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 150 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 151 | |
displaymodule | 0:d6ff5fa503e8 | 152 | sendCommand(0xC0); //Power control |
displaymodule | 0:d6ff5fa503e8 | 153 | send8BitData(0x22); //VRH[5:0] |
displaymodule | 0:d6ff5fa503e8 | 154 | |
displaymodule | 0:d6ff5fa503e8 | 155 | sendCommand(0xC1); //Power control |
displaymodule | 0:d6ff5fa503e8 | 156 | send8BitData(0x11); //SAP[2:0];BT[3:0] |
displaymodule | 0:d6ff5fa503e8 | 157 | |
displaymodule | 0:d6ff5fa503e8 | 158 | sendCommand(0xC5); //VCM control |
displaymodule | 0:d6ff5fa503e8 | 159 | send8BitData(0x3d); |
displaymodule | 0:d6ff5fa503e8 | 160 | send8BitData(0x20); |
displaymodule | 0:d6ff5fa503e8 | 161 | |
displaymodule | 0:d6ff5fa503e8 | 162 | sendCommand(0xC7); //VCM control2 |
displaymodule | 0:d6ff5fa503e8 | 163 | send8BitData(0xAA); //0xB0 |
displaymodule | 0:d6ff5fa503e8 | 164 | |
displaymodule | 0:d6ff5fa503e8 | 165 | sendCommand(0x36); // Memory Access Control |
displaymodule | 0:d6ff5fa503e8 | 166 | send8BitData(0x08); |
displaymodule | 0:d6ff5fa503e8 | 167 | |
displaymodule | 0:d6ff5fa503e8 | 168 | sendCommand(0x3A); |
displaymodule | 0:d6ff5fa503e8 | 169 | send8BitData(0x55); |
displaymodule | 0:d6ff5fa503e8 | 170 | |
displaymodule | 0:d6ff5fa503e8 | 171 | sendCommand(0xB1); |
displaymodule | 0:d6ff5fa503e8 | 172 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 173 | send8BitData(0x13); |
displaymodule | 0:d6ff5fa503e8 | 174 | |
displaymodule | 0:d6ff5fa503e8 | 175 | sendCommand(0xB6); // Display Function Control |
displaymodule | 0:d6ff5fa503e8 | 176 | send8BitData(0x0A); |
displaymodule | 0:d6ff5fa503e8 | 177 | send8BitData(0xA2); |
displaymodule | 0:d6ff5fa503e8 | 178 | |
displaymodule | 0:d6ff5fa503e8 | 179 | sendCommand(0xF6); |
displaymodule | 0:d6ff5fa503e8 | 180 | send8BitData(0x01); |
displaymodule | 0:d6ff5fa503e8 | 181 | send8BitData(0x30); |
displaymodule | 0:d6ff5fa503e8 | 182 | |
displaymodule | 0:d6ff5fa503e8 | 183 | sendCommand(0xF2); // 3Gamma Function Disable |
displaymodule | 0:d6ff5fa503e8 | 184 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 185 | |
displaymodule | 0:d6ff5fa503e8 | 186 | sendCommand(0x26); //Gamma curve selected |
displaymodule | 0:d6ff5fa503e8 | 187 | send8BitData(0x01); |
displaymodule | 0:d6ff5fa503e8 | 188 | |
displaymodule | 0:d6ff5fa503e8 | 189 | sendCommand(0xE0); //Set Gamma |
displaymodule | 0:d6ff5fa503e8 | 190 | send8BitData(0x0F); |
displaymodule | 0:d6ff5fa503e8 | 191 | send8BitData(0x3F); |
displaymodule | 0:d6ff5fa503e8 | 192 | send8BitData(0x2F); |
displaymodule | 0:d6ff5fa503e8 | 193 | send8BitData(0x0C); |
displaymodule | 0:d6ff5fa503e8 | 194 | send8BitData(0x10); |
displaymodule | 0:d6ff5fa503e8 | 195 | send8BitData(0x0A); |
displaymodule | 0:d6ff5fa503e8 | 196 | send8BitData(0x53); |
displaymodule | 0:d6ff5fa503e8 | 197 | send8BitData(0XD5); |
displaymodule | 0:d6ff5fa503e8 | 198 | send8BitData(0x40); |
displaymodule | 0:d6ff5fa503e8 | 199 | send8BitData(0x0A); |
displaymodule | 0:d6ff5fa503e8 | 200 | send8BitData(0x13); |
displaymodule | 0:d6ff5fa503e8 | 201 | send8BitData(0x03); |
displaymodule | 0:d6ff5fa503e8 | 202 | send8BitData(0x08); |
displaymodule | 0:d6ff5fa503e8 | 203 | send8BitData(0x03); |
displaymodule | 0:d6ff5fa503e8 | 204 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 205 | |
displaymodule | 0:d6ff5fa503e8 | 206 | sendCommand(0XE1); //Set Gamma |
displaymodule | 0:d6ff5fa503e8 | 207 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 208 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 209 | |
displaymodule | 0:d6ff5fa503e8 | 210 | send8BitData(0x10); |
displaymodule | 0:d6ff5fa503e8 | 211 | send8BitData(0x03); |
displaymodule | 0:d6ff5fa503e8 | 212 | send8BitData(0x0F); |
displaymodule | 0:d6ff5fa503e8 | 213 | send8BitData(0x05); |
displaymodule | 0:d6ff5fa503e8 | 214 | send8BitData(0x2C); |
displaymodule | 0:d6ff5fa503e8 | 215 | send8BitData(0xA2); |
displaymodule | 0:d6ff5fa503e8 | 216 | send8BitData(0x3F); |
displaymodule | 0:d6ff5fa503e8 | 217 | send8BitData(0x05); |
displaymodule | 0:d6ff5fa503e8 | 218 | send8BitData(0x0E); |
displaymodule | 0:d6ff5fa503e8 | 219 | send8BitData(0x0C); |
displaymodule | 0:d6ff5fa503e8 | 220 | send8BitData(0x37); |
displaymodule | 0:d6ff5fa503e8 | 221 | send8BitData(0x3C); |
displaymodule | 0:d6ff5fa503e8 | 222 | send8BitData(0x0F); |
displaymodule | 0:d6ff5fa503e8 | 223 | |
displaymodule | 0:d6ff5fa503e8 | 224 | sendCommand(0x11); //Exit Sleep |
displaymodule | 0:d6ff5fa503e8 | 225 | delay(120); |
displaymodule | 0:d6ff5fa503e8 | 226 | sendCommand(0x29); //Display on |
displaymodule | 0:d6ff5fa503e8 | 227 | delay(50); |
displaymodule | 0:d6ff5fa503e8 | 228 | sbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 229 | clearScreen(); |
displaymodule | 0:d6ff5fa503e8 | 230 | } |
displaymodule | 0:d6ff5fa503e8 | 231 | |
displaymodule | 0:d6ff5fa503e8 | 232 | /********************************************************************************************************* |
displaymodule | 0:d6ff5fa503e8 | 233 | END FILE |
displaymodule | 0:d6ff5fa503e8 | 234 | *********************************************************************************************************/ |
displaymodule | 0:d6ff5fa503e8 | 235 | |
displaymodule | 0:d6ff5fa503e8 | 236 |