wince5.0下Camera驱动程序分析
原创
©著作权归作者所有:来自51CTO博客作者rightsoft的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.camera采集动态图像以及显示的总流程:DMA从camera存放动态图像的寄存器将数据传输到memory,再由应用程序实时(通过DMA中断)从memory将数据copy到LCD的overlay2的framebuffer中去。
Camera-capturing------> Camera Data-reg------>Camera-dma-mem------>(App Copy to)Lcd-framebuffer------->Lcd overlay2 display
2.驱动程序分析:Camera的驱动程序以流接口的形式提供,真正用到的导出的接口有CAM_INIT、CAM_IOCONTROL。初始化过程为:初始化硬件,注册中断。硬件初始化包括DMA的初始化,LCD的一些基本参数配置(但并不是overlay2的参数)。IOCONTROL部分包括overlay2的getaddress、enable、disable和camera的init、startcaputring、stopcaputring、deinit等。Camera的init的输入参数(CameraApp为一结构体)是由app提供的,驱动程序从该参数得到一些关于所要显示的图像的宽度和高度等信息;同时CameraApp也是输出参数,app通过该参数得到硬件的一些信息(camera-dma-mem的地址等)。(camera-dma-mem的地址用的是physical地址,所以在app中要用VirtualAllocCopyPhysical函数映射一下。)inti同时设置camera的寄存器,分配dma的通道,设置各descriptors的具体地址等工作。Camera的startcapturing主要启动DMA开始数据传输。Overlay2的相关操作:getaddress为overlay2的framedescriptors分配地址,配置DMA相关地址(该地址应该与LCD的对应地址相同,否则,overlay2根本不起来lcd并挂死),同时也要返回给app有关framebuffer的地址;enable为lcd相关寄存器为overlay2模式,并resumelcd。在整个的camera驱动程序中都有相关的CI(caputer interface)的操作,该本份为对pxa270的有关camera的寄存器的设置,有待进一步研究。
3.camera的app的工作流程:open ----> getoverlay2addr -----> enableoverlay2 ----->startcaputering stopcaptuering ----> disableoverlay2
总结:在lcd的驱动程序中,有关framebuffer的地址是HalAllocateCommonBuffer动态获取的内存地址,但是在camera的驱动程序中用的是固定的地址0xa3a00000,在bootloader中好像也是用的这个固定地址。但是我在camera中用这个固定地址的时候去无法正常工作,如上面所说,lcd中和camera中的相关的framebuffer的地址一定要一致。想从lcd中拿到framebuffer的地址值,但是lcd的驱动的加载要比camera的晚(不太清楚驱动加载的顺序是如何确定的),不过还是有办法解决:在系统加载camera驱动的时候不去初始化它,而是等到open它的时候去初始化。由于open要在app中调用,故然可以拿到lcd的framebuffer的地址了。拿到framebuffer的地址的方法可以通过读写注册表的值做到。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
2440(wince5.0)eboot调试
搞了一段时间的eboot,今天终于可以跑到主菜单这边了
职场 休闲 调试 wince5.0 eboot -
wince下USB设备驱动程序导读
usb client driver overview
usb driver -
WinCE5.0下实现透明背景按钮(.net C#) 个人实验
参考了WinCE5.0下实现透明背景按钮(.net C#)这篇文章后,本着不模仿的态度去做,结果发现还是原先作者的
wince .net c# resources object -
中断代码结构比较之WinCE4.2 VS WinCE5.0
本文简单介绍下wince两个版本的中断系统的代码流程
代码 结构 休闲 WinCE4.2 WinCE5.0 -
WinCE5.0下实现透明背景按钮(.net C#) 个人补充
针对上篇文章有童鞋提出一些疑问:1.Command”(是否缺少 using 指令或程序集引用2.没有创建Command枚举类型3.编
wince .net c# resources string