新闻中心

EEPW首页>嵌入式系统>设计应用> 基于S3C2440处理器的远程图像无线监控系统设计方案

基于S3C2440处理器的远程图像无线监控系统设计方案

作者: 时间:2011-12-06 来源:网络 收藏

SAA7113 的CE 引脚与的一个GPIO 引脚相连,这样可以控制SAA7113的工作状态。当无须采集图像时,将该GPIO口输出低电平,使SAA7113芯片处于低功耗状态,节省电能的消耗。对照图2和图3可以看出,SAA7113芯片就是图2的“外部图像传感器”。它向嵌入式系统的摄像机接口提供了采样到的标准ITU视频数据。这些数据经过DMA的P端口或C端口控制传输到了内存,这样就可以在内存中对图像数据作进一步的加工处理。

1.2 采样接口驱动

图像采样接口的驱动按照Linux视频设备驱动的模型V4L(video for Linux)编写了SAA7113与摄像机接口的驱动。驱动使用C端口模式与DMA进行通信。采样1帧图像之前,首先设置采样图像的分辨率和剪辑窗口大小等参数,然后设置DMA控制器访问的视频采样输出缓冲的内存地址,接着就可以通过设置的CAMIF接口控制寄存器启动1帧图像的采集。当采集完1帧图像时,CAMIF接口会自动启动1次C端口的DMA通信,把采集的图像数据传到内存。传输结束后,会产生一个C端口的中断,通知驱动1帧数据采样和传输结束。具体来说,这个驱动需要实现以下功能:

初始化S3C2440的CAMIF接口的时钟寄存器。主要是根据SAA7113的外接晶振频率设置摄像机时钟分频寄存器(CAMDIVN)。该寄存器的0~3位是分频系数,其计算方法是:

CAMCLK_DIV=UPLL/(CAMCLK * 2)-1

(初始化代码略— — 编者注)

配置CAMIF接口的采样参数。主要是输入源图像数据的格式、输出的图像格式、采样的窗口大小、DMA的访问地址等参数。这里定义了一个结构,用于存储与CAMIF接口相关的配置信息:

基于S3C2440处理器的远程图像无线监控系统设计方案

上述这些配置信息最终是与一系列的寄存器相关联的。这个结构为读/写寄存器提供了一个清晰的、集中的存储缓冲。

打开、关闭和控制摄像机的接口函数。这3个接口函数是按V4L规范编写的,其原型如下:

① 打开摄像机接口函数:

static int

v4l_cam_open(struct video_device *v,int mode);

② 控制摄像机接口函数:

static int

v4l_cam_ioctl(struct video_device *v,unsigned int cmd,void *arg);

③ 关闭摄像机接口函数:

static void v4l_cam_close(struct video_device *v);

中断处理接口函数。该中断处理函数在使用C端口模式完成1帧图像采集后被调用。函数原型定义如下:

static void

s3c2440_camif_isr_c(int irq,void *dev_id,struct pt_regs *regs);

读取图像数据的实现函数。该函数通过dev→rdy的值判断1帧图像有无采集转换结束。如果该值置1,则表示采样结束,这时就可以从图像数据的缓冲中拷贝数据到用户的存储空间;如果为0,则函数进入阻塞或返回EAGAIN标志。顺便提一下,dev→rdy的值是在中断处理函数中设置的。(实现代码略——编者注)

1.3 图像数据的压缩

S3C2440的CAMIF接口处理得到的1帧图像数据比较大,还要经过进一步的压缩才能适合进行网络数据传输。S3C2440处理器内部没有提供硬件的图像压缩编码器,但因为它的主频较高,可以使用软件来进行图像压缩。考虑到CPU的处理能力和对单帧采样图像的清晰度有较高的要求,采用基于离散余弦变换算法(DCT)的JPEG/MJPEG方式对图像数据进行压缩编码。



评论


相关推荐

技术专区

关闭