转: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. Nginx中的长连接

    在nginx中,对于http1.0与http1.1是支持长连接的 我们知道,http请求是基于TCP协议之上的,那么,当客户端在发起请求前,需要先与服务端建立TCP连接,而每一次的TCP连接是需要三次 ...

  2. 动态规划:划分DP

    划分型动态规划之数的划分 先贴上2014年10月31日的那份代码,甚至怀念当时在机房YY这道题的场面 高中最快乐的时候.. #include<iostream> using namespa ...

  3. 【bzoj1096-仓库建设】斜率优化

    dsy1096: [ZJOI2007]仓库建设 [问题描述] L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚. 由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品 ...

  4. 【bzoj3926- [Zjoi2015]诸神眷顾的幻想乡】广义sam

    题意:给定一棵树,每个节点有一个颜色,问树上有多少种子串(定义子串为某两个点上的路径),保证叶子节点数<=20.n<=10^5 题解: 叶子节点小于等于20,考虑将每个叶子节点作为根把树给 ...

  5. [BZOJ3275]Number解题报告|网络流

    Description 有N个正整数,需要从中选出一些数,使这些数的和最大.若两个数a,b同时满足以下条件,则a,b不能同时被选1:存在正整数C,使a*a+b*b=c*c2:gcd(a,b)=1 这道 ...

  6. 【洛谷 P1070】道路游戏 (DP)

    题目链接 这题还是很好想的,看到\(90%\)的数据点时,我就知道要用\(n^3\)的算法(最后10分就算了吧) 然后,数据水,直接暴力\(n^3\)卡过了. 显然是道DP. 设\(f[i]\)表示第 ...

  7. DotNet 学习笔记 应用状态管理

    Application State Options --------------------------------------------------------------------- *Htt ...

  8. POJ 1698 Alice's Chance

    题目:Alice 要拍电影,每一天只能参与一部电影的拍摄,每一部电影只能在 Wi 周之内的指定的日子拍摄,总共需要花 Di 天时间,求能否拍完所有电影. 典型的二分图多重匹配,这里用了最大流的 din ...

  9. docker从零开始 存储(五)存储驱动介绍

    关于存储驱动程序 要有效地使用存储驱动程序,了解Docker如何构建和存储镜像以及容器如何使用这些镜像非常重要.您可以使用此信息做出明智的选择,以确定从应用程序中保留数据的最佳方法,并避免在此过程中出 ...

  10. dict的setdefault(学习bottle源代码)

    在bottle的源代码中,看到如下一段话: sys.modules.setdefault('bottle', sys.modules['__main__']) 这段话,实际上就是dict类型的setd ...