使用贵公司的OMAP3530,WinCE6.0 BSP包开发一系列的项目系统。现遇到开机读取内核后,初始化LCD时出现中断循环的情况,根据超级终端的打印信息如下:
/*第一次初始化LCD中断信息*/
OMAPDisplayController::InitLCD LcdPdd_LCD_Initialize
DSI_IRQSTATUS 0x00000000
DISPC_IRQSTATUS 0x00004020
OMAPDisplayController::RestoreRegisters LcdPdd_LCD_Initialize
/*LCD初始化的循环中断信息*/
OMAPDisplayController::InitLCD LcdPdd_LCD_Initialize
OMAPDisplayController::RestoreRegisters LcdPdd_LCD_Initialize
DSI_IRQSTATUS 0x00000000
DISPC_IRQSTATUS 0x00004000
OMAPDisplayController::RestoreRegisters LcdPdd_LCD_Initialize
/*循环中断信息结束*/
循环中断信息在不手动断电的情况下是无限循环的,并不会进入系统,从而造成系统假死。
经过查询《OMAP35x Applications Processor echnical Reference Manual》Literature Number: SPRUF98S April 2010 – Revised June 2011 第2198页 Table 15-22. Display Subsystem Interrupts 可得知
DISPC_IRQSTATUS 0x00004020的含义为
PROGRAMMEDLINENUMBER The LCD reached the user-programmed line number.
SYNCLOST Interrupt occurs when VSYNC width/front or back porches are not wide enough to load the pipelines with data (LCD output).
DISPC_IRQSTATUS 0x00004000的含义为
SYNCLOST Interrupt occurs when VSYNC width/front or back porches are not wide enough to load the pipelines with data (LCD output).
希望能帮助我们理解上述中断原因的含义,给出一定的技术支持,以协助我们利用好贵公司的产品完成开发工作。
Feng Dong:
Linux 中有相关的patch,你可以看看你的winCE中修改一下.
+config OMAP2_DSS_SLEEP_BEFORE_RESET
+ bool "Sleep 50ms before DSS reset"
+ default y
+ help
+ For some unknown reason we may get SYNC_LOST errors from the display
+ subsystem at initialization time if we don't sleep before resetting
+ the DSS. See the source (dss.c) for more comments.
+
+ However, 50ms is quite long time to sleep, and with some
+ configurations the SYNC_LOST may never happen, so the sleep can
+ be disabled here.
另外你的wince的是哪个版本.
有没有DM3730测试过?
Ping Xiang:
回复 Feng Dong:
这个问题我也遇到过,之前是用的6.11的BSP,就有这个问题,只要移植6.15的显示驱动就可以解决这个问题。
Gang Chen:
回复 Feng Dong:
手头这个BSP是从开发板的公司那边拿来的,对应TI的版本不是很清楚。
DSS复位前延时50ms是不起作用的,我试过了,网上也有人说过
Gang Chen:
回复 Ping Xiang:
6.15版本的显示驱动移植过去后出现了ERROR: function @ Ordinal 127 missing的错误,完全无头绪处理啊……
你移植的时候都做了哪些工作了?@Ping Xiang