ARM920T基于Linux平台下的FPGA驱动开发_第1页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、arm920t基于linux平台下的fpga驱动开发操作系统的全称是gnulinux,它是由gnu工程和linux内核两个部分共同组成的一个操作系统。该系统中全部组件的源代码都是自由的,可以有效庇护学习成绩,因而在领域得到了广泛的应用。是英文field programmable gate array的缩写,即现场可编程门阵列,该器件是作为专用asic (application specific integrated circuit)领域中的一种半定制而浮现的,它的浮现既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。在通信行业、传输网、医疗仪器、各种仪器、安防监控、电力系统、以

2、及消费类电子中都大面积用法。随着产品研发周期的逐步缩短,定制型产品的开发使fpga在后面的应用面越来越广。例如在2g和3g通信,以及以后的4g通信和wimax等等通信类设备中,它与、mpu一起将大量浮现在其中。微处理器是一款由samsung为手持设备设计的低功耗、高度集成的微处理器,采纳272脚fbga封装,内含一个920t内核和一些片内外围设备。在时钟方面,该芯片集成了一个具有日历功能的rtc和具有pll (mpll和upll)的芯片时钟发生器。mpll产生的主时钟能够使处理器工作频率最高达到203mhz。这个工作频率能够使处理器轻松运行于windows ce,linux等操作系统并举行较为

3、复杂的信息处理。为此,本文以s3c2410上用法公司的ep2s30f67214为例,系统地介绍了在linux系统环境下的fpga的驱动办法。1 基本原理linux下的设备驱动程序通常是一个存在于应用程序和实际设备间的软件层。许多设备驱动都是与用户程序一起发行的,可以协助配置和存取目标设备。在linux下驱动fpga,其本质上就是字符设备的驱动,惯例上它们位于dev名目。1.1 主次编号在内核中,dev_t类型(在中定义)用来持有设备编号。通常2.6内核版本限制在255个主编号和255个次编号。建立一个字符驱动时,需要做的第一件事是猎取一个或多个设备编号。其须要的函数是regis-ter_chr

4、dev_region,设计时可在中声明:int register_chrdev_region(dev_t first,unsigned int count,char*name);犹如大部分内核函数一样,假如分配胜利,register_chrdev_region的返回值将是0。出错时,则返回一个负的错误码,但不能存取哀求的区域。1.2 重要数据结构注册设备编号仅仅是驱动代码必需举行的诸多任务中的第一个。驱动操作包括三个重要的内核数据结构,称为file_operations、file和inode。其中,对于fpga驱动来说,最值得关注的是文件操作(file_operations)。file_ope

5、ration结构是一个用字符驱动方式建立设备编号和设备操作的衔接结构,定义在是一个函数指针的集合。每个打开文件与它自身的函数集合相关,这些操作大部分可由系统调用,例如:open(),read ()等等。典型的file_operation结构可用fpga设备列表所示,其代码如下:第一个file_operations元素根本不是一个操作,它是一个指向拥有这个结构的模块指针,或用来在操作用法时阻挡模块被卸载,它也是在中定义的宏;llseek主要用于转变文件中的当前读写位置,同时可将新位置作为(正的)返回值。其定义如下:loff_t(*llseek) (struct file*,loff_t,int)

6、;ioctl可为系统调用提供一个发出设备特定指令的办法。假如设备不提供ioctl办法,那么,对于任何未事先定义的哀求,系统调用将返回一个错误。定义如下:int(*ioctl) (struct inode*,struct file*,unsigned int,unsigned long):1.3 设备注册内核在内部将用法struct cdev类型结构来代表字符设备。在内核调用设备操作前,代码应该包含。而假如想将cdev结构嵌入设备特定的结构中,则应该初始化已经分配的结构,其用法的代码为:void cdev_init(struct cdev*cdev,structfile_operations*f

7、ops);1.4 open和releaseopen主要用于提供驱动初始化,在大部分驱动中,open应该检查设备特定的错误(例如设备没预备好,或者类似的硬件错误),但是,其第一步经常是确定打开哪个设备。open的原代码为:int(*open) (struct inode*inode,structfile*flip);release是open的反操作。1.5 读写操作读和写都是举行类似的任务,就是从设备到应用程序代码的数据拷贝。因此,它们的原代码比较相像:ssize_t read(struct file*flip,char_user*buff,size_t count,loff_t*offp);s

8、size_t write(struct file*filp,const char_user*buff,size_t count,loff_t*offp);read的任务是从设备拷贝数据到用户空间(用法copy_to_user),而write办法则是从用户空间拷贝数据到设备(用法copy_from_user)。图1所示是用read参数表示一个典型读的实现过程。2 硬件电路通常在大容量存储项目中,s3c2410处理器普通作为主cpu,可对ep2s30f67214举行扩展,以使系统具有拍摄、存储、下载、io口扩展的功能。因为fpga的高速处理能力和易扩展性,arm与fpga的结合用法,将在嵌入式系统

9、领域占领主导地位。本项目中的arm主要读取fpga的数据,然后举行数据处理并送给上位机。其arm处理器与fpga的衔接关系2所示,其主要衔接有32位宽数据线、27位宽地址线以及读、写、中断和片选控制线等。在s3c2410中,ngpcs4的物理地址为0x20000000x28000000,共计128mb的静态物理空间。中断方式为下降沿有效。3 编程实现3.1 设备驱动初始化初始化模块在内核启动时主要负责初始化fpga工作。其实现由module_init () 和module_exit ()两部分组成。其代码如下:3.2 异步中断通知在应用程序中,可用如下代码获得中断响应:signal (sigi

10、o,test_handler);*test_handler为函数名字*fcntl(fa,f_setown,getpid ();oflags=fcntl(fa,f_getfl);*fd为打开设备返回值*fcntl (fd,f_setfl,oflagsfasync);*fd为打开设备返回值*应该注重的是,不是全部的设备都支持异步通知。应用程序经常假定异步能力只对socket和tty可用。3.3 地址映射在linux设备驱动程序开发过程中,因为驱动程序操作的都是设备的虚拟地址,因此,要使驱动程序对虚拟地址的操作反映到正确的设备上,还需要通过内存管理单元mmu来将设备的虚拟地址映射到正确的物理地址上去,从而保证驱动程序对设备的虚拟地址的操作,也就是要对其相应的物理地址举行操作。用法内存映射的益处是处理大文件时,其速度显然快于标准文件io,这样无论读和写,都少了一次用户空间与内核空间之间的复制。在用户空间对fpga设备的拜访可通过内存映射来实现。fpga可以看作是硬件衔接在s3c2410微处理器的片选信号ngpcs4上的一段物理地址的寻址。因此,必需先把物理地址映射到虚拟地址空间,然后才干对该段

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论