In order to help the kernel save power, you can make an interrupt "lazy" by specifying an acceptable latency for it.
Before putting the CPU to sleep, the kernel checks all the interrupt latency values and sees if it can guarantee that another interrupt (e.g., for a timer tick) will occur before the latency period has expired. If it can prove that another interrupt will occur first, the kernel masks the lazy interrupt before going to sleep. When any interrupt is received by the CPU, all the lazily masked interrupts are unmasked.
To specify the interrupt latency, use the InterruptCharacteristic() kernel call:
int InterruptCharacteristic( int type, int id, unsigned *new, unsigned *old );
setting the arguments as follows:
ThreadCtl( _NTO_TCTL_IO, 0 );
For more information, see the entry for ThreadCtl() in the QNX Neutrino C Library Reference.
You can set the global latency value for the system by specifying an id of -1. If an interrupt attachment doesn't specify a latency value, the kernel uses the global latency number when calculating how deep a sleep state to use. You need to have I/O privileges to set the global latency value.
For more information about power management, see "Clocks, timers, and power management" in the Tick, Tock: Understanding the Neutrino Microkernel's Concept of Time chapter in this guide.