Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104571
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 352
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-23 12:37
文章分类

全部博文(41)

文章存档

2015年(1)

2014年(28)

2013年(12)

我的朋友

分类: LINUX

2013-09-23 21:42:44

(1)       修改arch/arm/mach-davinci下的da850.c文件

     修改如下:

20130922131709.jpg

2

     此处的修改是将GPIO的相关引脚在寄存器中设置为GPIO的接口类型。

每个GPIO引脚所对应的寄存器和其在寄存器中的位置详见TI文档OMAP-L138 Applications Processor System Reference Guide

 

20130922131724.jpg

3

20130922131636.jpg

4

在图3和图4中,将LCDVPIF中相应的引脚注释掉,因为此处的定义,与我们测试时候的采用GPIO是相同的寄存器,测试的时候,发现如果不注释掉这些地方,在串口终端中,当按键按下的时候没有数字打印出来。

 

 

 

20130922131556.jpg

5

20130922131618.jpg

6

5和图6LCDVPIF接口的相关引脚,如果不注释掉的话,就会在内核编译的时候出错。

(2)       修改arch/arm/mach-davinci/include/mach/下的mux.h文件,修改如下

20130922131935.jpg

7

在这里添加测试的引脚定义;

20130922131914.jpg

8

20130922131948.jpg

9

8和图9的修改也是将此处的与GPIO引脚冲突的配置注释掉;

(3)       修改arch/arm/mach-davinci下的board-da850-evm.c文件

     在函数da850_evm_init()函数的上方添加如下的代码段:

     //===================added by wp 2012.9.22===========================

 

static struct gpio_keys_button da850_evm_gpio_buttons[] = {

   [0] = {

            .type                            = EV_KEY,                             // EV_KEY=0x01

            .active_low                = 0,

            .wakeup                     = 0,

            .debounce_interval = DA850_KEYS_DEBOUNCE_MS,

            .code                           = KEY_ENTER,                        //KEY_ENTER=28

            .desc                           = "button1",

            .gpio                            = GPIO_TO_PIN(7,1),        // GPIO_TO_PIN(7,1)= 7*16+1=113

   },

  [1] = {

            .type                            = EV_KEY,

            .active_low                = 0,

            .wakeup                     = 0,

            .debounce_interval = DA850_KEYS_DEBOUNCE_MS,

            .code                           = KEY_DOWN,                      //  KEY_DOWN = 108

            .desc                           = "button2",

            .gpio                            = GPIO_TO_PIN(7,3),      //  GPIO_TO_PIN(7,3)=7*16+3=115

   },

 

       [2] = {

            .type                            = EV_KEY,

            .active_low                = 0,

            .wakeup                     = 0,

            .debounce_interval = DA850_KEYS_DEBOUNCE_MS,

            .code                           = KEY_RIGHT,              //  KEY_RIGHT =106

            .desc                           = "button3",

            .gpio                            = GPIO_TO_PIN(7,7),       //  GPIO_TO_PIN(7,7) = 7*16+7=119

   },

 

};

 

static struct gpio_keys_platform_data da850_evm_gpio_buttons_pdata = {

   .buttons = da850_evm_gpio_buttons,

   .nbuttons = ARRAY_SIZE(da850_evm_gpio_buttons),

   //.poll_interval = DA850_GPIO_KEYS_POLL_MS,

};

 

static struct platform_device da850_evm_gpio_buttons_device = {

   .name = "gpio-keys",

   .id = 1,

   .dev = {

            .platform_data = &da850_evm_gpio_buttons_pdata

   },

};

//===============================end======================================

 

da850_evm_init()最后添加如下的代码段:

                    /*used by GPIO buttons ,added by wp 2013.9.22*/

   ret = platform_device_register(&da850_evm_gpio_buttons_device);

   if (ret)

            pr_warning("da850_evm_init: GPIO buttons init "

                               " failed: %d\n", ret);

该处的作用是注册设备。

(4)编译内核

   在编译内核的时候注意选择如下的选项

      Device Drivers ——————>

              Input device support  --->

                     [*]   Keyboards  --->

                            <*>   GPIO Buttons 

这样可以保证我们的驱动程序gpio_keys.c编译到内核。

 

5)内核的下载过程略去;

6)在内核的启动过程中我们可以看到如下启动信息;

    20130922132427.jpg

10

10 表明该驱动成功的编译进内核,在内核中注册成功。

7)测试代码

      测试代码如何编译和拷贝到文件系统中见测试代码文件夹中的README

     现在将测试结果贴出:

20130922132358.jpg

11

在上面图11中的结果是,在每次按下一个键,就会打印四行的信息。第一个参数type EV_KEY (或者EV_SW)类型在include/linux/input.h中有定义为0x01code的值即为我们在board-da850-evm.c 中定义的KEY_ENTERKEY_DOWN KEY_RIGHT的值,value就是按键的取值。

从上面的测试结果看,GPIO测试成功。

阅读(7651) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:Linux子系统系列-SPI

给主人留下些什么吧!~~

7大爷2013-09-24 09:38:19