中级会员
- 积分
- 203
- 金钱
- 203
- 注册时间
- 2013-8-15
- 在线时间
- 44 小时
|
5金钱
本帖最后由 xyzjacky 于 2018-1-9 13:15 编辑
一、emWIN移植询问和求助
本人有以下几个疑问,请各位指教:
1.有关LCD的寄存器和RAM操作地址。在别的网友贴出来的帖子中,有以下描述:
增加定义LCD寄存器、RAM操作地址,
#define LCD_BASE (uint32_t)(0x60000000 | 0x0001fffe) //基地址
#define LCD_REG_ADDRESS (*(volatile U16*)LCD_BASE) //寄存器地址
#define LCD_DATA_ADDRESS (*(volatile U16*)(LCD_BASE + 2)) //RAM地址
看样子这网友用的是ILI9341的。这里我就有一个疑问:这些地址是否是自己查资料找来的,还是因为emWIN含有ILI9341,只需要查emWIN使用手册就能找到?
然后,如果用的LCD的驱动芯片不被emWIN支持,岂不是就用不了了(知道怎么移植驱动,那就不存在这个问题)。
2.关于移植时,读当前像素点的颜色的函数:static void LcdReadDataMultiple(U16 * pData, int NumItems);这个函数里的移植该怎么写呢?
比如,我现在的读点颜色的函数是这样的:
unsigned short int LCD_Read_Point(unsigned short int cx,unsigned short int cy)
{
unsigned char r=0,g=0,b=0;
LCD_set_windows(cx,cy,cx,cy);
LCD_wtREG(0x2E);
LCD_Read_Data(); //只需要执行一次空读取
r = LCD_Read_Data();
g = LCD_Read_Data();
b = LCD_Read_Data();
LCD_wtREG(0x2C); //关键步骤,必须要有
return (((r>>3)<<11)|((g>>2)<<5)|(b>>3));
}
首先,我们读点的函数中,是加入了所读像素点的坐标。由于使用了emWIN,那就由调用emWIN的函数决定读哪里坐标的颜色,是这样吗?我是不用关心的,即不需要LCD_set_windows这个函数?
第二,移植时,是否要把LCD_wtREG(0x2E);加入? 因为还没有在emWIN手册上看到有这一块的详细介绍,凭其他网友所给资料所讲述,我猜想,emWIN既然支持ILI9341,那么emWIN函数要读取像素点颜色时,它应该已经做了发送0X2E的指令,是这样吗?
也就是说,只要在这个函数中static void LcdWriteReg(U16 Data),移植了我自己编写的、正确的写寄存器代码,那就能搞定读点,不需要我去关心有没有发0X2E指令,是吗?
3、几个关键的移植函数。请各位大神帮我看看,emWIN的移植是不是改写这三个函数,就能实现emWIN的绝大部分功能。
第一、写寄存器函数
static void LcdWriteReg(U16 Data) {
// ... TBD by user
LCD_wtREG((U8)Data); //此函数已经在我的样机上正常使用
}
第二、写一个16位数据
static void LcdWriteData(U16 Data) {
// ... TBD by user
LCD_wt16bitData(Data); //此函数已经在我的样机上正常使用
}
第三、连续写数据
static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
// ... TBD by user
LCD_wt16bitData(*(pData++)); //此函数已经在我的样机上正常使用
}
}
第四、读像素点的颜色
static void LcdReadDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
// ... TBD by user
// *(pData++) = LCD_Read_Data(); //就是这里让我不解,所以是被注释掉的。LCD_Read_Data函数是能正常使用的,已在我的样机上使用
}
}
二、STM32的硬件SPI驱动的ILI9341代码如下:(我是本论坛的新手,还不知道怎么发资源,管理员莫怪哈)
http:// download.csdn.net
/download/xyzjacky/10196062
|
最佳答案
查看完整内容[请看2#楼]
正点原子哥,我的问题已经解决了。是GUI_DEVICE_CreateAndLink函数创建的底层驱动接口不对。
我的应该是 GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0);
而非 pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
估计你们接触emWin的日子也不少了,希望你们能讲解一下这个地方:
GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0);
和
pDevice = ...
|