Double buffer - Spurious IRQ

Hi all,

I’m working in double buffer mode. I’ve noted that, in case of a good reception event, the high-to-low transition of the IRQ line is spurious and my host gets a second rising-edge IRQ event. I’ve further seen the spike with the oscilloscope. The spurious falling edge occurs while the host program is clearing SYS_STATUS_ALL_RX_GOOD flags in the dwt_isr callback. This seems not to appear in single-buffer reception mode. My IRQ line is pulled-down and I do rx re-enable manually. Is this behavior correct or is my module misconfigured?

Thanks,
Fabio

Hi Fabiovee,

yes, DW chip in some circumstances can produce a short spike which can be latched by MCU.

Did you follow User manual paragraph 4.3.3 and have masked IRQ before clearing SYS_STATUS?

You also can use the following pseudocode to prevent unnecessary readings of SYS_STATUS:

void DW_IRQ_PIN_ISR()
{
while(READ_DW_IRQ_PIN_IO() == HIGH)
{
dwt_isr();
}
}

Hello Fabiovee,

We also had this problem and solved it by doing the procedure specified in the following block diagram in the user manual:
Figure 14: Flow chart for using double RX buffering

So we added the HSRBP==ICRBP comprpobation, the masking/unmasking to protect the clear event and, at the end, the toggle of the pointer, and it was solved.