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

Reply via email to