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

ZCU102平台PMU移植UARTPS驱动中断异常求助

Zynq UltraScale+ MPSoC ZCU102 PMU下UARTPS中断异常排查求助

使用Zynq UltraScale+ MPSoC ZCU102评估套件,正在将UARTPS驱动移植至PMU运行。执行xuartps_intr_example.c时,程序卡在第285行的while循环中,怀疑UART中断Handler(对应原示例代码第333行)未正常工作。

UART0用于打印日志,UART1用于传输数据,相关配置如下:

中断控制器定义

#define INTC                                XIntc
#define INTC_DEVICE_ID      1
#define UART_INT_IRQ_ID     54

UARTPS配置表

XUartPs_Config XUartPs_ConfigTable[XPAR_XUARTPS_NUM_INSTANCES] = {
    {
        (u16)XPAR_XUARTPS_0_DEVICE_ID,           // 0
        (u32)XPAR_XUARTPS_0_BASEADDR,            // 0xFF000000
        (u32)XPAR_XUARTPS_0_UART_CLK_FREQ_HZ,    // 99990005
        (s32)0
    },
    {
        (u16)XPAR_XUARTPS_1_DEVICE_ID,           // 1
        (u32)XPAR_XUARTPS_1_BASEADDR,            // 0xFF010000
        (u32)XPAR_XUARTPS_1_UART_CLK_FREQ_HZ,    // 99990005
        (s32)0
    }
};

中断控制器配置表

#define XPAR_XINTC_NUM_INSTANCES      2          /* Number of instances */

#define XPAR_INTC_0_DEVICE_ID         1          /* Device ID for instance */
#define XPAR_INTC_0_BASEADDR          0x70800000 /* Register base address */
#define XPAR_INTC_0_ACK_BEFORE        0xFFFF00FF /* Ack timing, before/after */

#define XPAR_INTC_1_DEVICE_ID         2          /* Device ID for instance */
#define XPAR_INTC_1_BASEADDR          0x70800020 /* Register base address */
#define XPAR_INTC_1_ACK_BEFORE        0xFFFF00FF /* Ack timing, before/after */

XIntc_Config XIntc_ConfigTable[XPAR_XINTC_NUM_INSTANCES] = {
    {
        XPAR_INTC_0_DEVICE_ID,  /* Unique ID  of device */
        XPAR_INTC_0_BASEADDR,   /* Register base address */      
        XPAR_INTC_0_ACK_BEFORE, /* Ack before or after service */
        0                       /* Device options */
     }
    ,
    {
        XPAR_INTC_1_DEVICE_ID,  /* Unique ID  of device */
        XPAR_INTC_1_BASEADDR,   /* Register base address */
        XPAR_INTC_1_ACK_BEFORE, /* Ack before or after service */
        0                       /* Device options */
     }
};

排查建议

  • 中断控制器选型错误:PMU核心使用的是GICv2而非传统XIntc,当前代码中使用XIntc驱动完全不匹配,需替换为XScuGic驱动进行中断管理
  • 中断ID核对:ZCU102的PMU UART1中断ID并非54,需参考《Zynq UltraScale+ MPSoC Technical Reference Manual》(UG1085)中PMU中断映射表确认正确的中断号
  • 中断使能完整性:
    1. 确认UART1已通过XUartPs_SetInterruptMask开启对应发送/接收中断
    2. 确认中断控制器中已通过XScuGic_Enable使能目标中断
  • Handler注册验证:检查XScuGic_Connect是否正确将Handler与中断ID绑定,同时确认中断优先级、触发类型(电平/边沿)配置符合PMU要求
  • 硬件与参数匹配:确认UART1的波特率、数据位、停止位、奇偶校验参数与外设完全一致,引脚连接无松动
  • Handler触发验证:在Handler中添加寄存器写操作(如写入某块内存),通过JTAG调试工具监控该内存地址变化,直接判断Handler是否被触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:31:21