免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4740 | 回复: 1

s3c6410 framebuffer 开发与调试(1) [复制链接]

论坛徽章:
0
发表于 2011-04-17 09:36 |显示全部楼层
本帖最后由 lincoln-shaw 于 2011-04-17 09:45 编辑

1: timing的配置

vclock 对应pixel clock 每vclock lcdc采样1pixcel数据写到lcd, 已知vclok可得reflashrate,已知reflashrate也可得vclock,转化关系是 1/w*h*vlock = reflashrate.

lcdc传输每行数据时,行变换时要求行与行传送数据之间要有一定时延(ling puls width)确保每行数据能够准确到达lcd,同时行内数据生效与行开始,行内数据传输结束到行结束都有一段时延,前者是line front porch,后者是line back portch

lcdc传输每frame数据时, 不同frame数据之间也需要一定时延(frame pules width)确保每frame数据能够准确到达lcd,同时frame内数据生效与frame开始,frame内数据传输结束到frame结束有一段时延,前者是frame front portch,后者是frame back porth

2: framebuffer驱动流程与原理

根据datasheet找到lcdc和dma的reg的物理地址,经过remmap地址映射获得lcdc和dma的reg的虚拟地址va,程序得到这写va便可以根据datesheet的参数(timeing, clock, format, resulotion等) 往这些reg里写值控制lcdc来把数据传输到lcd,另外还需要通过dma_alloc函数得到一块framebuffer,物理地址给dma用,虚拟地址给上层app用以将数据写入framebuffer,然后dma fetch这些数据输出到lcd

3: 在g-bios 实现硬件register的配置与调试,然后往framebuff里写3色图和bmp,jpg图像检验配置是否ok

配好GPIO, timing, mode, DMA后就在配置函数里直接往framebuff里全部写0x00数据,运行程序srceen出现斑纹,检查下DMA的地址寄存器,发现VIDW00ADD0B含有VBANK_F,VBASEU_F两个域, VBASEU_F好理解就是前面申请dma地址的前24bits,而VBANK_F却不清楚,不过按逻辑来说dma地址应该全部写进VIDW00ADD0B寄存器,结果果然把dma 全部写进VIDW00ADD0B就ok了,srceen显示程序想要输出的颜色了,画好3色图,想要往framebuff里画张图片,看了下g-bios,发现里面提供jpge lib可以解码jpeg图像,并且可以把解码后的图像数据写入framebuff,在之前的程序里调用g-bios里的jpge2decode()函数再调用g-bios里面的draw_logo函数,但结果输出效果确是在半个屏幕里连续反复显示2张logo,猜测可能是timing有了问题,检查了代码,看来下datesheet,timeing没错,再检查g-bios的jpge_decod 和draw_logo函数调用也没错,没办法,只能自己来画bmp图像,但图像的数据该如何获得呢?在os上写显示bmp图像的bmp图像时只需要调用open函数然后调用read 函数就能够获得bmp的数据了,现在没有open这些函数可调用,那该如何!不知一些图片软件是否具有把图片转化为文本文件的功能,在pc机上用gimp打开bmp图片,然后保存下果然有保存转化为source c code 文件的功能,获得了图片数据后在g-bios里就可以定义一个数据存放这些数据然后就可以往framebuff里写数据了!

论坛徽章:
0
发表于 2011-04-18 18:49 |显示全部楼层
很详细……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP