玩转树莓派

    返回首页    发表留言
本文作者:李德强
          第三节 使用中断
 
 

        有时候在我们读取GPIO引脚信号时需要计算高电平或低电平的持续时长,如果我们采用循环的方式来处理的话逻辑上就会变的很复杂,并且性能上也不理想,这会消耗掉大量的CPU资源,而采用中断的方式则是一个很好的解决办法,wiringPi内部实现了GPIO信号的中断控制,在使用wiringPi中断时需要#include <wiringSerial.h>。我们来看一个用于计算高电平持续时间的例子:

#include <wiringPi.h>
#include <wiringSerial.h>

struct timeval timer_start;
struct timeval timer_end;

//计算持续时长
void duration()
{
    //读取电平信号
    int value = digitalRead(PORT_CS_ECHO);
    //如果是高电平
    if (value)
    {
        //计时开始
        gettimeofday(&timer_start, NULL);
        return;
    } 
    //如果是低电平,计时结束
    gettimeofday(&timer_end, NULL);
    //计算高电平时长
    long timer = (timer_end.tv_sec - timer_start.tv_sec) * 1000000 + (timer_end.tv_usec - timer_start.tv_usec);
    //do something
}

int main(int argc, char *argv[])
{
	//初始化WiringPi
	wiringPiSetup();
	//设置27号引脚为输出引脚
	pinMode(27, INPUT);
	//设置27号引脚中断响应函数
	wiringPiISR(27, INT_EDGE_BOTH, &duration);
}

 

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号