diff options
author | trsaunders <trsaunders@gmail.com> | 2012-06-27 17:51:08 +0100 |
---|---|---|
committer | trsaunders <trsaunders@gmail.com> | 2012-06-27 17:51:08 +0100 |
commit | bdcbdd4c38b492bba01789ea44d971950ade5864 (patch) | |
tree | 862504754595d326c7204df8e2a1235c94204c74 /drivers/lcd | |
parent | 8a6337b4e746c3d9f42061b26aa2e17370b7db37 (diff) | |
parent | 3a5be9c67812c2ef16f335078f2ec8e8773d2144 (diff) | |
download | uGFX-bdcbdd4c38b492bba01789ea44d971950ade5864.tar.gz uGFX-bdcbdd4c38b492bba01789ea44d971950ade5864.tar.bz2 uGFX-bdcbdd4c38b492bba01789ea44d971950ade5864.zip |
merge upstream changes
Diffstat (limited to 'drivers/lcd')
-rw-r--r-- | drivers/lcd/ssd1289_lld.c | 134 | ||||
-rw-r--r-- | drivers/lcd/ssd1289_lld.h | 251 |
2 files changed, 202 insertions, 183 deletions
diff --git a/drivers/lcd/ssd1289_lld.c b/drivers/lcd/ssd1289_lld.c index 831f0eda..5a14d238 100644 --- a/drivers/lcd/ssd1289_lld.c +++ b/drivers/lcd/ssd1289_lld.c @@ -9,11 +9,12 @@ extern uint16_t lcd_width, lcd_height; static uint16_t buf[((SCREEN_HEIGHT > SCREEN_WIDTH ) ? SCREEN_HEIGHT : SCREEN_WIDTH)]; #ifdef LCD_USE_GPIO + static __inline void lld_lcdWriteIndex(uint16_t index) { Clr_RS; Set_RD; - palWritePort(LCD_DATA_PORT, index); + lld_lcdWriteGPIO(index); Clr_WR; Set_WR; @@ -22,7 +23,7 @@ static __inline void lld_lcdWriteIndex(uint16_t index) { static __inline void lld_lcdWriteData(uint16_t data) { Set_RS; - palWritePort(LCD_DATA_PORT, data); + lld_lcdWriteGPIO(data); Clr_WR; Set_WR; @@ -30,8 +31,10 @@ static __inline void lld_lcdWriteData(uint16_t data) { static __inline void lld_lcdWriteReg(uint16_t lcdReg,uint16_t lcdRegValue) { Clr_CS; + lld_lcdWriteIndex(lcdReg); lld_lcdWriteData(lcdRegValue); + Set_CS; } @@ -42,16 +45,7 @@ static __inline uint16_t lld_lcdReadData(void) { Set_WR; Clr_RD; - // change pin mode to digital input - LCD_DATA_PORT->CRH = 0x44444444; - LCD_DATA_PORT->CRL = 0x44444444; - - value = palReadPort(LCD_DATA_PORT); // dummy - value = palReadPort(LCD_DATA_PORT); - - // change pin mode back to digital output - LCD_DATA_PORT->CRH = 0x33333333; - LCD_DATA_PORT->CRL = 0x33333333; + value = lld_lcdReadGPIO(); Set_RD; @@ -72,6 +66,7 @@ static __inline uint16_t lld_lcdReadReg(uint16_t lcdReg) { __inline void lld_lcdWriteStreamStart(void) { Clr_CS; + lld_lcdWriteIndex(0x0022); } @@ -85,7 +80,7 @@ __inline void lld_lcdWriteStream(uint16_t *buffer, uint16_t size) { Set_RS; for(i = 0; i < size; i++) { - palWritePort(LCD_DATA_PORT, buffer[i]); + lld_lcdWriteGPIO(buffer[i]); Clr_WR; Set_WR; } @@ -112,6 +107,10 @@ __inline void lld_lcdReadStream(uint16_t *buffer, size_t size) { #endif +#ifdef LCD_USE_SPI + /* TODO */ +#endif + #ifdef LCD_USE_FSMC #define LCD_REG (*((volatile uint16_t *) 0x60000000)) /* RS = 0 */ @@ -173,15 +172,30 @@ __inline void lld_lcdReadStream(uint16_t *buffer, size_t size) { } #endif -#ifdef LCD_USE_SPI -/* TODO! */ -#endif - -static __inline void lcdDelay(uint16_t us) { +static __inline void lld_lcdDelay(uint16_t us) { chThdSleepMicroseconds(us); } - +void lld_lcdSetPowerMode(uint8_t powerMode) { + switch(powerMode) { + case powerOff: + lld_lcdWriteReg(0x0010, 0x0000); // leave sleep mode + lld_lcdWriteReg(0x0007, 0x0000); // halt operation + lld_lcdWriteReg(0x0000, 0x0000); // turn off oszillator + lld_lcdWriteReg(0x0010, 0x0001); // enter sleepmode + break; + case powerOn: + lld_lcdWriteReg(0x0010, 0x0000); // leave sleep mode + lld_lcdInit(); + break; + case sleepOn: + lld_lcdWriteReg(0x0010, 0x0001); // enter sleep mode + break; + case sleepOff: + lld_lcdWriteReg(0x0010, 0x0000); // leave sleep mode + break; + } +} void lld_lcdSetCursor(uint16_t x, uint16_t y) { /* Reg 0x004E is an 8 bit value @@ -334,47 +348,47 @@ void lld_lcdInit(void) { #endif DeviceCode = lld_lcdReadReg(0x0000); - lld_lcdWriteReg(0x0000,0x0001); lcdDelay(5); - lld_lcdWriteReg(0x0003,0xA8A4); lcdDelay(5); - lld_lcdWriteReg(0x000C,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x000D,0x080C); lcdDelay(5); - lld_lcdWriteReg(0x000E,0x2B00); lcdDelay(5); - lld_lcdWriteReg(0x001E,0x00B0); lcdDelay(5); - lld_lcdWriteReg(0x0001,0x2B3F); lcdDelay(5); - lld_lcdWriteReg(0x0002,0x0600); lcdDelay(5); - lld_lcdWriteReg(0x0010,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0011,0x6070); lcdDelay(5); - lld_lcdWriteReg(0x0005,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0006,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0016,0xEF1C); lcdDelay(5); - lld_lcdWriteReg(0x0017,0x0003); lcdDelay(5); - lld_lcdWriteReg(0x0007,0x0133); lcdDelay(5); - lld_lcdWriteReg(0x000B,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x000F,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0041,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0042,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0048,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0049,0x013F); lcdDelay(5); - lld_lcdWriteReg(0x004A,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x004B,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0044,0xEF00); lcdDelay(5); - lld_lcdWriteReg(0x0045,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0046,0x013F); lcdDelay(5); - lld_lcdWriteReg(0x0030,0x0707); lcdDelay(5); - lld_lcdWriteReg(0x0031,0x0204); lcdDelay(5); - lld_lcdWriteReg(0x0032,0x0204); lcdDelay(5); - lld_lcdWriteReg(0x0033,0x0502); lcdDelay(5); - lld_lcdWriteReg(0x0034,0x0507); lcdDelay(5); - lld_lcdWriteReg(0x0035,0x0204); lcdDelay(5); - lld_lcdWriteReg(0x0036,0x0204); lcdDelay(5); - lld_lcdWriteReg(0x0037,0x0502); lcdDelay(5); - lld_lcdWriteReg(0x003A,0x0302); lcdDelay(5); - lld_lcdWriteReg(0x003B,0x0302); lcdDelay(5); - lld_lcdWriteReg(0x0023,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0024,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x0025,0x8000); lcdDelay(5); - lld_lcdWriteReg(0x004f,0x0000); lcdDelay(5); - lld_lcdWriteReg(0x004e,0x0000); lcdDelay(5); + lld_lcdWriteReg(0x0000,0x0001); lld_lcdDelay(5); + lld_lcdWriteReg(0x0003,0xA8A4); lld_lcdDelay(5); + lld_lcdWriteReg(0x000C,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x000D,0x080C); lld_lcdDelay(5); + lld_lcdWriteReg(0x000E,0x2B00); lld_lcdDelay(5); + lld_lcdWriteReg(0x001E,0x00B0); lld_lcdDelay(5); + lld_lcdWriteReg(0x0001,0x2B3F); lld_lcdDelay(5); + lld_lcdWriteReg(0x0002,0x0600); lld_lcdDelay(5); + lld_lcdWriteReg(0x0010,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0011,0x6070); lld_lcdDelay(5); + lld_lcdWriteReg(0x0005,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0006,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0016,0xEF1C); lld_lcdDelay(5); + lld_lcdWriteReg(0x0017,0x0003); lld_lcdDelay(5); + lld_lcdWriteReg(0x0007,0x0133); lld_lcdDelay(5); + lld_lcdWriteReg(0x000B,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x000F,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0041,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0042,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0048,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0049,0x013F); lld_lcdDelay(5); + lld_lcdWriteReg(0x004A,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x004B,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0044,0xEF00); lld_lcdDelay(5); + lld_lcdWriteReg(0x0045,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0046,0x013F); lld_lcdDelay(5); + lld_lcdWriteReg(0x0030,0x0707); lld_lcdDelay(5); + lld_lcdWriteReg(0x0031,0x0204); lld_lcdDelay(5); + lld_lcdWriteReg(0x0032,0x0204); lld_lcdDelay(5); + lld_lcdWriteReg(0x0033,0x0502); lld_lcdDelay(5); + lld_lcdWriteReg(0x0034,0x0507); lld_lcdDelay(5); + lld_lcdWriteReg(0x0035,0x0204); lld_lcdDelay(5); + lld_lcdWriteReg(0x0036,0x0204); lld_lcdDelay(5); + lld_lcdWriteReg(0x0037,0x0502); lld_lcdDelay(5); + lld_lcdWriteReg(0x003A,0x0302); lld_lcdDelay(5); + lld_lcdWriteReg(0x003B,0x0302); lld_lcdDelay(5); + lld_lcdWriteReg(0x0023,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0024,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x0025,0x8000); lld_lcdDelay(5); + lld_lcdWriteReg(0x004f,0x0000); lld_lcdDelay(5); + lld_lcdWriteReg(0x004e,0x0000); lld_lcdDelay(5); } uint16_t lld_lcdGetOrientation(void) { diff --git a/drivers/lcd/ssd1289_lld.h b/drivers/lcd/ssd1289_lld.h index 787b7d38..16a9ef0d 100644 --- a/drivers/lcd/ssd1289_lld.h +++ b/drivers/lcd/ssd1289_lld.h @@ -5,129 +5,6 @@ #ifdef LCD_USE_SSD1289 -#ifdef LCD_USE_GPIO -#define Set_CS palSetPad(LCD_CMD_PORT, LCD_CS); -#define Clr_CS palClearPad(LCD_CMD_PORT, LCD_CS); -#define Set_RS palSetPad(LCD_CMD_PORT, LCD_RS); -#define Clr_RS palClearPad(LCD_CMD_PORT, LCD_RS); -#define Set_WR palSetPad(LCD_CMD_PORT, LCD_WR); -#define Clr_WR palClearPad(LCD_CMD_PORT, LCD_WR); -#define Set_RD palSetPad(LCD_CMD_PORT, LCD_RD); -#define Clr_RD palClearPad(LCD_CMD_PORT, LCD_RD); -#endif - -#ifdef LCD_USE_FSMC -/* LCD Registers */ -#define R0 0x00 -#define R1 0x01 -#define R2 0x02 -#define R3 0x03 -#define R4 0x04 -#define R5 0x05 -#define R6 0x06 -#define R7 0x07 -#define R8 0x08 -#define R9 0x09 -#define R10 0x0A -#define R12 0x0C -#define R13 0x0D -#define R14 0x0E -#define R15 0x0F -#define R16 0x10 -#define R17 0x11 -#define R18 0x12 -#define R19 0x13 -#define R20 0x14 -#define R21 0x15 -#define R22 0x16 -#define R23 0x17 -#define R24 0x18 -#define R25 0x19 -#define R26 0x1A -#define R27 0x1B -#define R28 0x1C -#define R29 0x1D -#define R30 0x1E -#define R31 0x1F -#define R32 0x20 -#define R33 0x21 -#define R34 0x22 -#define R36 0x24 -#define R37 0x25 -#define R40 0x28 -#define R41 0x29 -#define R43 0x2B -#define R45 0x2D -#define R48 0x30 -#define R49 0x31 -#define R50 0x32 -#define R51 0x33 -#define R52 0x34 -#define R53 0x35 -#define R54 0x36 -#define R55 0x37 -#define R56 0x38 -#define R57 0x39 -#define R59 0x3B -#define R60 0x3C -#define R61 0x3D -#define R62 0x3E -#define R63 0x3F -#define R64 0x40 -#define R65 0x41 -#define R66 0x42 -#define R67 0x43 -#define R68 0x44 -#define R69 0x45 -#define R70 0x46 -#define R71 0x47 -#define R72 0x48 -#define R73 0x49 -#define R74 0x4A -#define R75 0x4B -#define R76 0x4C -#define R77 0x4D -#define R78 0x4E -#define R79 0x4F -#define R80 0x50 -#define R81 0x51 -#define R82 0x52 -#define R83 0x53 -#define R96 0x60 -#define R97 0x61 -#define R106 0x6A -#define R118 0x76 -#define R128 0x80 -#define R129 0x81 -#define R130 0x82 -#define R131 0x83 -#define R132 0x84 -#define R133 0x85 -#define R134 0x86 -#define R135 0x87 -#define R136 0x88 -#define R137 0x89 -#define R139 0x8B -#define R140 0x8C -#define R141 0x8D -#define R143 0x8F -#define R144 0x90 -#define R145 0x91 -#define R146 0x92 -#define R147 0x93 -#define R148 0x94 -#define R149 0x95 -#define R150 0x96 -#define R151 0x97 -#define R152 0x98 -#define R153 0x99 -#define R154 0x9A -#define R157 0x9D -#define R192 0xC0 -#define R193 0xC1 -#define R229 0xE5 -#endif - #ifdef __cplusplus extern "C" { #endif @@ -142,6 +19,7 @@ void lld_lcdSetWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); void lld_lcdClear(uint16_t color); void lld_lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color); void lld_lcdFillArea(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color); +void lld_lcdSetPowerMode(uint8_t powerMode); uint16_t lld_lcdGetPixelColor(uint16_t x, uint16_t y); uint16_t lld_lcdGetOrientation(void); uint16_t lld_lcdGetHeight(void); @@ -152,6 +30,133 @@ void lld_lcdVerticalScroll(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, i } #endif +#ifdef LCD_USE_GPIO + #define Set_CS palSetPad(LCD_CMD_PORT, LCD_CS); + #define Clr_CS palClearPad(LCD_CMD_PORT, LCD_CS); + #define Set_RS palSetPad(LCD_CMD_PORT, LCD_RS); + #define Clr_RS palClearPad(LCD_CMD_PORT, LCD_RS); + #define Set_WR palSetPad(LCD_CMD_PORT, LCD_WR); + #define Clr_WR palClearPad(LCD_CMD_PORT, LCD_WR); + #define Set_RD palSetPad(LCD_CMD_PORT, LCD_RD); + #define Clr_RD palClearPad(LCD_CMD_PORT, LCD_RD); +#endif + +#ifdef LCD_USE_SPI + /* TODO */ +#endif + +#ifdef LCD_USE_FSMC +/* LCD Registers */ + #define R0 0x00 + #define R1 0x01 + #define R2 0x02 + #define R3 0x03 + #define R4 0x04 + #define R5 0x05 + #define R6 0x06 + #define R7 0x07 + #define R8 0x08 + #define R9 0x09 + #define R10 0x0A + #define R12 0x0C + #define R13 0x0D + #define R14 0x0E + #define R15 0x0F + #define R16 0x10 + #define R17 0x11 + #define R18 0x12 + #define R19 0x13 + #define R20 0x14 + #define R21 0x15 + #define R22 0x16 + #define R23 0x17 + #define R24 0x18 + #define R25 0x19 + #define R26 0x1A + #define R27 0x1B + #define R28 0x1C + #define R29 0x1D + #define R30 0x1E + #define R31 0x1F + #define R32 0x20 + #define R33 0x21 + #define R34 0x22 + #define R36 0x24 + #define R37 0x25 + #define R40 0x28 + #define R41 0x29 + #define R43 0x2B + #define R45 0x2D + #define R48 0x30 + #define R49 0x31 + #define R50 0x32 + #define R51 0x33 + #define R52 0x34 + #define R53 0x35 + #define R54 0x36 + #define R55 0x37 + #define R56 0x38 + #define R57 0x39 + #define R59 0x3B + #define R60 0x3C + #define R61 0x3D + #define R62 0x3E + #define R63 0x3F + #define R64 0x40 + #define R65 0x41 + #define R66 0x42 + #define R67 0x43 + #define R68 0x44 + #define R69 0x45 + #define R70 0x46 + #define R71 0x47 + #define R72 0x48 + #define R73 0x49 + #define R74 0x4A + #define R75 0x4B + #define R76 0x4C + #define R77 0x4D + #define R78 0x4E + #define R79 0x4F + #define R80 0x50 + #define R81 0x51 + #define R82 0x52 + #define R83 0x53 + #define R96 0x60 + #define R97 0x61 + #define R106 0x6A + #define R118 0x76 + #define R128 0x80 + #define R129 0x81 + #define R130 0x82 + #define R131 0x83 + #define R132 0x84 + #define R133 0x85 + #define R134 0x86 + #define R135 0x87 + #define R136 0x88 + #define R137 0x89 + #define R139 0x8B + #define R140 0x8C + #define R141 0x8D + #define R143 0x8F + #define R144 0x90 + #define R145 0x91 + #define R146 0x92 + #define R147 0x93 + #define R148 0x94 + #define R149 0x95 + #define R150 0x96 + #define R151 0x97 + #define R152 0x98 + #define R153 0x99 + #define R154 0x9A + #define R157 0x9D + #define R192 0xC0 + #define R193 0xC1 + #define R229 0xE5 +#endif + #endif #endif |