免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2202 | 回复: 3
打印 上一主题 下一主题

CMOS 芯片求解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-06 12:00 |只看该作者 |倒序浏览
在linux 0.11内核版本中,定义了
#define CMOS_READ(addr) ({ \
outb_p(0x80|addr,0x70); \
inb_p(0x71); \
})
问题:CMOS RAM共有0x00 -- 0x7F共128个字节,0x80|addr是什么意思?我觉得应该是0x7F&addr,限制范围在[0x00,0x7F]中。

论坛徽章:
0
2 [报告]
发表于 2012-04-06 15:44 |只看该作者
#define outb(value,port) .... 那个是value吧

论坛徽章:
0
3 [报告]
发表于 2012-04-06 23:11 |只看该作者
为何研究0.11 版本的内核? 不直接研究最新的内核呢?

论坛徽章:
0
4 [报告]
发表于 2012-04-16 17:59 |只看该作者
本帖最后由 chunchengfh 于 2012-04-17 11:18 编辑

在操作端口0x70的时候,输入值的最高位(即0x80 = 0b10000000)控制了CPU的NMI的启用与否;
这是一个设置或者不设置的问题,没办法保持其原来的值不变
用0x80|addr表示关闭NMI

这个设计和A20(用键盘端口控制1M内存访问范围)一样,是当年为了节省一点资源而将八竿子打不着的两样东东混合到一起的设计结果

网上的解释:
Whenever you send a byte to IO port 0x70, the high order bit tells the hardware whether to disable NMIs from reaching the CPU. If the bit is on, NMI is disabled (until the next time you send a byte to Port 0x70). The low order 7 bits of any byte sent to Port 0x70 are used to address CMOS registers.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP