Many timers interrupts can eliminate the main loop ?

I have a code which have:

1.A PWM output (based on timer), but not a software PWM, an hardware PWM.
2.Another timer, that is about 1Khz in speed, with interrupt routines.

Then in the main loop, I was trying to read the analog pin, and print out things, but I could see that it wouldn't print when I set the timer to work fast enough.

Then I removed the print(it takes time), but I realised that the main loop of my software does not have time to perform the analog reading, and only if I put it inside a timer interrupt, I can both read and print values.

So, I was wondering :

1.Can too many timers calls block the main loop function from doing stuff, like printing that takes time?
2.If you have 3/4 timers (SAMD21) what happens when 2 interrupts happens together ?
3.Shouls I create another timer, and in there read the analog on interrupts(and maybe print it) ?

Thanks.

1.Can too many timers calls block the main loop function from doing stuff

Of course.

2.If you have 3/4 timers (SAMD21) what happens when 2 interrupts happens together ?

That is not possible. One will ALWAYS happen before the other. When one interrupt service routine is running, other interrupts don't happen. They get put in a queue to be handled when the ISR that is running is done, in the order received. The queue length is one, for each interrupt type.

3.Shouls I create another timer, and in there read the analog on interrupts(and maybe print it) ?

If you don't have time to do your homework when not on the phone, how will you have time if the phone rings more? More interrupts is not the solution. Realistic expectations are.

Regarding your last sentence, the thought is that interrupts have higher priority then the main loop, so instead of doing something in the loop, you do that in the interrupt.

Thanks for the other answers.

Regarding your last sentence, the thought is that interrupts have higher priority then the main loop, so instead of doing something in the loop, you do that in the interrupt.

Increasing the priority doesn’t make analogRead() faster. If you don’t have time in loop() to do something, you won’t have time to do it in an ISR.

You mention printing, so I assume you're using standard serial for the Arduino. I have had cases where my poor little processor couldn't keep up with demand, and I reduced or eliminated some of the printout. Also, use the highest serial baud rate that your receiving platform can handle.

PaulS:
If you don’t have time in loop() to do something, you won’t have time to do it in an ISR.

To add to that, it actually takes the Arduino longer to do something in an ISR because it has to save and restore the registers before and after the ISR runs.

Only use interrupts when necessary. They are not a substitute for poorly designed code.

…R