Other Parts Discussed in Thread: SYSBIOS
Tool/software:
Dear All
We are using the TMS320F28075S and we have detected some timing issues. However, we are investigating the ISR duration by just toggling some GPIO's and measure these using a Logic Analyzer.
We detected several issues, which would take too long to describe all, I only list the most important one's :-)
We are using SYS/BIOS (6.83.0.18) and create a Timer Interrupt dynamically (not in the .cfg file) and post a Swi in the HW ISR, so the main workload is done in SWI context and not in HWI context.
However, we are facing the issue, that the Timer HWI does not get called as implemented below. It only occurs, when the ECAN0INTB_ISR HWI gets called.
The Timer_create functions is based on a peripheral from the c2000 MCU family and is called within a Hardware interrupt context. On which peripheral is it based on? one of the CPU timers or a PWM ? The first parameter of Timer_create is the logical id. What is this useful for?
Which priority from the PIE table would it have then?
We are suprised, because the CAN SWI has nothing in common with the Timer ISR.
Would you suggest it is good practice to post SWI within a HWI. As far as I understood the SYS/BIOS manual, it is recommended like this. However, it creates more context switches and therefore reduction of efficiency.
How do we know the priority if we use some Timer or Clocks creation in the .cfg file?
There are some interrupts for the TI RTOS. How do we know, when and how long are they called?
White: XINT HWI ISR (Priority 120)
Red: XINT SWI ISR (posted by White)
Yellow: Timer SWI (posted by Green)
Green Timer HWI ISR (Priority: no idea / see question above)
Blue: CAN HWI (Priority: 102)
Purple: CAN SWI ISR (posted by Blue)
Timer_Params timerParams;
Error_Block errBlock;
Error_init(&errBlock);
Timer_Params_init(&timerParams);
timerParams.period = 200U;
timerParams.periodType = Timer_PeriodType_MICROSECS;
timerParams.arg = 1;
Timer_Handle timer1 = Timer_create(1, TIMER1INT_ISR, &timerParams, &errBlock);
Timer_start(timer1); // might be pseudo-code.... :-)
Thank you and best regards
Robert