您当前的位置:首页 > 科技前沿

基于AT91RM9200的图像采集系统

时间:2015-09-02  来源:扁平线圈电感厂家  点击:
SB客户驱动程序提供的USBD接口和应用程序接口,屏蔽了硬件实现的细节。应用程序将外部设备看成是一类特殊文件__设备文件,可以使用像操作普通文件一样的系统调用接口函数来完成对外部设备的打开、关闭、读写和I/O控制操作。陷于篇幅原因只对驱动程序的重要部分进行阐述。

  l 驱动程序的注册、注销:所有的USB设备类驱动程序都要在USBD中进行注册和注销,Linux中的驱动程序通常采用模块方式编写,使用函数module_init注册设备,使用函数module_ exit注销设备。

  module_init(usb_gfkd_init); /*加载模块入口,调用函数usb_register()注册设备*/

  module_exit(usb_gfkd_exit); /*注销模块入口,调用函数usb_deregister()注销设备*/

  l 驱动程序与USBD的接口:USBD为每个设备驱动程序维护一个相关的usb_

driver的数据结构,负责设备的初始化和卸载。当总线上有设备连接操作时,USBD通过该结构来查找相关的驱动程序,并调用初始化函数probe()对设备初始化;当设备断开时,USBD也通过该结构来查找相关的驱动程序,并调用设备卸载函数disconnect ()对设备卸载。USBD接口的数据结构定义为:

  static struct usb_driver gfkd_driver = { "gfkd",gfkd_probe,gfkd_disconnect};

  初始化函数static void * gfkd_probe(…)首先读取设备的Usb dev结构,根据设备的配置描述符判断该设备是否被驱动程序所支持, 判断使用接口是否正确,然后为驱动申请一块内存,再探测使用的摄像头,完成对摄像头的初始化,最后创建摄像头的设备文件结点[5]。

  卸载函数static void gfkd_disconnect (struct usb_device *dev, void *ptr)的作用是终止数据传输、删除摄像头的设备文件结点、释放接口、将驱动占用的内存释放。

  l 驱动程序与应用程序接口:摄像头驱动程序在static struct file_operations gfkd_fops中给应用程序提供了统一的外设操作函数接口,当应用程序对摄像头进行open 、release、read、内存映射mmap以及IO控制等系统调用操作时将通过该结构访问驱动程序提供的函数。

  static struct file_operations gfkd_fops = {

   .owner = THIS_MODULE, .open = gfkd_open,

   .release = gfkd_close, .read = gfkd_read,

  .mmap = gfkd_mmap, .ioctl = gfkd_ioctl,

   .llseek = no_llseek, };

  打开摄像头函数static int gfkd_open(struct inode *inode, struct file *file)作用是打开摄像头的设备文件结点,并为数据传输做好必要的准备工作。它先调用函数gfkd _alloc()分配用于视频解码的临时数据缓冲区、帧缓冲区和数据缓冲区;然后初始化摄像头,用函数gfkd _setMode()设置输出的视频格式和分辨率;再用函数gfkd _setFrameDecoder()设置帧缓冲区接隔离电感器收的视频帧的格式和分辨率;最后调用函数gfkd _init_isoc()初始化等时数据传输设置、打开摄像头和分配提交URB。

  关闭摄像头函数static int gfkd_close(struct inode *inode, struct file *file)作用是关闭摄像头的设备文件结点。它先调用函数gfkd _stop_isoc()终止等时数据传输;再调用函数CameraShutDown()关闭摄像头;最后使用函数gfkd _dealloc( )释放分配的各种缓冲区。

  内存映射函数static int gfkd_mmap(struct file *file, struct vm_area_struct *vma)实现内核空间与用户空间的内存映射。先通过函数vmalloc()申请分配足够大的内核态内存作为图像帧缓冲区,并能存储两个URB采集的图像;然后用函数remap_page_range()将其映射到用户空间中。这样提高了用户程序获取内核态图像帧缓冲区数据的速度。

  读函数static long gfkd_read(struct video_device *dev, char *buf, unsigned long count, int noblock)通过调用函数copy_to_user()将图像数据从内核态的帧缓冲区拷贝到用户态的数据缓冲区。

  IO控制函数static int gfkd_ioctl(struct video_device *vdev, unsigned int cmd, void *arg)的功能是接收应用程序的各种命令,实现对摄像头的控制操作,如获得摄像头的参数、设置摄像头的分辨率

、开始采集图图像和设置帧同步。

  由于Linux中任何USB传输都是通过URB实现的,每次URB传输都包括URB的建立、发出、回收、数据整理等阶段不产生有效数据,因此在具体实现中采用等时传输方式,通过建立两个URB,使用双URB轮流通信的方法来提高图像的采集速度。

  本驱动程序开发是基于ATMEL最新版Linux-2.4.27-vrs1-Atmel,在驱动程序开发完后需重新配置内核,让内核支持usb-ohci大功率电感器

大电流电感

[开关电源]LM27762输出电压急剧跌落LM27762做电源,输入+5V,输出正负3.3V,供3个OPA2727使用,不焊接OPA2727输出正常,分别为+3.317V,-3.401V,焊接一个OPA2727,正电压变为+3.203V,负电压变为-0.685V。 更换电源,由USB改为电流源供电,电流40mA。 翘起OPA2727管脚4(-3v3管脚),则输出电压恢复正常。 FB-电压为0.4V。 用电子负载确认,在10K的情况下,电压为3.26V,电流看不到。 在100欧的情况下,电压已经跌落至0.16V,电流为10mA左右!但是焊接LM35

TX-KBl02的原理图

TX-KBl02的原理图




你用 iPhone 吗?你用 Android 吗?你的手机里有电子设计用的软件吗?在 APP Store 或者安卓市场,搜索 DAKA,可以免

铁芯电感量与频率的关系?铁芯电感值与频率的关系,匝数为1的话。我自己先顶一下,厂家要求的铁芯尺寸与性能,13.5*23*20 1KHz 305uH,应该用什么材料的铁芯呢,我算了一下磁导率大约为18万,求各位指点,求什么

注塑加工厂


上一篇NXPTEA1721FT小型低成本5W电源解决方案

下一篇OFDM同步算法的FPGA实现


  
  温馨提示
网站首页 | 产品展示 | 科技前沿 | 行业资讯
本公司专业研发、设计、生产、销售贴片电感、插件电感、功率电感、大电流电感、扁平线圈电感、一体成型电感。
专业电感生产制造商,品质优异、交期快。
在线客服
热线电话