GPIO 제어 구조
- GPIO(general purpose input output)란?
* GPIO는 프로세서에서 노출되는 하나의 연결 단자를 입력이나 출력으로 고정시키지 않고 선택적으로 사용할 수 있게 융통성을 높인 범용 입출력 단자.
* GIPO 중 일부는 SPI, I2C, I2S, PWM, UART와 같은 특정 기능 구성 가능.
GPIO 제어 API
GPIO LED 제어 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/delay.h> #include <linux/gpio.h> //led pin number int led[] = { 14,15, }; static int led_init(void) { int ret = 0; int i; for (i = 0; i < ARRAY_SIZE(led); i++) { //gpio 할당 요청 ret = gpio_request(led[i], "gpio led"); if(ret){ printk("FAILED Request gpio %d. error : %d \n", led[i], ret); } else { // 출력으로 설정 gpio_direction_output(led[i], 0); } } return ret; } static void led_exit(void) { int i; for (i = 0; i < ARRAY_SIZE(led); i++){ //gpio 입력 gpio_set_value(led[i], 0); //gpio 해제 gpio_free(led[i]); } } static void led_set_data(int data) { int i; for(i = 0; i < ARRAY_SIZE(led); i++){ //gpio 입력 gpio_set_value(led[i], (data & (0x01 << i)) != 0); } printk("%s, data = %d\n", __FUNCTION__, data); } static int mod_hw_led_init(void) { int ret; int i; ret = led_init(); if(ret == 0){ for(i = 1; i < 4; ++i){ led_set_data(i); mdelay(1000); } led_set_data(0); } // 사용자 공간에서 접근할 수 있도록 sysfs에 노출 gpio_export(14, 1); return 0; } static void mod_hw_led_exit(void) { led_exit(); } module_init(mod_hw_led_init); module_exit(mod_hw_led_exit); EXPORT_SYMBOL(led_set_data); MODULE_AUTHOR("PlanX Studio"); MODULE_DESCRIPTION("mod_hw_led"); MODULE_LICENSE("Dual BSD/GPL"); | cs |
요약
- GPIO는 프로세서에서 노출되는 하나의 연결 단자를 입력이나 출력으로 고정시키지 않고 선택적으로 사용할 수 있게 융통성을 높인 범용 입출력 단자
- gpio_request() 할당 및 검사
- gpio_free() 제거
- gpio_direction_input() 입력 지정
- giop_direction_output() 출력 지정
- gpio_get_value() 값 읽기
- gpio_set_value() 값 쓰기
- gpio_export() 사용자 공간에서 접근할 수 있도록 sysfs에 노출
- gpio_to_irq() gpio 번호를 irq번호로 변환
출처 : 인지소프트웨어 기술포럼 ( 전유진 강사님 수업자료)
'임베디드 > 디바이스 드라이버' 카테고리의 다른 글
Misc 디바이스 드라이버1 (0) | 2017.12.26 |
---|---|
디바이스 드라이버 구조 (0) | 2017.12.26 |
SYSFS (1) | 2017.12.26 |
PROCFS (0) | 2017.12.22 |
커널 모듈 구현 (0) | 2017.12.21 |