UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Visitor walkerata
Visitor
8,908 Views
Registered: ‎03-20-2015

Problem with PL generated edge sensitive interrupts in Vivado 2014.4

Jump to solution

I'm trying to get the Zynq PS to appropriately acknowledge a user-generated (in the PL) edge-sensitive interrupt. 

 

I have verified that my interrupt is being generated in the PL appropriately using the ILA (and an external scope). I have the sensitivity set within my custom IP appropriately. I am hooking the interrupt pin from my peripheral directly to the IRQ_F2P port on the Zynq PS.

 

The issue is that even though I have set the sensitivity of my interrupt to be "EDGE_RISING" in my peripheral, the PS seems to want to treat the interrupt sensitivity as though it is LEVEL_HIGH. When I click on the IRQ_F2P pin properties on the Zynq PS block, I can see that it has a config property set to "LEVEL_HIGH." I cannot change this property to EDGE_RISING, as it is read only. 

 

The result is that (because this signal is active low) as soon as I enable the GIC, it triggers interrupts constantly even though no interrupts are occuring (the signal idles high). Vivado tells me that the Zynq GIC can only handle sensitivity settings of "LEVEL_HIGH" and "EDGE_RISING." How do I set the IRQ_F2P pin to be rising edge sensitive rather than LEVEL_HIGH sensitive?

0 Kudos
1 Solution

Accepted Solutions
Visitor walkerata
Visitor
14,645 Views
Registered: ‎03-20-2015

Re: Problem with PL generated edge sensitive interrupts in Vivado 2014.4

Jump to solution

Okay, I solved my own problem.

 

XScuGic_SetPriorityTriggerType(Handle, Interrupt, 0x0, 0x3);

 

0x3 sets a rising edge triggered interrupt, 0x0 sets highest priority. System works now.

 

 

0 Kudos
4 Replies
Visitor walkerata
Visitor
8,901 Views
Registered: ‎03-20-2015

Re: Problem with PL generated edge sensitive interrupts in Vivado 2014.4

Jump to solution

I should further clarify, this interrupt is not being passed over an AXI interface. It is a one bit port on my peripheral connected directly to the IRQ_F2P port of the Zynq PS block.

 

Am I missing something? Is there some way to set the sensitivity of this interrupt in software when I register it? I've looked through all the examples and I can see some things regarding "trigger types" but I'm not quite sure what to make of that.

 

I'll do some more reading, but if anyone has any guidance it'd be much appreciated. :) 

0 Kudos
Visitor walkerata
Visitor
14,646 Views
Registered: ‎03-20-2015

Re: Problem with PL generated edge sensitive interrupts in Vivado 2014.4

Jump to solution

Okay, I solved my own problem.

 

XScuGic_SetPriorityTriggerType(Handle, Interrupt, 0x0, 0x3);

 

0x3 sets a rising edge triggered interrupt, 0x0 sets highest priority. System works now.

 

 

0 Kudos
Adventurer
Adventurer
3,282 Views
Registered: ‎09-18-2009

Re: Problem with PL generated edge sensitive interrupts in Vivado 2014.4

Jump to solution

@walkerata,

 

I also was looking for setting interrupt trigger type and found following functions:

 

To get the current interrupt priority and trigger type

/****************************************************************************/
/**
* Gets the interrupt priority and trigger type for the specificd IRQ source.
*
* @param	BaseAddr is the device base address
* @param	Int_Id is the IRQ source number to modify
* @param	Priority is a pointer to the value of the priority of the IRQ
*		source. This is a return value.
* @param	Trigger is pointer to the value of the trigger of the IRQ
*		source. This is a return value.
*
* @return	None.
*
* @note		This API has the similar functionality of XScuGic_GetPriority
*	        TriggerType() and should be used when there is no InstancePtr.
*
*****************************************************************************/
void XScuGic_GetPriTrigTypeByDistAddr(u32 DistBaseAddress, u32 Int_Id,
					u8 *Priority, u8 *Trigger)

 

To set the desired interrupt priority and trigger type

/****************************************************************************/
/**
* Sets the interrupt priority and trigger type for the specificd IRQ source.
*
* @param	BaseAddr is the device base address
* @param	Int_Id is the IRQ source number to modify
* @param	Priority is the new priority for the IRQ source. 0 is highest
* 			priority, 0xF8 (248) is lowest. There are 32 priority levels
*			supported with a step of 8. Hence the supported priorities are
*			0, 8, 16, 32, 40 ..., 248.
* @param	Trigger is the new trigger type for the IRQ source.
* Each bit pair describes the configuration for an INT_ID.
* SFI    Read Only    b10 always
* PPI    Read Only    depending on how the PPIs are configured.
*                    b01    Active HIGH level sensitive
*                    b11 Rising edge sensitive
* SPI                LSB is read only.
*                    b01    Active HIGH level sensitive
*                    b11 Rising edge sensitive/
*
* @return	None.
*
* @note		This API has the similar functionality of XScuGic_SetPriority
*	        TriggerType() and should be used when there is no InstancePtr.
*
*****************************************************************************/
void XScuGic_SetPriTrigTypeByDistAddr(u32 DistBaseAddress, u32 Int_Id,
					u8 Priority, u8 Trigger)

 

0 Kudos
Highlighted
Visitor kishorep
Visitor
3,174 Views
Registered: ‎11-15-2017

Re: Problem with PL generated edge sensitive interrupts in Vivado 2014.4

Jump to solution

Hi ,

  I am facing same issue  in the linux environment, even after  calling below api after calling request_threaded_irq

irq_set_irq_type(61,IRQF_TRIGGER_RISING |IRQF_ONESHOT);

 

configured ISR is  not called, only when I set interrupt flag to  TRIGGER_LOW interrupt is triggered.

 

Any help ..?

 

Regards,

Kishore P

 

 

0 Kudos