首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

GPIO端口设置input/output有关问题

2012-05-20 
GPIO端口设置input/output问题请问如果我要设置一个GPIO引脚为input或output, 是应该通过设置GPxCON寄存器

GPIO端口设置input/output问题
请问如果我要设置一个GPIO引脚为input或output, 是应该通过设置GPxCON寄存器呢还是直接调用linux的gpio_direction_input()呢? 后者的话Linux又是怎样通过根据不同硬件进行配置的呢?

初学嵌入式,对这些基础不太理解,请各位大虾赐教。。。

[解决办法]
你要进行input或output设置肯定是要对那个寄存器进行操作的,而具体怎么操作就要看啦,你可以直接配置这个寄存器,而调用函数的话,一般这个函数都会带个地址参数的
[解决办法]
可不可以调用gpio_direction_input(),就要看你用的Linux系统了,这系统是针对你的开发板移植过来的Linux,移植的时候是否对gpio_direction_input()做了支持,这需要确定一下。
而直接配置寄存器,肯定是不成问题的。不过需要注意一下,在Linux下,是通过虚拟内存来访问任何资源的,所以这时不能直接用寄存器的物理地址来访问寄存器,而需要得到它的虚拟地址。而得到虚拟地址的方法很多。比如使用ioremap对以某地址为首地址的指定大小空间进行虚拟映射,得到虚拟首地址,之后即可访问了
[解决办法]
给你个例子,在目录linux/arch/arm/mach-at91/gpio.c中

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

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

热点排行