본문 바로가기

PROJECT/ex347_project

Mini2440]GPIO 제어하기(Data sheet읽기)

GPIO를 제어하기 위해서는 DataSheet를 읽을 수 있어야 한다.

Mini2440 보드의 경우 S3c2440 CPU를 사용하기 때문에 S3c2440 Datasheet를 어떻게 볼지 알아보자.

위에 첨부된 File이 바로 DataSheet이다.
파일을 열어보면 3페이지 부터 Table of Contents 가 있다.
Chepter의 큰 제목 보면서 넘어가보면

Chapter 01. Product Overview
Chapter 02. Programmer's Model
Chapter 03. ARM Instruction Set
Chapter 04. Thumb Instruction Set
Chapter 05. Memory Controller
Chapter 06. Nand Flash Controller
Chapter 07. Clock & Power Management
Chapter 08. DMA (Direct Memory Access)
Chapter 09. I/O PORTS
Chapter 10. Basic Timer
Chapter 11. UART (Universal Asynchronous Receiver/Transmitter)
Chapter 12. USB HOST Controller
Chapter 13. USB Device Controller
Chapter 14. Interrupt Controller
Chapter 15. LCD Controller
Chapter 16. ADC(Analog-toDigital Conversion) & Touch Interface
Chapter 17. Real Time Clock
Chapter 18. Watchdog Timer
Chapter 19. MMC(MultiMediaCard)/SD(Secure Digital card)/SDIO Controller
Chapter 20. IIC-BUS(Inter Integrated Circuit Bus) Interface
Chapter 21. IIS-BUS(Inter Integrated circuit Sound Bus) Interface
Chapter 22. SPI (Serial Peripheral Interface)
Chapter 23. Camera Interface
Chapter 24. AC97(Audio Codec 97) Controller
Chapter 25. Bus Priorities
Chapter 26. Mechanical Data
Chapter 27. Electrical Data

위와 같이 크게 28개의 chapter로 나눠진다.

여기서 우리가 찾고자 하는 것은 GPIO(General Purpose Input/Output) 이다.
당연히 I/O PORT를 봐야겠다고 생각이 들것이다. 

 Chapter 09. I/O PORTS 에 가보면 우선 Port Configuration 이 나온다.
Port A부터 Port J까지 각 포트에 주어진 레지스터에 Selectable Pin Functions 가 표로 명시돼 있다. 
각 레지스터에 Input/Output 이 가능한지 그리고 각 어떤 핀으로 나와있는지 또한 어떤 일을 할 수 있는지.

278페이지의 G ports를 보자.
그 안에 GPG7 를 보면 



이렇게 주어져 있다.

Selectable Pin Functions라 함은 우리가 선택해 줄 수 있다는 것인데..

어떻게 선택할 수 있는지 알아 보자.
각각 port에는 여러종류의 레지스터를 준다.

GPG 의 경우를 얘기해보면
GPGCON / GPGDAT / GPGUP 이렇게 3개의 레지스터를 부여해 준다.

이 내용은 Datasheet의 9-19(292페이지)를 보면 잘 설명 되어 있다.



각 레지스터는 Controll / Data / Pull-up 을 결정 이어주는 레지스터 들이다.
레지스터의 주소값을 위에 잘 나와 있고, 위에서 말한 selectable Functions을 선택하는 녀석은 바로
GPGCON ( General Purpose G Control register ) 이다.

이녀석도 함 볼까요?


이렇게 GPGCON(0x56000060) register의 [15:14]bit를 이용해서 Input/Output/EINT[15]/SPICLK1 중에서 고를 수 있는 것이다.


GPGDAT(0x56000064)와 GPGUP(0x56000068)의 경우에는 총 16개( GPG0~GPG15 를 가지는 Port G 이기 때문에
16개의 비트를 이용해서  각각 Data를 넣어줄 수 있고, Pull_up저항을 설정/비설정 해줄 수 있다.

그러면 이제 GPIO를 가지고 놀 수 있지 않겠는가?!

GPnCON / GPnDAT / GPnUP 이 3개의 register에 사용하고자 하는데로 값을 넣어주면 된다.