如何在linux中运行cmatrix,嵌入式linux matrix_keypad矩阵键盘驱动,该如何解决

当前位置:我的异常网» Linux/Unix » 嵌入式linux matrix_keypad矩阵键盘驱动,该如何解决

嵌入式linux matrix_keypad矩阵键盘驱动,该如何解决

www.myexceptions.net  网友分享于:2013-04-17  浏览:201次

嵌入式linux matrix_keypad矩阵键盘驱动

ARM:AM3517

linux2.6.37

TI官方开发板AM3517EVM

我想移植一个8*5的GPIO矩阵键盘,在linux源码/drivers/input/目录下有很多种键盘驱动程序,但是

能用到自己项目上的似乎只有matrix-keypad键盘驱动,我在board-am3517evm.c中定义好了键盘资源,如下:

static const unsigned int matrix_keypad_cols[] = {128,129,130,131,132};

static const unsigned int matrix_keypad_rows[] = {120,121,122,123,124,125,126,127};

static uint32_t am3505_keymap[] __initdata =

{

//KEY(row, col, keycode)

KEY(0,0, KEY_F1), KEY(0,1, KEY_1), KEY(0,2, KEY_4), KEY(0,3, KEY_7), KEY(0,4,KEY_PROG1),

KEY(1,0, KEY_F2), KEY(1,1, KEY_2), KEY(1,2, KEY_5), KEY(1,3, KEY_8),KEY(1,4,KEY_PROG2),

KEY(2,0, KEY_F3), KEY(2,1, KEY_3), KEY(2,2, KEY_6), KEY(2,3, KEY_9),KEY(2,4,KEY_PROG3),

KEY(3,0, KEY_F4),KEY(3,1, KEY_0),KEY(3,2,KEY_DOT),KEY(3,3,KEY_HELP),KEY(3,4,KEY_PROG4),

KEY(4,0, KEY_F5), KEY(4,1, KEY_DELETE), KEY(4,2, KEY_INSERT), KEY(4,3, KEY_SETUP), KEY(4,4, KEY_B),

KEY(5,0, KEY_F6), KEY(5,1, KEY_HOMEPAGE), KEY(5,2, KEY_ESC), KEY(5,3, KEY_LEFT), KEY(5,4, KEY_W),

KEY(6,0, KEY_F7), KEY(6,1, KEY_END), KEY(6,2, KEY_UP), KEY(6,3, KEY_ENTER), KEY(6,4, KEY_DOWN),

KEY(7,0, KEY_F8), KEY(7,1, KEY_PAGEUP), KEY(7,2, KEY_PAGEDOWN), KEY(7,3, KEY_RIGHT), KEY(7,4, KEY_POWER),

};

static struct matrix_keymap_data am3505_keymap_data __initdata =

{

.keymap = am3505_keymap,

.keymap_size =ARRAY_SIZE(am3505_keymap),

};

static struct matrix_keypad_platform_data am3505_keypad_data __initdata =

{

.keymap_data = &am3505_keymap_data,

.col_gpios= matrix_keypad_cols,

.row_gpios= matrix_keypad_rows,

.num_col_gpios= ARRAY_SIZE(matrix_keypad_cols),

.num_row_gpios= ARRAY_SIZE(matrix_keypad_rows),

.col_scan_delay_us= 10,

.debounce_ms= 80,

// .wakeup = 1,

.active_low = 1,

// .no_autorepeat = 1,

};

配置GPIO口

OMAP3_MUX(SDMMC1_CLK, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),

OMAP3_MUX(SDMMC1_CMD, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),

OMAP3_MUX(SDMMC1_DAT0, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),

OMAP3_MUX(SDMMC1_DAT1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),

OMAP3_MUX(SDMMC1_DAT2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),

OMAP3_MUX(SDMMC1_DAT3, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),

OMAP3_MUX(SDMMC1_DAT4, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),

OMAP3_MUX(SDMMC1_DAT5, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),

OMAP3_MUX(SDMMC1_DAT6, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),

OMAP3_MUX(SDMMC1_DAT7, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),

OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),

OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),

OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),

加入到设备列表中

static struct platform_device *am3517_evm_devices[] __initdata = {

&am3517_evm_dss_device,

&matrix_device_keypad,

};

1 请问以上的键盘代码移植是否有问题?

2 板卡启动后,行按键中断可以响应,在matrix-keypad.c文件函数matrix_keypad_interrupt中

打印调试信息printk();说明可以响应行中断,schedule_delayed_work(&keypad->work,msecs_to_jiffies(keypad->pdata->debounce_ms));中的keypad->pdata->debounce_ms值为负值,我在上面明明设置抖动时间为80;不知道是说明原因?

------解决方案--------------------

去掉定义am3505_keypad_data后面的__initdata

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值