Its really important to keep an ISR down to the absolute bare-bones - calling
anything complicated may lead to lock-up if the library involved itself uses
delay or interrupts in some fashion. Whilst in an ISR all interrupts are deferred.
Because interrupts run asynchronously to the main code you have to be careful
not to foul up state used by both - unless the function / library being called has
been coded to be fully re-entrant.