[gpio]Linux GPIO簡單使用方式2-sysfs


轉自:http://blog.csdn.net/cjyusha/article/details/50418862

Linux嵌入式設備開發中,對GPIO的操作是最常用的,在一般的情況下,一般都有對應的驅動,應用程序打開對應的驅動,然后通過ioctl函數就可以對其進行操作。在linux中,其實有一個通用的GPIO驅動,應用通過調用文件的形式來進行讀寫操作,這個文件是/sys/class/gpio,本文就簡單的來講解一下通用GPIO接口的讀寫。

一、 以echo的形式調用system函數進行操作,這種形式編程比較簡單,結構比較清晰,如下:

- set_gpio64_low

void set_gpio64_low(void)  
{     
    system("echo 64 > /sys/class/gpio/export");  
    system("echo out > /sys/class/gpio/gpio64/direction");  
    system("echo 0 > /sys/class/gpio/gpio64/value");  
}  

- set_gpio64_high

void set_gpio64_high(void)  
{     
    system("echo 64 > /sys/class/gpio/export");  
    system("echo out > /sys/class/gpio/gpio64/direction");  
    system("echo 1 > /sys/class/gpio/gpio64/value");  
}  

二、 通過文件的形式來調用

- set_io_value_low

int set_io_value_low(int gpio)  
{  
    FILE *fp;  
    char buffer[10];  
    int value;  
    char s[50]="";  
    char s1[50]="";  
    if ((fp = fopen("/sys/class/gpio/export", "w")) == NULL)   
    {  
        printf("Cannot open export file.\n");  
        return -1;  
    }  
    fprintf(fp, "%d", gpio);  
    fclose(fp);  
  
    sprintf(s,"/sys/class/gpio/gpio%d/direction",gpio);  
    if ((fp = fopen(s, "rb+")) == NULL)   
    {  
        printf("Cannot open %s.\n",s);  
        return -1;  
    }  
    fprintf(fp, "out");  
    fclose(fp);  
          
    sprintf(s1,"/sys/class/gpio/gpio%d/value",gpio);  
  
    if ((fp = fopen(s1, "rb+")) == NULL)   
    {  
        printf("Cannot open %s.\n",s1);  
        return -1;  
    }  
    strcpy(buffer,"0");  
    fwrite(buffer, sizeof(char), sizeof(buffer) - 1, fp);         
    fclose(fp);  
    return 1;  
  
}  

- set_io_value_high

int set_io_value_high(int gpio)  
{  
    FILE *fp;  
    char buffer[10];  
    int value;  
    char s[50]="";  
    char s1[50]="";  
    if ((fp = fopen("/sys/class/gpio/export", "w")) == NULL)   
    {  
        printf("Cannot open export file.\n");  
        return -1;  
    }  
    fprintf(fp, "%d", gpio);  
    fclose(fp);  
  
    sprintf(s,"/sys/class/gpio/gpio%d/direction",gpio);  
    if ((fp = fopen(s, "rb+")) == NULL)   
    {  
        printf("Cannot open %s.\n",s);  
        return -1;  
    }  
    fprintf(fp, "out");  
    fclose(fp);  
          
    sprintf(s1,"/sys/class/gpio/gpio%d/value",gpio);  
  
    if ((fp = fopen(s1, "rb+")) == NULL)   
    {  
        printf("Cannot open %s.\n",s1);  
        return -1;  
    }  
    strcpy(buffer,"1");  
    fwrite(buffer, sizeof(char), sizeof(buffer) - 1, fp);         
    fclose(fp);  
    return 1;  
}  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM