
2.1.2 头文件
头文件(扩展名为.h)是C语言不可缺少的组成部分,是用户程序和函数库之间的纽带,它本身不含程序代码,只是起描述性作用,是一种包含功能函数、数据接口声明的载体文件,用户程序只要按照头文件中的接口声明来调用库功能,编译器就会从库中提取相应的代码。TI公司提供头文件供用户使用,其中定义了DSP系统用到的寄存器映射地址,寄存器位定义和寄存器结构等内容。DSP2833x头文件主要包含DSP2833x.h和各个外设头文件。
1.DSP2833x_Device.h
在每个主程序中一般都会出现头文件DSP2833x_Device.h,这个头文件中包括了所有其他外设头文件以及对一些常量的定义等内容。例如,外设头文件有:

对常量的定义有


为了增加可移植性,头文件还重新定义了16位和32位有符号或者无符号整数的基本类型,例如

除此之外,还定义了中断标志寄存器和中断使能寄存器,以及一些汇编指令在C语言中的重新定义,例如

2.外部设备头文件
由于在DSP283x_Device.h头文件中已经包括了所有外设头文件,所以在主程序中不需要预定义外设头文件,但是在程序运行时,外设头文件也必须加载。在外设头文件中对外设寄存器进行了定义,使得程序既可以对整个寄存器进行读写操作,也可以对其中的每一位进行操作。以下是CPU定时器控制寄存器TCR的位域定义。


结构定义中对每个成员进行类型说明,例如“Uint16 TIE:1;”表示TIE是一个无符号整型变量,冒号表示成员是不满16位的整型数据,这样的成员称作字段,冒号后面的数字1表示该字段占用的二进制长度为1。编译器可将各个字段按顺序合并成一个字,当一个结构中的有效字段长度不足16位时,可以加入一些保留字段,以保证数据的完整性,如结构成员rsvd1~rsvd3为保留位。
位域定义方法允许用户直接对寄存器的某些位进行操作,通过联合声明允许对各个位域或整个寄存器进行访问,例如:

头文件根据定义的联合重新定义了CPU定时器中所有的寄存器结构,例如:

外设寄存器按照其占用的存储器地址依次排列;保留的结构成员(如rsvd1)仅用于占用存储器中的相应空间;Uint16和Uint32是指无符号16位和32位数的类型定义。对于C2000芯片,Uint16和Uint32分别等效于unsigned int和unsigned long。
在外设头文件中还包含对支持的变量、函数原型、外部定义和常用操作的定义。例如:
