毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

GPIO端口设置input/output问题

更新时间:2012-5-17:  来源:毕业论文

请问如果我要设置一个GPIO引脚为input或output, 是应该通过设置GPxCON寄存器呢还是直接调用linux的gpio_direction_input()呢? 后者的话Linux又是怎样通过根据不同硬件进行配置的呢?
gpio_direction_input()这个函数就是设置GPxCON寄存器的吧
你要进行input或output设置肯定是要对那个寄存器进行操作的,而具体怎么操作就要看啦,你可以直接配置这个寄存器,而调用函数的话,一般这个函数都会带个地址参数的
可不可以调用gpio_direction_input(),就要看你用的Linux系统了,这系统是针对你的开发板移植过来的Linux,移植的时候是否对gpio_direction_input()做了支持,这需要确定一下。
而直接配置寄存器,肯定是不成问题的。不过需要注意一下,在Linux下,是通过虚拟内存来访问任何资源的,所以这时不能直接用寄存器的物理地址来访问寄存器,而需要得到它的虚拟地址。而得到虚拟地址的方法很多。比如使用ioremap对以某地址为首地址的指定大小空间进行虚拟映射,得到虚拟首地址,之后即可访问了
谢谢各位,是不是我可以这样理解,每个mach针对自己的硬件结构实现了gpio_direction_input()函数,如果是这样的话我应该在mach-xxx(我的平台目录)中能找到这个函数的实现吧?可是我并没有找到。
我看的是board-am3517evm.c,它里面调用了gpio_direction_input(),包含了头文件#include <linux/gpio.h>, 应该就是调用的这里面的gpio_direction_input()函数吧?
这个头文件里是这样定义的:

static inline int gpio_direction_input(unsigned gpio)
{
return -ENOSYS;
}

这个函数并没有实现具体功能,但整个内核功能正常,这是什么原因呢?
给你个例子,在目录linux/arch/arm/mach-at91/gpio.c中

int gpio_direction_input(unsigned pin)
{
void __iomem *pio = pin_to_controller(pin);
unsigned mask = pin_to_mask(pin);

if (!pio || !(__raw_readl(pio + PIO_PSR) & mask))
return -EINVAL;
__raw_writel(mask, pio + PIO_ODR);
return 0;
}

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。