gpt4 book ai didi

c - PIT 不向 IRQ0 发送中断

转载 作者:行者123 更新时间:2023-12-04 09:23:08 24 4
gpt4 key购买 nike

这可能是一个菜鸟问题,但我一直在关注编写小型操作系统的教程。到目前为止,我已经设置了中断描述符表,一种用于注册处理程序,默认处理程序(将 int 数字打印到屏幕)并将 PIC 重新映射到中断 0x20 及以上。

我只是将可编程间隔计时器设置为以 50Hz 的频率计时,但它确实如此不生成任何 IRQ0。我在中断 32 处设置了定时器处理程序描述符表,但如果我使用以下命令手动生成中断:__asm__ volatile ("int $0x20); 我会在屏幕上打印“Tick: 0x00000001”。

这是我的 timer.c 文件:

#include <common.h>
#include <drivers/timer.h>
#include <drivers/isr.h>
#include <drivers/display.h>
#include <drivers/io.h>

u32int tick = 0;

static void timer_callback(registers_t regs) {
tick++;
print("Tick: ");
print_hex_dword(tick);
print("\n");
}

void init_timer(u32int frequency) {
register_interrupt_handler(IRQ0, &timer_callback);

u32int divisor = 1193180 / frequency;

outb(0x43, 0x36);

u8int l = (u8int) (divisor & 0xFF);
u8int h = (u8int) ((divisor >> 8) & 0xFF);

outb(0x40, l);
outb(0x40, h);
}

最佳答案

感谢那些回复的人。您的回答很有帮助,但问题是设置 IDT 并重新映射 PIC 后,我忘了再一次把大会包括在内启用中断。

附言:是的,在重新映射 PIC 后,我用 0x0 屏蔽了它们这应该启用所有中断。 -谢谢 Michael Petch。

此外,我在 Oracle VirtualBox 中运行内核Ubuntu 12.10,偶尔在真实硬件上进行测试。它也没有用,所以我不认为计时器是以任何方式禁用。 -谢谢马丁·詹姆斯

关于c - PIT 不向 IRQ0 发送中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com