DSP28335GPIO定义,联合体和结构体嵌套使用

  1. GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
  2. volatile struct GPIO_CTRL_REGS GpioCtrlRegs;
  3. struct GPIO_CTRL_REGS
  4. {
  5.    union  GPACTRL_REG  GPACTRL;   // GPIO A Control Register (GPIO0 to 31)
  6.    union  GPA1_REG     GPAQSEL1;  // GPIO A Qualifier Select 1 Register (GPIO0 to 15)
  7.    union  GPA2_REG     GPAQSEL2;  // GPIO A Qualifier Select 2 Register (GPIO16 to 31)
  8.    union  GPA1_REG     GPAMUX1;   // GPIO A Mux 1 Register (GPIO0 to 15)
  9.    union  GPA2_REG     GPAMUX2;   // GPIO A Mux 2 Register (GPIO16 to 31)
  10.    union  GPADAT_REG   GPADIR;    // GPIO A Direction Register (GPIO0 to 31)
  11.    union  GPADAT_REG   GPAPUD;    // GPIO A Pull Up Disable Register (GPIO0 to 31)
  12.    Uint32              rsvd1;
  13.    union  GPBCTRL_REG  GPBCTRL;   // GPIO B Control Register (GPIO32 to 63)
  14.    union  GPB1_REG     GPBQSEL1;  // GPIO B Qualifier Select 1 Register (GPIO32 to 47)
  15.    union  GPB2_REG     GPBQSEL2;  // GPIO B Qualifier Select 2 Register (GPIO48 to 63)
  16.    union  GPB1_REG     GPBMUX1;   // GPIO B Mux 1 Register (GPIO32 to 47)
  17.    union  GPB2_REG     GPBMUX2;   // GPIO B Mux 2 Register (GPIO48 to 63)
  18.    union  GPBDAT_REG   GPBDIR;    // GPIO B Direction Register (GPIO32 to 63)
  19.    union  GPBDAT_REG   GPBPUD;    // GPIO B Pull Up Disable Register (GPIO32 to 63)
  20.    Uint16              rsvd2[8];
  21.    union  GPC1_REG     GPCMUX1;   // GPIO C Mux 1 Register (GPIO64 to 79)
  22.    union  GPC2_REG     GPCMUX2;   // GPIO C Mux 2 Register (GPIO80 to 95)
  23.    union  GPCDAT_REG   GPCDIR;    // GPIO C Direction Register (GPIO64 to 95)
  24.    union  GPCDAT_REG   GPCPUD;    // GPIO C Pull Up Disable Register (GPIO64 to 95)
  25. };
  26. union GPACTRL_REG
  27. {
  28.    Uint32              all;
  29.    struct GPACTRL_BITS bit;
  30. };

第一行是需要解释的语句

第二行是对第一行GpioCtrlRegs的解释,定义了GpioCtrlRegs是一个GPIO_CTRL_REGS结构体类型的变量,

325行是解释了GPIO_CTRL_REGS 结构体类型的变量具有哪些成分,即,GpioCtrlRegs内有哪些成员,

比如,选出其中一个成员(第5行) union  GPACTRL_REG  GPACTRL;  ,这个成员的类型是共用体

26行是针对共用体成员GPACTRL的共用体类型 GPACTRL_REG进行了定义。

28、29行表示了这个共用体类型里面有两个成员,一个是all,一个是bit

 

总的来说就是结构体内有共用体成员,共用体内有结构体成员,这个结构体内的成员就是all和bit。

 

volatile是一个类型修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

 

简单地说就是防止编译器对代码进行优化。比如如下程序:

1

2

3

4

XBYTE[2]=0x55;

XBYTE[2]=0x56;

XBYTE[2]=0x57;

XBYTE[2]=0x58;

对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一地进行编译并产生相应的机器代码(产生四条代码)(百度百科)

猜你喜欢

转载自blog.csdn.net/u012809013/article/details/88026352