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

EasyDMA array list

Hello, in the nrf52832 PS I've stumbled over the "EasyDMA array list mode". From the description, I'm unable to understand, how this works and what I can archive with this mode (or which problem this mode solves).

Does this simply means, that after an EasyDMA transfer has ended, the READER.PTR is forwared to the next 32 bit aligned address and that the next EasyDMA transfer can be startet, without the need to reset the READER.PTR? Does the same apply to a WRITTER.PTR?

kind regards, Torsten

Parents
  • Updated

    Yes, you got it perfectly. In normal EasyDMA , you just need to update the pointers and the size and the transfer will be done. This is one transfer and after that you need to update the pointers again and do a start again for the next transfer.

    But in the array list you avoid updating the pointer register. But you still need to trigger the TASKS_START for the next transaction , the PTR will automatically be updated by adding the the buffer size to itself.

    USE_CASE:

    1. You can use the shortcut between END_EVENT and START_TASKS.
      Now configure a PPI and TImer in counter mode that every END_EVENT increments the timer counter. You are counting transactions here. You will set timer CC with maximum number of transactions you need and when the timer counter has reached that value, you use that event to trigger TASKS_STOP. Since everything is configured in hardware now with no software involved for every transaction, all the data in the lists will be transferred with no pauses or no dependency on CPU state.

    2. enable the shortcut between END_EVENT and START_TASKS. If you know that you have N bytes of data in one transafer and you have M lists in array to transfer at say T Mbps. You can configure a timer to expire in (N * M * 8 )/(T) micro seconds using this event to trigger the TASK_STOP of the peripheral.

    It would have been nice if we could have number of arrays in list to be configured in a register but we do not have this

    For example as shown in infocenter

      ArrayList_type ReaderList[3];
      channel.MAXCNT = BUFFER_SIZE;
      channel.PTR = &ReaderList;
    

    Then the EasyDMA will update .PTR by itself after the transaction is complete by adding BUFFER_SIZE to it and triggering a start automatically. This will avoid a lot of software involvement in many cases.

    The transfer size remain the same through out the whole transactions of the list and all the buffers have to be linear in memory. Linear buffer needed is

    BUFFER_SIZE * number_of_arrays_in_list

    number_of_arrays_in_list in the above example is 3

Reply Children
No Data
Related