首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于GPIO (OUT_GPIO和INP_GPIO)的Raspberry Pi位掩码

用于GPIO (OUT_GPIO和INP_GPIO)的Raspberry Pi位掩码
EN

Stack Overflow用户
提问于 2013-08-16 18:19:05
回答 1查看 577关注 0票数 0

我正在尝试同时更改多个管脚的状态(输出/输入)(使用位掩码)。

一个引脚的代码是:

代码语言:javascript
复制
#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
#define OUT_GPIO(g) *(gpio+((g)/10)) |=  (1<<(((g)%10)*3))

我真的不明白这段代码是做什么的。

比方说,gpio := 0x20200000,所以对于引脚1,应该是

代码语言:javascript
复制
 10 0000 0010 0000 0000 0000 0000 0000 + 0 = (10 0000 0010 0000 0000 0000 0000 0000 + 0) & ~11 1000 = 0

我认为这不可能是正确的。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2014-08-17 10:53:30

因此,根据broadcom arm外设手册,在要求我们为您读出之前,您应该已经参考了该手册...0x20200000是gpio引脚0到9的功能选择寄存器。对于每组10引脚,每个gpio都有一个寄存器3位,用于选择8种功能中的一种,2位未使用。因此,模10是为了找出哪个功能选择寄存器,乘以3是每个gpio引脚的三个位。

位模式0b000将引脚定义为输入,位模式0b001定义为输出,因此您引用的这段代码要么将三位置零,要么将三位与1相加,这当然是错误的,因为其他两位不能保证为零。要正确使用该代码,您可能应该修复它,或者将gpio设置为输入,然后设置为输出,以便清除三位,然后设置一位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18271030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档