74

帖子

0

TA的资源

一粒金砂(初级)

21
 
引用 19 楼 shuiyan 的回复:
屏的初始化涉及:CPU的lcd控制器的配置,LCD供电,LCD配置(I2C或者SPI接口)。
这三部分是不是都在InitDisplay()里面?
如果都在,那就对比性的测一下cpu的lcd控制器的输出(点频、场频、行频)是否正确,lcd供电是否正确。
再用调试信息看看lcd的配置是否正确(如果可读的话)。


非常感谢shuiyan兄的耐心解答,我的CPU的lcd控制器的配置和LCD供电是在InitDisplay函数里面做的,LCD配置(SPI接口)是在背光驱动里面控制的初始化等工作的;另外,唤醒后用示波器测量cpu的lcd控制器的输出(点频、场频、行频)都是正确的;我急非常纳闷了,为什么图像出不来呢?数据流输出也有,真是奇了怪了...我想,肯定是有个细节的东西我没抓住

回复

56

帖子

0

TA的资源

一粒金砂(初级)

22
 
对了,我现在时节KITL调试的,和这个有没有关系呢?
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

23
 
挂起前后打印两次寄存器,对比是否一致。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

24
 
感觉上 需要看看挂起的时候是否对LCD做了错误的操作
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

25
 
引用 22 楼 gooogleman 的回复:
挂起前后打印两次寄存器,对比是否一致。


原函数:void OEMPowerOff()
{
    static UINT32 saveArea[51];
    int i;
    S3C2440A_INTR_REG *pIntr = (S3C2440A_INTR_REG*)OALPAtoVA(S3C2440A_BASE_REG_PA_INTR, FALSE);
    S3C2440A_IOPORT_REG *pIOPort = (S3C2440A_IOPORT_REG*)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE);
    S3C2440A_LCD_REG *pLCD = (S3C2440A_LCD_REG*)OALPAtoVA(S3C2440A_BASE_REG_PA_LCD, FALSE);

    // First do platform specific actions
    BSPPowerOff();

    // Then save system registers
    saveArea[0]  = INPORT32(&pIOPort->GPACON);
    saveArea[1]  = INPORT32(&pIOPort->GPADAT);
    saveArea[2]  = INPORT32(&pIOPort->GPBCON);
    saveArea[3]  = INPORT32(&pIOPort->GPBDAT);
    saveArea[4]  = INPORT32(&pIOPort->GPBDN);
    saveArea[5]  = INPORT32(&pIOPort->GPCCON);
    saveArea[6]  = INPORT32(&pIOPort->GPCDAT);
    saveArea[7]  = INPORT32(&pIOPort->GPCDN);
    saveArea[8]  = INPORT32(&pIOPort->GPDCON);
    saveArea[9]  = INPORT32(&pIOPort->GPDDAT);
    saveArea[10] = INPORT32(&pIOPort->GPDDN);
    saveArea[11] = INPORT32(&pIOPort->GPECON);
    saveArea[12] = INPORT32(&pIOPort->GPEDAT);
    saveArea[13] = INPORT32(&pIOPort->GPEDN);
    saveArea[14] = INPORT32(&pIOPort->GPFCON);
    saveArea[15] = INPORT32(&pIOPort->GPFDAT);
    saveArea[16] = INPORT32(&pIOPort->GPFDN);
    saveArea[17] = INPORT32(&pIOPort->GPGCON);
    saveArea[18] = INPORT32(&pIOPort->GPGDAT);
    saveArea[19] = INPORT32(&pIOPort->GPGDN);
    saveArea[20] = INPORT32(&pIOPort->GPHCON);
    saveArea[21] = INPORT32(&pIOPort->GPHDAT);
    saveArea[22] = INPORT32(&pIOPort->GPHDN);

    saveArea[23] = INPORT32(&pIOPort->MISCCR);
    saveArea[24] = INPORT32(&pIOPort->DCLKCON);
    saveArea[25] = INPORT32(&pIOPort->EXTINT0);
    saveArea[26] = INPORT32(&pIOPort->EXTINT1);
    saveArea[27] = INPORT32(&pIOPort->EXTINT2);
    saveArea[28] = INPORT32(&pIOPort->EINTFLT0);
    saveArea[29] = INPORT32(&pIOPort->EINTFLT1);
    saveArea[30] = INPORT32(&pIOPort->EINTFLT2);
    saveArea[31] = INPORT32(&pIOPort->EINTFLT3);
    saveArea[32] = INPORT32(&pIOPort->EINTMASK);

    saveArea[33] = INPORT32(&pIntr->INTMOD);
    saveArea[34] = INPORT32(&pIntr->INTMSK);
    saveArea[35] = INPORT32(&pIntr->INTSUBMSK);

    saveArea[36] = INPORT32(&pLCD->TCONSEL);
    saveArea[37] = INPORT32(&pLCD->LCDINTMSK);
    saveArea[38] = INPORT32(&pLCD->TPAL);
    saveArea[39] = INPORT32(&pLCD->DITHMODE);
    saveArea[40] = INPORT32(&pLCD->BLUELUT);
    saveArea[41] = INPORT32(&pLCD->GREENLUT);
    saveArea[42] = INPORT32(&pLCD->REDLUT);
    saveArea[43] = INPORT32(&pLCD->LCDSADDR3);
    saveArea[44] = INPORT32(&pLCD->LCDSADDR2);
    saveArea[45] = INPORT32(&pLCD->LCDSADDR1);
    saveArea[46] = INPORT32(&pLCD->LCDCON5);
    saveArea[47] = INPORT32(&pLCD->LCDCON4);
    saveArea[48] = INPORT32(&pLCD->LCDCON3);
    saveArea[49] = INPORT32(&pLCD->LCDCON2);
    saveArea[50] = INPORT32(&pLCD->LCDCON1);

    pLCD->LCDCON1   = 0;
    pLCD->LCDCON2   = 0;
    pLCD->LCDCON3   = 0;
    pLCD->LCDCON4   = 0;
    pLCD->LCDCON5   = 0;
    pLCD->LCDSADDR1 = 0;
    pLCD->LCDSADDR2 = 0;
    pLCD->LCDSADDR3 = 0;
    pLCD->TCONSEL    = 0;
    pLCD->TPAL      = 0;
   
    for(i=0; i<50; i++){   
        RETAILMSG(1,(TEXT("\t saveArea[%d] = 0x%08x\n"), i, saveArea));
    }

        ConfigStopGPIO();

    // Switch off power for KITL device
    OALKitlPowerOff();

    // Go to power off mode
    OALCPUPowerOff();

   
    // Switch on power for KITL device
    OALKitlPowerOn();
   
    /* Recover Process, Load CPU Regs       */
    OUTPORT32(&pIOPort->GPACON,   saveArea[0]);
    OUTPORT32(&pIOPort->GPADAT,   saveArea[1]);
    OUTPORT32(&pIOPort->GPBCON,   saveArea[2]);
    OUTPORT32(&pIOPort->GPBDAT,   saveArea[3]);
    OUTPORT32(&pIOPort->GPBDN,    saveArea[4]);
    OUTPORT32(&pIOPort->GPCCON,   saveArea[5]);
    OUTPORT32(&pIOPort->GPCDAT,   saveArea[6]);
    OUTPORT32(&pIOPort->GPCDN,    saveArea[7]);
    OUTPORT32(&pIOPort->GPDCON,   saveArea[8]);
    OUTPORT32(&pIOPort->GPDDAT,   saveArea[9]);
    OUTPORT32(&pIOPort->GPDDN,    saveArea[10]);
    OUTPORT32(&pIOPort->GPECON,   saveArea[11]);
    OUTPORT32(&pIOPort->GPEDAT,   saveArea[12]);
    OUTPORT32(&pIOPort->GPEDN,    saveArea[13]);
    OUTPORT32(&pIOPort->GPFCON,   saveArea[14]);
    OUTPORT32(&pIOPort->GPFDAT,   saveArea[15]);
    OUTPORT32(&pIOPort->GPFDN,    saveArea[16]);
    OUTPORT32(&pIOPort->GPGCON,   saveArea[17]);
    OUTPORT32(&pIOPort->GPGDAT,   saveArea[18]);
    OUTPORT32(&pIOPort->GPGDN,    saveArea[19]);
    OUTPORT32(&pIOPort->GPHCON,   saveArea[20]);
    OUTPORT32(&pIOPort->GPHDAT,   saveArea[21]);
    OUTPORT32(&pIOPort->GPHDN,    saveArea[22]);
                                
    OUTPORT32(&pIOPort->MISCCR,   saveArea[23]);
    OUTPORT32(&pIOPort->DCLKCON,   saveArea[24]);
    OUTPORT32(&pIOPort->EXTINT0,  saveArea[25]);
    OUTPORT32(&pIOPort->EXTINT1,  saveArea[26]);
    OUTPORT32(&pIOPort->EXTINT2,  saveArea[27]);
    OUTPORT32(&pIOPort->EINTFLT0, saveArea[28]);
    OUTPORT32(&pIOPort->EINTFLT1, saveArea[29]);
    OUTPORT32(&pIOPort->EINTFLT2, saveArea[30]);
    OUTPORT32(&pIOPort->EINTFLT3, saveArea[31]);
    OUTPORT32(&pIOPort->EINTMASK, saveArea[32]);

    OUTPORT32(&pIntr->INTMOD,     saveArea[33]);
    OUTPORT32(&pIntr->INTMSK,     saveArea[34]);
    OUTPORT32(&pIntr->INTSUBMSK,  saveArea[35]);
                                   
    pLCD->TCONSEL    =  saveArea[36];
    pLCD->LCDINTMSK =  saveArea[37];
    pLCD->TPAL      =  saveArea[38];
    pLCD->DITHMODE  =  saveArea[39];
    pLCD->BLUELUT   =  saveArea[40];
    pLCD->GREENLUT  =  saveArea[41];
    pLCD->REDLUT    =  saveArea[42];
    pLCD->LCDSADDR3 =  saveArea[43];
    pLCD->LCDSADDR2 =  saveArea[44];
    pLCD->LCDSADDR1 =  saveArea[45];
    pLCD->LCDCON5   =  saveArea[46];
    pLCD->LCDCON4   =  saveArea[47];
    pLCD->LCDCON3   =  saveArea[48];
    pLCD->LCDCON2   =  saveArea[49];
    pLCD->LCDCON1   =  saveArea[50];
       
    /* Interrupt Clear                      */
    OUTPORT32(&pIOPort->EINTPEND, INPORT32(&pIOPort->EINTPEND));
    OUTPORT32(&pIntr->SUBSRCPND, INPORT32(&pIntr->SUBSRCPND));
    OUTPORT32(&pIntr->SRCPND, INPORT32(&pIntr->SRCPND));
    OUTPORT32(&pIntr->INTPND, INPORT32(&pIntr->INTPND));

    pLCD->LCDSRCPND = pLCD->LCDSRCPND;
    pLCD->LCDINTPND = pLCD->LCDINTPND;
   
    for(i=0; i<50; i++){   
        RETAILMSG(1,(TEXT("\t saveArea[%d] = 0x%08x\n"), i, saveArea));
    }

    // Do platform dependent power on actions
    BSPPowerOn();
    RETAILMSG(1, (TEXT("BSPPowerON----at OEMPowerOff\r\n")));
}
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

26
 
挂起前后打印出来的信息:
挂起时:  
  53920 PID:7f92c42 TID:7df4906                  saveArea[36] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[37] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[38] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[39] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[40] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[41] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[42] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[43] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[44] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[45] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[46] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[47] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[48] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[49] = 0x00000000
唤醒时:
  53920 PID:7f92c42 TID:7df4906                  saveArea[36] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[37] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[38] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[39] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[40] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[41] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[42] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[43] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[44] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[45] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[46] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[47] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[48] = 0x00000000
  53920 PID:7f92c42 TID:7df4906          saveArea[49] = 0x00000000
不知道为什么挂起前后,LCD相关寄存器的值都是0 ?不明白啊...
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

27
 
同志们啊,江湖救急...
哪位能耐心你的给我讲一下CE系统挂起后的执行流程呢,我不太清楚。我想首先得搞明白LCD的相关控制器是在什么位置全被清零了。帮帮忙啊
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

28
 
“LCD配置(SPI接口)是在背光驱动里面控制的初始化等工作的”,这部分代码有没有复制到PowerOn里面,确保唤醒时再执行一次?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

29
 
引用 27 楼 shuiyan 的回复:
“LCD配置(SPI接口)是在背光驱动里面控制的初始化等工作的”,这部分代码有没有复制到PowerOn里面,确保唤醒时再执行一次?


多谢shuiyan兄的热心解答!这部分代码在唤醒时有执行。我的LCD有个RESET引脚是是通过GPC8口控制的,由于唤醒后该脚始终被拉低,导致LCD始终处于复位状态,故而图像无法显示,我一个非常非常牛的同事发现该问题,呵呵...现在最大的问题是找不到LCD相关控制器是在什么时候被清零的(在BSPPowerOFF之前就被清零了),还没查到原因呢
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

30
 
引用 20 楼 y_man18 的回复:
引用 19 楼 shuiyan 的回复:
屏的初始化涉及:CPU的lcd控制器的配置,LCD供电,LCD配置(I2C或者SPI接口)。
这三部分是不是都在InitDisplay()里面?
如果都在,那就对比性的测一下cpu的lcd控制器的输出(点频、场频、行频)是否正确,lcd供电是否正确。
再用调试信息看看lcd的配置是否正确(如果可读的话)。


非常感谢shuiyan兄的耐心解答,我的CPU的lcd控制器的配置和LCD供电是在InitDisplay函数里面做的,LCD配…


既然LCD配置(SPI接口)是在背光驱动里面控制的,那么仔细检查一下是不是在背光 POWERDOWN 的时候把LCD控制器关闭了,可能导致这些寄存器被清零。
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

31
 
引用 29 楼 xingjling 的回复:
非常感谢shuiyan兄的耐心解答,我的CPU的lcd控制器的配置和LCD供电是在In…


非常感谢啊,问题确实出在这里,看来的确是细节决定成败啊。开心结贴,呵呵
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
ADI &文晔 探索季第一站,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道! ...
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表