取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
Highlighted
Visitor
Visitor
759 次查看
注册日期: ‎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 解答

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

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 回复数
Highlighted
Moderator
Moderator
728 次查看
注册日期: ‎05-23-2018

Hi, @blueturkeys 

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

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

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

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

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这个配置和实际硬件对应就行。

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

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

 

在原帖中查看解决方案

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

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