DSP第6章 DSP系统的软件设计1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2012年5月26日
DSP原理及应用
14
使用const关键字来定义整型常量、字符常量和字 符串常量。例如: const int Port1=0x0; //定义整型常量port1,并将其
初始化为0x0
const unsigned char s1='a'; //定义字符常量s1,并将
其初始化为字母a字符必须使用单引号括起来,并且单引号中 只能有一个字符。 const unsigned char s2[]="abcd"; //定义字符串 常量s2,并将其初始化为字符串"abcd"
第6章 DSP系统的软件设计
6.1 DSP系统软件设计的一般过程 6.2 使用C语言设计DSP程序的特点 6.3 CCS中与C54xx相关的库函数和头 文件 6.4 cmd链接命令文件 6.5 C程序的结构及组成 6.6 C语言的中断编程 6.7 C54xx的混合编程
2012年5月26日 DSP原理及应用 1
2012年5月26日
DSP原理及应用
9
另外,为了简化书写,用户可以自定义 数据类型,自定义数据类型使用typedef 类型说明符。例如在CCS中的
C:\ti\c5400\dsk5402\include\type.h头文件
中定义了如下的用户自定义数据类型。
2012年5月26日
DSP原理及应用
10
typedef typedef typedef typedef typedef typedef
2012年5月26日
DSP原理及应用
12
一般格式为:
#define 符号常量名 字符串
其中符号常量名一般使用大写字母表示,符号常 量名与所对应的字符串之间用空格隔开,它把符号常 量名定义为指定的字符串。以后在程序中凡出现符号 常量名的地方,在进行预编译处理时,都会被替换为 所对应的字符串。
2012年5月26日
1.明确任务,确定功能。 2.硬件设计(电路图(原理图)设计, PCB(电路板图)设计,PCB加工)。 3.软件设计(编程,调试(软仿真运行程 序))。 4.焊板,调试(打通电路)。 5.联调。 6.现场安装调试。
2012年5月26日 DSP原理及应用 2
DSP系统设计过程:
6.1 DSP系统软件设计的一般过程
2012年5月26日
DSP原理及应用
18
2)C语言中变量的定义
变量定义的一般格式同ANSI C一致:
数据类型 说明符 变量名;
变量名必须以字母或下划线开头,最多有100个 字符。数据类型说明符必须使用TMS320C54x支持 的数据类型,并且应该注意到char同unsigned char,short同signed short,int同signed int,long同signed long分别是等效的。
RED_READ(addr); //寄存器读 RED_WRITE(addr,val); //寄存器写 RESET_BIT(addr,bit); //bit位清零 DET_BIT(addr,bit); //取得bit位的值 SET_BIT(addr,bit); //bit位置1 ... ...
2012年5月26日 DSP原理及应用 30
28
54x DSP的片内寄存器资源是通过两个头文件 Regs.h和Regs54x.h进行定义的,这些头文件位于 c:\ti\c5400\dsk5402\include目录下。在这两个 文件中定义了C54x DSP中涉及的所有寄存器的定义 过程后,在编程中可以直接使用这些定义。 例如:串口控制寄存器中接收移位寄存器满标志的比 特域定义为:
为date,包括三个成员year、month和day
2012年5月26日
DSP原理及应用
23
union fic { float f; int i; char c; }u;
//定义联合变量u,并按照其成员中 占内存最多的float型变量来分配存储单元
2012年5月26日
DSP原理及应用
24
enum color { red; green; blue; }c; //定义枚举型变量c,取值为red、green和
量x并定位到const段
2012年5月26日
DSP关键字定义 一个大的常量表,并且将其定位在 系统ROM中。 例如:
const int digits[]={0,1,2,3,4,5,6,7,8,9};
2012年5月26日
DSP原理及应用
17
const关键字在常量定义中的位置很 重要。例如: int *const p=&x; const int *q=&x; 第一条语句定义了一个常量指针p, 指向一个int型变量。第二条语句定义了 一个变量指针q,指向一个整型常量。
用户在以后编写C语言的程序时,可以 使用自定义的数据类型f32、s32、s16、 u8、u16和u32来定义变量,这样书写程序 很方便,又增加了可读性。
2012年5月26日 DSP原理及应用 11
2. C语言中常量和变量的定义
在C语言中参与数据运算的数据只有常量 和变量两种类型。 1)C语言中常量的定义 为了提高程序的可读性,可以使用 #define宏定义来定义符号常量。
字符串使用双引号扩起,并且使用数组定义字符 串常量,数组的下标可以为空,由编译器根据初始化 字符串自动确定它的大小。
2012年5月26日 DSP原理及应用 15
const关键字可用来控制常量 的存储位置。你可以同时使用 volatile关键字将常量定位到RAM。 例如: volatile const int x, //定义整型常
2012年5月26日 DSP原理及应用 5
软件开发流程图:见p172图6-1
2012年5月26日
DSP原理及应用
6
6.2 使用C语言设计DSP程序的特点
6.2.1 DSP的C语言编程与通用C语言编程的区别
CCS开发平台中包括了优化的C语言编译器,全面 支持C源程序级代码的开发与调试。使用C语言编程能 够极大地提高软件开发的速度,增加程序代码的可续性 ,方便程序的维护和移植。但C语言代码的效率还无法 与汇编语言代码的效率相比,5000系列DSP C语言代 码的效率大概只有汇编语言程序的60%,这些缺点可 以通过内嵌汇编语句,及使用汇编语言编写对时间要求 苛刻的程序等方法加以弥补,从而圆满地解决使用C语 言编程导致代码效率低问题。
2012年5月26日
DSP原理及应用
26
另外,C54x的C/C++支持全局的寄存器变量 ,使用register作为关键字,变量名只能为 AR1或AR6。使用寄存器变量能够减小代码的 大小,加快程序的执行速度,一般用在中断服 务子程序中。但是使用规则较复杂,一般情况 下慎用。
2012年5月26日
DSP原理及应用
#define RSRFULL 13
寄存器的第13位位置 特
//RSRFULL标志比特位于
#define RSRFULL_SZ 1 //此标志的长度为1个比
2012年5月26日
DSP原理及应用
29
Reg54xx.h是对Regs.h的扩展和补充,并且 Reg54xx.h头文件包括Regs.h。注意#define语句 中的最后字符“/”是续行符。 在Regs.h和Reg54xx.h中还定义了寄存器的访问方 式宏定义,例如:
DSP原理及应用
13
例如:
#define OK 0
均会以0代替
//定义符号常量OK,在程序中出现OK时 //定义符号常量ERROR,在出
#define ERROR -1
现ERROR时均会以-1代替
宏定义命令#define不是C语言的语句,因此不能 以分号结束。另外,预处理程序对符号常量的处理只是 简单的替换,不做语法检查。所以符号常量不占用存储 器的位置。
blue三者之一,red、green和blue的值按顺序依次为 0、1和2
2012年5月26日
DSP原理及应用
25
typedef enum { BRD_LED0, BRD_LED1, BRD_LED2 }BrdLed; //自定义枚举型数据类型BrdLed。BRD_LED0、
BRD_LED1和BRD_LED2的值按顺序依次为0、1和2 s16 brd_led_toggle(BrdLed led); //在函数定义的 形象中定义枚举型变量led它的取值只能为枚举型数据类型。 Brdled的取值BRD_LED0、BRD_LED1和BRD_LED2
2012年5月26日
DSP原理及应用
19
例如: char m; char m; short n; int p; long q;
等效于unsigned 等效于signed short n; 等效于signed int p; 等效于signed long q;
2012年5月26日
DSP原理及应用
20
为了便于记忆,一种方法是在变量定 义时使用数据类型名的全称,另一种方法 是 在 程 序 中 先 使 用 #include<type.h> 语句包含type.h头文件,然后使用其中
2012年5月26日 DSP原理及应用 4
3.源代码文件包括C语言源程序、汇编语言源程 序、头文件、CMD链接文件等。 4.在CCS集成开发环境中通过仿真器将可执行目 标代码下载到DSP目标系统中,再利用仿真器 等调试工具对生成的可执行代码进行在线调试 ,或使用Simulator软件仿真器对程序进行软件 仿真。待程序调试通过后,就可以将调试通过 的程序代码利用Hex转换工具转换为二进制文 件,再将二进制程序写入到外部的程序存储器 中,形成独立运行的DSP系统。
2012年5月26日
DSP原理及应用
7
很多情况下要常用混合编程的方法进行
DSP的程序设计。一方面能够充分发挥C语言
和汇编语言各自的优点;另一方面能够很好地
完成DSP系统的软件设计,充分发挥DSP芯片
的性能。
2012年5月26日
DSP原理及应用
8
6.2.2 C语言的数据结构 1. C54x DSP C语言的数据类型 参见p173表6-1
float f32; long s32; int s16; unsigned char unsigned int unsigned long
//将浮点型数据定义为f32 //将有符号的长整型数据定义为s32 //将有符号的整型数据定义为s16 u8; //将无符号的字符型数据定义为u8 u16; //将无符号的整型数据定义为u16 u32; //将无符号的长整型数据定义为u32
DSP软件设计包括以下工作: 1.选择开发语言的种类 开发语言分为两种:汇编语言和高级语言 (即C语言)。还有嵌入式系统。
2012年5月26日
DSP原理及应用
3
2.选择硬件开发工具和开发环境
常用的DSP硬件开发平台有DSK(DSP Starter Kit)板、EVM评估板、DSP硬件仿真器。 其中DSK板上一般都内置了一个DSP仿真器, 将其直接与PC机相连接即可进行开发调试。 当前流行的软件开发工具是CCS(Code Composer Studio)集成开发环境。它可以在 Windows操作系统下运行,并包含了DSP软件 开发所需要的所有功能,还可以进行其他功能的 扩展。
的用户自定义数据类型f32、s32、s16、
u8、u16和u32来定义变量。
2012年5月26日 DSP原理及应用 21
另外,TMS320C54x的C语言编译器还支 持复合型数据类型的定义,包括数组、指针、 结构、联合、枚举,所有的定义均用“;”结束。 例如: u8 a[100]; //定义无符号字符型的一维数组a,
包括100个元素
u16 b[50][50]; //定义无符号整型的二维数组b,
包括2500个元素 u32 *pl; //定义指针变量pl,指向无符号32位的长 整型数据
2012年5月26日 DSP原理及应用 22
struct date { int year; int month; int day; }birthday; //定义结构变量birthday,结构名
27
6.2.3 存储器映像寄存器(MMR)的定义 和访问
对于DSP的软件设计,首先必须明了DSP 的可用资源及其访问方法,包括DSP的片上存 储器映像寄存器、程序存储器、数据存储器和 I/O空间的寻址范围、寻址方式,片上外设的 寄存器定义、工作流程及编程控制方法。
2012年5月26日
DSP原理及应用
相关文档
最新文档