文章来自http://book.51cto.com/art/201012/237939.htm,个人意见:C语言结构体位域操作寄存器仅供参考,能不用则不用~
1.2.3 添加位域结构体
1)增加位域定义
我们经常需要直接访问寄存器中的某个位域。C281x C/C++头文件及外设示例所涉及的位域结构体方法,为多数片上外设寄存器提供了位域定义。例如,可以为CPU 定时器(CPU-Timer)中的每个寄存器定义一个位域结构体类型。CPU 定时器(CPU-Timer)控制寄存器的位域定义如下所示:
//*****************************************************************************
//DSP281x_headersincludeDSP281x_CpuTimers.h CPU 定时器头文件
//*****************************************************************************
struct TCR_BITS //定义一个TCR_BITS 结构体类型(不是变量)
{ Uint16 rsvd1:4; //3:0 保留,从最低位开始,顺序取位到最高位。取低4 位
Uint16 TSS:1; //4 定时器开始/停止,取第5 位
Uint16 TRB:1; //5 定时器重装,取第6 位
Uint16 rsvd2:4; //9:6 保留,取第7 位到第10 位
Uint16 SOFT:1; //10 仿真模式,取第11 位
Uint16 FREE:1; //11 仿真模式,取第12 位
Uint16 rsvd3:2; //12:13 保留,取第13 位到第14 位
Uint16 TIE:1; //14 输出使能,取第15 位
Uint16 TIF:1; //15 中断标志,取第16 位
};
然后,通过共用体进行声明,以便访问位域结构体定义的各个成员或者16 位或32位寄存器的值。例如,定时器的控制寄存器共用体如下所示:
//*****************************************************************************
//DSP281x_headersincludeDSP281x_CpuTimers.h CPU 定时器头文件
//*****************************************************************************
union TCR_REG //定义共用体类型TCR_REG