Non Blocking SPI transfer on Teensy 4.0

Status
Not open for further replies.

ossi

Well-known member
I want to start an SPI transfer (16 Bits) and while data is beeing transferred I want to do some computation. All this should happen within an interrupt-routine. As far as I have experienced the usual transfer16(..) is blocking. How can I initiate a non blocking transfer? How do I test for completion of this transfer? For my application that is not necessary because my computation lasts longer than the time the spi-transfer takes.

Any suggestions?
 
Note: There was a recent thread: https://forum.pjrc.com/threads/67247-Teensy-4-0-DMA-SPI that talked about non-blocking transfers
That talked some about doing DMA transfers...

Note: The SPI library has a non-blocking 8 bit transfer method:
Code:
	bool transfer(const void *txBuffer, void *rxBuffer, size_t count,  EventResponderRef  event_responder);
More of the details up on the other thread... Like what is an EventResponder. Which in this case the method takes a reference to an EventResonder class.
The class allows you to get a callback when it completes and/or you can query state...
You can also control when the callback happens (immediate, on yield, on timer...)

But again this is 8 bit transfers.... Before this was integrated into SPI library I had versions of this method as well as the blocking version for 16 bit transfers, but we decided to not integrate it as we were already polluting the class with enough non-standard SPI methods.

If you want to roll your own, there are a few different display drivers that we have that do this, including my ILI9341_t3n, the ST7735_t3 and others. But this requires learning more about DMA
and the like.

One option is to go ahead and use the 8 bit async transfer, knowing you may need to reverse the bytes in your buffer you are trying to send out.
 
Status
Not open for further replies.
Back
Top