一、制作FIFO缓冲区
该缓冲区用于提高中断处理程序的处理速度,中断处理程序只需将数据写入缓存区中就执行结束
定义
struct FIFO8 {
unsigned char *buf;
int p, q, size, free, flags;
};
buf为缓存区地址
p,q分别为写入、读取指针
size表示缓存区的大侠
free表示缓存区中没有数据的字节数
flags记录是否溢出
二、获取按键编码
void inthandler21(int *esp)
{
unsigned char data;
io_out8(PIC0_OCW2, 0x61); /* IRQ-01受理已经完成 */
data = io_in8(PORT_KEYDAT); //PORT_KEYDAT=0X0060
fifo8_put(&keyfifo, data); //向缓存区写入数据
return;
}
三、获取鼠标信息
void inthandler2c(int *esp)
/* PS/2マウスからの割り込み */
{
unsigned char data;
io_out8(PIC1_OCW2, 0x64); /* IRQ-12受理完成 */
io_out8(PIC0_OCW2, 0x62); /* IRQ-02受理完成 */
data = io_in8(PORT_KEYDAT);
fifo8_put(&mousefifo, data); //向缓存区写入数据
return;
}
四、总结
1.书中中断的处理过程就是从相应的端口读取数据,并将数据写入到缓存区中
2.所有缓存区数据处理的工作都是在主函数中完成的
3.代码中出现的硬件编号是约定好的,阅读时不应过于纠结,当做固定写法
4.使用鼠标时必须先让鼠标控制电路有效,再激活鼠标