用ZLG7290芯片设计一款IIC键盘驱动,通过S3C2440的IIC接7290,内核是2.6.13,不知改如何下手,希望高手指点!

wcs   2008-4-22 14:08 楼主
小弟我现在要用ZLG7290芯片设计一款IIC键盘驱动,通过S3C2440的IIC接7290,内核是2.6.13,那位大哥有代码共享,有类似代码也可以,
    刚开始我在linux2.6.13内核的目kernel/driver/i2c/busses目录下,找到了S3C2410的I2C驱动源程序:i2c-s3c2410.c,不知道你所说的针对S3C2410的I2C驱动程序是不是这个,还是i2c文件夹下的所有源程序。我仔细研究了i2c-s3c2410.c程序,发现这个程序包了很多层,因为我之前一直学习的是linux2.4.18,2.6的驱动结构比2.4的变化很大,目前感觉linux自带的I2C驱动太庞大,不知从何下手修改,考虑到I2C的原理还是比较简单的,所以想自己重新写一个I2C驱动程序,但是由于没有经验,所以也不知到如何下手,我要写的驱动程序要达到的目的是:通过S3C2410的I2C控制器和I2C芯片ZLG7290通讯,当ZLG7290所扩展的键盘有键按下时,向CPU发出中断,然后利用I2C通讯,CPU去ZLG7290的寄存器01H中读取键值。

    在这里我想问的是那位大侠类似功能基于linux2.6内核的I2C驱动程序(当然源程序最好了),如果有的话能否提供给我,让我做些修改,就可以实现我要的功能。下面我从网上看到的一个别人写的S3C2410的I2C驱动程序(这个程序的网址:http://www.cublog.cn/u/3063/showart_217716.html),我是否可以在这个程序的基础上,做些修改就可以实现我要的功能(不使用Linux自带的I2C驱动),各位大侠在这里能给我指指方向,或者直接给个框架让我修改修改,自己编程能力实在太差,只会修改了,真是郁闷。
我的邮箱:panwsecjtu@yahoo.com.cn
QQ:157456260
希望能得到高手的指点!

回复评论 (10)

ing
点赞  2008-4-25 15:24
你要实现的功能比那个程序简单多了

struct IIC_dev{
        wait_queue_head_t rq;   // 读取等待队列
        uint8_t *buffer;
        uint32_t size;
        uint32_t index;
        struct semaphore sem;
        struct cdev cdev;
};

可以简化为
struct IIC_dev{
        wait_queue_head_t rq;   // 读取等待队列
        struct semaphore sem;
        struct cdev cdev;
};
因为你不需要在缓冲区中保存键值
sem实现对IIC设备的互斥访问

rq实现IIC_read和中断任务的同步操作
应用层任务循环调用IIC_read,此时无按键信息,应用层任务挂起等待
当有按键按下时,7290产生IIC中断,中断服务程序up等待队列,唤醒IIC_read
其读取键值后返回,处理完相关按键信息后,应用层任务再次调用IIC_read,等待下一次按键的到来

将那个代码简化下就完全可以实现你的功能了,不要总是指望大家给你现成的代码
任意一个简单的字符设备驱动程序,只要含有一个中断任务和一个read方法就可以实现了
当你学会了借鉴模仿时,一切都将变得很简单,这些都是应该培养的学习能力
点赞  2008-4-25 23:54
我在看wince怎么实现。哈哈。
点赞  2009-3-5 08:55
up
点赞  2009-3-5 09:11
up
点赞  2009-3-5 09:11
看看I2C的时序和器件手册
不要看太深的代码方式
研究CPU的器件手册关于I2C控制器的部分 按照时序可以实现自己的功能
可以采用中断服务程序的方式通过信号量来控制read任务

如果嫌自己研究器件手册太慢的话可以在针对该CPU在网上找一些源代码改改
vxWorks之类的也可以呀
道理都是一样的

如果任务不是很着急的话  建议按照器件手册自己写一个
这样更有助于学习CPU的工作原理 而且可以提高自信  对以后的学习和发展都有好处
点赞  2009-3-5 22:49
楼上说的非常在理,学习了。
点赞  2009-6-19 17:14
这个东西还是认真看DATASHEET为好。
点赞  2009-6-20 14:47
ZLG7290  从 51 跑到 arm 无语了
点赞  2009-6-23 22:02
呵呵,跟楼主一样在弄这个芯片,用在STM32上面,裸机的,比楼主的简单多了。
不过还是难倒我了,I2C不稳定啊
点赞  2009-6-26 16:02
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复