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()函式,設定事件監聽型別為POLLPRI和POLLERR在poll()返回後,使用lseek()移動到檔案開頭讀取新的值或者關閉它再重新開啟讀取新值。必須這樣做否則poll函式會總是返回。