2978|8

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

W83977芯片驱动程序疑问 [复制链接]

这个是网上一个大侠写的W83977驱动程序。我不明白其中一些为什么那样也,看手册头都看晕了都没办法。
//KBD port--------------------------------------------
w977_select_device(W977_DEVICE_KBC, efbase[1]); //select logic device
w977_write_reg(0x60, 0x0, efbase[1]);    //address              这里把0X60和0X0写到0X3F0和0X3F1是什么意思,手册上不是这样的啊
                {CR60, CR 61 (Default 0x00, 0x60 if PENKBC= 1 during POR, default 0x00 otherwise)
                  These two registers select the first KBC I/O base address [0x100:0xFFF] on 1 byte boundary.
                  CR62, CR 63 (Default 0x00, 0x64 if PENKBC= 1 during POR, default 0x00 otherwise)
                  These two registers select the second KBC I/O base address [0x100:0xFFF] on 1 byte boundary.这一段是手册上写的}

w977_write_reg(0x61, 0x60, efbase[1]);    //address--0x060
w977_write_reg(0x62, 0x0, efbase[1]);    //address
w977_write_reg(0x63, 0x64, efbase[1]);    //address--0x064

蓝色的代码不清楚为什么要这样写,这几个函数定义在下面贴出来
//set irq number
w977_write_reg(0x70, 0x05, efbase[1]);    //irq for keyboard  irq5--active H
w977_write_reg(0x72, 0x04, efbase[1]);    //irq for mouse      irq4--active H

//12MHZ, disable port 92
w977_write_reg(0xf0, 0x80, efbase[1]);
/* Activate device */
w977_write_reg(0x30, 0x01, efbase[1]);


下面是上面要用到的子函数
static unsigned int efbase[] = { W977_EFIO_BASE+nGCS7, W977_EFIO2_BASE+nGCS7 };
static unsigned int efio = W977_EFIO_BASE;

#define readb(x)    (*(volatile unsigned char *)x)
#define writeb(val, x)  (*(volatile unsigned char *)x)=val
#define readw(x) (*(volatile unsigned short *)x)
#define writew(val, x) (*(volatile unsigned short *)x)=val

static void w977_write_reg(unsigned char reg, unsigned char value, unsigned int efio)
{
unsigned int addr;

writeb(reg, efio);
addr=efio+1;
writeb(value, addr);
}

最新回复

在hrimfaxi的帮助下问题基本解决: w977_write_reg(0x60, 0x0, efbase[1]);    //address             w977_write_reg(0x61, 0x60, efbase[1]);    //address--0x060 w977_write_reg(0x62, 0x0, efbase[1]);    //address w977_write_reg(0x63, 0x64, efbase[1]);   //address--0x064 上面其实是附地址,和X86汇编差不多付高低值差不多。   详情 回复 发表于 2009-4-14 00:15
点赞 关注

回复
举报

61

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
看这样子第一个值是芯片内部寄存器的Index值,第二个才是要写入该寄存器的值
至于为什么要这样写,那还是要查看芯片的Datasheet

如果你看了手册,你觉得应该怎么写呢?
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
i2c通信?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 hzdysymbol 的回复:
看这样子第一个值是芯片内部寄存器的Index值,第二个才是要写入该寄存器的值
至于为什么要这样写,那还是要查看芯片的Datasheet

如果你看了手册,你觉得应该怎么写呢?

这个我知道,我想问的是为什么后面写那些值就是标记为蓝色的那些,手册上没有说明那些值是什么意思。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 xqhrs232 的回复:
i2c通信?

这个不是IIC通信。我用这个芯片来做PS/2键盘,鼠标,还有串口的
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 wdw1600 的回复:
引用 1 楼 hzdysymbol 的回复:
看这样子第一个值是芯片内部寄存器的Index值,第二个才是要写入该寄存器的值
至于为什么要这样写,那还是要查看芯片的Datasheet

如果你看了手册,你觉得应该怎么写呢?

这个我知道,我想问的是为什么后面写那些值就是标记为蓝色的那些,手册上没有说明那些值是什么意思。


那你注释的这行是什么意思?

[code]
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
w977_write_reg(0x60, 0x0, efbase[1]);    //address              这里把0X60和0X0写到0X3F0和0X3F1是什么意思,手册上不是这样的啊
上面的注释//address是写程序的人注释的,后面汉字是我问的问题,我就是不知道把那两个值写进去做什么
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
有人做过吗?谢谢解答!
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

9
 
在hrimfaxi的帮助下问题基本解决:
w977_write_reg(0x60, 0x0, efbase[1]);    //address            
w977_write_reg(0x61, 0x60, efbase[1]);    //address--0x060
w977_write_reg(0x62, 0x0, efbase[1]);    //address
w977_write_reg(0x63, 0x64, efbase[1]);   //address--0x064
上面其实是附地址,和X86汇编差不多付高低值差不多。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表