一、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.关于移植时,读当前像素点的颜 {MOD}的函数:static void LcdReadDataMultiple(U16 * pData, int NumItems);这个函数里的移植该怎么写呢?
比如,我现在的读点颜 {MOD}的函数是这样的:
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的函数决定读哪里坐标的颜 {MOD},是这样吗?我是不用关心的,即不需要LCD_set_windows这个函数?
第二,移植时,是否要把LCD_wtREG(0x2E);加入? 因为还没有在emWIN手册上看到有这一块的详细介绍,凭其他网友所给资料所讲述,我猜想,emWIN既然支持ILI9341,那么emWIN函数要读取像素点颜 {MOD}时,它应该已经做了发送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++)); //此函数已经在我的样机上正常使用
}
}
第四、读像素点的颜 {MOD}
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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
用 SPI 就没有这个地址了, 底层驱动部分你得重做才行
嗯嗯,我已经知道怎么解决了,谢谢哈!
三、移植细节
关于移植,你要仔细看看这两个地方:
GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0);
和
pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
我的移植不成功的问题就来自此。这两个函数代表了不同的底层驱动代码,即是说,emwin有两种接入你自己写的LCD驱动。一种的完全的IO操作(即发指令,发数据),另一种是接入你写好的画点,画直线这些函数。
你仔细看安福莱的教程就能明白。我开始就是没有弄清楚。
一周热门 更多>