Hello. I am currently implementing a Microblaze system with 2 external interrupts. Let us call them bus_reset_INTR and opb_intc_0_Intr_pin . Now earlier I had written some code to include only opb_intc_0_Intr_pin and it worked perfectly fine. The code is given below:
XIntc_Initialize(&InterruptController, XPAR_OPB_INTC_0_DEVICE_ID); microblaze_enable_interrupts(); XIntc_Connect(&InterruptController, DEVICE_INTERRUPT_ID,(XInterruptHandler)PacketParser,(void *)0); XIntc_Start(&InterruptController, XIN_REAL_MODE); XIntc_Enable(&InterruptController, DEVICE_INTERRUPT_ID); XIntc_Initialize(&InterruptController, XPAR_OPB_INTC_0_DEVICE_ID);
void PacketParser() { //BLAH }
The MHS/MSS files were straight forward.
//MHS //BLAH PORT npa_INTR = INTR, VEC = [0:0], DIR = I, SIGIS = INTERRUPT, SENSITIVITY = EDGE_RISING BEGIN microblaze PARAMETER INSTANCE = microblaze_0 PARAMETER HW_VER = 4.00.a PARAMETER C_USE_FPU = 1 PARAMETER C_INTERRUPT_IS_EDGE = 1 PARAMETER C_USE_BARREL = 1 PARAMETER C_USE_DIV = 1 BUS_INTERFACE DLMB = dlmb BUS_INTERFACE ILMB = ilmb BUS_INTERFACE DOPB = mb_opb BUS_INTERFACE IOPB = mb_opb PORT CLK = sys_clk_s PORT INTERRUPT = microblaze_0_INTERRUPT END
BEGIN opb_intc PARAMETER INSTANCE = opb_intc_0 PARAMETER HW_VER = 1.00.c PARAMETER C_IRQ_IS_LEVEL = 0 PARAMETER C_BASEADDR = 0x41200000 PARAMETER C_HIGHADDR = 0x4120ffff BUS_INTERFACE SOPB = mb_opb PORT OPB_Clk = sys_clk_s PORT Intr = INTR PORT Irq = microblaze_0_INTERRUPT END
Now when I include bus_reset_INTR in my design, everything collapses. Both interrupts aren't detected by the processor. The C code for this new hardware is:
XIntc_RegisterHandler(XPAR_OPB_INTC_0_BASEADDR, XPAR_OPB_INTC_0_DCAM_SUPREMO_13_BUS_RESET_INTR_INTR, (XInterruptHandler)BusReset, (void *)0); XIntc_RegisterHandler(XPAR_OPB_INTC_0_BASEADDR, XPAR_OPB_INTC_0_DCAM_SUPREMO_13_OPB_INTC_0_INTR_PIN_INTR, (XInterruptHandler)PacketParser, (void *)0); XIntc_mMasterEnable(XPAR_OPB_INTC_0_BASEADDR); microblaze_enable_interrupts();
void PacketParser() { //BLAH } void BusReset() { //BLAH }
The modified MHS is: PORT opb_intc_0_Intr_pin = opb_intc_0_Intr, DIR = I, VEC = [0:0], SIGIS = INTERRUPT, SENSITIVITY = EDGE_RISING PORT bus_reset_INTR = bus_reset_L, DIR = I, SIGIS = INTERRUPT, SENSITIVITY = EDGE_RISING, VEC = [0:0] //BLAH BEGIN microblaze PARAMETER INSTANCE = microblaze_0 PARAMETER HW_VER = 4.00.a PARAMETER C_USE_FPU = 0 PARAMETER C_USE_DIV = 1 PARAMETER C_INTERRUPT_IS_EDGE = 1 BUS_INTERFACE DLMB = dlmb BUS_INTERFACE ILMB = ilmb BUS_INTERFACE DOPB = mb_opb BUS_INTERFACE IOPB = mb_opb PORT CLK = sys_clk_s PORT INTERRUPT = opb_intc_0_Irq END
BEGIN opb_intc PARAMETER INSTANCE = opb_intc_0 PARAMETER HW_VER = 1.00.c PARAMETER C_NUM_INTR_INPUTS = 2 PARAMETER C_IRQ_IS_LEVEL = 0 PARAMETER C_BASEADDR = 0x41200000 PARAMETER C_HIGHADDR = 0x4120ffff BUS_INTERFACE SOPB = mb_opb PORT Irq = opb_intc_0_Irq PORT Intr = opb_intc_0_Intr&bus_reset_L END
And my MSS file reads:
PARAMETER VERSION = 2.2.0 PARAMETER int_handler = PacketParser, int_port = opb_intc_0_Intr_pin PARAMETER int_handler = BusReset, int_port = bus_reset_INTR //BLAH
Now I am wondering where the problem could lie. If someone could help me make this work, then that would be great!!!
Thanks Viswanathan