原创 TLC320AD50C在DSP系统中的应用与设计

2006-12-10 01:45 3120 8 8 分类: 处理器与DSP
TMS320C54X DSP的串口简介 

在TI的DSP中,串行口是一个非常重要的片上外设,它能够高速地与外部设备进行数据交换。TMS32054X DSP随着器件不同,有多种接口,都能与TLC320AD50C直接接口。下面以TMS320C5409 DSP为例,简要叙述McBSP串口的工作原理和应用要点。 

McBSP串口由数据通道和控制通道组成,它通过7个管脚与外部设备相连,数据发送通过DX,数据接收通过DR,串行口的控制信息从CLKX、CLKR、FSX和FSR获得。CLKS为外部时钟源。CPU和DMA控制器通过内部外设总线对McBSP进行访问,从数据接收寄存器DRR[1,2]中读取数据,往数据发送寄存器DXR[1,2]写数据,数据从DR引脚进入DSP,首先存放在接收移位寄存器RSR[1,2]中,当一个完整的字接收完毕后,结果被复制到接收缓冲寄存器RBR[1,2],最后再由RBR[1,2]复制到DRR[1,2]中,供CPU或DMA控制器访问。写操作与读取相仿,从结构上来看,发送和接收部分是相对独立的,所以可以实现全双工通信。McBSP的控制设置通过一对寄存器读写来完成,这些控制寄存器控制的工作模式或指示串口的状态信息。访问某个指定的寄存器时,首先要将相应的控制寄存器的子地址写入子地址控制器SPSA,SPSA驱动复接器,使之与数据控制寄存器SPSD相连。接入相应子地址寄存器所在的实际物理存储位置,当向SPSD写入数据时,数据送入前面子地址寄存器所指定的内嵌数据存储器,当从SPSD读取数时,也接入所制定的内嵌数据存储器。 


TLC320AD50C 简介 

随着数字技术的不断发展,介于模拟与数字电路之间的芯片的使用也越来越多。美国TI公司的TLC320AD50C(以下简称AD50)就是一种具有许多优良特性的模拟接口电路芯片,该芯片可广泛用于各种电路,尤其是应用在DSP领域中。AD50芯片采用过采样 - 技术,可进行A/D和D/A的高分辨率、低速信号转换。该器件同时还包括两个串行同步转换电路(用于各自的数据方向),在DAC之前有一个内插滤波器,而在后面有一个抽取滤波器。AD50中的可选项和电路配置可以通过串行口进行编程, AD50配置位可进行软件编程,该器件中共有七个数据和控制寄存器可供使用。其用途如下:  

寄存器0:空操作(No-Op)寄存器。寄存器1:Control1寄存器。该寄存器用以控制软件复位、软件掉电、选择正常或辅助模拟输入、数字反馈的选择、DAC的16位或15位工作方式的选择、监视放大器输出增益的选择及硬件或软件二次通信请求方式的选择等。寄存器2:Control 2寄存器,用于控制一个抽取FIR滤波器溢出的输出标志、FLAG的输出值、ALT-DATA输入端使能、为ADC选择16位方式或15位方式及使能模拟反馈。寄存器3:Control 3寄存器。它控制FS与FSD之间延迟SCLK的个数;通知主器件有多少从器件将连在一起。寄存器4:Control 4寄存器,用来控制输入输出放大器增益,采样率为fs=MCLK/(128 N)或MCLK/(512 N)的选择,以及在MCLK输入端使能外部采样时钟和旁路内部PLL等。寄存器5和寄存器6:保留寄存器,用于工厂测试。 

TLC320AD50C与外界串行通信可以分为首次通信和二次通信。在首次通信中,有两种数据传送模式,16位传送模式和15+1位传送模式,可通过控制寄存器设定。默认情况下为15+1位传送模式。若采用15+1位传送模式,其最低位DO为非数据位,输入DAC数据的DO位为二次通信请求位,输出ADC数据的D0位为M/S脚的状态位。二次通信只有在发出请求时产生,当首次通信采用15+1位模式时,可以进行二次通信请求;当首次通信采用16位模式时,则必须由FC脚输入信号来产生二次通信请求。二次通信数据格式如图1所示,其中D7-D0为控制寄存器数据,D12-D8为控制寄存器地址,D13=1为读控制寄存器数据,D13=0对控制寄存器写数据。通过二次通信,可实现TLC320AD50C初始化和修改TLC320AD50C内部控制寄存器。在TLC320AD50C内部有5个可供二次通信访问的控制寄存器,其中4个寄存器和TLC320AD50C初始化及配置有关。其功能如表1所示。 


  

硬件设计 

在应用中,将TLC320AD50C接至DSP的同步串口,并将TLC320AD50C设置在主动工作模式下,即由TLC320AD50C提供帧同步信号和移位时钟,另外不同型号的DSP的管脚电压可以为3.3V或者5V。因此,可以根据DSP 的电源特性为TLC320AD50C选择3.3V或5V的数字电,以实现管脚的直接连接。通过将多个TLC320AD50C串行连接,并将第一个TLC320AD50C设置成主动工作模式,而其他TLC320AD50C设置成从设备方式,以实现多TLC320AD50C和DSP的相连。 


  

图1给出TMS320C54X与TLC320AD50C硬件接口电路,假设DSP的管脚电压为3.3V,因而将TLC320AD50C的数字电接到3.3V电源,管脚M/S经过10K电阻上拉,将TLC320AD50C设置成主动工作模式,选择INP和INM作为ADC的输入,将AUXP和AUXM接至模拟地;DAC的正相输出经过一阶低通滤波后送给模拟设备,反相输出不用;DSP可以通过通用输出口XF对TLC320AD50C进行复位操作; 管脚FC接地,系统只能采用软件方式申请触发辅助通信(二次通信)模式;数据格式为15+1比特模式,管脚FSD可以输出到后面的TLC320AD50C的FS管脚,以实现设备的同步。输入主时钟MCLK为8.192MHz,采样频率选择为8KHz,内部PLL使能(控制寄存器4中的N=8)。通过寄存器设置,将TMS320C54X的FSX,FSR,CLKR,CLKX配置为外部输人,TLC320AD50C的SCLK配置为内部产生。这样数据接收/发送帧同步信号、移位时钟信号均由TLC320AD50C产生。串行口的接收/发送过程受TLC320AD50C的控制。 


软件设计 

相关软件设计大致可分为串口McBSP设置和外部芯片TLC320AD50C设置。 

串口McBSP设置应该先让串口的XRST=0,RRST=0, GRST=0使串口处于初始化状态,然后给控制寄存器设置设计的状态位,如SRGR、SPCR、 PCR、 XCR、 RCR等。但要注意的是,这里不能改变XRST=0,RRST=0 GRST=0位,最后是让XRST=1,RRST=1,FRST=1使串口退出复位状态。 

TLC320AD50C设置通过辅助通信来读写控制寄存器,辅助通信有两种方法实现,一是硬件方式,FC必须在FS的上跳沿被拉高,这样 

TLC320AD50C会在后128个SCLK后切换到辅助通信模式下,二是软件方式,要用软件方式必须是工作在15+1位模式下,当写入的数字D0位为1,则可以在后128个SCLK后切换到辅助通信模式下。对控制器的写的数据通过DIN进入TLC320AD50C,寄存器的数据从DOUT输出,访问寄存器时要求指明设备号、读写属性、寄存器地址。下面给出的分别是串口初始化以及LC320AD50C初始化的部分关键代码。 .include "const.inc" ;串口初始化数据表,表中每项包括寄 

存器子地址,和对应的设置值 

.include "init54.inc" ;初始化DSP内设的常数表文件 
.include "vector.inc" ;中断向量表文件 
.mmregs ;映射控制器物理地址 
MCBSP_INIT: ;MCBSP_INIT 是初始化串口McBSP 
;SPSA和SPSD的地址是连续的。所 
以可以用辅助寄存器来访问,简化代码 
stm 0,SPSA0 ;reset mcbsp0 spcr1 
nop 
stm K_SPCR10_RS,SPSD0 ;K_SPCR10_RS为const.inc 文件定义好的常数 
nop 
stm 1,SPSA0 ;spcr2 
nop 
STM K_SPCR20_RS,SPSD0 
stm #MCBSP0_CONST,AR2 ;MCBSP0_CONST为const.inc数据表的首地址 
stm #SPSA0,AR3  
stm #(15-1),BRC ;共有14个寄存器要设置,采用指针循 环切换方式实现 
rptb LOOP-1 
ld *AR2+,A ;AR2指向数据表中的数据首地址,然后地址递增 
stl A,*AR3+ ;AR3指向SPSA0,然后指向SPSD0,再回指SPSA0. 
nop 
ld *AR2+,A 
stl A,*AR3- 
nop 

LOOP:  

stm 0,SPSA0 ;退出复位状态 
nop 
stm K_SPCR10_RS|1,SPSD0 
nop 
stm 1,SPSA0 
nop 
STM K_SPCR20_RS|1,SPSD0 
nop 
WAIT #100 
ret 

AD50C_INIT: ;TLC320AD50C初始化 

ld #K_Register1,B 
call ADDA_SET ;调用ADDA_SET函数块 
ld #K_Register2,B 
call ADDA_SET 
ld #K_Register4,B 
call ADDA_SET 
RET 

ADDA_SET: ;ADDA_SET函数块,实现一次主通信, 
一次辅助通信,然后返回到正常模式 

stm #1,DXR10 

WAIT_1INT: 

ld *(serial_int_flag),A ;读取中断标识 
nop 
nop 
nop 
bc WAIT_1INT,AEQ ;等待中断 
st #0,*(serial_int_flag) ;中断标识清空 
stlm B,DXR10 

WAIT_2INT: 

ld *(serial_int_flag),A 
nop 
nop 
nop 
ADD #1,A 
bc WAIT_2INT,AEQ 
st #0,*(serial_int_flag) 
RET 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条