引言 ---TMS320VC5402(以下简称C5402)是德州仪器公司1999年推出的定点数字信号处理器(DSP)。与TMS320C54x系列的其他芯片相比,C5402以其独有的高性能、低功耗和低价格受到了人们的广泛青睐。C5402增强外设有软件等待状态发生器、锁相环时钟发生器、6通道直接存储器访问(DMA)控制器、增强型8位并行主机接口(HPI)等。两个可编程的多通道缓冲串口(McBSP)能够全双工、快速地与其他同步串口进行数据交换,硬件连接简单,串口的工作模式和传送数据的格式可通过编程实现。 ---因为C5402内部没有集成A/D,因此在数据采集时需要使用A/D转换芯片,A/D芯片与C5402的接口设计成为一个重要的问题。A/D转换芯片一般有串行A/D和并行A/D。为了充分利用C5402所提供的多通道缓冲串口资源,简化系统设计,本文系统使用了TI公司的高速串行A/D来同时完成两路数据采集,大大提高了串口工作效率。
串行A/D芯片TLV1572 ---TLV1572是高速的十位串行A/D转换芯片,可以通过3或4个串行口线直接与DSP或其他数字微处理器串口相连,不需要外加逻辑,但是转换速度受SCLK供给时钟的限制。TLV1572与DSP的多通道缓冲串口相连是通过CS、SCLK、DO和FS四条线完成的,此时DSP的CLKR产生移位脉冲,FSR产生帧同步信号,并分别提供给TLV1572。当T-LV1572与其他串口微处理器相连接时FS必须提供高电平,通过CS、SCLK、DO三条线来完成数据传输。当CS为高时,A/D芯片各管脚处于三态状态。在CS由高变低时,TLV1572检测FS引脚的状态来确定工作模式,若FS为低则为DSP模式,若FS为高则为其他微处理器模式。
图一 TL1572在DSP模式下的转换时序图 图二 TL1572在微处理器模式下的转换时序图 ---当TLV1572工作在DSP模式时,必须保证在CS变低时,FS为低电平,并且要锁存一定时间。CS为低时,DO跳出三态状态,但是直到FS为高时芯片才脱离休眠状态。TLV1572在每个时钟SCLK的下降沿检测FS的状态,一旦检测到FS为高,TLV1572开始采样。在FS的下降沿,A/D芯片通过移位时钟将数据移到DO上。在6个前导0传送之后,DSP可以在时钟的下降沿得到A/D转换的数据,如图1所示。在最低位移出之后,A/D芯片自动进入休眠状态,直到FS下一次有效。如果FS在16位传输完成后立即有效,则A/D开始新的数据转换,此时A/D为连续转换。若FS在TLV1572转换数据的过程中变高,则A/D芯片被复位,开始新的数据转换周期。因此可以通过设置FS,改变数据传输的位数。 ---当TLV1572工作在非DSP模式下时,FS引脚必须接高电平。在每次转换的过程中都必须提供16个时钟信号,若微处理器无法一次接收16位数据,可以分成8位两次接收,两次接收的时间间隔不能大于100μs,此时CS必须一直处于有效状态。在DSP模式下转换的开始是由FS信号有效来决定的,而在微处理器模式下,数据转换CS有效后的第一个时钟信号上升沿开始的,如图2所示。在微处理器模式下,也可以通过设置CS来改变传送的位数。
C5402的多通道缓冲串口 ---C5402提供两个高速、全双工、多通道缓冲串行口McBSP0、McBSP1,用数据线D(R/X)、帧同步线FS(R/X)和移位时钟线CLK(R/X)实现发送数据和接收数据。McBSP通过6个引脚(DX、DR、CLKX、CLKR、FSX和FSR)与外设接口。 (1)CLKX(发送时钟输入或输出) ---芯片内部发送以为寄存器(XSR)通过该时钟信号将数据发送到DX引脚。该串口可以通过PCR寄存器的CLKXM位配置成使用内部时钟或者使用外部时钟。 (2)FSX(发送帧同步输入或输出) ---FSX是发送开始的标志,串口可以通过PCR寄存器的FXM位配置成输入或输出。 (3)DX(串行数据发送) ---串口数据发送是通过该口进行的。 (4)CLKR(接收时钟) ---CLKR用来接收外部时钟信号,该时钟信号将DR数据移入接收移位寄存器(RSR)。可以通过PCR寄存器的CLKRM位配置成使用内部时钟或者使用外部时钟。 (5)FSR(接收帧同步输入) ---FSR接收帧同步脉冲信号,标志数据接收开始。可以通过PCR寄存器的FRM位配置成输入,也可以配置成输出。 (6)DR(串行数据接收) ---串口数据接收是通过该口进行的。接收过程中,数据首先通过移位时钟CLKR的作用下移入RSR(接收移位寄存器),然后,RSR中的数据再拷贝到DDR(数据接收寄存器),拷贝完成时,产生RINT中断通知CPU来响应或REVTA中断通知DMA响应,同时设置RRDY中断标志位,也可以用查询方式来完成,从数据寄存器中读出数据。CLKX、CLKR、FSX、FSR即可以由内部采样率发生器产生,也可以由外部设备驱动。McBSP分别在相应时钟的上升沿和下降沿进行数据检测。每个McBSP最多可支持128通道的发送和接收,串行字长可选,包括8、12、16、20、24和32位,还支持μ率和A率数据压缩扩展。
系统硬件设计 ---在分析了C5402多通道缓冲串口和串行A/D转换器TLV1572工作特点后,可以利用TLV1572工作在DSP模式,使其与C5402进行接口,在同步时钟信号的作用下完成A/D转换的数据传输。图3为整个数据采集系统的硬件原理图,本系统根据C5402的多通道缓冲串口特性,充分利用两个缓冲串口与两片串行A/D TLV1572进行数据传输。
---为了达到与C5402很好匹配,A/D电源和参考电压都接了3.3V。A/D的FS接DSP的FSX和FSR,使数据输入的帧同步信号由DSP产生。SCLK接DSP的CLKX和CLKR,这样数据的输入和输出时钟均来自DSP。C5402与两片A/D进行数据传输时,设置串口中断工作在00模式,即串口数据到达触发中断,这样CPU可以根据哪片A/D传输数据产生相应的串口中断RINT0或RINT1。当两个串口的数据同时到达,即同时申请中断时,C5402的CPU会根据中断优先级响应RINT0中断,然后再响应中断RINT1。为了保证数据通信的可靠性,避免数据冲突,在响应RINT1中断的过程中,串口0无中断请求。 ---C5402芯片内配置有4K×16bit片内屏蔽式的ROM(F000-FFFF)。在4K ROM资源里包含了Bootloader程序,它允许程序放在外部较慢的存储器或微处理器中,并调到高速的DRAM存储器中运行,大大减小了C5402内部掩膜的需要,降低了电路设计成本。系统独立工作的内部逻辑由CPLD来完成,如图4所示。 ---C5402上电复位装载时,由于Bootloader程序在初始化时设置XF为高电平,在系统进入并行引导装载模式后,C5402从数据寻址为0FFFFh单元(A15=1,选中Flash)中读取将要载入的程序存储区首地址,和并行转载数据流。此时,C5402可以将AT29LV1024 Flash地址08000h~0FFFFh单元中的数据读到C5402对应于0000h~7FFFh寻址区的片内DARAM和片外SRAM IS61LV6164中。 ---Bootloader程序结束后,在这个系统中,用户程序的第一条语句为RSBX XF,即置XF引脚为低电平,Flash始终不选通。这样,SRAM的高32K区域(08000h~0FFFFh)被释放出来,可以作为DSP系统运行时的数据区或程序区使用。
系统软件设计 ---系统的软件设计主要包括多通道缓冲串口的初始化、串口中断服务程序和并行装载程序设计等。 ● 程序设计应注意的问题 (1)McBSP工作在数据接收中断方式,因此全局中断和串口中断的相应位应该合理设置。同时,在设置中断向量表时,使中断向量表的位置与处理器模式状态寄存器PMST中的中断向量指针IPTR相对应,使IPTR的9位地址指向128字的中断向量所在的程序页,同时,中断向量表要严格按照C5402规定的格式编写,否则不能正确地产生需要的中断结果。 (2)要实现DSP数据采集系统的脱机独立运行,需要给每台DSP配备独立的程序存储器,在整个系统上电或者复位时,由引导装载程序将存于片外的程序代码装载到片内DARAM或者系统的扩展存储器中,然后运行程序来完成对McBSP进行设置和其他程序。 (3)为了实现两路A/D和C5402之间的时序匹配,避免数据冲突,需要注意C5402采样率发生寄存器SRGR1中CLKGDV位的设置,使C5402工作时钟周期大于两个串口中断的响应时间。 若TLV1572以400KSPS转换速率来计算,每片A/D应该是每2.5μs向DSP发送一次数据,申请中断,CPU响应中断来接收数据。DSP工作在100MHz时,时钟周期为10ns,因此每个缓冲串口中断服务程序中可以执行一个少于125个时钟周期的程序而不影响串口的接收,若串口中断程序的时间不够用,还可以适当降低A/D转换速率,为串口中断提供更长的中断服务时间。 ● 串口接收的部分初始化程序 ---下面根据多通道缓冲串口的特性和两路串行A/D工作的要求,主要介绍一下串口接收的软件设计和串口部分关键设置。 ;=====初始化串口0===== stm #0, SPSA0 stm #0000h, SPSD0 ; #0000H写入SPCR10 stm #1, SPSA0 stm #0000h, SPSD0 ; #0000H写入SPCR20 stm #2, SPSA0 stm #0040h, SPSD0 ; #0040H写入RCRC10,每字16位 stm #3, SPSA0 stm #0040h, SPSD0 ; #0040H写入RCR20,每帧一段,每段一字 stm #6, SPSA0 stm #000fh, SPSD0 ; #0009H写入SRGR10,时钟周期CLKG=6.4MHz stm #7, SPSA0 stm #300fh, SPSD0 ; #3010H写入SRGR20,帧周期为16个CLKG stm #0eh,SPSA0 stm #0a04h, SPSD0 ; #0A04H写入PCR0,FSX, CLKX输出,FSR,CLKR输入 ;=====初始化串口1===== --- 串口1的初始化程序参见串口0 ;=====启动接收======= stm #0,SPSA0 stm #0001h, SPSD0 ;启动串口0接收 stm #1,SPSA0 stm #00c0h, SPSD0 ;内部产生时钟产生FSG stm #0,SPSA1 stm #0001h, SPSD1 ;启动串口1接收 stm #1,SPSA1 stm #00c0h, SPSD1 ;内部产生时钟产生FSG ;==串口0接收中断子程序=== .sect "brint0" host_brint0: rsbx intm ;关中断 ldm drr0,A stl A,*ar4+ ; 接收 …… 其他处理程序 rete
结束语 ---本文介绍了两片串行A/D与C5402组成的数据采集系统,该系统硬件连接简单,A/D的采样率可以通过串口时钟灵活设置,通用性强。该数据采集系统已经成功应用到实验室的信号处理系统中,显示出设计灵活、高速、可靠等优点。 |