TC275 QSPI Master Completion Transaction alternative

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

cross mob
achan
Level 1
Level 1
First question asked Welcome!

Is there an alternative way to check the transfer of data stream if it is complete without using a while loop using the iLLD? (see image below)

achan_0-1652278934901.png

Here's a brief picture of what we're trying to do.

Note that we are implementing this in a bare-metal based application (non-OS).

We have an ISR function running at a regular interval. This ISR function processes a pointer buffer that is filled with the SPI message. The ISR function is called via a timer so there's no problem there.

At some point in time even while the ISR function is running, we'd want to close the SPI port without interrupting the ISR for a long period of time. The SPI transaction in our application is approximately 2ms. While the ISR also runs at 2ms - but the ISR is a priority rather than the SPI transaction. Is there a way to complete the SPI transaction without using a while loop that will possibly block the ISR operation?

We also tried removing the while loop check and closed the SPI port, and it leaves the SPI or the DMA in a bad state. When code tries connect via the SPI, it does not work properly anymore. No SPI bytes are transferred on bus. 

0 Likes
1 Reply
Prudhvi_E
Moderator
Moderator
Moderator
250 replies posted 100 solutions authored 25 likes received

Hello,

The while condition checks for any data exchange in progress and this is needed to avoid a new exchange while previous is still in progress. But generally it shouldn't take too much time.

Also, I didn't full understand how you're saying that the while loop is blocking the ISR as the ISR always takes the higher priority than the normal execution.

Regards,

Prudhvi.

0 Likes