微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式高速图像数据采集板设计方案

嵌入式高速图像数据采集板设计方案

时间:09-12 来源:互联网 点击:

其中,DREQ0和DACK0分别为DMA的请求和应答信号。FPGA的空信号EMPTY与DREQ0相连,读请求RDREQ与DACK0相连。 FPGA写时钟由图像输出位同步信号提供,读时钟由S3C2440A的时钟输出引脚CLKOUT0提供。CLKOUT0根据S3C2440A内部寄存器的设置可以输出几种不同的时钟频率。FIFO的读操作与ARM的DMA操作配合进行。系统采用单服务命令模式的DMA操作,每次传输一个字节数据位。当 DREQ0信号变为低电平时DMA操作开始,每次传输一个字节后产生一个DACK0应答信号,而且只要DREQ0为低电平DMA操作就继续进行,直到 DMA控制寄存器中的计数器为0,产生DMA中断。根据上述时序特点,将FIFO的空信号作为DMA的请求信号DREQ0.当图像输出的数据写入FIFO 中时,空信号跳变为低电平启动DMA操作,同时以DACK0信号作为FIFO的读请求。每次DMA操作后产生的应答信号DACK0使FIFO内部的读指针前移1位指向下次要读出的数据。F-RESET和H-RESET分别控制FPGA内的帧同步复位和行同步复位,保证系统在每帧信号到来时开始工作,同时每采集完一行信号复位FIFO.FIFO输出数据经过以nGCS4为选通信号的BUFFER后接到ARM的数据总线上。nGCS4是S3C2440A存储空间中BANK4的片选信号,当S3C2440A对地址范围0×20000000~0×28000000的存储空间进行读写操作时为低电平,其余时间为高电平,NGCS4作为缓冲模块的选通信号可以有效地避免数据总线的污染。

2.3 网络传输接口设计

本设计采用的以太网控制器为台湾亚信公司推出的一款Non-PCI千兆以太网控制芯片AX88180.其内置1000Mbps以太网媒体存取控制器(MAC);它可以十分方便地实现与一般16/32位微处理器连接,并且可以像SRAM一样被访问;它有40KBytesSRAM网络封包缓存器。它符合 IEEE802.3/IEEE802.3u/IEEE802.3ab协议,可广泛应用于各种消费电子和家庭网络市场或要求更高的网络带宽连接,如数字媒体、家用网关及IP电视等。

嵌入式芯片S3C2440A、以太网控制器AX88180及物理层芯片88E1111的接口电路图如图3所示。

2.jpg

S3C2440A与AX88180之间采用总线方式相连,地址总线A2~A15、数据总线D0~D31、读写信号等可以直接连接,AX88180中断信号与S3C2440A EINT11相连,AX88180的40M~100M时钟信号由S3C2440A提供,整个接口电路无需外加电路;AX88180与PHY芯片之间采用简化千兆比特媒体RGMII接口,信号对应 相连,负责实现数据传送底层协议[5].

3.Linux驱动程序设计

FPGA作为ARM的外设,需要设计它在Linux下的驱动程序。驱动程序是操作系统与硬件之间的接口,它为应用程序屏蔽硬件的细节。硬件系统只有和高效可靠的驱动程序相结合才能在操作系统下正常工作。

Linux的设备驱动程序需要完成如下功能:

①对设备进行初始化和释放。

②提供各类设备服务。

③负责内核和设备之间的数据交换。

④检测和处理设备工作过程中出现的错误。

Linux下的设备驱动程序被组织成一组完成不同任务的函数集合,通过这些函数使Windows的设备操作犹如文件一般。

Linux将设备分为字符设备和块设备两类。我们使用的是字符设备。驱动程序的模块化我们先不做介绍,我们主要介绍Linux下的中断 [6].Linux将中断处理程序分解成两个半部:上半部和下半部。上半部完成尽可能少的比较紧急的功能,下半部用来完成中断事件的绝大部分任务。因为中断的耗时工作在这里完成,所以将读取数据放在下半部完成。Linux系统实现下半部采用的机制主要有tasklet、工作队列和软中断。许多设备涉及到中断操作,因此,在这样的设备的驱动程序中需要对硬件产生的中断请求提供中断服务程序。与注册基本入口点一样,驱动程序也要请求内核将特定的中断请求和中断服务程序联系在一起。在Linux中,用request_irq()函数来实现请求:

int request_irq(unsigned intirq,void(*handler)int,unsigned longtype,char*name);

参数irq为要中断请求号,参数handler为指向中断服务程序的指针,参数type用来确定是正常中断还是快速中断(正常中断指中断服务子程序返回后,内核可以执行调度程序来确定将运行哪一个进程;而快速中断是指中断服务子程序返回后,立即执行被中断程序,正常中断type取值为0,快速中断 type取值为SA_INTERRUPT),参数name是设备驱动程序的名称。

我们的中断处理函数是:

void fpgalc12_interrupt(int irq,void*dev_id,struct pt_regs*regs)。

Irqflags是中断处理的属性,若设置了SA_INTERRUPT,则表示中断处理程序是快速处理程序,快速处理程序被调用时屏蔽所有中断,而慢速处理程序不屏蔽。dev_id在中断共享时会

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top