PL061 has a register GPIOIS to control if the interrupt is lever-triggered or edge-triggered, I will try this. Thanks.
2013/8/28 Max Filippov <jcmvb...@gmail.com> > On Wed, Aug 28, 2013 at 12:01 PM, she roy <she.min....@gmail.com> wrote: > > I tested qemu_irq_pulse(gPl061->irq); the guest did not generate an > > interrupt. so I changed to > > > > qemu_set_irq(gPl061->irq, 1); > > sleep(1); > > qemu_set_irq(gPl061->irq, 0); > > > > A lot of interrupts generated. Is it possible to generate just one > > interrupt? > > This looks like level-triggered interrupt behaviour. In such cases > interrupt handler > in the device driver is usually responsible for disabling IRQ line > while processing > interrupt. You can add a register to your device, writing to which would > call > > qemu_set_irq(gPl061->irq, 0) > > and write to that register from your driver's ISR. > Or you can choose an edge-triggered IRQ to play with. > > > 2013/8/27 Max Filippov <jcmvb...@gmail.com> > >> > >> On Tue, Aug 27, 2013 at 3:55 PM, she roy <she.min....@gmail.com> wrote: > >> > How to lower it? Thank you very much! > >> > > >> > >> qemu_set_irq(gPl061->irq, 0); > >> > >> Or you could try > >> > >> void pl061_raise_irq() > >> { > >> qemu_irq_pulse(gPl061->irq); > >> } > >> > >> > 2013/8/27 Max Filippov <jcmvb...@gmail.com> > >> >> > >> >> On Tue, Aug 27, 2013 at 3:36 PM, she roy <she.min....@gmail.com> > wrote: > >> >> > Is there somebody can help me to trigger a gpio interrupt inside > >> >> > qemu? I > >> >> > wrote a simple function to trigger a interrupt in pl061.c as > follow: > >> >> > PL061State *gPl061; > >> >> > void pl061_raise_irq() > >> >> > { > >> >> > qemu_set_irq(gPl061->irq, 1); > >> >> > } > >> >> > >> >> [...] > >> >> > >> >> > But when i call pl061_raise_irq inside qemu once, the guest run > into > >> >> > an > >> >> > infinite loop. it prints: > >> >> > ... > >> >> > irq:[927012]receive the irq at -12002... > >> >> > irq:[927013]receive the irq at -12002... > >> >> > irq:[927014]receive the irq at -12002... > >> >> > irq:[927015]receive the irq at -12002... > >> >> > irq:[927016]receive the irq at -12002... > >> >> > irq:[927017]receive the irq at -12002... > >> >> > irq:[927018]receive the irq at -12002... > >> >> > ... > >> >> > can somebody tell me what's wrong? > >> >> > >> >> You have raised IRQ in your pl061_raise_irq(), but you haven't > lowered > >> >> it. > > -- > Thanks. > -- Max >