我正在学习微控制器,我很难理解如何使用联合在gpio端口上设置单个位。
typedef union _BYTE
{
byte _byte;
struct
{
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
unsigned b3:1;
unsigned b4:1;
unsigned b5:1;
unsigned b6:1;
unsigned b7:1;
}Bit;
} BYTE;
我使用上面的方法来访问一个字节的各个位,但是如何使用它来按以下方式分配io端口值?
MCF_GPIO_PORTDD.Bit.b0 = 1;
我宁愿不分配一种_BYTE,然后将端口分配给它。
#define MCF_GPIO_PORTDD (*(vuint8 *)(&__IPSBAR[0x100009]))
MCF_GPIO_PORTDD只是一个内存地址。
答案 0 :(得分:3)
它正在将端口指针转换为volatile unsigned char
(8位int)。您可以为您的类型制作类似的宏:
#define PORTDD (*(volatile BYTE *)(&__IPSBAR[0x100009]))
然后使用PORTDD.Bit.b0
访问它。请注意,在某些情况下,如果需要确保在单个寄存器写入中设置(或清除)多个位,则需要直接写入._byte
。如果你没有命名Bit
(只是匿名)你的C编译器可能会让你缩短为PORTDD.b0
。