FPGA xps_intc EDK中断IP核

XPS中断功能的使用---添加外部引脚作为中断输入引脚

1、  在XPS中添加中断的IP核,名为”xps_intc”。如下图:

FPGA xps_intc EDK中断IP核_第1张图片

2、  中断控制器的总线连接。在”Bus Interfaces”中,将”xps_intc”连接到PLB总线上。如图:

 FPGA xps_intc EDK中断IP核_第2张图片

3、  中断控制器的端口连接。在”Ports”中,将”Irq”连接到microblaze核,添加两个外部引脚,

作为中断输入引脚,点击下图右上角红框,添加外部引脚,并选择方向和类型,这里方向选输入,类型选中断。

FPGA xps_intc EDK中断IP核_第3张图片

FPGA xps_intc EDK中断IP核_第4张图片

点击”xps_intc_0””Intr”,弹出中断连接对话框,如下图:

FPGA xps_intc EDK中断IP核_第5张图片

 将添加的两个外部引脚,添加到中断连接,即这两个引脚作为外部中断输入的引脚。

引脚添加好后,在xparameters.h中,会找到与这两个引脚相关的定义,如下图:

 FPGA xps_intc EDK中断IP核_第6张图片

 

4、  实现综合完后,在SDK下编写C语音程序;

(1)    XIntc InterruptController;//声明中断控制器变量

(2)     XIntc_Initialize(&InterruptController,XPAR_XPS_INTC_0_DEVICE_ID);//初始化中断控制器0

(3)     XIntc_Connect(&InterruptController,XPAR_XPS_INTC_0_SYSTEM_EXTERNALPORT_0_0_INTR,(Xil_ExceptionHandler)Ext_intc_hander, (void *)0);//将中断与中断处理函数对应起来,这里用的外部中断引脚0

(4)     XIntc_Enable(&InterruptController,XPAR_XPS_INTC_0_SYSTEM_EXTERNALPORT_0_0_INTR)//使能外部中断引脚0中断

(5)    XIntc_Start(&InterruptController, XIN_REAL_MODE);//开始中断

(6)    Xil_ExceptionInit();

(7)    Xil_ExceptionRegisterHandler(XPAR_XPS_INTC_0_SYSTEM_EXTERNALPORT_0_0_INTR,(Xil_ExceptionHandler)Ext_intc_hander,&InterruptController);

(8)    Xil_ExceptionEnable();

(9)    void Ext_intc_hander(void);//中断处理函数

 

5、  注意实现代码中红色部分,一定要在xparameters.h中找到相对应的定义。

附录:简单实现程序

#include"xparameters.h"

#include"xstatus.h"

#include"xintc.h"

#include"xgpio.h"

#include"xil_exception.h"

 

XIntc InterruptController;

XGpio LEDs;

u8 count_a;

 

void Ext_intc_hander(void);//中断处理函数

int main()

{

    XGpio_Initialize(&LEDs, XPAR_LEDS_DEVICE_ID);

    XGpio_SetDataDirection(&LEDs, 1, 0x00);

    XGpio_DiscreteWrite(&LEDs, 1, count_a);

    XIntc_Initialize(&InterruptController,XPAR_XPS_INTC_0_DEVICE_ID);//初始化中断控制器

    //将中断与中断处理函数对应起来,这里用的外部中断引脚0

    XIntc_Connect(&InterruptController, XPAR_XPS_INTC_0_SYSTEM_EXTERNALPORT_0_0_INTR,

                 (Xil_ExceptionHandler)Ext_intc_hander, (void *)0);

    //使能外部中断引脚0中断

    XIntc_Enable(&InterruptController, XPAR_XPS_INTC_0_SYSTEM_EXTERNALPORT_0_0_INTR);

    XIntc_Start(&InterruptController, XIN_REAL_MODE);

    Xil_ExceptionInit();

    Xil_ExceptionRegisterHandler(XPAR_XPS_INTC_0_SYSTEM_EXTERNALPORT_0_0_INTR,

               (Xil_ExceptionHandler)Ext_intc_hander, &InterruptController);

    Xil_ExceptionEnable();

    return 0;

}

 

void Ext_intc_hander()

{

    count_a = count_a + 1;

    XGpio_DiscreteWrite(&LEDs, 1, count_a);

}


 

 

 

 

 

 

你可能感兴趣的:(FPGA)