Hi,

First of all, there are two interrupt handler macro (at least on AVR):
AVR_ATOMIC_HANDLER() and AVR_NONATOMIC_HANDLER(), obviously the first
one disables the global interrupts, the second one doesn't. Most of
the drivers uses the atomic one, you have to handle much more error
possibility in the non-atomic one, usually the atomic is more
effective.

However most driver doesn't handle the whole interrupt in atomic. For
example, on receive, the radio will download the message into the ram,
sets up timestamps, sends an ack if needed, then exits the atomic
content with posting a task. After that it does some message
formatting, and signals the Receive.receive event in non-atomic
context.

You will also receive most of the interrupts when exiting from the
atomic section: on most MCUs, an interrupt will set a flag. If the
flag is set while the global interrupts are disabled (atomic), the
interrupt will occour when you enable the global interrupts. The only
problem is if you receive more than one of the same interrupt: in that
case, you'll  only get the last one.

Interrupt priority: it depends on the MCU, check the datasheet. On the
AVRs, the lower interrupt vector address means higher priority.

Andris

On Fri, Jan 6, 2012 at 9:37 PM, Xiaohui Liu <[email protected]> wrote:
> Hello everyone,
>
> When an interrupt occurs (e.g. packet reception), its ISR is going to be
> executed. What will happen if another interrupt (e.g. another packet
> reception or timer fires) occurs before the ISR for the previous interrupt
> finishes? If the ISR is preempted, then interrupts can be nested and the
> last interrupt will always be served first? If it depends on the priorities
> of these interrupts, where can I find their priorities? Any explanation will
> be highly appreciated.
>
> --
> -Xiaohui Liu
>
> _______________________________________________
> Tinyos-help mailing list
> [email protected]
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to