DSP数据采集系统在DMA控制器中的应用

控制/MCU

1877人已加入

描述

  任何一种自动控制系统都离不开数据采集装置,它的性能直接影响整体系统的工作性能。数据采集装置向着高速、实时方向发展,对数据的传输和控制速度也提出了较高要求。DSP(数字信号处理器)是一种适合于实现各种数字信号处理运算的微处理器,具有哈佛结构、支持流水线处理、快速的指令周期等优点,因而在嵌入式系统中得到广泛的应用。事实上,以DSP为核心来构建数据采集装置也已经成为一种常用的有效方法。

  在多任务信号处理系统中,考虑到设计系统的复杂性,经常需要使用双DSP协同工作来构成系统。双DSP系统的优点在于,可以通过计算能力的均匀分布,使系统具有较好的冗余能力、更快的处理速度、模块化的体系结构。正因为双DSP系统的应用越来越广泛,如何解决好双DSP间的数据共享也变得越来越重要。如果需要进行大量数据的高速交换,依靠控制器自带的串口实现数据的串行传输已很难满足需求,必须寻求一种能进行高速数据通信的方法。而采用双端口RAM是解决双DSP之间高速数据通信的有效办法,该方法能够方便地构成各种工作方式下的高速数据传送介质,很好地解决因数据传输速度低所引起的瓶颈问题。

  随着信息技术的飞速发展,数字信号处理器(DSP)得到了广泛的应用,基于A/D,DSP,D/A的数据采集模式已经被大多数人所接受。在现代生物信号采集方案中,人们不仅要求系统有高速的数据处理能力,而且还要求其有高速的数据处理能力和高精度、多通道的D/A转换能力。

  基于 TI 公司的 TMS320VC5509 为核心的数据采集系统 ,着重介绍了如何利用 DSP5509 的 DMA 控制器 ,实现系统中图像数据的传输功能。

  基于 DSP5509 的数据采集系统

  系统采用了 DSP + FP GA 的双核结构 ,由 CMOS 感光芯片 OV7620 采集图像 , 得到数据源 , FP GA 作为辅助处理器 ,控制部分外围器件并协助采集数据 ,DSP 芯片 TMS320VC5509 作为核心芯片 ,主要负责数据处理。系统结构如图 1 所示:

  DSP 芯片除了连接电、时钟和J TA G 等其工作所必须电路外 ,还外接了一块 FLASH 作为程序存储器 ,一块SDRAM 作为数据存储器。F IFO 作为 CMOS 所采集的图像数据的暂存器 ,待 DSP 发出特定信号 ,便可把其内部存储的数据传至 DSP 。

 dsp

  用 DMA 控制器实现数据传输的思想

  硬件电路接口

  DSP 与 F IFO 的接口系统中 ,F IFO 采用的是 AL422B ,这是一款由AverLogic 公司专门推出的视频帧存储器 ,它的容量大小为 384 K 3 8bit ,其电路连接如图 2 所示。此款 F IFO 的容量比较大 , 可以完整存放由OV7620 所采集的一帧图像。F IFO 的具体工作方式为 ,当系统发出采集信号 ,DSP 的/ AWE 和/ CE2管脚都输出低电平 , 通过 FP GA 所实现的或门 , 使得 AL422B 的/ W 管脚为低 , 此时 F IFO 可写 , 图像数据由OV7620 进入 F IFO ;当采集完一帧图像后 ,DSP 的/ ARE 和/ CE2 管脚都输出低电平 ,通过 FP GA 所实现的或门 ,使得 AL422B 的/ R 管脚为低 ,此时 F IFO 可读 ,图像数据由 F IFO 进入 DSP 。 31112 DSP 与 SDRAM 的接口

 dsp

  通过外部存储器接口 ( EM IF) DSP 可与 SDRAM 实现无缝连接 , 系统 SDRAM 采用的是 H YN IX 公司的H Y57V641620 ,其存储容量为 4 3 1M ,连接电路如图 3 所示。

  DSP 的 CE0 为片选信号 ,B E02B E1 为字节使能信号 ,CL KM EM 为同步时钟信号 ,行选通信号/ SDRAS ,列选通信号/ SDCAS 和写使能信号/ SDWE 分别于SDRAM 的/ RAS 、/CAS 、/WE 管脚相连 , DSP 的地址线 A 和数据线 D 直接与 SDRAM 的相连。

  dsp

  TMS320 VC5509 的 DMA 控制器的特点

  DMA 可独立于 CPU 工作; 有 4 个标准端口与内部 DARAM 、SARAM 、外部存储器和外设相连;有一个辅助端口用于 HPI 和存储器之间的数据传输; 具有 6个通道;可以设置每个通道的优先级;每个通道的传输可以由选定事件触发; 当操作完成后 ,DMA 控制器可向 CPU 发出中断。

  DMA 传输

  TMS320VC5509 的存储空间包括统一的数据/ 程序空间和 I/ O 空间 ,数据空间地址用于访问存储器和内存影射寄存器。DSP5509 的内部地址线为 24 位 ,但当访问数据空间时使用 23 位地址 ,并将 23 位地址左移一位 ,最低有效位置 0 ,使得地址总线传输 24 位地址。故 DSP 在数据空间的寻址范围为 8M ,其 M EMRO Y MA P 如图 4所示。

  由图 4 可以看到 ,以 CE0 为片选信号的 4M 容量 SDRAM 占用了 DSP 数寻址空间的 CE02CE1 两个片区 ,以 CE2 为读写控制信号的 F IFO 始终为 CE2 片区的起始地址0x800000 。F IFO 是作为数据源 ,且地址固定不变 ,SDRAM 是作为数据传输的目的 ,其起始地址为 0x040000 ,且每接收一个数据单元后 ,地址增加 1 。

 dsp

  DMA 通道传输的目的端口和源端口由参数寄存器 DMACS2DP 中的 DST ( SRC) 字段来确定:

  当 DST ( SRC) = xx00 时 ,目的(源) 端口为 SARAM ;

  当 DST ( SRC) = xx01 时 ,目的(源) 端口为 DARAM ;

  当 DST ( SRC) = xx10 时 ,目的(源) 端口为 EM IF ;

  当 DST ( SRC) = xx11 时 ,目的(源) 端口为 Perip heral 。

  DMA 通道在数据传输过程中的地址修改方式由 DMACCR

  寄存器中的 DST ( SRC) AMODE 字段来确定:

  当DST ( SRC) AMODE = 00 时 ,目的(源) 地址为固定地址 ,用于单元传输;

  当DST ( SRC) AMODE = 01 时 ,目的(源) 地址再每个单元传输完后自动增加 ,根据数据的位数是 8 位、16 位还是 32 位 ,地址分别增加 1 、2 或 4 。

  当DST ( SRC) AMOD E = 10 时 ,目的(源) 地址再每个单元传输完后自动增加一个索引值 ,索引值由单元索引寄存器 DMACEI/ DMACSEI 确定。

  当DST ( SRC) AMOD E = 11 时 ,目的(源) 地址再每个单元传输完后按单元索引和帧索引自动增加 ,索引值由单元索引寄存器 DMACEI/ DMACSEI 和帧索引寄存器 DMACF I/ DMACSF I 确定 ,又称为双索引。

  4 程序加载

  调用 DMA 库函数首先要在头文件中包含 csl - dma. h 文件 ,文件中定义了一名为 DMA - Config 的结构体如:

  typedef st ruct {

  Uint16 dmacsdp ; DMA 通道控制寄存器

  Uint16 dmaccr ; DMA 通道中断寄存器

  Uint16 dmacicr ; DMA 通道状态寄存器

  DMA - Adr Pt r dmacssal ; DMA 通道源起始地址(低字段)

  Uint16 dmacssau ; DMA 通道源起始地址(高字段)

  DMA - Adr Pt r dmacdsal ; DMA 通道目的地址(低字段)

  Uint16 dmacdsau ; DMA 通道目的地址(高字段)

  Uint16 dmacen ; DMA 通道数据单元数量寄存器

  Uint16 dmacf n ; DMA 通道帧数寄存器

  # if DMA DST AND SRC INDEX SU PPOR T

  - - - - - -

  对于 5509A ,5510 P G2

  Uint16 dmacsfi ;

  Uint16 dmacsei ;

  Uint16 dmacdfi ;

  Uint16 dmacdei ;

  # else 对于 5509 ,5510 P G1

  Uint16 dmacfi ; DMA 通道帧索引寄存器

  Uint16 dmacei ; DMA 通道单元索引寄存器

  # endif

  } DMA - Config ;

  在定义了结构体 DMA - Config 后 ,便可以在主程序中声明所需的配置:

  DMA - Config myconfig = {

  。。。。。。

  }

  声明配置结构后 ,需调用 DMA - open 函数初始化 DMA 句柄:

  DMA - Handle myhDma ;

  然后打开 DMA 通道 0 :

  myhDma = DMA - open (DMA - CHA0 , 0) ;

  调用 DMA - config 函数对 DMA 进行配置:

  myconfig. dmacssal =

  (DMA - Adr Pt r) ( ( ( Uint32) ( myconfig. dmacssal) 《 《 1)

  &0xFFFF) ;

  myconfig. dmacdsal =

  (DMA - Adr Pt r) ( ( ( Uint32) ( myconfig. dmacdsal) 《 《 1)

  0xFFFF) ;

  配置通道:

  DMA - config ( myhDma , &myconfig) ;

  调用 DMA - start 函数开始 DMA 传送:

  DMA - start ( myhDma) ;

  等待 DMA 状态寄存器的帧状态位指示传输结束:

  while ( ! DMA - F GETH ( myhDma ,DMACSR ,FRAM E) ) {

  }

  关闭句柄:

  DMA - close ( myhDma) ;

  着重介绍了如何利用 DSP 的 DMA 控制器在系统中从 F IFO 向 SDRAM 传输数据 ,经实践检验 ,此方法结构简单、可靠性高 ,并实现了 DSP 对并行数据的高速采集 ,不仅在系统中得到了很好的应用 ,在其它需要实时数据采集系统中也有很广泛的应用前景。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分