S3C44B0X键盘的uClinux驱动

      最近几天在研究S3C44B0X键盘驱动,在网上搜了遍,只找到一篇(是千篇一律,不是只有一个搜索结果),都是讲把pc_keyb.c改造成合适的驱动,我业尝试过这个方法,开始是一头雾水(毕竟自己还是很菜),pc_keyb.c里面那么多函数,对linux上的中断驱动没有任何经验,最终放弃了这条路,我们正着走,光明一些。看了一些关于linux驱动的资料,再结合ARM手册上的说明,终于从正向实现了键盘的驱动,然后我再回过去看pc_keyb.c,下意识地就把它改好了,这个事实告诉我们要踏踏实实地,一步一个脚印向前走,要深厚内功。

下面是我自己写的驱动代码:

 

由于只有3个LED,所以第四个键没用到,不过原理是一样的

 

下面是我修改pc_keyb.c得到的键盘驱动,我把它重命名为44b0kbd.c

 

这里需要注意一个问题:

 (*(volatile unsigned *)S3C44B0X_EXTINPND) |= 0xF; 
 (*(volatile unsigned *)S3C44B0X_INTPND) &= ~(1<<21); //clear interrupt request
 (*(volatile unsigned *)S3C44B0X_I_ISPC) &= ~(1<<21);

---------------------------------------------
 if((jiffies - jiffies_IRQ_21) < 100)
  return IRQ_HANDLED;

上面用分隔线分开的两部分不能颠倒,当时我颠倒了,按了一次之后老是出错,系统输出:

IRQ LOCK: IRQ21 is locking the system, disabled

这个问题折腾了我好久,可能是我当时犯傻了,这样的逻辑都整理不好……

 

接着再把初始化函数写入driver/char文件夹下的mem.c里面,再做一些改动(前面我写的那篇《uClinux+S3C44B0X驱动编写总结》有详细的步骤),kbd驱动要使用用户程序来打开才能使用,44b0kbd就不用了(系统初始化时已经设置好中断),因此在make menuconfig的时候两个驱动不能同时选中,这样给调试带来了一些麻烦。

 

编译后放到板子上,两个驱动都正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值