链接是这样写的
http://www-ug.eecg.toronto.edu/msl/nios_devices/datasheets/PS2%20Keyboard%20Protocol.htm
当8042从键盘接收到一个有效的扫描码时,它就被转换成它的set 1等价物。然后将转换后的扫描代码放入输入缓冲区,设置IBF(输入缓冲区已满)标志,并断言IRQ 1
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/ioport.h>
#include <linux/delay.h>
#define I8042_COMMAND_REG 0x64
#define I8042_STATUS_REG 0x64
#define I8042_DATA_REG 0x60
static inline int i8042_read_data(void)
{
return inb(I8042_DATA_REG);
}
static inline int i8042_read_status(void)
{
return inb(I8042_STATUS_REG);
}
static inline void i8042_write_data(int val)
{
outb(val, I8042_DATA_REG);
}
static inline void i8042_write_command(int val)
{
outb(val, I8042_COMMAND_REG);
}
int __init hello_init(void)
{
int status = i8042_read_status();
int data;
while (!(status & 0x02)) {
status = i8042_read_status();
}
data = i8042_read_data();
pr_info("Data:%02x\n", data);
return 0;
}
void __exit hello_exit(void)
{
}
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
上面的代码被删除了,当我按键时它不起作用。
但是如果我把条件换成!(status&0x01)它正常工作。这是正确的。