Hi MrInternet, good that you're debugging step-by-step. There is no while loop in the constructor itself, but it does call the 'write' function to write the settings to the register. The while loop in the write function looks like this:
while (!(PIND & _BV(_DRDY))); // wait for ready to go high
while (PIND & _BV(_DRDY)); // wait for ready to go low
It is in there to make sure that you're writing to the register at the beginning of a 'low' DRDY period, because if you're only starting to write at the end of the DRDY period, it might end before the commands are written.
I don't understand why invoking the serial monitor would have anything to do with the DRDY pin of the ADS1213. Invoking it just restarts the Arduino.
It seems that you're having the problem that the DRDY pin is not following the standard pattern of high/low, it must be high or low all the time, resulting in the statement within the while loop always being true, thus causing an infinite loop. However, if the ADS1213 is functioning correctly, the DRDY pin will go high/low in a certain pattern (which you can find in the datasheet).
You have been debugging down to a basic level: you've been testing a simple case of communication between the Arduino and ADS1213. But as the DRDY pin of the ADS1213 might not function correctly, it's wise to check if the ADS1213 itself is even working properly, there might be a problem with the crystal for example. So what you can do is write a simple script for the Arduino that polls the ADS1213's DRDY pin and then tells you something about the signal, like how many times it went high/low in the last second. Then, you can see if the ADS1213 is working or not.