 The 2D addressing is a way of sorting data so that you can format it with the DMA before you transmit it. What this actually does is you set up some parameters here to sort the data. It loads the first element into the data array, then it adds an offset, then it loads the second parameter into the DMA, adds the next offset, once it's finished block 1 it'll then add the block offset and then it'll do the same process again with the next block and so on. So it's a way of manipulating your data or reorganizing your data under the control of the DMA. Again no CPU core is needed to do this. So for our example we were reading channel 1 through 4, channel 1 through 4 and we were doing that 16 times. So in our example now it reads channel 1, puts an offset of 30 in, then it'll read channel 2, do the same again offset of 30, then channel 3 and then channel 4. So once it's finished the first block then it'll do the block offset which is a minus 126 which puts you your instruction pointer in the memory array back here and then it will start the next one. So this is basically sorting all our ADCs so all the channel 1s come out first then all the channel 2s come out then all the channel 3s come out and that's what this next part of the hands-on will do. It'll show you how to create that inside the DMA control. So again no CPU intervention after you've set up the link list so this becomes another link in your link list table. What you do is add and create node number 3 now so then you'll have 3 nodes inside your link list. I've got my picture at the end, there we go. Oh yeah so your code will actually do that then inside there. Then also you can have events so at the moment we've not got any events happening inside our list so normally your DMA can give an event at half transfer complete and at transfer complete so that can happen for each block of data you're sending. In our example we don't want the transfer complete to come until we've finished our full link list so we want to do all of that for the data in then we want to load the data out then all of that it's only when we hit our last block of our last transmit that we want our data events to happen. So you can enable the events as well from the DMA as you would have normally done with the basic DMA so you can actually label events inside there. The only thing you have to remember in this one make sure you've enabled your global interrupt for your GP DMA so by the end of it you should have built up a free element in your link list so that it loads in the ADC ones, waits for the trigger, transfers all the data into the RAM, loads in the data sorting configuration, it sorts all the data into data to RamBuffer, loads in the URL information and then transmits all that out with your half complete and transmit complete appearing at the very last block of your last data segments so that's the extra bits that you can do to see what's in the DMA.