修改时间 02-21-2019 10:47 AM
大家上午好
在测试从PL到PS的中断过程中,软件上的DeviceId值不知如何区分;过程如下:
软件主函数如下:
#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中都没看出来哪里有区分!! 请多指教
修改时间 02-21-2019 02:01 PM
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这个配置和实际硬件对应就行。
不知道有没有表述清楚,供参考。
----------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
----------------------------------------------------------------------------------------------
修改时间 02-21-2019 01:00 PM
Hi, @blueturkeys
这些都应该在SDK中的xparameters.h文件中有定义。可以参考一下这个文件,并与Vivado中的address editor对照,应该就可以区分出device id了。
修改时间 02-21-2019 02:01 PM
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这个配置和实际硬件对应就行。
不知道有没有表述清楚,供参考。
----------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
----------------------------------------------------------------------------------------------