We are programming a chain of UPP transmit transfers. After two transfers are initially programmed, the ISR monitors the PEND bit to determine if the next transfer can be programmed. All of the transfers are being programmed, however occasionally the last transfer never gets started. The interrupt for the last transfer calls a callback that releases a mutex. The code hangs waiting on the mutex for the last transfer. The last transfer is programmed but never started by the UPP.
When stopped the address of the last transfer is present in registers UPID0 & UPIS0. Writing a zero to UPID2 starts the last transfer, generates the interrupt, and the code continues as normal.
The UPP port is programmed to honor WAIT and we have verified that WAIT is deasserted throughout all of the transfers.
What is causing the UPP stall and what is the proposed workaround?