Hello.
I have this work:
When a GPIO goes LOW I have to read 1024Byte from SPI and transmit them to UDP.
This mechanism (read SPI - Transmit over UDP) has to reach high throughput rate.
I develop a first Firmware modifying network_terminal and adding some code:
I create new terminal command called "RDGxxxxstart".
When user digit "RDGxxxstart" command I configure NWP as P2P role, CLIENT etc ...
and I start two threads: SPI - Thread and WiFi - Thread.
SPI - Thread is an infinite loop that monitor a GPIOx state,
when this GPIOx is low and there is enough space in a circular buffer (consist of 4 x1KByte-buffers)
this thread reads 1KBytes (in a BLOCKING WAY) from SPI an "put" this bytes in a buffer of the ring.
This thread has priority 2.
WiFi - Thread is an infinite loop that monitor the circular buffer:
when a new buffer is available in the ring, the thread read the buffer and send it to UDP (in a BLOCKING WAY).
This second thread has same priority.
When I run my terminal command "RDGxxxxstart" and I connect NWP to Wi-Fi Direct of my SAMSUNG Cellar
it's all OK (connection established and threads start).
When I put GPIO Low the SPI - Thread read SPI data and WiFi - Thread transmit over UDP .... but after some period DMA goes error.
My PC counter goes in this line of code (ti_driver_config.c row 96):
static void dmaErrorFxn(uintptr_t arg)
{
int status = MAP_uDMArrorStatusGet();
MAP_uDMAErrorStatusClear();
...
}
status is equal to 1