…脅爲
…脅爲
…脅爲
…脅爲
胃爲讷叶右*
DSP的C语言程序设计
为什么要使用C语言对DSP编程?
C语言是咼级语言,易学易用。
C语言的编程效率极高,易于调试。
C语言的可移植性好。
C程序的结构及组成
完整的C程序是由一个主函数main()和其它的子函数组成的,每一个子函数完成特定的功能。DSP的C
语言的入口地址固定为c_intOO,在rts.lib中定义。C语言支持丰富的数据类型和数据结构,在ccs集成开发
环境中,为C语言提供了完整的支持硬件的底层函数库和支持算法的DSP函数库。在使用 C语言的库函数
时,在工程中必须包括相应的函数库和rts.lib运行时支持库。下面是一般C语言程序的结构和组成框架。
般C程序的结构如下:
II #inelude包含语句定义程序中使用的函数库对应的.h头文件
#i nclude函数库 1”
#include< 函数库 2>
#include函数库 3”
// #define定义程序中所有的宏替换
#define宏替换名 替换内容
main()函数的后面//本程序的内部函数声明,这些函数一般放在 函数类型函数名(函数参数列表)
main()函数的后面
〃中断服务程序(函数)的声明
in terrupt void fun ctio n_n ame (void);
//全局变量声明
变量类型全局变量名;
//主函数main()
void mai n(void)
〃局部变量定义
for(;;)
{
〃调用子函数来处理数据
//完成数据的输入和输出功能
}
}
//本程序的内部函数
函数类型函数名(函数参数列表)
{
//本函数的局部变量定义
//本函数中的算法
}
//程序结束
数据类型
C语言支持的数据类型很丰富,包括字符型、短整型、整型、长整型、枚举型、浮点型、双精度浮点型、
长双精度浮点型、数据指针及程序指针,要注意的是由于54x DSP是16位的处理器,它的字符型数据的长
度是16位的,另外注意比较各种数据类型的长度、内容以及所表示的值的范围大小,可以发现短整型和整 型数据类型是一致的,浮点型、双精度浮点型和长双精度浮点型是一致的,这是因为54x DSP的C语言编
译器为了适应不同的编程习惯而这样定义的,所以实际使用中可以将常用的数据类型进行适当简化,即将短
type.h中的定义:整型、整型统一为整型(int),将各种浮点类型统一为浮点型(float
type.h中的定义:
另外,为了简化书写,用户可以自定义数据类型,例如在
typedef float f32;typedef long s32;typedef int s16;
typedef float f32;
typedef long s32;
typedef int s16;
typedef un sig ned char u8; typedef un sig ned int u16;
typedef un sig ned long u32;
〃浮点型
//有符号的长整型
//有符号的整型
//无符号的字符型
//无符号的整型
//无符号的长整型
详细内容请参考头文件type.h。
四、头文件中存储器映射寄存器(MMR )的定义和访问
对于DSP的软件设计,首先必须明了 DSP的可用片内资源及其访问方法,包括DSP的片上存储器映射
寄存器、程序存储器、数据存储器、I/O空间的寻址范围、寻址方式,片上外设的寄存器定义、工作流程以
轉爲
及编程控制方法。
54X DSP的片内寄存器资源是通过两个头文件Regs.h和Regs54x.h进行定义的,这些头文件位于
c:\ti\c5400\dsk5402\include目录下,在这两个文件中定义了C54x DSP中涉及到的所有寄存器及其所包含的
控制和状态比特,这些定义是使用宏替换定义#define进行的,例如:串口控制寄存器中接收移位寄存器满
标志位的比特域定义:
# define RSRFULL 13//RSRFULL标志比特位于寄存器的 bit13位置
#define RSRFULL_SZ 1//此标志的长度为 1个比特
我们只需要了解这些寄存器定义,在编程过程中直接使用而不需要自己来重新定义。
Reg54xx.h是对Regs.h的扩展和补充,并且Reg54xx.h头文件包含 Regs.h。注意#define的语句中"”
REG_READ(addr);
REG_WRITE(addr,val); RESET_BIT(addr,bit); GET_BIT(addr,bit);
SET-BIT(addr,bit);
〃寄存器读
//寄存器写
//bit位清零
〃取得bit位的值
//bit位置1
是