资源预览内容
第1页 / 共181页
第2页 / 共181页
第3页 / 共181页
第4页 / 共181页
第5页 / 共181页
第6页 / 共181页
第7页 / 共181页
第8页 / 共181页
第9页 / 共181页
第10页 / 共181页
亲,该文档总共181页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第8 8章章 DSPDSP芯片应用芯片应用 第第8章章 DSP芯片应用芯片应用 8.1 引言引言 8.2 DSP芯片芯片C语言开发简介语言开发简介 8.3 模模/数接口设计数接口设计 8.4 存储器接口设计存储器接口设计 8.5 G.726语音编解码系统语音编解码系统 8.6 语音实时变速系统语音实时变速系统 第第8 8章章 DSPDSP芯片应用芯片应用 8.1 引引 言言 前面几章我们介绍了DSP芯片的原理以及CCS开发工具。TMS320C5409是目前性能价格比较高的一种定点DSP芯片,已经在很多领域得到了广泛的应用。本章以TMS320C5409为例,介绍DSP应用系统的设计、调试和开发过程。第第8 8章章 DSPDSP芯片应用芯片应用 8.2 DSP芯片芯片C语言开发简介语言开发简介 8.2.1TMS320C54xC/C+编译器支持的数据类型表8-1列出了TMS320C54xC/C+编译器支持的数据类型的大小、表示形式和表示范围,这些数据类型在float.h和limits.h中定义。在C语言开发的过程中,采用合适的数据类型对于系统的正确运行有着极为重要的意义。第第8 8章章 DSPDSP芯片应用芯片应用 表8-1TMS320C54xC/C+编译器支持的数据类型类型大小/bit表示形式最小值最大值signedchar16ASCII3276832767char,unsignedchar16ASCII065535short,signedshort162sComplement3276832767unsignedshort16Binary065535int,signedint162sComplement3276832767第第8 8章章 DSPDSP芯片应用芯片应用 类型大小/bit表示形式最小值最大值unsignedint16Binary065535long,signedlong322sComplement21474836482147483647unsignedlong32Binary04294967295enum162sComplement3276832767float32IEEE32-bit1.175494e383.40282346e+38double32IEEE32-bit1.175494e383.40282346e+38longdouble32IEEE32-bit1.175494e383.40282346e+38pointers16Binary00xFFFF第第8 8章章 DSPDSP芯片应用芯片应用 8.2.2C语言的数据访问方法1DSP片内寄存器的访问DSP片内寄存器在C语言中一般采用指针方式来访问,常常采用的方法是将DSP寄存器地址的列表定义在头文件中(如reg.h)。DSP寄存器地址定义的形式为宏,如下所示:第第8 8章章 DSPDSP芯片应用芯片应用 #defineIMR(volatileunsignedint*)0x0000#defineIFR(volatileunsignedint*)0x0001#defineST0(volatileunsignedint*)0x0006#defineST1 (volatileunsignedint*)0x0007#defineAL (volatileunsignedint*)0x0008#defineAH(volatileunsignedint*)0x0009#defineAG(volatileunsignedint*)0x000A#defineBL (volatileunsignedint*)0x000B#defineBH(volatileunsignedint*)0x000C#defineBG(volatileunsignedint*)0x000D第第8 8章章 DSPDSP芯片应用芯片应用 #defineT(volatileunsignedint*)0x000E#defineTRN(volatileunsignedint*)0x000F#defineAR0(volatileunsignedint*)0x0010#defineAR1(volatileunsignedint*)0x0011#defineAR2(volatileunsignedint*)0x0012#defineSP(volatileunsignedint*)0x0018#defineBK(volatileunsignedint*)0x0019第第8 8章章 DSPDSP芯片应用芯片应用 #defineBRC(volatileunsignedint*)0x001A#defineRSA(volatileunsignedint*)0x001B#defineREA(volatileunsignedint*)0x001C#definePMST(volatileunsignedint*)0x001D#defineXPC(volatileunsignedint*)0x001E第第8 8章章 DSPDSP芯片应用芯片应用 在主程序中,若要读出或者写入一个特定的寄存器,就要对相应的指针进行操作。下例通过指针操作对SWWSR和BSCR进行初始化。#defineSWWSR(volatileunsignedint*)0x0028#defineBSCR(volatileunsignedint*)0x0029第第8 8章章 DSPDSP芯片应用芯片应用 intfunc().*SWWSR=0x2000;*BSCR=0x0000;.第第8 8章章 DSPDSP芯片应用芯片应用 2DSP内部和外部存储器的访问同DSP片内寄存器的访问相类似,对存储器的访问也采用指针方式来进行。下例通过指针操作对内部存储器单元0x3000和外部存储器单元0x8FFF进行操作。第第8 8章章 DSPDSP芯片应用芯片应用 int*data1=0x3000;/*内部存储器单元*/int*data2=0x8FFF;/*外部存储器单元*/intfunc().*data1=2000;*data2=0;.第第8 8章章 DSPDSP芯片应用芯片应用 3DSPI/O端口的访问DSPI/O端口的访问通过ioport关键字实现。定义的形式为ioporttypeporthex_num其中:ioport是关键字,表明变量是io变量;type必须是char、short、int和unsigned;port表示io地址,hex_num是十六进制地址。下例声明了一个io变量,地址为10H,并对I/O端口做读/写操作。第第8 8章章 DSPDSP芯片应用芯片应用 ioportunsignedport10;/*定义地址为10H的I/O端口变量*/intfunc().port10=20;/*writeatoport10H*/.b=port10;/*readport10Hintob*/.第第8 8章章 DSPDSP芯片应用芯片应用 8.2.3C语言和汇编语言的混合编程方法用C语言和汇编语言混合编程的方法主要有以下三种:(1)独立编写C程序和汇编程序,分开编译或汇编以形成各自的目标代码模块,然后用链接器将C模块和汇编模块链接起来。例如,主程序用C语言编写,中断向量文件(vector.asm)用汇编语言编写。若要从C程序中访问汇编程序的变量,将汇编语言程序在.bss块中定义的变量或函数名前面加一下划线_,将变量说明为外部变量,同时在C程序中也将变量说明为外部变量,如下例所示:第第8 8章章 DSPDSP芯片应用芯片应用 汇编程序:.bss_var,1;定义变量.global_var;说明为外部变量C程序:externintvar;/*外部变量*/var1;/*访问变量*/若要在汇编程序中访问C程序变量或函数,也可以采用同样的方法。第第8 8章章 DSPDSP芯片应用芯片应用 C程序:globalinti;/*定义i为全局变量*/globalfloatx;/*定义x为全局变量*/main()第第8 8章章 DSPDSP芯片应用芯片应用 汇编程序:.ref_i;说明_i为外部变量.ref_x;说明_x为外部变量LD_i,DPSTL_x,A第第8 8章章 DSPDSP芯片应用芯片应用 (2)在C语言程序的相应位置直接嵌入汇编语句,这是一种C和汇编之间比较直接的接口方法。嵌入汇编语句的方法比较简单,只需在汇编语句的左、右加上一个双引号,用小括弧将汇编语句括住,在括弧前加上asm标识符即可,如下所示:asm(汇编语句);如上所述,在C程序中直接嵌入汇编语句的一个典型应用是控制DSP芯片的一些硬件资源。第第8 8章章 DSPDSP芯片应用芯片应用 对于TMS320C5409,在C程序中一般采用下列汇编语句实现一些硬件控制:asm(NOP);/*插入等待周期*/asm(ssbxINTM);/*关中断*/asm(rsbxINTM);/*开中断*/(3)对C程序进行编译生成相应的汇编程序,然后对汇编程序进行手工优化和修改。第第8 8章章 DSPDSP芯片应用芯片应用 8.2.4中断函数TMS320C54xC/C+中可以通过两种方式定义中断函数。(1)通过给每个中断函数前面加关键字interrupt来声明一个函数为中断处理函数。中断函数的返回值是void的,函数没有任何的形参。中断函数可以任意使用局部变量和堆栈。例如:第第8 8章章 DSPDSP芯片应用芯片应用 interruptvoidint_handler()unsignedintflags;.第第8 8章章 DSPDSP芯片应用芯片应用 为了能够让相应的中断信号调用不同的中断函数,还需要在中断向量文件(vector.asm)中定义中断向量表。如下例所示:.ref_c_int00.ref_int_handler.sectvectorsRS: BD_c_int00NOPNOP第第8 8章章 DSPDSP芯片应用芯片应用 .BRINT1:BD_int_handler;McBSP1接收中断NOPNOP.end第第8 8章章 DSPDSP芯片应用芯片应用 (2)C中断程序采用特殊的函数名,其格式为c_intnn。其中,nn代表0099之间的两位数,如c_int01就是一个有效的中断函数名。下面是一个中断函数的例子:intdatain,dateout;voidc_int05()datain=sample(dataout);第第8 8章章 DSPDSP芯片应用芯片应用 8.2.5存储器模式TMS320C54x将存储器分为程序空间和数据空间。程序空间存放的是可执行的代码,数据空间存放的是外部变量、静态变量和系统的堆栈。由C程序产生的代码和数据就被放置在存储空间的各个段中。第第8 8章章 DSPDSP芯片应用芯片应用 1C编译器生成的段C编译器对C语言程序编译后生成6个可以进行重定位的代码和数据段,这些段可以用不同的方式分配至存储器以符合不同系统配置的需要。这6个段可以分为两种类型,一是已初始化段,二是未初始化段。第第8 8章章 DSPDSP芯片应用芯片应用 已初始化段主要包括数据表和可执行代码。C编译器共创建3个已初始化段:.text、.cinit、.const。.text段:包含可执行代码和字符串。.cinit段:包含初始化变量和常数表。.const段:字符串和switch表。.bs段:保留全局和静态变量空间。.stack段:为系统堆栈分配存储器。.sysmem段:为动态存储器函数malloc、calloc和realloc分配存储器空间。第第8 8章章 DSPDSP芯片应用芯片应用 一般地,.text、.cinit和.const连同汇编语言中的.data段可链入到系统的ROM或RAM中,而.bss、.stack和.sysmem段则应链入到RAM中。需要注意的是,如果系统不支持将.data块链入到数据空间,则必须将.data段链入到程序空间,运行的时候再调入数据空间,它的cmd文件如下所示:第第8 8章章 DSPDSP芯片应用芯片应用 MEMORYPAGE0:PROG:.PAGE1:DATA:.SECTIONS.const:load=PROGPAGE1,run=DATAPAGE1第第8 8章章 DSPDSP芯片应用芯片应用 /*GETRUNADDRESS*/_const_run=.;/*MARKLOADADDRESS*/*(.c_mark)/*ALLOCATE.const*/*(.const)/*COMPUTELENGTH*/_const_length=.-_const_run;.第第8 8章章 DSPDSP芯片应用芯片应用 2C系统的堆栈C编译器利用TMS320C54x内置的堆栈机制来实现如下功能:(1)保护函数的返回地址;(2)分配局部变量;(3)传递函数变量;(4)保护临时结果。第第8 8章章 DSPDSP芯片应用芯片应用 3动态存储器分配编译器提供的运行支持函数中包含几个允许在运行时为变量动态分配存储器的函数,如malloc、calloc和recalloc。动态分配并不是C语言本身的标准,而是由标准运行支持函数所提供的。第第8 8章章 DSPDSP芯片应用芯片应用 4存储器大小模式编译器支持两种存储器模式:小存储器模式和大存储器模式。(l)小存储器模式。小存储器模式是编译器的缺省存储器模式。(2)大存储器模式。大存储器模式与小存储器模式的区别在于它不限制.bss段的大小,因此对全局变量和静态变量来说,具有无限的空间。第第8 8章章 DSPDSP芯片应用芯片应用 8.2.6其他注意事项下面介绍C语言编程的一些其他注意事项。(1)c_int00函数包含在运行支持库中,必须与其他的C目标模块相链接。(2)采用C优化编译时,为了保证程序的正确性,要特别注意,如果使用asm行汇编语句,则必须对编译后得到的汇编语言进行仔细的检查,以确保asm语句在程序中的正确性。第第8 8章章 DSPDSP芯片应用芯片应用 (3)可以使用volatile关键字避免优化。对于下例这样的语句:unsignedint*data;while(*data!=4);由于*data是一个循环不变的表达式,因此这个循环将被优化为一个存储器读指令。为了避免这样的优化,需要将data定义为volatile,例如:volatileunsignedint*data;第第8 8章章 DSPDSP芯片应用芯片应用 做了这样的定义后,优化器就不再对上述语句进行优化了。一般在reg.h中定义的寄存器地址都定义为volatile,例如:#defineIMR(volatileunsignedint*)0x0000#defineIFR(volatileunsignedint*)0x0001第第8 8章章 DSPDSP芯片应用芯片应用 (4)C54xC/C+编译器支持标准C的关键字const,这个关键字用来定义那些值不变的变量,但是,在定义时const的位置是十分重要的。例如,下面这个例子中,第一句定义了一个常量指针p,指向一个int变量,第二句定义了一个指针q,指向一个常量int变量,所以要注意const的位置。int*constp=&x;constint*q=&x;第第8 8章章 DSPDSP芯片应用芯片应用 (5)由于在C语言的环境下,局部变量的寻址必须通过SP寄存器实现,在混合编程的时候,为了使汇编语言不影响堆栈寄存器SP,常用的方式是在汇编环境中使用DP方式寻址,这样可以使二者互不干扰,编程时只要注意对CPL位正确设置即可。CPL位是编译模式控制位,它表示在相对直接寻址时采用哪种指针。当CPL=0时,使用页指针DP;当CPL=1时,使用堆栈指针SP。第第8 8章章 DSPDSP芯片应用芯片应用 (6)编译后的C程序“跑飞”一般是对不存在的存储区访问造成的。首先,要查.map文件与memorymap图对比,看是否超出范围。如果在有中断的程序中“跑飞”,则应重点检查在中断程序中是否对所用到的寄存器进行了压栈保护;如果在中断程序中调用了C程序,则要查汇编后的C程序中是否用到了没有被保护的寄存器并提供保护(在C程序的编译中是不对A、B等寄存器进行保护的)。第第8 8章章 DSPDSP芯片应用芯片应用 8.3 模模/数接口设计数接口设计 模/数接口设计是DSP系统设计中一个重要的组成部分。A/D或D/A芯片一般均采用并行数字接口。这些芯片与TMS320C5409接口时需要设计相应的译码电路,将A/D或D/A芯片的数据线映射到DSP芯片的I/O地址,可以通过指令IN和OUT(汇编语言)或者在程序中设定unsignedintioport变量(C语言)与模/数接口芯片交换数据。第第8 8章章 DSPDSP芯片应用芯片应用 TMS320C5409提供了可与串行通信器件接口的3个多通道缓冲串行口(McBSP,TMS320C542串行口的加强形式),为模数接口的设计提供了极大的便利。本节将介绍TI公司的常用语音编解码器TLC320AD50与TMS320C5409的McBSP的接口方法。第第8 8章章 DSPDSP芯片应用芯片应用 8.3.1TLC320AD50及其接口1TLC320AD50控制寄存器功能简介TLC320AD50具有7个可编程的内部寄存器,通过软件编程能随时控制TLC320AD50的采样频率,模拟输入及输出的增益等。控制寄存器0(CR0):不执行任何操作,但是CR0能够响应握手通信请求而不改变其他控制寄存器的值。第第8 8章章 DSPDSP芯片应用芯片应用 图8-1TLC320AD50的引脚图第第8 8章章 DSPDSP芯片应用芯片应用 控制寄存器1(CR1):控制AD50的软件重启,选择数字反馈以及数/模转换器的模式。控制寄存器2(CR2):选择模拟反馈以及模/数转换器的模式,并且包括TLC320AD50内部FIR滤波器的溢出标志。控制寄存器3(CR3):包含主设备连接从器件个数的信息。(当某个器件向其他器件发送信息时,称为主器件,而某器件从其他器件接收信息时,称为从器件。)第第8 8章章 DSPDSP芯片应用芯片应用 控制寄存器4(CR4):选择输入和输出放大器的增益,确定TLC320AD50的采样频率,选择PLL模式。控制寄存器5(CR5):工业测试使用。控制寄存器6(CR6):工业测试使用。第第8 8章章 DSPDSP芯片应用芯片应用 2TLC320AD50器件功能简介1)采样频率和滤波器控制TLC320AD50的采样频率由控制寄存器4设定。当选择PLL模式时(D7=0),TLC320AD50的采样率为(8-1)当不选择PLL模式时(D7=1),TLC320AD50的采样率为(8-2)其中,N为18的整数。第第8 8章章 DSPDSP芯片应用芯片应用 输出的串口时钟(SCLK)由采样频率决定而不是由主时钟决定,串口时钟与采样频率之间的关系为SCLK=256fsTLC320AD50内部滤波器的截止频率是不能通过软件编程改变的。第第8 8章章 DSPDSP芯片应用芯片应用 2)模/数转化模块输入的模拟信号经过前端的放大器放大后,送入到A/D转换器的输入端。A/D转换器将输入的模拟信号转化为以二进制补码表示的数字信号。第第8 8章章 DSPDSP芯片应用芯片应用 3)数/模转化模块DIN管脚从外部设备读入16bit的二进制数据,以补码形式表示。在串口时钟(SCLK)的下降沿,TLC320AD50读入这些二进制数据,每一个串口时钟周期输入1bit。这些二进制数据通过由数字插值滤波器和数字调制器组成的-D/A转换器后转换为脉冲串。这些脉冲串再被送入到TLC320AD50内部的低通滤波器恢复出模拟信号。模拟信号通过可编程放大器后在OUTP和OUTM输出。第第8 8章章 DSPDSP芯片应用芯片应用 4)数字串行接口数字串行接口由串行时钟(SCLK)、帧同步信号(FS)、A/D转换器输出DOUT和D/A转换器输入(DIN)组成。在每一个串行时钟周期(SCLK)中,A/D转换器从DOUT输出转化好的二进制数据,D/A转换器从DIN输入需要转化的二进制数据。第第8 8章章 DSPDSP芯片应用芯片应用 8.3.2模/数接口的硬件电路设计图8-2是TLC320AD50与TMS320C5409的McBSP之间的接口连线图。从图8-2可以看出,TLC320AD50与TMS320C5409的McBSP之间的接口连接十分简单,两者之间的接口不需要其他的硬件支持。第第8 8章章 DSPDSP芯片应用芯片应用 图8-2TLC320AD50与TMS320C5409的McBSP之间的接口第第8 8章章 DSPDSP芯片应用芯片应用 图8-3中的两个电容和相应的磁珠用来去耦,滤除电源输出的噪声。此外,TLC320AD50的许多管脚在与相应的电源或地相连时,需要连接相应的去耦电容。这些管脚的详细说明与连线如图8-4所示。其中,REFP和REFM之间的电容是带隙基准电压的去耦电容;连接到FILT的电容是带隙基准的滤波电容。第第8 8章章 DSPDSP芯片应用芯片应用 图8-3数字和模拟电源的设计第第8 8章章 DSPDSP芯片应用芯片应用 图8-4TLC320AD50的去耦电路第第8 8章章 DSPDSP芯片应用芯片应用 8.3.3模/数接口的软件设计1TMS320C5409内部寄存器的初始化(1)初始化TMS320C5409的SWWSR、BSCR、ST0、ST1、PMST等寄存器,设置中断屏蔽寄存器IMR,屏蔽所有的中断,并置IFR=0xFFFF;(2)设置定时器寄存器TIM、PRD和TCR的值,使得CLOCKOUT的输出满足TLC320AD50的要求。第第8 8章章 DSPDSP芯片应用芯片应用 2TMS320C5409缓冲串口的初始化TMS320C5409的McBSP由SPCR、RCR、XCR、SRGR、MCR、PCR等寄存器控制。(1)复位McBSP并设置控制寄存器(SPCR)帧同步信号和串口时钟信号均为External;设置接受中断信号由帧同步信号产生,用中断方式来向McBSP发送数据(也可以采用DSP轮询或DMA的方式,ABU模式),使能串行口中断。第第8 8章章 DSPDSP芯片应用芯片应用 (2)设置McBSP的发送(XCR)和接受(RCR)控制寄存器,使接收到的每一帧包含一个字,每个字为16bit。(3)设置McBSP的引脚控制寄存器(PCR),使串行口的所有引脚工作在串行口方式,而不是通用I/O方式。(4)使能全局中断,并使缓冲串行口脱离复位状态,和置1。第第8 8章章 DSPDSP芯片应用芯片应用 3TLC320AD50的初始化在对上述TMS320C5409的初始化工作之前,首先置TLC320AD50的=0,用于复位TLC320AD50,使得TLC320AD50设置为缺省配置状态,并暂停TLC320AD50的工作。在TMS320C5409的内部寄存器和McBSP初始化完成后,将置高,使TLC320AD50脱离复位状态,并且开始以缺省配置方式工作。第第8 8章章 DSPDSP芯片应用芯片应用 TLC320AD50的初始化参数可以根据实际需要,利用式(8-1)和式(8-2)计算。TLC320AD50和McBSP之间同步串行通信的时序如图8-5所示。第第8 8章章 DSPDSP芯片应用芯片应用 图8-5TLC320AD50与McBSP的串行通信时序第第8 8章章 DSPDSP芯片应用芯片应用 图8-6C程序的流程图第第8 8章章 DSPDSP芯片应用芯片应用 【例1】TLC320AD50应用程序。程序的流程图如图8-6所示。C程序代码如下所示:reg.h#defineSPSA1(volatileunsignedint*)0x0048/McBSP1sub_addressregister#defineSPSD1(volatileunsignedint*)0x0049#defineSPCR110x0000#defineSPCR210x0001第第8 8章章 DSPDSP芯片应用芯片应用 #defineRCR110x0002#defineRCR210x0003#defineXCR110x0004#defineXCR210x0005#definePCR10x000Emain.c/*本程序是TLC320AD50与TMS320C5409通过缓冲串行口*/第第8 8章章 DSPDSP芯片应用芯片应用 /*通信的实例*/#include#includereg.h/*声明所有用到的函数原型*/voidinlinedisable(void);voidinlineenable(void);voidinterruptessp_rx(void);voidinit_core(void);voidinit_bsp(void);voidinit_codec(void);第第8 8章章 DSPDSP芯片应用芯片应用 /*主程序*/main()init_core();init_codec();/*使能中断屏蔽*/enable();/*等待直到下一个中断到来*/while(1);第第8 8章章 DSPDSP芯片应用芯片应用 /*初始化DSP内部寄存器*/voidinit_core()/*设置外部存储器的等待周期为0,I/O等待周期为2*/*SWWSR=0x2000;*BSCR=0x0000;第第8 8章章 DSPDSP芯片应用芯片应用 *ST0=0x1800;*ST1=0x2900;/*设置中断向量表的首地址为0x0080*/*PMST=0x00A0;*IMR=0x0000;*IFR=0xFFFF;/*清除所有的中断标志*/第第8 8章章 DSPDSP芯片应用芯片应用 voidinit_bsp()/*McBSP0接收字符为右对齐,接收中断由帧同步信号产生*/*SPSA1=SPCR11;*SPSD1=0x0020;第第8 8章章 DSPDSP芯片应用芯片应用 /*发送中断由帧同步信号产生,McBSP0Tx=FREE(软件中断后时钟停止运行)*/*SPSA1=SPCR21;*SPSD1=0x0201;/*接收帧长1个字,数据长度为16bit*/*SPSA1=RCR11;*SPSD1=0x0040;第第8 8章章 DSPDSP芯片应用芯片应用 /*设置奇数帧和偶数帧相同,数据长度为16bit*/*SPSA1=RCR21;*SPSD1=0x0000;/*与接收寄存器的设置相同*/*SPSA1=XCR11;*SPSD1=0x0040;/*与接收寄存器的设置相同*/*SPSA1=XCR21;*SPSD1=0x0000;第第8 8章章 DSPDSP芯片应用芯片应用 *SPSA1=PCR1;*SPSD1=0x000C;asm(NOP);asm(NOP);/*初始化TLC320AD50*/voidinit_codec()第第8 8章章 DSPDSP芯片应用芯片应用 disable();/*关闭所有中断*/*初始化McBSP0*/init_bsp();/*设置中断为串口发出而不是DMA*/*DMPREC=*DMPREC&0xff3f;*DXR11=0x0;/*使能McBSP0接收数据*/*SPSA1=SPCR11;*SPSD1|=0x0001;第第8 8章章 DSPDSP芯片应用芯片应用 /*使能McBSP0发送数据*/*SPSA1=SPCR21;*SPSD1|=0x0001;/*用软件方式配置AD50寄存器*/*DXR11=0x0003;*SPSA1=SPCR21;while(!(*SPSD1&0x0002);/*循环直到字传送完毕*/第第8 8章章 DSPDSP芯片应用芯片应用 *DXR11=0x0181;/*向控制寄存器CR1写入0x0181(D71),复位TLC320AD50*/while(!(*SPSD1&0x0002);for(i=0;i4000;i+);/*等待AD50reset*/*DXR11=0x0003;while(!(*SPSD1&0x0002);第第8 8章章 DSPDSP芯片应用芯片应用 *DXR11=0x0101;/*向控制寄存器CR1写入0x0101(D70),启动TLC320AD50*/while(!(*SPSD1&0x0002);*DXR11=0x0003;while(!(*SPSD1&0x0002);*DXR11=0x0210;/*向控制寄存器CR2写入0x0210,设置为16bitADC模式*/while(!(*SPSD1&0x0002);第第8 8章章 DSPDSP芯片应用芯片应用 *DXR11=0x0003;while(!(*SPSD1&0x0002);*DXR11=0x0300;/*向控制寄存器CR3写入0x0300,TLC320AD50没有从属系统*/while(!(*SPSD1&0x0002);*DXR11=0x0003;while(!(*SPSD1&0x0002);第第8 8章章 DSPDSP芯片应用芯片应用 *DXR11=0x04D0; /*向控制寄存器CR4写入0x04D0,设置增益为0dB,PLL模式*/while(!(*SPSD1&0x0002);asm(NOP);asm(NOP);*IMR=0x0400;/*使能McBSP1的接收中断*/*IFR=0x0400;/*清除相应的中断标志位*/第第8 8章章 DSPDSP芯片应用芯片应用 enable();/*使能所有中断*/*Sendadummyvaluetostartthingsoff*/*DXR11=*DRR11;/*关闭所有中断*/voidinlinedisable()asm(ssbxINTM);第第8 8章章 DSPDSP芯片应用芯片应用 /*使能所有中断*/voidinlineenable()asm(rsbxINTM);/*接收中断处理函数*/voidinterruptessp_rx()intsample_in;/*读入采样数据*/sample_in=*DRR11;/*传送回TLC320AD50*/*DXR11=sample_in;第第8 8章章 DSPDSP芯片应用芯片应用 vector.asm.ref_c_int00.ref_essp_rx.sectvectorsRS: BD_c_int00NOPNOP第第8 8章章 DSPDSP芯片应用芯片应用 .space4*16*25;将接下来的25个中断向量位置0BRINT1:BD_essp_rx;McBSP的接收中断NOPNOP.end第第8 8章章 DSPDSP芯片应用芯片应用 8.4 存储器接口设计存储器接口设计8.4.1TMS320C5409的存储器接口1TMS320C5409与外部SRAM的接口除了内部32K字RAM和16K字ROM之外,TMS320C5409还可以扩展外部存储器。其中,数据空间总共为64K字(0000HFFFFH),I/O空间为64K字(0000HFFFFH),程序空间为8M。8M程序空间的寻址是通过额外的7根地址线(A16A22)实现的,由XPC寄存器控制。下面介绍几种扩展外部RAM的方法。第第8 8章章 DSPDSP芯片应用芯片应用 (1)外接一个128K16位的RAM,将程序区和数据区分开。图8-7为采用128K字RAM分开程序区和数据区的接口方法,图中采用程序选通线()接外部RAM的A16地址线实现。因此,程序区为RAM的前64K字(0000HFFFFH),数据区为RAM的后64K字(10000H1FFFFH)。对DSP而言,程序区和数据区的地址范围均为0000HFFFFH。第第8 8章章 DSPDSP芯片应用芯片应用 采用这种外部存储器配置,需要注意以下几点:如果内部RAM设置为有效,则相同地址的外部RAM自动无效。当外部RAM不能全速运行时,需要根据速度设置插入等待状态(设置SWWSR寄存器)。第第8 8章章 DSPDSP芯片应用芯片应用 图8-7分开的数据和程序空间配置第第8 8章章 DSPDSP芯片应用芯片应用 (2) 混合程序区和数据区。当OVLY=1时,内部RAM既是数据区又是程序区。这样设置的优点是程序可以在内部全速运行,缺点是由于程序和数据是共用的,因此存储区就变小了。此外,在链接时必须将程序和数据分开,以避免重叠。第第8 8章章 DSPDSP芯片应用芯片应用 图8-8混合的程序和数据空间配置第第8 8章章 DSPDSP芯片应用芯片应用 (3)一种优化的混合程序和数据区外接RAM方法。图8-9所示为一种优化的混合程序和数据区外接RAM方法。这种配置方法省去了DSP的A15地址线,将RAM分为32K字长的块。采用这种方法后,可充分利用外接的RAM,不会因内部RAM和外部RAM的地址重叠而造成外部RAM的浪费。下面分析外部RAM的地址安排。第第8 8章章 DSPDSP芯片应用芯片应用 图8-9优化的混合程序和数据空间配置第第8 8章章 DSPDSP芯片应用芯片应用 外部RAM的0000H7FFFH对应于DSP数据区的8000HFFFFH和程序区的08000H0FFFFH及18000H1FFFFH。外部RAM的8000HFFFFH对应于DSP程序区的28000H2FFFFH和38000H3FFFFH。外部RAM的10000H1FFFFH对应于DSP程序区的48000H4FFFFH和58000H5FFFFH。外部RAM的18000H1FFFFH对应于DSP程序区的68000H6FFFFH和78000H7FFFFH。第第8 8章章 DSPDSP芯片应用芯片应用 2TMS320C5409与Flash的接口1)器件简介SST39VF400A是 Silicon Storage公 司 的 新 一 代256K16位CMOSFlashMemory产品。它的特点是擦除和编程都采用SuperFlash技术来实现,使得它编程所需的电流比较低,并且擦除时间短,进而保证了SST39VF400A编程和擦写所需消耗的能量比较低。同时,SuperFlash技术能够保证编程和擦写时间不受已编程数据块的影响。这种特性使得在系统设计时不用考虑软件或者硬件上调整系统的读/写速率。第第8 8章章 DSPDSP芯片应用芯片应用 SST39VF400A的引脚图及引脚说明(以DIP32封装为例)见图8-10。SST39VF400A还有另外两种封装模式:TFBGA和TSOP32。由于FlashMemory结构与EPROM和E2PROM都有明显的区别,因此这里仅对它的基本工作原理做一简介。图8-11给出它的结构框图。第第8 8章章 DSPDSP芯片应用芯片应用 图8-10SST39VF400A的引脚图及其说明第第8 8章章 DSPDSP芯片应用芯片应用 图8-11SST39VF400A的结构框图第第8 8章章 DSPDSP芯片应用芯片应用 输入的存储地址通过地址缓存后,分别送入到X地址译码器和Y地址译码器中,得到相应的主存储器阵列的X地址和Y地址。主存储器通过X和Y地址找出相应的主存储器单元,将存储单元中的值发送到输入/输出缓存中,通过控制逻辑来确定芯片的输入/输出。表8-2给出了SST39VF400A的工作方式选择真值表。第第8 8章章 DSPDSP芯片应用芯片应用 表8-2SST39VF400A工作方式选择真值表第第8 8章章 DSPDSP芯片应用芯片应用 2)SST39VF400A与TMS320C5409的接口图8-12为TMS320C5409与Flash的一种接口方法。图中,Flash采用SST39VF400A(256K16位)作为DSP的外部数据存储器,地址总线和数据总线接至DSP的外部总线,接至DSP的。DSP上的XF引脚用于启动编程,当XF为低时,Flash处于读状态;当XF为高时,Flash可擦或编程。为了满足SST39VF400A的时序要求,XF与相“或”后接至,R/引脚与相或后接至。第第8 8章章 DSPDSP芯片应用芯片应用 图8-12DSP与Flash的接口第第8 8章章 DSPDSP芯片应用芯片应用 8.4.2Flash擦写在实际应用中,选择的片外存储器通常是片外的RAM或FlashMemory。但由于RAM中数据掉电即丢失,不适合长期保存数据,因此当需要保存到片外存储器的是一些无需频繁读/写但需要长期保存的数据时,如字模数据、端口地址等,通常选择使用片外的Flash扩展DSP芯片的存储器空间。使用片外Flash必须要解决对其擦写的问题。第第8 8章章 DSPDSP芯片应用芯片应用 在实际的应用中,对片外Flash的擦写有两种方式,一是使用通用编程器对Flash芯片进行擦写;二是直接由DSP对Flash进行擦写。对于需要反复修改或已安装在电路板上的Flash芯片,无法使用第一种方式,只能采用第二种方式,这样易于调试。这里介绍一种利用存储器映射技术,通过对DSP芯片编程实现片外Flash擦写的方法。第第8 8章章 DSPDSP芯片应用芯片应用 假设要将一组二维数组形式的数据(character18032)存入片外数据Flash的0x80000xA000地址段中,先做以下准备工作:(1)利用一个GPIO端口,扩展系统的可寻址数据存储器空间。(2)编写Flash擦写程序,程序流程如图8-13所示。第第8 8章章 DSPDSP芯片应用芯片应用 #defineN100/*由于Flash与RAM的读写速度不同,因此需要在每项操作后加入若干个延时以保证正确性,延时的长短可以根据具体情况做调整*/voidmain()unsignedinti,code;unsignedint*code_addr;unsignedint*flash_addr;第第8 8章章 DSPDSP芯片应用芯片应用 *GPIO_DR=0x0002;/*映射方式设置为映射到片外数据Flash*/delay(N);GPIOD_setup();/*GPIOD设置*/delay(N);erase_flash();/*如果Flash上原有数据无需保留,则全部擦除;如果部分数据需保留,也可部分擦除*/delay(N);第第8 8章章 DSPDSP芯片应用芯片应用 *GPIO_DR=0x0000;/*映射方式设置为映射到片内RAM*/delay(N);flash_addr=(unsignedint*)Flash_ADDR;code_addr=(unsignedint*)CODE_ADDR;/*设置RAM的存储起始地址和数据Flash擦写起始地址*/*循环擦写*/第第8 8章章 DSPDSP芯片应用芯片应用 for(i=0;iWRITE_LENGTH;i+)*GPIO_D_DR=0x0000;delay(N);code=*(code_addr+); /*保存RAM中数据到变量code*/delay(N);*GPIO_DR=0x0002;delay(N);第第8 8章章 DSPDSP芯片应用芯片应用 pre_write_flash();/*写Flash前的预处理,向Flash内写入相应命令字,根据所选用Flash的不同,预处理操作也有所不同*/delay(N);*(flash_addr+)=code;/*写数据到Flash中*/delay(N);第第8 8章章 DSPDSP芯片应用芯片应用 图8-13Flash擦写程序流程图第第8 8章章 DSPDSP芯片应用芯片应用 擦写步骤如下:(1)将character18032设置为全局变量。(2)将程序编译下载到DSP芯片中,打开工程目录中output文件夹中的.map文件,找到character数组在RAM中存放的起始地址和长度。(3)使用SaveMemory命令将RAM中对应于character数组的地址段的数据以二进制形式保存在计算机上。第第8 8章章 DSPDSP芯片应用芯片应用 (4)打开Flash擦写程序,修改数据在片内RAM中存储的起始地址和Flash的擦写起始地址与数据长度。(5)再次打开Flash擦写程序,单步执行到映射方式置为片外Flash处停止,然后使用SaveMemory命令保存Flash中刚写入的地址段的数据值,接着使用UltraEdit的比较文件命令比较前两次保存的数据,如完全相同就表明character字模/数组已经正确地写到片外Flash中。第第8 8章章 DSPDSP芯片应用芯片应用 8.4.3Bootload设计1自举加载器(Bootloader)自举加载器的主要功能是,在上电时从外部加载并执行用户的程序代码。TMS320C54x的自举加载共有并行EPROM(Flash)、并行I/O、串行口、HPI口和热自举五种方式,其中前三种又分8位和16位两种。第第8 8章章 DSPDSP芯片应用芯片应用 1)选择自举方式在硬件复位期间,如果TMS320C54x的MP/为低电平,则从片外的0FF80H开始执行程序,选择过程如图8-14所示。第第8 8章章 DSPDSP芯片应用芯片应用 图8-14自举加载方式的选择过程第第8 8章章 DSPDSP芯片应用芯片应用 在片内ROM的0FF80H地址上,有一条分支转移指令,以启动制造商在ROM的自举加载器程序。具体加载方法如下:(1)在自举加载前进行初始化。初始化的内容如下:INTM1,禁止所有的中断。OVLY1,将片内双寻址RAM和单寻址RAM映像到程序/数据空间。第第8 8章章 DSPDSP芯片应用芯片应用 SWWSR7FFFH,所有程序和数据空间都插入7个等待状态。BSCR0FFFFH,设定外部存储区分区为4K字,当程序和数据空间切换时,插入一个等待周期。第第8 8章章 DSPDSP芯片应用芯片应用 (2)检查,决定是否从主机接口(HPI)加载。如果没有锁存信号,说明不是从HPI加载,否则从HPI到RAM自举加载。(3)使I/O选通信号()为低电平,从地址为0FFFFH的I/O口读入自举程序选择字(BRS)。BRS的低8位确定了自举加载的方式,其内容和引导方式的对应关系如表8-3所示。表8-3中,x表示无效,SRC表示并行方式的6位页地址,ADDR表示热自举方式的6位页地址。第第8 8章章 DSPDSP芯片应用芯片应用 表8-3TMS320C5409引导方式方式0FFFFH单元低8位内容8位串行口xxxx000016位串行口xxxx01008位并行I/Oxxxx100016位并行I/Oxxxx11008位并行EPROMSRC0116位并行EPROMSRC10热自举ADDR11第第8 8章章 DSPDSP芯片应用芯片应用 2)8/16位并行自举加载的实现TMS320C54x通常都采用从EPROM或Flash引导的方式,这里着重讨论并行Boot的实现。Boot程序首先读入外部数据区的FFFEH和FFFFH两个地址的内容,并把它们组装成1个16位字作为代码存放的源地址,根据这个地址,从外部数据区读入连续的两个8位字节,并组装成1个16位字。第第8 8章章 DSPDSP芯片应用芯片应用 由于Boot已经设定好相应的数据存放格式,因此在Flash组织数据就成为关键。下面做以下假设来具体说明Flash的数据组织方法。存放在Flash中的控制代码和用户代码的首地址为外部数据区的8000H,等待状态数为7个,Bank长度为64K字,程序执行的入口点地址为2000H,程序代码的长度为400H,用户代码存放在片内程序区的首地址为2000H,则Flash中的数据组织如表8-4所示。表内括号中的H表示高8位,L表示低8位。第第8 8章章 DSPDSP芯片应用芯片应用 表8-4Flash的数据组织数据区地址(Hex)内容(Hex)含义8000H08H8位Boot标识(H)8001HAAH8位Boot标识(L)8002H7FHSWWSR(H)8003HFFHSWWSR(L)8004HF8HBSCR(H)8005H00HBSCR(L)8006H00H程序入口XPC(H)8007H00H程序入口XPC(L)8008H20H程序入口地址(H)8009H00H程序入口地址(L)800AH04H程序块长度(H)第第8 8章章 DSPDSP芯片应用芯片应用 800BH00H程序块长度(L)800CH00H存放目标XPC(H)800DH00H存放目标XPC(L)800EH20H存放目标地址(H)800FH00H存放目标地址(L)8010HxxH程序代码1(H)8011HxxH程序代码1(L)880EHxxH程序代码N(H)880FHxxH程序代码N(L)8810H00H块结束标志(H)8811H00H块结束标志(L)FFFEH80H代码存放首地址(H)FFFFH00H代码存放首地址(L)第第8 8章章 DSPDSP芯片应用芯片应用 3)热自举热自举方式是在RESET信号临近释放时,按照用户定义的地址,改变TMS320C54x的程序执行方向。热自举方式并不传送自举表,而是指示TMS320C54x按照自举加载器程序读入的BRS中所规定的地址起执行,如图8-15所示。第第8 8章章 DSPDSP芯片应用芯片应用 图8-15热自举第第8 8章章 DSPDSP芯片应用芯片应用 4)从HPI口自举加载HPI是一个将主处理器与TMS320C54x连接在一起的8位并行口,主处理器和TMS320C54x通过共享的片内存储器交换信息。从HPI口自举加载的示意图如图8-16所示。第第8 8章章 DSPDSP芯片应用芯片应用 图8-16从HPI口自举加载第第8 8章章 DSPDSP芯片应用芯片应用 5)从I/O自举加载I/O自举方式就是从I/O的0H口异步传送程序代码到内部/外部程序存储器,其自举加载方框图如图8-17所示。第第8 8章章 DSPDSP芯片应用芯片应用 图8-17从I/O自举加载第第8 8章章 DSPDSP芯片应用芯片应用 6)从串行口自举加载从串行口自举加载就是TMS320C54x从串行口传送程序代码至程序存储器,并执行程序,如图8-18所示。第第8 8章章 DSPDSP芯片应用芯片应用 图8-18从串行口自举加载第第8 8章章 DSPDSP芯片应用芯片应用 2Bootload与片外SRAM冲突的解决由于Bootload的寻址区是在数据区,即Flash只能接在数据空间,即用片选,因此如果设计的DSP系统需要外接SRAM作为外部数据存储空间,就会和Flash产生地址冲突。另一方面,当程序全部从FlashBoot到所指定的目的地址以后,用于存放程序的Flash在系统的运行过程中就不再起任何作用。第第8 8章章 DSPDSP芯片应用芯片应用 8.5 G.726语音编解码系统语音编解码系统 8.5.1G.726算法简介自适应脉冲编码调制(ADPCM)是波形编码的一种。G.711使用A律或律PCM方法,对采样率为8kHz的声音数据进行压缩,压缩后的数据率为64kb/s。对于许多应用特别是长途传输系统,由于64kb/s的速率所占用的频带太宽,且通信费用昂贵,因此人们一直寻求能够在更低的速率上获得高质量语音编码的方法。第第8 8章章 DSPDSP芯片应用芯片应用 ADPCM进一步利用了语音信号样点间的相关性,并针对语音信号的非平稳特点使用了自适应预测和自适应量化,在32kb/s速率时能够给出网络等级话音质量,从而符合进入公用网的要求。第第8 8章章 DSPDSP芯片应用芯片应用 ADPCM(AdaptiveDifferencePulseCodeModulation)综合了APCM的自适应特性和DPCM系统的差分特性,是一种性能比较好的波形编码。它的核心想法是:利用自适应的思想改变量化阶的大小,即使用小的量化阶(Step-size)去编码小的差值,使用大的量化阶去编码大的差值;使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。它的编码简化框图如图8-19所示。第第8 8章章 DSPDSP芯片应用芯片应用 图8-19ADPCM方块图第第8 8章章 DSPDSP芯片应用芯片应用 图8-20G.72632kb/sADPCM工作原理框图(a)G.72632kb/sADPCM编码器;(b)G.72632kb/sADPCM解码器第第8 8章章 DSPDSP芯片应用芯片应用 图8-20G.72632kb/sADPCM工作原理框图(a)G.72632kb/sADPCM编码器;(b)G.72632kb/sADPCM解码器第第8 8章章 DSPDSP芯片应用芯片应用 图8-21ADPCM编解码波形(a)编码前的语音波形;(b)编码后的语音波形第第8 8章章 DSPDSP芯片应用芯片应用 8.5.2系统构成图8-22是本系统的硬件构成框图。作为一个示例性的系统,本系统主要完成对G.726协议(ADPCM)的实时编解码,也就是说本系统完成的工作是将从A/D转换器采集到的语音数据通过TMS320C5409编码后,再由TMS320C5409解码输出到D/A转换器中。第第8 8章章 DSPDSP芯片应用芯片应用 图8-22G.726系统硬件构成框图第第8 8章章 DSPDSP芯片应用芯片应用 8.5.3系统软硬件设计1仿真接口(JTAG)的设计JTAG是基于IEEE1149.1标准的一种边界扫描测试方式(Boundary-scanTest)。TI为其大多数的DSP产品都提供了JTAG端口支持,TMS320C5409就是其中之一。通过仿真器结合配套的仿真软件(Emulator),可以将DSP目标板的仿真接口连接到主计算机,实现对DSP目标板的程序仿真,这样就可以访问DSP的所有资源,包括片内寄存器以及所有的存储器,从而提供了一个实时的硬件仿真与调试环境,便于开发人员进行系统软件调试。第第8 8章章 DSPDSP芯片应用芯片应用 仿真器通过一个14pin的接插件与芯片的JTAG端口进行通信。图8-23是TMS320C5409仿真接口与14pinHeader的连接关系。两个EMUx信号必须用上拉电阻与电源相连,上拉电阻的推荐阻值为4.7k。如果TMS320C5409与14pinHeader间的距离超过了6英尺,则需要在有关的仿真信号上添加一级缓冲驱动。如果系统中有多片DSP需要进行多处理器仿真调试,则要求这些DSP的JTAG端口和14pinHeader间以菊花链方式互连,以满足IEEE1149.1的规范要求。第第8 8章章 DSPDSP芯片应用芯片应用 图8-23JTAG硬件连接图第第8 8章章 DSPDSP芯片应用芯片应用 2系统电源设计和外围逻辑芯片的选择G.726系统采用TM5320VC5409芯片,由于DSP的内核电压和外部接口电压相同,均为3.3V,因此,本系统电压为5V和3.3V两种。其中,模/数转换电路和时序产生电路均由5V供电;DSP和Flash由3.3V供电。第第8 8章章 DSPDSP芯片应用芯片应用 3DSP设计DSP设计主要考虑以下几个方面:(1)时钟电路:采用外接晶振,内部时钟使能方式。设置CLKMD1=1,CLKMD2=CLKMD3=0。加电时,DSP的工作时钟为外部晶振频率的1/2。(2)串行接口:TMS320VC5409提供了3个多通道缓冲串行口(McBSP),本系统采用McBSP的初始化(见8.3.3节)。第第8 8章章 DSPDSP芯片应用芯片应用 (3)复位电路:采用简单的阻容复位与外部复位相结合的方式。系统可以直接采用简单的阻容复位方式,同时,外部也可以随时对DSP进行复位,系统受外部控制。(4)外接存储器地址及数据分配:为简化设计,本系统不设计译码电路,Flash映射到数据空间作为Boot,有关Boot的设计参见8.4.3节。4Flash接口设计有关Flash接口的设计以及Flash的擦写参见8.4节。第第8 8章章 DSPDSP芯片应用芯片应用 8.5.4系统调试整个系统的调试包括三个部分:硬件调试、软件调试和总体调试,这三部分调试都可以借助于CCSIDE提供的仿真器进行。第第8 8章章 DSPDSP芯片应用芯片应用 1硬件调试硬件焊接完后,首先测试电压是否正确,然后可用示波器或逻辑分析仪测试DSP的CLKOUT引脚是否有信号输出,并测试一下该信号的频率是多少,对照设定的CLKMD1、CLKMD2、CLKMD3看频率是否正确。第第8 8章章 DSPDSP芯片应用芯片应用 2软件调试TMS320VC5409的软件主要是在仿真器上调试的。同样,为了既提高程序效率,又提高编程效率,在编写整个TMS320VC5409系统软件时采用两种不同的方法,有些程序模块直接用汇编语言,有些程序模块直接用C语言,而有些程序模块则用C和汇编的混合编程。第第8 8章章 DSPDSP芯片应用芯片应用 C和汇编语言的混合编程参见8.2节DSP芯片C语言开发简介。对于语音编解码类的应用系统来说,一般采用的都是C和汇编语言的混合编程的方法来开发系统。语音的编解码算法用C语言实现,外围存储器、模/数接口用汇编语言实现。软件调试可以分为两部分,C语言部分(算法部分)和汇编语言部分(接口部分)。C语言部分可以在VC环境下验证算法的正确性;汇编语言部分则需要与硬件调试配合。第第8 8章章 DSPDSP芯片应用芯片应用 3总体调试总体调试包括系统的初始化、软硬件的联合调试等,极为重要。本系统的初始化工作主要包括:(1)工作时钟设置。系统开始时,工作时钟是根据外部三个引脚的设置进行的。(2)中断设置。打开多通道缓冲串行口中断,对IMR寄存器进行设置,置相应的通道的位为1。(3)其他设置。其他初始化设置包括串行口初始化,ST0、ST1初始化等,参见8.3.3节模/数接口的软件设计的例程。第第8 8章章 DSPDSP芯片应用芯片应用 (4)软硬件联合调试。联合调试是将所有程序综合在一起,利用仿真器和带仿真接口的用户硬件系统进行调试。程序包括初始化程序、语音编解码程序、串行口中断服务程序等。第第8 8章章 DSPDSP芯片应用芯片应用 8.6 语音实时变速系统语音实时变速系统 8.6.1语音变速算法简介在外语多媒体教学中,要求对语速进行快慢控制,以适应不同程度学生的需求。但在改变语速的同时,要求保持原说话者的语调不变。本文就这方面的课题进行了探讨与研究,并进行了一定的实践。第第8 8章章 DSPDSP芯片应用芯片应用 考虑到在语音信号中,浊音具有准周期性而清音没有这一特性,且清音段对语音变速影响不大,因此可以忽略。如果将语音信号浊音段中的基音周期找出来,并适当地复制某些周期,就可以达到降低语速的效果,而适当地把某些基音周期去掉就可以加快语速。图8-24(a)是日本Hitachi公司在1996年做出来的一个语音变速系统,其原理如图8-24(b)、8-24(c)所示,就是将原始语音的若干基音周期进行复制和剪切。第第8 8章章 DSPDSP芯片应用芯片应用 图8-24日本Hitachi公司语音变速系统及算法(a)语音变速系统外形;(b)语音加速原理;(c)语音减速原理第第8 8章章 DSPDSP芯片应用芯片应用 LPC低比特率语音编码算法的语音变速算法,该算法能够任意调整语音速率。LPC编码将语音信号s(n)看作一个时变的声道系统在声门的激励之下的输出信号。对浊音而言,声门激励为一周期脉冲串,而对清音而言,声门激励为随机噪声序列。由此得出语音信号的简化方框图如图8-25所示。在LPC编码中,可以将一帧的语音信号用简化模型的参数来表示,如浊音、清音判别,基音周期,增益G以及数字滤波器系数al,这样就可以获得3kb/s的编码。第第8 8章章 DSPDSP芯片应用芯片应用 图8-25语音产生模型的简化方框图第第8 8章章 DSPDSP芯片应用芯片应用 图8-26语音波形(a)没有变速的语音波形;(b)加快一倍后的语音波形;(c)变慢0.6倍后的语音波形第第8 8章章 DSPDSP芯片应用芯片应用 8.6.2系统构成图8-27是语音变速系统的硬件构成框图。由于本系统为一个完善的应用系统,主要完成对语音信号的实时LPC编解码及语音变速,此外,本系统还具有键盘控制功能和语音录放功能,因此,本系统不但需要外部的SRAM存放语音数据,而且需要与DSP相连接的键盘控制设备。该系统主要由TMS320C5409、以TI公司的TLC320AD50芯片为核心的音频Codec(编解码器)模块、以SST39VF400A和CY7C1021为核心的存储模块、键盘中断模块、电源模块等构成。第第8 8章章 DSPDSP芯片应用芯片应用 图8-27语音变速系统硬件构成框图第第8 8章章 DSPDSP芯片应用芯片应用 8.6.3系统软硬件设计1电路设计要求1)布局首先,要考虑PCB尺寸大小。若PCB尺寸过大,则印制板走线长,阻抗增加,抗噪声能力下降,成本也增加;若过小,则散热不好,且邻近走线易受干扰。在确定PCB的尺寸之后,再确定特殊元件的位置,然后根据电路的功能单元,对电路的全部元器件进行布局。第第8 8章章 DSPDSP芯片应用芯片应用 (1)在确定特殊元件的位置时要遵守以下原则:尽可能缩短高频元器件之间的连线,设法减少它们的分布参数和相互间的电磁干扰;易受干扰的元器件不能相互挨得太近,输入和输出元件应尽量远离;应留出印制板定位孔及固定支架所占用的位置。第第8 8章章 DSPDSP芯片应用芯片应用 (2)根据电路的功能单元,对电路的元器件进行布局时,要注意:按照电路的流程安排各个功能电路单元的位置,使布局便于信号流通,并使信号尽可能保持一致的方向;以每个功能电路的核心元件为中心,围绕它来进行布局;元器件应均匀、整齐、紧凑地排列在PCB上;尽量减少和缩短各元器件之间的引线和连接;一般电路应尽可能使元器件平行排列,这样不但美观,而且焊接容易;位于电路板边缘的元器件,离电路板边缘一般不小于2mm;电路板面尺寸大于200mm150mm时,应考虑电路板所受的机械强度。第第8 8章章 DSPDSP芯片应用芯片应用 2)布线布线时应遵守以下原则:(1)印制板导线的最小宽度主要由导线与绝缘基板间的粘附强度和流过它们的电流值决定。(2)印制导线拐弯处一般取45角或圆弧形,因为直角在高频电路中会影响电气性能。第第8 8章章 DSPDSP芯片应用芯片应用 3)PCB及电路抗干扰措施(1)电源线设计。根据印制线路板电流的大小,尽量加粗电源线宽度,减少环路电阻,同时,使电源线、地线的走向和数据传递的方向一致,这样有助于增强抗噪声能力。(2)地端设计。设计时应遵守以下原则:数字地与模拟地分开。接地线应尽量加粗。第第8 8章章 DSPDSP芯片应用芯片应用 (3)去耦电容配置。设计时应遵守以下原则:PCB设计的常规做法之一是在印制板的各个关键部位配置适当的去耦电容。电源输入端跨接10100F的电解电容器,如有可能,接100F以上的更好。原则上每个集成电路芯片电源引脚和地之间都应布置一个0.01F的瓷片电容,如遇印制板空隙不够,可每48个芯片布置一个110F的钽电容。第第8 8章章 DSPDSP芯片应用芯片应用 2外围存储模块系统的存储模块包括扩展程序的SST39VF400AFlash芯片、扩展数据的CY7C1021SRAM。Flash程序扩展芯片主要用于存储语音变速程序,系统上电后,能够自动装入到DSP的内部程序存储器。SRAM主要用于存储经过LPC编码后的语音数据。第第8 8章章 DSPDSP芯片应用芯片应用 3键盘中断模块系统用键盘作为人机界面。为了有效合理地利用DSP的片上资源,以及支持系统的扩展,系统的设计过程中没有用到HPI口,在这里将键盘与TMS320C5409的HPI口相连。通过将C5409的HPIENA脚拉低,可以将HPI口映射成为GPIO,并且将键盘连线通过“或”门接到INT0。当有键按下时,INT0中断处理程序通过从GPIO中读出的数值判断此时是录音、放音、语速变快还是语速变慢。GPIO的初始化函数如下所示:第第8 8章章 DSPDSP芯片应用芯片应用 voidinit_hpi()/*将HPI映射为GPIO,并且所有的管脚都为输入管脚*/*GPIOCR=0x0000;第第8 8章章 DSPDSP芯片应用芯片应用 4A/D与D/A程序的设计TLC320AD50与TMS320C5409之间通过McBSP串口通信。McBSP可以有三种方式跟CPU通信:每收到或发送一个单元,置标志位,CPU轮询此标志位;每收到或发送一个单元,给CPU发送中断;通过DMA收到或发送完一组单元后,再给CPU中断。这里,为了减轻CPU负担并且考虑到LPC编码不像前面G.726编码那样是对每一个采样点进行处理的,它是对每一帧进行编码和解码的,故采用第三种方法。第第8 8章章 DSPDSP芯片应用芯片应用 图8-28语音变速系统的硬件视图(a)连接图;(b)局部放大图第第8 8章章 DSPDSP芯片应用芯片应用 图8-29语音变速系统的软件流程第第8 8章章 DSPDSP芯片应用芯片应用 8.6.4系统调试1PCB板测试对于VCC而言,GND进行工艺性检查,看是否短路、断路,过孔是否导通,这些主要通过目测和万用表完成。在小批量测试时,要尽量做到这步,因为实验板的量少,厂家可能没有进行很好的检验。第第8 8章章 DSPDSP芯片应用芯片应用 2焊接焊接时先焊最小系统,调试后再逐步增加器件。般先焊表贴器件,低的先焊,高的后焊。如果表贴器件与最小系统矛盾,则一定要先调通最小系统。3硬件调试硬件调试时,首先是准备工具,如开发系统、示波器、万用表、信号源等。示波器的使用频率范围要由系统的最高频率决定。第第8 8章章 DSPDSP芯片应用芯片应用 4调试考虑点1)信号探测点为了验证板上各个元件间通信正常与否,应当在关键信号线上设置探测点(TestPoint),或者是借助标准的插座将信号引出。如何选择这些关键信号,则需要设计人员根据相应的器件手册,视具体的应用情况而定。第第8 8章章 DSPDSP芯片应用芯片应用 2)子系统的独立性简化设计对于将来实现对一个电路的快速调试尤为关键。一个实际的应用系统大多都具有较高的复杂程度。为了简化调试过程,这样一个复杂系统在设计时应当让各个部分尽量可以独立测试。第第8 8章章 DSPDSP芯片应用芯片应用 3)手工复位电路中建议添加一个按键开关为系统提供硬件复位信号。在早期的原型设计调试阶段,系统中多个器件很可能会出现一些非法工作状态。这种情况下,手工硬件复位是一个最简单的方法,将系统更新初始化,使各个部分重新进入缺省状态。第第8 8章章 DSPDSP芯片应用芯片应用 5软件调试(1)利用开发系统进行在线调试,如单步、断点等。(2)分块调试。检验各程序模块正确性的方法需要根据各模块的实际情况而定。(3)模块间通信调试。(4)系统软件联调,在测试各项指标参数时,注意进行参数补偿。第第8 8章章 DSPDSP芯片应用芯片应用 6调试技巧(1)如果不慎将DSP烧坏,就要从板子上面把DSP拿下来。可以用细铜丝穿过DSP的一排引脚,将铜丝的一端固定,一边用烙铁烫DSP的引脚一边用铜丝切割DSP的引脚。这样可以完好无损地将DSP拿下,保护了焊盘。(2)焊DSP、SRAM一类的多引脚贴片封装的芯片时,先将芯片与焊盘对齐,用烙铁点芯片的四个脚将芯片固定在板子上,然后用烙铁将焊锡均匀的涂在芯片的一侧管脚上,用吸锡线将管脚旁边的锡吸掉。其他几面用同样的方法即可。第第8 8章章 DSPDSP芯片应用芯片应用 (3)有关C编程的技巧参见8.2节。软硬件调试成功后就可以脱离仿真器。首先通过CCSIDE将整个系统的软件按照8.4.2介绍的Flash擦写方法写入Flash,其中写入Flash的数据组织形式参见8.4.3节Bootload设计,这样系统就可以成为独立运行的DSP系统。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号