Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

Dependents:   AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example

Committer:
k4zuki
Date:
Mon Sep 29 02:23:41 2014 +0000
Revision:
12:30b31d87a30e
Parent:
11:16647ecd67ce
Child:
14:812873f3a933
added cls_ram( int screen )

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