ADC sampling rate doesn't tally with sampling rate calculated from plot

Hey guys. Thanks for the replies.

I've got it working. As it turns out, the problem lies with using Serial.print() instead of Serial.write(). With Serial.print(), the ADC value will be converted to ASCII characters and therefore each digit consumes 8 bits. For example, an ADC value of 511 would take up 24 bits + another 8 bits for the space delimiter that I've chosen. In other words, a 10-bit ADC value is inflated to a total of 4 ASCII characters, which is 32-bits in size. This increase in bytes to be sent plus the processing time associated with the mapping between the ADC value and the corresponding ASCII characters lengthen the time before Serial.print() return while in the ISR. In contrast, with Serial.write(), the UART logic would only be required to send two 1-byte (8 bits is the size of the UART TX buffer). What I did was split the 10-bit ADC value into 2 parts. I first send the first byte containing the least significant 5 bits and then the second byte containing the most significant 5 bits of the ADC value. The leftover 3 bits from each byte is used for identification on whether the byte is the first part or the second part.

The results? Sampling rate as calculated from the plots is in fair agreement with the sampling rate configured at the ADC.

Before:

Sampling rate = (1702-1630)/0.02 = 3600 samples/s

After:

Sampling rate = (3467-3276)/0.02 = 9550 samples/s

@Magician:
Well, the ADC is not configured to run in single conversion mode. Therefore, ADSC is only required to be set once. Thanks for the helpful link by the way. Cheers.