我在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版本。
如果我以后做:
我会期望跳转到UART中断服务程序,但实际上并没有发生。
这是NVIC/IRQ正确连接吗?还是还有其他东西缺失?
编辑2: 我意识到在固件代码中我没有启用中断!糟糕! 在设置NVIC使能寄存器中的正确位之后,它正常工作了!
我已经将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中断服务程序,但实际上并没有发生。
这是NVIC/IRQ正确连接吗?还是还有其他东西缺失?
编辑2: 我意识到在固件代码中我没有启用中断!糟糕! 在设置NVIC使能寄存器中的正确位之后,它正常工作了!