修改2410的3.5寸显示驱动遇到下半屏无图像的问题?
我在调试2410 的TFT显示驱动时遇到一个始终解决不了的问题,即只能正常显示上半部屏幕,下班部分则只是点亮,没有图像。请求各位大侠慷慨帮助:) 5O(U1 *
我选用了一款夏普的3.5寸的TFT触摸屏:型号为LQ035Q7DH01,电路是自己设计的,原先的2410板接的是6.4寸的TFT屏,所以要自己将wince内6.4寸的显示驱动改成3.5寸屏的驱动。 3*T/ 7/
1. 在修改之前,我将3.5的屏接上灌了6.4寸屏的2410主板,结果整个3.5寸屏显示了6.4寸屏界面的一部分,(左上角的部分),显示的图像正常,屏也不闪,因此我认为我的硬件电路基本正常。 Y
SzC's [
2 . 修改第一步:在原S 3C 2410 BSP的6.4寸显示驱动的基础上修改成3.5寸的,首先,修改的文件有: ^6gEL~m|]
PLATFORM/SMDK2410/DRIVERS/DISPLAY/S 3C 2410LCD/s 3c 2410disp.cpp 1+"d-`'Z2O
红体字为修改后的结果。 Sz:PeUr9h[1]
(1)WORD TempBuffer[241][320]; TV|Z$, 6l
S 3C 2410DISP::S 3C 2410DISP (void) AQTUd(_
{ [0 rH/{
RETAILMSG(0, (TEXT("++S 3C 2410DISP::S 3C 2410DISP/r/n"))); "$b{EYq6
3 g :P>(
// setup up display mode related constants /rT>&o .i
m_nScreenWidth = 240;//640 IM1&g7Qs2
m_nScreenHeight = 320;//480 m_colorDepth = 16; cO]w*Hti
m_cbScanLineLength = m_nScreenWidth * 2; :xHKbWz6j
m_FrameBufferSize = m_nScreenHeight * m_cbScanLineLength; zgz!"knVx‑
c$,1j%[)
// memory map register access window, frame buffer, and program LCD controller @p~s‑cE.#/
InitializeHardware(); Xg]Cq"RJC
(2) 将原来在6.4寸屏驱动里的0xA0000 改为0x30000 E 9m u:T
// map frame buffer into process space memory M.,DXEZT
m_VirtualFrameBuffer = (DWORD)VirtualAlloc(0, (0x30000), MEM_RESERVE, PAGE_NOACCESS); {H(l"KuL
if (m_VirtualFrameBuffer == NULL) *]HnFP
{ wH!$TAZ:Yw
RETAILMSG(0,(TEXT("m_VirtualFrameBuffer is not allocated/n/r"))); jZ~b/
return; Jq‑MF9|{H
} ,
else if (!VirtualCopy((PVOID)m_VirtualFrameBuffer, (PVOID)gdwLCDVirtualFrameBase, (0x30000), PAGE_READWRITE | PAGE_NOCACHE)) ,/v'%,:C
f/O6~I&g
3 . 修改PLATFORM/SMDK2410/INC/s2410.h b v_ UroTr
(1)#define SCR_XSIZE_TFT (480)//(1280) //for virtual screen =J]WVA,GqA
#define SCR_YSIZE_TFT ( 640)//(960) [1]Szus*YL7
#define LCD_XSIZE_TFT (240)//(640) k ;WD[SV
#define LCD_YSIZE_TFT ( 320)//(480) n3Y (2) dWqn7+:
#define VBPD ((1)&0xff) //((33-1)&0xff) *bkb-n
Kw
#define VFPD ((2)&0xff) //((10-1)&0xff) gcLz}84
#define VSPW ((1)&0x 3f ) JAbUK[:K
#define HBPD ((48-1)&0x 7f ) ?^|`A}q#
#define HFPD ((16-1)&0xff) Sn CwoxK
#define HSPW ((96-1)&0xff) "W<Y1$Y=Y
#define CLKVAL_TFT (7) //(1) _k84#E0
7*:zN
这组寄存器的值是我试出来的,应为这款屏的手册PDF需要日文支持,里面的时序图上的数值全是小黑点,所以无法参考数值。 Xr*I`BJ
js$R^P
4 、问题现象描述: )e(<YST
(1) 只能正常显示上半部分的标准界面,而从屏的中线开始向下就没有图像,光被点亮(正好的屏高度的一半),我用鼠标可以将下部分没显示的桌面图标拖上来,是不是证明虚拟内存是合适的? ]jT}]9Q$
(2) 另外上半部分屏显示闪的很厉害,我改了CLKVAL_TFT也没发改变 /w
9}O2 lL
5e
s t
我参阅了论坛很多有关修改显示驱动的文章,开始认为这个问题不是大问题,可花一周还是没有解决,请大侠帮我解惑,真的感激万分!谢谢!我的E_MAIL: yi4099@163.com.
////////////////////////////////////////////
哥们还需要修改下SMDK2410/KERNEL/HAL/cfw.c文件中的InitDisplay函数下面的一些值,加油~~~有什么问题再交流
//////////////////////////////////////
终于搞定了,我下了日文支持包,又再一次研究了屏的PDF,其中时序图能看清楚了,按照上面的参数修改,显示终于正常了。看来VBPD 、VFPD、VSPW 、HBPD 、HFPD 、HSPW 这几个值很关键,大家调屏时要多留意。:)