摘 要:本文在分析DSP片上多通道缓冲串行口(MCBSP)与直接存储器访问(DMA)的基础上,提出了一种非常灵活的接口技术,并设计调试了DSP与相机接口电路和程序。利用本文提出的DMA接口方式,接收数据率可以达到36Mbps, 完全满足激光的实时测量。
关键词:TMS320VC5509;多通道缓冲串口 ;直接存储器访问;接口
引言
在激光波长测量系统中,激光信号从CCD相机输出到信号处理器的时间是实时测量激光波长的关键。即使采用高速单片机也无法满足实时测量的需要,而将DSP用于相机数据采集和信号处理使这一难题的解决成为了可能。
接口设计
本设计采用
ATMEL公司的AViiVA M2 CL相机,该相机采用CameraLink接口。DSP选用了TMS320VC5509,与TMS320C54x相比,该定点DSP通过增强功能单元,提高了DSP的运算能力。相机工作方式的设置通过与DSP的串行通信来实现,采用全双工方式,波特率固定在9.6kHz,每帧数据由一个起始位、8个数据位,以及一个停止位组成。
DSP与相机的通信
TMS320C5509 芯片只有同步串口,通常只能用于与具有同步通信接口的外设进行通信。当其构成一个独立的处理单元需要和带有异步通信接口的外设交换数据时,常用的方式有两种:一种是利用DSP 的通用I/O 口线XF和BIO 构成串口,由软件来设定通信波特率和握手方式。这种方式编程复杂,并且会大量占用CPU 时间。另一种方式是通过专用的异步通信芯片来实现,这虽然能实现DSP高速数据通信,但是增加了硬件电路的复杂性。
本设计直接利用DSP的MCBSP与相机通信。TMS320VC5509有3个MCBSP,依靠数据线D(R/X)、帧同步线FS(R/X)和移位时钟线CLK(R/X)实现数据的发送和接收。由CLKX、CLKR、FSX、FSR 实现时钟和帧同步的控制。
数据格式的统一
要实现相机与DSP的串行通信首先要解决这两种不同通信方式之间的数据格式统一问题。相机接收的每帧数据是十位,所以DSP字长要选择16位。由于这种字长是高位先出,因此,在DSP发送数据前要对数据进行编码:先把要发送的数据位反转,然后加上起始位和停止位。
波特率匹配
MCBSP采样率发生器的输出时钟CLKG由如下等式决定:
FCLKG=FclockSource/(CLKDV+1)
CLKDV是个8位的字段,如果输入的参考时钟FclockSource来自CPU,而为了实现高速采集,CPU要工作在144MHz,所以MCBSP采样率发生器不可能工作在相机需要的波特率9.6kHz。因此,本设计中利用DSP定时器为串口提供时钟。定时器的计数器分为两个:4位的预定标器(TDDR)和16位的主计数器(PRD)。定时器的时钟频率利用公式:Ftimer=FclockSource/[(PRD+1)(TDDR+1)]计算。此时设置:PRD=0, TDDR=14999,定时器就可以输出频率为9.6kHz的时钟信号。
TMS320VC5509与相机的串行通信接口电路中,要利用DS90LV047A把TTL电平转换为LVDS格式。此外,在MCBSP设置中要选择来自CLKR脚上的时钟作为参考时钟。
数据采样
DSP对数据的采样通常采用中断的方法实现,而DMA不仅可以操作内部存储器的数据,而且可以操作片内外设、外部设备以及扩展存储器的数据。所以应用DMA功能可实现在没有CPU 的干预下直接对内存映射区域进行数据传输。
TMS320VC5509提供了6个DMA通道,每个通道均可单独设置所要传送数据的源地址、目的地址、传送数据的长度、数据传送的同步方式以及数据传送完成后是否向CPU发出中断信号等。
DMA的工作方式
传统上,为了保证采样时不丢失数据,往往在DSP与相机间加FIFO来缓冲。数据首先从相机采集到缓冲区FIFO里,然后再从FIFO读入到DSP内存,这样从相机采集到DSP就要一定的附加时间,无法实现高速数据采集和信号处理,而且需要额外的FIFO。本文提出了一种新的DMA采集方法,无需FIFO却能实现数据的高速采集。
DS90CR286的主要功能是把CCD相机输出的LVDS信号转换为TTL信号,本设计中把DS90CR286输出的数据直接接到DSP的外部存储器接口(EMIF)数据总线上,然后DMA 把源地址设置为外部存储器的地址,这个地址要初始化,但又不能是真正存在的外部存储器的地址,这样DSP每次所采集的数据,正是相机输出的数据。在图1中给出了DMA方式数据采集原理,其中R1~R6都是100W的电阻。
要实现测量的实时性,必须实行数据采集和数据处理流水线作业。本设计中在DSP片上数据存储区设立了两个交替工作的存储缓冲区,通过在软件上设立标志位实现对存储区间的切换。DMA的数据长度设置为相机一帧数据的长度,目的起始地址在数据空间上有两个,分别设置为4000h与4400h。假如在DSP芯片上的数据区设置两块1KB的数据缓冲区A和B,分别代表目的地址为4000h和4400h的数据缓冲区,进行数据存储和数据处理,当DSP用A区进行采集数据的第i帧时,同时B区进行第i-1帧数据的处理。当两者同时结束后,接着又用B区进行第i+1帧数据的采集, 同时A区进行第i帧数据的处理,这样交替工作,形成流水线作业。数据传送的同步信号由DS90CR286的INT2引脚产生,当数据在一个数据区存满时,通过INT3通知CPU转到另一数据存储区。图2给出了DMA功能对数据采集的时序图。
高速数据采集的程序设计
DMA方式高速采集的程序由EMIF初始化、DMA控制器设置和中断服务程序组成。EMIF初始化主要用来设置外部存储器的工作频率和类型。其中,对工作频率的设置非常重要,它直接影响到数据采集的频率。在DMA方式下,数据采集的速率等于EMIF工作频率的四分之一。DMA控制器设置是数据采集的关键,由于DMA有两个目的地址,为了使程序简单,同时也为了避免数据的冲突,本设计采用两个DMA通道:通道1与通道2。下面给出了DMA设置的程序以及详细的说明。
DMA通道1的设置程序:
MOV #0x0004,PORT (#0x0E00);设置DMA_GCR为共享模式
MOV #0x0405,PORT (#0x0C20);设置DMA_CSDP1的目的为DARAM,源为EMIF
;数据单元长度为16位,不打包
MOV #0x0000,PORT (#0x0C22);关闭DMA_CICR中的所有中断
MOV #0x2005,PORT (#0x0c24);源地址为外部SDRAM的442005h
MOV #0x0044,PORT(#0x0c25)
MOV #0x4000,PORT (#0x0c26);目的地址为DARAM的4000h
MOV #0x0000,PORT(#0x0c27)
MOV #0x0400,PORT (#0x0c28);每帧1024个数据单元
MOV #0x0001,PORT (#0x0c29);每块1帧
MOV #0x4011,PORT (#0x0c21);源地址固定,目的地址采用自动递增方式修改地址,外部中断2作为同步事件
DMA通道2的设置和通道1只有目的地址不同,其他都相同,下面给出了DMA通道2目的地址设置程序:
MOV #0x4400,PORT (#0x0c46);通道2目的地址为DARAM的4400h
MOV #0x0000,PORT(#0x0c27)
程序的中断服务程序主要功能是当一帧数据采集结束后,对标志位进行设置,让CPU来处理这帧数据,同时把下一帧要采集的数据用另一个DMA通道采集并存储到另一块存储区。
结语
本文利用DMA接口方式从EMIF的数据总线上直接采集数据,实现了高速并行数据采集,且结构简单,经过实践检验,最高采集速率达36Mbps,不仅能够实时测量激光波长,而且在其他需要实时的数字视频系统应用中也有很好的应用前景。■