s3c2410_gpio_setpin()等系列函数
s3c2410-GPIO操作相关系列函数解析
函数的定义在arch/arm/mach-s3c2410/gpio.c,相关的宏定义在include/asm-arm/arch-s3c2410/regs-gpio.h
(1)voids3c2410_gpio_setpin(unsigned int pin, unsigned intto);
设置相应GPIO口的输出值,例如:
pin=S3C2410_GPG2,to=0,则设置S3C2410_GPG2的输出值为0;
pin=S3C2410_GPG2,to=1,则设置S3C2410_GPG2的输出值为1。
函数定义:
- void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
- {
- void __iomem *base = S3C2410_GPIO_BASE(pin);
- unsigned long offs = S3C2410_GPIO_OFFSET(pin);
- unsigned long flags;
- unsigned long dat;
- local_irq_save(flags);
- dat = __raw_readl(base + 0x04);
- dat &= ~(1 << offs);
- dat |= to << offs;
- __raw_writel(dat, base + 0x04);
- local_irq_restore(flags);
- }
- EXPORT_SYMBOL(s3c2410_gpio_setpin);
(2)unsigned int s3c2410_gpio_getpin(unsigned intpin);
获取相应GPIO口的值。
函数定义:
- unsigned int s3c2410_gpio_getpin(unsigned int pin)
- {
- void __iomem *base = S3C2410_GPIO_BASE(pin);
- unsigned long offs = S3C2410_GPIO_OFFSET(pin);
- return __raw_readl(base + 0x04) & (1<< offs);
- }
- EXPORT_SYMBOL(s3c2410_gpio_getpin);
(3)voids3c2410_gpio_cfgpin(unsigned int pin, unsigned intfunction);
设置相应GPIO口的工作模式,输入、输出、中断等。
函数定义:
- void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)
- {
- void __iomem *base = S3C2410_GPIO_BASE(pin);
- unsigned long mask;
- unsigned long con;
- unsigned long flags;
- if (pin < S3C2410_GPIO_BANKB) {
- mask = 1 << S3C2410_GPIO_OFFSET(pin);
- } else {
- mask = 3 << S3C2410_GPIO_OFFSET(pin)*2;
- }
- local_irq_save(flags);
- con = __raw_readl(base + 0x00);
- con &= ~mask;
- con |= function;
- __raw_writel(con, base + 0x00);
- local_irq_restore(flags);
- }
- EXPORT_SYMBOL(s3c2410_gpio_cfgpin);
(4)unsignedint s3c2410_gpio_getcfg(unsigned int pin);
获取相应GPIO口的工作模式,输入、输出、中断等。
函数定义:
- unsigned int s3c2410_gpio_getcfg(unsigned int pin)
- {
- void __iomem *base = S3C2410_GPIO_BASE(pin);
- unsigned long mask;
- if (pin < S3C2410_GPIO_BANKB) {
- mask = 1 << S3C2410_GPIO_OFFSET(pin);
- } else {
- mask = 3 << S3C2410_GPIO_OFFSET(pin)*2;
- }
- return __raw_readl(base) & mask;
- }
- EXPORT_SYMBOL(s3c2410_gpio_getcfg);
(5)voids3c2410_gpio_pullup(unsigned int pin, unsigned intto);
设置相应的GPIO口的电平,例如:
pin=S3C2410_GPG2,to=0,则拉低S3C2410_GPG2,也就是设置S3C2410_GPG2的值为0;
pin=S3C2410_GPG2,to=1,则拉高S3C2410_GPG2,也就是设置S3C2410_GPG2的值为1。
函数定义:
- void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)
- {
- void __iomem *base = S3C2410_GPIO_BASE(pin);
- unsigned long offs = S3C2410_GPIO_OFFSET(pin);
- unsigned long flags;
- unsigned long up;
- if (pin < S3C2410_GPIO_BANKB)
- return;
- local_irq_save(flags);
- up = __raw_readl(base + 0x08);
- up &= ~(1L << offs);
- up |= to << offs;
- __raw_writel(up, base + 0x08);
- local_irq_restore(flags);
- }
- EXPORT_SYMBOL(s3c2410_gpio_pullup);
(6)unsignedint s3c2410_modify_misccr(unsigned int clear, unsigned intchange);
杂项设置,设置寄存器MISCCR,具体看函数定义。
函数定义:
- unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change)
- {
- unsigned long flags;
- unsigned long misccr;
- local_irq_save(flags);
- misccr = __raw_readl(S3C2410_MISCCR);
- misccr &= ~clear;
- misccr ^= change;
- __raw_writel(misccr, S3C2410_MISCCR);
- local_irq_restore(flags);
- return misccr;
- }
- EXPORT_SYMBOL(s3c2410_modify_misccr);
(7)ints3c2410_gpio_getirq(unsigned int pin);
获取相应的GPIO口所对应的中断号。
函数定义:
- int s3c2410_gpio_getirq(unsigned int pin)
- {
- if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15_EINT23)
- return -1;
- if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7)
- return -1;
- if (pin < S3C2410_GPF4)
- return (pin - S3C2410_GPF0) + IRQ_EINT0;
- if (pin < S3C2410_GPG0)
- return (pin - S3C2410_GPF4) + IRQ_EINT4;
- return (pin - S3C2410_GPG0) + IRQ_EINT8;
- }
- EXPORT_SYMBOL(s3c2410_gpio_getirq);
(8)ints3c2410_gpio_irqfilter(unsigned int pin, unsigned int on, unsignedint config);
中断过滤配置,具体看函数定义。
函数定义:
- int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on,
- unsigned int config)
- {
- void __iomem *reg = S3C2410_EINFLT0;
- unsigned long flags;
- unsigned long val;
- if (pin < S3C2410_GPG8 || pin > S3C2410_GPG15)
- return -1;
- config &= 0xff;
- pin -= S3C2410_GPG8_EINT16;
- reg += pin & ~3;
- local_irq_save(flags);
- val = __raw_readl(reg);
- val &= ~(0xff << ((pin & 3) * 8));
- val |= config << ((pin & 3) * 8);
- __raw_writel(val, reg);
- val = __raw_readl(S3C2410_EXTINT2);
- val &= ~(1 << ((pin * 4) + 3));
- val |= on << ((pin * 4) + 3);
- __raw_writel(val, S3C2410_EXTINT2);
- local_irq_restore(flags);
- return 0;
- }
- EXPORT_SYMBOL(s3c2410_gpio_irqfilter);
转载于:https://www.cnblogs.com/techstone/archive/2012/11/24/3321360.html
s3c2410_gpio_setpin()等系列函数相关推荐
- windows线程同步-原子操作-Interlocked系列函数(用户模式)
Interlocked系列函数用来保证原子访问. InterlockedExchangeAdd提供保证long类型的原子操作. InterlockedExchangeAdd64提供long long ...
- 浅析php curl_multi_*系列函数进行批量http请求
何起: 一系列 数量很大 数据不热 还希望被蜘蛛大量抓取的页面,在蜘蛛抓取高峰时,响应时间会被拉得很高. 前人做了这样一个事儿:页面分3块,用3个内部接口提供,入口文件用curl_multi_*系列函 ...
- 线程模型、pthread 系列函数 和 简单多线程服务器端程序
一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 "线程实现"建立在&qu ...
- UNIX再学习 -- exit 和 wait 系列函数
我们一开始讲进程环境时,就有提到了.进程有 8 种方式使进程终止. 其中 5 种为正常终止,它们是: (1)在 main 函数中执行 return (2)调用 exit 函数,并不处理文件描述符,多进 ...
- 《Windows核心编程》---Interlocked原子访问系列函数
所谓原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源.Interlocked系列函数提供了这样的操作.所有这些函数会以原子方式来操控一个值. Interlock ...
- 秒杀多线程第三篇 原子操作 Interlocked系列函数
上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...
- mem库系列函数合集(memset、memchr、memcmp、memcpy)
关于Mem函数,网上五花八门,使初学者很容易迷失方向,笔者在这里做一个常用函数的总结.希望对读者起到些许帮助. 想了解Str系列函数的,请猛戳这里→Str系列函数大全 代码 //头文件:#includ ...
- Str库系列函数合集(strlen、strcpy、strcmp、strcat、strchr等)
关于Str函数,网上五花八门,使初学者很容易迷失方向,笔者在这里做一个常用函数的总结.希望对读者起到些许帮助. 后续会持续更新特殊函数~ 想了解mem系列函数的,请猛戳这里→mem系列函数 代码 // ...
- php查询socket数据包头,php 查询数组值php中关于socket的系列函数总结
本文列举了所有关于PHP语言中使用socket相关服务的一些函数.注意使用如下函数之前,你需要确保你的socket已打开,如果你没有打开,请编辑你的php.ini文件,去掉下面这行前面的注释(分号): ...
- Cocos2d-x编程中CCRemoveSelf与CCCallFunc系列函数不能一起使用
可能是"头晕"了,我在编码中随意写出了如下代码: CCLabelTTF* lbl=CCLabelTTF::create("Hi, you have succeeded i ...
最新文章
- tensorflow入门(二)
- “叽里呱啦”说英语,这家公司要用AI增值语言输出能力
- Delphi访问网页中的下拉菜单
- 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程
- 浅谈代码的执行效率(2):编译器的威力
- BLE安全机制从入门到放弃
- android 空白占位符,android textview空格占位符以及一些其他占位符汇总
- 云服务被归类为IDC业务 提供云服务必须持证上岗
- 网页与服务器 — 重定向常见异常状态码
- 无PS只需几步操作轻松改变图片尺寸大小,而且一点都不失真!
- python写入txt不覆盖_python不能覆盖文件内容如何解决
- matlabrobert锐化_常用图像锐化MATLAB实现
- 使用安全工具快速查找挂马,和监控防止再次挂马
- freecodecamp小练习——Falsy Bouncer过滤数组假值
- 最详BF算法和KMP算法
- 〖Python 数据库开发实战 - Python与MySQL交互篇⑰〗- 项目实战 - 实现用户管理 - 修改用户
- 原生js实现点击按钮显示/隐藏图片
- 数据库模型设计——历史表与版本号设计
- python立即关机_Python之电脑好帮手—自动定时关机
- 初中OJ1997【2015.8.3普及组模拟赛】WZK打雪仗(war)
热门文章
- ES6 let 与 const 与 var 的区别与使用
- 小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下...
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_3 Mybatis的CRUD-修改和删除操作
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_03maven一键构建概念
- 小论坛 之Linux服务器搭建Apache PHP mysql 环境
- Ansible 命令
- Enterprise Solution(2.2.20130525) 解决方案配置与源代码下载
- 实现AJAX回传过程中禁止用户重复提交
- 手机验证码免费10条\java、C#、html....
- Python pycharm(windows版本)部署spark环境