取消
显示结果 
搜索替代 
您的意思是: 
Highlighted
Visitor
Visitor
771 次查看
注册日期: ‎08-28-2018

SDK在debug模式下,PS不响应PL送入的中断信号,SDK中示例程序同样不响应

本人在zcu102开发板上验证axi dma的传输,将s2mm和mm2s的中断通过concat全部接入PS的pl_ps_irq0[1:0]端口

axi dma的2个方向传输功能正确,但是在SDK中debug发现无法进入中断响应函数的断点,但是run却可以正常中断

请教各位朋友,怎样才能在debug中进入中断函数的断点呢?

4 条回复4
Highlighted
Xilinx Employee
Xilinx Employee
724 次查看
注册日期: ‎09-14-2018

回复: SDK在debug模式下,PS不响应PL送入的中断信号,SDK中示例程序同样不响应

debug模式下不单步,中断函数是会调用的对吧?

感觉可能是工具问题。

0 项奖励
Highlighted
Visitor
Visitor
697 次查看
注册日期: ‎08-28-2018

回复: SDK在debug模式下,PS不响应PL送入的中断信号,SDK中示例程序同样不响应

启动debug后,不在中断响应函数中加断点,仍无法进入中断响应函数

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
685 次查看
注册日期: ‎09-14-2018

回复: SDK在debug模式下,PS不响应PL送入的中断信号,SDK中示例程序同样不响应

“但是run却可以正常中断”是指什么方式运行?

你的debug设置是怎样的,可否截个屏看看。

----------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
----------------------------------------------------------------------------------------------

 

0 项奖励
Highlighted
Visitor
Visitor
618 次查看
注册日期: ‎08-28-2018

回复: SDK在debug模式下,PS不响应PL送入的中断信号,SDK中示例程序同样不响应

用下图的配置方式,在工程上点Run As就可以正常进入中断响应函数,在工程上点Debug As就无法进入中断响应函数,无论是否在中断响应函数中加入断点
Ashampoo_Snap_2019年1月14日_06h53m46s_001_Debug Configurations.png

代码如下,功能是通过EMIO实现按钮对LED的控制

#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"

XGpioPs Gpio;
XScuGic Intc;

//中断响应函数
static void IntrHandler(void *CallBackRef, u32 Bank, u32 Status)
{
//XGpioPs_SetCallbackHandler连接中断响应函数时传入GPIO对象
XGpioPs *Gpio = (XGpioPs *)CallBackRef;

//LED值,1表示点亮,0表示关闭
u32 btn = 0;

//4个按钮控制各控制1个LED,最后1个按钮控制剩下4个LED
btn = XGpioPs_ReadPin(Gpio, 86);
XGpioPs_WritePin(Gpio, 78, btn);

btn = XGpioPs_ReadPin(Gpio, 87);
XGpioPs_WritePin(Gpio, 79, btn);

btn = XGpioPs_ReadPin(Gpio, 88);
XGpioPs_WritePin(Gpio, 80, btn);

btn = XGpioPs_ReadPin(Gpio, 89);
XGpioPs_WritePin(Gpio, 81, btn);

btn = XGpioPs_ReadPin(Gpio, 90);
XGpioPs_WritePin(Gpio, 82, btn);
XGpioPs_WritePin(Gpio, 83, btn);
XGpioPs_WritePin(Gpio, 84, btn);
XGpioPs_WritePin(Gpio, 85, btn);
}

int main(void)
{
print("emio test begins");

int Status;
XGpioPs_Config *ConfigPtr;

//根据ID,查找配置
//参数来源于xparameters.h
ConfigPtr = XGpioPs_LookupConfig(XPAR_XGPIOPS_0_DEVICE_ID);
if (ConfigPtr == NULL)
{
return XST_FAILURE;
}

//初始化
//根据配置初始化gpio对象
Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr, ConfigPtr->BaseAddr);
if (Status != XST_SUCCESS)
{
return XST_FAILURE;
}

//根据ug1085,EMIO的IO序号为78~173,对应95个EMIO

//设置8个LED的GPIO方向为输出
XGpioPs_SetDirectionPin(&Gpio, 78, 1);
XGpioPs_SetDirectionPin(&Gpio, 79, 1);
XGpioPs_SetDirectionPin(&Gpio, 80, 1);
XGpioPs_SetDirectionPin(&Gpio, 81, 1);
XGpioPs_SetDirectionPin(&Gpio, 82, 1);
XGpioPs_SetDirectionPin(&Gpio, 83, 1);
XGpioPs_SetDirectionPin(&Gpio, 84, 1);
XGpioPs_SetDirectionPin(&Gpio, 85, 1);
//使能8个LED的GPIO输出
XGpioPs_SetOutputEnablePin(&Gpio, 78, 1);
XGpioPs_SetOutputEnablePin(&Gpio, 79, 1);
XGpioPs_SetOutputEnablePin(&Gpio, 80, 1);
XGpioPs_SetOutputEnablePin(&Gpio, 81, 1);
XGpioPs_SetOutputEnablePin(&Gpio, 82, 1);
XGpioPs_SetOutputEnablePin(&Gpio, 83, 1);
XGpioPs_SetOutputEnablePin(&Gpio, 84, 1);
XGpioPs_SetOutputEnablePin(&Gpio, 85, 1);

//设置5个按钮的GPIO方向为输入
XGpioPs_SetDirectionPin(&Gpio, 86, 0);
XGpioPs_SetDirectionPin(&Gpio, 87, 0);
XGpioPs_SetDirectionPin(&Gpio, 88, 0);
XGpioPs_SetDirectionPin(&Gpio, 89, 0);
XGpioPs_SetDirectionPin(&Gpio, 90, 0);

//设置按钮的GPIO中断

//查找中断配置
XScuGic_Config *IntcConfig;
IntcConfig = XScuGic_LookupConfig(XPAR_SCUGIC_SINGLE_DEVICE_ID);
if (NULL == IntcConfig)
{
return XST_FAILURE;
}

//中断初始化
Status = XScuGic_CfgInitialize(&Intc, IntcConfig, IntcConfig->CpuBaseAddress);
if (Status != XST_SUCCESS)
{
return XST_FAILURE;
}

//连接GPIO中断处理函数XGpioPs_IntrHandler,由此函数分发中断至自定义的GPIO中断函数
//GPIO中断ID定义在xparameters_ps.h
Status = XScuGic_Connect(&Intc, XPAR_XGPIOPS_0_INTR, (Xil_ExceptionHandler)XGpioPs_IntrHandler, (void *)&Gpio);
if (Status != XST_SUCCESS)
{
return Status;
}

//中断控制器中使能GPIO中断
XScuGic_Enable(&Intc, XPAR_XGPIOPS_0_INTR);

//使能硬件中断
Xil_ExceptionInit();
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler)XScuGic_InterruptHandler, &Intc);
Xil_ExceptionEnable();

//设置GPIO中断类型
//根据ug1085,当前按钮全位于BANK3
//后3个参数全是32位掩码,每一位对应当前BANK的1个GPIO接口
//最后1个参数设置上升沿和下降沿都中断,此时倒数第2个参数无效
XGpioPs_SetIntrType(&Gpio, XGPIOPS_BANK3, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF);

//连接自定义的GPIO中断响应函数
XGpioPs_SetCallbackHandler(&Gpio, (void *)&Gpio, IntrHandler);

//使用5个按钮的GPIO中断
//根据ug1085,当前按钮全位于BANK3
//根据ug1085,找到按钮位于当前BANK中的位置[12:8]
XGpioPs_IntrEnable(&Gpio, XGPIOPS_BANK3, 0b1111100000000);

//工作循环无操作
while (1)
{
;
}

print("emio test ends");
}

0 项奖励