#pragma pack(push, 1)
typedef union {
struct {
# ifdef CS_BIG_ENDIAN
cs_uint16 rsrvd1 :4;
cs_uint16 output_src_sel :3;
cs_uint16 invert_output :1;
cs_uint16 invert_input :1;
cs_uint16 iovddsel_1v2 :1;
cs_uint16 outen_ovr :1;
cs_uint16 outen :1;
cs_uint16 rsrvd2 :2;
cs_uint16 pullup_1k :1;
cs_uint16 pullup_10k :1;
# else /* CS_LITTLE_ENDIAN */
cs_uint16 pullup_10k :1;
cs_uint16 pullup_1k :1;
cs_uint16 rsrvd2 :2;
cs_uint16 outen :1;
cs_uint16 outen_ovr :1;
cs_uint16 iovddsel_1v2 :1;
cs_uint16 invert_input :1;
cs_uint16 invert_output :1;
cs_uint16 output_src_sel :3;
cs_uint16 rsrvd1 :4;
# endif
} bf ;
cs_uint16 wrd ;
} CS4224_GPIO_GPIO1_t;
#pragma pack(pop)
int main()
{
CS4224_GPIO_GPIO1_t gpio_cfg;
gpio_cfg.bf.output_src_sel = 0;
gpio_cfg.bf.invert_output = 0;
gpio_cfg.bf.invert_input = 0;
gpio_cfg.bf.iovddsel_1v2 = 0;
gpio_cfg.bf.outen_ovr = 0;
gpio_cfg.bf.outen = 1;
gpio_cfg.bf.pullup_1k = 0;
gpio_cfg.bf.pullup_10k = 1;
printf("0x%x\n", gpio_cfg.wrd);
return 0;
}
After we execute it in the little endian platform, it will print "0x11";
we can know that the "pullup_10k" field is the first bit of the output data.