keyboard.c 746 B

1234567891011121314151617181920212223242526272829
  1. #include "keyboard.h"
  2. #include "../kernel/global.h"
  3. #include "stdint.h"
  4. #include "../lib/kernel/io.h"
  5. #include "../lib/kernel/print.h"
  6. #include "../kernel/interrupt.h"
  7. // 键盘中断处理程序
  8. static void intr_keyboard_handler(void);
  9. void keyboard_init(void)
  10. {
  11. put_str("keyboard init start\n");
  12. // todo: 1. 打开 8042 键盘控制器
  13. // 2. 注册键盘中断处理程序
  14. register_handler(0x21, intr_keyboard_handler);
  15. put_str("keyboard init done\n");
  16. return;
  17. }
  18. // 键盘中断处理程序
  19. static void intr_keyboard_handler(void)
  20. {
  21. uint8_t scancode = inb(KBD_DATA_PORT); // 必须要读取输出缓冲寄存器,否则 8042 不再继续响应键盘中断
  22. put_int(scancode);
  23. put_char(' ');
  24. return;
  25. }