마이크로 프로세서가 주변장치와 통신하기 위해 범용으로 사용되는 입출력 포트이다.
설계자가 마음대로 변형하면서 제어할 수 있도록 제공해주는 I/O(입출력) 포트이다. I/O 포트를 제어하기 위해 각 포트당 3개의 I/O 레지스터(DDRx, PORTx, PINx)를 가진다.
입력, 출력 가능한 I/O 이지만, 여기서 약간의 어려움이 존재한다.
하나의 하드웨어 핀이 입력도 되고 출력도 될 수는 없다는 점이다.
하드웨어 적으로 출력핀은 프로그램에서 출력 값을 변경하지 않는 이상 항상 동일한 값, 즉 1 또는 0의 값을 가진다. 이런 핀을 우리는 latch 라는 말로 표현한다. 사실 메모리 또는 레지스터 이런 것들도 모두 래치형이다. 값은 변경하지 않는 이상은 이전의 값을 동일하게 갖기 때문이다. 좀 더 어려운 말로는 flipflop 이라고도 한다.
반대로 입력의 하드웨어 상태는 래치가 되면 안 된다. 입력이 1 또는 0으로 고정되어 있다면, 데이터를 주는 상대방이 값을 주는 순간 내가 출력한 값과 충동을 일으키게 된다. 이런 상태는 하드웨어마다 다른 상황이 발생한다. 출력이 서로 만나면 어떤 파형이 되는지는 "오실로스코프"를 사용해 보기 바란다. 입력 핀의 경운은 상대방의 입력을 받을 수 있는 상태인 High impedance(하이 임피던스) 상태가 되어야 한다.
High-Z(하이 임피던스)란 상대방의 출력을 그대로 받아들이는 상태를 말한다.
방해물, 장애물이라는 임피던스의 영어뜻에서 알 수 있듯이, 어떤 출력 신호선이 전기적으로 절연된 상태를 하이 임피던스라고 부른다. 상대편이 High를 주면 나도 High가 되고, Low을 주면 나도 Low가 되는 상태이다. 참고로 디지털은 3개의 상태가 존재한다. (High, Low, High-Z)
참고 : http://eslectures.blog.me/80137762936
GPIO라고 말한다면, 그 핀에 대해 보통은 입력과 출력 2가지 모드의 핀 상태가 존재한다. 물론 동시에 존재하지는 않는다. 입력이냐 출력이냐를 프로그래머가 설정하는 게 일반적이다. 그러므로 프로그래머는 사용할 GPIO에 대한 설정을 반드시 지정하여야 한다.
참고 : http://forum.falinux.com/zbxe/index.php?document_srl=438015&mid=hardware
프로그래머가 어려운 부분은 그 I/O에 출력을 쓰거나 또는 입력을 읽는게 아니다. 바로 GPIO Function의 기능을 내가 원하는 입력 또는 출력으로 변경하거나, 또는 제3의 기능으로 설정하는 것이다.
* GPIO 특징
입력과 출력을 마음대로 선택할 수 있고, 0과 1의 출력 신호를 임으로 만들어 줄 수 있는 구조를 가진다. 입력으로 사용할 때는 외부 인터럽트를 처리할 수 있도록 하는 경우가 많다. 입출력 방향 전환용 레지스터와 입출력용 데이터 레지스터 등이 필요하다. 참고로 마이크로 컨트롤러에서는 대부분의 핀들을 GPIO로 설정하는 경우가 많다.
각 포트에는 데이터 출력용 레지스터(PORTx)와 데이터 입출력 방향 지정용 레지스터(Data Direction Register: DDRx), 그리고 데이터 입력용 레지스터(PINx)가 있을 것이다.
'Software > MICOM' 카테고리의 다른 글
I2S(Intergrated Interchip Sound) 통신 (12) | 2017.08.23 |
---|---|
레지스터란? (0) | 2017.08.18 |
Renesas 개발일지(2) (0) | 2017.01.09 |
Renesas 개발일지(1) (0) | 2017.01.04 |
개발자가 적어본 마이컴/마이크로프로세서 이야기 (0) | 2016.12.23 |