首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MicroBlaze的GPIO中断(思路清晰)

MicroBlaze的GPIO中断(思路清晰)

MicroBlaze的GPIO中断是相对比较简单的一种中断,其概念比较好理解。 1、首先要将XGpio IP中的“GPIO Supports Interrupts”选项使能,使得GPIO支持中断方式。 2、(推荐)使用XPS中断控制器IP,方便中断管理: 加入XPS_INTC Instance,使其Irq和MicroBlaze Processor的Interrupt输入相连,然后Intr断接来自GPIO等外设的中断信号,如有多个中断接入,可用“Intr = RS232_Uart_Intq&DIP_Switches_8Bit_Irq&Push_Buttons_Intq”的方式将它们共同连到Intr端口,注意这些中断的优先级从前到后依次升高,这个设置在XPS GUI窗口中可以设置。 3、写中断服务程序(ISR): 注意在进入中断服务函数后需要及时清中断,否则跳出中断后又会马上进该中断。 4、注册(连接)中断服务函数、中断使能、等待中断: 用函数XIntc_RegisterHandler(Xuint32 BaseAddress, int InterruptId, XInterruptHandler Handler, void *CallBackRef)注册中断服务程序。其中Xuint32 BaseAddress是XIntc实例的基地址,int InterruptId是中断ID号,由MHS文件生成,格式为XPAR_<产生中断的元件的实例名>_<中断信号名> _INTR,可在头文件xparameter.h中找到。XInterruptHandler Handler就是中断函数名了,由用户定义。当中断函数被调用时void *CallBackRef被用来传递参数,可视情况来定启用与否,不用的话设为0或NULL;当是外部中断时就用NULL。int XIntc_Connect (XIntc *InstancePtr, u8 Id, XInterruptHandler Handler, void *CallBackRef)也可完成类似功能。 实例: //register the isrXIntc_RegisterHandler(XPAR_INTC_0_BASEADDR,        XPAR_XPS_INTC_0_PUSH_BUTTONS_POSITION_IP2INTC_IRPT_INTR,        (XInterruptHandler)push_button_int_handler,        (void *)0);XIntc_RegisterHandler(XPAR_INTC_0_BASEADDR,        XPAR_XPS_INTC_0_DIP_SWITCHES_8BIT_IP2INTC_IRPT_INTR,        (XInterruptHandler)dip_switch_int_handler,        (void *)0); 接下来就是中断使能了: //must enable mb_enable bitmicroblaze_enable_interrupts();//must enable xgpio_interruptglobalenable bit;XGpio_InterruptGlobalEnable (&Push_Buttons_Position);XGpio_InterruptGlobalEnable (&DIP_Switches_8Bit);//must enable xgpio_instance_enable bitXGpio_InterruptEnable (&Push_Buttons_Position, XGPIO_IR_CH1_MASK);XGpio_InterruptEnable (&DIP_Switches_8Bit, XGPIO_IR_CH1_MASK); //must enable XIntc_mMasterEnableXIntc_mMasterEnable(XPAR_INTC_0_BASEADDR);//must enable specific interrupt(s) in the interrupt controller.XIntc_mEnableIntr(XPAR_INTC_0_BASEADDR,      XPAR_PUSH_BUTTONS_POSITION_IP2INTC_IRPT_MASK      |XPAR_DIP_SWITCHES_8BIT_IP2INTC_IRPT_MASK); OK,开始等待中断的到来吧。 来源:心的微笑的博客
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表