双屏如何实现(同尺寸,同UI) --(已解决)
--
在坛子里大虾们的支招下,总数基本解决了,到最近才发现硬件上本身就不合理。
之前是2个屏2个片选。解决方法 是软件上无subLCD,相当于硬件上2个物理屏,像老蒋说的,共用一个framebuffer,2个数据传输地址,开始时总是初始化,主要初始化命令区别,通过霍尔开关,在blockwrite中我做了 选择片选输出处理。最后总算是把副屏搞亮,显示了。不过这种最后即使成功了,还是有不少问题的,如切换刷屏速度的问题,很容易造成花屏,还是其他的 背光的处理,背光灭后buffer被清掉等等。
后来 和老大,硬件那边一起讨论,才发现硬件上处理就不完善,对于同SIZE,UI的应该直接就搞一个片选,自动同时显示就可以了,只要处理下背光就好了。不要弄2个搞的复杂了,也不好处理
直接用模拟开关切,所有的PIN都复用,这样可能还快些,
可以两个屏用同一个LCD BUFF。
小编这个主意不错,用clamshell中断模拟开关,用一个framebuf,最快的方式了。
我认为开机第一次都初始化就行了,后面只需要运行SLEEP的代码就行了。
因为只要LCD的IC没有掉电,是不需要每次都初始化。
嗯,我现在单MMI,双物理屏,合盖后没切换过来,是白屏的
#ifdef __MMI_CLAMSHELL__ /* { */
case EXT_DEV_CLAM_OPEN: /* Clam open */
{
g_clam_state = 1;
if (!srv_bootup_is_launched() || srv_shutdown_is_running())
{
MMI_TRACE(MMI_COMMON_TRC_G8_DEV, TRC_MMI_GPIO_IND_BEFORE_POWER_ON);
return;
}
#if defined(__XF_F99_DUAL_SAMESIZE_SUBLCD__)
xf_sublcd_singble_bl_set_onoff(0);
LCD_cs_change_to_main(); /*LCD_SET_ROI_CMD_ADDR(LCD_PARALLEL0_A0_LOW_ADDR);LCD_SET_ROI_DATA_ADDR(LCD_PARALLEL0_A0_HIGH_ADDR);*/
#endif
srv_gpio_post_event(EVT_ID_GPIO_CLAM_OPEN);
break;
}
case EXT_DEV_CLAM_CLOSE: /* Clam close */
{
g_clam_state = 0;
if (!srv_bootup_is_launched() || srv_shutdown_is_running())
{
MMI_TRACE(MMI_COMMON_TRC_G8_DEV, TRC_MMI_GPIO_IND_BEFORE_POWER_ON);
return;
}
#if defined(__XF_F99_DUAL_SAMESIZE_SUBLCD__)
xf_sublcd_singble_bl_set_onoff(1);
LCD_cs_change_to_sub(); /*LCD_SET_ROI_CMD_ADDR(LCD_PARALLEL1_A0_LOW_ADDR);LCD_SET_ROI_DATA_ADDR(LCD_PARALLEL1_A0_HIGH_ADDR);*/
#endif
srv_gpio_post_event(EVT_ID_GPIO_CLAM_CLOSE);
break;
}
#endif /* __MMI_CLAMSHELL__ */ /* } */
难道是我这里切换片选不对? 还是片选对了,没跑到合适的驱动呢
有一个问题,面要说明一下,没有看现在的代码,我说一下思路
你现在这个因有霍尔开关,他在合上屏后,有可能将主屏的BUFF清空了。并且将主屏SLEEP。
这么一说,按我开始的思路,可能在你合上屏后,BUFF里是空的了。
哪么你这里应当在合上时不允许系统让LCD的BUFF清空。
理论上只要BB的LCD BUF没有清空,你在系统上将CS切到另一个屏后,并且重新将BB的LCD BUF里的内容在刷一次,哪么你的另一个屏是可以点亮的。
void LCD_cs_change_to_main(void)
{
LCD_SET_ROI_CMD_ADDR(LCD_PARALLEL0_A0_LOW_ADDR);
LCD_SET_ROI_DATA_ADDR(LCD_PARALLEL0_A0_HIGH_ADDR);
}
/*切换到副屏*/
void LCD_cs_change_to_sub(void)
{
LCD_SET_ROI_CMD_ADDR(LCD_PARALLEL1_A0_LOW_ADDR);
LCD_SET_ROI_DATA_ADDR(LCD_PARALLEL1_A0_HIGH_ADDR);
LCD_Init_ILI9327(0, NULL);
}
这与我说的意思完全不同。
问题已经解决,和你之前的意思不同的原因 还是2个片选造成的,block刷的时候不切不新
block刷的时候不切不新?
因为没有gpio控制,硬件是2个片选(之前出的需要是小屏12864的,板子就直接拿来用了),所以2路地址,我得切的,处理是很麻烦的,还好最后也被我搞的差不多了,不过效果就不太理想了,后面还是让硬件去改板吧
晕,笔误。我的意思目前硬件是2个片选的,所以显示的话还得切片选的,我在block刷的地方切换的
小编 有联系QQ吗
你这个不能用翻盖机的方式,你就用普通方式,切屏的时候,让mmi跑背光灭进入睡眠,确定盖上之后,跑点亮背光的函数,这样就可以了
这样会重新刷数据的,如果白屏,你就把屏退出睡眠的函数写成跟lcd init一样