免费注册 查看新帖 |

Chinaunix

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

8259端口地址 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-25 23:16 |只看该作者 |倒序浏览
一般介绍8259A的书上都说,
由于8086的数据线宽为16位,而8259A的数据线8位只能接在数据总线的低8位上,
所以CPU要使用两个相邻的偶地址来寻址8259A的一对奇偶端口,只要使用数据总线的
A1接到8259A的A0即可,
那么照这样32位机中是否cpu对8259A寻址端口号为4的倍数?
可是我在Linux源代码中发现对主8259A的初始化仍然使用20H和21H,
不是2的倍数,更谈不上4的倍数呢?
这到底应该怎么解释?

论坛徽章:
0
2 [报告]
发表于 2010-05-26 09:26 |只看该作者
这里面的20H和21H

其中H为16进制,而数据线8位为二进制,所以LZ可能在这混淆了~~~

论坛徽章:
0
3 [报告]
发表于 2010-05-26 09:36 |只看该作者
回复 2# aaaaa5aa


    大哥,我没混淆,我的意思是,假如在8086系统中(80386类似不过是32位),CPU用数据总线传输16位数据时,总是把数据送到以偶地址开头的两个相邻单元或者两个相邻端口。当CPU往内存传输数据时,低8位数据传输到较低的偶地址单元,高8位数据传输到较高的奇地址单元。
所以,如果采用21H的端口地址,由于它不是一个偶地址,所以传输数据的时候,数据不会出现在低8位数据总线上,而PC/AT的中断系统又是直接将CPU的D0-D7与8259的D0-D7相连,那这样数据传输不就出错了吗?

论坛徽章:
0
4 [报告]
发表于 2010-05-26 09:40 |只看该作者
本帖最后由 aaaaa5aa 于 2010-05-26 09:54 编辑

回复 3# lqshixinlei


    这个21H端口是16进制的,也就是说,其实占用
16^`+16^0的字节位,而数据总线占8位,所以是其初始化是4的倍数

论坛徽章:
0
5 [报告]
发表于 2010-05-26 09:47 |只看该作者
回复 4# aaaaa5aa


    不好意思,我不是很明白啊,21H是00100001不是奇数吗,希望能与您在线交流一下,QQ370164535

论坛徽章:
0
6 [报告]
发表于 2010-05-26 11:16 |只看该作者
每两个字节占用一个端口号,相对于8086系统的来说其是,其是20号端口,但相对于8259A来说,其永远在8086系统中的第二个字节里面

在实际的微机系统中,总是给8259A分配两个相邻的偶地址,其中,一个为4的倍数,对应于A1=0,A0=0,并使这个地址较低,另一个不为4的倍数

论坛徽章:
0
7 [报告]
发表于 2010-05-27 15:06 |只看该作者
本帖最后由 star1983653 于 2010-05-27 15:13 编辑

8259的数据线是8位。
也就是说,8259的寄存器是1个字节,8个位(1/0的位)
那么2个8259的寄存器就是2个字节。
20H 和21H,不正好是2个字节吗?
21H对应奇地址,20H偶地址。
8位数据线
和8个字节的对齐
位是位 ,是1,0
字节是字节,有8个位。

“所以CPU要使用两个相邻的偶地址来寻址8259A的一对奇偶端口”
的意思是说8259的奇偶端口的地址要相邻,并且要以一个偶数的地址起始。
并不是奇偶端口的地址都要是偶数的地址


另外8259的连接方式是告诉 你,不要试图用1个2字节的数据,一次性写8259的奇偶端口。
而是1个端口1个端口的写
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP