linux用户和内核空间访问AT91系列GPIO寄存器
时间:2010-12-01 来源:chenzhufly
内核空间:
我用的linux-2.6.24内核,
#include<asm-arm/arch-at91/sam9263/gpio.h> 获取寄存器的值
at91_get_gpio_value(AT91_PIN_PAXX);
设置寄存器的值
at91_set_gpio_value(AT91_PIN_PAXX,val);
还有其他的几个函数设置输入,设置输出等等 用户空间:
用户空间不能直接访问寄存器,需要通过驱动程序来访问.
部分驱动程序代码,
在驱动里面加入ioctl调用:
int at_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)
{
long val;
switch(cmd){
case 0x0001:
val=at91_get_gpio_value(AT91_PIN_PXXX);
put_user(val,(long *)arg);break;
case 0x0002:
val=at91_get_gpio_value(AT91_PIN_PXXX);
put_user(val,(long *)arg);break;
:
:
}
应用程序部分代码:
#include <sys/ioctl.h>
fd=("/dev/at",O_RDONLY);
ioctl(fd,0x0001,&i);{....} 本文来自: (www.91linux.com) 详细出处参考:http://www.91linux.com/html/article/qianrushiyingyong/20080303/9822.html
我用的linux-2.6.24内核,
#include<asm-arm/arch-at91/sam9263/gpio.h> 获取寄存器的值
at91_get_gpio_value(AT91_PIN_PAXX);
设置寄存器的值
at91_set_gpio_value(AT91_PIN_PAXX,val);
还有其他的几个函数设置输入,设置输出等等 用户空间:
用户空间不能直接访问寄存器,需要通过驱动程序来访问.
部分驱动程序代码,
在驱动里面加入ioctl调用:
int at_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)
{
long val;
switch(cmd){
case 0x0001:
val=at91_get_gpio_value(AT91_PIN_PXXX);
put_user(val,(long *)arg);break;
case 0x0002:
val=at91_get_gpio_value(AT91_PIN_PXXX);
put_user(val,(long *)arg);break;
:
:
}
应用程序部分代码:
#include <sys/ioctl.h>
fd=("/dev/at",O_RDONLY);
ioctl(fd,0x0001,&i);{....} 本文来自: (www.91linux.com) 详细出处参考:http://www.91linux.com/html/article/qianrushiyingyong/20080303/9822.html
相关阅读 更多 +