<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Zynq: Custom IP IRQ</title><link>/members-area/personalblogs/b/blog/posts/zynq-custom-ip-irq</link><description>Hello there, Recently I had to work with the interrupt features of Zynq and encountered some challenges.Thankfully I managed to solve them so I decided to share the information in case other...</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: Zynq: Custom IP IRQ</title><link>https://community.element14.com/members-area/personalblogs/b/blog/posts/zynq-custom-ip-irq</link><pubDate>Wed, 01 Nov 2023 16:43:18 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9a42e6b0-4006-4c6d-a10c-6b11dc8d83f5</guid><dc:creator>Jonathan101</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Hi&amp;nbsp;&lt;a class="internal-link view-user-profile" href="/members/dhmarinov" data-e14adj="t"&gt;dhmarinov&lt;/a&gt;,&lt;/p&gt;
&lt;p&gt;Does the procedure you described is viable for Ultrascale+ ?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve noticed that I don&amp;#39;t see the interrupt identifier on xparameters.h.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=6606&amp;AppID=293&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Zynq: Custom IP IRQ</title><link>https://community.element14.com/members-area/personalblogs/b/blog/posts/zynq-custom-ip-irq</link><pubDate>Thu, 25 Mar 2021 12:36:40 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9a42e6b0-4006-4c6d-a10c-6b11dc8d83f5</guid><dc:creator>dhmarinov</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Hi Victor,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The code looks fine, but the problem may be in the hardware - did you make sure that the interrupt source is maked as suck i.e. when packaging the IP you have to indicate that the interrup is such a signal.&lt;/p&gt;&lt;p&gt;You can find out whether that has been done correctly if you find the interrup in the xparameters.h. &lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=6606&amp;AppID=293&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Zynq: Custom IP IRQ</title><link>https://community.element14.com/members-area/personalblogs/b/blog/posts/zynq-custom-ip-irq</link><pubDate>Wed, 24 Mar 2021 17:03:39 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9a42e6b0-4006-4c6d-a10c-6b11dc8d83f5</guid><dc:creator>vricardoas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Dear Dimitar,&lt;/p&gt;&lt;p&gt;I highly appreciate your post, it is very informative.&lt;/p&gt;&lt;p&gt;It is been a while that I have a similar problem, and I still have it!!&lt;/p&gt;&lt;p&gt;I tried what you said on your post, however it did not worked for me.&lt;/p&gt;&lt;p&gt;I have made a Custom IP and I want to use the interrupt services, but I am not able to generate any interrupt from my Custom IP. At this point I am not sure if the problem is related with the SW or with the HW vhdl Template.&lt;/p&gt;&lt;p&gt;I include my code, so if you have a chance, please check it and tell me if you found my mistake.&lt;/p&gt;&lt;p&gt;Thank you very much in advance,&lt;/p&gt;&lt;p&gt;Kind Regards,&lt;/p&gt;&lt;p&gt;Victor.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;&lt;p&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/p&gt;&lt;p&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/p&gt;&lt;p&gt;#include &amp;quot;xil_printf.h&amp;quot;&lt;/p&gt;&lt;p&gt;//#include &amp;quot;./LFSR_HY_v1_0/src/LFSR_HY.h&amp;quot;&lt;/p&gt;&lt;p&gt;#include &amp;quot;LFSR_HY_INT_Driver.h&amp;quot;&lt;/p&gt;&lt;p&gt;#include &amp;quot;xparameters.h&amp;quot;&lt;/p&gt;&lt;p&gt;/***********For interruption***********/&lt;/p&gt;&lt;p&gt;#include &amp;quot;xscugic.h&amp;quot;&lt;/p&gt;&lt;p&gt;#include &amp;quot;xil_exception.h&amp;quot;&lt;/p&gt;&lt;p&gt;/***********DEFINES***********/&lt;/p&gt;&lt;p&gt;//LFSR&lt;/p&gt;&lt;p&gt;#define LFSR_HY_INT_BASE_ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XPAR_LFSR_HY_INT_0_S00_AXI_BASEADDR&lt;/p&gt;&lt;p&gt;#define S_Freq_Div_Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_S00_AXI_SLV_REG0_OFFSET&lt;/p&gt;&lt;p&gt;#define S_UpDown&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_S00_AXI_SLV_REG1_OFFSET&lt;/p&gt;&lt;p&gt;#define S_trig&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_S00_AXI_SLV_REG2_OFFSET&lt;/p&gt;&lt;p&gt;#define S_seq&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_S00_AXI_SLV_REG3_OFFSET&lt;/p&gt;&lt;p&gt;#define S_registro&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_S00_AXI_SLV_REG4_OFFSET&lt;/p&gt;&lt;p&gt;#define S_Clk_seq&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_S00_AXI_SLV_REG5_OFFSET&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;#define LFSR_HY_INT_DEVICE_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XPAR_LFSR_HY_INT_0_DEVICE_ID&lt;/p&gt;&lt;p&gt;#define LFSR_HY_INT_INTERRUPT_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XPAR_FABRIC_LFSR_HY_INT_0_IRQ_INTR&lt;/p&gt;&lt;p&gt;//SCUGIC&lt;/p&gt;&lt;p&gt;#define INTC_DEVICE_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XPAR_PS7_SCUGIC_0_DEVICE_ID&lt;/p&gt;&lt;p&gt;//---------------------Structure declarations-----------------------------//&lt;/p&gt;&lt;p&gt;XScuGic INTC_inst;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //An instance of global interrupt controller&lt;/p&gt;&lt;p&gt;LFSR_HY_INT LFSR_HY_INT_inst;&amp;nbsp;&amp;nbsp;&amp;nbsp; //An instance of our custom IP&lt;/p&gt;&lt;p&gt;//-----------------------Prototype functions------------------------------//&lt;/p&gt;&lt;p&gt;void LFSR_HY_INT_Handler(void *CallbackRef);&lt;/p&gt;&lt;p&gt;void XScuGicSetup();&lt;/p&gt;&lt;p&gt;//------------------------Interrupt Handler-------------------------------//&lt;/p&gt;&lt;p&gt;void LFSR_HY_INT_Handler(void *CallbackRef){&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xil_printf(&amp;quot;\r\n Interrupt Handler&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Disable the interrupt&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_DisableInterrupt(&amp;amp;LFSR_HY_INT_inst, 0x1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xil_printf(&amp;quot;\r\n Interrupt Disable&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //ACK the interrupt&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_ACKInterrupt(&amp;amp;LFSR_HY_INT_inst, 0x1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xil_printf(&amp;quot;\r\n ACK Interrupt&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable the interrupt&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_EnableInterrupt(&amp;amp;LFSR_HY_INT_inst, 0x1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xil_printf(&amp;quot;\r\n Interrupt Enable&amp;quot;);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;//------------------------Interrupt Controller Setup-------------------------------//&lt;/p&gt;&lt;p&gt;void XScuGicSetup(){&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Initialize the interrupt controller driver so that it is ready to use.*/&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static XScuGic_Config * IntcConfig;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XScuGic_CfgInitialize(&amp;amp;INTC_inst, IntcConfig, IntcConfig-&amp;gt;CpuBaseAddress);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable our custom interrupt&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_EnableInterrupt(&amp;amp;LFSR_HY_INT_inst, 0x1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_GlobalEnableInterrupt(&amp;amp;LFSR_HY_INT_inst, 0x1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Connect the interrupt controller interrupt handler to the hardware&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * interrupt handling logic in the ARM processor.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Xil_ExceptionHandler)XScuGic_InterruptHandler,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void*)&amp;amp;INTC_inst);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xil_ExceptionEnable(); //Enable interrupts in the ARM&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Connect a device driver handler that will be called when an&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * interrupt for the device occurs, the device driver handler performs&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * the specific interrupt processing for the device&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XScuGic_Connect(&amp;amp;INTC_inst,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_INTERRUPT_ID,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Xil_ExceptionHandler)LFSR_HY_INT_Handler,&amp;nbsp; //Xil_InterruptHandler&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable our custom interrupt AGAIN...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_EnableInterrupt(&amp;amp;LFSR_HY_INT_inst, 0x1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_GlobalEnableInterrupt(&amp;amp;LFSR_HY_INT_inst, 0x1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable Global Interrupt Controller&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XScuGic_Enable(&amp;amp;INTC_inst, LFSR_HY_INT_INTERRUPT_ID);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xil_printf(&amp;quot;\r\n Interrupt Ready To Go!!&amp;quot;);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;int main()&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* LFSR driver initialization */&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //LFSR_HY_INT_Reg_SelfTest((void *) LFSR_HY_INT_BASE_ADDR); //checks the read/write registers&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_mWriteReg(LFSR_HY_INT_BASE_ADDR, S_Freq_Div_Select, 0);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_mWriteReg(LFSR_HY_INT_BASE_ADDR, S_UpDown, 0);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32 reloj = 0;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32 trigger = 0;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32 sequence = 0;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32 registro = 0;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xil_printf(&amp;quot;Serial Connection started.\n\r&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LFSR_HY_INT_Init(&amp;amp;LFSR_HY_INT_inst, LFSR_HY_INT_BASE_ADDR);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XScuGicSetup();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1){&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;return 0;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=6606&amp;AppID=293&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item></channel></rss>