Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

Dependents:   AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example

Committer:
k4zuki
Date:
Fri Sep 26 13:48:17 2014 +0000
Revision:
11:16647ecd67ce
Parent:
10:eed99ef09e63
Child:
12:30b31d87a30e
ram2lcd fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 1:57de84d2025c 1 /** this is for SHARP LCD LS027B4DH01
k4zuki 2:01979b296ab5 2 * by Kazuki Yamamoto, or _K4ZUKI_
k4zuki 0:b3c8fdd01601 3 */
k4zuki 0:b3c8fdd01601 4
k4zuki 0:b3c8fdd01601 5 #include "mbed.h"
k4zuki 0:b3c8fdd01601 6 #include "AkiSpiLcd.h"
k4zuki 10:eed99ef09e63 7 //#include "Ser23K256.h"
k4zuki 11:16647ecd67ce 8 extern const uint8_t lcd_line[];
k4zuki 0:b3c8fdd01601 9
k4zuki 4:844693a617dc 10 AkiSpiLcd::AkiSpiLcd(PinName mosi, PinName miso, PinName sck, PinName csl, PinName csr)
k4zuki 4:844693a617dc 11 :_spi(mosi, miso, sck), _csl(csl), _csr(csr)
k4zuki 0:b3c8fdd01601 12 {
k4zuki 9:33d5888d1fb9 13 // Ser23K256 _ram(_spi,csr);
k4zuki 3:f835b8daf9a0 14 _csl=0;
k4zuki 4:844693a617dc 15 _csr=1;
k4zuki 0:b3c8fdd01601 16 _spi.format(8,0);
k4zuki 10:eed99ef09e63 17 _spi.frequency(10000000);
k4zuki 0:b3c8fdd01601 18 comflag = modeflag = clearflag = 0;
k4zuki 10:eed99ef09e63 19
k4zuki 10:eed99ef09e63 20 uint8_t data[240];
k4zuki 9:33d5888d1fb9 21 for(int i=0; i<240; i++) {
k4zuki 11:16647ecd67ce 22 data[i]=(uint8_t)lcd_line[i];
k4zuki 11:16647ecd67ce 23 /*( ( (i+1) & 0x01 ) << 7 )|
k4zuki 10:eed99ef09e63 24 ( ( (i+1) & 0x02 ) << 5 )|
k4zuki 10:eed99ef09e63 25 ( ( (i+1) & 0x04 ) << 3 )|
k4zuki 10:eed99ef09e63 26 ( ( (i+1) & 0x08 ) << 1 )|
k4zuki 10:eed99ef09e63 27 ( ( (i+1) & 0x10 ) >> 1 )|
k4zuki 10:eed99ef09e63 28 ( ( (i+1) & 0x20 ) >> 3 )|
k4zuki 10:eed99ef09e63 29 ( ( (i+1) & 0x40 ) >> 5 )|
k4zuki 10:eed99ef09e63 30 ( ( (i+1) & 0x80 ) >> 7 );
k4zuki 11:16647ecd67ce 31 */
k4zuki 4:844693a617dc 32 }
k4zuki 10:eed99ef09e63 33 ram_write(RAMLINE_BASE,data,240);
k4zuki 10:eed99ef09e63 34 uint8_t buffer[4] = {0,0,0,0};
k4zuki 10:eed99ef09e63 35 ram_write(RAMMODE_BASE,buffer,4);
k4zuki 5:7061ce47a359 36
k4zuki 0:b3c8fdd01601 37 }
k4zuki 0:b3c8fdd01601 38
k4zuki 0:b3c8fdd01601 39 void AkiSpiLcd::cls()
k4zuki 0:b3c8fdd01601 40 {
k4zuki 0:b3c8fdd01601 41 modeflag=0;
k4zuki 0:b3c8fdd01601 42 clearflag=1;
k4zuki 0:b3c8fdd01601 43
k4zuki 3:f835b8daf9a0 44 _csl=1;
k4zuki 0:b3c8fdd01601 45 wait_us(5);
k4zuki 0:b3c8fdd01601 46
k4zuki 0:b3c8fdd01601 47 _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) );
k4zuki 0:b3c8fdd01601 48 _spi.write(0x00);
k4zuki 0:b3c8fdd01601 49
k4zuki 0:b3c8fdd01601 50 wait_us(5);
k4zuki 3:f835b8daf9a0 51 _csl=0;
k4zuki 0:b3c8fdd01601 52
k4zuki 0:b3c8fdd01601 53 if(comflag == 0) {
k4zuki 0:b3c8fdd01601 54 comflag = 1;
k4zuki 0:b3c8fdd01601 55 } else {
k4zuki 0:b3c8fdd01601 56 comflag = 0;
k4zuki 0:b3c8fdd01601 57 }
k4zuki 0:b3c8fdd01601 58 }
k4zuki 0:b3c8fdd01601 59
k4zuki 3:f835b8daf9a0 60 void AkiSpiLcd::directUpdateSingle(int line, uint8_t* data)
k4zuki 0:b3c8fdd01601 61 {
k4zuki 0:b3c8fdd01601 62 modeflag=1;
k4zuki 0:b3c8fdd01601 63 clearflag=0;
k4zuki 0:b3c8fdd01601 64
k4zuki 3:f835b8daf9a0 65 _csl=1;
k4zuki 11:16647ecd67ce 66 wait_us(1);
k4zuki 0:b3c8fdd01601 67
k4zuki 0:b3c8fdd01601 68 _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) );
k4zuki 11:16647ecd67ce 69 _spi.write((uint8_t)lcd_line[line]);
k4zuki 11:16647ecd67ce 70 /*
k4zuki 0:b3c8fdd01601 71 _spi.write(
k4zuki 0:b3c8fdd01601 72 ( ( (line+1) & 0x01 ) << 7 )|
k4zuki 0:b3c8fdd01601 73 ( ( (line+1) & 0x02 ) << 5 )|
k4zuki 0:b3c8fdd01601 74 ( ( (line+1) & 0x04 ) << 3 )|
k4zuki 0:b3c8fdd01601 75 ( ( (line+1) & 0x08 ) << 1 )|
k4zuki 0:b3c8fdd01601 76 ( ( (line+1) & 0x10 ) >> 1 )|
k4zuki 0:b3c8fdd01601 77 ( ( (line+1) & 0x20 ) >> 3 )|
k4zuki 0:b3c8fdd01601 78 ( ( (line+1) & 0x40 ) >> 5 )|
k4zuki 0:b3c8fdd01601 79 ( ( (line+1) & 0x80 ) >> 7 )
k4zuki 11:16647ecd67ce 80 );*/
k4zuki 11:16647ecd67ce 81
k4zuki 0:b3c8fdd01601 82 for(int i=0; i<50; i++) {
k4zuki 0:b3c8fdd01601 83 _spi.write( *(data+i) );
k4zuki 0:b3c8fdd01601 84 }
k4zuki 0:b3c8fdd01601 85 _spi.write(0x00);
k4zuki 0:b3c8fdd01601 86 _spi.write(0x00);
k4zuki 0:b3c8fdd01601 87
k4zuki 0:b3c8fdd01601 88 wait_us(5);
k4zuki 3:f835b8daf9a0 89 _csl=0;
k4zuki 0:b3c8fdd01601 90
k4zuki 0:b3c8fdd01601 91 if(comflag == 0) {
k4zuki 0:b3c8fdd01601 92 comflag = 1;
k4zuki 0:b3c8fdd01601 93 } else {
k4zuki 0:b3c8fdd01601 94 comflag = 0;
k4zuki 0:b3c8fdd01601 95 }
k4zuki 0:b3c8fdd01601 96 }
k4zuki 0:b3c8fdd01601 97
k4zuki 3:f835b8daf9a0 98 void AkiSpiLcd::directUpdateMulti(int line, int length, uint8_t* data)
k4zuki 0:b3c8fdd01601 99 {
k4zuki 0:b3c8fdd01601 100 modeflag=1;
k4zuki 0:b3c8fdd01601 101 clearflag=0;
k4zuki 0:b3c8fdd01601 102
k4zuki 0:b3c8fdd01601 103 if(length>0) {
k4zuki 3:f835b8daf9a0 104 _csl=1;
k4zuki 0:b3c8fdd01601 105 wait_us(5);
k4zuki 0:b3c8fdd01601 106 for (int j=0; j<length; j++) {
k4zuki 0:b3c8fdd01601 107 _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) );
k4zuki 11:16647ecd67ce 108 _spi.write((uint8_t)lcd_line[line]);
k4zuki 11:16647ecd67ce 109 /* _spi.write(
k4zuki 10:eed99ef09e63 110 ( ( (line+1) & 0x01 ) << 7 )|
k4zuki 10:eed99ef09e63 111 ( ( (line+1) & 0x02 ) << 5 )|
k4zuki 10:eed99ef09e63 112 ( ( (line+1) & 0x04 ) << 3 )|
k4zuki 10:eed99ef09e63 113 ( ( (line+1) & 0x08 ) << 1 )|
k4zuki 10:eed99ef09e63 114 ( ( (line+1) & 0x10 ) >> 1 )|
k4zuki 10:eed99ef09e63 115 ( ( (line+1) & 0x20 ) >> 3 )|
k4zuki 10:eed99ef09e63 116 ( ( (line+1) & 0x40 ) >> 5 )|
k4zuki 10:eed99ef09e63 117 ( ( (line+1) & 0x80 ) >> 7 )
k4zuki 0:b3c8fdd01601 118 );
k4zuki 11:16647ecd67ce 119 */
k4zuki 0:b3c8fdd01601 120 for(int i=0; i<50; i++) {
k4zuki 0:b3c8fdd01601 121 _spi.write( *(data+(50*j+i)) );//hogepic[50*j+i]
k4zuki 0:b3c8fdd01601 122 }
k4zuki 0:b3c8fdd01601 123 line+=1;
k4zuki 0:b3c8fdd01601 124 }
k4zuki 0:b3c8fdd01601 125 _spi.write(0x00);
k4zuki 0:b3c8fdd01601 126 _spi.write(0x00);
k4zuki 0:b3c8fdd01601 127 wait_us(5);
k4zuki 3:f835b8daf9a0 128 _csl=0;
k4zuki 0:b3c8fdd01601 129 }
k4zuki 0:b3c8fdd01601 130 if(comflag == 0) {
k4zuki 0:b3c8fdd01601 131 comflag = 1;
k4zuki 0:b3c8fdd01601 132 } else {
k4zuki 0:b3c8fdd01601 133 comflag = 0;
k4zuki 0:b3c8fdd01601 134 }
k4zuki 0:b3c8fdd01601 135 }
k4zuki 0:b3c8fdd01601 136
k4zuki 0:b3c8fdd01601 137 void AkiSpiLcd::cominvert()
k4zuki 0:b3c8fdd01601 138 {
k4zuki 0:b3c8fdd01601 139 modeflag=0;
k4zuki 0:b3c8fdd01601 140 clearflag=0;
k4zuki 0:b3c8fdd01601 141
k4zuki 3:f835b8daf9a0 142 _csl=1;
k4zuki 0:b3c8fdd01601 143
k4zuki 0:b3c8fdd01601 144 _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) );
k4zuki 0:b3c8fdd01601 145 _spi.write(0x00);
k4zuki 0:b3c8fdd01601 146 wait_us(5);
k4zuki 3:f835b8daf9a0 147 _csl=0;
k4zuki 0:b3c8fdd01601 148 if(comflag == 0) {
k4zuki 0:b3c8fdd01601 149 comflag = 1;
k4zuki 0:b3c8fdd01601 150 } else {
k4zuki 0:b3c8fdd01601 151 comflag = 0;
k4zuki 0:b3c8fdd01601 152 }
k4zuki 0:b3c8fdd01601 153 }
k4zuki 3:f835b8daf9a0 154 /*
k4zuki 0:b3c8fdd01601 155 void AkiSpiLcd::dispOn(bool disp)
k4zuki 0:b3c8fdd01601 156 {
k4zuki 0:b3c8fdd01601 157 if(disp) {
k4zuki 3:f835b8daf9a0 158 _csr=1;
k4zuki 0:b3c8fdd01601 159 } else {
k4zuki 3:f835b8daf9a0 160 _csr=0;
k4zuki 0:b3c8fdd01601 161 }
k4zuki 0:b3c8fdd01601 162 }
k4zuki 3:f835b8daf9a0 163 */
k4zuki 4:844693a617dc 164
k4zuki 9:33d5888d1fb9 165 /** Reads single line (400 bits = 50 bytes) from a screen
k4zuki 9:33d5888d1fb9 166 */
k4zuki 9:33d5888d1fb9 167 void AkiSpiLcd::ramReadSingle(int line, uint8_t* buffer, int screen)
k4zuki 9:33d5888d1fb9 168 {
k4zuki 4:844693a617dc 169 screen &=1;
k4zuki 9:33d5888d1fb9 170 if(screen==SCREEN0) {
k4zuki 7:0c85f23a6568 171 screen=SCREEN0_BASE;
k4zuki 9:33d5888d1fb9 172 } else {
k4zuki 7:0c85f23a6568 173 screen=SCREEN1_BASE;
k4zuki 7:0c85f23a6568 174 }
k4zuki 4:844693a617dc 175 // uint8_t buffer[50];
k4zuki 4:844693a617dc 176 line*=50;
k4zuki 4:844693a617dc 177 int address=screen+line;
k4zuki 9:33d5888d1fb9 178 ram_read(address,buffer,50);
k4zuki 5:7061ce47a359 179 /*
k4zuki 4:844693a617dc 180 _csr=0; //select VRAM
k4zuki 4:844693a617dc 181 _spi.write(0x03);
k4zuki 4:844693a617dc 182 _spi.write(address>>8);
k4zuki 4:844693a617dc 183 _spi.write(address&0xff);
k4zuki 4:844693a617dc 184 for(int i=0;i<50;i++){
k4zuki 4:844693a617dc 185 *(buffer+i)=_spi.write(0xaa);
k4zuki 4:844693a617dc 186 }
k4zuki 4:844693a617dc 187 _csr=1;
k4zuki 5:7061ce47a359 188 */
k4zuki 4:844693a617dc 189 // return buffer;
k4zuki 4:844693a617dc 190 }
k4zuki 4:844693a617dc 191
k4zuki 9:33d5888d1fb9 192 /** Reads multi lines(400 x N bits = 50 x N bytes) from a screen
k4zuki 9:33d5888d1fb9 193 */
k4zuki 9:33d5888d1fb9 194 void AkiSpiLcd::ramReadMulti(int line, int length, uint8_t* buffer, int screen)
k4zuki 9:33d5888d1fb9 195 {
k4zuki 4:844693a617dc 196 screen &=1;
k4zuki 9:33d5888d1fb9 197 if(screen==SCREEN0) {
k4zuki 7:0c85f23a6568 198 screen=SCREEN0_BASE;
k4zuki 9:33d5888d1fb9 199 } else {
k4zuki 7:0c85f23a6568 200 screen=SCREEN1_BASE;
k4zuki 7:0c85f23a6568 201 }
k4zuki 4:844693a617dc 202 line*=50;
k4zuki 4:844693a617dc 203 int address=screen+line;
k4zuki 5:7061ce47a359 204 // for(int j=0;j<length;j++){
k4zuki 9:33d5888d1fb9 205 ram_read(address,buffer,50*length);
k4zuki 5:7061ce47a359 206 // }
k4zuki 5:7061ce47a359 207 /*
k4zuki 4:844693a617dc 208 _csr=0; //select VRAM
k4zuki 4:844693a617dc 209 _spi.write(0x03);
k4zuki 4:844693a617dc 210 _spi.write(address>>8);
k4zuki 4:844693a617dc 211 _spi.write(address&0xff);
k4zuki 4:844693a617dc 212 for(int j=0;j<length;j++){
k4zuki 4:844693a617dc 213 for(int i=0;i<50;i++){
k4zuki 4:844693a617dc 214 *(buffer+i)=_spi.write(0xaa);
k4zuki 4:844693a617dc 215 }
k4zuki 4:844693a617dc 216 }
k4zuki 4:844693a617dc 217 _csr=1;
k4zuki 5:7061ce47a359 218 */
k4zuki 4:844693a617dc 219 // return buffer;
k4zuki 4:844693a617dc 220 }
k4zuki 9:33d5888d1fb9 221
k4zuki 9:33d5888d1fb9 222 /** Writes single line (400 bits = 50 bytes) into a screen
k4zuki 9:33d5888d1fb9 223 */
k4zuki 9:33d5888d1fb9 224 void AkiSpiLcd::ramWriteSingle(int line, uint8_t* data, int screen)
k4zuki 9:33d5888d1fb9 225 {
k4zuki 4:844693a617dc 226 screen &=1;
k4zuki 9:33d5888d1fb9 227 if(screen==SCREEN0) {
k4zuki 7:0c85f23a6568 228 screen=SCREEN0_BASE;
k4zuki 9:33d5888d1fb9 229 } else {
k4zuki 7:0c85f23a6568 230 screen=SCREEN1_BASE;
k4zuki 7:0c85f23a6568 231 }
k4zuki 4:844693a617dc 232 line*=50;
k4zuki 4:844693a617dc 233 int address=screen+line;
k4zuki 9:33d5888d1fb9 234 ram_write(address,data,50);
k4zuki 9:33d5888d1fb9 235
k4zuki 4:844693a617dc 236 _csr=0; //select VRAM
k4zuki 4:844693a617dc 237 _spi.write(0x02);
k4zuki 4:844693a617dc 238 _spi.write(address>>8);
k4zuki 4:844693a617dc 239 _spi.write(address&0xff);
k4zuki 9:33d5888d1fb9 240 for(int i=0; i<50; i++) {
k4zuki 4:844693a617dc 241 _spi.write(*(data+i));
k4zuki 4:844693a617dc 242 }
k4zuki 4:844693a617dc 243 _csr=1;
k4zuki 4:844693a617dc 244 }
k4zuki 4:844693a617dc 245
k4zuki 9:33d5888d1fb9 246 /** Writes multi lines(400 x N bits = 50 x N bytes) into a screen
k4zuki 9:33d5888d1fb9 247 */
k4zuki 9:33d5888d1fb9 248 void AkiSpiLcd::ramWriteMulti(int line, int length, uint8_t* data, int screen)
k4zuki 9:33d5888d1fb9 249 {
k4zuki 4:844693a617dc 250 screen &=1;
k4zuki 9:33d5888d1fb9 251 if(screen==SCREEN0) {
k4zuki 7:0c85f23a6568 252 screen=SCREEN0_BASE;
k4zuki 9:33d5888d1fb9 253 } else {
k4zuki 7:0c85f23a6568 254 screen=SCREEN1_BASE;
k4zuki 7:0c85f23a6568 255 }
k4zuki 4:844693a617dc 256 line*=50;
k4zuki 9:33d5888d1fb9 257
k4zuki 4:844693a617dc 258 int address=screen+line;
k4zuki 9:33d5888d1fb9 259 ram_write(address,data,50*length);
k4zuki 5:7061ce47a359 260 /*
k4zuki 4:844693a617dc 261 _csr=0; //select VRAM
k4zuki 4:844693a617dc 262 _spi.write(0x02);
k4zuki 4:844693a617dc 263 _spi.write(address>>8);
k4zuki 4:844693a617dc 264 _spi.write(address&0xff);
k4zuki 4:844693a617dc 265 for(int j=0;j<length;j++){
k4zuki 4:844693a617dc 266 for(int i=0;i<50;i++){
k4zuki 4:844693a617dc 267 _spi.write(*(data+j*50+i));
k4zuki 4:844693a617dc 268 }
k4zuki 4:844693a617dc 269 }
k4zuki 4:844693a617dc 270 _csr=1;
k4zuki 5:7061ce47a359 271 */
k4zuki 4:844693a617dc 272 }
k4zuki 4:844693a617dc 273
k4zuki 9:33d5888d1fb9 274 /** copies whole data in screen into LCD
k4zuki 9:33d5888d1fb9 275 */
k4zuki 9:33d5888d1fb9 276 void AkiSpiLcd::ram2lcd(int startline, int length, int screen)
k4zuki 9:33d5888d1fb9 277 {
k4zuki 4:844693a617dc 278 screen &=1;
k4zuki 9:33d5888d1fb9 279 if(screen==SCREEN0) {
k4zuki 7:0c85f23a6568 280 screen=SCREEN0_BASE;
k4zuki 9:33d5888d1fb9 281 } else {
k4zuki 7:0c85f23a6568 282 screen=SCREEN1_BASE;
k4zuki 7:0c85f23a6568 283 }
k4zuki 7:0c85f23a6568 284 // screen<<=7;
k4zuki 4:844693a617dc 285
k4zuki 7:0c85f23a6568 286 int address=screen+length*50;
k4zuki 7:0c85f23a6568 287 uint8_t dummy[50];
k4zuki 5:7061ce47a359 288 /*
k4zuki 4:844693a617dc 289 _csr=0; //select VRAM
k4zuki 4:844693a617dc 290 _spi.write(0x03);
k4zuki 4:844693a617dc 291 _spi.write(address>>8);
k4zuki 4:844693a617dc 292 _spi.write(address&0xff);
k4zuki 5:7061ce47a359 293 */
k4zuki 9:33d5888d1fb9 294 ram_write(RAMMODE_BASE,(modeflag << 7) | (comflag << 6) | (clearflag << 5));
k4zuki 9:33d5888d1fb9 295 _csl=1;
k4zuki 9:33d5888d1fb9 296 for(int j=0; j<length; j++) {
k4zuki 9:33d5888d1fb9 297 ram_read(RAMMODE_BASE);
k4zuki 9:33d5888d1fb9 298 ram_read(RAMLINE_BASE+startline);
k4zuki 9:33d5888d1fb9 299 ram_read(address+50*j,dummy,50);
k4zuki 9:33d5888d1fb9 300 ram_read(RAMMODE_BASE+2,dummy,2);
k4zuki 5:7061ce47a359 301 wait_us(5);
k4zuki 5:7061ce47a359 302 _csl=0;
k4zuki 5:7061ce47a359 303 if(comflag == 0) {
k4zuki 5:7061ce47a359 304 comflag = 1;
k4zuki 5:7061ce47a359 305 } else {
k4zuki 5:7061ce47a359 306 comflag = 0;
k4zuki 4:844693a617dc 307 }
k4zuki 4:844693a617dc 308 }
k4zuki 4:844693a617dc 309 _csl=0;
k4zuki 4:844693a617dc 310 }
k4zuki 9:33d5888d1fb9 311
k4zuki 9:33d5888d1fb9 312 uint8_t AkiSpiLcd::ram_read(int address)
k4zuki 9:33d5888d1fb9 313 {
k4zuki 9:33d5888d1fb9 314 ram_prepareCommand(READ, address);
k4zuki 9:33d5888d1fb9 315 int result = _spi.write(0);
k4zuki 9:33d5888d1fb9 316 ram_deselect();
k4zuki 9:33d5888d1fb9 317 return (uint8_t) result;
k4zuki 9:33d5888d1fb9 318 }
k4zuki 9:33d5888d1fb9 319
k4zuki 9:33d5888d1fb9 320 void AkiSpiLcd::ram_read(int address, uint8_t * buffer, int count)
k4zuki 9:33d5888d1fb9 321 {
k4zuki 9:33d5888d1fb9 322 ram_writeStatus(SEQUENTIAL_MODE);
k4zuki 9:33d5888d1fb9 323 ram_prepareCommand(READ, address);
k4zuki 9:33d5888d1fb9 324 for (int i = 0; i < count; i++) {
k4zuki 9:33d5888d1fb9 325 buffer[i] = _spi.write(0);
k4zuki 9:33d5888d1fb9 326 }
k4zuki 9:33d5888d1fb9 327 ram_deselect();
k4zuki 9:33d5888d1fb9 328 ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 329 }
k4zuki 9:33d5888d1fb9 330
k4zuki 9:33d5888d1fb9 331 void AkiSpiLcd::ram_write(int address, uint8_t byte)
k4zuki 9:33d5888d1fb9 332 {
k4zuki 9:33d5888d1fb9 333 ram_prepareCommand(WRITE, address);
k4zuki 9:33d5888d1fb9 334 _spi.write(byte);
k4zuki 9:33d5888d1fb9 335 ram_deselect();
k4zuki 9:33d5888d1fb9 336 }
k4zuki 9:33d5888d1fb9 337
k4zuki 9:33d5888d1fb9 338 void AkiSpiLcd::ram_write(int address, uint8_t * buffer, int count)
k4zuki 9:33d5888d1fb9 339 {
k4zuki 9:33d5888d1fb9 340 ram_writeStatus(SEQUENTIAL_MODE);
k4zuki 9:33d5888d1fb9 341 ram_prepareCommand(WRITE, address);
k4zuki 9:33d5888d1fb9 342 for (int i = 0; i < count; i++) {
k4zuki 9:33d5888d1fb9 343 _spi.write(buffer[i]);
k4zuki 9:33d5888d1fb9 344 }
k4zuki 9:33d5888d1fb9 345 ram_deselect();
k4zuki 9:33d5888d1fb9 346 ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 347 }
k4zuki 9:33d5888d1fb9 348
k4zuki 9:33d5888d1fb9 349 uint8_t AkiSpiLcd::ram_readStatus()
k4zuki 9:33d5888d1fb9 350 {
k4zuki 9:33d5888d1fb9 351 ram_select();
k4zuki 9:33d5888d1fb9 352 _spi.write(READ_STATUS);
k4zuki 9:33d5888d1fb9 353 uint8_t result = (uint8_t) _spi.write(0);
k4zuki 9:33d5888d1fb9 354 ram_deselect();
k4zuki 9:33d5888d1fb9 355 return result;
k4zuki 9:33d5888d1fb9 356 }
k4zuki 9:33d5888d1fb9 357
k4zuki 9:33d5888d1fb9 358 void AkiSpiLcd::ram_writeStatus(uint8_t status)
k4zuki 9:33d5888d1fb9 359 {
k4zuki 9:33d5888d1fb9 360 ram_select();
k4zuki 9:33d5888d1fb9 361 _spi.write(WRITE_STATUS);
k4zuki 9:33d5888d1fb9 362 _spi.write(status);
k4zuki 9:33d5888d1fb9 363 ram_deselect();
k4zuki 9:33d5888d1fb9 364 }
k4zuki 9:33d5888d1fb9 365
k4zuki 9:33d5888d1fb9 366 void AkiSpiLcd::ram_prepareCommand(uint8_t command, int address)
k4zuki 9:33d5888d1fb9 367 {
k4zuki 9:33d5888d1fb9 368 ram_select();
k4zuki 9:33d5888d1fb9 369 _spi.write(command);
k4zuki 9:33d5888d1fb9 370 _spi.write(address >> 8);
k4zuki 9:33d5888d1fb9 371 _spi.write(address & 0xFF);
k4zuki 9:33d5888d1fb9 372 }
k4zuki 9:33d5888d1fb9 373
k4zuki 9:33d5888d1fb9 374 void AkiSpiLcd::ram_select()
k4zuki 9:33d5888d1fb9 375 {
k4zuki 9:33d5888d1fb9 376 _csr=0;
k4zuki 9:33d5888d1fb9 377 }
k4zuki 9:33d5888d1fb9 378
k4zuki 9:33d5888d1fb9 379 void AkiSpiLcd::ram_deselect()
k4zuki 9:33d5888d1fb9 380 {
k4zuki 9:33d5888d1fb9 381 _csr=1;
k4zuki 9:33d5888d1fb9 382 }