将值写入并行端口寄存器

时间:2010-12-28 13:16:52

标签: c module linux-kernel

我正在尝试使用函数outb(0x378,val)写入我的lpt寄存器; 好吧..我尝试通过调用int ret=inb(0x378);进行调试无论我之前使用ret=255插入什么值,我总是得到outb

*我正在编写内核模式,因为我的程序是驱动程序,因此我没有使用ioperm()等。

提前谢谢。

4 个答案:

答案 0 :(得分:2)

您的outb函数参数错误,正确的顺序是:

outb(value, port)

所以你必须改变你的代码:

outb(val, 0x378)

有关详细信息,请阅读Linux I/O Programming Howto

答案 1 :(得分:0)

您是否设置了方向寄存器?如果将其设置为输入,则您将读取端口上的内容。

答案 2 :(得分:0)

您是否知道您在该地址安装了并行端口?

给自己一个小型低电流LED。将长端插入引脚2(LSB)至引脚9(MSB)之一,短引脚插入引脚25(接地)。

尝试编写各种值,看看是否可以通过所写内容的位值来改变LED。

这应该有效(除非前面提到过你已经在输入模式下编程了)能够回读端口值不太确定,具体取决于并行端口的类型和实现细节(例如,你可能无法使用在原始PC中实现它的缓冲芯片

另请注意,大多数USB“打印机”适配器都不提供按位寄存器访问。悬挂在PCI或PCMCIA等上的东西也可能在传统端口地址处直接寄存器访问时出现问题。有很好的USB并行接口芯片,如FT245和后继产品,如果没有可用的芯片组“真正的”并行端口,你可以使用它。

答案 3 :(得分:0)

inb(0x378)不需要返回写入的内容;至少我看过筹码表现如此。好吧,既然你在某个时候已经打电话给outb,你知道到底是什么。