Hi,
I suppose that there are two reasons that you get less samples.
The first one is that the SCK is not continuous, when the /CS is high, the SCK signal disappears, so during the time that the /CS is high, you can not read samples, which reduce the sampling.
Secondly, I do not suggest you use printf() to output the sample result to console, I suppose that you can use a timer to generate an interrupt, in the ISR of timer, you can toggles a flag. when the flag is set, you can start to read the sample with SPI based on polling or interrupt mode, when the flag is cleared, you can stop reading the sample and check how many sample you have read.
Hope it can help you
BR
XiangJun Rong