Philippe Gerum wrote:
> Henry Bausley wrote:
>> How do I setup xenomai so that my ISR can be re-entered even if I am
>> currently in it.
>>
>
> Try this:
>
The following is needed to allow the same interrupt to recurse as well.
> int your_isr(xnintr_t *intr)
> {
> unsigned long flags;
>
+ xnintr_enable(intr);
> xnlock_clear_irqon(&nklock);
>
> ... your code ...
>
> xnlock_get_irqsave(&nklock, flags); /* must re-lock on exit */
+ return XN_ISR_HANDLED | XN_ISR_NOENABLE;
> }
>
> We do take a per-IRQ lock internally as well, but this is a no-brainer for the
> issue at stake.
>
> NOTE: this solution is only valid in uniprocessor mode. SMP would run into
> deadlocks; we would need to provide internal support to allow this.
>
>> I have an external edge interrupt wired and it occurs every 250usec. There
>> are instances
>> when the interrupt can occur while I am currently in my ISR.
>>
>> If another interrupt occurs while I am currently in my ISR I want my ISR to
>> be called again
>> so I can flag that the condition occurred then exit the re-entered ISR and
>> continue executing
>> the originally called ISR.
>>
>>
>> I am using a board based off the AMCC 440EP Yosemite and a Denx Kit with
>> 2.6.24 and Xenomai 2.4.2
>> This something I did with previously with RT Linux. I have converted a
>> large project from FSM RT Linux
>> to Xenomai and everything is functioning except this last item.
>>
>>
>>
>>
>> _______________________________________________
>> Xenomai-help mailing list
>> [email protected]
>> https://mail.gna.org/listinfo/xenomai-help
>>
>
>
--
Philippe.
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help