本站小编为你精心准备了ARM和FPGA的红外系统数据交换参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
《电视技术杂志》2014年第十一期
1数据接口硬件设计
对于高速图像采集系统,两个模块的数据交互接口非常重要,极有可能成为高速图像传输性能的瓶颈。根据系统对处理数据的分析,考虑到系统向上和向下的兼容性,SRAM选型时均考虑处理数据的最大值情况,前端非制冷焦平面微热辐射计型探测器选用系统兼容最大可能的384×288像素,处理后的图像数据16位宽度,得到未经过压缩的单帧图像数据量为2.16Mbyte。考虑到图像处理运算过程中需要大约10帧的图像缓存空间。鉴于以上对系统中传输数据的分析,本系统选用ISSI公司的IS61LV51216,高性能CMOS制造工艺,存储容量为512×16kbit,内部8Mbyte容量,存取时间最低可达8ns,全静态操作不需要时钟或刷新,输入输出兼容TTL标准,高字节数据和低字节数据可分别控制,最高运行频率为133MHz,常见的封装为44脚TSOP,兼容LVTTL接口。具有简单的读写和片选控制引脚,在与FPGA和arm连接时,只需将SRAM的控制端、数据端及地址端直接与fpga和ARM分配的相应端口连接,并在FPGA和ARM中设计SRAM接口控制模块,便可实现SRAM的读写操作[4]。ARM与FPGA接口电路设计框图如图2所示。FPGA模块首先将前端处理后的高速数据分为4路低速数据写到构建的4个FIFO中,采用乒乓操作的方式将经过算法处理的32bit数据存到4个FIFO中[5]。经过对SRAM的时钟控制,将4个FIFO的数据分别存储到4个地址区域,将8Mbyte的SRAM分为4个地址空间,由于SRAM的写时钟信号和FIFO的时钟信号为同频,所以FIFO时钟与输出之间必然会产生时间延时,本文采用FIFO的时钟相位做相应的偏移,然后作为SRAM的写时钟信号方法,有效地避免了竞争冒险。存入的数据采用小端存储方式,数据存储的控制模块采用中断控制方式对数据流进行相应控制,当FIFO中的数据达到系统设计的一帧阈值时,控制模块将FIFO中的数据存储到SRAM中,当SRAM中的数据达到一帧数据时,控制模块向ARM端口发出中断信号,ARM通过片选总线获取数据。
2驱动程序设计
系统以ARM模块为核心对各个模块进行控制,其操作系统选用具有开源、免费、安全、稳定、高性能等优点的Linux系统,应开发商要求本系统选用Linux-2.6.30稳定版本。在整个系统中,驱动程序主要工作为:消息队列函数等待响应中断信号,软件触发DMA中断,数据进行内部映射,DMA方式获取红外图像信号。驱动程序主要处理过程为:1)初始化前端SRAM模块,注册设备号,申请外部中断和DMA中断,申请两个阻塞等待队列;2)判断FPGA模块发出的中断信号,唤醒等待队列1,并进行中断响应;3)通过片选nGCS1,将地址线、数据线获取片外SRAM数据;4)唤醒等待队列2,响应DMA中断,通过DMA方式对数据进行内存映射;5)将SRAM的存储空间映射到用户进程空间。驱动设计的主要流程如图3所示,驱动程序主要分为下面几个部分进行介绍。
2.1模块初始化每个字符设备驱动中都需要一个file_operations结构,便于内核与驱动程序的操作对应,file_operations结构是定义在<Linux/fs.h>中的函数指针数组,结构体中的每一个域对应着驱动内核模块用来处理某个被请求事件的函数首地址,在驱动编写时均用dma作为函数名。在该结构体中,每个函数的参数都有1个指向特定file结构的指针,第2个参数在驱动程序中都有对应的硬件操作程序,每个参数都有特定的功能。对驱动程序的初始化是在dma_init()函数中完成的,其中包括设备号的申请、外部中断的初始化、对外部地址映射空间的初始化等。
2.2驱动设备号申请函数本文设计的驱动函数采用动态分配设备号,调用函数alloc_chrdev_region(dev_t*dev,unsignedint-firstmi-nor,unsignedint-count,char*name),其中dev为手动给定的设备号,count为所请求的连续设备号的个数,而name为与该设备号范围关联的设备名称,它将出现在/proc/devices和sysfs中。采用动态申请可以避免手动指定设备号带来的缺点。
2.3中断申请初始化由于Linux内核要与外部硬件设备进行通信管理,但处理器的处理速度与外围设备速度不处于一个等级,不能采用浪费处理器资源的轮询方式进行处理,因此驱动程序中通过注册中断号并且激活一个中断处理函数来对数据进行处理。中断注册函数如下所示:其中第1个参数irq表示分配的中断号,第2个参数handler是指向中断处理函数的指针,中断一旦来临转到处理中断处理函数,第3个参数flags指定了快速中断或中断共享等中断处理属性,第4个是设备驱动程序的称,第5个是中断名称。与之对应的中断注销函数为free_irq(unsignedintirq,void*dev_id),一般在退出和出现特殊情况时调用。本系统选用的是外部中断4(IRQ_EINT4)与DMA中断,选用软件触发的DMA3通道(IRQ_DMA3)。具体程序代码如下:
2.4等待队列等待队列属于阻塞式的访问模式,阻塞方式是驱动在对设备进行操作时,如果始终没有获取中断信号,进程将会被挂起直到中断信号来临满足条件后再进行操作;非阻塞式是不对设备进行操作时,不断地查询或者放弃控制设备,这样将大大降低系统性能。本驱动选用阻塞式等待队列,当应用程序对设备进行读操作时,会调用一个程序,将系统的控制权交给内核并进入等待状态,当系统执行程序完毕后向应用程序返回响应,得到响应后系统将退出阻塞状态继续后面的工作。
2.5存储器控制初始化S3C2440A存储器控制器为访问外部存储器提供控制信号,控制器包括以下特性:支持软件大/小端控制,共1Gbyte的存储空间分为8个Bank,每个Bank有128Mbyte的空间,其中Bank6~Bank7存储器为ROM,SRAM,SDRAM提供控制,Bank0~Bank5为ROM,SRAM提供控制。具有7个固定的Bank地址,1个可变的存储器Bank地址,所有的存储器访问周期都可以编程控制,并且支持SDRAM自刷新和掉电模式。S3C2440A内部存储空间地址分配如图4所示。系统选用的SRAM芯片为IS61LV51216,芯片总线宽度为16位。该外部存储器SRAM映射到Bank1上,物理地址0x08000000上,需要对控制寄存器进行相应的设置,首先是总线宽度和等待控制寄存器BWSCON,该寄存器的物理地址为0x48000000,只需对Bank1的控制位进行相应设置。SRAM不使用UB/LB,禁止WAIT状态,数据总线宽度根据芯片所知为16位,BWSCON中Bank1的控制信息详见S3C2440A芯片手册。由于采用的是Bank1,对Bank1的控制寄存(BANKCON1)进行相应设置。根据S3C2440A芯片手册,该寄存器物理地址为0x48000008,对寄存器每一位进行相应设置,根据图5对SRAM控制时序对寄存器进行相应配置。图5中,Tacs为nGCSn前的地址建立时间选择0个时钟;Tcos为nOE前的片选建立时间选择0个时钟;Tacc为访问周期选择14个时钟;Tcoh为nOE后的片选保持时间选择0个时钟;Tcah为片选信号nGCS1后的地址保持时间选择0个时钟;Tacp为Page模式下的访问周期选择0时钟;PMC为Page模式配置选择正常模式一个数据。这些参数都在BANKCON1寄存器中进行配置。具体代码如下:
2.6DMA寄存器初始化S3C2440A支持处于系统总线和外设总线的4个DMA通道,DMA控制器的每个通道都可以无限制地执行系统总线和外设总线之间设备的数据移动,每个DMA通道都可以执行下面4种情况[7]:1)源地址和目标地址都在系统总线上;2)源地址在系统总线上,目标地址在外设总线上;3)源地址在外设总线上,目标地址在系统总线上;4)源地址和目标地址都在外设总线上。DMA可以在没有CPU的干扰之下进行数据传输,大大提高处理器的效率,DMA的运行还可以由软件进行控制,也可以由来自内部或者外部的引脚请求进行。本系统选用DMA3通道,采用软件触发的方式进行,驱动程序需要对DMA中的相关寄存器进行配置。源地址寄存器是要传输的源数据基本地址,S3C2440A的DMA3通道源地址寄存器为DISRC3,物理地址为0x4B0000C0。系统中SRAM映射到片外Bank1上,即0x08000000。源地址控制寄存器DISRCC3,物理地址为0x4B0000C4,源地址在系统总线(AHB)上,每次进行单次和突发模式传输后数据大小选择增加。目的地址寄存器DIDST3,物理地址为0x4B0000C8,分配目的地址时要注意,由于采用DMA方式,内存中获取的目的虚拟地址数据与cache中数据不一致将会出现内存错误,所以在进行地址申请时要禁止C(Cacheable)域,C域代表是否使用高速缓冲存储器。也就是cache。所以在进行目的地址申请时采用dma_alloc_writecom-bine()。目的地址控制寄存器DIDSTC3,物理地址为0x4B0000CC,因为SRAM也外设在系统总线上,所以与源地址控制寄存器配置相同。DMA控制寄存器DCON3,物理地址为0x4B0000D0,该寄存器有32位,配置非常重要,针对外接SRAM的特性,软件触发的方式。最后对DMA触发屏蔽寄存器(DMASKTRIG3)进行配置,主要设置为软件触发方式。如要详细了解配置原因详见芯片手册。
3应用程序设计
系统对实时性要求较高,以突出高性能为主,因此应用程序规模较小,在设计时采用面向过程的开发方式。本系统的主要开发流程如图6所示。本系统的主要应用程序较简单,主要是将图像数据上传到PC机,本系统选用UDP的方式进行数据传输。上传数据包括两个部分,一个是图像数据,另一个是传感器信息。由于传输数据中包括了实时媒体流数据,因此该网络传输协议采用了RTP/RTCP实时传输协议和实时传输控制协议。传输数据包括标签数据和视频压缩数据,进行分时传输,但由于标签数据重要性高,因此具有更高的优先级,即保证一个传输周期内标签数据可靠传输完成后,再进行视频数据流的传输。RTP/RTCP下层使用的网络层协议为UDP,因为RTP/RTC协议已经完成了差错控制和拥塞控制等传输控制,不需要使用复杂的TCP协议来实现,而是选择简单的UDP协议[7]。数据按照RTP格式封装完成后,使用UDP协议通信,UDP不要求保持一个连接,没有因接收方认可收到数据包而带来的开销,需要的网络带宽比TCP更小。UDP通信的程序设计流程图如图7所示。
4实验结果分析
对采集的原始图像,在FPGA做相应的盲元补偿、滤波、非均匀校正等算法处理。通过实验室中黑体映射进行温度标定,建立温度与灰度的映射表,ARM系统中采用DMA方式对图像进行传输存取,每帧图像分辨率为384×288,每点的图像数据位16bit,在进行图像显示时只需选取高8位轮廓进行显示就能达到要求,经测试传输速度为15f/s(帧/秒),网口模块需要在系统中达到20Mbit/s的带宽,经过测试本系统网口模块能达到传输要求。最后PC机对上传的灰度数据经过编码显示。系统实物图和PC机接收到烙铁红外图像如图8所示。测试表明本文设计的各组模块均能达到红外监控系统的要求。
5总结
本文设计出基于ARM和FPGA红外系统数据交换驱动程序,详细介绍驱动设计的流程,在传统数据的内存映射传输方式上,提出软件触发DMA方式实现对图像数据的搬移,极大提高了系统传输效率。
作者:王小平吴伟单位:重庆城市管理职业学院重庆邮电大学信号与信息处理重庆市重点实验室