XMC4700 SPI TX FIFO via DMA doesn't load TBUF / Shift Register

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
User16740
Level 1
Level 1
5 replies posted 5 questions asked First reply posted
Hello All,

I'm trying to setup an XMC4700, USIC.SSC slave (10MHz) to transmit via DMA to the USIC FIFO.

The receive side is using RBUF via DMA and has no problems.

The transmit side was previously using TBUF via DMA, but it was transmitting occasional 0xFF bytes, presumable because the Shift register was not being filled fast enough.

The transmit side was then changed to DMA via the FIFO using the Fill Level mechanism to trigger the DMA.

When I enable the DMA channel I can see the initial burst read of 8 bytes from the SRAM in the DMA channel registers (SAR and CTLH are as expected).

When I trigger the initial Service Request I can see that the DMA has burst transferred the 8 bytes into the FIFO (TBFLVL == 😎 and the burst transferred another 8 bytes from the SRAM.

When I then enable the SPI channel and start my external SPI Master, the SPI slave transmits an 0xFF byte, followed by the contents of the FIFO. My data is always shifted by 1 byte and the last byte is wrapped to the next transmission.

I was expecting the initial FIFO fill level to be less than 8, as the transfer to the FIFO should have also loaded the TBUF / DSU with the first byte for transmission.

So, now the question:

As an XMC4700 SPI slave, how do I trigger the initial SPI load to TBUF / DSU from the data already loaded in the FIFO?
0 Likes
1 Reply
lock attach
Attachments are accessible only for community members.
jferreira
Employee
Employee
10 sign-ins 5 sign-ins First like received
Hi,

See attached example.The master clock is generated by a CCU slice and the CS by a GPIO.
3561.attach

Regards,
Jesus
0 Likes