TLC320AC01与TM S320C5402 DSP接口电路分析【摘要】简介了模拟接口电路TLC320AC01以及TM S320C54XDSP的串行接口,并对其串行接口电路进行了分析,给出了单机模式下,由TLC320AC01与TM S320C54XDSP构成的模数转换和数模转换系统,以及用C语言编写的能够完成声音回响的程序。
关键词:TM S320C54XDSP,TLC320AC01(AIC),模数转换,数模转换,串行接口TLC320AC01模拟接口电路可以很容易地与C54X D SP的标准串行接口(SSP)、缓冲串行接口(B SP)、多通道缓冲串行接口(M cB SP)以及时分多路串行接口(TDM)等相接,构成模拟数字转换和数字模拟转换系统。
1TM S320C54X D SP的串口简介TM S320C54X D SP随着器件不同,有多种接口如:标准串行接口(SSP)、缓冲串行接口(BSP)、多通道缓冲串行接口(M cBSP)以及时分多路串行接口(TDM)等,但均以标准串行接口(SSP)为基础,都能与AC01直接接口。
CPU读来自数据接收寄存器(DRR)的数据,而向发送寄存器(DXR)写入要发送的数据。
写入DXR的数据通过发送移位寄存器XSR移出到发送引脚DX。
类似地,在接收引脚DR所接收的数据移入到寄存器DRR,CPU就可以读DRR中的数据。
2TLC320AC01简介TL C320A C01是T I生产的一种模拟接口电路(A IC),它是一个音频频段的处理器,在一个单片CM O S芯片上提供一个模拟数字以及数字模拟输入输出接口系统。
该芯片集成了一个带通开关电容抗混叠输入滤波器,一个14位精度的模数转换器,一个低通开关电容输出重建滤波器,一个(sin x)x补偿器以及一个供数据和控制传输的串行接口。
图1其功能框图如图1所示。
内部电路的配置以及性能参数是由读入8个数据寄存器的控制信息决定的。
寄存器的数据建立起芯片给定的操作和应用模式。
TL C320A C01由一个ADC通道和一个DAC通道以及与之相联系的数字控制电路组成。
两个通道同时工作,DAC通道的数据接收以及ADC通道的数据传送是在同一时间间隔内进行的。
数据传输格式是2的补码。
TL C320A C01的ADC信号通道,模拟信号均进行差分处理,对不希望的信号能够产生极好的共模抑制,直到变换为数字信号。
信号由输入放大器放大,有三种放大增益可由软件选择,典型增益为0dB,6dB或12dB。
输入放大器也可编程为压制模式。
它的DAC通道在第一通讯期间由D IN引脚接收来自主机的16位串行数据字(2的补码),并在第17个SCL K的上升沿将数据锁存。
TL C320A C01数字串行接口由移位时钟SCL K、帧同步信号、ADC通道数据输出以及DA C通道数据输入构成。
在第一个16位帧同步信号期间SCL K传送来自DOU T引脚的ADC通道转换的数字结果,并将来自主机的16位DAC数据传送到D IN。
当所读的数据位置1时,在第二个帧同步期间,SCL K传送来自DOU T的寄存器读数据。
TL C320A C01可以被设置为三种工作模式,即单机工作(Stand2A lone)模式,主从(M aster2Slave)工作模式以及线性编解码器(Codec)工作模式。
TL C320A C01有FN和FM两种封装形式,其中FN封装形式如下图所示。
图2在单机模式下,TLC320AC01产生数据传输用的移位时钟信号和帧同步信号,并且只用一个A IC芯片;主从模式下,有一个TLC320AC01作为主片,产生主移位时钟和帧同步信号,而其余的芯片则接收这些信号;在线性编解码模式下,移位时钟以及帧同步信号均由外部产生,而定时则可以是任何编解码定时模式。
3TLC320AC01与TM S320C54XD SP的串行接口从系统的观点看,当DSP的算法定时是由SSP的接收和发送中断给出的基于编解码器的采样速率决定的时候,单机模式是很有用的。
在编解码器模式,DSP通过产生FS脉冲信号控制向TL C320A C01传送和接收的采样速率。
由于TM S320C54X的SSP不能够通过分频串口时钟信号产生它自己的FS信号,帧同步速率必须由DSP的时钟中断控制。
在这种情况下,时钟控制向编解码器传送和接收来自编解码器的采样速率。
本文只讨论单机模式下的应用以及SSP中断。
TL C320A C01的时钟信号由M CL K引入,其最高频率为10MHz。
模拟接口电路的采样速率以及内部滤波决定于MCLK的分频比,它使用TL C320A C01内部的A和B两个寄存器的值。
D SP的CLKX和CLKR两个信号接在一起,FSX和FSR两个信号也接在一起,这样就保证了同步串行口(SSP)的接收和传送两边都使用同样的时钟信号和帧同步(FS)信号。
图3在单机模式情况下,模拟接口电路产生自己的时钟信号和帧同步信号。
当DSP系统的定时是由模拟接口电路的采样速率控制时,这种工作模式具有很多优点。
为了支持这种模式,要把同步串行口设置为接受外部时钟和帧同步信号。
为了让TM S320A C01工作于单机模式,它的引脚必须拉为高电平。
比较’C54X和’AC01的数据资料,一个明显的差别是DSP的帧同步(FS)信号是高电平有效,而A C01的帧同步(FS)信号是低电平有效。
然而,仔细分析就会发现,两种芯片的帧同步信号的定义不同。
D SP希望在传输开始之前有一个高电平有效的脉冲;而TLC320AC01定义帧同步信号为一个低电平有效脉冲并且持续传输的16个脉冲周期。
因此,两种芯片都将帧同步开始定义为信号的下降沿,所以,引脚对引脚的直接连接就可以了。
在单机模式下,TL C320A C01产生一个低电平有效的帧同步(FS)信号,其持续时间为整个数据传输的16个时钟(SCL K)周期,如下图所示。
A C01以及同步串口(SSP)都在时钟(SCL K)信号的上升沿传送数据,也都在时钟(SCLK)信号下降沿接收数据。
SCLK信号由AC01内部通过MCLK分频得到,其分频系数为4。
图4同步串口是双重缓冲的,在接收和发送两方面都具有存储器映射(M EMORY2MA PED)的数据寄存器和移位寄存器。
软件向数据发送寄存器(DXR)写一个字,然后当发送移位寄存器(XSR)空的时候,这个字就自动传送到发送移位寄存器(XSR)。
当同步串口检测到帧同步(FS)信号的下降沿时,SSP就开始将这个字从DX引脚,一位一位地移出传送移位寄存器(XSR)。
在接收端,数据接收寄存器(DRR)和接收移位寄存器(R SR)的操作和发送端是相似的。
一旦接收到一个字,接收移位寄存器的内容就移到数据接收寄存器中。
正是这些在数据寄存器和移位寄存器之间的数据传输触发了SSP的传送中断(X IN T)和接收中断(R IN T)信号的产生。
与这两个中断信号相联系的是SSP的标志位(FLA GS),即发送准备好(XRDY)和接收准备好(RRDY),这两个标志位的状态是可变的。
同步串口需被设置为突发(Burst)模式(FSM=1),使用外部帧同步信号(TXM=0)以及外部时钟信号(MCM=0)。
4使用TLC320AC01的声音回送的例子在介绍硬件接口的基础上,这里给出使用A C01在单机模式下,用C语言编写的完成基本回响功能的程序。
在本系统中,所有的采样处理均在R IN T的中断服务程序中进行。
在TL C320A C01的初始化过程中,每一个字的传送都是将其写入DXR,然后检测XRD Y位,以便检测从DXR到XSR的传送。
当XRDY置位时,一个新的字就可以写入DXR。
A C01的内部寄存器是由一系列的第一步传输和第二步传输初始化的。
当TLC320AC01接收到最低两位“置位”的一个字(第一步传输)时,下一个接收的字就是一个第二步传输,它应被用来编程内部的一个寄存器。
本系统运行程序由3个文件组成,即C程序,中断矢量表(IN TERRU PT V ECTORTABL E COD E)和.CM D文件。
5程序模块的分析程序模块1,声音回送C源程序。
本程序完成在单机模式下AC01与C54XDSP串口的通讯。
#include“c54x regs.h”/*定义常数,工作于M CL K=10M H z条件下*/#define A 12 /*A=12,=>FCL K=432kH z*/#define B 18 /*B=18,=>F s=24kH z*//*声明所有的函数原型*/void in line disable(void);void in line enable(void);void in line idle(void);void interrupt essp_tx(void);void interrupt essp_rx(void);void in it co re(void);void in it codec(void);/*定义系统存储器映射的IO口地址*/V olatile ioport unsigned port14;/*主程序*/main(){init_core();init_codec();/*开中断*/enable();/*下一次中断前空闲*/while(1);}/*初始化D SP*/void init_co re(){/* 0外部存储器等待状态,2个IO等待状态*/SWWSR=0x2000;/*置为OVL Y,使用片内程序存储器*/PM ST=0x0020;IFR=0xFF;/*清所有中断标志位*/}/*初始化(A C01/2) */void init_codec(){disable(); /*关所有中断*//*从port14复位A C01*/port14=0x0;/*如下初始化SSP 1 *//*FSM=1,突发模式;TXM=0,外部帧同步;M CM使用外部时钟源; */ /*FO=0,16位模式*/SPC1=0x4008;SPC1=0x40C8;/*使A C01退出复位模式*/port14=0x8000;/*编程A C01使用第二步通讯,基于M CL K=10M H z设置24KH z采样速率*/ /*为FCL K频率设置A */DXR 1=0x0003;/*要求第二步通讯*/while(!(SPC1&0x800));/*循环等待直到已传送完毕, *//*检查XSR,XRD Y==1 */DXR 1=0x0100 A;while(!(SPC1&0x800));/*为FS设置B */DXR 1=0x0003;while(!(SPC1&0x800));DXR 1=0x0200 B;while(!(SPC1&0x800));IM R=0x40;/*开中断R IN T 1*/IFR=0x40;/*清所有的中断*/enable();3开所有的中断*//*传送一个哑元,结束操作*/DXR 1=DRR 1;}/*关闭所有中断*/void in line disable(){asm“(ssbx INTM”);}/*开中断*/vo id in line enab le(){asm“(rsbx IN TM”);}/*中断前等待*/vo id in line id le(){asm“(IDL E 1”);}/*A C01传输中断子程序*/void interrupt essp_x(){}/*A C01接收中断子程序*/void interrupt essp_rx(){in t sample_in;/*将数据读入变量sample_in */sample_in=DRR 1;/*重新传送,确保没有第二次传送要求*/DXR 1=(sample_in&0xFFFC);}程序模块2,中断矢量表代码.title“cvecto rs asm”.ref_c_int00,_essp_tx,_essp_rx.sect“.vectors”reset:b_c_int00nopnop.space 4*16*21;F ill next 21 vector locations with zero s rin t1:b_essp_rxnopnopx in t1:b_essp_txnopnop程序模块3,CMD配置文件M EM OR Y{PA GE 0:/*Pgm.space*/PROG:origin=0x2000,length=0x2000/*Ext.Pgm.area*/VECS:o rigin=0xff80,length=0x7f/*V ectors*/PAGE 1:/*Data space*/R EGS:origin=0x0000,length=0x0060/*MM R’s*/RAM 0:origin=0x0060,length=0x20RAM:origin=0x0080,length=0x1380/*DA RAM*/}SECT ION S{.vectors:{}>V ECS PA GE 0/*V ectors at 0xFF 80*/.text:{}>PROG PAGE 0.cinit:{}>PROG PAGE 0.bss:{}>RAM PAGE 1.const:{}>RAM PAGE 1.data:{}>RAM PAGE 1.stack:{}>RAM PA GE 1}。