【发布时间】:2018-05-04 18:09:42
【问题描述】:
我有一个在 qemu 中运行的 stm32 (arm-cortexm3) 固件,想模拟一个硬件中断,比如 uart rx 中断。如何让 qemu 跳转到固件中实现的 isr?
我已将 isr 放置在向量表中的正确位置。 我已经在我的模拟 uart 中设置了 irq 号。 但是当我调用 qemu_set_irq() 然后调用 cpu_interrupt(&env, CPU_INTERRUPT_HARD) 时, qemu 中断但以“hwerror,interrupt but no vector”中止。
有些东西不见了。有人知道吗?
编辑: 使用 qemu-stable-2.10
nvic = armv7m_init(system_memory, flash_size, NUM_IRQ_LINES, kernel_filename, cpu_model);
qemu_irq uart_irq = qdev_get_gpio_in(nvic, 1);
uart = sysbus_create_simple(TYPE_VCPU_UART, 0x40020000, uart_irq);
如果我以后这样做:
qemu_set_irq(uart_irq ,1);
我希望跳转到 uart isr,但它没有发生。
这是正确的 nvic/irq 连接,还是缺少一些东西?
EDIT2 我意识到我没有在固件代码中启用中断!哎呀! 在 NVIC Set Enable 寄存器中设置适当的位后,它就可以工作了!
【问题讨论】:
-
你为什么不使用实际的硬件?
-
因为在 qemu 中进行模拟的重点在于您不必这样做。