我想使用覆盆子针作为I2C奴隶来接收无刷万向节控制器的赞誉。
我选择GPIO.4作为SDA,选择GPIO.5作为SDL。我使用wiringPi来开发我的程序并使用中断来检测上升沿和下降沿。在中断触发后我使用digitalRead读取一位来决定边沿类型。我无法检测到SDA的下降沿。如果我选择INT_EDGE_FALLING,INT_EDGE_RISING
或INT_EDGE_BOTH
,则无关紧要。
SDA的输出是:falling edge num:0 rising edge num:1416
。
SCL上的输出是:falling edge num:862 rising edge num:1057
,我认为这两个数字应该相等。
我尝试更换两个引脚,并在digitalRead之前添加delayMicroseconds
。但他们没有工作。
有谁知道原因?
#define SDA_IO 4
#define SCL_IO 5
int fnum=0,rnum=0;
void on_data_change(){
int da;
//delayMicroseconds(5);
da = digitalRead(SDA_IO);
if(da) rnum++;
else fnum++;
}
int init_slave(){
int er;
er = wiringPiSetup();
if(er){
printf("%d :error\n",er);
return;
}
pinMode(SDA_IO,INPUT);
pullUpDnControl(SDA_IO,PUD_UP);
er = wiringPiISR(SDA_IO,INT_EDGE_BOTH,on_data_change);
if(er){
printf("%d :error\n",er);
return;
}
return er;
}
int main(){
int er = init_slave();
delay(1000);
printf("falling edge num:%d rising edge num:%d\n",fnum,rnum);
return 0;
}