在视频14的基础上做

1.利用拨码开关来实现GPIO输入

4412 GPIO读 和 ioremap控制GPIO寄存器

4412 GPIO读 和 ioremap控制GPIO寄存器

4412 GPIO读 和 ioremap控制GPIO寄存器

所以AP_SLEEP对应GPC0_3,然后在drivers/gpio/gpio-exynos4.c中对应EXYNOS4_GPC0(0)

XEINT6→GPX0_6→EXYNOS4_GPX0(6)

读寄存器手册分析流程:

  1. 设置寄存器为输入  GPC0CON
  2. 读寄存器值     GPC0DAT
  3. 不上拉,不下拉   GPC0PUD

 

2.GPIO的输入需要哪些函数,从arch\arm\plat-samsung\gpio-config.c中找

  • 申请gpio_request
  • 读寄存器gpio_get_value
  • 设置GPIO为输入模式s3c_gpio_cfgpin  S3C_GPIO_INPUT
  • 设置上拉下拉s3c_gpio_setpull S3C_GPIO_PULL_NONE
  • 释放GPIO gpio_free

3.平台文件中设备注册

 在文件arch/arm/mach-exynos/mach-itop4412.c中:

    struct platform_device s3c_device_read_gpio_ctl = {
        .name   = "read_gpio_ctl",
        .id     = -1,
    };

  &s3c_device_read_gpio_ctl,

在init_lcd_type函数中request了GPIO。所以在get_lcd_type需要释放GPIO

    gpio_free(EXYNOS4_GPC0(3));
    gpio_free(EXYNOS4_GPX0(6));

4.Makefile修改

TARGET_NAME = read_gpio
APP_NAME = app_read_gpio
obj-m += $(TARGET_NAME).o

KDIR := /home/topeet/chen/kernel-3.0/iTop4412_Kernel_3.0

PWD ?= $(shell pwd)

all:app
    make -C $(KDIR) M=$(PWD) modules

app:$(APP_NAME)
    arm-none-linux-gnueabi-gcc $(APP_NAME).c -o $(APP_NAME) -static

clean:
    rm -rf *.o *.ko *.mod.c *.symvers *.order \
    .$(TARGET_NAME)* $(APP_NAME)
Makefile

相关文章:

  • 2022-12-23
  • 2021-04-19
  • 2021-05-12
  • 2021-12-14
  • 2021-08-09
  • 2021-05-24
  • 2021-05-25
  • 2021-12-26
猜你喜欢
  • 2022-12-23
  • 2021-05-20
  • 2022-12-23
  • 2021-12-21
  • 2021-12-12
  • 2021-12-21
  • 2022-12-23
相关资源
相似解决方案