在使用vitis(2020.2)对7020进行编程的时候,初始化了两个uartlite中断,但是初始化完成后,发现只能使用uartlite1,uartlite0进不到中断。
·
在使用vitis(2020.2)对7020进行编程的时候,初始化了两个uartlite中断,但是初始化完成后,发现只能使用uartlite1,uartlite0进不到中断。
以下是错误代码
void UserUartliteInit(void)
{
UserUartliteValueInit();
UartLiteIntrInit(&IntcInstance0,
&UartLite0,
XPAR_UARTLITE_0_DEVICE_ID,
XPAR_FABRIC_UARTLITE_0_VEC_ID,
Uartlite0SendHandler,
Uartlite0RecvHandler);
UartLiteIntrInit(&IntcInstance1,
&UartLite1,
XPAR_UARTLITE_1_DEVICE_ID,
XPAR_FABRIC_UARTLITE_1_VEC_ID,
Uartlite1SendHandler,
Uartlite1RecvHandler);
XUartLite_Recv(&UartLite0, ImuRs422.RecvBuf, 1);
XUartLite_Recv(&UartLite1, ServoRs422.RecvBuf, 1);
}
int UartLiteIntrInit(XScuGic *IntcInstancePtr,XUartLite *InstancePtr,u16 DeviceId,u16 UartLiteIntrId,void *SendHandler,void *RecvHandler)
{
int Status;
Status = XUartLite_Initialize(InstancePtr, DeviceId);//uartlite0初始化
if (Status != XST_SUCCESS) {
return XST_FAILURE;
xil_printf("XUartLite_SelfTest failure.\r\n");
}
Status = XUartLite_SelfTest(InstancePtr);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
xil_printf("XUartLite_SelfTest failure.\r\n");
}
Status = SetupInterruptSystem(IntcInstancePtr,InstancePtr,UartLiteIntrId);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
xil_printf("XUartLite_SelfTest failure.\r\n");
}
xil_printf("XUartLite_Interrupt ok.\r\n");
//设置回调函数
XUartLite_SetSendHandler(InstancePtr, SendHandler, InstancePtr);
XUartLite_SetRecvHandler(InstancePtr, RecvHandler, InstancePtr);
XUartLite_EnableInterrupt(InstancePtr);
return XST_SUCCESS;
}
这样初始化就会导致只能运行一个uartlite的中断,原因是中断实例不能初始化两次,相当于使用了最后一次初始化的中断实例。
解决方法:
初始化了两次中断实例,导致使用的时候只能使用最后初始化的那个,所以需要初始化一个IntcInstance实例,将IntcInstance0,IntcInstance1都修改为IntcInstance,然后clean project再build project,一定要clean。
更多推荐



所有评论(0)