- In the C28+CLA implementation,
CLA tasks could be triggered by hardware or software, and on task completion, an
interrupt may be sent to the C28.
- To implement this in this scenario, for software task triggers, a software
interrupt would be triggered through PIPE to run the desired ISR.
- For hardware task triggers, the C29 CPU's PIPE would be setup to trigger from
the desired peripheral.
- For task completion interrupts, a software interrupt is triggered through PIPE
(user code needs to write to PIPE registers) to run the desired ISR.
- If a background task was present in the C28+CLA implementation, it can be easily
implemented in the C29 CPU as a background loop (idle loop).
- One key challenge in this scenario is interrupt priority assignment, since both
C28 ISRs and CLA tasks are now mapped to C29 ISRs and need interrupt priority
assignment. Whereas, on the C28+CLA, they run independently on independent
cores, here they run on the same C29 CPU. CLA tasks run to completion without
being preempted by other tasks, and as mentioned above, this can be achieved by
grouping them into the same C29 PIPE interrupt group. However, there is no way
to ensure C28 ISRs do not preempt CLA tasks. Likewise, there is no way to ensure
CLA tasks do not preempt C28 ISRs. Therefore, in this case, the user must
necessarily perform analysis of C28 ISRs + CLA tasks as a whole and determine
the interrupt priorities that suit the application.
- Similarly, if a C28 ISR was software triggering a CLA task, with them now
resident on the same C29 CPU, this presents a problem of relative interrupt
priorities of each. If the CLA task is made higher priority, it can preempt the
C28 ISR and run and deliver the expected functionality from a CLA side. However,
this means the C28 ISR is halted and this may not be expected functionality from
the C28 perspective.
- Also, if the same exact event (for example, peripheral) triggers a C28 ISR as
well as a CLA task, now with them running on the same C29 CPU, the user could
merge them into a single ISR.
- CLA registers offer a lot of functionality to users, like being able to know
which task is running, and being able to stop a task by writing to a specific
bit in a register. When migrating, suitable source code updates may be needed
given the absence of these registers and corresponding functionality.
Note: Not all corner case scenarios may have been identified
here.