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.