初级会员
- 积分
- 101
- 金钱
- 101
- 注册时间
- 2016-6-13
- 在线时间
- 31 小时
|
楼主 |
发表于 2016-9-23 10:27:55
|
显示全部楼层
自己解决了,孜孜不倦则必有所得,寄存器版本的EMWIN移植的时候GUIDRV_Template.c文件移植的读点函数本身就有误,在TFT_LCD.c文件里有它的原型,错误版本如下:
/* 逐个读点 */
u16 LCD_ReadPoint(u16 x,u16 y)
{
u16 r,g,b;
TFT_LCD->TFT_LCD_REG=0X2A00;
TFT_LCD->TFT_LCD_RAM=x>>8;
TFT_LCD->TFT_LCD_REG=0X2A01;
TFT_LCD->TFT_LCD_RAM=x&0XFF;
TFT_LCD->TFT_LCD_REG=0X2B00;
TFT_LCD->TFT_LCD_RAM=y>>8;
TFT_LCD->TFT_LCD_REG=0X2B01;
TFT_LCD->TFT_LCD_RAM=y&0XFF;
TFT_LCD->TFT_LCD_REG=0X2E00;
r=TFT_LCD->TFT_LCD_RAM;
opt_delay(2);
r=TFT_LCD->TFT_LCD_RAM;
opt_delay(2);
b=TFT_LCD->TFT_LCD_RAM;
g=r&0XFF; //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位
return (((r>>11)<<11)|((g<<3))|(b>>11));
}
正确版本如下:
/* 逐个读点 */
u16 LCD_ReadPoint(u16 x,u16 y)
{
u16 r,g,b;
TFT_LCD->TFT_LCD_REG=0X2A00;
TFT_LCD->TFT_LCD_RAM=x>>8;
TFT_LCD->TFT_LCD_REG=0X2A01;
TFT_LCD->TFT_LCD_RAM=x&0XFF;
TFT_LCD->TFT_LCD_REG=0X2B00;
TFT_LCD->TFT_LCD_RAM=y>>8;
TFT_LCD->TFT_LCD_REG=0X2B01;
TFT_LCD->TFT_LCD_RAM=y&0XFF;
TFT_LCD->TFT_LCD_REG=0X2E00;
r=TFT_LCD->TFT_LCD_RAM;
opt_delay(2);
r=TFT_LCD->TFT_LCD_RAM;
opt_delay(2);
b=TFT_LCD->TFT_LCD_RAM;
g=r&0XFC; //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位
return (((r>>11)<<11)|((g<<3))|(b>>11));
}
仅仅是g=r&0XFC(正确)g=r&0XFF(错误)这个问题搞了一天。
改之后寄存器版本的EMWIN的移植还是可以的,用STemwin的综合演示例程弄过了。
另外UCOSIII的也是可以的,已经用来跑过所有原子个的扩展例程了。欢迎大家参考
|
|