NIOSII软核UART中断调试求助——Cyclone 10 LP评估板
Cyclone 10 LP NIOS II UART中断功能故障排查
问题背景
在Cyclone 10 LP评估板上运行搭载UART IP核的NIOS II软核处理器,轮询模式下UART所有功能正常,但UART中断功能无法正常工作。
FPGA配置情况
Platform Designer中已将UART的中断线连接至NIOS II软核处理器:
驱动状态
NIOS2 EDS中Altera UART驱动已就绪:
初始化代码
Altera提供的初始化代码如下:
/* * Initialize the interrupt controller devices * and then enable interrupts in the CPU. * Called before alt_sys_init(). * The "base" parameter is ignored and only * present for backwards-compatibility. */ void alt_irq_init ( const void* base ) { ALTERA_NIOS2_GEN2_IRQ_INIT ( NIOS2E, nios2e); alt_irq_cpu_enable_interrupts(); } /* * Initialize the non-interrupt controller devices. * Called after alt_irq_init(). */ void alt_sys_init( void ) { ALTERA_AVALON_JTAG_UART_INIT ( JTAG_UART, jtag_uart); ALTERA_AVALON_UART_INIT ( UART_0, uart_0); ALTERA_REMOTE_UPDATE_INIT ( REMOTE_UPDATE_0, remote_update_0); }
排查步骤
检查UART IP核的中断配置
- 确认UART IP核中已启用接收/发送中断(按需选择),并配置了正确的中断触发条件(如接收缓冲区满、发送缓冲区空等)。
- 核对UART的中断优先级,避免被其他高优先级中断完全抢占。
验证中断控制器配置
- 确认NIOS II中断控制器已启用对应UART中断号的中断掩码,可通过读取中断控制器状态寄存器排查。
- 核对Platform Designer中UART的中断号与软件注册的中断号是否一致。
补全中断注册代码
- 必须调用
alt_irq_register()完成UART中断服务程序(ISR)的注册,示例代码如下:static void uart_isr(void* context) { // 读取UART状态寄存器 uint32_t status = IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE); // 处理接收中断 if (status & ALTERA_AVALON_UART_STATUS_RRDY_MSK) { char recv_data = IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE); // 自定义数据处理逻辑 } // 清除中断标志位 IOWR_ALTERA_AVALON_UART_STATUS(UART_0_BASE, status); } // 在系统初始化后注册中断 alt_irq_register(UART_0_IRQ, NULL, uart_isr); - 确保ISR中正确清除UART中断标志位,否则会导致中断无法正常触发或反复触发。
- 必须调用
硬件层面验证
- 用示波器或逻辑分析仪监测UART的中断输出引脚,确认有中断信号产生。
- 检查评估板上UART的硬件连接,包括电平转换电路、引脚焊接是否正常。
软件调试技巧
- 在ISR中添加JTAG UART调试输出,确认中断服务程序是否被触发。
- 使用NIOS II调试器查看CPU中断状态寄存器,检查中断是否被正确识别和响应。
内容的提问来源于stack exchange,提问作者user7063051
相关产品推荐
相关产品推荐

