1

我正在学习微控制器,但我很难理解如何使用联合来设置 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 只是一个内存地址。

4

1 回答 1

3

它将端口指针转换为volatile unsigned char(8 位整数)。您可以为您的类型制作类似的宏:

#define PORTDD  (*(volatile BYTE *)(&__IPSBAR[0x100009]))

然后使用PORTDD.Bit.b0. 请注意,在某些情况下,._byte如果您需要确保在单个寄存器写入中设置(或清除)多个位,则需要直接写入。如果您不命名Bit(只是使其匿名),您的 C 编译器可能会让您将其缩短为PORTDD.b0.

于 2011-04-28T05:42:27.867 回答