首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

双端口RAM实现ARM与DSP高速数据通信设计(2)

双端口RAM实现ARM与DSP高速数据通信设计(2)

2 基于IDT70261的接口电路
  本系统为视频数据采集处理系统,当摄像头采集后的数据经DSP 压缩编码后输入到双端口RAM 芯片中,ARM 处理器接收到数据请求后,接收图像数据,对数据进行存储和传输工作,最终将图像经过解码显示在终端PC 机上。
  基于IDT70261 的接口电路图如图1 所示,此系统采用中断控制机制,双端口RAM 的一些功能引脚并不需要全部使用。双端口RAM 的左端是ARM920T芯片,右端是TMS320C6211 DSP 芯片。双端口RAM两个独立的数据线D0L-D15L 和D0R-D15R 分别与ARM920 芯片和DSP 芯片连接,地址线A0L-A13L 和A0R-A13R 也分别与上述两芯片连接。/CE 为芯片使能引脚,R/W 为读写控制引脚,/OE 为输出使能引脚,/INT 为中断标志引脚,/BUSY 为遇忙控制引脚,其连接电路如图1 所示。

  


  图1 接口电路


  3 数据通信的软件实现
  本系统采用中断控制方式来实现对双端口RAM的读写操作。DSP 主要负责图像数据压缩工作,压缩后的数据传送给双端口RAM.传送数据时,DSP 向信令字单元3FFF 写入‘55H’,在ARM 方产生中断后,ARM 读信令字单元3FFF,如果是‘55H’,说明数据正在传输,读完数据后,向信令字单元3FFE 写入‘AAH’,代表读完数据。DSP 接收到中断后,读信令字单元3FFEH,如果为‘AAH’,表示传输数据成功。
  ARM完成整个系统的实时控制,对双端口RAM的图像数据进行读取然后经过网络传递给PC 机,因此需要驱动程序来实现双端口RAM与ARM之间的数据通信。驱动程序是应用程序与硬件之间的接口,用户可以通过驱动程序来间接的实现对硬件的读写控制操作。双端口RAM 的驱动程序主要任务是读双端口RAM 数据到用户空间、把用户空间命令写入双端口RAM 相应地址以及相应双端口RAM 产生的中断。在驱动程序中,最主要的结构便是file_operation,在里面包含了对文件的打开、关闭、读写和其他控制函数,file_operation 结构如下:

  


  在使用设备之前需要对设备进行初始化,包括配置ARM 接口寄存器、注册设备、申请中断和分配虚拟地址空间等。配置寄存器和注册申请工作在加载模块时实现,分配资源工作在dualram_open 函数内实现。
  配置接口寄存器,AT91RM9200 具有一个EBI 接口,可以方便的连接各种存储设备,可以使用EBI 接口中的SMC 来控制读写,由CS4 接口来控制双端口RAM 的使能信号,通过向相应寄存器内写入控制字来实现ARM 对双端口RAM 的端口初始化工作。
  在初始化函数init_dualram 中,用register_chrdev将双端口RAM 注册为一个字符型设备,用request_irq为设备申请相应的中断资源,函数如下:
  myirq=request_irq(AT91RM_IRQ1,dualport_inter,SA_INTERRUPT,“dualram”,NULL)
  在装载驱动时进行注册和申请,在卸载模块时必须进行注销,即在dualram_exit 内执行unregister_chrdev 和free_irq 来释放资源。
  Linux 无法直接访问某一物理地址空间,必须通过虚拟地址空间的映射机制来完成访问。映射工作在dualram_open 函数内完成,因此每次打开设备都会完成此工作。所要用到的地址资源和数据结构定义如下:
  #define dualram_base_addr 0x60000000
  #define dualram_size ox3fff
  u16 *remaddr
  通过使用函数remaddr = ioremap (dualram_base_addr ,dualram_size);进行虚拟地址映射,此后就可以使用remaddr 来完成对实际双端口RAM 空间的访问了。
  为了有效的提高数据传输效率,驱动程序与应用程序之间采用异步通知的机制,这样上层应用程序便可以知道RAM 中的数据量是否达到阈值,而不用采用轮询的方式,占用处理器资源。异步通知机制分三步完成,首先需要让内核知道驱动程序与哪个进程通信,当进程使用系统函数fcntl 执行F_SETOWN 命令时,设备文件拥有者(owner)的ID 号会被记录在flip-》f_owner 中,此时内核知道了与驱动进行通信的进程,然后应用程序调用fcntl 的F_SETFL 命令来激活异步通知机制,这样新数据到达时输入文件便可发送一个SIGIO 信号到flip-》f_owner 中指定的进程。
  图像数据到达后,Linux 内的应用程序完成对数据的读写操作,写操作函数为:dualram_write,就是利用copy_from_user 把用户空间的数据写入到双端口RAM中,读操作函数:dualram_read,就是利用copy_to_user把双端口RAM 中的数据读入到用户空间中[5,7]。
  4 测试结果
  视频监控系统的测试环境是ARM 920T 与TMS320C6211 通过网络与PC 互连构成一个简单的局域网。通过网络抓包软件可以统计网络的数据流量,通过CCS 分析工具分析系统的实时性。系统的量化阶距越高,图像的压缩比率越大,所获得的图像质量越差,本系统设置的量化阶距设置为75.经测试本系统的主要参数如下:图像的压缩格式为JPEG,分辨率为BMP(240×160),最大编码速度为15 帧/秒,数据流量为50-200kbps,网络采用UDP/IP 协议,网络接口为RJ-45 100Mbps.
  5 结语
  本文结合了嵌入式图像数据采集系统的设计,介绍了通过双端口RAM 实现ARM920T 与 TMS320C6211 DSP 之间的通信。利用双端口RAM 的强大功能可以实现各种形式的处理器之间的高速数据通信。在信号处理领域和高速数据采集中,利用双端口RAM的几种不同仲裁机制,可以完成不同的数据传送要求。用它构成的接口电路具有传送速率高、实时性好、可靠性高、电路简单等优点。
继承事业,薪火相传
返回列表