三星s3c24xx平台gpio操作详解-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 932437
  • 博文数量: 70
  • 博客积分: 1741
  • 博客等级: 上尉
  • 技术积分: 2476
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-05 14:46
个人简介

全志全系列芯片产品方案开发 a20/a33/a64/a40/a60/a83/a63/h3/h5/h6/h8

文章存档

2018年(1)

2012年(20)

2011年(49)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: linux

2012-10-30 21:26:40

先介绍三星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)

阅读(11518) | 评论(0) | 转发(7) |
1

上一篇:

下一篇:关于linux系统的usb camera驱动说明

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图