1. 程式人生 > >Linux核心驅動之GPIO子系統(一)GPIO的使用

Linux核心驅動之GPIO子系統(一)GPIO的使用

四 使用者態使用gpio監聽中斷      

首先需要將該gpio配置為中斷

echo  "rising" > /sys/class/gpio/gpio12/edge

以下是虛擬碼

int gpio_id;

struct pollfd fds[1];

gpio_fd = open("/sys/class/gpio/gpio12/value",O_RDONLY);

if( gpio_fd == -1 )

   err_print("gpio open");

fds[0].fd = gpio_fd;

fds[0].events  = POLLPRI;

ret = read(gpio_fd,buff,10);

if( ret == -1 )

    err_print("read");

while(1){

     ret = poll(fds,1,-1);

     if( ret == -1 )

         err_print("poll");

       if( fds[0].revents & POLLPRI){

           ret = lseek(gpio_fd,0,SEEK_SET);

           if( ret == -1 )

               err_print("lseek");

           ret = read(gpio_fd,buff,10);

           if( ret == -1 )

               err_print("read");

            /*此時表示已經監聽到中斷觸發了,該幹事了*/

            ...............

    }

}

記住使用poll()函式,設定事件監聽型別為POLLPRIPOLLERRpoll()返回後,使用lseek()移動到檔案開頭讀取新的值或者關閉它再重新開啟讀取新值。必須這樣做否則poll函式會總是返回。