3 Replies Latest reply on Oct 26, 2020 2:32 PM by drozwood90

    Interrupt stops working


      I have a Avnet Ultrazed starter kit and I am running into an that I need help with.

      I am using Vivado /SDK  2019.1 and Petlainux 2019.1. The Vivado project include a

      1. AXI-GPIO with the interrupt enabled

      2. concat IP where the interrupt from GPIO is connected

      3. AXI-intc - the output from the concat IP is connected to the INTC input and the IRQ is connected to thepl_ps_irq0



      I created a Petalinux build using this hardware with the following:

      • in the config I enabled UIO support

      • added uio-generic in the device tree for that GPIO

      • added the uio_pdrv_genirq.of_id=generic-uio to the bootargs

      I build the project and it boots fine, I have the GPIO pin connected to a data ready line from a device. I created a C++ program that uses the UIO code to wait on an interrupt from that I run the program in a couple of scenarios for testing.The program makes sure at exit to disable GIER and IP IER for the GPIO and acknowledge any interrupts left over by writing 1 to IP ISR.



      Scenario 1:

      • I turn off the device

      • start the program which waits for interrupt as expected

      • start the device

      • In normal operation, everything works as expected where the code catches the interrupt and process the data.



      Scenario 2:

      • Same as scenario 1

      • stop the program

      • power off the device

      • Power the device

      • Restart the program, everything is working correctly



      Scenario 3

      • Same as scenario 1

      • Power off the device while the program is running. When I turn the device off, there is a residual power that cause noise on the GPIO pin.

      • I stop the program.

      • I power the device on

      • Restart the program, I don't receive any interrupts and I can't get it to work again till I restart.



      My guess is the noise is causing a lot of interrupts that cause the issue.



      This is what I tried so far

      • Remove the AXI-INTC and connected directly to the PL_PS_IRQ - same issue

      • I looked at the AXI GPIO register and all the interrupts are setup as expected

      • I checked in the AXI-INTC and the interrupt is enabled for the GPIO



      In the final design, I don’t think this might be an issue but I would like to know if there is a way to recover so that I don't have to restart.