OpenEdv-开源电子网

标题: 9486 EMwin鼠标异常 [打印本页]

作者: yangmiao0223    时间: 2018-8-8 19:58
标题: 9486 EMwin鼠标异常
STMF407 LIL9486 移植EMWIN后鼠标异常http://www.openedv.com/forum.php ... &fromuid=113251
(出处: OpenEdv-嵌入式技术学习分享网)

用这个帖子的方法,使用ILI9486的屏 在阿波罗核心板+母版都没问题。

但是用阿波罗核心板+上自己的母版的时候,鼠标就变黑静止不动了。请看图,注意左上角的黑色鼠标(hello world 旁边),本来应该是白色的啊。查了下,鼠标打点函数打的就是0x0000的颜色(应该就是黑色吧)。程序唯一的区别就是之前用的FMC的NE1 (阿波罗母版) ,现在用的NE4(自己的母版)。求大神解答下
(, 下载次数: 12)


u32 LCD_ReadPoint(u16 x,u16 y)  
{
        u16 r=0,g=0,b=0;
        if(x>=lcddev.width||y>=lcddev.height)return 0;        //超过了范围,直接返回
        LCD_SetCursor(x,y);            
        if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X1963||lcddev.id==0X9486)LCD_WR_REG(0X2E);//9341/3510/1963 发送读GRAM指令
        else if(lcddev.id==0X5510)LCD_WR_REG(0X2E00);        //5510 发送读GRAM指令
        r=LCD_RD_DATA();                                                                //dummy Read          
        if(lcddev.id==0X1963)return r;                                        //1963直接读就可以
        opt_delay(2);          
        r=LCD_RD_DATA();                                                                    //实际坐标颜色
        if(lcddev.id==0X9486)return r;
        //9341/NT35310/NT35510要分2次读出
        opt_delay(2);                                           
        b=LCD_RD_DATA();
        g=r&0XFF;                //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位
        g<<=8;
        return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));        //ILI9341/NT35310/NT35510需要公式转换一下
}


void LCD_SetCursor(u16 Xpos, u16 Ypos)
{         
        if(lcddev.id==0X9341||lcddev.id==0X5310)
        {                    
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);                          
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(Ypos>>8);LCD_WR_DATA(Ypos&0XFF);                
        }
        else if(lcddev.id==0X9486)
        {
        LCD_WR_REG(lcddev.setxcmd);       
        LCD_WR_DATA(Xpos>>8);
        LCD_WR_DATA(0x00FF&Xpos);               
        LCD_WR_DATA(((lcddev.width - 1) )>>8);
        LCD_WR_DATA(((lcddev.width - 1) ));
//       
        LCD_WR_REG(lcddev.setycmd);       
        LCD_WR_DATA(Ypos>>8);
        LCD_WR_DATA(0x00FF&Ypos);               
        LCD_WR_DATA(((lcddev.height - 1) )>>8);
        LCD_WR_DATA(((lcddev.height - 1) ));
        //LCD_WriteRAM_Prepare();        //开始写入GRAM               
        }

}


作者: yangmiao0223    时间: 2018-8-8 19:58
h418452224 发表于 2018-8-24 09:56
楼主,问题解决了么?我是同样的问题啊。卡了两三天了。NE4改成了NE1,EMWIN战舰的汉字显示实验移植到我的板 ...

在EMWIN的驱动里  有个NE1的地址 也要改为NE4   总共要改两处地方
作者: 正点原子    时间: 2018-8-9 01:27
帮顶
作者: yangmiao0223    时间: 2018-8-10 11:52
同样的程序,同样的“秀鼠标'的函数“        GUI_CURSOR_Show()”,使用NE1和 NE4的区别如附件图:
但我仅仅只改了
        SRAM_Handler.Init.NSBank=FMC_NORSRAM_BANK4;     //使用NE4

#define LCD_BASE        ((u32)(0x6c000000 | 0x0007FFFE));这两条语句
为什么GUI_CURSOR_Show()的示波器图会不一样?
作者: yangmiao0223    时间: 2018-8-10 11:54
正点原子 发表于 2018-8-9 01:27
帮顶

原子哥  帮忙看一下。
作者: yangmiao0223    时间: 2018-8-10 11:56
忘记说了,黄色的是DB0,蓝色的是LCD的CS信号
作者: h418452224    时间: 2018-8-24 09:56
楼主,问题解决了么?我是同样的问题啊。卡了两三天了。NE4改成了NE1,EMWIN战舰的汉字显示实验移植到我的板子上,鼠标一直在最左上角,请教楼主,解决的话分享下方法,万分感谢了!!
作者: h418452224    时间: 2018-9-7 15:24
yangmiao0223 发表于 2018-8-8 19:58
在EMWIN的驱动里  有个NE1的地址 也要改为NE4   总共要改两处地方

是的,我已经改过来了。LCD_BASE的地址




欢迎光临 OpenEdv-开源电子网 (http://www.openedv.com/) Powered by Discuz! X3.4