基于DSP与串行A/D组成的高速并行数据采集系统方案
2、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
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- FPGA的DSP性能揭秘(06-16)
- 用CPLD实现DSP与PLX9054之间的连接(07-23)
- DSP+FPGA结构在雷达模拟系统中的应用(01-02)