转:S3C2440的camera接口特性及WinCE 下的驱动(3)

S3C2440的camera接口特性及WinCE 下的驱动

时间: 2010-09-10 10:28:18 来源: 单片机与嵌入式系统 作者:魏银库

 

    注意:C通道和P通道应分别分配。分配成功后,应将4组YCbCr信号的起始地址与分配给C通道的DMA缓冲区地址关联起来,将4组RGB信号的起始地址与分配给P通道的DMA缓冲区地址关联起来。格式不同时,关联的空间大小是不同的。如果C通道格式为YCbCr4:2:2,图像宽度为CoDstWidtlh,图像高度为CoDstHeight,分配的DMA地址为CoFrameBuffer,则二者的关联关系为:

10e.jpg

    这样分配的目的是,保证每一组YCbCr信号的地址空间是连续的,便于用户程序开发。
    如果P通道格式为RGBl6,图像宽度为PrDstWidth,图像高度为PrDstHeight,分配的DMA地址为PrFrame Buffer,则二者的关联关系为:

10f.jpg

    如果P通道格式为RGB24,图像宽度为PrDstWidth,图像高度为PrDstHeight,分配的DMA地址为PrFrame Buffer,则二者的关联关系为:

10g.jpg
2.3 配置CAMIF相关寄存器
    ①把输入视频信号宽度配置为720像素,高度配置为288像素;
    ②把输入视频信号格式配置为BT.656 YCbcr 4:2:2格式;
    ③把输入视频信号顺序配置为CbYCr;
    ④根据用户的LCD显示终端的分辨率配置P通道的图像宽度、高度像素和格式;
    ⑤根据用户对图像的处理需求来配置C通道的图像宽度、高度像素和格式;
    ⑥配置C通道的缩放系数;
    ⑦配置P通道的缩放系数;
    ⑧把C通道的DMA地址配置给4组起始地址寄存器;
    ⑨把P通道的DMA地址配置给4组起始地址寄存器。
2.4 创建camera流式驱动接口函数
    WinCE下的硬件驱动程序大多采用流式驱动来开发,因为它有一个一致的接口函数供用户调用。此处,把接口函数命名为:CAM_Close()、CAM_Deinit()、CAM_Init()、CAM IOControl()、CAM()pen()、CAM PowerDown()、CAM_PowerUp()、CAM_Read()、CAM_Seek()和CAM-_Write()。
    (1)CAM_Init()函数
    该函数在驱动程序每次被设备管理器加载时调用。其实现的功能如下:
    配置SAA7113,分配C通道、P通道的DMA内存空间,根据输入信号源属性和输出图像、预览图像属性配置CAMIF寄存器。
    创建一个事件CameraEvent,使用WinCE内核函数InterruptInitialize(SYSINIR_CAM,CameraEvent,NULL,O)把该事件与camera的逻辑中断号SYSINIR_CAM关联起来,即当中断发生时激活该事件。
    创建一个中断服务线程。在该线程内用WaitForSintgleObjcet(CameraEvent,INFINITE)函数阻塞线程,并等待CameraEvent激活。把预览视频图像的功能放到CameraEyent激活之后完成,即把P通道缓冲区的内容拷贝到显示终端。最后,用InterruptDone(SYSINIR_CAM)函数结束本次中断处理。
    (2)CAM_IOControl()函数
    可以说,该函数才真正是用户程序与驱动程序联系的主要通道,用户程序对camera接口的控制及数据采集均是通过该函数完成的。其主要功能有:
    ①打开/关闭P通道或C通道输出。
    ②修改配置参数。
    ③控制输出图像的放大或缩小。
    ④如果需要RGB数据,则读取P通道缓冲区内容;
    如果需要YCbCr数据,则读取C通道缓冲区内容。注意,读取之前要根据状态寄存器CICOSTATUS或CIPRSTATUS的当前状态,确定访问哪一组缓冲区。
    (3)CAM_Deinit()函数
    当卸载本驱动时,该函数负责释放分配的内存空间和资源。
    (4)CAM_Open()函数
    该函数内部并没有具体的功能代码,只是当用户程序使用CreateFile(TEXT(“CAMl:”),GENERIC_READ|GENERIC WRITE,O,NULL,OP-EN_EXISTING,O,O)函数打开camera驱动时调用该函数,并返回一个文件句柄。基于该句柄用户才能进行后续操作。
    (5)CAM_Close()函数
    该函数内部并没有具体的功能代码,只有当用户程序使用CloseFile(hfile)函数关闭camera驱动时才调用该函数,并释放之前返回的文件句柄。其他接口函数没用赋予其具体功能。

结语
    按照上述方法开发的驱动代码,连同其他驱动已在PB5.O环境下编译通过,生成的内核文件在原硬件平台下成功运行,P通道视频图像流畅,C通道图像质量较高。该方法弥补了目前国内在WinCE 5.O/6.O操作系统环境下CCD摄像头无法连接到S3C2440的camera接口的缺陷,为工程技术人员设计嵌入式图像采集系统时提供了一种有效手段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值