##// END OF EJS Templates
added text painter on ili9328
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL -
r37:b6a4710d362a dev_alexis
parent child
Show More
@@ -1,3 +1,7
1 CPU=stm32f4xxxG
1 CPU=stm32f4xxxG
2 DEFINES+=BSP=\\\"BEAGLESYNTH\\\"
2 DEFINES+=BSP=\\\"BEAGLESYNTH\\\"
3 include($$(libuc2)/rules/stm32f4-arm-none-eabi-gcc/rules.pri)
3 include($$(libuc2)/rules/stm32f4-arm-none-eabi-gcc/rules.pri)
4
5 beagleCp.target = beagleCp
6 beagleCp.commands = scp $$DESTDIR/$(QMAKE_TARGET).bin root@192.168.7.2://opt/stm32flashAje/hello.bin
7 QMAKE_EXTRA_TARGETS += beagleCp
@@ -150,10 +150,10 int bsp_FSMC_init()
150 /*----------------------- SRAM Bank 3 ----------------------------------------*/
150 /*----------------------- SRAM Bank 3 ----------------------------------------*/
151 /* FSMC_Bank1_NORSRAM4 configuration */
151 /* FSMC_Bank1_NORSRAM4 configuration */
152 //p.FSMC_AddressSetupTime = 5;
152 //p.FSMC_AddressSetupTime = 5;
153 p.FSMC_AddressSetupTime = 2;
153 p.FSMC_AddressSetupTime = 1;
154 p.FSMC_AddressHoldTime = 0;
154 p.FSMC_AddressHoldTime = 0;
155 //p.FSMC_DataSetupTime = 9;
155 //p.FSMC_DataSetupTime = 9;
156 p.FSMC_DataSetupTime = 4;
156 p.FSMC_DataSetupTime = 11;
157 p.FSMC_BusTurnAroundDuration = 0;
157 p.FSMC_BusTurnAroundDuration = 0;
158 p.FSMC_CLKDivision = 0;
158 p.FSMC_CLKDivision = 0;
159 p.FSMC_DataLatency = 0;
159 p.FSMC_DataLatency = 0;
@@ -239,7 +239,6 void bspsdcardselect(char YESNO)
239
239
240 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data)
240 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data)
241 {
241 {
242 printf("Write %X @ %d\n\r",data,reg);
243 *lcd0_CMD=(uint16_t)reg;
242 *lcd0_CMD=(uint16_t)reg;
244 *lcd0_DATA=(uint16_t)data;
243 *lcd0_DATA=(uint16_t)data;
245 }
244 }
@@ -252,14 +251,12 uint32_t bsp_lcd0_read_reg(uint32_t reg)
252
251
253 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
252 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
254 {
253 {
255 printf("Write to GRAM %d pixels from 0x%X\t\n\r",count,(int)buffer);
256 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
254 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
257 uint16_t* castedBuff=(uint16_t*)buffer;
255 uint16_t* castedBuff=(uint16_t*)buffer;
258 for(int i=0;i<(int)count;i++)
256 for(int i=0;i<(int)count;i++)
259 {
257 {
260 *lcd0_DATA=castedBuff[i];
258 *lcd0_DATA=castedBuff[i];
261 }
259 }
262 printf("[Done]\n\r");
263 }
260 }
264
261
265 void bsp_lcd0_readGRAM(void* buffer,uint32_t count)
262 void bsp_lcd0_readGRAM(void* buffer,uint32_t count)
@@ -12,6 +12,18
12
12
13 extern streamdevice* __opnfiles__[];
13 extern streamdevice* __opnfiles__[];
14
14
15 #define LCD_COLOR_WHITE 0xFFFF
16 #define LCD_COLOR_BLACK 0x0000
17 #define LCD_COLOR_GREY 0xF7DE
18 #define LCD_COLOR_BLUE 0x001F
19 #define LCD_COLOR_BLUE2 0x051F
20 #define LCD_COLOR_RED 0xF800
21 #define LCD_COLOR_MAGENTA 0xF81F
22 #define LCD_COLOR_GREEN 0x07E0
23 #define LCD_COLOR_CYAN 0x7FFF
24 #define LCD_COLOR_YELLOW 0xFFE0
25
26
15 int main()
27 int main()
16 {
28 {
17 INA226_t ina5VSens,ina33VSens,ina15VSens;
29 INA226_t ina5VSens,ina33VSens,ina15VSens;
@@ -22,34 +34,20 int main()
22 //ina226open(&ina15VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,1,0,15,1000000);
34 //ina226open(&ina15VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,1,0,15,1000000);
23 *regtest=(int16_t)0;
35 *regtest=(int16_t)0;
24 printf("LCD ID=%x\n\r",0xFFFF&(*regtest2));
36 printf("LCD ID=%x\n\r",0xFFFF&(*regtest2));
25 //lcd0.refreshenable(&lcd0,1);
37 uint16_t x=90,y=0;
38 ili9328paintFilRect(&lcd0,0,0,240,320,0x01F,0x01F);
39 // ili9328paintText(&lcd0,"Hello",14,38,&Font16x24,0);
40 ili9328paintText(&lcd0,"Hello",10,34,&Font16x24,0xF800);
26 while(1)
41 while(1)
27 {
42 {
28 //ili9328setFrame(&lcd0,0,0,240,320);
43 ili9328paintText(&lcd0," World !",90,y+24,&Font16x24,0xF800);
29 //ili9328setGRAMaddress(&lcd0,0,0);
44 ili9328paintFilRect(&lcd0,x,y,20,20,0x01F,0xF800);
30 *regtest=(int16_t)0x20;
45 for(volatile int i=0;i<(320*500);i++);
31 *regtest2=(int16_t)0x0;
46 ili9328paintFilRect(&lcd0,90,y,150,24,0x01F,0x01F);
32 *regtest=(int16_t)0x21;
47 ili9328paintFilRect(&lcd0,x,y,20,20,0x01F,0x01F);
33 *regtest2=(int16_t)0x0;
48 y+=10;
34 *regtest=(int16_t)0x22;
49 if(y>290){y=0;x+=20;}
35 for(int i=0;i<(320*240);i++)
50 if(x>220){x=90;}
36 {
37 *regtest2=(int16_t)0x001F;
38 }
39 for(volatile int i=0;i<(320*240*100);i++);
40 //uint16_t test[100];
41 //ili9328setFrame(&lcd0,10,10,10,10);
42 //*regtest=(int16_t)0x22;
43 //for(int i=0;i<(10*10);i++)
44 //{
45 // *regtest2=(int16_t)(0xF800);
46 //test[i]=(int16_t)0xF800;
47 //for(volatile int l=0;l<(1024);l++);
48
49 //}
50 //bsp_lcd0_writeGRAM(test,10*10);
51 //lcd0.paint(&lcd0,test,100,100,80,80);
52 //for(volatile int i=0;i<(320*240*100);i++);
53 }
51 }
54
52
55 if(-1==ina226open(&ina33VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,0,1,15,1000000))
53 if(-1==ina226open(&ina33VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,0,1,15,1000000))
@@ -25,11 +25,14
25 #include <uhandle.h>
25 #include <uhandle.h>
26 #include <genericLCD_Controler.h>
26 #include <genericLCD_Controler.h>
27 #include <stdint.h>
27 #include <stdint.h>
28 #include <fonts.h>
28
29
29 extern int ili9328init(struct LCD_t* LCD);
30 extern int ili9328init(struct LCD_t* LCD);
30 extern void ili9328setFrame(LCD_t* LCD,uint16_t X,uint16_t Y,uint16_t W,uint16_t H);
31 extern void ili9328setFrame(LCD_t* LCD,uint16_t X,uint16_t Y,uint16_t W,uint16_t H);
31 extern void ili9328setGRAMaddress(LCD_t* LCD,uint16_t Haddress,uint16_t Vaddress);
32 extern void ili9328setGRAMaddress(LCD_t* LCD,uint16_t Haddress,uint16_t Vaddress);
32 extern void ili9328paint(LCD_t* LCD,void* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t Width,uint16_t Height);
33 extern void ili9328paint(LCD_t* LCD,void* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t Width,uint16_t Height);
34 extern void ili9328paintText(LCD_t* LCD,char* buffer,uint16_t Xpos,uint16_t Ypos,sFONT *font,uint32_t color);
35 extern void ili9328paintFilRect(LCD_t* LCD,uint16_t Xpos,uint16_t Ypos,uint16_t w,uint16_t h,uint32_t contColor,uint32_t fillColor);
33 extern void ili9328refreshenable(struct LCD_t* LCD,int enable);
36 extern void ili9328refreshenable(struct LCD_t* LCD,int enable);
34
37
35 #define ILI9328_REGISTER_DRIVERCODEREAD ((uint32_t) 0x0000 )
38 #define ILI9328_REGISTER_DRIVERCODEREAD ((uint32_t) 0x0000 )
@@ -46,24 +46,70 void ili9328refreshenable(struct LCD_t*
46
46
47 void ili9328setFrame(LCD_t* LCD,uint16_t X,uint16_t Y,uint16_t W,uint16_t H)
47 void ili9328setFrame(LCD_t* LCD,uint16_t X,uint16_t Y,uint16_t W,uint16_t H)
48 {
48 {
49 printf("setFrame X=%d Y=%d W=%d H=%d\n\r",(int)X,(int)Y,(int)W,(int)H);
49 LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET,(uint32_t)X);
50 LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET,X);
50 LCD->interface->writereg(ILI9328_REGISTER_VERTICALGRAMADDRESSSET,(uint32_t)Y);
51 LCD->interface->writereg(ILI9328_REGISTER_VERTICALGRAMADDRESSSET,Y);
51 LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION,(uint32_t)X);
52 LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION,X);
52 LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION,(uint32_t)(W+X-1));
53 LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION,X);
53 LCD->interface->writereg(ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION,(uint32_t)Y);
54 LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION,W+X);
54 LCD->interface->writereg(ILI9328_REGISTER_VERTICALADDRESSENDPOSITION,(uint32_t)(Y+H-1));
55 LCD->interface->writereg(ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION,Y);
56 LCD->interface->writereg(ILI9328_REGISTER_VERTICALADDRESSENDPOSITION,Y+H);
57 }
55 }
58
56
59 void ili9328paint(LCD_t* LCD,void* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t Width,uint16_t Height)
57 void ili9328paint(LCD_t* LCD,void* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t Width,uint16_t Height)
60 {
58 {
61 if((LCD!=NULL) && (LCD->interface!=NULL) && (LCD->interface->writeGRAM!=NULL) && (LCD->width<(Xpos+Width)) && (LCD->height<(Ypos+Height)))
59 if((LCD!=NULL) && (LCD->interface!=NULL) && (LCD->interface->writeGRAM!=NULL) && (LCD->width>(Xpos+Width)) && (LCD->height>(Ypos+Height)))
60 {
61 ili9328setFrame(LCD,Xpos,Ypos,Width,Height);
62 LCD->interface->writeGRAM(buffer,Width*Height);
63 }
64 }
65
66 void ili9328paintFilRect(LCD_t* LCD,uint16_t Xpos,uint16_t Ypos,uint16_t w,uint16_t h,uint32_t contColor,uint32_t fillColor)
67 {
68 ili9328setFrame(LCD,Xpos,Ypos,w,h);
69 uint16_t tmp[32];
70 for(int i=0;i<32;i++)tmp[i]=fillColor;
71 for(int i=0;i<(h*w);i+=32)
72 {
73 LCD->interface->writeGRAM(tmp,32);
74 }
75 int rem=(w*h)%32;
76 if(rem)LCD->interface->writeGRAM(tmp,rem);
77 }
78
79 void ili9328paintText(LCD_t* LCD,char* buffer,uint16_t Xpos,uint16_t Ypos,sFONT* font,uint32_t color)
80 {
81 int w=font->Width,h=font->Height,pix=0,tableoffset=0;
82 uint16_t tmp[w];
83 uint16_t line=0,linenum=0,charnum=0;
84 while(*buffer)
62 {
85 {
63 printf("paint\n\r");
86 ili9328setFrame(LCD,Xpos+(charnum*w),Ypos-h,w,1);
64 ili9328setFrame(LCD,Xpos,Ypos,Width,Height);
87 LCD->interface->readGRAM(tmp,w);
65 //ili9328setGRAMaddress(LCD,Xpos,Ypos);
88 for(int i=0;i<(h*w);i++)
66 LCD->interface->writeGRAM(buffer,Width*Height);
89 {
90 if( ((i%w)==0) ) //read current line to apply text pixmap
91 {
92 if(linenum++>0)
93 {
94 ili9328setFrame(LCD,Xpos+(charnum*w),Ypos + linenum -h,w,1);
95 LCD->interface->writeGRAM(tmp,w);
96 ili9328setFrame(LCD,Xpos+(charnum*w),Ypos + linenum + 1-h,w,1);
97 LCD->interface->readGRAM(tmp,w);
98 pix=0;
99 }
100 }
101 if((i%16) == 0)
102 {
103 line=font->table[(((*buffer)-32)*h)+tableoffset++];
104 }
105 if((line & 0x0001)==1)tmp[pix]=(uint16_t)color;
106 pix++;
107 line>>=1;
108 }
109 linenum=0;
110 tableoffset=0;
111 charnum++;
112 buffer++;
67 }
113 }
68 }
114 }
69
115
@@ -74,7 +120,7 int ili9328init(struct LCD_t* LCD)
74 LCD->interface->writereg(ILI9328_REGISTER_DRIVEROUTPUTCONTROL1, 0x0100); // Driver Output Control Register (R01h)
120 LCD->interface->writereg(ILI9328_REGISTER_DRIVEROUTPUTCONTROL1, 0x0100); // Driver Output Control Register (R01h)
75 LCD->interface->writereg(ILI9328_REGISTER_LCDDRIVINGCONTROL, 0x0700); // LCD Driving Waveform Control (R02h)
121 LCD->interface->writereg(ILI9328_REGISTER_LCDDRIVINGCONTROL, 0x0700); // LCD Driving Waveform Control (R02h)
76 LCD->interface->writereg(ILI9328_REGISTER_ENTRYMODE, 0x1030); // Entry Mode (R03h)
122 LCD->interface->writereg(ILI9328_REGISTER_ENTRYMODE, 0x1030); // Entry Mode (R03h)
77 LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL2, 0x0302);
123 LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL2, 0x0202);
78 LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL3, 0x0000);
124 LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL3, 0x0000);
79 LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL4, 0x0000); // Fmark On
125 LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL4, 0x0000); // Fmark On
80 LCD->interface->writereg(ILI9328_REGISTER_POWERCONTROL1, 0x0000); // Power Control 1 (R10h)
126 LCD->interface->writereg(ILI9328_REGISTER_POWERCONTROL1, 0x0000); // Power Control 1 (R10h)
@@ -110,9 +156,7 int ili9328init(struct LCD_t* LCD)
110 // Display On
156 // Display On
111 LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL1, 0x0133); // Display Control (R07h)
157 LCD->interface->writereg(ILI9328_REGISTER_DISPLAYCONTROL1, 0x0133); // Display Control (R07h)
112 _delay_(500000);
158 _delay_(500000);
113 LCD->interface->writereg(ILI9328_REGISTER_ENTRYMODE, 0x1018);
159 LCD->interface->writereg(ILI9328_REGISTER_ENTRYMODE, 0x0038);
114 LCD->interface->writereg(ILI9328_REGISTER_DRIVEROUTPUTCONTROL1, 0x0100);
115 //ili9328WriteCmd(ILI9328_REGISTER_WRITEDATATOGRAM);
116 }
160 }
117 return 0;
161 return 0;
118 }
162 }
@@ -12,7 +12,7 extern int main();
12 void cpu_init()
12 void cpu_init()
13 {
13 {
14 extern uint32_t currentCpuFreq;
14 extern uint32_t currentCpuFreq;
15 currentCpuFreq = 140000000;
15 currentCpuFreq = 160000000;
16 enable_FPU();
16 enable_FPU();
17 RCC->CR |= (uint32_t)0x00000001;
17 RCC->CR |= (uint32_t)0x00000001;
18 FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
18 FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
General Comments 0
You need to be logged in to leave comments. Login now