하드웨어
저번 회로도에 이어 부져를 EZ-S3C6410 보드에서 제어하기 위해서 기본적으로 알아야 할 함수에 대하여 설명하도록 하겠습니다.
부져는 GPIO를 이용하여 ON/OFF 하므로 GPIO에 관한 함수들을 소개합니다.
1. GPIO신호를 부가적인 기능을 설정하는 함수
3. GPIO신호를 출력하는 함수
위의 4가지 함수를 순서대로 설명하면
1. GPIO신호를 부가적인 기능을 설정하는 함수
요즘 MCU의 경우에는 하나의 신호가 여러가지 기능을 복합적으로 사용하므로 어떤 기능으로 사용할지를 신호를 사용전에
설정을 해 주어야 한다. S3C6410의 경우에는 다음 함수를 제공한다.
int s3c_gpio_cfgpin(unsigned int pin, unsigned int config)
이 함수는 arch/arm/plat-s3c/gpio-config.c 에 소스코드가 있으면 이 함수를 사용하기 위해서 다음과
같이 헤더파일을 추가해 주어야 한다.
#include <plat/gpio-cfg.h>
다음은 사용 방법 예제이다.
사용예 1> S3C6410의 GPIO Q Port의 GPIOQ2 를 GPIO 출력으로 설정
s3c_gpio_cfgpin (S3C64XX_GPQ(2), S3C64XX_GPG_OUTPUT(2));
사용예 2> S3C6410의 GPIO H Port의 GPIOH5 를 GPIO 입력으로 설정
s3c_gpio_cfgpin (S3C64XX_GPH(5), S3C64XX_GPH_INPUT(5));
사용예 3> S3C6410의 GPIO F Port의 GPIOF13 을 인터럽트로 설정
s3c_gpio_cfgpin (S3C64XX_GPF(13), S3C64XX_GPF13_EINT_G4_13);
3. GPIO신호를 읽어 오는 함수는 gpio_get_value( gpio_number ) 입니다.
이 함수는 커널의 arch/arm/mach-s3c6400/include/mach/gpio.h 파일에서
#define gpio_get_value __gpio_get_value
로 선언되어 있습니다.
여기서 다시 __gpio_get_value 함수는 커널의 drivers/gpio/gpiolib.c 에 소스코드가 있으면 이 함수를 사용하기
위해서 다음과 같이 헤더파일을 추가해 주어야 한다.
#include <mach/gpio.h>
다음은 사용방법 예제이다.
사용 예> S3C6410의 GPIO H Port의 GPIOH5 를 GPIO 입력으로 설정한 값을 읽는다.
gpio_get_value( S3C64XX_GPH(5) )
S3C64XX_GPH(5) 는 arch/arm/mach-s3c6400/include/mach/gpio.h 에 정의되어 있는 GPIO의 번호이다.
[참고]
이 gpio_get_value() 함수는 커널에서 제공하는 함수이며, 2.6에서는 대부분의 GPIO를 읽어오는 방법은 이 함수를 이용하지만
간혹 이 함수와 연결되어 있지 않는 경우에는 직접 GPIO의 주소를 이용하여 입력값을 읽어와야 한다.
4. GPIO신호를 읽어 오는 함수는 gpio_set_value( gpio_nubmer, value) 입니다.
이 함수는 커널의 arch/arm/mach-s3c6400/include/mach/gpio.h 파일에서
#define gpio_set_value __gpio_set_value
로 선언되어 있습니다.
여기서 다시 __gpio_set_value 함수는 커널의 drivers/gpio/gpiolib.c 에 소스코드가 있으면 이 함수를 사용하기
위해서 다음과 같이 헤더파일을 추가해 주어야 한다.
#include <mach/gpio.h>
다음은 사용방법 예제이다.
사용 예> S3C6410의 GPIO Q Port의 GPIOQ2 를 GPIO 출력으로 설정한 값을 출력한다.
gpio_set_value( S3C64XX_GPQ(2), 1 ); // High 출력
gpio_set_value( S3C64XX_GPQ(2), 0 ); // Low 출력
[참고]
이 gpio_set_value() 함수는 커널에서 제공하는 함수이며, 2.6에서 대부분의 GPIO를 출력하는 방법은 이 함수를 이용하지만
간혹 이 함수와 연결되어 있지 않는 경우에는 직접 GPIO의 주소를 이용하여 출력해야 한다.
다음에는 디바이스드라이버를 이용한 부져 제어 소스 전문을 올리도록 하겠습니다.