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.
Thanks
Johnny
