linux内核驱动如何读取16位ISA的数据

发布于 2022-09-23 13:23:46 字数 316 浏览 12 评论 0

在pc104板上调试linux内核驱动。16位isa总线,现在用inb()读取数据时,可以正确的读取8位的数据,使用inw()时,读到的是两个连续的地址里的两个8位数据组成的16位数据,不知如何能读到isa的高8位数据!
地址      数据对上数据
0x0300     0x1234
0x0301             0x5678
用inw(0x300)时,是把0x0300 和0x0301的每个低8位数据读进来组成了一个16位数据,0x7834.
请教如何读取一个16位的数据进来。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

放低过去 2022-09-30 13:23:46

应该有相应的接口吧,这个没有仔细研究过

白云悠悠 2022-09-30 13:23:46

用什么命令可以读取16位ISA的数据进来。

安静被遗忘 2022-09-30 13:23:46

用inb怎么读出0x12呢?
是不是板子的地址线有问题啊

萌面超妹 2022-09-30 13:23:46

那个是举个例子,写错了,我现在是直接把数据线的D6位接低,其它全部为高。用inb(0x300)读出来的数据是0xbf 这个是对的。用inw(0x300)读回来的就是0xbfbf,应该为0xffbf才对(因为高位全部为高)在使用ISA总线的不同地址位时得出的结果还不太一样。使用0X100地址时读出来的全是inb(0x100) 为0xff和inw(0x100)为0xffff,使用0x200地址时,读出来的就和0x300的结果一样了.使用0x400地址时,读出来的又和0x100的结果一样。

颜漓半夏 2022-09-30 13:23:46

我感觉这个和你的电路特性有关吧

梦罢 2022-09-30 13:23:46

检查下配置的模式

风柔一江水 2022-09-30 13:23:46


unsigned long io=(unsigned long)ioremap(ISA_BASE,ISA_MAX-1);
然后isa_readw或ioread16

特别说明:现在内核必须配合虚粒内存系统工作,先要映射.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文