본문 바로가기
SW개발자를 위한 HW

GPIO , TRISTATE , OE(Output Enable)

by 청운추월 2023. 5. 24.
반응형

GPIO

General Purpose Input Output 의 약자로 일반적으로 사용하는 입력과 출력을 의미합니다.

GPIO를 설명하기에 앞서
Digital에 대해 한번 생각 해 봐야 할것 이 있습니다.
Digital 회로는 0,1로만 구성되는것이 일반적인데 한가지가 더 있습니다.


아주 높은 저항을 가지는 High Impedence(Z) 상태가 하나더 있습니다.
이 말의 뜻은 저항이 아주 높은 상태,즉 나무막대기같이 높은 저항을 가진상태라는 의미가 되죠
다른말로 풀이 하면 전선이 끊어진 상태라고 생각 하시면 됩니다.
결국은 High Impedence(Z)라는 말은 전기가 통하지 않는 상태가 된다는 말이 됩니다.
이상태를 0,1, 다음 세번째(TRI) 상태라고 해서 TRISTATE 라고 부르게 됩니다.

GPIO란 말그대로 일반적으로 쓰는 Input Ouput Port라는 의미입니다.
어떻게 하나의 핀으로 출력도 되고 입력도 되느냐


값을 읽어오는 주소와 쓰는 주소는 분리되어 있습니다.
위와 같은 그림이 되겠네요.실제로 주소의 하나의 Bit당 하나의 핀이 연결되어 있습니다.
그런데 문제는 Output의 신호가 그대로 Input으로 들어와서  Pin 의 신호와 충돌이 생기게 됩니다
이 문제를 해결하려면 Input동작시 Output쪽의 라인을 끊어주어야 하고
Output동작시에는 Input쪽 라인을 끊어주어야 합니다.
이역할을 TRISTATE 소자가 하게 됩니다



삼각형모양에 3개의 선이 연결된것이 TRISTATE를 의미합니다.
동그라미 모양은 NOT를 의미합니다.
OE Address에서 0으로 설정을 하면  OUTPUT TRISTATE는 Active가 되어 Output Address에서의 

신호를 바로 Pin으로 출력하고
반대편에 있는 Input쪽 TRISTATE는 Deactive로 설정이 되어 라인이 끊어지게 됩니다.
Input으로 사용할때는 OE를 0으로 설정하면 Input쪽은 연결되고 Output쪽은 끊어지게 됩니다.
OE설정을 잘못하게 되면 Output을 했는데도 출력이 되지 않고 Input을 해도 제대로된 값을 읽을 수가 없게 됩니다.

 

VHDL에서는 이렇게 사용하는 경우가 있고 개념적으로 이해하시면 됩니다. 

실제 CPU의 GPIO는 조금 다르게 구성합니다. 


ALTERNATE FUNTION

한개의 Pin이 일반적으로 Digital Input Output 으로 사용되지만 
특별한 목적으로 사용하기 위해 HW 적으로 설계를 해서 나오는 경우가 대부분입니다.
이것을 Alternate Function라고 합니다.

이렇게 하면 일반적인 Digital Input,Output 기능과  특별한 기능(PWM,UART,I2C)을 동시에 지원하면서도

핀수를 적게 만들수 있는 장점이 있습니다. 

아래 ATmega128의 경우 PA,PB,PC,PD,PE,PF 8Bit Data를 출력할 수 도 있고 

()로 안의 Alternate Function(ADC,ISP,Interrupt, Timer등등)으로 사용할 수도 있습니다. 

 

 


아래그림과 같이 UART,PWM을 지원한다면 HW적으로 추가적인 회로가 연결되어 있으며
GPIO Config Address 설정에 의해 MUX에서 여러기능중 하나의 기능을 선택하게 됩니다.

 


사용하고자 기능과 Config가 정확하게 설정되어 있어야 정상적인 기능을 하겠지요
Config/Output/OE/Input의 경우  1Bit 당 1개의 Pin을 제어하므로  값을 쓰거나 읽을때 Bitmask를  사용합니다.
Bitmask란 특정 Bit만을 바꾸는데 사용됩니다.
그러나 부팅시에는 Assembler 또는 Bootloader에서는 Bitmask를 설정하기가 용이하지 않아 값을 바로 쓰는경우가 있습니다.
이런경우 다른 핀의 입출력에 영향을 주는경우가 발생할 수 있습니다.
Bitmask가 사용자는 1개의 bit만 바꾸지만 CPU입장에서는 결과적으로 32bit값을 재설정하게 됩니다.

 

반응형

'SW개발자를 위한 HW' 카테고리의 다른 글

인터럽트 & 폴링  (0) 2023.05.24
풀업,풀다운(Pullup & Pulldown)  (0) 2023.05.24
서보모터(Servo Motor)  (0) 2023.05.24
MKS system  (0) 2023.05.24
아날로그,디지털 (Analog & Digital)  (0) 2023.05.24