• 三星s3c24xx平台GPIO操作详解


    转: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)

  • 相关阅读:
    乐观锁配置
    @NotBlank注解地正确使用
    Navicat Premium 12.1手动激活
    nacos将服务注册到命名空间
    springcloud中微服务远程调用
    常用的运算符的操作
    时间复杂度和空间复杂度
    前后端分离跨域问题cors
    数据库迁移on_delete 以及NodeNotFoundError问题解决
    python去重后保证顺序不变
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3339528.html
Copyright © 2020-2023  润新知