This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

NRF52832 DMA HALF TRANSFER INTERRUPT AND EASYDMA ARRAYLIST

Hi ,

1-) Is there any dma half transfer interrupt ? if there is where it is in documents ? ( i check this link but i couldnt see anything about this https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.nrf52832.ps.v1.1%2Feasydma.html

2-) How is that ArrayList organised by EasyDma? 

Lets assume that i am reading 32bytes from spi to ram . i have prepared 2 array with 16bytes in size. So how is it organized by dma ;

 - 1,3,5,7,9... byte will go 1st array and 2,4,6,8... to second array ?

-OR 1-16th Bytes will be stored in  1st array and 17-32th will be in second array ?

- or what ?

 Thank you all.

Best regards.

Parents
  •  Yes. The Array List feature is fairly simple, the pointer register in f.ex. the SPIM: RXD.PTR, is incremented by the RXD.MAXCNT size after the EVENTS_END has been fired. It is then up to you to trigger another TASKS_START in order to fill the next array of RXD.MAXCNT size. 

    i read whole Saadc section in document but i couldnt see such specification. i have also tested it by real code. But RESULT.PTR did not changed after END event .Is there any specific bit to activate auto increment  of  xxx.PTR ?

    Sorry , does this  auto increment  of  xxx.PTR behavior belong to only some peripherals such as spi ? or any peripheral with EasyDma?

  • The ArrayList feature is only enabled for the TWIM and SPIM peripherals. 

    From SAADC's EasyDMA chapter: 
    "The Result buffer is located at the address specified in the RESULT.PTR register. The RESULT.PTR register is double-buffered and it can be updated and prepared for the next START task immediately after the STARTED event is generated. "

    If you update the RESULT.PTR register after each STARTED event, then you can connect the END event to the START task, connected the STARTED event to a TIMER's START task, and a TIMERs COMPARE event to the SAADC's SAMPLE task. 
    That way the SAADC can run with as little delay as possible when switching buffers. 
    You will also need to fork the SAADC's END event to the TIMER's STOP task, in order to prevent the TIMER from triggering a SAMPLE task when the SAADC is reading the RESULT registers. 


Reply
  • The ArrayList feature is only enabled for the TWIM and SPIM peripherals. 

    From SAADC's EasyDMA chapter: 
    "The Result buffer is located at the address specified in the RESULT.PTR register. The RESULT.PTR register is double-buffered and it can be updated and prepared for the next START task immediately after the STARTED event is generated. "

    If you update the RESULT.PTR register after each STARTED event, then you can connect the END event to the START task, connected the STARTED event to a TIMER's START task, and a TIMERs COMPARE event to the SAADC's SAMPLE task. 
    That way the SAADC can run with as little delay as possible when switching buffers. 
    You will also need to fork the SAADC's END event to the TIMER's STOP task, in order to prevent the TIMER from triggering a SAMPLE task when the SAADC is reading the RESULT registers. 


Children
No Data
Related