方法介绍:
为每一个寄存器逐个都定义一个union联合体变量,
每个联合体包括一个寄存器宽的byte/word变量,和一个根据寄存器内容按bits(1bit或多bit)定义的结构体变量。
例如某寄存器有有三组内容,定义如下:
typedef union {
unsigned char byte;
struct {
unsigned Value:6;
unsigned Control:1;
unsigned Status:1;
};
} register_A;
读寄存器,整个寄存器读取、内容保存到byte/word变量,可以根据bit/bits使用读取的寄存器值,
写寄存器,先更新bit/bits变量,然后按整个byte/word变量写入寄存器。
注:常见外设寄存器是8bit / 16bit。
方法特点:
适用场景:
使用举例:
1、定义联合体寄存器:
typedef union {
FSC_U8 byte;
struct {
unsigned REVISION_ID:2;
unsigned PRODUCT_ID:2;
unsigned VERSION_ID:4;
};
} regDeviceID_t;
typedef union {
FSC_U16 word;
FSC_U8 byte[2] __PACKED;
struct {
// Switches0
unsigned PDWN1:1;
unsigned PDWN2:1;
unsigned MEAS_CC1:1;
unsigned MEAS_CC2:1;
unsigned VCONN_CC1:1;
unsigned VCONN_CC2:1;
unsigned PU_EN1:1;
unsigned PU_EN2:1;
// Switches1
unsigned TXCC1:1;
unsigned TXCC2:1;
unsigned AUTO_CRC:1;
unsigned:1;
unsigned DATAROLE:1;
unsigned SPECREV:2;
unsigned POWERROLE:1;
};
} regSwitches_t;
typedef union {
FSC_U8 byte;
struct {
unsigned MDAC:6;
unsigned MEAS_VBUS:1;
unsigned:1;