网站导航: 首页 > 设计参考 > 正文 文章搜索
ARM9远程图像无线监控系统[图]
 
文章编号:
081211131420
文章分类: 单片机 ARM
点 击:
...
关 键 词: ARM9,图像,监控
文章来源:
网络,作者:孙宏伟
摘 要:
对图像监控系统,用户常常提出这样的功能需求:希望能够监控距离较远的对象 这些对象有可能分布在郊区、深山,荒原或者其他无人值守的场合;另外,希望能够获取比较清晰的监控图像...

    对图像监控系统,用户常常提出这样的功能需求:希望能够监控距离较远的对象 这些对象有可能分布在郊区、深山,荒原或者其他无人值守的场合;另外,希望能够获取比较清晰的监控图像,但对图像传输的实时性要求并不高 很明显,用传统的PC机加图像采集卡的方式很难满足这样的需求。
    在嵌入式领域,ARM9系列微处理器在高性能和低功耗方面提供了最佳的性能,因此选用ARM9嵌入式处理器S3C2440设计实现了一个远程图像光线监控系统通过这个系统,可以远在千里之外控制一个摄像机进行图像采集并回传。如果这个摄像机有一个485接口的云台,还可以通过互联网远程控制摄像机的取景角度、镜头拉伸、聚焦等功能 除了获取图像数据.系统还提供了多路开关控制和数据采集功能,可以连接温度、湿度等各类传感器和控制红外夜视灯等其他外部设备的开关状态。最后,通过GPRS或CDMA无线通信模块及Internel互联网将数据传至任何地方

1 系统设计
    本系统采用三星公司的S3C2440嵌入式处理器和arm-linux 2.4.26操作系统;S3C2440使用ARM920T内核,主频是400 MHz;除了集成通用的串口控制器、USB控制器、A/D转换器和GPIO等功能之外,还集成了一个摄像头接门(CAMIF)(这个接口是远程图像采集的核心部分)。系统在S3C2440处理器的控制下,从CCD摄像机采集模拟视频信号,然后经过编码、DMA传输到内存缓冲,接着由软件对内存中的数字视频数据进行压缩和打包.最后通过通信单元将图像以IP包的方式发送到监控中心的服务器。整个系统的硬件结构原理如图1所示
远程图像监控系统硬件框图 
1.1 图像采样接口
    S3C2440的摄像头接口(CAMIF)支持ITU-R BT.601/656 YCbCr 8比特标准的图像数据输入,最大可采样4096×4096像素的图像。摄像头接口可以有两种模式与DMA控制器进行数据传输:一种是P端口模式,把从摄像头接口采样到的图像数据转为RGB数据,并在DMA控制下传输到SDRAM(一般这种模式用来提供图像预览功能);另一种是C端口模式,把图像数据按照YCbCr 4:2:0或4:2:2的格式传输到SDRAM(这种模式主要为MPEG-4、H.263等编码器提供图像数据的输入)。上述两种工作模式都允许设置一个剪辑窗口,只有进入这个窗口的图像数据才能够传输到SDRAM。上述过程可用图2说明。
S3C2440摄像机接口工作示意图 
    S3C2440的摄像机接口接收ITU标准的图像数据,不能直接接收CCD摄像机输出的模拟视频信号,因此还需要1片SAA7113视频解码芯片。SAA7113可以输入4路模拟视频信号,通过内部寄存器的不同配置可以对4路输入进行转换,输入可以为4路CVBS或2路S视频(Y/C)信号,输出8位“VPO”总线,为标准的ITU 656、YUV 4:2:2格式。对SAA7113初始化需要通过I2C 总线进行,而S3C2440内部集成的I2C控制器正好可以实现这个过程。S3C2440 的摄像机接口与SAA7113的连接原理如图3所示。
S3C2440摄像机接口与SAA7113接线 
    SAA7113 的CE 引脚与S3C2440 的一个GPIO 引脚相连,这样可以控制SAA7113的工作状态。当无须采集图像时,将该GPIO 口输出低电平,使SAA7113芯片处于低功耗状态,节省电能的消耗。
    对照图2和图3可以看出,SAA7113芯片就是图2的“外部图像传感器”。它向嵌入式系统的摄像机接口提供了采样到的标准ITU 视频数据。这些数据经过DMA的P端口或C端口控制传输到了内存,这样就可以在内存中对图像数据作进一步的加工处理。

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

  • 初始化S3C2440的CAMIF接口的时钟寄存器。主要是根据SAA7113的外接晶振频率设置摄像机时钟分频寄存器(CAMDIVN)。该寄存器的0~3位是分频系数,其计算方法是:
    CAMCLK_DIV=UPLL/(CAMCLK * 2)-1
    (初始化代码略— — 编者注)
  • 配置CAMIF接口的采样参数。主要是输入源图像数据的格式、输出的图像格式、采样的窗口大小、DMA的访问地址等参数。这里定义了一个结构,用于存储与CAMIF接口相关的配置信息:


struct s3c2440_camif_cfg_t {
    int src_x; //输入的源图像宽度
    int src_y; //输入的源图像高度
    int dst_x; //输出的目标图像宽度
    int dst_y; //输出的目标图像高度
    int dst_fmt; //输出的目标图像数据格式
    int pre_x; //预览通道(P端口模式)输出的图像宽
    int pre_y; //预览通道(P端口模式)输出的图像高
    int pre_fmt; //使用通道(P端口模式)时设为1
    __u16 bypass; //为1时表示不启用按比例的图像放大/缩小
    __u16 ycbcr; //输入图像的YcbCr顺序
    struct s3c2440_camif *dev; //设备的系统信息
};

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

  • 打开、关闭和控制摄像机的接口函数。这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的值是在中断处理函数中设置的。(实现代码略—— 编者注)
 
相关文章:

12 下一页
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4