S3C24XX体系的Linux GPIO控制相关API实现
来源:互联网 发布:linux lamp一键 编辑:程序博客网 时间:2024/05/09 15:40
GPIO(General Purpose Input/Output的缩写)就是芯片的引脚,引脚是可编程的可对引脚的工作模式进行设置:输入模式(检测输入信号),输出模式(输出0或1),高阻状态(常用于AD转换),还有禁止或允许上内部下拉电阻(上拉:管脚通过电阻接高电平,下拉:管脚通过电阻接地,也可以外部接上拉或下拉电阻),还有管脚复用等功能,即通过对内部寄存器的设置使引脚既可以工作在一般模式,作为普通的GPIO口使用,也可以工作在特殊模式,比如作为外部中断信号输入引脚等等。如果不设置GPIO引脚,CPU工作时有一个初始化模式,可以从datasheet(芯片手册)上了解。对GPIO的控制是编写驱动程序最常见和重要的一项工作内容。
在Linux
下面的函数是用来根据新的功能需求配置一个GPIO引脚(定义在arch/arm/plat-s
1 void s 2 { 3 void __iomem *base = S 4 unsigned long mask; 5 unsigned long con; 6 unsigned long flags; 7 8 if (pin < S 9 mask = 1 << S 10 } else { 11 mask = 3 << S 12 } 13 14 switch (function) { 15 case S 16 mask = 0; 17 function = 0; 18 break; 19 20 case S 21 case S 22 case S 23 case S 24 if (pin < S 25 function -= 1; 26 function &= 1; 27 function <<= S 28 } else { 29 function &= 3; 30 function <<= S 31 } 32 } 33 34 /* modify the specified register wwith IRQs off */ 35 36 local_irq_save(flags); 37 38 con = __raw_readl(base + 0x00); 39 con &= ~mask; 40 con |= function; 41 42 __raw_writel(con, base + 0x00); 43 44 local_irq_restore(flags); 45 } |
其中参数pin是要配置的GPIO引脚,参数function是要配置的功能。第3行,其中S
#define S
其中S
如果引脚为A端口之外GPIO端口时,它是用两位来配置具体的引脚,故掩码为2位,通过芯片手册即可获得此信息。
其中S
对于s
根据芯片手册,GPB5是由位[11:10]来控制,当该两位值为01时,则配置为输出。S
#define S
即[11:10]为01。如要要配置该GPIO为输入时,那么该两位的值就必须设置为00。
下面s
unsigned int s { void __iomem *base = S unsigned long val = __raw_readl(base); if (pin < S val >>= S val &= 1; val += 1; } else { val >>= S val &= 3; } return val | S } |
该函数根据引脚获得指定引脚配置的功能值。对于s
下面的s
void s { void __iomem *base = S unsigned long offs = S unsigned long flags; unsigned long up; if (pin < S return; local_irq_save(flags); up = __raw_readl(base + 0x08); //偏移的0x08是由于配置上拉寄存器的物理地址偏移 up &= ~( up |= to << offs; __raw_writel(up, base + 0x08); local_irq_restore(flags); } |
除此之外,还有其他的GPIO相关函数,如s
- S3C24XX体系的Linux GPIO控制相关API实现
- S3C24XX体系的Linux GPIO控制相关API实现
- S3C24XX体系的Linux GPIO控制相关API实现-顶嵌嵌入式专家写
- Linux GPIO - gpio.c(GPIO各个接口的实现)
- linux下对/sys/class/gpio中的gpio的控制
- linux下对/sys/class/gpio中的gpio的控制
- linux下AM335X的GPIO控制
- Linux下AM335X的GPIO控制
- Linux 内核关于GPIO的控制
- Linux下gpio的相关函数分析
- Linux gpio/input API
- linux GPIO驱动相关
- ARM linux进程控制相关API
- 三星s3c24xx平台GPIO操作详解
- 三星s3c24xx平台GPIO操作详解
- s3c2440的GPIO控制
- BeagleBone的GPIO控制
- GPIO相关的重要文件
- 3.7
- 适用于IE和Firefox的iframe自适应高度JS代码
- 查询商品动销率
- 总结一下自己学习语言的经验(给初学者)
- 【转】十八个绝招把你从压力中营救出来
- S3C24XX体系的Linux GPIO控制相关API实现
- 由可乐加比萨化学反应引发的联想
- 换行的方法
- 分割字符串
- 活动 - “我的面试感悟”有奖征文大赛
- 《设计模式之禅》样章连载1:原型模式之“个性化电子账单”
- 我的未来的路
- 基础作业习题
- 编程词汇