S3C6410的GPIO引脚相对来说比较多,而且大部分引脚都具有多重复用功能,如何在linux上用最简单的方式来控制GPIO这需要我们好好研究一下底层的代码了,其实方法有很多种,鉴于在操作系统端控制GPIO并不像控制传统的单片机那样。

这里我将提及一种方法来讲述,这种方法也是我至今看到最简单的方法

首先我们打开linux-3.0.1\arch\arm\plat-samsung\include\plat下gpio-cfg.h这个头文件,仔细浏览后发现,我们可以使用的函数:

1.设置单一io口

int s3c_gpio_cfgpin(unsigned int pin, unsigned int to);

里面有两个参数,第一个pin是选择哪个引脚,第二个参数有三种定义

设置成输出模式  #define S3C_GPIO_INPUT (S3C_GPIO_SPECIAL(0))

设置成输入模式  #define S3C_GPIO_OUTPUT (S3C_GPIO_SPECIAL(1))

复用功能选择    #define S3C_GPIO_SFN(x) (S3C_GPIO_SPECIAL(x))

其实根据我使用的情况来说第1,2两个定义根本就是鸡肋,只有第3个S3C_GPIO_SFN(x)才是最有用的,举个例子:

Ok6410的开发板的DS18B20的接口,器件被接在GPE0上,而GPE有如下复用功能

其中的参数x就是对应上表的复用功能,当x=0时是输入功能,x=1时是输出功能......下面我想不用我说大家也明白了吧。

这个例子s3c_gpio_cfgpin(S3C64XX_GPE(0), S3C_GPIO_SFN(1));说明GPE0口配置为输出模式。

1.获取io口的配置
unsigned s3c_gpio_getcfg(unsigned int pin);这个函数跟上面讲到的刚好相反,是读取当前一个io口的配置,pin参数是要获得的引脚配置,函数会返回一个相应的值

2.设置一组io
int s3c_gpio_cfgpin_range(unsigned int start, unsigned int nr, unsigned int cfg);

第一个参数start是开始的引脚,第二个nr是从start开始到第一个,注意配置的io必须是同一组的io,第三个cfg是配置状态

3.设置单一io的上拉电阻

int s3c_gpio_setpull(unsigned int pin, s3c_gpio_pull_t pull);

设置单个io为不同的上拉模式,模式分别为

S3C_GPIO_PULL_NONE

S3C_GPIO_PULL_DOWN

S3C_GPIO_PULL_UP

5.获取io口的上拉电阻配置

s3c_gpio_pull_t s3c_gpio_getpull(unsigned int pin);

获取单个io的上拉配置状态,会返回一个配置模式

6.设置一组io(包括上拉电阻)

int s3c_gpio_cfgall_range(unsigned int start, unsigned int nr, unsigned int cfg, s3c_gpio_pull_t pull);

讲了这么多看到最后一个函数不讲也应该能看出到底是如何配置了吧

讲了这么多io口的配置方法,来看看如何来配置输出的电平状态。

打开linux-3.0.1\include\linux下的gpio.h的头文件,发现里面有好多的引脚函数其中最重要的也就这么几句

1.设置一个引脚的电平状态

static inline void gpio_set_value(unsigned gpio, int value)

第一个参数gpio为指定的引脚,第二个参数value为要设置的高低电平

2.获得一个引脚的电平状态

static inline int gpio_get_value(unsigned gpio)

第一个参数为gpio为指定的引脚,会返回一个电平状态

讲了上面这些我们基本能控制一个io了,现在我在介绍一种方法,这种方法只能进行输入和输出不能进行io的复用配置

1.io输出

static inline int gpio_direction_output(unsigned gpio, int value)

第一个参数gpio为指定的引脚,第二个参数为电平状态

2.io输入

static inline int gpio_direction_input(unsigned gpio)

第一个参数gpio为指定的引脚,会返回一个电平状态

出了上面方法外我们还可以直接对gpio的地址访问,linux已经为我们准备了这样的接口函数

#define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a))
#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v))
其中的a值为
S3C64XX_GPMCON

S3C64XX_GPMPUD

S3C64XX_GPMDAT

在reg-gpio.h中已经有了以上的定义

V为具体的数值。

【整理】--【GPIO】OK6410的更多相关文章

  1. GPIO知识点整理

    //GPIO的作业,抄两次,注意:本文件是知识点的整理不是可以直接运行的程序. //STM32必须包含的头文件 #include "stm32f10x.h" //GPIO相关头文件 ...

  2. 转 -- OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结

    转载地址:http://emouse.cnblogs.com/ 飞凌官方提供了一键下载烧写linux的方式,相对来说比较方便,但是对于开发来说不够灵活,因此这篇文章把tftp相关的点介绍一下,整理下其 ...

  3. Android(Linux)控制GPIO的方法及实时性分析

    Linux下控制GPIO的方法有N种,详细请参考<RPi GPIO Code Samples>,文中用十多种语言演示了如何控制GPIO,非常全面详尽.因此,这里不再多做赘述,仅把调试过程中 ...

  4. STM32之GPIO操作

    啊哈.没办法.外国人的芯片就喜欢用英文来命名,所以中文的:通用输入/输出  就用GPIO来代替..谁叫哥们都不是外国人呢.好啦.胡扯了一下,借用唐伯虎点秋香的话:小小书童,可笑可笑... 知道了GPI ...

  5. 推荐!国外程序员整理的 PHP 资源大全

    推荐!国外程序员整理的 PHP 资源大全 2014/08/02 · PHP, 工具与资源 · 8.5K 阅读 · 1 评论· php 分享到:0 与<YII框架>不得不说的故事—安全篇 R ...

  6. linux内核中的GPIO系统之(2):pin control subsystem

    一.前言 在linux2.6内核上工作的嵌入式软件工程师在pin control上都会遇到这样的状况: (1)启动一个新的项目后,需要根据硬件平台的设定进行pin control相关的编码.例如:在b ...

  7. ok6410 u-boot-2012.04.01移植二修改源码支持单板

    继ok6410 u-boot-2012.04.01移植一后修改代码,对ok6410单板初始化,主要包括时钟.串口.NAND.DDR等初始化.这些工作在以前的裸板程序都写了,直接拿来用.我觉得先写裸板程 ...

  8. EasyARM i.mx287学习笔记——通过modbus tcp控制GPIO

    0 前言     本文使用freemodbus协议栈,在EasyARM i.mx287上实现了modbus tcp从机. 在该从机中定义了线圈寄存器.当中线圈寄存器地址较低的4位和EasyARM的P2 ...

  9. Python自动化编程-树莓派GPIO编程(二)

    树莓派我们编程一般都直接用高效的python,针对于GPIO编程,python也是有这一方面的库的,这里最有名也是最常用的就是RPI.GPIO了.这个库是专门为树莓派GPIO编程所设计的,利用它你可以 ...

随机推荐

  1. ZooKeeper概述(转)

    译自http://zookeeper.apache.org/doc/trunk/zookeeperOver.html ZooKeeper是一个用于分布式应用的开源分布式协调服务.它提供了简单的原语集合 ...

  2. KVC 与 KVO

    一.Key-Value Coding (KVC)键值编码 KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就是基于 KVC ...

  3. Dapper关联查询

    1.一对一: using (IDbConnection connecton = new MySqlConnection(ConfigurationManager.ConnectionStrings[& ...

  4. Window 命令

    tracert XXX.XXX.XXX.XXX 路由追踪命令,可以显示到目的IP所经过的路由    

  5. Java Calendar 类的时间操作

    Java Calendar 类的时间操作 标签: javaCalendar时间Date 2013-07-30 17:53 140401人阅读 评论(7) 收藏 举报 分类: 所有(165) Java ...

  6. 在Visual Studio 2012 Blue theme下使用Dark theme的文本编辑器颜色设置

    Visual Studio 2012 默认提供了3种color theme: blue,light,和dark.其中dark的文本编辑器颜色设定很爽,可是整个菜单项加上一些小的窗口如Find Resu ...

  7. 第三章 EnumUtil根据值获取枚举对象

    项目中使用枚举类的好处这里不再赘述,在使用枚举值时,通常需要根据值来获取枚举对象,下面介绍两种实现方案: 1.在枚举类中定义方法实现 首先给出如下性别枚举类: public enum SexEnum ...

  8. 树莓派安装Transmission-daemon出现的问题

    1,安装时发现默认的源里面没有transmission-daemon包 pi@fynn:/etc/apt/sources.list.d $ sudo apt-get install transmiss ...

  9. eclipse如何安装cdt

    原文地址:http://zhidao.baidu.com/link?url=9vSDAkpKJjLIIXP9wFqfjTSf-PmrEr9excDc-A3rzRh46jgzzbud0Z7gzjfxT8 ...

  10. H5、CSS3属性的支持性以及flex

    一.项目中用到一个flex属性,但是应用了flex的父容器只设置了width,没有设置height,此时每一个应用了上面提到的属性的样式的div都重叠在了一起,在IE10,IE11出问题,IE9没有问 ...