linux内核驱动如何读取16位ISA的数据
在pc104板上调试linux内核驱动。16位isa总线,现在用inb()读取数据时,可以正确的读取8位的数据,使用inw()时,读到的是两个连续的地址里的两个8位数据组成的16位数据,不知如何能读到isa的高8位数据!
地址 数据对上数据
0x0300 0x1234
0x0301 0x5678
用inw(0x300)时,是把0x0300 和0x0301的每个低8位数据读进来组成了一个16位数据,0x7834.
请教如何读取一个16位的数据进来。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
应该有相应的接口吧,这个没有仔细研究过
用什么命令可以读取16位ISA的数据进来。
用inb怎么读出0x12呢?
是不是板子的地址线有问题啊
那个是举个例子,写错了,我现在是直接把数据线的D6位接低,其它全部为高。用inb(0x300)读出来的数据是0xbf 这个是对的。用inw(0x300)读回来的就是0xbfbf,应该为0xffbf才对(因为高位全部为高)在使用ISA总线的不同地址位时得出的结果还不太一样。使用0X100地址时读出来的全是inb(0x100) 为0xff和inw(0x100)为0xffff,使用0x200地址时,读出来的就和0x300的结果一样了.使用0x400地址时,读出来的又和0x100的结果一样。
我感觉这个和你的电路特性有关吧
检查下配置的模式
先
unsigned long io=(unsigned long)ioremap(ISA_BASE,ISA_MAX-1);
然后isa_readw或ioread16
特别说明:现在内核必须配合虚粒内存系统工作,先要映射.