举例来说
struct GPAMUX_BITS { // bits description
Uint16 PWM1_GPIOA0:1; // 0
Uint16 PWM2_GPIOA1:1; // 1
Uint16 PWM3_GPIOA2:1; // 2
Uint16 PWM4_GPIOA3:1; // 3
Uint16 PWM5_GPIOA4:1; // 4
Uint16 PWM6_GPIOA5:1; // 5
Uint16 T1PWM_GPIOA6:1; // 6
Uint16 T2PWM_GPIOA7:1; // 7
Uint16 CAP1Q1_GPIOA8:1; // 8
Uint16 CAP2Q2_GPIOA9:1; // 9
Uint16 CAP3QI1_GPIOA10:1; // 10
Uint16 TDIRA_GPIOA11:1; // 11
Uint16 TCLKINA_GPIOA12:1; // 12
Uint16 C1TRIP_GPIOA13:1; // 13
Uint16 C2TRIP_GPIOA14:1; // 14
Uint16 C3TRIP_GPIOA15:1; // 15
};
上面这个是结构体里定义了位域,也就是位域结构体,GPIO的每一位长度为一;
union GPAMUX_REG {
Uint16 all;
struct GPAMUX_BITS bit;
};
上面这个是联合体,占用同一个内存,也就是要么all 要么bit
其中bit又被定义为上面的位域结构体 即结构体GPAMUX_BITS和bit等价
struct GPIO_MUX_REGS {
union GPAMUX_REG GPAMUX;
...
};
上面将定义的各种联合体又汇总到一起,上面结构体里的GPAMUX和上上面的GPAMUX_REG等价;
接下来就是最后的一个定义:
extern volatile struct GPIO_MUX_REGS GpioMuxRegs;
也就是定义了一个GpioMuxRegs结构体,其实整体就是个结构体的嵌套
GpioMuxRegs.GPAMUX.bit.C1TRIP_GPIOA13=**;
上句是应用 你跟着追踪一下,嵌套
|