微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 双屏如何实现(同尺寸,同UI) --(已解决)

双屏如何实现(同尺寸,同UI) --(已解决)

时间:10-02 整理:3721RD 点击:
240x400 用的是一样大小的屏,要求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一样

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top