I am using CCS 3.3 for the TMS320F28335. I also use the DSP-BIOS, TI's DPS library. The code is an adapted version of TI's example DC-AC single phase inverter (SPRC303.zip).
I have added code to handle CAN and SCI devices which use DSP-BIOS for intertask communication.
Everything works fine until I add a C function call to the PWM interrupt handler written in assembly code (DCAC-ISR.asm). I pass a pointer to a variable to the C function without any code in the body of the function (empty function). When an interrupt occurs, the function was called, with the variable being pushed in and popped out of ISR stack, then when the code exits this ISR, the stack pointer was wrong, and eventually it goes to BIOS function FXN_F_selfLoop().
In CAN and SCI interrupt handlers, which are written in C, I call other functions without any problem. Is there something peculiar to the DCAC-ISR.asm (ISR_Init(), ISR_Run()) that may have violated the C function's calling rules?