You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arm Cortex-A9定时器触发的IRQ无法清除问题排查

在QEMU xilinx-zynq-a9平台上裸机应用私有定时器中断异常问题

问题现象

  • 私有定时器首次触发IRQ符合预期,但之后会无间隔反复触发,而非设定的固定周期
  • 调试器单步执行时能回到主函数,但自由运行时无法返回
  • 手动配置了IRQ、FIQ及普通栈,$sp和cpsr寄存器状态均正常,排除栈损坏问题

排查分析

  • 怀疑GIC未正确撤销中断:参考实现了中断处理流程,首次倒计时完成后成功进入irq_handler并执行isr(),但完成中断应答、清除定时器ISR、发送中断结束信号后,会立即重新进入ISR
  • 测试单触发模式(确认计数后不再重启定时器),IRQ仍会反复触发;改用全局定时器,问题同样存在
  • 添加-d trace:gic*参数获取QEMU跟踪信息:执行gic_end_interrupt()后,仍出现以下日志,显示IRQ 29仍被识别为待处理状态:
    gic_update_bestirq cpu 0 irq 29 priority 0 cpu priority mask 248 cpu running priority 256
    gic_update_set_irq cpu[0]: irq = 1
    

系统信息

  • QEMU emulator version 8.0.2
  • 目标平台:xilinx-zynq-a9裸机应用
  • 编译参数:-march=armv7-a -marm

已验证内容

  • 定时器配置的控制寄存器、加载寄存器值符合预期,定时器能正常倒计时并触发首次中断
  • 调用WRITE32(pt_regs->timer_interrupt_status, 0x1);无法清除中断状态

内容的提问来源于stack exchange,提问作者i_am_human_probably

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:52:39