상세 컨텐츠

본문 제목

마이크로콘트롤러 GPIO 입출력 제어

카테고리 없음

by 커피줌 2020. 7. 21. 00:20

본문

1. 마이크로콘트롤러와 GPIO

임베디드 시스템과 마이크로컨트롤러 등 IT관련 장비를 접하다 보면 GPIO라는 용어를 자주 만나게 된다. GPIO는 General Purpose Input Output의 약자로 말 그대로 범용으로 사용되는 입출력 포트를 의미한다. 즉, 여러가지 다양한 용도로 사용될 수 있다는 것이다. 임베디드 시스템에는 MCU외에 여러가지 다양한 일을 하기 위한 주변장치 및 소자들이 존재한다. 이 주변 소자들은 MCU의 미리 정해진 인터페이스에 연결되어 동작하는 것들도 있지만, 그렇지 않은 경우가 더 많다. 이러한 다양한 주변 소자들을 동작시키기 위해서는 그 주변 소자들이 원하는 방식으로 인터페이스를 하여 원하는 신호를 보내주어야 한다. 예를 들어 LED를 켠다든지, 버저를 울린다든지 하기 위해서는 그 소자에 0 혹은 1의 신호를 보내주어야 하고, TEXT-LCD에 글자를 출력하기 위해서는 좀 더 복잡한 병렬 신호들을 보내 주어야 한다. 또한, 키패드나 버튼 스위치 입력을 받기 위해서는 그 소자들로부터 나오는 신호를 받아들일 수 있는 통로를 가져야 한다. 이와 같이 임베디드 시스템들에서 일어나는 여러가지 다양한 일들을 처리하기 위해 설계자가 마음대로 변형하면서 제어할 수 있도록 제공해 주는 I/O(입출력) 포트를 바로 GPIO라고 하는 것이다.

GPIO는 일반적으로 입력과 출력을 마음대로 선택할 수 있고, 0과 1의 출력 신호를 임의로 만들어줄 수 있는 구조를 가지게 된다. 그리고, 입력으로 사용할 때는 외부 인터럽트를 처리할 수 있도록 하는 경우가 많다. 이러한 기능을 주기 위해서 입출력 방향 전환용 레지스터와 출력용/입력용 레지스터등이 필요하게 된다.

8051 마이크로 컨트롤러도 많은 수의 GPIO 포트를 보유하고 있다. 사실 특수한 용도로 사용하는 몇몇 핀을 제외하고는 거의 모든 핀들이 GPIO로 사용할 수 있다고 보아도 무방하다. 그만큼 마이크로컨트롤러에서 GPIO의 중요성은 매우 크다고 할 수 있으며, 최근 고성능 임베디드 프로세서나 SoC에서도 이러한 경향은 마찬가지이다. 8051 마이크로컨트롤러의 GPIO 포트를 살펴보기로 한다.

2. 8051 마이크로컨트롤러의 입출력 포트

AT89C51ED2 의 입출력 포트는 4개의 8비트 I/O포트로 구성되어 있으며, 각각의 포트는 범용의 I/O신호(GPIO)와 특수 기능 신호로써 동작하게 된다. 먼저 범용의 I/O 신호는 8051 AT89C51ED2 마이크로컨트롤러에서 주변 회로 사이에 데이터 송 수신에 의해 읽기, 감시, 상태 출력, 시스템 구성, 제어신호 형성, 시리얼 통신 등을 제공하게 된다. 반면에 AT89C51ED2 특수 기능은 주변 상태 및 시스템 구성요소에 따라 달라질 수 있다. 입출력 포트가 일반적 디지털 I/O로 동작할 경우에는 Read-Modify- Write기능을 가지고 있어서 비트 단위로 포트 핀들을 제어할 수 있다. 다음은 8051 마이크로컨트롤러의 입출력 포트의 특징을 정리한 것이다.

2.1 8051 마이크로컨트롤러 입출력 포트 특징

- 4개의 8비트 I/O 포트로 구성되어 있다.

- 포트0를 제외한 모든 핀은 개별적으로 내부 풀업 저항을 사용할 수 있다.

- 모든 I/O핀은 VCC와 GND사이에 다이오드를 접속하여 포트를 보호한다.

- Read-Modify-Write기능을 가지고 있어, 비트 단위의 포트 설정이 자유로우며, 모든 레지스터는 포트1의 3번째 비트를 표현하는데 P1_bit.3과 같이 사용한다.

- 각 포트에 대한 I/O 입출력에 대한 선언이 없다.


2.2 Px 레지스터

8051 마이크로컨트롤러는 입출력 포트를 제어하기 위해서, Px(0~3) 레지스터를 사용한다. 다음에 이 입출력 포트 제어용 레지스터를 간단히 설명한다. 8051 MCU는 Px 레지스터로 핀값을 읽고 쓰기가 가능하다. 비트별로 읽어 들이려면 Px_bit.Px.n을 사용하면 된다. (컴파일러 마다 약간씩 다르다. Keil 컴파일러는 Px.n (x : 0~4, n : 0~7), IAR EW8051은 Px_bit.Px.n). 만약 포트 1의 비트3값을 읽어 들여 led3라는 비트값에 할당하려면 led3 = Px_bit.P1.3로 하면 된다.

앞에서 설명한 바와 같이, AT89C51ED2 마이크로콘트롤러는 4개의 8비트 입출력 포트로 구성되어 있다. 입출력 포트들은 임베디드 시스템을 설계할 때 그 용도에 맞게 적절히 기능을 부여하게 된다. 시스템에서 요구되는 기능에 따라 내장할 주변 소자들과 외부 인터페이스를 결정하고, 그 주변 소자와 외부 인터페이스들을 마이크로컨트롤러의 각 입출력 포트에 적절히 배분하여 연결해 주어야 한다. 예를 들어 UART 인터페이스를 필요로 하는 외부 인터페이스는 P3 포트에 연결하면 되고, PWM 제어가 필요한 모터는 포트 1의 PWM 포트에 연결하면 된다. 만약 외부에 대용량의 메모리를 붙여야 한다면 포트 0, 포트 1, 포트 3에 있는 외부 메모리 연결 포트를 사용해야 한다. 입출력 포트의 특수 기능 사용에 대해서는 이 후 5장부터 순서대로 하나씩 실습을 할 것이다. 좀 더 자세한 사항은 각 장에서 설명하기로 한다. 다음에 각 입출력 포트의 기능을 정리하였다.


2.3 포트 0 (P0.0 ~ P0.7 : 핀 30-38)

내부 풀업 저항이 없는 8비트 양방향 입출력 단자이다. 외부메모리를 둘 경우에는 주소버스(A7-A0)와 데이터버스(D7-D0)로 사용된다. 이때 어드레스 버스와 데이터 버스를 구분하기 위해서는 ALE 신호를 사용한다. 다음은 외부 메모리를 둘 경우 각 핀 역할을 정리한 것이다.

포트 0핀부가기능

P0.7 - AD7(외부 메모리 인터페이스 주소와 데이터 비트7)

P0.6 - AD6(외부 메모리 인터페이스 주소와 데이터 비트6)

P0.5 - AD5(외부 메모리 인터페이스 주소와 데이터 비트5)

P0.4 - AD4(외부 메모리 인터페이스 주소와 데이터 비트4)

P0.3 - AD3(외부 메모리 인터페이스 주소와 데이터 비트3)

P0.2 - AD2(외부 메모리 인터페이스 주소와 데이트 비트2)

P0.1 - AD1(외부 메모리 인터페이스 주소와 데이터 비트1)

P0.0 - AD0(외부 메모리 인터페이스 주소와 데이터 비트0)


2.4 포트1 (P1.0 ~ P1.7:핀40-3)

내부 풀업 저항이 있는 8비트 양방향 입출력 단자이다. GPIO로 사용되지 않을 경우에 타이머2 포트, PCA(Programmable Counter Array) 출력포트(PWM) 나 SPI용 단자로도 사용된다. 다음은 특수용도로 사용될 경우 각 핀의 기능을 정리한 것이다.

포트 1핀 부가기능

P1.7 - Capture/Compare External I/O for PCA module4 / MOSI: SPI Master Output Slave Input line

P1.6 - Capture/Compare External I/O for PCA module 3 / SCK: SPI Serial Clock

P1.5 - Capture/Compare External I/O for PCA module 2 / MISO: SPI Master Input Slave Output line

P1.4 - Capture/Compare External I/O for PCA module 1

P1.3 - Capture/Compare External I/O for PCA module 0

P1.2 - External Clock for the PCA

P1.1 - Timer/Counter 2 Reload/Capture/Direction Control / SPI Slave Select

P1.0 - Timer/Counter 2 external count input/Clockout


2.5 포트 2 (P2.0~P2.7:핀18-25)

내부 풀업 저항이 있는 8비트 양방향 입출력 단자이다. 외부메모리를 둘 경우에는 주소버스(A15-A8)로 사용된다. 다음은 외부 메모리를 둘 경우 각 핀 역할을 정리한 것이다.

포트 2핀 부가기능

P2.7 - AD7(외부 메모리 인터페이스 주소 비트15)

P2.6 - AD6(외부 메모리 인터페이스 주소 비트14)

P2.5 - AD5(외부 메모리 인터페이스 주소 비트13)

P2.4 - AD4(외부 메모리 인터페이스 주소 비트12)

P2.3 - AD3(외부 메모리 인터페이스 주소 비트11)

P2.2 - AD2(외부 메모리 인터페이스 주소 비트10)

P2.1 - AD1(외부 메모리 인터페이스 주소 비트9)

P2.0 - AD0(외부 메모리 인터페이스 주소 비트8)


2.6 포트3 (P3.0~P3.7:핀5 , 13-19)

내부 풀업 저항이 있는 8비트 양방향 입출력 단자. 타이머용 단자, UART , 외부메모리 WR, RD 혹은 외부인터럽트용 단자로도 사용된다. 다음은 특수용도로 사용될 경우 각 핀의 기능을 정리한 것이다.

포트 3핀 부가기능

PD7 - RD : External data memory read strobe

PD6 - WR : External data memory write strobe

PD5 - T1 : Timer 1 external input

PD4 - T0 : Timer 0 external input

PD3 - INT1 : External interrupt 1

PD2 - INT0 : External interrupt 0

PD1 - TXD : Serial output port

PD0 - RXD : Serial input port

댓글 영역