覆盆子gpio只读上升边缘

时间:2015-05-19 11:40:18

标签: raspberry-pi i2c gpio

我想使用覆盆子针作为I2C奴隶来接收无刷万向节控制器的赞誉。

我选择GPIO.4作为SDA,选择GPIO.5作为SDL。我使用wiringPi来开发我的程序并使用中断来检测上升沿和下降沿。在中断触发后我使用digitalRead读取一位来决定边沿类型。我无法检测到SDA的下降沿。如果我选择INT_EDGE_FALLING,INT_EDGE_RISINGINT_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;
}    

0 个答案:

没有答案