I don't think dvvrcognizant actually looked at your code, which IS reading the data into a circular buffer,
but the you commit the cardinal sin of doing a long slow operation (printf) from INSIDE the ISR.
That will guarantee you will lose data.
Pull it out of there right now.
Also, you have a flag named READ_DONE to tell your non-interrupt code there is data present, but you never set it.
I guess it didn't work for you because you didn't add a "volatile" qualifier to the variable.
You must always do that if a variable is changed inside an ISR and referred to from outside the ISR.
Change the definition to:
volatile uint8_t READ_DONE=0;