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
>

Reply via email to