개발하는 기획자

반응형




이번엔 먼저 임베디드 시스템에서 "Hello! World"라 불리고 있는 LED 제어를 하기 위한 GPIO 포트 관련 내용입니다.


LED 제어가 "Hello! World"라 불리는 이유는 간단하고 처음 쉽게 구현할 수 있는 Digital 기반의 출력 제어이기 떄문입니다.


Digital 출력이라고 하면,


1(High) - 0(Low) 이 두가지 레벨로 이루어진 출력 제어입니다.


시간이 된다면 간단한 전자 개념과 부품 설명은 ETC 페이지에서 상세하게 설명하는 글도 추가하고싶네요. ㅎ




사실 가장 좋은 자료는 데이터시트를 보고 각 기능, 칩의 내부 구조, 레지스터의 사용법을 공부하는게 최고의 방법입니다.


물론 전 영어의 거대한 장벽과 386 페이지인 데이터시트를 정독할 자신이 없었습니다.

(다른 32-Bit 마이크로 컨트롤러의 경우 1000 페이지가 넘는 것도 봤습니다. ㅎ;;;)


그래서 저는 블로그나 책을 따라서 단순히 코드를 복사하고 동작을 확인하는 방식으로 시작하는데,


코드나 동작을 확인하고 역으로 데이터 시트에서 해당 기능을 찾는 형태로 공부를 많이 했습니다.





먼저 데이터 시트는

간단하게 구글에서 검색만 해도 상단에 PDF 파일로 공개가 되어있어서 다운로드 받아서 필요할 때 마다 보면 참 편리하게 사용 가능합니다.


이 데이터시트를 다운받아서 2 페이지를 보면 칩이 어떤 핀을 가지고 있는지 자세하게 나와있는데,


GPIO 포트는 아래 그림의 핀들로 A,B,C,D,E,F 포트에 각 8개(0~7번) G 포트는 5개로 범용의 목적을 가진 핀들은 총 53개가 있습니다.


해당 포트들은 입력과 출력을 사용자가 원하는대로 설정이 가능한데요.  이런 부분이 임베디드 시스템의 장점으로 많이 사용되고 있습니다.


사용자가 필요한 기능을 코드상에서 내부 레지스터를 수정하는 것으로 간단히 설정/수정이 가능해 추가적인 하드웨어의 변경이 필요 없어지게 됩니다.

이 기능을 이용하면 핀을 디지털 적으로 High(5v)나 Low(0v)로 출력이 가능하며, 반대로 이런 전자 신호에 대한 입력도 가능하게 됩니다. 


LED 제어를 위해 이 핀을 사용할 때, 위에서 말한 레지스터를 조금 설정할 필요가 있는데,


이 떄 필요한 레지스터를 찾기 위해 데이터 시트 86쪽을 확인하면,




다음처럼 레지스터에 대한 구조가 나오는데,



DDRx같은 경우는 상태를 제어하는 부분으로 예를 들어서 내가 DDA0(Port A의 0번 핀) 을 출력으로 사용할 경우 1, 입력일 경우 0으로 넣어주시면 됩니다.


즉, DDRA=0x00 으로 선언하게 되면 입력을 받는다는 의미로 사용되고, DDRA=0xFF 로 선언하게 되면 해당 핀을 출력으로 사용하게 설정이 완료됩니다.

상태 제어 레지스터를 출력으로 설정했으면 PORTx 를 통해 출력을 정할 수 있는데, 여기선 1을 넣어주면 High(5v) 상태가 되며, 0을 넣어주게 되면 Low(0v) 상태가 됩니다.

PINx의 경우 값을 받아오는 부분이기 떄문에 상태 제어 레지스터를 입력으로 둔 뒤 코드 내부에서 변수로 받아와 활용할 수 있습니다.





GPIO를 익히면 간단하게 LED 제어나 버튼 입력에 대한 제어가 가능하고 다음 글부터 실제 코드와 함께 진행할 수 있도록 하겠습니다.


읽어주셔서 감사합니다.

반응형

이 글을 공유합시다

facebook twitter googleplus kakaostory naver
-->