Table of Contents

Microblaze 中断系统


1. 概述

2. 中断信号的物理连接

system.mhs文件定义了物理硬件的相关信息,包括总线架构、外围设备、处理器、系统内部信号互连和地址空间等。
所以这里就通过MHS定义文件给出关于中断信号互连的信息。

MicroBlaze的中断输入,可以配置成电平触发或者边沿触发,在配置MicroBlaze的GUI或者在MicroBlaze.mpd中通过
设置 C_INTERRUPT_IS_EDGE ,C_EDGE_IS_POSITIVE来完成对中断的触发的配置。

MHS文件中,PORT Interrupt = Interrupt 和 PORT Irq = Interrupt 将Interrupt控制器连接到Microblaze的中断输入口。

mhs

mhs

BEGIN microblaze
  . . . 
  PORT MB_RESET = mb_reset
  PORT Interrupt = Interrupt
END


BEGIN xps_uartlite
  . . .  
  PORT Interrupt = RS232_Uart_1_Interrupt
END

BEGIN xps_intc
  . . .
  PORT Irq = Interrupt
  PORT Intr = RS232_Uart_1_Interrupt&plb_ps2_controller_0_IP2INTC_Irpt
END

BEGIN plb_ps2_controller
  . . .
  PORT IP2INTC_Irpt = plb_ps2_controller_0_IP2INTC_Irpt
  PORT mouse_clk = plb_ps2_controller_0_mouse_clk
  PORT mouse_data = plb_ps2_controller_0_mouse_data
  PORT key_clk = plb_ps2_controller_0_key_clk
  PORT key_data = plb_ps2_controller_0_key_data
END

3. 中断API

3.1 注册中断服务程序

XIntc_RegisterHandler(Xuint32 BaseAddress, int InterruptId, XInterruptHandler Handler, void *CallBackRef)
Or
int XIntc_Connect (XIntc *InstancePtr, u8 Id, XInterruptHandler Handler, void *CallBackRef)

其中:
Xuint32 BaseAddress       :XIntc实例的基地址
int InterruptId           :中断ID号,由MHS文件生成,格式为XPAR_<产生中断的元件的实例名>_<中断信号名> _INTR,可在头文件xparameter.h中找到
XInterruptHandler Handler :就是中断函数名了,由用户定义
void *CallBackRef         :向中断服务程序传递参数,可视情况来定启用与否,不用的话设为0或NULL;当是外部中断时就用NULL。

3.2 中断使能

microblaze_enable_interrupts()

XGpio_InterruptGlobalEnable (&Push_Buttons_Position)
XGpio_InterruptGlobalEnable (&DIP_Switches_8Bit)
XGpio_InterruptEnable (&Push_Buttons_Position, XGPIO_IR_CH1_MASK)
XGpio_InterruptEnable (&DIP_Switches_8Bit, XGPIO_IR_CH1_MASK)

XIntc_mMasterEnable(XPAR_XPS_INTC_0_BASEADDR)
XIntc_mEnableIntr(XPAR_XPS_INTC_0_BASEADDR, XPAR_PUSH_BUTTONS_POSITION_IP2INTC_IRPT_MASK|XPAR_DIP_SWITCHES_8BIT_IP2INTC_IRPT_MASK);