我是靠谱客的博主 犹豫季节,最近开发中收集的这篇文章主要介绍[MTK] [LCM]ili9806c和ili9805c开启ESD机制使用过程概率性出现上方闪线,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
[DESCRIPTION]
ili9806c和ili9805c在开启ESD机制使用过程中概率性出现闪线,闪线颜色和当前屏幕最下方颜色类似,而关闭ESD,则不会复现问题
[SOLUTION]
该问题原因是ILITEK这两颗video mode IC在停掉数据后会内部启count报Hsync,再开启ESD机制后,read完寄存器后,其内部Hsync有可能会撞到第一次的Vsync,这样就会导致HS的第一条line异常,采用最后一条line去补到第一条line。
可以如下修改:
mediatekplatformmt6572kerneldriversvideodsi_drv.c
添加如下红色部分code
DSI_STATUS DSI_StartTransfer(bool isMutexLocked)
{
……
DSI_WaitForEngineNotBusy();
#if 1 //3 add by MTK haitao for send Hsync package
while(DSI_REG->DSI_INTSTA.BUSY);
{
……
DSI_WaitForEngineNotBusy();
#if 1 //3 add by MTK haitao for send Hsync package
while(DSI_REG->DSI_INTSTA.BUSY);
OUTREG32(&DSI_REG->DSI_INTSTA, 0x0);
DSI_clk_HS_mode(1);
DSI_BackUpCmdQ();
DSI_SetMode(CMD_MODE);
UTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,RD_RDY,0);
UTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,CMD_DONE,0);
OUTREG32(&DSI_CMDQ_REG->data[0], 0x00002100);
OUTREG32(&DSI_REG->DSI_CMDQ_SIZE, 1);
OUTREGBIT(DSI_START_REG,DSI_REG->DSI_START,DSI_START,0);
OUTREGBIT(DSI_START_REG,DSI_REG->DSI_START,DSI_START,1);
while(DSI_REG->DSI_INTSTA.CMD_DONE == 0);
OUTREGBIT(DSI_INT_STATUS_REG,DSI_REG->DSI_INTSTA,CMD_DONE,0);
UDELAY(20);
OUTREG32(&DSI_CMDQ_REG->data[0], 0x00003100);
OUTREG32(&DSI_REG->DSI_CMDQ_SIZE, 1);
OUTREGBIT(DSI_START_REG,DSI_REG->DSI_START,DSI_START,0);
OUTREGBIT(DSI_START_REG,DSI_REG->DSI_START,DSI_START,1);
while(DSI_REG->DSI_INTSTA.CMD_DONE == 0);
OUTREGBIT(DSI_INT_STATUS_REG,DSI_REG->DSI_INTSTA,CMD_DONE,0);
OUTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,RD_RDY,1);
OUTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,CMD_DONE,1);
DSI_RestoreCmdQ();
DSI_SetMode(lcm_params->dsi.mode);
DSI_clk_HS_mode(1);
#endif
// To trigger frame update.
DSI_Start();
……
}
DSI_clk_HS_mode(1);
DSI_BackUpCmdQ();
DSI_SetMode(CMD_MODE);
UTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,RD_RDY,0);
UTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,CMD_DONE,0);
OUTREG32(&DSI_CMDQ_REG->data[0], 0x00002100);
OUTREG32(&DSI_REG->DSI_CMDQ_SIZE, 1);
OUTREGBIT(DSI_START_REG,DSI_REG->DSI_START,DSI_START,0);
OUTREGBIT(DSI_START_REG,DSI_REG->DSI_START,DSI_START,1);
while(DSI_REG->DSI_INTSTA.CMD_DONE == 0);
OUTREGBIT(DSI_INT_STATUS_REG,DSI_REG->DSI_INTSTA,CMD_DONE,0);
UDELAY(20);
OUTREG32(&DSI_CMDQ_REG->data[0], 0x00003100);
OUTREG32(&DSI_REG->DSI_CMDQ_SIZE, 1);
OUTREGBIT(DSI_START_REG,DSI_REG->DSI_START,DSI_START,0);
OUTREGBIT(DSI_START_REG,DSI_REG->DSI_START,DSI_START,1);
while(DSI_REG->DSI_INTSTA.CMD_DONE == 0);
OUTREGBIT(DSI_INT_STATUS_REG,DSI_REG->DSI_INTSTA,CMD_DONE,0);
OUTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,RD_RDY,1);
OUTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,CMD_DONE,1);
DSI_RestoreCmdQ();
DSI_SetMode(lcm_params->dsi.mode);
DSI_clk_HS_mode(1);
#endif
// To trigger frame update.
DSI_Start();
……
}
最后
以上就是犹豫季节为你收集整理的[MTK] [LCM]ili9806c和ili9805c开启ESD机制使用过程概率性出现上方闪线的全部内容,希望文章能够帮你解决[MTK] [LCM]ili9806c和ili9805c开启ESD机制使用过程概率性出现上方闪线所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复