##// END OF EJS Templates
Sync, Still trying to solve 8bits ILI9328 read problems.
jeandet -
r67:604c231d911c dev_alexis
parent child
Show More
@@ -59,8 +59,8 LCD_t lcd0={
59
59
60 terminal_t terminal0;
60 terminal_t terminal0;
61
61
62 volatile uint8_t* lcd0_CMD=(volatile uint8_t*)0x60000000;
62 volatile int8_t* lcd0_CMD=(volatile int8_t*)0x60000000;
63 volatile uint8_t* lcd0_DATA=(volatile uint8_t*)0x61FFFFF0;
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 = 0xf;
178 p.FSMC_AddressSetupTime = 3;
179 p.FSMC_AddressHoldTime = 0xf;
179 p.FSMC_AddressHoldTime = 3;
180 //ili9328 -> data setup time > 10ns
180 //ili9328 -> data setup time > 10ns
181 p.FSMC_DataSetupTime = 0xf;
181 p.FSMC_DataSetupTime = 1;
182 if(getCpuFreq()>100*1000*1000)
182 if(getCpuFreq()>100*1000*1000)
183 p.FSMC_DataSetupTime = 0xf;// 11;
183 p.FSMC_DataSetupTime = 2;// 11;
184 p.FSMC_BusTurnAroundDuration = 0xf;
184 p.FSMC_BusTurnAroundDuration = 0;
185 p.FSMC_CLKDivision = 0;
185 p.FSMC_CLKDivision = 0;
186 p.FSMC_DataLatency = 0xf;
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 = 0xf;
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 = &readtim;
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*)(&reg);
396 uint8_t* pt8 = (uint8_t*)(void*)(&reg);
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*)(&reg);
416 uint8_t* pt8 = (uint8_t*)(void*)(&reg);
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*)(&reg);
440 uint8_t* pt8 = (uint8_t*)(void*)(&reg);
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 uint32_t reg =ILI9328_REGISTER_WRITEDATATOGRAM;
466 //uint32_t reg =ILI9328_REGISTER_WRITEDATATOGRAM;
490 volatile uint8_t* pt8 = (uint8_t*)(void*)®
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 pt8 = (uint8_t*)buffer;
484 pt8 = (uint8_t*)buffer;*/
508 /*
485 /*
509 * x dummy reads Cf ili9328 datasheet p79!
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 #endif
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=50000000
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 // test_all_colors(&lcd0);
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, 0x1030); // Entry Mode (R03h)
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*)(&castedBuff[i]),1);
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