三星s3c24xx平台GPIO操作详解
2016-10-19 16:28
429 查看
转至:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=22030783&id=3391515
先介绍三星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
如:
#define S3C2410_CS4 (0x20000000)
#define S3C2410_PA_LCD (0x4D000000)
#define S3C24XX_SZ_LCD SZ_1M
IRQ definitions
定义了三星平台的中断号,在创建platform_data的resource时经常用到
arch/arm/mach-s3c24xx/include/mach/irqs.h
如:
#define IRQ_EINT0 S3C2410_IRQ(0)
#define IRQ_RTC S3C2410_IRQ(30)
S3C2410 GPIO register definitions
定义了三星平台GPIO相关的寄存器基地址和各管脚的功能配置
arch/arm/mach-s3c24xx/include/mach/regs-gpio.h
如:
#define S3C2410_GPGCON S3C2410_GPIOREG(0x60)
#define S3C2410_GPGDAT S3C2410_GPIOREG(0x64)
#define S3C2410_GPB0_TOUT0 (0x02 << 0)
S3C2410 - GPIO bank numbering
arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h
如:
#define S3C2410_GPF(_nr) (S3C2410_GPIO_F_START + (_nr))
S3C2440 GPIO J register definitions
arch/arm/mach-s3c24xx/include/mach/regs-gpioj.h
如:
#define S3C2413_GPJCON S3C2410_GPIOREG(0x80)
#define S3C2440_GPJ5_OUTP (0x01 << 10)
#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,需包含此文件
声明配置管脚输入输出,是否使能上拉的宏
如:
#define S3C_GPIO_INPUT
#define S3C_GPIO_OUTPUT
#define S3C_GPIO_PULL_UP
内核帮助文档:Documentation/arm/samsung-s3c24xx/gpio.txt
配置管脚功能:
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
设置管脚上拉:
int s3c_gpio_setpull(unsigned int pin, samsung_gpio_pull_t
pull)
例:设置GPG5管脚为上拉
s3c_gpio_setpull(S3C2410_GPG(5), S3C_GPIO_PULL_UP);
设置输出电平:
void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
例:设置GPF1管脚输出高电平
s3c2410_gpio_setpin(S3C2410_GPF(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:
int gpio_request(unsigned gpio, const char *label)
FREE GPIO:
void gpio_free(unsigned gpio)
设置为输出,并指定默认电平:
int gpio_direction_output(unsigned gpio, int value)
设置为输入:
int gpio_direction_input(unsigned gpio)
设置输出电平:
void __gpio_set_value(unsigned gpio, int value)
检测输入电平:
int __gpio_get_value(unsigned gpio)
先介绍三星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
如:
#define S3C2410_CS4 (0x20000000)
#define S3C2410_PA_LCD (0x4D000000)
#define S3C24XX_SZ_LCD SZ_1M
IRQ definitions
定义了三星平台的中断号,在创建platform_data的resource时经常用到
arch/arm/mach-s3c24xx/include/mach/irqs.h
如:
#define IRQ_EINT0 S3C2410_IRQ(0)
#define IRQ_RTC S3C2410_IRQ(30)
S3C2410 GPIO register definitions
定义了三星平台GPIO相关的寄存器基地址和各管脚的功能配置
arch/arm/mach-s3c24xx/include/mach/regs-gpio.h
如:
#define S3C2410_GPGCON S3C2410_GPIOREG(0x60)
#define S3C2410_GPGDAT S3C2410_GPIOREG(0x64)
#define S3C2410_GPB0_TOUT0 (0x02 << 0)
S3C2410 - GPIO bank numbering
arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h
如:
#define S3C2410_GPF(_nr) (S3C2410_GPIO_F_START + (_nr))
S3C2440 GPIO J register definitions
arch/arm/mach-s3c24xx/include/mach/regs-gpioj.h
如:
#define S3C2413_GPJCON S3C2410_GPIOREG(0x80)
#define S3C2440_GPJ5_OUTP (0x01 << 10)
#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,需包含此文件
声明配置管脚输入输出,是否使能上拉的宏
如:
#define S3C_GPIO_INPUT
#define S3C_GPIO_OUTPUT
#define S3C_GPIO_PULL_UP
内核帮助文档:Documentation/arm/samsung-s3c24xx/gpio.txt
配置管脚功能:
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
设置管脚上拉:
int s3c_gpio_setpull(unsigned int pin, samsung_gpio_pull_t
pull)
例:设置GPG5管脚为上拉
s3c_gpio_setpull(S3C2410_GPG(5), S3C_GPIO_PULL_UP);
设置输出电平:
void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
例:设置GPF1管脚输出高电平
s3c2410_gpio_setpin(S3C2410_GPF(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:
int gpio_request(unsigned gpio, const char *label)
FREE GPIO:
void gpio_free(unsigned gpio)
设置为输出,并指定默认电平:
int gpio_direction_output(unsigned gpio, int value)
设置为输入:
int gpio_direction_input(unsigned gpio)
设置输出电平:
void __gpio_set_value(unsigned gpio, int value)
检测输入电平:
int __gpio_get_value(unsigned gpio)
相关文章推荐
- 三星s3c24xx平台GPIO操作详解
- S3C24XX体系的Linux GPIO控制相关API实现
- 在DM355平台上如何在应用层直接控制GPIO----操作arm的寄存器
- unity 在移动平台中,文件操作路径详解
- (转) unity 在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- Symbian操作系统及操作平台界面详解
- ElasticSearch第五步-.net平台下c#操作ElasticSearch详解
- unity 在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- Hi3518EV200平台直接操作GPIO输入或输出高低电平
- 【原创】关于s3c24XX系列2.6.35.7内核移植挂在s3c_gpio_setpull的解决方法
- A10平台linux下操作GPIO的两种方法(python库)
- linux下i386平台gpio端口操作
- Unity在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- S3C24XX体系的Linux GPIO控制相关API实现
- 这一个在OMAP3530/DM3730 ARM A8平台上,LINUX系统下,对GPIO的操作
- S3C2440对NORflash芯片EN29LV160AB的操作详解
- unity 在移动平台中,文件操作路径详解