aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ssd1289_lld.c72
-rw-r--r--drivers/ssd1289_lld.h9
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);