第讲-c语言介绍-DSP芯片应用课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第讲-c语言介绍-DSP芯片应用课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 介绍 DSP 芯片 应用 课件
- 资源描述:
-
1、第讲第讲 c语言介绍语言介绍 DSP芯片应用芯片应用第第8 8章章 DSPDSP芯片应用芯片应用 DSP芯片芯片C语言开发简介语言开发简介 TMS320C54x C/C+编译器支持的数据类型 表1列出了TMS320C54x C/C+编译器支持的数据类型的大小、表示形式和表示范围,这些数据类型在float.h和limits.h中定义。在C语言开发的过程中,采用合适的数据类型对于系统的正确运行有着极为重要的意义。第第8 8章章 DSPDSP芯片应用芯片应用 表1 TMS320C54x C/C+编译器支持的数据类型 类 型bit表示形式最小值最大值signed char16ASCII32 76832
2、 767charu n s i g n e d char16ASCII065 535short,signed short162s Complement32 76832 767u n s i g n e d short16Binary065 535int,signed int162s Complement32 76832 767第第8 8章章 DSPDSP芯片应用芯片应用 类 型大小/bit表示形式最小值最大值unsigned int16Binary065 535long,signed long322s Complement 2 1 4 7 4 8 3 6482147483 647unsigne
3、d long32Binary04 2 9 4 967 295enum162s Complement32 76832 767float32IEEE 32-bit1.175 494e383.402 823 46e+38double32IEEE 32-bit1.1 7 5 494e383.402 823 46e+38l o n g double32IEEE 32-bit1.175 494e383.402 823 46e+38pointers16Binary00 xFFFF第第8 8章章 DSPDSP芯片应用芯片应用 C语言的数据访问方法 1.DSP片内寄存器的访问 DSP片内寄存器在C语言中一般采用
4、指针方式来访问,常常采用的方法是将DSP寄存器地址的列表定义在头文件中(如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 x000
5、8第第8 8章章 DSPDSP芯片应用芯片应用#define AH (volatile 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#def
6、ine TRN (volatile unsigned int*)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 unsi
7、gned int*)0 x001A#define 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 uns
8、igned int*)0 x0028#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
9、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芯片应用芯片应用 ioport uns
10、igned port10;/*定义地址为10H的I/O端口变量*/int func().port10=20;/*write 20 to port 10H*/.b=port10;/*read port 10H into b*/.第第8 8章章 DSPDSP芯片应用芯片应用 C语言和汇编语言的混合编程方法 用C语言和汇编语言混合编程的方法主要有以下三种:(1)独立编写C程序和汇编程序,分开编译或汇编以形成各自的目标代码模块,然后用链接器将C模块和汇编模块链接起来。例如,主程序用C语言编写,中断向量文件(vector.asm)用汇编语言编写。若要从C程序中访问汇编程序的变量,将汇编语言程序在.bss
11、块中定义的变量或函数名前面加一下划线_,将变量说明为外部变量,同时在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 x;/*定义x为全局变量*/main()第第8 8章章 DSPDSP芯片应用芯片应
12、用 汇编程序:.ref _i;说明_i为外部变量.ref _x;说明_x为外部变量LD _i,DP STL _x,A第第8 8章章 DSPDSP芯片应用芯片应用 (2)在C语言程序的相应位置直接嵌入汇编语句,这是一种C和汇编之间比较直接的接口方法。嵌入汇编语句的方法比较简单,只需在汇编语句的左、右加上一个双引号,用小括弧将汇编语句括住,在括弧前加上asm标识符即可,如下所示:asm(汇编语句 );如上所述,在C程序中直接嵌入汇编语句的一个典型应用是控制DSP芯片的一些硬件资源。第第8 8章章 DSPDSP芯片应用芯片应用 对于TMS320C5409,在C程序中一般采用下列汇编语句实现一些硬件控
13、制:asm(NOP);/*插入等待周期*/asm(ssbx INTM);/*关中断*/asm(rsbx INTM);/*开中断*/(3)对C程序进行编译生成相应的汇编程序,然后对汇编程序进行手工优化和修改。第第8 8章章 DSPDSP芯片应用芯片应用 中断函数 TMS320C54x C/C+中可以通过两种方式定义中断函数。(1)通过给每个中断函数前面加关键字interrupt来声明一个函数为中断处理函数。中断函数的返回值是void的,函数没有任何的形参。中断函数可以任意使用局部变量和堆栈。例如:第第8 8章章 DSPDSP芯片应用芯片应用 interrupt void int_handler(
14、)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:B _ int_handler;McBSP1接收中断 .ref _ int_handler NOP NOP .end第第8 8章章 DSPDSP芯片应用芯片应用 (2)C中断程序采用特殊的函数名,其
15、格式为c_intnn。其中,nn代表0099之间的两位数,如c_int01就是一个有效的中断函数名。下面是一个中断函数的例子:int datain,dateout;void c_int05()datain=sample(dataout);第第8 8章章 DSPDSP芯片应用芯片应用 存储器模式 TMS320C54x将存储器分为程序空间和数据空间。程序空间存放的是可执行的代码,数据空间存放的是外部变量、静态变量和系统的堆栈。由C程序产生的代码和数据就被放置在存储空间的各个段中。第第8 8章章 DSPDSP芯片应用芯片应用 1C编译器生成的段 C编译器对C语言程序编译后生成6个可以进行重定位的代码
16、和数据段,这些段可以用不同的方式分配至存储器以符合不同系统配置的需要。这6个段可以分为两种类型,一是已初始化段,二是未初始化段。第第8 8章章 DSPDSP芯片应用芯片应用 已初始化段主要包括数据表和可执行代码。C编译器共创建3个已初始化段:.text、.cinit、.const。.text段:包含可执行代码和字符串。.cinit段:包含初始化变量和常数表。.const段:字符串和switch表。.bss段:保留全局和静态变量空间。.stack段:为系统堆栈分配存储器。.sysmem段:为动态存储器函数malloc、calloc和realloc分配存储器空间。第第8 8章章 DSPDSP芯片应
17、用芯片应用 一般地,.text、.cinit和.const连同汇编语言中的.data段可链入到系统的ROM或RAM中,而.bss、.stack和.sysmem段则应链入到RAM中。第第8 8章章 DSPDSP芯片应用芯片应用 2C系统的堆栈 C编译器利用TMS320C54x内置的堆栈机制来实现如下功能:(1)保护函数的返回地址;(2)分配局部变量;(3)传递函数变量;(4)保护临时结果。第第8 8章章 DSPDSP芯片应用芯片应用 3动态存储器分配 编译器提供的运行支持函数中包含几个允许在运行时为变量动态分配存储器的函数,如malloc、calloc和recalloc。动态分配并不是C语言本身
18、的标准,而是由标准运行支持函数所提供的。第第8 8章章 DSPDSP芯片应用芯片应用 4存储器大小模式 编译器支持两种存储器模式:小存储器模式和大存储器模式。(l)小存储器模式。小存储器模式是编译器的缺省存储器模式。(2)大存储器模式。大存储器模式与小存储器模式的区别在于它不限制.bss段的大小,因此对全局变量和静态变量来说,具有无限的空间。第第8 8章章 DSPDSP芯片应用芯片应用 其他注意事项 下面介绍C语言编程的一些其他注意事项。(1)c_int00函数包含在运行支持库中,必须与其他的C目标模块相链接。(2)采用C优化编译时,为了保证程序的正确性,要特别注意,如果使用asm行汇编语句,
19、则必须对编译后得到的汇编语言进行仔细的检查,以确保asm语句在程序中的正确性。第第8 8章章 DSPDSP芯片应用芯片应用 (3)可以使用volatile关键字避免优化。对于下例这样的语句:unsigned int*data;while(*data!=4);由于*data是一个循环不变的表达式,因此这个循环将被优化为一个存储器读指令。为了避免这样的优化,需要将data定义为volatile,例如:volatile unsigned int*data;第第8 8章章 DSPDSP芯片应用芯片应用 做了这样的定义后,优化器就不再对上述语句进行优化了。一般在reg.h中定义的寄存器地址都定义为vol
20、atile,例如:#define IMR (volatile unsigned int*)0 x0000#define IFR (volatile unsigned int*)0 x0001 第第8 8章章 DSPDSP芯片应用芯片应用 (4)C54x C/C+编译器支持标准C的关键字const,这个关键字用来定义那些值不变的变量,但是,在定义时const的位置是十分重要的。例如,下面这个例子中,第一句定义了一个常量指针p,指向一个int变量,第二句定义了一个指针q,指向一个常量int变量,所以要注意const的位置。int*const p=&x;const int*q=&x;第第8 8章章
21、DSPDSP芯片应用芯片应用 (5)由于在C语言的环境下,局部变量的寻址必须通过SP寄存器实现,在混合编程的时候,为了使汇编语言不影响堆栈寄存器SP,常用的方式是在汇编环境中使用DP方式寻址,这样可以使二者互不干扰,编程时只要注意对CPL位正确设置即可。CPL位是编译模式控制位,它表示在相对直接寻址时采用哪种指针。当CPL=0时,使用页指针DP;当CPL=1时,使用堆栈指针SP。第第8 8章章 DSPDSP芯片应用芯片应用 (6)编译后的C程序“跑飞”一般是对不存在的存储区访问造成的。首先,要查.map文件与memory map图对比,看是否超出范围。如果在有中断的程序中“跑飞”,则应重点检查
22、在中断程序中是否对所用到的寄存器进行了压栈保护;如果在中断程序中调用了C程序,则要查汇编后的C程序中是否用到了没有被保护的寄存器并提供保护(在C程序的编译中是不对A、B等寄存器进行保护的)。第第8 8章章 DSPDSP芯片应用芯片应用 存储器接口设计(不讲)存储器接口设计(不讲)TMS320C5409的存储器接口 1TMS320C5409与外部SRAM的接口 除了内部32K字RAM和16K字ROM之外,TMS320C5409还可以扩展外部存储器。其中,数据空间总共为64K字(0000HFFFFH),I/O空间为64K字(0000HFFFFH),程序空间为8M。8 M程序空间的寻址是通过额外的7
23、根地址线(A16A22)实现的,由XPC寄存器控制。下面介绍几种扩展外部RAM的方法。第第8 8章章 DSPDSP芯片应用芯片应用 (1)外接一个128K16位的RAM,将程序区和数据区分开。图8-7为采用128K字RAM分开程序区和数据区的接口方法,图中采用程序选通线()接外部RAM的A16地址线实现。因此,程序区为RAM的前64K字(0000HFFFFH),数据区为RAM的后64K字(10000H1FFFFH)。对DSP而言,程序区和数据区的地址范围均为0000HFFFFH。RS第第8 8章章 DSPDSP芯片应用芯片应用 采用这种外部存储器配置,需要注意以下几点:如果内部RAM设置为有效
24、,则相同地址的外部RAM自动无效。当外部RAM不能全速运行时,需要根据速度设置插入等待状态(设置SWWSR寄存器)。第第8 8章章 DSPDSP芯片应用芯片应用 图8-7 分开的数据和程序空间配置 A22A19A18A17A15A16A14A0A15A16A14A0PSDSIS15MSTRBCSR/WWEOE第第8 8章章 DSPDSP芯片应用芯片应用 (2)混合程序区和数据区。当OVLY=1时,内部RAM既是数据区又是程序区。这样设置的优点是程序可以在内部全速运行,缺点是由于程序和数据是共用的,因此存储区就变小了。此外,在链接时必须将程序和数据分开,以避免重叠。第第8 8章章 DSPDSP芯
展开阅读全文