I'm trying to collect data from a single channel using the ADS1299 at 1000 Hz. We have implemented a C function that uses the libsoc_gpio library to collect the data from the ADS1299 chip at that rate, but regardless of data rate, I see long periods where the DRDY pin stays down. It will pull up for a brief moment so that a falling edge occurs precisely at the data rate. This results in a set number of samples being collected slower than anticipated. Below is a trace of our DRDY pin and the SCLK pin. If it was a matter of overlapping events and data transfers taking too long, I would expect that only 1 sample would be skipped at a time, but in the example below, it's on the 3rd falling edge that the transfer picks back up.
Based on this post (https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/526781/ads1299-unexpected-drdy-behaviour-above-250sps) we suspected that our interrupt strategy to trigger data transfer was causing the issues. We initially used libsoc_gpio_wait_interrupt with a wait time of 10 ms. After reading that post and some forums, we tried libsoc_gpio_callback_interrupt, but both of these implementations resulted in the same behavior. Is there a way to use the libsoc_gpio functions efficiently enough to not miss any DRDY pins and avoid this gap, or is there a recommended interrupt technique that's recommended?