ARM Linux下访问GPIO端口
/arm/plat-s3c24xx/gpio.c
s3c2410_gpio_cfgpin //配置端口的GPIO的功能
s3c2410_gpio_getcfg//读取功能配置
s3c2410_gpio_pullup//配置上拉电阻
s3c2410_modify_misccr //杂项配置
s3c2410_gpio_getirq//给定端口,转换出IRQ号
s3c2410_gpio_irqfilter//配置IRQ过滤使能与否
s3c2410_gpio_setpin//写数据到端口
s3c2410_gpio_getpin//从端口读数据
以下代码摘自Leds的驱动程序,旨在说明linux下如何访问寄存器
static unsigned long led_table [] =
{
S3C2410_GPB5,
S3C2410_GPB6,
S3C2410_GPB7,
S3C2410_GPB8,
};
/* 用来指定GPIO引脚的功能:输出 */
static unsigned int led_cfg_table [] =
{
S3C2410_GPB5_OUTP,
S3C2410_GPB6_OUTP,
S3C2410_GPB7_OUTP,
S3C2410_GPB8_OUTP,
};
static int gt2440_leds_ioctl(
structinode *inode,
structfile *file,
unsignedint cmd,
unsignedlong arg)
{
if(arg > 4)
{
return-EINVAL;
}
switch(cmd)
{
caseIOCTL_LED_ON:
//设置指定引脚的输出电平为0
s3c2410_gpio_setpin(led_table[arg], 0);
return0;
caseIOCTL_LED_OFF:
//设置指定引脚的输出电平为1
s3c2410_gpio_setpin(led_table[arg], 1);
return0;
default:
return-EINVAL;
}
}
static struct file_operations dev_fops = {
.owner = THIS_MODULE,
.ioctl = gt2440_leds_ioctl,
};
static struct miscdevice misc = {
.minor= MISC_DYNAMIC_MINOR,
.name= DEVICE_NAME,
.fops= &dev_fops,
};
static int __init dev_init(void)
{
intret;
inti;
for(i = 0; i < 4; i++)
{
s3c2410_gpio_cfgpin(led_table[i],led_cfg_table[i]);
s3c2410_gpio_setpin(led_table[i],0);// 设置相应GPIO口的值
}
ret= misc_register(&misc);
printk(DEVICE_NAME" initialized\n");
returnret;
}
static void __exit dev_exit(void)
{
misc_deregister(&misc);
}
module_init(dev_init);
module_exit(dev_exit); *******************************************************************************
ARMLinuxGPIO端 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)