Xilinx的Zynq-7000。 AXI Uartlite的中断系统

时间:2017-04-21 11:09:56

标签: fpga xilinx uart interrupt-handling zynq

我使用Picozed SDR SOM 2x2。我的Vivado和SDK工具的版本是2015.4。

我需要为axi_uartlite块使用一些PMOD连接器。

There is my design

生成比特流后,我已将硬件导出到SDK。然后我导入了xuartlite_polled_example。使用示波器和从tx到rx的物理环回我确定示例工作正常。

然后我导入了xuartlite_intr_example(因为对我来说使用中断很重要)并且它不起作用。

处理来自示例的中断的一些来源:

static volatile int TotalSentCount = 0;
static volatile int TotalReceivedCount = 0;

void SendHandler(void *CallBackRef, unsigned int EventData)
{
    TotalSentCount = EventData;
}

void RecvHandler(void *CallBackRef, unsigned int EventData)
{
    TotalReceivedCount = EventData;
}

循环捕获程序的位置(使用System Debugger和GDB检查):

/*
 * Wait for the entire buffer to be received, letting the interrupt
 * processing work in the background, this function may get locked
 * up in this loop if the interrupts are not working correctly.
 */

while ((TotalReceivedCount != TEST_BUFFER_SIZE) ||
    (TotalSentCount != TEST_BUFFER_SIZE)) {
}

为什么我的中断无法正常工作?我还尝试使用Vivado和SDK 2016.4以及ZC702板。结果相同,xuartlite_polled_example正在运行,而xuartlite_intr_example则没有。

我还为AXI中断控制器导入了SDK示例,没有人正在使用。

1 个答案:

答案 0 :(得分:0)

在使用代码进行任何操作之前,您应该检查AXI中断控制器是否直接连接到Microblaze处理器。要快速执行此操作,您可以在图形设计视图(XPS)中检查中断控制器的连接。中断控制器上的INTERRUPT端口必须连接到Microblaze的INTERRUPT端口。

如果没有连接,显然中断不起作用。但您可以手动编辑项目的.mhs文件。对于Microblaze和中断控制器,添加:

   # some ports...
   BUS_INTERFACE INTERRUPT = microblaze_0_interrupt
   # some ports...