设计及应用课程第82章芯片_第1页
设计及应用课程第82章芯片_第2页
设计及应用课程第82章芯片_第3页
设计及应用课程第82章芯片_第4页
设计及应用课程第82章芯片_第5页
已阅读5页,还剩176页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第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应用系统的设计、调试和开发

2、过程。第第8 8章章 DSPDSP芯片应用芯片应用 8.2 DSP芯片芯片C语言开发简介语言开发简介 8.2.1 TMS320C54x C/C+编译器支持的数据类型 表8-1列出了TMS320C54x C/C+编译器支持的数据类型的大小、表示形式和表示范围,这些数据类型在float.h和limits.h中定义。在C语言开发的过程中,采用合适的数据类型对于系统的正确运行有着极为重要的意义。第第8 8章章 DSPDSP芯片应用芯片应用 表8-1 TMS320C54x C/C+编译器支持的数据类型 类 型大小/bit表示形式最小值最大值signed char16ASCII32 76832 767ch

3、ar, unsigned char16ASCII065 535short, signed short162s Complement32 76832 767unsigned short16Binary065 535int, signed int162s Complement32 76832 767第第8 8章章 DSPDSP芯片应用芯片应用 类 型大小/bit表示形式最小值最大值unsigned int16Binary065 535long, signed long322s Complement2 147 483 6482 147 483 647unsigned long32Binary04 2

4、94 967 295enum162s Complement32 76832 767float32IEEE 32-bit1.175 494e383.402 823 46e+38double32IEEE 32-bit1.175 494e383.402 823 46e+38long double32IEEE 32-bit1.175 494e383.402 823 46e+38pointers16Binary00 xFFFF第第8 8章章 DSPDSP芯片应用芯片应用 8.2.2 C语言的数据访问方法 1DSP片内寄存器的访问 DSP片内寄存器在C语言中一般采用指针方式来访问,常常采用的方法是将DSP

5、寄存器地址的列表定义在头文件中(如reg.h)。DSP寄存器地址定义的形式为宏,如下所示:第第8 8章章 DSPDSP芯片应用芯片应用 #define IMR (volatile unsigned int *)0 x0000#define IFR (volatile unsigned int *)0 x0001#define ST0 (volatile unsigned int *)0 x0006#define ST1 (volatile unsigned int *)0 x0007#define AL (volatile unsigned int *)0 x0008#define AH (v

6、olatile unsigned int *)0 x0009#define AG (volatile unsigned int *)0 x000A#define BL (volatile unsigned int *)0 x000B#define BH (volatile unsigned int *)0 x000C#define BG (volatile unsigned int *)0 x000D第第8 8章章 DSPDSP芯片应用芯片应用 #define T (volatile unsigned int *)0 x000E#define TRN (volatile unsigned in

7、t *)0 x000F#define AR0 (volatile unsigned int *)0 x0010#define AR1 (volatile unsigned int *)0 x0011#define AR2 (volatile unsigned int *)0 x0012#define SP (volatile unsigned int *)0 x0018#define BK (volatile unsigned int *)0 x0019第第8 8章章 DSPDSP芯片应用芯片应用 #define BRC (volatile unsigned int *)0 x001A#def

8、ine RSA (volatile unsigned int *)0 x001B#define REA (volatile unsigned int *)0 x001C#define PMST (volatile unsigned int *)0 x001D#define XPC (volatile unsigned int *)0 x001E第第8 8章章 DSPDSP芯片应用芯片应用 在主程序中,若要读出或者写入一个特定的寄存器,就要对相应的指针进行操作。下例通过指针操作对SWWSR和BSCR进行初始化。 #define SWWSR (volatile unsigned int *)0 x

9、0028 #define BSCR (volatile unsigned int *)0 x0029 第第8 8章章 DSPDSP芯片应用芯片应用 int func ( ). *SWWSR = 0 x2000;*BSCR = 0 x0000;.第第8 8章章 DSPDSP芯片应用芯片应用 2DSP内部和外部存储器的访问 同DSP片内寄存器的访问相类似,对存储器的访问也采用指针方式来进行。下例通过指针操作对内部存储器单元0 x3000和外部存储器单元0 x8FFF进行操作。第第8 8章章 DSPDSP芯片应用芯片应用 int *data1 = 0 x3000; /*内部存储器单元*/int *d

10、ata2= 0 x8FFF; /*外部存储器单元*/int func ( ). * data1 = 2000;* data2 = 0;.第第8 8章章 DSPDSP芯片应用芯片应用 3DSP I/O端口的访问 DSP I/O端口的访问通过ioport关键字实现。定义的形式为 ioport type port hex_num 其中:ioport是关键字,表明变量是io变量;type 必须是char、short、int和unsigned;port表示io地址,hex_num是十六进制地址。 下例声明了一个io变量,地址为10H,并对I/O端口做读/写操作。第第8 8章章 DSPDSP芯片应用芯片应

11、用 ioport unsigned port10; /* 定义地址为10H的I/O端口变量*/int func ( ).port10 = 20; /* write a to port 10H */.b = port10; /* read port 10H into b */.第第8 8章章 DSPDSP芯片应用芯片应用 8.2.3 C语言和汇编语言的混合编程方法 用C语言和汇编语言混合编程的方法主要有以下三种: (1) 独立编写C程序和汇编程序,分开编译或汇编以形成各自的目标代码模块,然后用链接器将C模块和汇编模块链接起来。例如,主程序用C语言编写,中断向量文件(vector.asm)用汇编语

12、言编写。若要从C程序中访问汇编程序的变量,将汇编语言程序在.bss块中定义的变量或函数名前面加一下划线_,将变量说明为外部变量,同时在C程序中也将变量说明为外部变量,如下例所示:第第8 8章章 DSPDSP芯片应用芯片应用 汇编程序: .bss _var, 1 ;定义变量 .global _var ;说明为外部变量 C程序: extern int var; /*外部变量*/ var1; /*访问变量*/ 若要在汇编程序中访问C程序变量或函数,也可以采用同样的方法。第第8 8章章 DSPDSP芯片应用芯片应用 C程序:global int i; /* 定义i为全局变量*/global float

13、 x; /* 定义x为全局变量*/main( ) 第第8 8章章 DSPDSP芯片应用芯片应用 汇编程序:.ref _i; ; 说明_i为外部变量.ref _x; ; 说明_x为外部变量LD _i, DP STL _x, A第第8 8章章 DSPDSP芯片应用芯片应用 (2) 在C语言程序的相应位置直接嵌入汇编语句,这是一种C和汇编之间比较直接的接口方法。 嵌入汇编语句的方法比较简单,只需在汇编语句的左、右加上一个双引号,用小括弧将汇编语句括住,在括弧前加上asm标识符即可,如下所示: asm( 汇编语句 ); 如上所述,在C程序中直接嵌入汇编语句的一个典型应用是控制DSP芯片的一些硬件资源。

14、 第第8 8章章 DSPDSP芯片应用芯片应用 对于TMS320C5409,在C程序中一般采用下列汇编语句实现一些硬件控制: asm( NOP ); /*插入等待周期*/ asm( ssbx INTM); /* 关中断*/ asm( rsbx INTM); /* 开中断*/ (3) 对C程序进行编译生成相应的汇编程序,然后对汇编程序进行手工优化和修改。 第第8 8章章 DSPDSP芯片应用芯片应用 8.2.4 中断函数 TMS320C54x C/C+中可以通过两种方式定义中断函数。 (1) 通过给每个中断函数前面加关键字interrupt来声明一个函数为中断处理函数。中断函数的返回值是void

15、的,函数没有任何的形参。中断函数可以任意使用局部变量和堆栈。例如:第第8 8章章 DSPDSP芯片应用芯片应用 interrupt void int_handler ( )unsigned int flags;.第第8 8章章 DSPDSP芯片应用芯片应用 为了能够让相应的中断信号调用不同的中断函数,还需要在中断向量文件(vector.asm)中定义中断向量表。如下例所示: .ref _c_int00 .ref _ int_handler.sect vectors RS: BD _c_int00 NOPNOP第第8 8章章 DSPDSP芯片应用芯片应用 .BRINT1: BD _ int_ha

16、ndler ; McBSP1接收中断 NOP NOP .end第第8 8章章 DSPDSP芯片应用芯片应用 (2) C中断程序采用特殊的函数名,其格式为c_intnn。其中,nn代表0099之间的两位数,如c_int01就是一个有效的中断函数名。下面是一个中断函数的例子: int datain, dateout; void c_int05( ) datain=sample(dataout); 第第8 8章章 DSPDSP芯片应用芯片应用 8.2.5 存储器模式 TMS320C54x将存储器分为程序空间和数据空间。程序空间存放的是可执行的代码,数据空间存放的是外部变量、静态变量和系统的堆栈。由C

17、程序产生的代码和数据就被放置在存储空间的各个段中。第第8 8章章 DSPDSP芯片应用芯片应用 1C编译器生成的段 C编译器对C语言程序编译后生成6个可以进行重定位的代码和数据段,这些段可以用不同的方式分配至存储器以符合不同系统配置的需要。这6个段可以分为两种类型,一是已初始化段,二是未初始化段。第第8 8章章 DSPDSP芯片应用芯片应用 已初始化段主要包括数据表和可执行代码。C编译器共创建3个已初始化段:.text、 .cinit、.const。 .text段:包含可执行代码和字符串。 .cinit段:包含初始化变量和常数表。 .const段:字符串和switch表。 .bs段:保留全局和

18、静态变量空间。 .stack段:为系统堆栈分配存储器。 .sysmem段:为动态存储器函数malloc、calloc和realloc分配存储器空间。 第第8 8章章 DSPDSP芯片应用芯片应用 一般地,.text、.cinit和.const连同汇编语言中的.data段可链入到系统的ROM或RAM中,而.bss、.stack和.sysmem段则应链入到RAM中。需要注意的是,如果系统不支持将.data块链入到数据空间,则必须将.data段链入到程序空间,运行的时候再调入数据空间,它的cmd文件如下所示: 第第8 8章章 DSPDSP芯片应用芯片应用 MEMORYPAGE 0 : PROG :

19、.PAGE 1 : DATA : .SECTIONS.const : load = PROG PAGE 1, run = DATA PAGE 1第第8 8章章 DSPDSP芯片应用芯片应用 /* GET RUN ADDRESS */_const_run = .;/* MARK LOAD ADDRESS */*(.c_mark)/* ALLOCATE .const */*(.const)/* COMPUTE LENGTH */_const_length = .-_ const_run;.第第8 8章章 DSPDSP芯片应用芯片应用 2C系统的堆栈 C编译器利用TMS320C54x内置的堆栈机制来

20、实现如下功能: (1) 保护函数的返回地址; (2) 分配局部变量; (3) 传递函数变量; (4) 保护临时结果。第第8 8章章 DSPDSP芯片应用芯片应用 3动态存储器分配 编译器提供的运行支持函数中包含几个允许在运行时为变量动态分配存储器的函数,如malloc、calloc和recalloc。动态分配并不是C语言本身的标准,而是由标准运行支持函数所提供的。第第8 8章章 DSPDSP芯片应用芯片应用 4存储器大小模式 编译器支持两种存储器模式:小存储器模式和大存储器模式。 (l) 小存储器模式。小存储器模式是编译器的缺省存储器模式。 (2) 大存储器模式。大存储器模式与小存储器模式的区

21、别在于它不限制.bss段的大小,因此对全局变量和静态变量来说,具有无限的空间。 第第8 8章章 DSPDSP芯片应用芯片应用 8.2.6 其他注意事项 下面介绍C语言编程的一些其他注意事项。 (1) c_int00函数包含在运行支持库中,必须与其他的C目标模块相链接。 (2) 采用C优化编译时,为了保证程序的正确性,要特别注意,如果使用asm行汇编语句,则必须对编译后得到的汇编语言进行仔细的检查,以确保asm语句在程序中的正确性。 第第8 8章章 DSPDSP芯片应用芯片应用 (3) 可以使用volatile关键字避免优化。对于下例这样的语句: unsigned int *data; whil

22、e(*data!=4); 由于*data是一个循环不变的表达式,因此这个循环将被优化为一个存储器读指令。为了避免这样的优化,需要将data定义为volatile,例如: volatile unsigned int *data;第第8 8章章 DSPDSP芯片应用芯片应用 做了这样的定义后,优化器就不再对上述语句进行优化了。一般在reg.h中定义的寄存器地址都定义为volatile,例如: #define IMR (volatile unsigned int *)0 x0000 #define IFR (volatile unsigned int *)0 x0001 第第8 8章章 DSPDSP

23、芯片应用芯片应用 (4) C54x C/C+ 编译器支持标准C的关键字const,这个关键字用来定义那些值不变的变量,但是,在定义时const的位置是十分重要的。例如,下面这个例子中,第一句定义了一个常量指针p,指向一个int变量,第二句定义了一个指针q,指向一个常量int变量,所以要注意const的位置。 int * const p = &x; const int * q = &x;第第8 8章章 DSPDSP芯片应用芯片应用 (5) 由于在C语言的环境下,局部变量的寻址必须通过SP寄存器实现,在混合编程的时候,为了使汇编语言不影响堆栈寄存器SP,常用的方式是在汇编环境中使用

24、DP方式寻址,这样可以使二者互不干扰,编程时只要注意对CPL位正确设置即可。CPL位是编译模式控制位,它表示在相对直接寻址时采用哪种指针。当CPL=0时,使用页指针DP;当CPL=1时,使用堆栈指针SP。第第8 8章章 DSPDSP芯片应用芯片应用 (6) 编译后的C程序“跑飞”一般是对不存在的存储区访问造成的。首先,要查.map文件与memory map图对比,看是否超出范围。如果在有中断的程序中“跑飞”,则应重点检查在中断程序中是否对所用到的寄存器进行了压栈保护;如果在中断程序中调用了C程序,则要查汇编后的C程序中是否用到了没有被保护的寄存器并提供保护(在C程序的编译中是不对A、B等寄存器

25、进行保护的)。第第8 8章章 DSPDSP芯片应用芯片应用 8.3 模模/数接口设计数接口设计 模/数接口设计是DSP系统设计中一个重要的组成部分。A/D或D/A芯片一般均采用并行数字接口。这些芯片与TMS320C5409接口时需要设计相应的译码电路,将A/D或D/A芯片的数据线映射到DSP芯片的I/O地址,可以通过指令IN和OUT(汇编语言)或者在程序中设定unsigned int ioport 变量(C语言)与模/数接口芯片交换数据。第第8 8章章 DSPDSP芯片应用芯片应用 TMS320C5409提供了可与串行通信器件接口的3个多通道缓冲串行口(McBSP,TMS320C542串行口的

26、加强形式),为模数接口的设计提供了极大的便利。本节将介绍TI公司的常用语音编解码器TLC320AD50与TMS320C5409的McBSP的接口方法。第第8 8章章 DSPDSP芯片应用芯片应用 8.3.1 TLC320AD50及其接口 1TLC320AD50控制寄存器功能简介 TLC320AD50具有7个可编程的内部寄存器,通过软件编程能随时控制TLC320AD50的采样频率,模拟输入及输出的增益等。 控制寄存器0(CR0):不执行任何操作,但是CR0能够响应握手通信请求而不改变其他控制寄存器的值。第第8 8章章 DSPDSP芯片应用芯片应用 图8-1 TLC320AD50的引脚图 1REF

27、P2REFM3AUXP4AUXM5INP6INM7AVDD(PLL)8AVSS(PLL)9DVDD10DVSS11DOUT12DIN13FLAG14ALTDATAFILT28MONOUT27AVSS26AVDD25OUTM24OUTP23M/S22FSD21FS20SCLK19MCLK18FC17PWRDWN16RESET15DW Package(Top View)第第8 8章章 DSPDSP芯片应用芯片应用 控制寄存器1(CR1):控制AD50的软件重启,选择数字反馈以及数/模转换器的模式。 控制寄存器2(CR2):选择模拟反馈以及模/数转换器的模式,并且包括TLC320AD50内部FIR滤

28、波器的溢出标志。 控制寄存器3(CR3):包含主设备连接从器件个数的信息。(当某个器件向其他器件发送信息时,称为主器件,而某器件从其他器件接收信息时,称为从器件。) 第第8 8章章 DSPDSP芯片应用芯片应用 控制寄存器4(CR4):选择输入和输出放大器的增益,确定TLC320AD50的采样频率,选择PLL模式。 控制寄存器5(CR5):工业测试使用。 控制寄存器6(CR6):工业测试使用。第第8 8章章 DSPDSP芯片应用芯片应用 2TLC320AD50器件功能简介 1) 采样频率和滤波器控制 TLC320AD50的采样频率由控制寄存器4设定。当选择PLL模式时(D7=0),TLC320

29、AD50的采样率为N128MCLKfs (8-1) 当不选择PLL模式时(D7=1),TLC320AD50的采样率为 N256MCLKfs (8-2) 其中,N为18的整数。 第第8 8章章 DSPDSP芯片应用芯片应用 输出的串口时钟(SCLK)由采样频率决定而不是由主时钟决定,串口时钟与采样频率之间的关系为 SCLK=256fs TLC320AD50内部滤波器的截止频率是不能通过软件编程改变的。第第8 8章章 DSPDSP芯片应用芯片应用 2) 模/数转化模块 输入的模拟信号经过前端的放大器放大后,送入到A/D转换器的输入端。A/D转换器将输入的模拟信号转化为以二进制补码表示的数字信号。

30、第第8 8章章 DSPDSP芯片应用芯片应用 3) 数/模转化模块 DIN管脚从外部设备读入16 bit的二进制数据,以补码形式表示。在串口时钟(SCLK)的下降沿,TLC320AD50读入这些二进制数据,每一个串口时钟周期输入1 bit。这些二进制数据通过由数字插值滤波器和数字调制器组成的- D/A转换器后转换为脉冲串。这些脉冲串再被送入到TLC320AD50内部的低通滤波器恢复出模拟信号。模拟信号通过可编程放大器后在OUTP和OUTM输出。第第8 8章章 DSPDSP芯片应用芯片应用 4) 数字串行接口 数字串行接口由串行时钟(SCLK)、帧同步信号(FS)、A/D转换器输出DOUT和D/

31、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-2 TLC320AD50与TMS320C5409的McBSP之间的接口 XFCLOC

32、KOUTBDXBDRFCMCLKDINDOUTFSSCLKM/SBFSXBFSRBCLKXBCLKRTLS320AD50第第8 8章章 DSPDSP芯片应用芯片应用 图8-3中的两个电容和相应的磁珠用来去耦,滤除电源输出的噪声。此外,TLC320AD50的许多管脚在与相应的电源或地相连时,需要连接相应的去耦电容。这些管脚的详细说明与连线如图8-4所示。其中,REFP和REFM之间的电容是带隙基准电压的去耦电容;连接到FILT的电容是带隙基准的滤波电容。 第第8 8章章 DSPDSP芯片应用芯片应用 图8-3 数字和模拟电源的设计 100 MHz时为90 DVDD0.1 FDVSSAVSS0.1

33、 FAVDD第第8 8章章 DSPDSP芯片应用芯片应用 图8-4 TLC320AD50的去耦电路 REFPFILTREFMAVSS(PLL)INPINMOUTPOUTM0.1 FAVDD(PLL)0.1 F5 VAVDDAVSS0.1 F22 FDVDDDVSS0.1 F22 FDGND5 VAGND3.3V or 5 V第第8 8章章 DSPDSP芯片应用芯片应用 8.3.3 模/数接口的软件设计 1TMS320C5409内部寄存器的初始化 (1) 初始化TMS320C5409的SWWSR、BSCR、ST0、ST1、PMST等寄存器,设置中断屏蔽寄存器IMR,屏蔽所有的中断,并置IFR =

34、 0 xFFFF; (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

35、) 设置McBSP的发送(XCR)和接受(RCR)控制寄存器,使接收到的每一帧包含一个字,每个字为16 bit。 (3) 设置McBSP的引脚控制寄存器(PCR),使串行口的所有引脚工作在串行口方式,而不是通用I/O方式。 (4) 使能全局中断,并使缓冲串行口脱离复位状态, 和 置1。 RRSTXRST第第8 8章章 DSPDSP芯片应用芯片应用 3TLC320AD50的初始化 在对上述TMS320C5409的初始化工作之前,首先置TLC320AD50的 =0,用于复位TLC320AD50,使得TLC320AD50设置为缺省配置状态,并暂停TLC320AD50的工作。在TMS320C5409的

36、内部寄存器和McBSP初始化完成后,将 置高,使TLC320AD50脱离复位状态,并且开始以缺省配置方式工作。 RESETRESET第第8 8章章 DSPDSP芯片应用芯片应用 TLC320AD50的初始化参数可以根据实际需要,利用式(8-1)和式(8-2)计算。 TLC320AD50和McBSP之间同步串行通信的时序如图8-5所示。 第第8 8章章 DSPDSP芯片应用芯片应用 图8-5 TLC320AD50与McBSP的串行通信时序 D15D15SCLKBFSXBDXBDRD14D14D13D13D2D2D1D1D0D0第第8 8章章 DSPDSP芯片应用芯片应用 图8-6 C程序的流程图

37、 TMS320C5409 内部寄存器的初始化 FS低?开始McBSP的初始化否建立握手通信(D01) FS低?否传送CR1是 FS低?否从TLC320AD50传送和接收数据是结束是第第8 8章章 DSPDSP芯片应用芯片应用 【例1】 TLC320AD50应用程序。程序的流程图如图8-6所示。C程序代码如下所示:reg.h#define SPSA1 (volatile unsigned int *)0 x0048 /McBSP1 sub_address register#define SPSD1 (volatile unsigned int *)0 x0049#define SPCR11 0

38、x0000#define SPCR21 0 x0001第第8 8章章 DSPDSP芯片应用芯片应用 #define RCR11 0 x0002#define RCR21 0 x0003#define XCR11 0 x0004#define XCR21 0 x0005#define PCR1 0 x000E main.c/* 本程序是TLC320AD50与TMS320C5409通过缓冲串行口 */第第8 8章章 DSPDSP芯片应用芯片应用 /* 通信的实例 */#include #include reg.h /* 声明所有用到的函数原型*/void inline disable(void);

39、void inline enable(void);void interrupt essp_rx(void);void init_core(void);void init_bsp(void);void init_codec(void);第第8 8章章 DSPDSP芯片应用芯片应用 /* 主程序 */main( ) init_core( );init_codec( ); /* 使能中断屏蔽 */enable( );/* 等待直到下一个中断到来*/while(1);第第8 8章章 DSPDSP芯片应用芯片应用 /* 初始化DSP内部寄存器 */void init_core( ) /* 设置外部存储器

40、的等待周期为0,I/O等待周期为2 */ *SWWSR = 0 x2000; *BSCR = 0 x0000;第第8 8章章 DSPDSP芯片应用芯片应用 *ST0 = 0 x1800; *ST1 = 0 x2900; /* 设置中断向量表的首地址为0 x0080 */ *PMST = 0 x00A0; *IMR = 0 x0000; *IFR = 0 xFFFF; /* 清除所有的中断标志*/ 第第8 8章章 DSPDSP芯片应用芯片应用 void init_bsp( ) /*McBSP0 接收字符为右对齐,接收中断由帧同步信号产生*/ *SPSA1 = SPCR11; *SPSD1 = 0

41、 x0020; 第第8 8章章 DSPDSP芯片应用芯片应用 /*发送中断由帧同步信号产生,McBSP0 Tx = FREE(软件中断后时钟停止运行)*/ *SPSA1 = SPCR21; *SPSD1 = 0 x0201; /*接收帧长1个字,数据长度为16 bit*/ *SPSA1 = RCR11; *SPSD1 = 0 x0040;第第8 8章章 DSPDSP芯片应用芯片应用 /*设置奇数帧和偶数帧相同,数据长度为16 bit*/ *SPSA1 = RCR21; *SPSD1 = 0 x0000; /*与接收寄存器的设置相同*/ *SPSA1 = XCR11; *SPSD1 = 0 x0

42、040; /*与接收寄存器的设置相同*/ *SPSA1 = XCR21; *SPSD1 = 0 x0000;第第8 8章章 DSPDSP芯片应用芯片应用 *SPSA1 = PCR1; *SPSD1 = 0 x000C; asm( NOP ); asm( NOP ); /* 初始化TLC320AD50 */void init_codec( ) 第第8 8章章 DSPDSP芯片应用芯片应用 disable( ); /* 关闭所有中断*/ /* 初始化McBSP0*/ init_bsp( ); /*设置中断为串口发出而不是DMA*/ *DMPREC = *DMPREC & 0 xff3f;

43、*DXR11 = 0 x0; /*使能 McBSP0 接收数据*/ *SPSA1 = SPCR11; *SPSD1 |= 0 x0001;第第8 8章章 DSPDSP芯片应用芯片应用 /*使能 McBSP0 发送数据*/ *SPSA1 = SPCR21; *SPSD1 |= 0 x0001; /* 用软件方式配置AD50寄存器*/*DXR11 = 0 x0003; *SPSA1 = SPCR21; while(!(*SPSD1 & 0 x0002); /* 循环直到字传送完毕*/第第8 8章章 DSPDSP芯片应用芯片应用 *DXR11 = 0 x 0181; /* 向控制寄存器CR1

44、写入0 x 0181(D71),复位TLC320AD50 */ while(!(*SPSD1 & 0 x0002); for(i=0;i4000;i+); /*等待AD50 reset */ *DXR11 = 0 x0003; while(!(*SPSD1 & 0 x0002);第第8 8章章 DSPDSP芯片应用芯片应用 *DXR11 = 0 x0101; /* 向控制寄存器CR1写入0 x 0101(D70),启动TLC320AD50 */ while(!(*SPSD1 & 0 x0002); *DXR11 = 0 x0003; while(!(*SPSD1 &am

45、p; 0 x0002); *DXR11 = 0 x0210; /* 向控制寄存器CR2写入0 x0210,设置为16 bit ADC模式*/ while(!(*SPSD1 & 0 x0002);第第8 8章章 DSPDSP芯片应用芯片应用 *DXR11 = 0 x0003; while(!(*SPSD1 & 0 x0002); *DXR11 = 0 x0300; /* 向控制寄存器CR3写入0 x0300,TLC320AD50没有从属系统*/ while(!(*SPSD1 & 0 x0002); *DXR11 = 0 x0003; while(!(*SPSD1 &

46、; 0 x0002);第第8 8章章 DSPDSP芯片应用芯片应用 *DXR11 = 0 x04D0; /* 向控制寄存器CR4写入0 x04D0,设置增益为0 dB,PLL模式*/ while(!(*SPSD1 & 0 x0002); asm( NOP ); asm( NOP ); *IMR = 0 x0400; /* 使能McBSP1的接收中断*/ *IFR = 0 x0400; /* 清除相应的中断标志位*/第第8 8章章 DSPDSP芯片应用芯片应用 enable( ); /*使能所有中断 */ /* Send a dummy value to start things off

47、 */ *DXR11 = *DRR11; /* 关闭所有中断*/void inline disable( ) asm( ssbx INTM);第第8 8章章 DSPDSP芯片应用芯片应用 /* 使能所有中断*/void inline enable( ) asm( rsbx INTM); /* 接收中断处理函数*/void interrupt essp_rx( ) int sample_in;/* 读入采样数据*/sample_in = *DRR11;/* 传送回TLC320AD50 */*DXR11 = sample_in;第第8 8章章 DSPDSP芯片应用芯片应用 vector.asm.r

48、ef _c_int00.ref _essp_rx.sect vectorsRS: BD _c_int00 NOPNOP第第8 8章章 DSPDSP芯片应用芯片应用 .space 4*16*25; 将接下来的25个中断向量位置0BRINT1: BD _essp_rx; McBSP的接收中断 NOPNOP .end第第8 8章章 DSPDSP芯片应用芯片应用 8.4 存储器接口设计存储器接口设计 8.4.1 TMS320C5409的存储器接口 1TMS320C5409与外部SRAM的接口 除了内部32K字RAM和16K字ROM之外,TMS320C5409还可以扩展外部存储器。其中,数据空间总共为6

49、4K字(0000HFFFFH),I/O空间为64K字(0000HFFFFH),程序空间为8M。8 M程序空间的寻址是通过额外的7根地址线(A16A22)实现的,由XPC寄存器控制。下面介绍几种扩展外部RAM的方法。 第第8 8章章 DSPDSP芯片应用芯片应用 (1) 外接一个128K16位的RAM,将程序区和数据区分开。图8-7为采用128K字RAM分开程序区和数据区的接口方法,图中采用程序选通线( )接外部RAM的A16地址线实现。因此,程序区为RAM的前64K字(0000HFFFFH),数据区为RAM的后64K字(10000H1FFFFH)。对DSP而言,程序区和数据区的地址范围均为00

50、00HFFFFH。RS第第8 8章章 DSPDSP芯片应用芯片应用 采用这种外部存储器配置,需要注意以下几点: 如果内部RAM设置为有效,则相同地址的外部RAM自动无效。 当外部RAM不能全速运行时,需要根据速度设置插入等待状态(设置SWWSR寄存器)。第第8 8章章 DSPDSP芯片应用芯片应用 图8-7 分开的数据和程序空间配置 A22A19A18A17A15A16A14A0A15A16A14A0PSDSIS15MSTRBCSR/WWEOE第第8 8章章 DSPDSP芯片应用芯片应用 (2) 混合程序区和数据区。当OVLY=1时,内部RAM既是数据区又是程序区。这样设置的优点是程序可以在内

51、部全速运行,缺点是由于程序和数据是共用的,因此存储区就变小了。此外,在链接时必须将程序和数据分开,以避免重叠。第第8 8章章 DSPDSP芯片应用芯片应用 图8-8 混合的程序和数据空间配置 A22A19A18A17A15A16A14A0A15A16A14A0PSDSIS15STRBCSR/WWEOE第第8 8章章 DSPDSP芯片应用芯片应用 (3) 一种优化的混合程序和数据区外接RAM方法。图8-9所示为一种优化的混合程序和数据区外接RAM方法。这种配置方法省去了DSP的A15地址线,将RAM分为32K字长的块。采用这种方法后,可充分利用外接的RAM,不会因内部RAM和外部RAM的地址重叠

52、而造成外部RAM的浪费。下面分析外部RAM的地址安排。第第8 8章章 DSPDSP芯片应用芯片应用 图8-9 优化的混合程序和数据空间配置 A22A19A18A17A15A16A14A0A15A16A14A0PSDSIS15MSTRBCSR/WWEOE第第8 8章章 DSPDSP芯片应用芯片应用 外部RAM的0000H7FFFH对应于DSP数据区的8000HFFFFH和程序区的08000H0FFFFH及18000H1FFFFH。 外部RAM的8000HFFFFH对应于DSP程序区的28000H2FFFFH和38000H3FFFFH。 外部RAM的10000H1FFFFH对应于DSP程序区的48

53、000H4FFFFH和58000H5FFFFH。 外部RAM的18000H1FFFFH对应于DSP程序区的68000H6FFFFH和78000H7FFFFH。第第8 8章章 DSPDSP芯片应用芯片应用 2TMS320C5409与Flash的接口 1) 器件简介 SST39VF400A是Silicon Storage公司的新一代256K16位CMOS Flash Memory产品。它的特点是擦除和编程都采用SuperFlash技术来实现,使得它编程所需的电流比较低,并且擦除时间短,进而保证了SST39VF400A编程和擦写所需消耗的能量比较低。同时,SuperFlash技术能够保证编程和擦写时

54、间不受已编程数据块的影响。这种特性使得在系统设计时不用考虑软件或者硬件上调整系统的读/写速率。第第8 8章章 DSPDSP芯片应用芯片应用 SST39VF400A的引脚图及引脚说明(以DIP32封装为例)见图8-10。 SST39VF400A还有另外两种封装模式:TFBGA和TSOP32。由于Flash Memory结构与EPROM和E2PROM都有明显的区别,因此这里仅对它的基本工作原理做一简介。图8-11给出它的结构框图。第第8 8章章 DSPDSP芯片应用芯片应用 图8-10 SST39VF400A的引脚图及其说明 SST39VF400A1A152A143A134A125A116A107

55、A98A89NC10NC11WE12NC13NC14NC15NC16NC17A1718A719A620A521A422A323A224A1A1648NC47VSS46DQ1545DQ744DQ1443DQ642DQ1341DQ540DQ1239DQ438VDD37DQ1136DQ335DQ1034DQ233DQ932DQ131DQ830DQ029OE28VSS27CE26A025A0A16:地址线DQ0DQ15:数据线CE:片选OE:输出允许WE:写允许NC:空引脚VDD:电源VSS:地第第8 8章章 DSPDSP芯片应用芯片应用 图8-11 SST39VF400A的结构框图 主存储器Y译码器

56、输入/输出缓存DQ 15 DQ 0X译码器地址缓存控制逻辑CEOEWE存储地址第第8 8章章 DSPDSP芯片应用芯片应用 输入的存储地址通过地址缓存后,分别送入到X地址译码器和Y地址译码器中,得到相应的主存储器阵列的X地址和Y地址。主存储器通过X和Y地址找出相应的主存储器单元,将存储单元中的值发送到输入/输出缓存中,通过控制逻辑来确定芯片的输入/输出。 表8-2给出了SST39VF400A的工作方式选择真值表。第第8 8章章 DSPDSP芯片应用芯片应用 表8-2 SST39VF400A工作方式选择真值表 第第8 8章章 DSPDSP芯片应用芯片应用 2) SST39VF400A与TMS32

57、0C5409的接口 图8-12为TMS320C5409与Flash的一种接口方法。图中,Flash采用SST39VF400A(256K16位)作为DSP的外部数据存储器,地址总线和数据总线接至DSP的外部总线, 接至DSP的。DSP上的XF引脚用于启动编程,当XF为低时,Flash处于读状态;当XF为高时,Flash可擦或编程。为了满足SST39VF400A的时序要求,XF与 相“或”后接至 ,R/ 引脚与 相或后接至 。DSMSTRBOEWMSTRBWE第第8 8章章 DSPDSP芯片应用芯片应用 图8-12 DSP与Flash的接口 SST39VF400AD15D0A15A0D15D0A1

58、5A0DSMSTRBCEOER/WWE1616第第8 8章章 DSPDSP芯片应用芯片应用 8.4.2 Flash擦写 在实际应用中,选择的片外存储器通常是片外的RAM或Flash Memory。但由于RAM中数据掉电即丢失,不适合长期保存数据,因此当需要保存到片外存储器的是一些无需频繁读/写但需要长期保存的数据时,如字模数据、端口地址等,通常选择使用片外的Flash扩展DSP芯片的存储器空间。使用片外Flash必须要解决对其擦写的问题。第第8 8章章 DSPDSP芯片应用芯片应用 在实际的应用中,对片外Flash的擦写有两种方式,一是使用通用编程器对Flash芯片进行擦写;二是直接由DSP对

59、Flash进行擦写。对于需要反复修改或已安装在电路板上的Flash芯片,无法使用第一种方式,只能采用第二种方式,这样易于调试。这里介绍一种利用存储器映射技术,通过对DSP芯片编程实现片外Flash擦写的方法。第第8 8章章 DSPDSP芯片应用芯片应用 假设要将一组二维数组形式的数据(character18032)存入片外数据Flash的0 x80000 xA000地址段中,先做以下准备工作: (1) 利用一个GPIO端口,扩展系统的可寻址数据存储器空间。 (2) 编写Flash擦写程序,程序流程如图8-13所示。第第8 8章章 DSPDSP芯片应用芯片应用 #define N 100 /*由

60、于Flash与RAM的读写速度不同,因此需要在每项操作后加入若干个延时以保证正确性,延时的长短可以根据具体情况做调整 */void main( ) unsigned int i,code; unsigned int *code_addr; unsigned int *flash_addr;第第8 8章章 DSPDSP芯片应用芯片应用 *GPIO_ DR=0 x0002; /*映射方式设置为映射到片外数据Flash*/ delay(N); GPIOD_setup( ); /*GPIOD设置*/ delay(N);erase_flash( ); /*如果Flash上原有数据无需保留,则全部擦除;如果部分数据需保留,也可部分擦除*/ delay(N);第第8 8章章 DSPDSP芯片应用芯片

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论