本帖最后由 EDA3rd 于 2017-6-29 02:12 编辑
ATK 7寸屏 (V1版本)在战舰板上做综合实验时,加载主界面异常:
开机检测正常,且点击时能显示高亮图标(上面三排图标一个时刻只能点击显示其中一个,下面两排点一个亮一个,且能保留),说明LCD画点代码是没问题的,看来是spb代码问题,每次显示主界面都会调用 slcd_frame_show函数画进行dma刷新LCD界面,而dma的源就是sramlcdbuf,那么sramlcdbuf是如何布局的?x方向和y方向怎么定义?
为什么描点坐标是是x*spbdev.spbheigh + y 而不是y*spbdev.spbheigh + x?
u16 *sramlcdbuf; //SRAM LCD BUFFER,背景图片显存区
//在指定位置画点.
//x,y:坐标
//color:颜 {MOD}.
void slcd_draw_point(u16 x,u16 y,u16 color)
{
sramlcdbuf[y+x*spbdev.spbheight+spbdev.frame*spbdev.spbheight*spbdev.spbwidth]=color;
}
因为ATK-7寸屏的坐标始终是横屏的长边为x轴,短边为y轴,所以用dma方式填充lcd需要考虑起点和方向问题,另外为什么要在dma之前使用LCD_Scan_Dir修改扫描方式?所有LCD芯片都要这么做?
我修改了slcd_frame_show函数代码:
//显示一帧,即启动一次spi到lcd的显示.
//x:坐标偏移量
void slcd_frame_show(u32 x)
{
//LCD_Scan_Dir(U2D_L2R); //设置扫描方向
//LCD_Set_Window(0,spbdev.stabarheight,spbdev.spbwidth,spbdev.spbheight);
LCD_Set_Window(0,0,lcddev.width,lcddev.height);//恢复默认窗口大小
LCD_SetCursor(0,spbdev.stabarheight);
LCD_WriteRAM_Prepare(); //开始写入GRAM
slcd_dma_enable(x);
//LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认方向
LCD_Set_Window(0,0,lcddev.width,lcddev.height);//恢复默认窗口大小
}
但是主界面还是不正常。
例程里面关于7寸屏的驱动程序不是十分合适,最好自己按照芯片说明书写一个专用的。
我自己用7寸屏时,就是这样做的
已经写了,gt811的代码也改了,例程的原生代码根本不支持竖屏。关键还是spb填充的问题
注意这是v1版本的7寸屏,采用CPLD方案,不是1963芯片
一周热门 更多>