nRF24L01 IRQ control questions.

Hello, this is my first time working with an Arduino board and RF transceiver, and I have been working on a small project using the nordic nRF24L01+ and am having a bit of difficulty understanding the IRQ pin and its use.

From what I’ve gathered, the TX_DS and TX_DR bits are responsible for it’s operation, but I’m having difficulties understanding how to use them and control when the IRQ pin is high or low. So far I’ve been using the maniacbug lib which seems good for pinging back and forth but I wish for the IRQ pin to switch states once the ack comes in.

My question is, is it possible to set the IRQ pin to output a voltage to another device by controlling the registers, is there a better library for managing the IRQ pin, and is there a good place to read up more on how to control it’s operation?

To anyone who takes time to answer, thank you.

There are three different IRQ sources: TX_DS (you just transmitted a packet successfully), RX_DR (you just received a packet), and MAX_RT (you tried to transmit a packet but no acknowledgement was received from the receiver). By default, all of these sources will cause the IRQ to go active (GND voltage)…see the CONFIG register if you don’t want the IRQ to cause the pin to go active.

When the IRQ pin is asserted, the first thing you want to do is read the L01’s STATUS register. It will tell you which of the flags is active. Once you read the value and handle whatever business you need to do based on the interrupts that were active (such as reading the new payload on an RX_DR), then you have to manually clear the interrupt bits by writing binary '1’s to their respective bit positions in the STATUS register. The interrupt flags in the STATUS register do not autoclear in any circumstance. This may be the problem that you’re having, because if you aren’t clearing the IRQ bits in the STATUS register, then the IRQ pin will stay active forever (once you get the first IRQ, that is).