读针级别Raspberry Pi

时间:2013-04-10 19:11:24

标签: c raspberry-pi

我一直在使用C gpio示例下的example代码。我可以设置和写入引脚而不会出现定义问题:

// GPIO setup macros. Always use INP_GPIO(x) before using OUT_GPIO(x) or SET_GPIO_ALT(x,y)
#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
#define OUT_GPIO(g) *(gpio+((g)/10)) |=  (1<<(((g)%10)*3))
#define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))

#define GPIO_SET *(gpio+7)  // sets   bits which are 1 ignores bits which are 0
#define GPIO_CLR *(gpio+10) // clears bits which are 1 ignores bits which are 0

  INP_GPIO(4); // must use INP_GPIO before we can use OUT_GPIO
  OUT_GPIO(4);
  GPIO_SET = 1<<4;

这很好用。但是,如果我想从引脚读取,我不知道该怎么办。我试图通过返回gpio + thePin来阅读它,但我相信这是给我地址而不是价值。我试着返回一个指针,但这也给了我垃圾(-232783856)。

如何从引脚读取值?

1 个答案:

答案 0 :(得分:4)

#define GPIO_LEV *(gpio+13)                  // pin level
INP_GPIO(4);                                 // pin 4 initialization for reading
unsigned int value = GPIO_LEV;               // reading all 32 pins
bool pin4_value = ((value & (1 << 4)) != 0); // get pin 4 value

此代码基于bcm2835 library中的函数bcm2835_gpio_lev,仅可用于0到31引脚。如果不起作用,请查看此库 - 读取值增加一倍。