AVR: I/O 핀의 구조

I/O 핀이 어떻게 같은 포트에서 입력과 출력을 동시에 수행할 수 있는지 알아봅니다.


이 사진은 I/O 핀 하나의 내부 구조입니다. 내부 Data Bus와 PORT, PIN, DDR 레지스터, 그리고 외부 I/O 포트가 연결되어 있는 것을 볼 수 있습니다. 엄청 복잡해 보이지만, 중요한 부분만 보면 됩니다.

DDR, PORT, PIN 레지스터들은 각각 8개의 D-플립플롭으로 구성되어 있습니다. 플립플롭 한개당 하나의 I/O 포트를 담당합니다.

위 그림에서 검은 동그라미가 쳐져있는 부분은 버퍼입니다. 이 버퍼는 원래 기능과 비슷하게 전류의 흐름을 제어하는 용도로 사용됩니다. 회로를 자세히 보면, DDR 레지스터의 플립플롭 하나가 버퍼의 위에 연결되어 있습니다. 이 플립플롭이 버퍼에 전달하는 신호에 따라 외부 I/O 포트와 데이터 버스간의 데이터 이동 흐름이 달라지게 됩니다.

플립플롭에서 버퍼로 HIGH 신호를 전달하면, 버퍼 내부가 연결되어 PORT 레지스터의 플립플롭 하나와 데이터 버스, 외부 I/O 포트가 쭉 연결됩니다. 버퍼로 인해서 전류는 PORT에서 I/O 포트로만 흐르므로, I/O 포트는 신호 출력의 기능을 수행하게 됩니다.

반대로 플립플롭에서 버퍼로 LOW 신호를 전달하면, 버퍼 내부의 연결이 끊어져 PORT 레지스터에서 외부 I/O 포트로 통하는 통로가 차단됩니다. 따라서 I/O 포트에서 들어오는 신호가 그대로 PIN 레지스터의 하나의 플립플롭에 입력됩니다.