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 blueturkeys
Visitor
454 次查看
注册日期: ‎07-19-2018

关于从PL到PS的中断:如何区分DeviceId?

转到解答

大家上午好

          在测试从PL到PS的中断过程中,软件上的DeviceId值不知如何区分;过程如下:

          QQ图片20190221103848.png

          软件主函数如下:

#define LED_DEVICE_ID       XPAR_AXI_GPIO_1_DEVICE_ID
#define BTNS_DEVICE_ID      XPAR_AXI_GPIO_0_DEVICE_ID

int main (void)
{
	int status;
	// 初始化按键   id 是0
	status = XGpio_Initialize(&BTNInst, BTNS_DEVICE_ID);
	if(status != XST_SUCCESS) return XST_FAILURE;

	//初始化LED  id 是1
	status = XGpio_Initialize(&LED, LED_DEVICE_ID);
	if(status != XST_SUCCESS) return XST_FAILURE;

	// 设置按键IO的方向为输入
	XGpio_SetDataDirection(&BTNInst, 1, 0xFF);

	//设置LED IO的方向为输出
	XGpio_SetDataDirection(&LED, 1, 0x00);

	// 初始化中断控制器
	status = IntcInitFunction(INTC_DEVICE_ID, &BTNInst);
	if(status != XST_SUCCESS) return XST_FAILURE;

	while(1)
	{

        }
  
	return (0);
}

           测试结果中断进来正常,led显示正常;可以看代码中的这个#define LED_DEVICE_ID XPAR_AXI_GPIO_1_DEVICE_ID       和    #define BTNS_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID   ;不知道为什么button的id是0而LED的ID是1;在sdk和vivadio中都没看出来哪里有区分!! 请多指教

0 项奖励
1 个已接受解答

已接受的解答
Xilinx Employee
Xilinx Employee
407 次查看
注册日期: ‎09-14-2018

回复: 关于从PL到PS的中断:如何区分DeviceId?

转到解答

hi @blueturkeys 

首先要理解的是,device ID不是个hardware的属性:vivado工程中这两个GPIO instance对软件侧来说,只有address的区别,没有所谓的ID;

这个device ID是给BSP中的GPIO驱动使用的,xgpio_g.c中有如下XGpio_ConfigTable,存放每个GPIO配置时的参数,

XPAR_XGPIO_NUM_INSTANCES表示GPIO实例的数量,而ID就是为了在这个table中寻址的作用。

XGpio_Config XGpio_ConfigTable[XPAR_XGPIO_NUM_INSTANCES] =
{
	{
		XPAR_AXI_GPIO_0_DEVICE_ID,
		XPAR_AXI_GPIO_0_BASEADDR,
		XPAR_AXI_GPIO_0_INTERRUPT_PRESENT,
		XPAR_AXI_GPIO_0_IS_DUAL
	}
	{
		...
	}
};

如果理解了BSP中driver的代码就知道,这个ID只是使用driver初始化多个GPIO实例的时候的一个编号,至于这个编号按照什么先后顺序并没关系,只要baseaddr、interrupt ID、is_dual这个配置和实际硬件对应就行。

不知道有没有表述清楚,供参考。

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

 

在原帖中查看解决方案

4 条回复4
Moderator
Moderator
423 次查看
注册日期: ‎05-23-2018

回复: 关于从PL到PS的中断:如何区分DeviceId?

转到解答

Hi, @blueturkeys 

这些都应该在SDK中的xparameters.h文件中有定义。可以参考一下这个文件,并与Vivado中的address editor对照,应该就可以区分出device id了。

-------------------------------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Visitor blueturkeys
Visitor
418 次查看
注册日期: ‎07-19-2018

回复: 关于从PL到PS的中断:如何区分DeviceId?

转到解答

            我知道在哪里定义,不知道的是为什么button初始化的时候就用id:0 ,led的就用id :1 ;到底是如何匹配的呢

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

回复: 关于从PL到PS的中断:如何区分DeviceId?

转到解答

hi @blueturkeys 

首先要理解的是,device ID不是个hardware的属性:vivado工程中这两个GPIO instance对软件侧来说,只有address的区别,没有所谓的ID;

这个device ID是给BSP中的GPIO驱动使用的,xgpio_g.c中有如下XGpio_ConfigTable,存放每个GPIO配置时的参数,

XPAR_XGPIO_NUM_INSTANCES表示GPIO实例的数量,而ID就是为了在这个table中寻址的作用。

XGpio_Config XGpio_ConfigTable[XPAR_XGPIO_NUM_INSTANCES] =
{
	{
		XPAR_AXI_GPIO_0_DEVICE_ID,
		XPAR_AXI_GPIO_0_BASEADDR,
		XPAR_AXI_GPIO_0_INTERRUPT_PRESENT,
		XPAR_AXI_GPIO_0_IS_DUAL
	}
	{
		...
	}
};

如果理解了BSP中driver的代码就知道,这个ID只是使用driver初始化多个GPIO实例的时候的一个编号,至于这个编号按照什么先后顺序并没关系,只要baseaddr、interrupt ID、is_dual这个配置和实际硬件对应就行。

不知道有没有表述清楚,供参考。

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

 

在原帖中查看解决方案

Xilinx Employee
Xilinx Employee
402 次查看
注册日期: ‎09-14-2018

回复: 关于从PL到PS的中断:如何区分DeviceId?

转到解答

补充下,因为BSP是SDK根据hardware信息自动生成的,所以这个ID就是工具自动排列的,其实你也可以改掉,当然configtable中的参数也得对应过来。