转:http://blog.chinaunix.net/uid-22030783-id-3391515.html

先介绍三星S3C24XX平台BSP中定义外设寄存器和GPIO的相关头文件
以linux-3.4系统为例,linux2.6.37系统也类似,只是存放的目录有区别
 
平台的头文件存放在arch/arm/mach-s3c24xx/include/mach/目录下
 
Memory map definitions
定义了三星平台8个BANK的地址,各外设控制器的寄存器基地址和SIZE,在创建platform_data的resource时经常用到
文件名:arch/arm/mach-s3c24xx/include/mach/map.h
如:
  1. #define S3C2410_CS4        (0x20000000)
  2. #define S3C2410_PA_LCD     (0x4D000000)
  3. #define S3C24XX_SZ_LCD     SZ_1M
 
IRQ definitions
定义了三星平台的中断号,在创建platform_data的resource时经常用到
arch/arm/mach-s3c24xx/include/mach/irqs.h
如:
  1. #define IRQ_EINT0   S3C2410_IRQ(0)
  2. #define IRQ_RTC     S3C2410_IRQ(30)
 
S3C2410 GPIO register definitions
定义了三星平台GPIO相关的寄存器基地址和各管脚的功能配置
arch/arm/mach-s3c24xx/include/mach/regs-gpio.h
如:
  1. #define S3C2410_GPGCON     S3C2410_GPIOREG(0x60)
  2. #define S3C2410_GPGDAT     S3C2410_GPIOREG(0x64)
  3. #define S3C2410_GPB0_TOUT0 (0x02 << 0)
 
S3C2410 - GPIO bank numbering
arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h
如:
  1. #define S3C2410_GPF(_nr)    (S3C2410_GPIO_F_START + (_nr))
 
S3C2440 GPIO J register definitions
arch/arm/mach-s3c24xx/include/mach/regs-gpioj.h
如:
  1. #define S3C2413_GPJCON        S3C2410_GPIOREG(0x80)
  2. #define S3C2440_GPJ5_OUTP     (0x01 << 10)
  3. #define S3C2440_GPJ5_CAMDATA5 (0x02 << 10)
 
其他的头文件定义了IRQ、CLK、LCD、MEM、POWER、SDI等外设寄存器的宏
如regs-irq.h regs-lcd.h regs-mem.h等
 
下面开始介绍GPIO的操作方法,可以使用通用的GPIO库或使用三星提供的GPIIO库
 
三星GPIOLIB的API: drivers/gpio/gpio-samsung.c
 
S3C Platform - GPIO pin configuration
arch/arm/plat-samsung/include/plat/gpio-cfg.h
声明GPIO的API函数,如要使用三星的GPIO API,需包含此文件
声明配置管脚输入输出,是否使能上拉的宏
如:
  1. #define S3C_GPIO_INPUT
  2. #define S3C_GPIO_OUTPUT
  3. #define S3C_GPIO_PULL_UP
 
内核帮助文档:Documentation/arm/samsung-s3c24xx/gpio.txt
 
配置管脚功能:
  1. int s3c_gpio_cfgpin(unsigned int pin, unsigned int config)
例:设置GPB1为TOUT1功能
s3c_gpio_cfgpin(S3C2410_GPB(1), S3C2410_GPB1_TOUT1);
 
其中S3C2410_GPB(1)在gpio-nrs.h中定义,S3C2410_GPB1_TOUT1在regs-gpio.h中定义
设置输出功能为:S3C_GPIO_OUTPUT
设置输入功能为:S3C_GPIO_INPUT
 
设置管脚上拉:
  1. int s3c_gpio_setpull(unsigned int pin, samsung_gpio_pull_t pull)
例:设置GPG5管脚为上拉
s3c_gpio_setpull(S3C2410_GPG(5), S3C_GPIO_PULL_UP);
 
设置输出电平:
  1. void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
例:设置GPF1管脚输出高电平
s3c2410_gpio_setpin(S3C2410_GPF(1), 1);
 
检测输入电平:
  1. unsigned int s3c2410_gpio_getpin(unsigned int pin)
例:检测GPF7管脚的电平状态
value = s3c2410_gpio_getpin(S3C2410_GPF(7));
 
 
通用的GPIOLIB:drivers/gpio/gpiolib.c
使用时需要包含linux/gpio.h
 
申请GPIO:
  1. int gpio_request(unsigned gpio, const char *label)
 
FREE GPIO:
  1. void gpio_free(unsigned gpio)
 
设置为输出,并指定默认电平:
  1. int gpio_direction_output(unsigned gpio, int value)
 
设置为输入:
  1. int gpio_direction_input(unsigned gpio)
 
设置输出电平:
  1. void __gpio_set_value(unsigned gpio, int value)
 
检测输入电平:
  1. int __gpio_get_value(unsigned gpio)

三星s3c24xx平台GPIO操作详解的更多相关文章

  1. VC++常用数据类型及其操作详解

    原文地址:http://blog.csdn.net/ithomer/article/details/5019367 VC++常用数据类型及其操作详解 一.VC常用数据类型列表 二.常用数据类型转化 2 ...

  2. MongoDB各种查询操作详解

    这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下   一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...

  3. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  4. [Android新手区] SQLite 操作详解--SQL语法

    该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...

  5. shell字符串操作详解

    shell字符串操作详解的相关资料. 1.shell变量声明的判断  表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...

  6. memcached 命令操作详解

    memcached 命令操作详解 一.存储命令 存储命令的格式: <command name> <key> <flags> <exptime> < ...

  7. windows phone 8.1开发SQlite数据库操作详解

    原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...

  8. MySQL 操作详解

    MySQL 操作详解 一.实验简介 本节实验中学习并实践 MySQL 上创建数据库.创建表.查找信息等详细的语法及参数使用方法. 二.创建并使用数据库 1. 创建并选择数据库 使用SHOW语句找出服务 ...

  9. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

随机推荐

  1. SpringMvc基础知识(二) springmvc和mybatis整合

    1 springmvc和mybatis整合 1.1 需求 使用springmvc和mybatis完成商品列表查询. 1.2 整合思路 springmvc+mybaits的系统架构: 第一步:整合dao ...

  2. Perl语言入门--3--文件读取与写入

    现有文件test.txt,内容为:"123\n456" 1,打开文本test.txt #!/usr/bin/perl open d,"test.txt"; d ...

  3. 使用maven构建第一个web项目

    在eclipse中,正常创建maven项目后,发现在index.jsp中会报错,此时在pom.xml中加入如下依赖关系即可 <dependency> <groupId>java ...

  4. python模拟鼠标和键盘操作

    import win32api import win32con import win32gui from ctypes import * import time VK_CODE = { 'backsp ...

  5. java中Math.abs(-2147483648)的返回值应该是什么?

    我觉得这是一个非常有意思的问题,Math.abs(-2147483648)的返回值应该是什么? java计算结果 为什么没有得到正数结果呢? 首先我们先看下java区分整数正负的原理.在二进制的情况下 ...

  6. RAID磁盘恢复方法之一Winhex镜像硬盘与镜像中恢复数据图文

    winhex镜像硬盘和ghost备份是完全不同的,ghost只能克隆或者镜像分区内正常的数据,删除的数据他是不会克隆的,所以在数据恢复应用中,ghost对我们来讲作用就不大了,而使用winhex备份( ...

  7. 【互动问答分享】第11期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    Q1:docker成熟度如何? Docker是2013年和2014年最火爆的云计算开源项目: Baidu公司是中国使用Docker最为深入和最大规模的公司,线上稳定运行数十万个Docker容器,目前已 ...

  8. STL模板整理 vector

    一.什么是标准模板库(STL)? 1.C++标准模板库与C++标准库的关系 C++标准模板库其实属于C++标准库的一部分,C++标准模板库主要是定义了标准模板的定义与声明,而这些模板主要都是 类模板, ...

  9. C指针详解

    前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其 ...

  10. sqlmap的小试牛刀

    这次算是一次用sqlmap的例子,写的很水. 目的:通过工具扫描到了后台的数据库的地址(如下图),想通过sqlmap找到数据库的用户和密码进入到数据库(首先可以尝试一下root:root一般都是这个情 ...