超时功能

This commit is contained in:
Yourtion
2016-04-18 14:06:26 +08:00
parent 3aea776876
commit b50c16d8e0
3 changed files with 36 additions and 4 deletions

View File

@@ -9,10 +9,11 @@ struct TIMERCTL timerctl;
void init_pit(void)
{
io_out8(PIT_CTRL, 0x43);
io_out8(PIT_CTRL, 0x34);
io_out8(PIT_CNT0, 0x9c);
io_out8(PIT_CNT0, 0x2e);
timerctl.count = 0;
timerctl.timeout = 0;
return;
}
@@ -20,5 +21,23 @@ void inthandler20(int *esp)
{
io_out8(PIC0_OCW2, 0x60); /* 把IRQ-00信号接收完了的信息通知给PIC */
timerctl.count++;
if (timerctl.timeout > 0) { /* 如果已经设定了超时 */
timerctl.timeout--;
if (timerctl.timeout == 0) {
fifo8_put(timerctl.fifo, timerctl.data);
}
}
return;
}
void settimer(unsigned int timeout, struct FIFO8 *fifo, unsigned char data)
{
int eflags;
eflags = io_load_eflags();
io_cli();
timerctl.timeout = timeout;
timerctl.fifo = fifo;
timerctl.data = data;
io_store_eflags(eflags);
return;
}