基于ARM和CCD的视频采集模块驱动设计
驱动是对I2C硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据。I 2C设备驱动主要包含了数据结构i2c_driver和i2c_client,我们需要根据具体设备实现其中的成员函数。Linux I2C体系结构图如图3所示。
2.2.2 TVP5150驱动实现
Linux3.0.1相对linux2.6.28而言驱动程序函数接口发生了一些变化,驱动程序进行了优化,TVP5150驱动具体实现如下:TVP5150驱动程序首先要实现对I2C core层的接口,用以挂接I2C adapter层来实现对I2C总线及I2C设备具体的访问方法,主要包括需要编写TVP5150_ init()、TVP5150_probe()、TVP5150_remove()等接口函数。
tvp5150_init()初始化函数,主要调用i2C_add_driver(&tvp5150_i2c_driver)添加设备驱动。
tvp5150_probe()在使用i2C_add_driver()注册时被调用,用来检查被发现的所有的I2C适配器是否符合I2C驱动的特定条件,如果符合相关条件则进行连接,并通I2C适配器来实现对I2C总线及I2C设备的访问。
tvp5150_remove()在删除Tvp5150时被调用,使Tvp5150解码器脱离I2C适配器,并且清除描述该设备相关数据结构。
本文的驱动程序主要实现以下环节:
首先增加了填充camera接口的结构体:static struct s3c_fimc_camera tvp5150_da-ta,结构体中主要描述了摄像头的参数,比如图像尺寸720x240,图像格式ITU_656_YCBCR422_8BIT,像素频率27 MHz等。这些数据在初始化camera接口时要用到。在tvp5150_probe(struct i2c_client*c,const structi2c_device_id*id)函数中增加了一个函数接口s-3c_fime_register_camera(&tvp5150_data)用于把上面这个结构体填入struct s3c_fimc_config s3c_fimc这个全局变量中,其次定义tvp5150驱动配置参数的结构体tvp5150_i2c_driver,在tvp5150_in it()函数中调用i2c_add_driver(&tvp5150_i2c_driver)添加驱动,之后tvp5150_probe()被调用时tvp5150_attach_adapter()会被调用,通过遍历系统中的所有I2C总线驱动来探测Tvp5150,然后调用内核中已经注册的适配器来连接Tvp5150。tvp5-150_attach_adapter()函数主要调用i2c_detect(adapter,driver)函数来探测设备,探测到目标设备之后创建一个strnct i2c_client结构来标识这个设备。
初始化Tvp5150内部特殊功能寄存器的操作主要通过tvp5150_probe()函数来实现,函数中调用i2c_smbus_write_byte_data(c,TVP5150 _init_reg[i].subaddr,TVP5150_init_reg[i].value)来完成寄存器的设置,从而完成了初始化tvp5150的过程。其图像采集驱动流程图如图4所示。
3 驱动移植和相关实验结果
1)驱动程序编写好之后,在Kconfig-camera文件中添加与驱动相对应项目的编译配置选项:
config
bool“TVP5150”
depends on VIDEO_FIMC
---help---
LYT TVP5150 camera module support
2)在Makefile文件中添加对驱动的编译条目:
obj-$(CONFIG_TVP5150)+=tvp5150.o
3)修改mach-smdk6410.c文件:
在i2c_board_info i2c_devs0[]_initdata结构体中{I2C_BOARD_INFO(“ov965x”,0x30),},语句后面添加{I2C_BOARD_INFO(“tvp51 50”,0x5c),},
4)进入linux-3.0.1内核目录,执行make menuconfig进行相关的配置:
其中External Camera(TVP5150)——>
ResetType(0=low,1=high)前面的选择框里要选择0
5)进入内核目录执行make zImage,重新编泽内核,生成内核文件,将新的内核烧写到开发板,运行测试程序即可测试到视频设备采集到的实时图像,如图5~7所示。
4 结束语
通过开发实例详细介绍了宠物智能喂养系统视频采集的驱动设计,实现了TI公司视频解码芯片TVP5150驱动程序的设计,并成功移植到开发板上,具有较高的性价比,可用于视频采集、远程监控等众多领域,该系统视频监控的实现满足了远程实时观看宠物进食和活动情况的需求,对宠物看护系统的进一步完善提供了帮助,在实际测试中,该系统测试结果令人满意,实现了对宠物远程定时定量的喂食,该系统成本很低,具有很好的应用和推广价值。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)