1. GPIO

raspi3 chpset에는 많은 pin 존재하고 각각의 pin 다른 H/W 연결되어 Input, Output 혹은 pin마다 정해진 고유의 function 동작할 있다. 그리고 이러한 pin들을 직접적으로 s/w 통해서 직접적으로 제어할 있는데 이것이 바로 GPIO이다.

GPIO(general-purpose input/output) 개발은 H/W 직접적으로 컨트롤하는 S/W 개발 일종의 펌웨어 개발이다.

 

 

기본적으로 raspi3 0x3F000000 base 받고 여기서 GPIO base 0x00200000이다.

raspi3 GPIO base address 0x3F200000 된다.

 

2. 레지스터

GPIO 레지스터는 위와 같으며 Datasheet 통해서 쉽게 확인할 있다. datasheet raspi3가아닌 raspi 1 기반이기 때문에 주솟값이 0x3F20 0000으로 base 잡히지 않고 다른 값으로 잡혀있다. raspi3에서는 GPIO Base Address GPIO Function Select0 register 주소가 0x3F20 0000이다.

1) GPIO Select Register

GPIO select register GPIO Pin (raspi3 경우 40개의 pin이존재하는 으로 ) 어떻게 사용하는지 결정하기 위한 레지스터이다.

일종의 GPIO setup register 해당 register를통해 임의의 pin x input으로 사용할지, output으로 사용할지, 혹은 특정 Function(UART, Interrupt )으로 사용할지를 결정한다.

위와 같이 register값을 설정해서 pin 고를 있으며 코드로 구현하면 아래와 같이 된다.

2) GPSET, GPCLR

해당 레지스터는 GPIO pin data값을 1, 0으로 set하는 레지스터이다.

해당 레지스터를 on 해줌으로써 PIN 값을 1 혹은 0 으로 셋업할 있다.

 

3) GPLEV

해당 값은 GPIO pin값을 read하는 역할을 수행한다.

 

4) Event

GPIO pin 통해서 input, output, 특정 Function역할을 수행한다고 했는데 특정상황에서 input 발생했고 output이발생했고 혹은 Function 수행하기 위한 설계를 하는 기본이자 핵심이 바로 voltage 인가이다.

예를들어 임의의 GPIO PIN x clock으로 사용하고자 한다면 clock발생에 따른 인터럽트, 타이머, SPI동작 등을 수행하기위해 clock 발생 시점을 정해야한다.

정리하면 clock pulse 지속적으로 들어올때 HIGH 순간에 data 읽을건지, LOW 읽을건지 아니면 Rising edge, Falling edge 어느 시점에 데이터를 읽고 쓸건지를 통신하고자 하는 주체와 약속하고 방식에 맞게 data 구분하고 정의한다.

 

이러한 것을 Event라고하고 GPIO pin setup에서는 위에서 언급한내용과 같이 Event관련된 레지스터를 바탕으로 어느시점에 받을지를 결정해야한다. 예를들어 HIGH Event 받을 것인지 LOW, R Egde, F Edge 각각의 순간에 대해서 Event를받을지 말지를 가장 먼저 정해야한다. 해당역할을 하는 레지스터가 각각 GPHEN, GPLEN, GPREN, GPFEN이다 각각의 레지스터 bit값을 설정해줌으로써 해당 PIN 해당 시점에 Event 받게된다.

 

그리고 GPEDS 레지스터를 통해서 우리는 레지스터를 받았는지 여부를 있다.

코드로 정리해서 다시 설명하면 먼저 위와 같이 HIGH 모드인 경우 voltage값이 들어오고있을 데이터를 처리한다고하면 해당 시점에 Event 받도록 GPIO pin 설정한다. GPHEN 값을 1 셋하고 나머지는 0으로 셋해줌으로써 HIGH 경우에만 Event 받도록 설정한다.

그리고 위와같이 GPEDS 값을 while문을 통해서 지속적으로 확인함으로써 Event 발생하는지 체크한다.

만약 PIN voltage 인가되고 HIGH이된다면 Event 발생 GPEDS 해당 pin bit값이 1 set되고 우리는 반복문에서 빠져나와 Event 발생했을때의 Handler fucnction 수행하도록 구현하면 된다.

 

 

- ref

https://www.broadcom.com/

 

Broadcom Inc. | Connecting Everything

Broadcom Inc. is a global technology leader that designs, develops and supplies semiconductor and infrastructure software solutions.

www.broadcom.com

https://www.raspberrypi.org/

+ Recent posts