This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3235MODASF: DMA error

Part Number: CC3235MODASF

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

  • Hi Mauro,

    Make sure the sl_Task is the highest priority task in the system. secondly, switch you TI-RTOS builds for the debug version, and then debug your code until you hit this HWI. You should now be able to see the offending function callbacks and will give you an idea of what the issue is.

    BR,

    Vince 

  • Thanks for your support but

    I'm realize that sometimes I feed wrong buffer pointer to SPI_Transfer struct.

    During SPI transfer DMA tries to read/write in no accessible location.