@@ -59,8 +59,8 LCD_t lcd0={ | |||||
59 |
|
59 | |||
60 | terminal_t terminal0; |
|
60 | terminal_t terminal0; | |
61 |
|
61 | |||
62 |
volatile |
|
62 | volatile int8_t* lcd0_CMD=(volatile int8_t*)0x60000000; | |
63 |
volatile |
|
63 | volatile int8_t* lcd0_DATA=(volatile int8_t*)0x61FFFFF0; | |
64 |
|
64 | |||
65 | float VREF0 =(float)3.3; |
|
65 | float VREF0 =(float)3.3; | |
66 | volatile vs10XXDev audioCodec0; |
|
66 | volatile vs10XXDev audioCodec0; | |
@@ -175,33 +175,20 int bsp_FSMC_init() | |||||
175 | /*-- FSMC Configuration ------------------------------------------------------*/ |
|
175 | /*-- FSMC Configuration ------------------------------------------------------*/ | |
176 | /*----------------------- SRAM Bank 3 ----------------------------------------*/ |
|
176 | /*----------------------- SRAM Bank 3 ----------------------------------------*/ | |
177 | /* FSMC_Bank1_NORSRAM4 configuration */ |
|
177 | /* FSMC_Bank1_NORSRAM4 configuration */ | |
178 |
p.FSMC_AddressSetupTime = |
|
178 | p.FSMC_AddressSetupTime = 3; | |
179 |
p.FSMC_AddressHoldTime = |
|
179 | p.FSMC_AddressHoldTime = 3; | |
180 | //ili9328 -> data setup time > 10ns |
|
180 | //ili9328 -> data setup time > 10ns | |
181 |
p.FSMC_DataSetupTime = |
|
181 | p.FSMC_DataSetupTime = 1; | |
182 | if(getCpuFreq()>100*1000*1000) |
|
182 | if(getCpuFreq()>100*1000*1000) | |
183 |
p.FSMC_DataSetupTime = |
|
183 | p.FSMC_DataSetupTime = 2;// 11; | |
184 |
p.FSMC_BusTurnAroundDuration = 0 |
|
184 | p.FSMC_BusTurnAroundDuration = 0; | |
185 | p.FSMC_CLKDivision = 0; |
|
185 | p.FSMC_CLKDivision = 0; | |
186 |
p.FSMC_DataLatency = 0 |
|
186 | p.FSMC_DataLatency = 0; | |
187 | //ili9328 -> data hold time > 15ns |
|
187 | //ili9328 -> data hold time > 15ns | |
188 | if(getCpuFreq()>66*1000*1000) |
|
188 | if(getCpuFreq()>66*1000*1000) | |
189 |
p.FSMC_DataLatency = 0 |
|
189 | p.FSMC_DataLatency = 0; | |
190 | p.FSMC_AccessMode = FSMC_AccessMode_A; |
|
190 | p.FSMC_AccessMode = FSMC_AccessMode_A; | |
191 |
|
191 | |||
192 | readtim.FSMC_AddressSetupTime = 0xf; |
|
|||
193 | readtim.FSMC_AddressHoldTime = 0xf; |
|
|||
194 | //p.FSMC_DataSetupTime = 9; |
|
|||
195 | readtim.FSMC_DataSetupTime = 0xf ;// 11; |
|
|||
196 | if(getCpuFreq()>100*1000*1000) |
|
|||
197 | readtim.FSMC_DataSetupTime = 0xf;// 11; |
|
|||
198 | readtim.FSMC_BusTurnAroundDuration = 0xf; |
|
|||
199 | readtim.FSMC_CLKDivision = 0; |
|
|||
200 | readtim.FSMC_DataLatency = 0xf; |
|
|||
201 | if(getCpuFreq()>66*1000*1000) |
|
|||
202 | readtim.FSMC_DataLatency = 0xf; |
|
|||
203 | readtim.FSMC_AccessMode = FSMC_AccessMode_A; |
|
|||
204 |
|
||||
205 |
|
192 | |||
206 | FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; |
|
193 | FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; | |
207 | FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; |
|
194 | FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; | |
@@ -216,7 +203,7 int bsp_FSMC_init() | |||||
216 | FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; |
|
203 | FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; | |
217 | FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; |
|
204 | FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; | |
218 | FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; |
|
205 | FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; | |
219 |
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = & |
|
206 | FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; | |
220 | FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; |
|
207 | FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; | |
221 |
|
208 | |||
222 | FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); |
|
209 | FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); | |
@@ -407,10 +394,6 void bspsdcardselect(char YESNO) | |||||
407 | void bsp_lcd0_write_reg(uint32_t reg,uint32_t data) |
|
394 | void bsp_lcd0_write_reg(uint32_t reg,uint32_t data) | |
408 | { |
|
395 | { | |
409 | uint8_t* pt8 = (uint8_t*)(void*)(®); |
|
396 | uint8_t* pt8 = (uint8_t*)(void*)(®); | |
410 | *lcd0_CMD=(uint8_t)0; |
|
|||
411 | *lcd0_CMD=(uint8_t)0; |
|
|||
412 | *lcd0_CMD=(uint8_t)0; |
|
|||
413 | *lcd0_CMD=(uint8_t)0; |
|
|||
414 | #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ |
|
397 | #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ | |
415 | *lcd0_CMD=pt8[3]; |
|
398 | *lcd0_CMD=pt8[3]; | |
416 | *lcd0_CMD=pt8[2]; |
|
399 | *lcd0_CMD=pt8[2]; | |
@@ -418,6 +401,7 void bsp_lcd0_write_reg(uint32_t reg,uin | |||||
418 | *lcd0_DATA=pt8[3]; |
|
401 | *lcd0_DATA=pt8[3]; | |
419 | *lcd0_DATA=pt8[2]; |
|
402 | *lcd0_DATA=pt8[2]; | |
420 | #else |
|
403 | #else | |
|
404 | ||||
421 | *lcd0_CMD=pt8[1]; |
|
405 | *lcd0_CMD=pt8[1]; | |
422 | *lcd0_CMD=pt8[0]; |
|
406 | *lcd0_CMD=pt8[0]; | |
423 | pt8 = (uint8_t*)(void*)&data; |
|
407 | pt8 = (uint8_t*)(void*)&data; | |
@@ -431,10 +415,7 uint32_t bsp_lcd0_read_reg(uint32_t reg) | |||||
431 | { |
|
415 | { | |
432 | uint8_t* pt8 = (uint8_t*)(void*)(®); |
|
416 | uint8_t* pt8 = (uint8_t*)(void*)(®); | |
433 | uint32_t DATA=0; |
|
417 | uint32_t DATA=0; | |
434 | *lcd0_CMD=(uint8_t)0; |
|
418 | ||
435 | *lcd0_CMD=(uint8_t)0; |
|
|||
436 | *lcd0_CMD=(uint8_t)0; |
|
|||
437 | *lcd0_CMD=(uint8_t)0; |
|
|||
438 | #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ |
|
419 | #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ | |
439 | *lcd0_CMD=pt8[3]; |
|
420 | *lcd0_CMD=pt8[3]; | |
440 | *lcd0_CMD=pt8[2]; |
|
421 | *lcd0_CMD=pt8[2]; | |
@@ -457,10 +438,6 void bsp_lcd0_writeGRAM(void* buffer,uin | |||||
457 | { |
|
438 | { | |
458 | uint32_t reg =ILI9328_REGISTER_WRITEDATATOGRAM; |
|
439 | uint32_t reg =ILI9328_REGISTER_WRITEDATATOGRAM; | |
459 | uint8_t* pt8 = (uint8_t*)(void*)(®); |
|
440 | uint8_t* pt8 = (uint8_t*)(void*)(®); | |
460 | *lcd0_CMD=(uint8_t)0; |
|
|||
461 | *lcd0_CMD=(uint8_t)0; |
|
|||
462 | *lcd0_CMD=(uint8_t)0; |
|
|||
463 | *lcd0_CMD=(uint8_t)0; |
|
|||
464 | #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ |
|
441 | #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ | |
465 | *lcd0_CMD=pt8[3]; |
|
442 | *lcd0_CMD=pt8[3]; | |
466 | *lcd0_CMD=pt8[2]; |
|
443 | *lcd0_CMD=pt8[2]; | |
@@ -486,13 +463,9 void bsp_lcd0_writeGRAM(void* buffer,uin | |||||
486 |
|
463 | |||
487 | void bsp_lcd0_readGRAM(void* buffer,uint32_t count) |
|
464 | void bsp_lcd0_readGRAM(void* buffer,uint32_t count) | |
488 | { |
|
465 | { | |
489 |
|
|
466 | //uint32_t reg =ILI9328_REGISTER_WRITEDATATOGRAM; | |
490 |
volatile uint8_t* pt8 |
|
467 | volatile uint8_t* pt8 ;// = (uint8_t*)(void*)® | |
491 | *lcd0_CMD=(uint8_t)0; |
|
468 | /* #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ | |
492 | *lcd0_CMD=(uint8_t)0; |
|
|||
493 | *lcd0_CMD=(uint8_t)0; |
|
|||
494 | *lcd0_CMD=(uint8_t)0; |
|
|||
495 | #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ |
|
|||
496 | *lcd0_CMD=pt8[3]; |
|
469 | *lcd0_CMD=pt8[3]; | |
497 | *lcd0_CMD=pt8[2]; |
|
470 | *lcd0_CMD=pt8[2]; | |
498 | pt8 = (uint8_t*)(void*)buffer; |
|
471 | pt8 = (uint8_t*)(void*)buffer; | |
@@ -502,13 +475,17 void bsp_lcd0_readGRAM(void* buffer,uint | |||||
502 | pt8[2*i]=*lcd0_DATA; |
|
475 | pt8[2*i]=*lcd0_DATA; | |
503 | } |
|
476 | } | |
504 | #else |
|
477 | #else | |
|
478 | *lcd0_CMD=(uint8_t)0; | |||
|
479 | *lcd0_CMD=(uint8_t)0; | |||
|
480 | *lcd0_CMD=(uint8_t)0; | |||
|
481 | *lcd0_CMD=(uint8_t)0; | |||
505 | *lcd0_CMD=pt8[1]; |
|
482 | *lcd0_CMD=pt8[1]; | |
506 | *lcd0_CMD=pt8[0]; |
|
483 | *lcd0_CMD=pt8[0]; | |
507 |
|
|
484 | pt8 = (uint8_t*)buffer;*/ | |
508 | /* |
|
485 | /* | |
509 |
|
|
486 | * x dummy reads Cf ili9328 datasheet p79! | |
510 |
|
|
487 | */ | |
511 | pt8[0]=*lcd0_DATA; |
|
488 | /* pt8[0]=*lcd0_DATA; | |
512 | pt8[1]=*lcd0_DATA; |
|
489 | pt8[1]=*lcd0_DATA; | |
513 |
|
|
490 | ||
514 | for(int i=0;i<(int)count;i++) |
|
491 | for(int i=0;i<(int)count;i++) | |
@@ -517,10 +494,21 void bsp_lcd0_readGRAM(void* buffer,uint | |||||
517 | pt8[2*i]=*lcd0_DATA; |
|
494 | pt8[2*i]=*lcd0_DATA; | |
518 | pt8[(2*i) +1]=*lcd0_DATA; |
|
495 | pt8[(2*i) +1]=*lcd0_DATA; | |
519 | pt8[2*i]=*lcd0_DATA; |
|
496 | pt8[2*i]=*lcd0_DATA; | |
520 | // pt8[(2*i) +1]=(uint8_t)0; |
|
|||
521 | // pt8[(2*i)]=(uint8_t)0; |
|
|||
522 | } |
|
497 | } | |
523 |
|
|
498 | #endif*/ | |
|
499 | ||||
|
500 | *lcd0_CMD=(uint8_t)0; | |||
|
501 | *lcd0_CMD=(uint8_t)0x22; | |||
|
502 | pt8 = (uint8_t*)buffer; | |||
|
503 | pt8[1]=*lcd0_DATA; | |||
|
504 | pt8[0]=*lcd0_DATA; | |||
|
505 | for(int i=0;i<(int)count;i++) | |||
|
506 | { | |||
|
507 | //pt8[(2*i) +1]=0; | |||
|
508 | //pt8[2*i]=0; | |||
|
509 | pt8[(2*i)+1]= *lcd0_DATA; | |||
|
510 | pt8[2*i]= *lcd0_DATA; | |||
|
511 | } | |||
524 | } |
|
512 | } | |
525 |
|
513 | |||
526 | void bsp_GTerm_init() |
|
514 | void bsp_GTerm_init() | |
@@ -528,7 +516,7 void bsp_GTerm_init() | |||||
528 | if(__opnfiles__[1]==NULL) |
|
516 | if(__opnfiles__[1]==NULL) | |
529 | { |
|
517 | { | |
530 | streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice)); |
|
518 | streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice)); | |
531 | terminal_init(&terminal0 ,&lcd0,&ComicSansMS_8,fd1); |
|
519 | terminal_init(&terminal0 ,&lcd0,&ComicSansMS_18,fd1); | |
532 | __opnfiles__[1] = fd1; |
|
520 | __opnfiles__[1] = fd1; | |
533 | } |
|
521 | } | |
534 | else |
|
522 | else |
@@ -348,9 +348,7 void bsp_GTerm_init() | |||||
348 | { |
|
348 | { | |
349 | if(__opnfiles__[1]==NULL) |
|
349 | if(__opnfiles__[1]==NULL) | |
350 | { |
|
350 | { | |
351 | //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t)); |
|
|||
352 | streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice)); |
|
351 | streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice)); | |
353 |
|
||||
354 | ili9328paintFilRect(&lcd0,0,0,240,320,0x7FFF,5,0); |
|
352 | ili9328paintFilRect(&lcd0,0,0,240,320,0x7FFF,5,0); | |
355 | terminal_init(&terminal0,&lcd0,&ComicSansMS_8,fd1); |
|
353 | terminal_init(&terminal0,&lcd0,&ComicSansMS_8,fd1); | |
356 | __opnfiles__[1] = fd1; |
|
354 | __opnfiles__[1] = fd1; |
@@ -6,7 +6,7 UCMODEL=stm32f4 | |||||
6 | BSP = OPLAYER |
|
6 | BSP = OPLAYER | |
7 | #BSP = STM32F4Discovery-ILI9328-8bits |
|
7 | #BSP = STM32F4Discovery-ILI9328-8bits | |
8 |
|
8 | |||
9 |
DEFINES += CPUFREQ= |
|
9 | DEFINES += CPUFREQ=100000000 | |
10 |
|
10 | |||
11 |
|
11 | |||
12 | SOURCES += \ |
|
12 | SOURCES += \ |
@@ -21,6 +21,8 extern streamdevice* __opnfiles__[]; | |||||
21 | extern void test_Block_Move(LCD_t* LCD,int x,int y,int w,int h,int color); |
|
21 | extern void test_Block_Move(LCD_t* LCD,int x,int y,int w,int h,int color); | |
22 | extern void test_all_colors(LCD_t* LCD); |
|
22 | extern void test_all_colors(LCD_t* LCD); | |
23 | extern void test_small_lines(LCD_t* LCD); |
|
23 | extern void test_small_lines(LCD_t* LCD); | |
|
24 | extern void test_lines(LCD_t* LCD); | |||
|
25 | extern void test_address(LCD_t* LCD); | |||
24 | void test_uniform_rw(LCD_t* LCD); |
|
26 | void test_uniform_rw(LCD_t* LCD); | |
25 | char buffer[512]; |
|
27 | char buffer[512]; | |
26 |
|
28 | |||
@@ -142,12 +144,26 int main() | |||||
142 | delay_100us(30000); |
|
144 | delay_100us(30000); | |
143 | int i=0; |
|
145 | int i=0; | |
144 | int color=0; |
|
146 | int color=0; | |
145 |
|
|
147 | // test_all_colors(&lcd0); | |
146 | test_small_lines(&lcd0); |
|
148 | // test_small_lines(&lcd0); | |
147 | test_uniform_rw(&lcd0); |
|
149 | // test_uniform_rw(&lcd0); | |
148 |
|
150 | |||
149 | printf("LCD ID REG = 0x%X\n\r",lcd0.interface->readreg(ILI9328_REGISTER_DRIVERCODEREAD)); |
|
151 | printf("LCD ID REG = 0x%X\n\r",lcd0.interface->readreg(ILI9328_REGISTER_DRIVERCODEREAD)); | |
150 | while(1); |
|
152 | printf("LCD ENTRY MODE REG = 0x%X\n\r",lcd0.interface->readreg(ILI9328_REGISTER_ENTRYMODE)); | |
|
153 | uint16_t test[16]; | |||
|
154 | for(int i=0;i<16;i++) | |||
|
155 | { | |||
|
156 | test[i]=0xF00F; | |||
|
157 | } | |||
|
158 | lcd0.paint(&lcd0,test,10,100,4,4); | |||
|
159 | lcd0.getPix(&lcd0,test,10,100,4,4); | |||
|
160 | for(int i=0;i<16;i++) | |||
|
161 | { | |||
|
162 | printf("@%d=0x%X\n",i,test[i]); | |||
|
163 | } | |||
|
164 | // test_lines(&lcd0); | |||
|
165 | ||||
|
166 | while(1)test_address(&lcd0); | |||
151 | for(i=0;i<240;i++) |
|
167 | for(i=0;i<240;i++) | |
152 | { |
|
168 | { | |
153 | if(i>(240/3)) |
|
169 | if(i>(240/3)) |
@@ -16,7 +16,7 | |||||
16 | #include <terminal.h> |
|
16 | #include <terminal.h> | |
17 | #include <ili9328.h> |
|
17 | #include <ili9328.h> | |
18 |
|
18 | |||
19 |
|
19 | uint16_t buff[50*50]; | ||
20 | void test_Block_Move(LCD_t* LCD,int x,int y,int w,int h,int color) |
|
20 | void test_Block_Move(LCD_t* LCD,int x,int y,int w,int h,int color) | |
21 | { |
|
21 | { | |
22 | LCD->paintFilRect(LCD,x,y,w,h,0,0,color); |
|
22 | LCD->paintFilRect(LCD,x,y,w,h,0,0,color); | |
@@ -68,3 +68,48 void test_all_colors(LCD_t* LCD) | |||||
68 | color+=1; |
|
68 | color+=1; | |
69 | } |
|
69 | } | |
70 | } |
|
70 | } | |
|
71 | ||||
|
72 | void test_address(LCD_t* LCD) | |||
|
73 | { | |||
|
74 | LCD->paintFilRect(LCD,0,0,LCD->width,LCD->height,0,0,0xFFFF); | |||
|
75 | uint16_t color[1]; | |||
|
76 | for(int y=0;y<320;y++) | |||
|
77 | { | |||
|
78 | for(int x=0;x<240;x++) | |||
|
79 | { | |||
|
80 | color[0]=x*y; | |||
|
81 | LCD->paint(LCD,color,x,y,1,1); | |||
|
82 | //delay_100us(100); | |||
|
83 | } | |||
|
84 | } | |||
|
85 | LCD->getPix(LCD,buff,50,50,50,50); | |||
|
86 | delay_100us(5000); | |||
|
87 | for(int i=0;i<50*50;i++) | |||
|
88 | { | |||
|
89 | buff[i]=i; | |||
|
90 | } | |||
|
91 | LCD->paint(LCD,buff,50,50,50,50); | |||
|
92 | delay_100us(5000); | |||
|
93 | } | |||
|
94 | ||||
|
95 | void test_lines(LCD_t* LCD) | |||
|
96 | { | |||
|
97 | uint16_t color[2];//=0x0FF0; | |||
|
98 | int x=0; | |||
|
99 | LCD->paintFilRect(LCD,0,0,LCD->width,LCD->height,0,0,0xFFFF); | |||
|
100 | for(int l=0;l<0xFFFF;l++) | |||
|
101 | { | |||
|
102 | color[0]=l; | |||
|
103 | color[1]=l; | |||
|
104 | for(int i=0;i<320;i++) | |||
|
105 | { | |||
|
106 | x=i*240/320; | |||
|
107 | LCD->paint(LCD,color,x,i,2,1); | |||
|
108 | } | |||
|
109 | for(int i=0;i<320;i++) | |||
|
110 | { | |||
|
111 | x=239-(i*240/320); | |||
|
112 | LCD->paint(LCD,color,x,i,2,1); | |||
|
113 | } | |||
|
114 | } | |||
|
115 | } |
@@ -26,6 +26,7 | |||||
26 | #include <core.h> |
|
26 | #include <core.h> | |
27 | #include <math.h> |
|
27 | #include <math.h> | |
28 | #include <stdint.h> |
|
28 | #include <stdint.h> | |
|
29 | #include <malloc.h> | |||
29 |
|
30 | |||
30 | #ifdef __OPTIMIZED_MATH |
|
31 | #ifdef __OPTIMIZED_MATH | |
31 | #include <optimised_math.h> |
|
32 | #include <optimised_math.h> | |
@@ -166,17 +167,21 void ili9328refreshenable(struct LCD_t* | |||||
166 |
|
167 | |||
167 | void ili9328setFrame(LCD_t* LCD,uint16_t X,uint16_t Y,uint16_t W,uint16_t H) |
|
168 | void ili9328setFrame(LCD_t* LCD,uint16_t X,uint16_t Y,uint16_t W,uint16_t H) | |
168 | { |
|
169 | { | |
169 | LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET,(uint32_t)X); |
|
170 | if((X>239) || (Y>319) || ((X+W)>240) || ((Y+H)>320)) | |
170 | LCD->interface->writereg(ILI9328_REGISTER_VERTICALGRAMADDRESSSET,(uint32_t)Y); |
|
171 | { | |
|
172 | while (1); | |||
|
173 | } | |||
171 | LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION,(uint32_t)X); |
|
174 | LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION,(uint32_t)X); | |
172 | LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION,(uint32_t)(W+X-1)); |
|
175 | LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION,(uint32_t)(W+X-1)); | |
173 | LCD->interface->writereg(ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION,(uint32_t)Y); |
|
176 | LCD->interface->writereg(ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION,(uint32_t)Y); | |
174 | LCD->interface->writereg(ILI9328_REGISTER_VERTICALADDRESSENDPOSITION,(uint32_t)(Y+H-1)); |
|
177 | LCD->interface->writereg(ILI9328_REGISTER_VERTICALADDRESSENDPOSITION,(uint32_t)(Y+H-1)); | |
|
178 | LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET,(uint32_t)X); | |||
|
179 | LCD->interface->writereg(ILI9328_REGISTER_VERTICALGRAMADDRESSSET,(uint32_t)Y); | |||
175 | } |
|
180 | } | |
176 |
|
181 | |||
177 | void ili9328paint(LCD_t* LCD,void* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t Width,uint16_t Height) |
|
182 | void ili9328paint(LCD_t* LCD,void* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t Width,uint16_t Height) | |
178 | { |
|
183 | { | |
179 | if((LCD!=NULL) && (LCD->interface!=NULL) && (LCD->interface->writeGRAM!=NULL) && (LCD->width>(Xpos+Width)) && (LCD->height>(Ypos+Height))) |
|
184 | if((LCD!=NULL) && (LCD->interface!=NULL) && (LCD->interface->writeGRAM!=NULL) && (LCD->width>=(Xpos+Width)) && (LCD->height>=(Ypos+Height))) | |
180 | { |
|
185 | { | |
181 | ili9328setFrame(LCD,Xpos,Ypos,Width,Height); |
|
186 | ili9328setFrame(LCD,Xpos,Ypos,Width,Height); | |
182 | LCD->interface->writeGRAM(buffer,Width*Height); |
|
187 | LCD->interface->writeGRAM(buffer,Width*Height); | |
@@ -343,7 +348,7 void ili9328paintText(LCD_t* LCD,char* b | |||||
343 | if(*buffer<32)*buffer=32; |
|
348 | if(*buffer<32)*buffer=32; | |
344 | if(*buffer>127)*buffer=32; |
|
349 | if(*buffer>127)*buffer=32; | |
345 | ili9328setFrame(LCD,Xpos+(charnum*w),Ypos-h,w,1); |
|
350 | ili9328setFrame(LCD,Xpos+(charnum*w),Ypos-h,w,1); | |
346 | // LCD->interface->readGRAM(tmp,w); |
|
351 | // LCD->interface->readGRAM(tmp,w); | |
347 | ili9328getPix(LCD,tmp,Xpos+(charnum*w),Ypos-h,w,1); |
|
352 | ili9328getPix(LCD,tmp,Xpos+(charnum*w),Ypos-h,w,1); | |
348 | for(int i=0;i<(h*w);i++) |
|
353 | for(int i=0;i<(h*w);i++) | |
349 | { |
|
354 | { | |
@@ -353,8 +358,8 void ili9328paintText(LCD_t* LCD,char* b | |||||
353 | { |
|
358 | { | |
354 | ili9328setFrame(LCD,Xpos+(charnum*w),Ypos + linenum -h,w,1); |
|
359 | ili9328setFrame(LCD,Xpos+(charnum*w),Ypos + linenum -h,w,1); | |
355 | LCD->interface->writeGRAM(tmp,w); |
|
360 | LCD->interface->writeGRAM(tmp,w); | |
356 | ili9328setFrame(LCD,Xpos+(charnum*w),Ypos + linenum + 1-h,w,1); |
|
361 | //ili9328setFrame(LCD,Xpos+(charnum*w),Ypos + linenum + 1-h,w,1); | |
357 | // LCD->interface->readGRAM(tmp,w); |
|
362 | // LCD->interface->readGRAM(tmp,w); | |
358 | ili9328getPix(LCD,tmp,Xpos+(charnum*w),Ypos + linenum + 1-h,w,1); |
|
363 | ili9328getPix(LCD,tmp,Xpos+(charnum*w),Ypos + linenum + 1-h,w,1); | |
359 | pix=0; |
|
364 | pix=0; | |
360 | } |
|
365 | } | |
@@ -375,13 +380,61 void ili9328paintText(LCD_t* LCD,char* b | |||||
375 | } |
|
380 | } | |
376 | } |
|
381 | } | |
377 |
|
382 | |||
|
383 | ||||
|
384 | void ili9328paintChar(LCD_t* LCD,char buffer,uint16_t Xpos,uint16_t Ypos,sFONT* font,uint32_t color) | |||
|
385 | { | |||
|
386 | int w=font->Width,h=font->Height,bpl=font->bytesPerLine,pix=0,tableoffset=0; | |||
|
387 | uint16_t tmp[w]; | |||
|
388 | uint16_t tmp2[w]; | |||
|
389 | uint16_t linenum=0,charnum=0; | |||
|
390 | uint8_t line=0; | |||
|
391 | if(buffer<32)buffer=32; | |||
|
392 | if(buffer>127)buffer=32; | |||
|
393 | ili9328setFrame(LCD,Xpos,Ypos-h,w,1); | |||
|
394 | // LCD->interface->readGRAM(tmp,w); | |||
|
395 | ili9328getPix(LCD,tmp2,Xpos,Ypos-h,w,1); | |||
|
396 | for(int i=0;i<w;i++) | |||
|
397 | { | |||
|
398 | tmp[i]=0; | |||
|
399 | } | |||
|
400 | for(int i=0;i<(h*w);i++) | |||
|
401 | { | |||
|
402 | if( ((i%w)==0) ) //read current line to apply text pixmap | |||
|
403 | { | |||
|
404 | if(linenum++>0) | |||
|
405 | { | |||
|
406 | ili9328setFrame(LCD,Xpos,Ypos + linenum -h,w,1); | |||
|
407 | LCD->interface->writeGRAM(tmp,w); | |||
|
408 | //ili9328setFrame(LCD,Xpos+(charnum*w),Ypos + linenum + 1-h,w,1); | |||
|
409 | // LCD->interface->readGRAM(tmp,w); | |||
|
410 | ili9328getPix(LCD,tmp2,Xpos,Ypos + linenum + 1-h,w,1); | |||
|
411 | for(int i=0;i<w;i++) | |||
|
412 | { | |||
|
413 | tmp[i]=0; | |||
|
414 | } | |||
|
415 | pix=0; | |||
|
416 | } | |||
|
417 | } | |||
|
418 | if((pix%8) == 0) | |||
|
419 | { | |||
|
420 | line=font->table[(((buffer)-32)*h*bpl)+tableoffset++]; | |||
|
421 | } | |||
|
422 | //tmp[pix]=0; | |||
|
423 | if((line & (uint8_t)0x01)==(uint8_t)1)tmp[pix]=(uint16_t)color; | |||
|
424 | pix++; | |||
|
425 | line>>=1; | |||
|
426 | } | |||
|
427 | ||||
|
428 | } | |||
|
429 | ||||
378 | int ili9328init(struct LCD_t* LCD) |
|
430 | int ili9328init(struct LCD_t* LCD) | |
379 | { |
|
431 | { | |
380 | if((LCD!=NULL) && (LCD->interface!=NULL) && (LCD->interface->writereg!=NULL)) |
|
432 | if((LCD!=NULL) && (LCD->interface!=NULL) && (LCD->interface->writereg!=NULL)) | |
381 | { |
|
433 | { | |
382 | LCD->interface->writereg(ILI9328_REGISTER_DRIVEROUTPUTCONTROL1, 0x0100); // Driver Output Control Register (R01h) |
|
434 | LCD->interface->writereg(ILI9328_REGISTER_DRIVEROUTPUTCONTROL1, 0x0100); // Driver Output Control Register (R01h) | |
383 | LCD->interface->writereg(ILI9328_REGISTER_LCDDRIVINGCONTROL, 0x0700); // LCD Driving Waveform Control (R02h) |
|
435 | LCD->interface->writereg(ILI9328_REGISTER_LCDDRIVINGCONTROL, 0x0700); // LCD Driving Waveform Control (R02h) | |
384 |
LCD->interface->writereg(ILI9328_REGISTER_ENTRYMODE, 0x |
|
436 | LCD->interface->writereg(ILI9328_REGISTER_ENTRYMODE, 0x0230); // Entry Mode (R03h) | |
|
437 | LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL1, 0xC000); | |||
385 | LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL2, 0x0302); |
|
438 | LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL2, 0x0302); | |
386 | LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL3, 0x0000); |
|
439 | LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL3, 0x0000); | |
387 | LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL4, 0x0000); // Fmark On |
|
440 | LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL4, 0x0000); // Fmark On | |
@@ -450,12 +503,12 void ili9328getPix(struct LCD_t* LCD,uin | |||||
450 | #define __set__Address__(_x_,_y_) LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET,_x_); \ |
|
503 | #define __set__Address__(_x_,_y_) LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET,_x_); \ | |
451 | LCD->interface->writereg(ILI9328_REGISTER_VERTICALGRAMADDRESSSET,_y_) |
|
504 | LCD->interface->writereg(ILI9328_REGISTER_VERTICALGRAMADDRESSSET,_y_) | |
452 |
|
505 | |||
453 | uint16_t* castedBuff = (uint16_t*)buffer; |
|
|||
454 | int cx=Xpos,cy=Ypos; |
|
506 | int cx=Xpos,cy=Ypos; | |
|
507 | ili9328setFrame(LCD,Xpos,Ypos,w,h); | |||
455 | for(int i=0;i<(w*h);i++) |
|
508 | for(int i=0;i<(w*h);i++) | |
456 | { |
|
509 | { | |
457 | __set__Address__(cx,cy); |
|
510 | __set__Address__(cx,cy); | |
458 |
LCD->interface->readGRAM((void*)(& |
|
511 | LCD->interface->readGRAM((void*)(&buffer[i]),1); | |
459 | cx+=1; |
|
512 | cx+=1; | |
460 | if(cx>=(w+Xpos)) |
|
513 | if(cx>=(w+Xpos)) | |
461 | { |
|
514 | { |
@@ -1,5 +1,4 | |||||
1 | TEMPLATE = lib |
|
1 | TEMPLATE = lib | |
2 | OBJECTS_DIR = obj |
|
|||
3 | TARGET = fonts |
|
2 | TARGET = fonts | |
4 |
|
3 | |||
5 | SOURCES += \ |
|
4 | SOURCES += \ |
@@ -154,7 +154,9 int terminal_writenc(terminal_t* termina | |||||
154 | if(terminal->column==0)terminal_clearCurentLine(terminal); |
|
154 | if(terminal->column==0)terminal_clearCurentLine(terminal); | |
155 | if(buffer[0]!='\r'){ |
|
155 | if(buffer[0]!='\r'){ | |
156 | // terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal,charw),CHARYPOS(terminal, charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor); |
|
156 | // terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal,charw),CHARYPOS(terminal, charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor); | |
157 | terminal->LCD->paintText(terminal->LCD,buffer,CHARXPOS(terminal,charw),(CHARYPOS(terminal, charh))-(terminal->verticalSpace/2),terminal->font,terminal->textColor); |
|
157 | // terminal->LCD->paintText(terminal->LCD,buffer,CHARXPOS(terminal,charw),(CHARYPOS(terminal, charh))-(terminal->verticalSpace/2),terminal->font,terminal->textColor); | |
|
158 | #include <ili9328.h> | |||
|
159 | ili9328paintChar(terminal->LCD,buffer[0],CHARXPOS(terminal,charw),(CHARYPOS(terminal, charh))-(terminal->verticalSpace/2),terminal->font,terminal->textColor); | |||
158 | terminal_movecursor(terminal,1); |
|
160 | terminal_movecursor(terminal,1); | |
159 | } |
|
161 | } | |
160 | } |
|
162 | } |
@@ -1,5 +1,4 | |||||
1 | TEMPLATE = lib |
|
1 | TEMPLATE = lib | |
2 | OBJECTS_DIR = obj |
|
|||
3 | TARGET = terminal |
|
2 | TARGET = terminal | |
4 |
|
3 | |||
5 | SOURCES += \ |
|
4 | SOURCES += \ |
@@ -37,6 +37,7 extern void ili9328paintFilCirc(LCD_t* L | |||||
37 | extern void ili9328paintFilCircMidPoint(LCD_t* LCD,uint16_t Xpos,uint16_t Ypos,uint16_t r,uint32_t contColor,uint16_t contSz,uint32_t fillColor); |
|
37 | extern void ili9328paintFilCircMidPoint(LCD_t* LCD,uint16_t Xpos,uint16_t Ypos,uint16_t r,uint32_t contColor,uint16_t contSz,uint32_t fillColor); | |
38 | extern void ili9328getPix(struct LCD_t* LCD,uint16_t* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t w,uint16_t h); |
|
38 | extern void ili9328getPix(struct LCD_t* LCD,uint16_t* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t w,uint16_t h); | |
39 | extern void ili9328refreshenable(struct LCD_t* LCD,int enable); |
|
39 | extern void ili9328refreshenable(struct LCD_t* LCD,int enable); | |
|
40 | extern void ili9328paintChar(LCD_t* LCD,char buffer,uint16_t Xpos,uint16_t Ypos,sFONT* font,uint32_t color); | |||
40 |
|
41 | |||
41 | #define ILI9328_REGISTER_DRIVERCODEREAD ((uint32_t) 0x0000 ) |
|
42 | #define ILI9328_REGISTER_DRIVERCODEREAD ((uint32_t) 0x0000 ) | |
42 | #define ILI9328_REGISTER_DRIVEROUTPUTCONTROL1 ((uint32_t) 0x0001 ) |
|
43 | #define ILI9328_REGISTER_DRIVEROUTPUTCONTROL1 ((uint32_t) 0x0001 ) |
@@ -79,27 +79,33 void SDLCD_writereg(uint32_t reg,uint32_ | |||||
79 | { |
|
79 | { | |
80 | switch (reg) { |
|
80 | switch (reg) { | |
81 | case ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET: |
|
81 | case ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET: | |
82 | if((data>=screen->w) || (data<0))printf("Warning printing out of bounds HORIZONTALGRAMADDRESSSET=%d",data); |
|
82 | if((data>=screen->w) || (data<0)) | |
|
83 | printf("Warning printing out of bounds HORIZONTALGRAMADDRESSSET=%d",data); | |||
83 | SDLCD_Xpos = data; |
|
84 | SDLCD_Xpos = data; | |
84 | break; |
|
85 | break; | |
85 | case ILI9328_REGISTER_VERTICALGRAMADDRESSSET: |
|
86 | case ILI9328_REGISTER_VERTICALGRAMADDRESSSET: | |
86 | if((data>=screen->h) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_VERTICALGRAMADDRESSSET=%d",data); |
|
87 | if((data>=screen->h) || (data<0)) | |
|
88 | printf("Warning printing out of bounds ILI9328_REGISTER_VERTICALGRAMADDRESSSET=%d",data); | |||
87 | SDLCD_Ypos = data; |
|
89 | SDLCD_Ypos = data; | |
88 | break; |
|
90 | break; | |
89 | case ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION: |
|
91 | case ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION: | |
90 | if((data>=screen->w) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION=%d",data); |
|
92 | if((data>=screen->w) || (data<0)) | |
|
93 | printf("Warning printing out of bounds ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION=%d",data); | |||
91 | SDLCD_XWinStrt = data; |
|
94 | SDLCD_XWinStrt = data; | |
92 | break; |
|
95 | break; | |
93 | case ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION: |
|
96 | case ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION: | |
94 | if((data>=screen->w) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION=%d",data); |
|
97 | if((data>=screen->w) || (data<0)) | |
|
98 | printf("Warning printing out of bounds ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION=%d",data); | |||
95 | SDLCD_XWinEnd = data; |
|
99 | SDLCD_XWinEnd = data; | |
96 | break; |
|
100 | break; | |
97 | case ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION: |
|
101 | case ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION: | |
98 | if((data>=screen->h) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION=%d",data); |
|
102 | if((data>=screen->h) || (data<0)) | |
|
103 | printf("Warning printing out of bounds ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION=%d",data); | |||
99 | SDLCD_YWinStrt = data; |
|
104 | SDLCD_YWinStrt = data; | |
100 | break; |
|
105 | break; | |
101 | case ILI9328_REGISTER_VERTICALADDRESSENDPOSITION: |
|
106 | case ILI9328_REGISTER_VERTICALADDRESSENDPOSITION: | |
102 | if((data>=screen->h) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_VERTICALADDRESSENDPOSITION=%d",data); |
|
107 | if((data>=screen->h) || (data<0)) | |
|
108 | printf("Warning printing out of bounds ILI9328_REGISTER_VERTICALADDRESSENDPOSITION=%d",data); | |||
103 | SDLCD_YWinEnd = data; |
|
109 | SDLCD_YWinEnd = data; | |
104 | break; |
|
110 | break; | |
105 | default: |
|
111 | default: |
General Comments 0
You need to be logged in to leave comments.
Login now