티스토리 뷰

Study/EmbeddedSystem

[GPIO] GPIO Port Mode(Direction) Register

생각많은 소심남 2017. 6. 20. 01:02

 아마 보드에 달려있는 IP 중 가장 기본적인 IP가 GPIO가 아닐까 생각한다. GPIO는 단어속에 내포되어 있는 뜻 그대로 General Purpose Input/Output, 일반적으로 사용할 수 있는 register를 말한다. 그리고 실제 보드를 살펴보면 수많은 점퍼핀들이 나와있는 것을 알 수 있다. 그런데 보통 각 핀의 역할이 Input이다, Output이다로 명확히 구분지어진게 아니라 이 역할을 정의해주는 register field가 있다. 보통 Datasheet을 살펴보면 Mode Register라고 하는 것이 그 것이다. (device의 종류에 따라서는 Direction Register라고 표현되어 있는 곳도 있다.)

 내가 취미삼아 듣고 있는 강의에서 사용되고 있는 TI Tiva 보드에서도 해당 datasheet내에서 GPIO를 찾아보면 다음과 같이 정의되어 있다.

위의 Datasheet를 잠깐 분석해보면 현재 TI Tiva 보드에는 PortA 부터 PortF까지 6개의 port가 있고, 각 포트가 AHB와 APB 라고 하는 bus에 연결되어 있다. 만약 AHB와 연결된 GPIO Port C 를 다루고 싶다면 0x4005A000 주소로 가서 밑에 있는 Bit field에 맞는 값을 설정해주면 된다. 보통 Field에 따라서 쓸 수 있는 영역은 R/W, 읽기만 가능한 영역은 RO(Read Only)로 표현되고는 한다. 그래서 위에 회색으로 칠해진 부분은 어떤값을 쓰더라도 GPIO의 동작에 영향을 미치지 않는다. 중요한 부분은 흰색으로 표현된 부분인데, 아래에 설명된 대로 0일때는 해당 포트를 입력으로, 1일때는 출력으로 쓰겠다고 정의할 수 있다. 

 예를 들어 이 PortC로 LED를 연결해서 상태를 표현하고자 할 경우, GPIO 초기화 과정에서 해당 값을 1로 써야 하고, 만약 스위치 같은 것으로 입력을 받을 경우 해당 필드를 0으로 쓰면 된다.

 참고로 보드의 특성에 따라서 해당 값을 0과 1이 아닌 다른 값을 받는 경우도 종종있다. 이같은 경우는 보통 핀 수의 부족으로 인해 GPIO가 다른 IP와 Pin을 Mux해서 쓰는 경우에 주로 나타난다. 예를 들어 GPIO로 사용하는 핀임에도 만약 해당 PIN이 UART도 공용해서 쓰는 경우에는 이에 해당하는 값(일반적으로 Alternative function Mode라고 표현되기도 한다.)을 임력한 후에 써야 한다.

댓글