I am running into a problem with my ISRs during active CPU computation in main(). I am reading samples at a fixed 44.1kHz interval via the McBSP interface (MRINTA ISR). I am outputting these samples to the ePWM module at a custom frequency using the CPU Timer0 (TINT0 ISR) varying between 44.1kHz and 88.2kHz. My McBSP interrupt routine takes 1.25 microseconds to run, and my Timer0 routine takes 5 microseconds to run (it does a bit of floating point math).
I have a main loop that calls a computation-heavy function roughly every 30ms (33Hz), which does a lot of floating point math on buffers that are (I believe) stored in flash -- they are in L5 DPSARAM. It takes about 7ms to run. During this function call both my TINT0 and MRINTA interrupt routines are severely degraded, and it seems that interrupts are being skipped from both. They both run fine in the intervals between this function call, and if I comment out the function entirely, both ISRs work perfectly.
It is my understanding that interrupts are prioritized over the main CPU and will run to completion before context-switching back to anything else. I have done the math and the CPU should have enough processing time to finish the function call while still handling every interrupt. Why are my ISRs are being clobbered? Where can I begin looking to debug this issue? Is there something I'm not understanding about the relationship between interrupt routines and function calls in main()?
Any help is greatly appreciated, and I am happy to provide any code that might shed light on this issue. I neglected putting code in this initial question since I'm not sure which snippets would be best. Thanks in advance!