<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mcselec.com/bavr/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=CONFIG_EDMAX</id>
		<title>CONFIG EDMAX - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=CONFIG_EDMAX"/>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CONFIG_EDMAX&amp;action=history"/>
		<updated>2026-04-08T14:12:11Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=CONFIG_EDMAX&amp;diff=5498&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;= &lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;Action&lt;/span&gt; =  Configures the enhanced direct memory access (DMA) channel of the XMEGA.  &lt;span style=&quot;font-family: Arial;...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CONFIG_EDMAX&amp;diff=5498&amp;oldid=prev"/>
				<updated>2017-01-17T20:35:38Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;= &amp;lt;span style=&amp;quot;font-size: 14pt; font-weight: bold;&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =  Configures the enhanced direct memory access (DMA) channel of the XMEGA.  &amp;lt;span style=&amp;quot;font-family: Arial;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= &amp;lt;span style=&amp;quot;font-size: 14pt; font-weight: bold;&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Configures the enhanced direct memory access (DMA) channel of the XMEGA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Syntax&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;CONFIG EDMACHx&amp;lt;/span&amp;gt;=enabled|disabled,BURSTLEN=bl, CHANRPT=chrpt, CTR=ctr, SINGLESHOT=ss, TCI=tci, EIL=eil,SAR=sar, SAM=sam,DAR=dar,DAM=dam, TRIGGER,trig, BTC=btc,SADR=sadr, DADR=dadr&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Remarks&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
In order to understand the various options better, we first have a quick look at DMA. Please consult the help topic [[CONFIG DMACHX|CONFIG DMAx]] and the atmel documentation for the EDMA.&lt;br /&gt;
&lt;br /&gt;
Normally, when you want to transfer data, the processor need to execute a number of operations.&lt;br /&gt;
&lt;br /&gt;
The BASCOM MEMCOPY for example will use processor instructions like LD (load data) and ST(store data) in a loop.&lt;br /&gt;
&lt;br /&gt;
If you want to clear 32KB of memory you need at least 32 K instructions. This will consume time, and all this time the processor can not handle other tasks.&lt;br /&gt;
&lt;br /&gt;
In a PC, you do not want to use the processor to be busy when you load a file from disk. The EDMA controller will handle this. It can move blocks of memory between devices while the processor performs other tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
You can also send for example an array in SRAM to an USART over EDMA so the processor will not be busy handling the transfer from the Array to the USART.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
There is also an example to receive bytes over USART to SRAM in the Bascom-AVR/Samples folders.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Before &amp;lt;span style=&amp;quot;font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;CONFIG EDMACHx&amp;amp;nbsp;&amp;lt;/span&amp;gt;can be used you need to use &amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; font-weight: bold; color: #000080;&amp;quot;&amp;gt;Config&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier';&amp;quot;&amp;gt;EDMA ([[CONFIG EDMA|CONFIG_DMA]])&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier';&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px 0px 0px 4px;&amp;quot;&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border: solid 2px #000000; border-spacing:0px; border-collapse: collapse;&amp;quot; width=&amp;quot;604&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
DMACHx&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
There are 4 DMA channels numbered 0-3. By default these DMA channels are disabled. Use ENABLED to enable the channel.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
bl&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;BURSTLEN&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each DMA channel has an internal transfer buffer that is either 1 or 2 byte long.&lt;br /&gt;
&lt;br /&gt;
The buffer is used to reduce the time the DMA controller occupy the bus.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Options&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
- 1&amp;amp;nbsp;: 1 byte burst mode&lt;br /&gt;
&lt;br /&gt;
- 2&amp;amp;nbsp;: 2 byte burst mode&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
chanrpt&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;Channel Repeat&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting this bit enables the repeat mode. In repeat mode, this bit is cleared by hardware in the beginning of the last block transfer.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Options&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
Enabled&amp;amp;nbsp;: enabled repeat mode&lt;br /&gt;
&lt;br /&gt;
Disabled&amp;amp;nbsp;: disabled repeat mode&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
ctr&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;DMA Channel Transfer Request&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting this bit requests a data transfer on the DMA Channel. This bit is automatically cleared at the beginning of the data transfer&lt;br /&gt;
&lt;br /&gt;
Options&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
Enabled&amp;amp;nbsp;: request transfer&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
ss&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;DMA Channel Single Shot Data transfer&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting this bit enables the single shot mode. The channel will then do a burst transfer of BL bytes on the transfer trigger. This bit can not be changed if the channel is busy.&lt;br /&gt;
&lt;br /&gt;
Options&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
Enabled&amp;amp;nbsp;: enable SS mode.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
tci&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;DMA Channel Transaction Complete Interrupt Level&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interrupt can be turned OFF, or be given a priority LO, MED or HI&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
eil&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;DMA Channel Error Interrupt Level&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interrupt can be turned OFF, or be given a priority LO, MED or HI&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
sar&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Source Address Reload&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The channel source address can be reloaded the following way:&lt;br /&gt;
&lt;br /&gt;
NONE&amp;amp;nbsp;: No reload performed.&lt;br /&gt;
&lt;br /&gt;
BLOCK&amp;amp;nbsp;: DMA source address register is reloaded with initial value at end of&amp;lt;br/&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; each block transfer.&lt;br /&gt;
&lt;br /&gt;
BURST&amp;amp;nbsp;: DMA source address register is reloaded with initial value at end of&amp;lt;br/&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;each burst transfer.&lt;br /&gt;
&lt;br /&gt;
TRANSACTION&amp;amp;nbsp;: DMA source address register is reloaded with initial value at&amp;lt;br/&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;end of each transaction.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
sam&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Source Address Mode&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The address can be altered the following way&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
FIXED &amp;amp;nbsp;: The address remains the same.&lt;br /&gt;
&lt;br /&gt;
INC&amp;amp;nbsp;: The address is incremented by one&lt;br /&gt;
&lt;br /&gt;
If you want to write to a PORT, for example to generate a wave, you would chose FIXED. But if you want to move a block of memory, you want to use INC so the the source address is increased after each byte.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
dar&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Channel Destination Address Reload&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The channel destiny address can be reloaded the following way:&lt;br /&gt;
&lt;br /&gt;
NONE&amp;amp;nbsp;: No reload performed.&lt;br /&gt;
&lt;br /&gt;
BLOCK&amp;amp;nbsp;: DMA destiny address register is reloaded with initial value at end of&amp;lt;br/&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; each block transfer.&lt;br /&gt;
&lt;br /&gt;
BURST&amp;amp;nbsp;: DMA destiny address register is reloaded with initial value at end of&amp;lt;br/&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;each burst transfer.&lt;br /&gt;
&lt;br /&gt;
TRANSACTION&amp;amp;nbsp;: DMA destiny address register is reloaded with initial value at&amp;lt;br/&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;end of each transaction.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
dam&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Destiny Address Mode&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The address can be altered the following way&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
FIXED &amp;amp;nbsp;: The address remains the same.&lt;br /&gt;
&lt;br /&gt;
INC&amp;amp;nbsp;: The address is incremented by one&lt;br /&gt;
&lt;br /&gt;
If you want to write to a PORT, for example to generate a wave, you would chose FIXED. But if you want to move a block of memory, you want to use INC so the the source address is increased after each byte. In case of an byte array it would start with array(1) and the next byte would be array(2) which will be transferred and so on.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
trigger&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Trigger Source Select&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The trigger selected which device triggers the DMA transfer. A zero (0) will disable a trigger. You can manual start a DATA TRANSFER with START DMACHx statement.&lt;br /&gt;
&lt;br /&gt;
You can find the hardware trigger values in the datasheet.&lt;br /&gt;
&lt;br /&gt;
For example, EVENTSYS channel 0 would be 1. And EVENSTYS channel 1 would be 1. In case of for example an USART you need to add the base value and add an offset.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Base value for USARTC0 is &amp;amp;H4B&lt;br /&gt;
&lt;br /&gt;
Offset for (RXC) Receive complete is &amp;amp;H00&lt;br /&gt;
&lt;br /&gt;
Offset for (DRE) Data Register Empty is &amp;amp;H01&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
So when you want to use the DRE the trigger is &amp;amp;H4B + &amp;amp;H01 = &amp;amp;H4C&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #008000;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
btc&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Block Transfer Count&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BTC represents the 16-bit value TRFCNT. Which also means the max value is 64Kbyte. TRFCNT defines the number of bytes in a block transfer. The value of TRFCNT is decremented after each byte read by the DMA channel. When TRFCNT reaches zero, the register is reloaded with the last value written to it.&lt;br /&gt;
&lt;br /&gt;
When repeat is 1, this is the total amount of bytes to send in the DMA transaction.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
sadr&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Source Address&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the address of the DMA source. For example, the address of a variable. Or the address of a register. Use [[VARPTR]]() to find the address of a variable.&lt;br /&gt;
&lt;br /&gt;
For example if the source address is an array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New';&amp;quot;&amp;gt;sadr &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; color: #ff0000;&amp;quot;&amp;gt;= &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; font-weight: bold; color: #000080;&amp;quot;&amp;gt;varptr&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; color: #ff0000;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New';&amp;quot;&amp;gt;ar&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; color: #ff0000;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New';&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; color: #ff0000;&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example if the source address is an hardware address like from an USART:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New';&amp;quot;&amp;gt;sadr &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; color: #ff0000;&amp;quot;&amp;gt;= &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; font-weight: bold; color: #000080;&amp;quot;&amp;gt;Varptr&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #800000;&amp;quot;&amp;gt;usarte0_data&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or ADC A Channel 0:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier';&amp;quot;&amp;gt;Sadr &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; font-weight: bold; color: #000080;&amp;quot;&amp;gt;Varptr&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #800000;&amp;quot;&amp;gt;adca_ch0_res&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:16%; border: solid 1px #000000;&amp;quot; width=&amp;quot;16%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
dadr&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:100%; border: solid 1px #000000;&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Destination Address&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The destiny address.&lt;br /&gt;
&lt;br /&gt;
This can be also for example an array in SRAM:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New';&amp;quot;&amp;gt;dadr &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; color: #ff0000;&amp;quot;&amp;gt;= &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; font-weight: bold; color: #000080;&amp;quot;&amp;gt;varptr&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; color: #ff0000;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New';&amp;quot;&amp;gt;dest&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; color: #ff0000;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New';&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 11pt; font-family: 'Courier New'; color: #ff0000;&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can be also for example a hardware recourse like USART:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier';&amp;quot;&amp;gt;Dadr &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; font-weight: bold; color: #000080;&amp;quot;&amp;gt;Varptr&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #800000;&amp;quot;&amp;gt;usarte0_data&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or for example for DAC B Channel 0:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier';&amp;quot;&amp;gt;Dadr &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; font-weight: bold; color: #000080;&amp;quot;&amp;gt;Varptr&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #800000;&amp;quot;&amp;gt;dacb_ch0datal&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: 'Courier'; color: #ff0000;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
After you have configured the DMA channel, you can start the transfer with the START EDMACHx statement.&lt;br /&gt;
&lt;br /&gt;
This will write the TRFREQ bit in the CTRLA register.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Setting the TRFREQ Bit (DMA Channel Transfer Request) requests a DATA TRANSFER on the EDMA channel.&lt;br /&gt;
&lt;br /&gt;
Setting this bit requests a data transfer on the DMA Channel. This bit is automatically cleared at&lt;br /&gt;
&lt;br /&gt;
the beginning of the data transfer.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;See also&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;[[CONFIG DMA|CONFIG DMA]] , [[START|START DMACHx]], [[ATXMEGA]] , [[CONFIG EDMA|CONFIG EDMA]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Example&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bascomavr&amp;quot;&amp;gt;&lt;br /&gt;
'----------------------------------------------------------------&lt;br /&gt;
' (c) 1995-2016, MCS&lt;br /&gt;
' xm128A1-DMA.bas&lt;br /&gt;
' This sample demonstrates DMA with an Xmega32E5&lt;br /&gt;
'-----------------------------------------------------------------&lt;br /&gt;
$regfile = &amp;quot;xm32e5def.dat&amp;quot;&lt;br /&gt;
$crystal = 32000000&lt;br /&gt;
$hwstack = 64&lt;br /&gt;
$swstack = 40&lt;br /&gt;
$framesize = 40&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'first enable the osc of your choice&lt;br /&gt;
Config Osc = Enabled , 32mhzosc = Enabled&lt;br /&gt;
 &lt;br /&gt;
'configure the systemclock&lt;br /&gt;
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1&lt;br /&gt;
 &lt;br /&gt;
Config Com1 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8&lt;br /&gt;
 &lt;br /&gt;
Dim Ar(100) As Byte , Dest(100) As Byte , J As Byte , W As Word&lt;br /&gt;
 &lt;br /&gt;
For J = 1 To 100&lt;br /&gt;
 Ar(j) = J ' create an array and assign a value&lt;br /&gt;
Next&lt;br /&gt;
 &lt;br /&gt;
Print &amp;quot;DMA DEMO&amp;quot;&lt;br /&gt;
Config Edma = Enabled , Doublebuf = Disabled , Cpm = Rr ' enable DMA&lt;br /&gt;
 &lt;br /&gt;
'you can configure 4 DMA channels&lt;br /&gt;
Config Edmach0 = Enabled , Burstlen = 1 , Chanrpt = Enabled , Tci = Off , Eil = Off , Sar = None , Sam = Inc , Dar = None , Dam = Inc , Trigger = 0 , Btc = 100 , Sadr = Varptr(ar(1)) , Dadr = Varptr(dest(1))&lt;br /&gt;
 &lt;br /&gt;
Start Edmach0 ' this will do a manual/software DMA transfer, when trigger&amp;lt;&amp;gt;0 you can use a hardware event as a trigger source&lt;br /&gt;
 &lt;br /&gt;
For J = 1 To 50&lt;br /&gt;
Print J ; &amp;quot;-&amp;quot; ; Ar(j) ; &amp;quot;-&amp;quot; ; Dest(j) ' print the values&lt;br /&gt;
Next&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BASCOM Language Reference]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>