I've got a DSP application which I've been running successfully for well over a year, where a C5535 DSP is being booted and controlled by a host microprocessor over the DSP's UART interface.
Up until now, we've been using a 57600bps communications rate between the two chips, but we recently decided to increase this baud rate to approximately 550Kbps. With this change made (and only this change made) I'm now finding that after a short period of operation the C5535 UART will stop generating interrupts.
Halting the DSP when this occurs, here's what I'm reading with my emulator:
- The UART LSR register reads 0x60 (TEMT and THRE bits set)
- The UART IER register reads 0x03 (ETBEI and ERBI interrupts set)
- The UART IIR register reads 0x01 (INTID is zero, and IPEND is 1, indicating no interrupts!)
The UARTCG bit in PCGCR1 is set to 0, so the UART has a clock. UTRST and URRST are both set to 1 in PWREMU_MGMT.
If I clear and set the enable bits in IER using the emulator. this does not change the state of IIR, IPEND is always 1. Likewise if I try doing things like writing additional characters into THRE. Overall, it looks like something in the guts of the UART is getting into a bad state.
Any ideas?