有时候在我们读取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-2023 问渠网 辽ICP备15013245号