2011-04-28 4 views
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는 메모리 주소입니다.

답변

3

포트 포인터를 volatile unsigned char (8 비트 int)으로 변환합니다. 자신의 유형에 맞는 매크로를 만들 수 있습니다 :

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

PORTDD.Bit.b0으로 액세스하십시오. 경우에 따라 단일 레지스터 쓰기에서 여러 비트가 설정 (또는 지워짐)되도록하려면 ._byte을 직접 작성해야합니다. Bit (익명으로 지정)을 지정하지 않으면 C 컴파일러가 PORTDD.b0으로 줄여 줄 수 있습니다.

+0

O 남자 ... 그렇게 명백한 권자 ... 고마워요! – user623879

+0

일부 용어를 던지기 위해이 구조체 오버레이라고합니다. – sherrellbc