<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>EasyDMA array list</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/18638/easydma-array-list</link><description>Hello,
in the nrf52832 PS I&amp;#39;ve stumbled over the &amp;quot;EasyDMA array list mode&amp;quot;. From the description, I&amp;#39;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</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 23 Feb 2017 10:36:48 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/18638/easydma-array-list" /><item><title>RE: EasyDMA array list</title><link>https://devzone.nordicsemi.com/thread/71994?ContentTypeID=1</link><pubDate>Thu, 23 Feb 2017 10:36:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1075afba-e987-4681-97b6-253f8f9c951c</guid><dc:creator>Alessandro</dc:creator><description>&lt;p&gt;I used the use case 1 described by Aryan to transfer receive 1020 bytes from a IMU using spi master. Here there are the details: &lt;a href="https://devzone.nordicsemi.com/question/116869/transfer-more-than-255-bytes-with-spi-master-on-nrf52/"&gt;devzone.nordicsemi.com/.../&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: EasyDMA array list</title><link>https://devzone.nordicsemi.com/thread/71993?ContentTypeID=1</link><pubDate>Fri, 17 Feb 2017 11:22:04 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:15d35f00-edf8-48c7-8f80-ad1b9b6148fb</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;p&gt;it will be 1 cycle of hfclk difference in this case between the shortcut that does START_TASKS and the END_TASKS coming from the timer., so 1/64Mhz = 15 nano seconds. Wont transmit anything as far as i know as easy dma takes few cycles to request the system bus before it can start.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: EasyDMA array list</title><link>https://devzone.nordicsemi.com/thread/71992?ContentTypeID=1</link><pubDate>Fri, 17 Feb 2017 10:22:17 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:36d41f5c-67f9-4c73-849b-29c776aa8273</guid><dc:creator>Haruki Kawakami</dc:creator><description>&lt;p&gt;Thank you aryan for updating answer. It became easier to understand.
But can I ask one more question?
In use_case1, END_EVENT trigger START_TASKS and TASKS_COUNT. So, when timer count reaches CC, its flow is below.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;END_EVENT -&amp;gt; START_TASKS
          -&amp;gt; TASKS_COUNT -&amp;gt; COMPARE_EVENT -&amp;gt; STOP_TASKS.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, how much is the time between last START_TASKS and STOP_TASKS? no time?
I&amp;#39;m afraid of sending some bytes before STOP_TASKS is executed.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: EasyDMA array list</title><link>https://devzone.nordicsemi.com/thread/71991?ContentTypeID=1</link><pubDate>Thu, 16 Feb 2017 14:39:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f5d5c036-d9e9-4d3f-a9e4-d0bd2a1c96fc</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;p&gt;I am sorry Haruki and Torsten, You need to manually trigger the start task after every transaction unless you use the SHORTS if available between END event and START task, I will update my answer with this and a use case where this will be more meaningful.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: EasyDMA array list</title><link>https://devzone.nordicsemi.com/thread/71990?ContentTypeID=1</link><pubDate>Thu, 16 Feb 2017 14:13:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:146cb037-41fe-464a-8ee4-bc74bda4d2b8</guid><dc:creator>Haruki Kawakami</dc:creator><description>&lt;p&gt;How do the EasyDMA knows the number_of_arrays_in_list ?
I can&amp;#39;t find the code to set number_of_arrays_in_list  to the any register in the document or any sample code&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: EasyDMA array list</title><link>https://devzone.nordicsemi.com/thread/71989?ContentTypeID=1</link><pubDate>Wed, 28 Dec 2016 14:48:37 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3b8e45d6-ec91-45a0-859f-f22bc65ec8be</guid><dc:creator>Torsten Robitzki</dc:creator><description>&lt;p&gt;Tak! ;-)..&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: EasyDMA array list</title><link>https://devzone.nordicsemi.com/thread/71988?ContentTypeID=1</link><pubDate>Wed, 28 Dec 2016 14:06:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:09122042-99ca-4198-88f3-b0d31f4ce042</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;h2&gt;Updated&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;USE_CASE:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;You can use the shortcut between END_EVENT and START_TASKS.&lt;br /&gt;
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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;It would have been nice if we could have number of arrays in list to be configured in a register &lt;strong&gt;but we do not have this&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For example as shown in infocenter&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  ArrayList_type ReaderList[3];
  channel.MAXCNT = BUFFER_SIZE;
  channel.PTR = &amp;amp;ReaderList;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;BUFFER_SIZE * number_of_arrays_in_list&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;number_of_arrays_in_list  in the above example is 3&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>