我使用Picozed SDR SOM 2x2。我的Vivado和SDK工具的版本是2015.4。
我需要为axi_uartlite块使用一些PMOD连接器。
生成比特流后,我已将硬件导出到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示例,没有人正在使用。
答案 0 :(得分:0)
在使用代码进行任何操作之前,您应该检查AXI中断控制器是否直接连接到Microblaze处理器。要快速执行此操作,您可以在图形设计视图(XPS)中检查中断控制器的连接。中断控制器上的INTERRUPT端口必须连接到Microblaze的INTERRUPT端口。
如果没有连接,显然中断不起作用。但您可以手动编辑项目的.mhs文件。对于Microblaze和中断控制器,添加:
# some ports...
BUS_INTERFACE INTERRUPT = microblaze_0_interrupt
# some ports...