Hi, Thank you very much for your kind response.
Where can I check which category, atomic or not, an interrupt falls into? In msp430, I understand there are TOSH_SIGNAL and TOSH_INTERRUPT, which are equivalent to AVR_ATOMIC_HANDLER() and AVR_NONATOMIC_HANDLER(). But how do I find out if an interrupt is the former or the latter? Look forward to any clarification, which I'm sincerely grateful for. 2012/1/6 András Bíró <[email protected]> > 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 > -- -Xiaohui Liu
_______________________________________________ Tinyos-help mailing list [email protected] https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
