UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

取消
显示结果 
搜索替代 
您的意思是: 
Visitor eepro_bt
Visitor
425 次查看
注册日期: ‎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
378 次查看
注册日期: ‎09-14-2018

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

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

感觉可能是工具问题。

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

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

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

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

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

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

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

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

 

0 项奖励
Visitor eepro_bt
Visitor
272 次查看
注册日期: ‎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 项奖励