<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic need help with K20 DMA ADC config emulating flexible scan mode in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/need-help-with-K20-DMA-ADC-config-emulating-flexible-scan-mode/m-p/291328#M11675</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm referencing Application Note AN4590 to add high speed sampling and hardware channel scan on a K20 (specifically &lt;SPAN style="color: #51626f; font-family: arial, sans-serif; font-size: 12px;"&gt;&lt;STRONG&gt;MK20DX128VLH5&lt;/STRONG&gt; on the FRDM-K20D50M dev board). However, I also need PDB hardware triggering of the ADC for my low-jitter DSP application.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I can get the PDB to trigger the ADC and, provided I disable ADC DMA and enable ADC INT, I can read analog data. But when I disable ADC INT and enable ADC DMA I get a &lt;SPAN style="color: #ff0000;"&gt;PDB sequence error interrupt&lt;/SPAN&gt; (&lt;SPAN style="color: #ff0000;"&gt;PDB0_CH0S = 0x10001&lt;/SPAN&gt;). The reference manual says:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;When one conversion, which is triggered by one of the pre-triggers from PDB channel n, is in progress, new trigger from PDB channel's corresponding pre-trigger m cannot be accepted by ADCn, and ERR[m] is set.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, it sounds like the COCO flag is not getting cleared. In my DMA configuration, I cannot see why DMA is not clearing the ADC after copy. &lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Any help is appreciated!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2&gt;DMA Initialization:&lt;/H2&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;void dma_adc_init(uint8_t *chan_list, uint32_t num_chan, uint16_t *results, uint32_t results_size)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Initializing DMA\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Enable Error Interrupts on Ch0 and Ch1. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_CERR = 0x40;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_EEI |= DMA_EEI_EEI0_MASK | DMA_EEI_EEI1_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /****************************************************************************&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; * Setup Transfer Control Descriptor #0 (Channel List to ADC)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ***************************************************************************/&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMAMUX0_CHCFG0 = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(54); // DMA&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Source and data destination both 8-bits long. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_ATTR = DMA_ATTR_SSIZE(0x00) | DMA_ATTR_DSIZE(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* DMA_TCD0_SADDR = chan_list */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_SADDR = (uint32_t)&amp;amp;chan_list[0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_NBYTES_MLNO = 1;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_SOFF = 1;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_SLAST = (uint32_t)-((int32_t)(num_chan));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* DMA_TCD0_DADDR = adc_buffer */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_DADDR = (uint32_t) &amp;amp;ADC0_SC1A;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_DOFF = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_DLASTSGA = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Ch0 Major iteration count. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_BITER_ELINKNO = DMA_BITER_ELINKNO_BITER(num_chan);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_CITER_ELINKNO = DMA_CITER_ELINKNO_CITER(num_chan);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Don't link to another channel. Don't generate interrupt. This DMA gets&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; called when Ch1 finishes indicating that the ADC results have been&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; copied to memory. This DMA copies the next ADC settings to the ADC&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; status-control register. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_CSR = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /****************************************************************************&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; * Setup Transfer Control Descriptor #1 (ADC -&amp;gt; Memory)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ***************************************************************************/&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMAMUX0_CHCFG1 = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(40); // ADC0&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Source and data destination both 16-bits long. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_ATTR = DMA_ATTR_SSIZE(0x01) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_ATTR_DSIZE(0x01);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* DMA_TCD0_SADDR = adc_buffer2 */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_SADDR = (uint32_t) &amp;amp;ADC0_RA; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_NBYTES_MLNO = 2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_SOFF = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_SLAST = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* DMA_TCD0_DADDR = adc_buffer */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_DADDR = (uint32_t) &amp;amp;results[0];&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_DOFF = 2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_DLASTSGA = (uint32_t)-((int32_t)(results_size));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Link to Ch0 on major iteration. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_BITER_ELINKYES = DMA_BITER_ELINKYES_ELINK_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_BITER_ELINKYES_LINKCH(0x0) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_BITER_ELINKNO_BITER(results_size/sizeof(uint16_t));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_CITER_ELINKYES = DMA_CITER_ELINKYES_ELINK_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; DMA_CITER_ELINKNO_CITER(results_size/sizeof(uint16_t));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Don't link to another channel. Don't generate interrupt. This DMA gets&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; called when Ch1 finishes indicating that the ADC results have been&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; copied to memory. This DMA copies the next ADC settings to the ADC&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; status-control register. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_CSR = DMA_CSR_MAJORELINK_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_CSR_MAJORLINKCH(0) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_CSR_INTHALF_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_CSR_INTMAJOR_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Enable DMA Ch1. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_ERQ |= DMA_ERQ_ERQ1_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2&gt;and the main() function:&lt;/H2&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&lt;STRONG&gt;int main(void)&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; cpu_init();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; pta_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; ptc_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; ptd_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; uart0_init();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; printf("\r\n\n\n" "Digital Signal Processor Firmware Version " FW_VERSION_ "\r\n");&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; print_uuid();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; print_reset_status();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; SysTick_Init();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; ftfl_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; ftm0_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; pit_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; vref_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; pdb_init(50000); /// totally slow for debugging&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Initializing RAM...\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; memset(adc_buffer, 0, sizeof(adc_buffer));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; memset(res_buffer, 0, sizeof(res_buffer));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; memset(out_buffer, 0, sizeof(out_buffer));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; adc_init();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; dma_adc_init(uc_adc_mux, sizeof(uc_adc_mux)/sizeof(uc_adc_mux[0]), adc_buffer, sizeof(adc_buffer));&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Starting ADC sampling (sample rate 100kHz)\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; pdb_trigger();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; while(1) &lt;/SPAN&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt; line-height: 1.5em;"&gt;{ &lt;/SPAN&gt;&lt;SPAN style="line-height: 1.5em; font-family: 'courier new', courier; font-size: 8pt;"&gt;delay_ms(1000);&lt;/SPAN&gt;&lt;SPAN style="line-height: 1.5em; font-family: 'courier new', courier; font-size: 8pt;"&gt; print_time();&lt;/SPAN&gt;&lt;SPAN style="line-height: 1.5em; font-family: 'courier new', courier; font-size: 8pt;"&gt; }&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&lt;STRONG&gt;}&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2&gt;ADC Initialization:&lt;/H2&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;void adc_init(void)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Initializing ADC\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Use PDB for hardware trigger. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; SIM_SOPT7 = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Set ADC clocks. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_CFG1 = ADC_CFG1_ADIV(0x01) | ADC_CFG1_MODE(0x03) | ADC_CFG1_ADICLK(0x02);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_CFG2 = ADC_CFG2_ADHSC_MASK | ADC_CFG2_ADLSTS(0x03);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* No compare nor offset values. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_CV1 = ADC_CV1_CV(0x00);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_CV2 = ADC_CV2_CV(0x00);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_OFS = ADC_OFS_OFS(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Set to software trigger for now. After calibration we'll change it back&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; to hardware and trigger on PDB. Enable DMA. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC2 = ADC_SC2_DMAEN_MASK | ADC_SC2_REFSEL(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC2 = ADC_SC2_REFSEL(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Disable hardware averaging. Disable ADC continuous conversion - multiple&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; triggers from PDB. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC3 = ADC_SC3_AVGS(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; // Start Calibration&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Calibrating ADC...\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC3 |= ADC_SC3_CAL_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; // Wait for calibration to finish&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; while( (ADC0_SC1A &amp;amp; ADC_SC1_COCO_MASK ) == ADC_SC1_COCO_MASK );&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; if ((ADC0_SC3 &amp;amp; ADC_SC3_CALF_MASK) == ADC_SC3_CALF_MASK )&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; { &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Calibration failed!\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; }&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; // switch to hardware trigger&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC2 |= ADC_SC2_ADTRG_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Set the channel mux for A trigger. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC1A = ADC_SC1_ADCH(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2&gt;Programmable Delay Block Initialization:&lt;/H2&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;void pdb_init(uint16_t period)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Initializing Programmable Delay Block (PDB)\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Software trigger, error interrupts enabled, continuous mode. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_SC = PDB_SC_LDMOD(0x00) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_PDBEIE_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_PRESCALER(0x8) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_TRGSEL(0xF) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_PDBIE_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_MULT(0x3) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_CONT_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Set the PDB modulus. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_MOD = period;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Disable PDB Interrupt Delay (i.e. don't generate interrupt). */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_IDLY = PDB_IDLY_IDLY(0xFFFF);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Pretriggers 0 and 1 are both enabled. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_CH0C1 = PDB_C1_BB(0x00) | PDB_C1_TOS(0x03) | PDB_C1_EN(0x03);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Clear channel flags. Clear channel sequence error flags. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_CH0S = PDB_S_CF(0x00) | PDB_S_ERR(0xFF);&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Channel 0 delay. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_CH0DLY0 = PDB_DLY_DLY(period/2);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_CH0DLY1 = PDB_DLY_DLY(0xFFFF);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Start module. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_SC |= PDB_SC_PDBEN_MASK | PDB_SC_LDOK_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; // NOTE: We're not using the Pulse-Out module.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 21 Oct 2013 20:12:58 GMT</pubDate>
    <dc:creator>brintonengineer</dc:creator>
    <dc:date>2013-10-21T20:12:58Z</dc:date>
    <item>
      <title>need help with K20 DMA ADC config emulating flexible scan mode</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/need-help-with-K20-DMA-ADC-config-emulating-flexible-scan-mode/m-p/291328#M11675</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm referencing Application Note AN4590 to add high speed sampling and hardware channel scan on a K20 (specifically &lt;SPAN style="color: #51626f; font-family: arial, sans-serif; font-size: 12px;"&gt;&lt;STRONG&gt;MK20DX128VLH5&lt;/STRONG&gt; on the FRDM-K20D50M dev board). However, I also need PDB hardware triggering of the ADC for my low-jitter DSP application.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I can get the PDB to trigger the ADC and, provided I disable ADC DMA and enable ADC INT, I can read analog data. But when I disable ADC INT and enable ADC DMA I get a &lt;SPAN style="color: #ff0000;"&gt;PDB sequence error interrupt&lt;/SPAN&gt; (&lt;SPAN style="color: #ff0000;"&gt;PDB0_CH0S = 0x10001&lt;/SPAN&gt;). The reference manual says:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;When one conversion, which is triggered by one of the pre-triggers from PDB channel n, is in progress, new trigger from PDB channel's corresponding pre-trigger m cannot be accepted by ADCn, and ERR[m] is set.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, it sounds like the COCO flag is not getting cleared. In my DMA configuration, I cannot see why DMA is not clearing the ADC after copy. &lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Any help is appreciated!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2&gt;DMA Initialization:&lt;/H2&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;void dma_adc_init(uint8_t *chan_list, uint32_t num_chan, uint16_t *results, uint32_t results_size)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Initializing DMA\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Enable Error Interrupts on Ch0 and Ch1. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_CERR = 0x40;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_EEI |= DMA_EEI_EEI0_MASK | DMA_EEI_EEI1_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /****************************************************************************&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; * Setup Transfer Control Descriptor #0 (Channel List to ADC)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ***************************************************************************/&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMAMUX0_CHCFG0 = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(54); // DMA&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Source and data destination both 8-bits long. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_ATTR = DMA_ATTR_SSIZE(0x00) | DMA_ATTR_DSIZE(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* DMA_TCD0_SADDR = chan_list */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_SADDR = (uint32_t)&amp;amp;chan_list[0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_NBYTES_MLNO = 1;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_SOFF = 1;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_SLAST = (uint32_t)-((int32_t)(num_chan));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* DMA_TCD0_DADDR = adc_buffer */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_DADDR = (uint32_t) &amp;amp;ADC0_SC1A;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_DOFF = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_DLASTSGA = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Ch0 Major iteration count. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_BITER_ELINKNO = DMA_BITER_ELINKNO_BITER(num_chan);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_CITER_ELINKNO = DMA_CITER_ELINKNO_CITER(num_chan);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Don't link to another channel. Don't generate interrupt. This DMA gets&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; called when Ch1 finishes indicating that the ADC results have been&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; copied to memory. This DMA copies the next ADC settings to the ADC&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; status-control register. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD0_CSR = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /****************************************************************************&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; * Setup Transfer Control Descriptor #1 (ADC -&amp;gt; Memory)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ***************************************************************************/&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMAMUX0_CHCFG1 = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(40); // ADC0&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Source and data destination both 16-bits long. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_ATTR = DMA_ATTR_SSIZE(0x01) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_ATTR_DSIZE(0x01);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* DMA_TCD0_SADDR = adc_buffer2 */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_SADDR = (uint32_t) &amp;amp;ADC0_RA; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_NBYTES_MLNO = 2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_SOFF = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_SLAST = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* DMA_TCD0_DADDR = adc_buffer */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_DADDR = (uint32_t) &amp;amp;results[0];&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_DOFF = 2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_DLASTSGA = (uint32_t)-((int32_t)(results_size));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Link to Ch0 on major iteration. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_BITER_ELINKYES = DMA_BITER_ELINKYES_ELINK_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_BITER_ELINKYES_LINKCH(0x0) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_BITER_ELINKNO_BITER(results_size/sizeof(uint16_t));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_CITER_ELINKYES = DMA_CITER_ELINKYES_ELINK_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; DMA_CITER_ELINKNO_CITER(results_size/sizeof(uint16_t));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Don't link to another channel. Don't generate interrupt. This DMA gets&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; called when Ch1 finishes indicating that the ADC results have been&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; copied to memory. This DMA copies the next ADC settings to the ADC&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; status-control register. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_CSR = DMA_CSR_MAJORELINK_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_CSR_MAJORLINKCH(0) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_CSR_INTHALF_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_CSR_INTMAJOR_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Enable DMA Ch1. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_ERQ |= DMA_ERQ_ERQ1_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2&gt;and the main() function:&lt;/H2&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&lt;STRONG&gt;int main(void)&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; cpu_init();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; pta_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; ptc_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; ptd_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; uart0_init();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; printf("\r\n\n\n" "Digital Signal Processor Firmware Version " FW_VERSION_ "\r\n");&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; print_uuid();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; print_reset_status();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; SysTick_Init();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; ftfl_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; ftm0_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; pit_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; vref_init();&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; pdb_init(50000); /// totally slow for debugging&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Initializing RAM...\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; memset(adc_buffer, 0, sizeof(adc_buffer));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; memset(res_buffer, 0, sizeof(res_buffer));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; memset(out_buffer, 0, sizeof(out_buffer));&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; adc_init();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt; &lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; dma_adc_init(uc_adc_mux, sizeof(uc_adc_mux)/sizeof(uc_adc_mux[0]), adc_buffer, sizeof(adc_buffer));&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Starting ADC sampling (sample rate 100kHz)\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; pdb_trigger();&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&amp;nbsp; while(1) &lt;/SPAN&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt; line-height: 1.5em;"&gt;{ &lt;/SPAN&gt;&lt;SPAN style="line-height: 1.5em; font-family: 'courier new', courier; font-size: 8pt;"&gt;delay_ms(1000);&lt;/SPAN&gt;&lt;SPAN style="line-height: 1.5em; font-family: 'courier new', courier; font-size: 8pt;"&gt; print_time();&lt;/SPAN&gt;&lt;SPAN style="line-height: 1.5em; font-family: 'courier new', courier; font-size: 8pt;"&gt; }&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;&lt;STRONG&gt;}&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2&gt;ADC Initialization:&lt;/H2&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;void adc_init(void)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Initializing ADC\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Use PDB for hardware trigger. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; SIM_SOPT7 = 0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Set ADC clocks. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_CFG1 = ADC_CFG1_ADIV(0x01) | ADC_CFG1_MODE(0x03) | ADC_CFG1_ADICLK(0x02);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_CFG2 = ADC_CFG2_ADHSC_MASK | ADC_CFG2_ADLSTS(0x03);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* No compare nor offset values. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_CV1 = ADC_CV1_CV(0x00);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_CV2 = ADC_CV2_CV(0x00);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_OFS = ADC_OFS_OFS(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Set to software trigger for now. After calibration we'll change it back&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; to hardware and trigger on PDB. Enable DMA. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC2 = ADC_SC2_DMAEN_MASK | ADC_SC2_REFSEL(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC2 = ADC_SC2_REFSEL(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Disable hardware averaging. Disable ADC continuous conversion - multiple&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; triggers from PDB. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC3 = ADC_SC3_AVGS(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; // Start Calibration&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Calibrating ADC...\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC3 |= ADC_SC3_CAL_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; // Wait for calibration to finish&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; while( (ADC0_SC1A &amp;amp; ADC_SC1_COCO_MASK ) == ADC_SC1_COCO_MASK );&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; if ((ADC0_SC3 &amp;amp; ADC_SC3_CALF_MASK) == ADC_SC3_CALF_MASK )&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; { &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Calibration failed!\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; }&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; // switch to hardware trigger&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC2 |= ADC_SC2_ADTRG_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Set the channel mux for A trigger. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC1A = ADC_SC1_ADCH(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2&gt;Programmable Delay Block Initialization:&lt;/H2&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;void pdb_init(uint16_t period)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; printf("Initializing Programmable Delay Block (PDB)\r\n");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Software trigger, error interrupts enabled, continuous mode. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_SC = PDB_SC_LDMOD(0x00) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_PDBEIE_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_PRESCALER(0x8) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_TRGSEL(0xF) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_PDBIE_MASK |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_MULT(0x3) |&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PDB_SC_CONT_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Set the PDB modulus. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_MOD = period;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Disable PDB Interrupt Delay (i.e. don't generate interrupt). */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_IDLY = PDB_IDLY_IDLY(0xFFFF);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Pretriggers 0 and 1 are both enabled. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_CH0C1 = PDB_C1_BB(0x00) | PDB_C1_TOS(0x03) | PDB_C1_EN(0x03);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Clear channel flags. Clear channel sequence error flags. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_CH0S = PDB_S_CF(0x00) | PDB_S_ERR(0xFF);&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Channel 0 delay. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_CH0DLY0 = PDB_DLY_DLY(period/2);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_CH0DLY1 = PDB_DLY_DLY(0xFFFF);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Start module. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; PDB0_SC |= PDB_SC_PDBEN_MASK | PDB_SC_LDOK_MASK;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; // NOTE: We're not using the Pulse-Out module.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 8pt; font-family: 'courier new', courier;"&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 21 Oct 2013 20:12:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/need-help-with-K20-DMA-ADC-config-emulating-flexible-scan-mode/m-p/291328#M11675</guid>
      <dc:creator>brintonengineer</dc:creator>
      <dc:date>2013-10-21T20:12:58Z</dc:date>
    </item>
    <item>
      <title>Re: need help with K20 DMA ADC config emulating flexible scan mode</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/need-help-with-K20-DMA-ADC-config-emulating-flexible-scan-mode/m-p/291329#M11676</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Found a typo in code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;STRONG style="font-style: inherit; font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; ADC0_SC2 = ADC_SC2_DMAEN_MASK | ADC_SC2_REFSEL(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;STRONG style="font-style: inherit; font-size: 8pt; font-family: 'courier new', courier; text-decoration: line-through;"&gt;&amp;nbsp; ADC0_SC2 = ADC_SC2_REFSEL(0x00);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DMA interrupt is now being called. However, I can't seem to get more than 512 bytes to copy in a single Major Loop. When setting the iteration to 512 and DLASTSGA to -1024 I get DMA errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;STRONG style="font-style: inherit; font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_DLASTSGA = (uint32_t)-1024;&lt;/STRONG&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt; &lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;STRONG style="font-style: inherit; font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; /* Link to Ch0 on major iteration. */&lt;/STRONG&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;STRONG style="font-style: inherit; font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_BITER_ELINKYES = DMA_BITER_ELINKYES_ELINK_MASK | &lt;/STRONG&gt;&lt;STRONG style="font-style: inherit; font-size: 8pt; font-family: 'courier new', courier;"&gt;DMA_BITER_ELINKYES_LINKCH(0x0) |&lt;/STRONG&gt;&lt;STRONG style="font-style: inherit; font-size: 8pt; font-family: 'courier new', courier;"&gt; DMA_BITER_ELINKNO_BITER(512);&lt;/STRONG&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;STRONG style="font-style: inherit; font-size: 8pt; font-family: 'courier new', courier;"&gt;&amp;nbsp; DMA_TCD1_CITER_ELINKYES = DMA_CITER_ELINKYES_ELINK_MASK |&lt;/STRONG&gt;&lt;STRONG style="font-style: inherit; font-size: 8pt; font-family: 'courier new', courier;"&gt; DMA_CITER_ELINKNO_CITER(512);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is there a fundamental limit to how much memory can be copied? I see in the K20 family reference manual "Crossbar-Light switch integration" figure that there are TWO SRAM controllers (controller_L and controller_U). How are these configured? Can I take advantage of this to improve system bandwidth? Is this what is limiting the Major Loop size?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;JD&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Oct 2013 01:53:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/need-help-with-K20-DMA-ADC-config-emulating-flexible-scan-mode/m-p/291329#M11676</guid>
      <dc:creator>brintonengineer</dc:creator>
      <dc:date>2013-10-22T01:53:06Z</dc:date>
    </item>
    <item>
      <title>Re: need help with K20 DMA ADC config emulating flexible scan mode</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/need-help-with-K20-DMA-ADC-config-emulating-flexible-scan-mode/m-p/291330#M11677</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi JD,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The coco flag would be clear when the respective SC1n register is written or when the respective Rn register is read. so there is only one DMA channel needed to copy the Rn register to memory, and the coco flag would be cleared automatically after the DMA transfer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope that helps,&lt;/P&gt;&lt;P&gt;B.R&lt;/P&gt;&lt;P&gt;Kan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Nov 2013 06:26:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/need-help-with-K20-DMA-ADC-config-emulating-flexible-scan-mode/m-p/291330#M11677</guid>
      <dc:creator>Kan_Li</dc:creator>
      <dc:date>2013-11-01T06:26:21Z</dc:date>
    </item>
    <item>
      <title>Re: need help with K20 DMA ADC config emulating flexible scan mode</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/need-help-with-K20-DMA-ADC-config-emulating-flexible-scan-mode/m-p/291331#M11678</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi JD,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For a channel link enabled configuration, the BITER and CITER only have 9 bit field, so the max allowable count is 0x1FF(511).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope that helps,&lt;/P&gt;&lt;P&gt;B.R&lt;/P&gt;&lt;P&gt;Kan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Nov 2013 06:38:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/need-help-with-K20-DMA-ADC-config-emulating-flexible-scan-mode/m-p/291331#M11678</guid>
      <dc:creator>Kan_Li</dc:creator>
      <dc:date>2013-11-01T06:38:13Z</dc:date>
    </item>
  </channel>
</rss>

