Can somebody please explain what the ISR of a DMA-enabled SSPx peripheral needs to do? I've read the user manual of the LPC24xx but I still don't fully understand how the ISR of the DMA (indicating end of transfer) relates to the ISR of SSPx - without DMA the incoming data is collected, but with DMA enabled the data should be handled by the DMA...?
It comes down to this: I am sending 14 bytes over the SSP bus. The first 8 arrive at the other end via DMA interrupt, but the remaining 6 are not - I only see one DMA interrupt, when the transfer size is 8.
In other words: is there a relation between the DMA transfer size parameter and the size of the hardware buffer of the SSP peripheral? Can the DMA start a transfer based on only one 1 arriving at the SSP even if the transfer size is significantly higher? It seems that it does not do that, and I don't understand why...!
Or: does the sender need to patch his data (with zeros, say), so that the DMA always detects 8 bytes in the hardware buffer of the SSP...?
I have found this in the user manual:
4.2.13 The completion of the DMA transfer indication The completion of the DMA transfer is indicated by: 1. The transfer count reaching 0 if the GPDMA is performing flow control, OR 2. The peripheral setting the DMA Last Word Request Input (DMACLSREQ) or the DMA Last Burst Request Input (DMALBREQ) if the peripheral is performing flow control. According to Table 32–651 “DMA Connections”, SSP0, SSP1 and I2S do not use DMA Last Word Request Input nor DMA Last Burst Request Input. Therefore there will be no indication of completion if SSP0, SSP1 and I2S are performing the flow control.
does this mean that when SSP1 is coupled to DMA (which must do the flow control, according to paragraph 2), the DMA cannot try to transfer more than the hardware buffer size of SSP (8 bytes) per transfer?
I am sending 16 bytes into the SSP peripheral. I _always_ have the first 8 bytes transferred via DMA to the right place, but the next 8 bytes are not! Does anybody have any idea what might cause this?