박한솔 wrote..
: 안녕하세요..
:
: 현재 ez보드를 가지고 공부하고 있는 학생입니다.
:
: 원래 전공이 이 분야가 아니다 보니.. 모르는 것이 많아서 질문을 드립니다.
:
: 다른것이 아니구요..
:
: gpio.h 파일에 보면,,,
:
: #define GPIO_LED_1 8 //..
: ..
: ..
: #define MASK_GPIO_LED_1 (1 << GPIO_LED_1 )
: ..
: ..
: 이런식으로 정의 되어 있습니다
:
: 그리고 이 마스크들을 OR 연산해서..
:
: 나중에 GAFR,GPDR, GRER, GFER 등에 1의 보수화 시켜서 and 연산 시키거나 output 같은 경우는
:
: or 연산을 시키는 것 까지는 알겠습니다.
:
: 그런데 마스크 매크로를 정의할 때,
:
: (1 << GPIO_LED_1 ) .. 이런식으로 정의 되는데, 이게 어떤 의미를 가지는 지를 잘
: 모르겠습니다.

좌측의 1을 GPIO_LED_1에 정의된 숫자만큼 좌측으로 이동시키는 비트연산자입다...

즉, #define GPIO_LED_1 8 = ( 1<< 8 ) 입니다.

PXA255의 Developer's Manual의 GPIO부분을 보시면...

예를 들어 GPDR0 레지스트는 다음과 같습니다...

[ GPIO[31: 0] 입출력 방향 설정 레지스터 ]

Bit 31 30 29 28 . . . . ..... 15 .. .... 4 3 2 1 0

Reset 0 0 0 0 . . . . ..... 0 .. .... 0 0 0 0 0

이렇게 되어 있습니다...

여기서 GPIO_LED_1에 정의한 8 ( GPIO 8 )번을 출력 전용으로 바꾸기 위해서는...

00000000000000000000000000000001 을 8번 좌측으로 쉬프트 시킨 값을 넣어야 합니다...( 1 << 8 )

==>> 000000000000000000000000100000000 의 값을 GPDR0의 레지스트에 값을 넣어 주면 이 GPIO8번은

출력 전용으로 사용할 수 있습니다...

다시 정리하면...(1 << GPIO_LED_1 )는 GPIO의 특정 비트의 값을 1로 만들어 주는 것입니다...

만약 GPIO 16번을 출력으로 사용하시고 싶다면....( 1 << 16 ) 하시면 되겠지요....

00000000000000000000000000000001 ==>> 00000000000000010000000000000000


그럼 수고하세요....