易截截图软件、单文件、免安装、纯绿色、仅160KB

嵌入式Linux的键盘驱动 1(通过I2C实现)

CPU:s3c2410
OS:Linux Kernel 2.6.30.4
最近刚做完的嵌入式键盘的驱动,由于初次接触,总结一下。
首先简单说说这个键盘的实现原理,IIC总线工作原理没必要废话,s3c2410的手册中讲的很明白。硬件方面这个键盘通过一个AVR单片机(ATMEGA48)接在IIC总线上,也就是说,直接与IIC总线链接的设备并不是我们用的键盘,而是这个单片机,键盘产生的一切数据由这个单片机经过加工包装成一定的数据结构再发给s3c2410。当s3c2410芯片收到数据后会由IIC控制器触发一个中断,在中断处理程序中我们只要解析这个结构体就可以了。
软件方面,设备驱动实际上分为两层,其中之一就是AVR单片机的驱动,另一个就是键盘驱动,基本流程如下。内核启动时会自动调用设备初始化函数,这时候我们需要做的是通过IIC总线给这个单片机传送初始化信息。发送的数据一共包括两部分,前者用于设置目的设备(s3c2410芯片)的地址,也就是告诉AVR单片机收到键盘发来的数据后应该发给谁;后者是使能键盘,如果不发这个指令,AVR收到键盘传来的按键硬件编码后直接丢弃。(这里注意:AVR上可以同时管理多个设备,事实上我搞到的前人的资料也是支持多个设备,而这里我们只用到了一个键盘)完成初始化后,硬件方面就没有什么障碍了,如果我们按下一个按键,键盘会把一个8位的硬件键码发给AVR单片机。在AVR单片机中这个字节前会被再加上一个8位的设备编号,然后一起发给s3c2410。cpu收到数据后,会把自己的工作模式设置成SR,然后调用AVR单片机驱动中的i2c_mega8_slvRcv函数,并把接收到的后两个字节(键盘的设备码+按键硬件码)作为参数传给该函数。在该函数中,检测设备码,如果是键盘,那么调用键盘驱动程序中的mega8_kbd_raw函数,并最终添加入按键等待队列。当有程序打开键盘设备文件的时候,这个队列中的键码会被传递给相应的用户程序。
下面代码部分借鉴了前人的劳动成果,具体作者是谁搞不太清楚 ... ...
首先添加一部分结构体和常量定义:
#ifndef __I2C_TOMEGA8_H_
#define __I2C_TOMEGA8_H_
#include <linux/poll.h>
#if 0 //modified by B.Zhou
#define I2COWNER_ADDRESS        (0x10>>1)
#else
#define I2COWNER_ADDRESS        (0x10)
#endif
#define MEGA8_I2CADDRESS        (0x60)
typedef struct __attribute__ ((packed)){
   


相关文档:

在linux编择proc出错解决办法

出错信息
proc PARSE=FULL DBAccess.pc
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
System default option values taken from: /home/oracle/app/product/9.2.0/precomp/admin/pcscfg.cfg
Error at line 34, column 11 in file /usr/include/stdio.h
# include <stddef.h> ......

史上最简单元的pro*c程序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
EXEC SQL include sqlca;
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL BEGIN DECLARE SECTION;
       & ......

linux ftp命令大全

FTP的命令行格式为:
ftp -v -d -i -n -g [主机名] ,其中
-v 显示远程服务器的所有响应信息;
-n 限制ftp的自动登录,即不使用;.n etrc文件;
-d 使用调试方式;
-g 取消全局文件名。
FTP使用的内部命令如下(中括号表示可选项):
1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip ......

linux下TC+HTB流量控制


C规则涉及到 队列(QUEUE) 分类器(CLASS) 过滤器(FILTER),filter划分的标志位可用U32或iptables的set-mark来实现 ) 一般是"控发"不控收 linux下有两块网卡,一个eth1是外网,另一块eth0是内网.在eth0上做HTB。(注意:filter划分标志位可用u32打标功能或iptables的set-mark功能,如果用iptables来打标记的话,下行速LV在et ......

Linux中安装PHP 5教程

第一步 安装MySQL
[root@localhost usr]# groupadd mysql
[root@localhost usr]# useradd -g mysql mysql
[root@localhost usr]# cd /usr/local
[root@localhost local]# tar -zxvf mysql-5.0.51.tar.gz
[root@localhost local]# cd mysql-5.0.51
[root@localhost mysql-5.0.51# ./configure --prefix=/usr/local/my ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号