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

发布者:雅致人生最新更新时间:2012-07-31 来源: 单片机与嵌入式系统 关键字:camera接口  WinCE  S3C2440 手机看文章 扫描二维码
随时随地手机看文章

    S3C2440是应用十分广泛且适用于嵌入式系统的一款嵌入式处理器。winCE 5.0/6.O是微软公司开发的一款专用于嵌入式系统的实时操作系统。其模块化设计使开发人员可以根据需求定制设备。目前,国内大部分OEM商都提供了对S3C2440的camera接口在WinCE5.O/6.0下的驱动支持。遗憾的是,目前国内OEM商提供的驱动仅限于对几款微型摄像头(如ov9650等)的驱动支持。当用户采用CCD摄像头作为图像采集的前端设备时,原来的驱动已经不能使用了,而CCD摄像头因其优越的性能,在监控领域扮演着主力军角色。本文从分析S3C2440的camera接口特性出发,详细介绍当摄像设备为CCD摄像头时,在WinCE 5.O/6.0操作系统环境下开发camera驱动的形式、方法和主要的驱动代码。

1 camera接口特性
    S3C2440处理器有一个专用的camera接口(CAMIF),该接口支持ITU-R BT.601/656 YCbCr 8位数据格式视频数据输入,最大输入视频图像大小为4 096×4 096像素。视频输入后分两个通道逐帧保存图像数据,一个为预览通道(即P通道),另一个为编解码通道(即C通道)。两个通道均通过DMA方式将一帧图像保存到系统内存SDRAM中,在系统内存中共开辟了4组帧图像缓冲,从而保证了用户应用程序在读取帧图像数据时不影响另一帧图像数据写入。其特性如下:
    ◆支持ITU-R BT.601/656 YCbCr 8位数据格式视频数据输入,并可调整Y、Cb、Cr三个信号的顺序,以适应不同的视频信号源;
    ◆具有DZI功能,相当于数码变焦;
    ◆C通道输出图像最大为4 096×4 096像素;
    ◆P通道输出图像最大为640×480像素;
    ◆P通道输出图像格式可配置为RGBl6或GRB24;
    ◆C通道输出图像格式可配置为YCbCr 4:2:2或YCbCr 4:2:0:
    ◆输出图像可X方向镜像翻转、Y方向镜像翻转,或180°旋转;
    ◆DMA数据传输,4组帧图像缓冲,2个对应的中断处理,保证视频实时采集;
    ◆2个通道不同图像数据格式输出,便于用户程序开发。
    CAMIF对外接口信号定义如下:
    CAMPCLK输入的视频像素同步时钟。
    CAMVSYNC输入的视频帧同步时钟。
    CAMHREF输入的视频行同步时钟。
    CAMDATA[7:0] 输入的视频8位数据。
    CAMCLKOUT输出的时钟,用于外接的没有独立时钟的camera芯片的主时钟。当外接的camera芯片有独立的时钟时,该信号可不用。
    CAMRESET输出的软件复位信号,可对外接的camera芯片进行复位。
    信号的时序图如图1所示。

10a.jpg


    使用CAMIF时,必须对CAMIF相关寄存器进行正确配置,下面介绍主要寄存器的配置原理。
    CAMRCFMT 选择输入视频信号源格式寄存器
    ①选择输入视频信号源为ITU-R BT.601 YCbCr 8位数据格式,或ITU-R BT.656 YCbCr 8位数据格式。
    ②选择输入视频信号源水平像素大小和垂直像素大小,一定要和外接的camera设备分辨率一致。
    ③选择输入视频信号Ycbcr信号顺序,一定要和外接camera信号的实际顺序一致。
    CIWDOFST 从输入信号中截取中心部分的图像寄存器
    原理是:从输入信号中截取中心部分的图像输出到大小不变的输出图像缓冲中,从而实现对图像的放大或缩小。
    ①配置该寄存器允许缩放或不允许缩放。
    ②X方向图像放大或缩小控制,原理是截切掉左部和右部的图像像素数。
    ③Y方向图像放大或缩小控制,原理是截切掉上部和下部的图像像素数。
    CIGCTRL 全局控制寄存器
    通过该寄存器对外接的camera进行复位,即控制CAMRESET信号的电平高低。
    CICOTRGFMT C通道输出图像格式及大小配置寄存器
    ①可将C通道输出图像格式配置为YCbCr 4:2:2或YCbCr 4:2:0格式。
    ②可设置C通道输出图像X方向像素数。
    ③可设置C通道输出图像Y方向像素数。
    ④可设置C通道输出图像X方向镜像。
    ⑤可设置C通道输出图像Y方向镜像。
    ⑥可设置C通道输出图像180°旋转。
    CIPRTRGFMT P通道输出图像大小配置寄存器
    ①可设置P通道输出图像X方向像素数。
    ②可设置P通道输出图像Y方向像素数。
    ③可设置P通道输出图像X方向镜像。
    ④可设置P通道输出图像Y方向镜像。
    ⑤可设置P通道输出图像180°旋转。
    CICOSTATUS和CIPRSTATUS 状态寄存器
    CICOSTATUS反映C通道数据的写入状态,即4组缓冲的哪一组;CIPRSTATUS反映P通道数据的写入状态,即4组缓冲的哪一组。用户程序采集图像数据时,应根据状态寄存器当前状态,决定从哪一组读出数据。
    此外,CICOYSAl~CICOYSA4分别为C通道第1~4帧Y信号数据缓冲起始地址寄存器;CICOCBSAl~CICOCBSA4分别为C通道第1~4帧Cb信号数据缓冲起始地址寄存器;CICOCRSAl~CICOCRSA4分别为C通道第1~4帧Cr信号数据缓冲起始地址寄存器;CIPRCLRSAl~CIPRCLRSA4分别为P通道第1~4帧RGB信号数据缓冲起始地址寄存器。[page]

2 WinCE下的驱动开发
    目前,我国市场上的CCD摄像头只有模拟视频输出接口,显然它不能和S3C2440的camera接口直接连接,硬件上需要增加一块解码芯片。解码芯片把CCD的模拟信号解码为BT.601/656 YUV4:2:2格式信号,这个信号和CAMIF信号是匹配的,因此解码芯片输出就可以直接连接到
S3C2440的camera接口。典型的解码芯片为SAA7113,接口电路如图2所示。

10b.jpg


    如果想简化硬件电路和驱动代码,也可以根据需求向生产商定制CCD摄像头,要求生产商生产的CCD摄像头直接按照ITU-R BT.601/656格式输出视频信号。具有这种接口的CCD摄像头就可以直接和S3C2440的camera接口连接,接口电路如图3所示。

10c.jpg


    两种情况的驱动代码开发过程基本上是相同的。区别是:前者需要S3C2440通过I2C总线对解码芯片SAA7113的相关寄存器进行配置,而后者则不需要。下面以前者为例介绍驱动的开发方法。
2.1 配置解码芯片SAA7113
    SAA7113是NXP公司推出的视频解码系列芯片,在很多视频产品(如电视卡、MPEG2、MPEG4)中都有应用。SAA7113的主要作用是把输入模拟视频信号解码成标准的BT.656 YUV4:2:2数字信号,相当于一种A/D器件。它兼容全球各种视频标准,在我国应用时必须根据我国视频标准来配置内部寄存器。
    对SAA7113配置需要通过I2C总线进行,分配S3C2440的GPIO的E15模拟I2C的SDA线,E14模拟I2C的SCL线。OEM商提供的原驱动是针对手机摄像头ov9650开发的,二者的配置原理和过程是相同的,但配置内容不同,输出图像的格式也不同。ov9650输出的图像是逐行扫描的,SAA7 113输出的图像则是隔行扫描的。由图1可知,CAMIF是逐帧输入的,所以必须把SAA3117的场同步信号VS作为CAMIF的帧同步信号CAMSYNC,输出图像是逐场保存的。配置内容为:
    ①复位SAA3117。
    ②模拟通道选择。
    ③配置亮度、色度、对比度、自动增益控制量。
    ④将RTSl引脚配置为场同步信号VS,将RTSO信号配置为行同步信号HREF,信号极性应分别与图1中CAMVSYNC和CAMHREF信号极性一致。
    ⑤配置图像宽度为720像素。
    ⑥配置帧图像高度为576像素,一帧图像分奇偶两场分时输出,每场图像高度为288像素。
    ⑦配置数据格式为BT.656 YCbCr 4:2:2 8位格式输出。注意,数据口的信号顺序为CB0 Y0 CR0 Y1 CBlY2…CR359 Y719。
    ⑧时钟采用24.576 MHz的独立时钟,此时LLC的频率为27 MHz,场频为50Hz,帧频为25 Hz。
2.2 为CAMlF分配DMA内存空间
    因为S3C2440从camera接口采集到的视频数据是以DMA机制写到内存的,所以必须为C通道和P通道分别分配逻辑内存(即DMA缓冲区)。Win CE有两种分配DMA缓冲区的方法:使用CEDDK函数和使用winCE内核函数。建议使用CEDDK函数:

10d.jpg

[page]

    注意: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接口的缺陷,为工程技术人员设计嵌入式图像采集系统时提供了一种有效手段。

关键字:camera接口  WinCE  S3C2440 引用地址:S3C2440的camera接口特性及WinCE 下的驱动

上一篇:基于S3C2440A的嵌入式U-BOOT千兆网络功能设计
下一篇:基于S3C2440的嵌入式Linux根文件系统构建

推荐阅读最新更新时间:2024-03-16 13:04

基于嵌入式WinCE与MSP430单片机多串口通信设计
摘要:在远程监控和工业自动化系统中,串口通信因其具有连接简单、使用方便、可靠性高的优点,得到越来越广泛的应用。讨论了采用WinCE嵌入式与MSP430单片机构建串口多机通信系统的问题,在分析了WinCE操作系统与MSP430单片机串口模块特性的基础上,给出了进行串口通信的总体框图,针对实际串口通信存在的问题制定串行通信协议,然后在该系统硬件基础上根据需要定制WinCE系统内核,最后实现串口通信设计。实验结果表明:该系统能够达到多串口通信的要求。 关键词:WinCE;MSP430;TCP/IP;串口通信协议 目前WinCE嵌入式与MSP430单片机在仪器仪表、工业控制、移动设备等有着广泛的应用。在很多复杂的应用场合比如多点温
[工业控制]
基于嵌入式<font color='red'>WinCE</font>与MSP430单片机多串口通信设计
六 ARM9(S3C2440)的LCD显示-理论知识
今天和大家一起讨论一下S3C2440的LCD显示的问题,希望大家能够多多指教,我说的不对的地方希望大家及时帮我改正,以使我可以增长知识,才能不至于给别人的学习带来不便,呵呵 下面先看一下我从别人那转过来的一篇文章,我觉得很有用,看完之后我再说一下自己对这一块的了解,也可以先看看我的理解(下面红字标出)再看开始的这篇文章,因为我说的更通俗,O( _ )O哈哈~。 1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的 形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多
[单片机]
s3c2440烧写整个系统(及利用Jlink下载u-boot)
s3c2440烧写整个系统 分为两部分 烧写内核文件 烧写文件系统 每一部分分为三个步骤 a. 下载文件到开发板(tftp方式) b. 擦除分区 c. 设置环境变量 d. 烧写 1.烧写内核文件 a. 下载文件到开发板(tftp方式) 进入s3c2440 uboot界面 输入命令下载内核文件 OpenJTAG tftp 30000000 uImage ( 内核文件名根据自己情况而定) b. 擦除分区 OpenJTAG nand erase kernel c. 设置环境变量 OpenJTAG set bootargs noinitrd root=/dev/mtdblock3 init=/l
[单片机]
S3C2440 Linux驱动移植——NAND驱动
开发板:TQ2440 内核:Linux 2.6.32 PC OS:Ubuntu 11.04 本文将对NAND驱动的移植进行简单介绍。其中,将对NAND控制器所需要的参数进行详细说明。 1. 修改分区表 打开文件arch/arm/plat-s3c24xx/common-smdk.c,修改mtd_partition结构体数组。 修改后如下: static struct mtd_partition smdk_default_nand_part = { = { .name = Uboot , .size = 0x00040000, .offset = 0x00000000,
[单片机]
<font color='red'>S3C2440</font> Linux驱动移植——NAND驱动
S3C2440 中断解析(各个中断相关寄存器分析)
S3C2440外部中断操作 这两天在调试2440外部中断的时候,通过jlink来调试,老是进不了中断。 因为借鉴了网上很多程序,感觉不应该是程序的问题。后来通过USB口,利用 supervivi的download&run功能,把编译产生的bin文件下载到内存中。超级终 端就提示:Dummy_isr error, interrupt number: 5, INTMSK = 0xffff16ff已是网上查 了这个错误。才知道是什么原因。因为SDRAM的起始地址为0x30000000,把 程序烧写进SDRAM,起始地址不为0而不程序中断后,PC默认指向0x00-0x1C, 内部SRAM的地址0处都不存在你要调试的程序的中断向量表,所以不
[单片机]
<font color='red'>S3C2440</font> 中断解析(各个中断相关寄存器分析)
04-S3C2440u-boot学习之u-boot分析(3)之源码第1、2阶段
参考《韦东山1期视频》第09课第3节 u-boot分析之源码第1阶段.WMV 一:第一阶段 (1)打开u-boot-1.1.6_JZ2440cpuarm920tstart.S _start: b reset(跳转到reset): 1.设置SVC32 模式; reset: /* * set the cpu to SVC32 mode */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#0xd3 msr cpsr,r0 2.关看门狗; /* turn off the watchdog */ #if defined(CON
[单片机]
04-S3C2440u-boot学习之u-boot分析(3)之源码第1、2阶段
S3c2440代码重定位详解4---拷贝代码和链接脚本的改进
本节进行拷贝代码的改进和链接脚本的改进。 前面重定位时,需要ldrb命令从的Nor Flash读取1字节数据,再用strb命令将1字节数据写到SDRAM里面 cpy: ldrb r4, /*首先从flash读出一个字节*/ strb r4, /*让后把数据写到SDRAM*/ add r1, r1, #1 add r2, r2, #1 cmp r2, r3 bne cpy JZ2440上的Nor Flash是16位,SDRAM是32位。 假设现在需要复制16byte数据, 采用ldrb命令每次只能加载1byte,因此CPU需要发出16次命令,内存控制器每次收到命令后,访问硬件Nor Flash,
[单片机]
<font color='red'>S3c2440</font>代码重定位详解4---拷贝代码和链接脚本的改进
WinCE系统下BootLoader的开发
摘要:介绍WinCE.NET系统的旧方法;说明板级支持包(BSP)的基本构成;从开发实际出发,详细阐述如何开发BSP中的重要部件--BootLoader。 关键词:WinCE.NET BSP BootLoader DOC 引言 Windows CE.NET是微软公司向嵌入式领域推出的一款操作系统。它最大程度继承了桌面版Windows操作系统的丰富功能,同时又副入了许多新特性,以适应嵌入式领域的实际情况和要求。无论是商业应用需求,还是人们的多媒体消费需求,都能被采用CE操作系统的设备很轻松的满足。最新的.NET版本较之3.0版本,在实时性和稳定性上有大幅度提高,开始广泛地被平板电脑、数码相机、彩屏手机、PDA等多种高性能产品
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
502 Bad Gateway

502 Bad Gateway


openresty
设计资源 培训 开发板 精华推荐

502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
502 Bad Gateway

502 Bad Gateway


openresty