使用union与struct位域实现寄存器封装
在看stm32的usb库源码时,看到它封装寄存器使用了类似如下的方式,感觉很好,记录下来
#include <stdio.h>
#include <stdint.h>
union test{
uint32_t reg;
struct {
uint32_t reserve:4;
uint32_t ctrl:4;
uint32_t enable:5;
uint32_t dis:3;
uint32_t stat:1;
uint32_t loop:7;
uint32_t ext:2;
uint32_t mode:6;
}bits;
};
int main(void)
{
union test mytest;
mytest.reg = 0xa5a5a5a5;
printf("reg value=0x%x\n", mytest.reg);
printf("reserve(3:0)=0x%x\n", mytest.bits.reserve);
printf("ctrl(7:4)=0x%x\n", mytest.bits.ctrl);
printf("enable(12:8)=0x%x\n", mytest.bits.enable);
printf("dis(15:13)=0x%x\n", mytest.bits.dis);
printf("stat(16:16)=0x%x\n", mytest.bits.stat);
printf("loop(23:17)=0x%x\n", mytest.bits.loop);
printf("ext(25:24)=0x%x\n", mytest.bits.ext);
printf("mode(31:26)=0x%x\n", mytest.bits.mode);
return 0;
}