Texas Instruments TMS320C6201 Car Stereo System User Manual


 
SPRZ153
TMS320C6201 Silicon Errata
23
PMEMC: Branch from External to Internal
Advisory 2.1.19
Revision(s) Affected: 2.1 and 2.0
Details: The program flow is corrupted after branching from external memory to internal program
memory when the following are true:
CPU is executing from external memory
A CPU stall occurs that holds the CPU until all pending program fetches complete.
CPU stalls may be caused by:
External data access
Multicycle NOPs
Prolonged data memory bank conflict with DMA
Multiple accesses to on-chip peripherals (not likely to cause this problem)
A branch to internal program memory is taken before a new fetch packet is requested
(i.e. during the same fetch packet that is executed when the CPU stalls.
The CPU will branch correctly to the internal memory location and correctly execute the code
located there. When the branch is executed to return to external memory, the CPU will not
complete the branch properly and the program will crash. (Internal reference number 0958)
Workaround: There are several workaround options, depending on the situation that causes the failure. One
or more of the following should be used to circumvent the problem:
If the problem arises during an interrupt, move IST to external memory (same CE as
code).
If the problem occurs after a branch, delay the branch instruction with single-cycle
NOPs or extend the delay slots to span multiple fetch packets (i.e., follow the branch
instruction with parallel NOPs).
If an external data access is causing the CPU stall, place data in internal data
memory.
If a multicycle NOP is causing the stall, change to multiple single-cycle NOPs.
If the stall is due to the CPU being starved, change the DMA priority to be lower than
that of the CPU.
DMA: DMA Data Block Corrupted After Start Zero Transfer Count
Advisory 2.1.21
Revision(s) Affected: 2.1 and 2.0
Details: If DMA is stopped after it has been started with a zero transfer count, then reprogrammed and
started again, the first element of the block will be corrupted. (Internal reference number 0242)
Workaround: Make sure the transfer count is not near zero when starting the DMA.