diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ssd1289_lld.c | 72 | ||||
-rw-r--r-- | drivers/ssd1289_lld.h | 9 |
2 files changed, 75 insertions, 6 deletions
diff --git a/drivers/ssd1289_lld.c b/drivers/ssd1289_lld.c index e6ec0485..af33d187 100644 --- a/drivers/ssd1289_lld.c +++ b/drivers/ssd1289_lld.c @@ -2,9 +2,10 @@ #ifdef LCD_USE_SSD1289 +extern uint16_t DeviceCode; extern uint16_t lcd_width, lcd_height; -void lld_lcdWriteIndex(uint16_t index) { +__inline void lcdWriteIndex(uint16_t index) { Clr_RS; Set_RD; @@ -14,7 +15,7 @@ void lld_lcdWriteIndex(uint16_t index) { Set_WR; } -void lld_lcdWriteData(uint16_t data) { +__inline void lcdWriteData(uint16_t data) { Set_RS; palWritePort(LCD_DATA_PORT, data); @@ -23,7 +24,14 @@ void lld_lcdWriteData(uint16_t data) { Set_WR; } -uint16_t lld_lcdReadData(void) { +__inline void lcdWriteReg(uint16_t lcdReg,uint16_t lcdRegValue) { + Clr_CS; + lcdWriteIndex(lcdReg); + lcdWriteData(lcdRegValue); + Set_CS; +} + +__inline uint16_t lcdReadData(void) { uint16_t value; Set_RS; @@ -46,6 +54,64 @@ uint16_t lld_lcdReadData(void) { return value; } +__inline uint16_t lcdReadReg(uint16_t lcdReg) { + uint16_t lcdRAM; + + Clr_CS; + lcdWriteIndex(lcdReg); + lcdRAM = lcdReadData(); + + Set_CS; + + return lcdRAM; +} + +void lld_lcdInit(void) { + DeviceCode = lcdReadReg(0x0000); + + lcdWriteReg(0x0000,0x0001); lcdDelay(5); + lcdWriteReg(0x0003,0xA8A4); lcdDelay(5); + lcdWriteReg(0x000C,0x0000); lcdDelay(5); + lcdWriteReg(0x000D,0x080C); lcdDelay(5); + lcdWriteReg(0x000E,0x2B00); lcdDelay(5); + lcdWriteReg(0x001E,0x00B0); lcdDelay(5); + lcdWriteReg(0x0001,0x2B3F); lcdDelay(5); + lcdWriteReg(0x0002,0x0600); lcdDelay(5); + lcdWriteReg(0x0010,0x0000); lcdDelay(5); + lcdWriteReg(0x0011,0x6070); lcdDelay(5); + lcdWriteReg(0x0005,0x0000); lcdDelay(5); + lcdWriteReg(0x0006,0x0000); lcdDelay(5); + lcdWriteReg(0x0016,0xEF1C); lcdDelay(5); + lcdWriteReg(0x0017,0x0003); lcdDelay(5); + lcdWriteReg(0x0007,0x0133); lcdDelay(5); + lcdWriteReg(0x000B,0x0000); lcdDelay(5); + lcdWriteReg(0x000F,0x0000); lcdDelay(5); + lcdWriteReg(0x0041,0x0000); lcdDelay(5); + lcdWriteReg(0x0042,0x0000); lcdDelay(5); + lcdWriteReg(0x0048,0x0000); lcdDelay(5); + lcdWriteReg(0x0049,0x013F); lcdDelay(5); + lcdWriteReg(0x004A,0x0000); lcdDelay(5); + lcdWriteReg(0x004B,0x0000); lcdDelay(5); + lcdWriteReg(0x0044,0xEF00); lcdDelay(5); + lcdWriteReg(0x0045,0x0000); lcdDelay(5); + lcdWriteReg(0x0046,0x013F); lcdDelay(5); + lcdWriteReg(0x0030,0x0707); lcdDelay(5); + lcdWriteReg(0x0031,0x0204); lcdDelay(5); + lcdWriteReg(0x0032,0x0204); lcdDelay(5); + lcdWriteReg(0x0033,0x0502); lcdDelay(5); + lcdWriteReg(0x0034,0x0507); lcdDelay(5); + lcdWriteReg(0x0035,0x0204); lcdDelay(5); + lcdWriteReg(0x0036,0x0204); lcdDelay(5); + lcdWriteReg(0x0037,0x0502); lcdDelay(5); + lcdWriteReg(0x003A,0x0302); lcdDelay(5); + lcdWriteReg(0x003B,0x0302); lcdDelay(5); + lcdWriteReg(0x0023,0x0000); lcdDelay(5); + lcdWriteReg(0x0024,0x0000); lcdDelay(5); + lcdWriteReg(0x0025,0x8000); lcdDelay(5); + lcdWriteReg(0x004f,0); lcdDelay(5); + lcdWriteReg(0x004e,0); lcdDelay(5); +} + uint16_t lld_lcdGetHeight(void) { return lcd_height; } diff --git a/drivers/ssd1289_lld.h b/drivers/ssd1289_lld.h index 837d0496..80e40dea 100644 --- a/drivers/ssd1289_lld.h +++ b/drivers/ssd1289_lld.h @@ -5,9 +5,12 @@ #ifndef LCD_USE_SSD1289 -void lld_lcdWriteIndex(uint16_t index); -void lld_lcdWriteData(uint16_t data); -void lld_lcdWriteData(uint16_t data); +void lcdWriteIndex(uint16_t index); +void lcdWriteData(uint16_t data); +void lcdWriteReg(uint16_t lcdReg, uint16_t lcdRegValue); +uint16_t lcdReadData(void); +uint16_t lcdReadReg(uint16_t lcdReg); +uint16_t lld_lcdInit(void); uint16_t lld_lcdGetHeight(void); uint16_t lld_lcdGetWidth(void); |