<?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 LPC1549: Problem with SCT triggering ADC triggering DMA at a certain frequency in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Problem-with-SCT-triggering-ADC-triggering-DMA-at-a/m-p/1201160#M43296</link>
    <description>&lt;P&gt;I'm using the Xpresso-LPC1549 board with MCUXpresso IDE v11 and LPCOpen v2_20.&lt;/P&gt;&lt;P&gt;I made the SCT trigger the ADC at 100 KHz.&lt;/P&gt;&lt;P&gt;And then the DMA should to write the result to memory (eventually with the Ping - Pong mode).&lt;/P&gt;&lt;P&gt;The DMA interrupt is only fired one time, when the ADC is enabled.&lt;/P&gt;&lt;P&gt;Can someone help?&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;void DMA_IRQHandler(void)&lt;BR /&gt;{&lt;BR /&gt;/* Error interrupt on channel 0? */&lt;BR /&gt;if ((Chip_DMA_GetIntStatus(LPC_DMA) &amp;amp; DMA_INTSTAT_ACTIVEERRINT) != 0) {&lt;BR /&gt;/* This shouldn't happen for this simple DMA example, so set the LED&lt;BR /&gt;to indicate an error occurred. This is the correct method to clear&lt;BR /&gt;an abort. */&lt;BR /&gt;Chip_DMA_DisableChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;while ((Chip_DMA_GetBusyChannels(LPC_DMA) &amp;amp; (1 &amp;lt;&amp;lt; DMA_CH0)) != 0) {}&lt;BR /&gt;Chip_DMA_AbortChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_ClearErrorIntChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* Clear DMA interrupt for the channel */&lt;BR /&gt;Chip_DMA_ClearActiveIntAChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_ADC_ClearFlags(LPC_ADC0, Chip_ADC_GetFlags(LPC_ADC0));&lt;/P&gt;&lt;P&gt;dmaDone = true;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;int main(void) {&lt;/P&gt;&lt;P&gt;#if defined (__USE_LPCOPEN)&lt;BR /&gt;// Read clock settings and update SystemCoreClock variable&lt;BR /&gt;SystemCoreClockUpdate();&lt;BR /&gt;#if !defined(NO_BOARD_LIB)&lt;BR /&gt;// Set up and initialize all required blocks and&lt;BR /&gt;// functions related to the board hardware&lt;BR /&gt;Board_Init();&lt;BR /&gt;// Set the LED to the state of "On"&lt;BR /&gt;Board_LED_Set(0, true);&lt;BR /&gt;#endif&lt;BR /&gt;#endif&lt;BR /&gt;/* Initialize GPIO */&lt;BR /&gt;Chip_GPIO_Init(LPC_GPIO);&lt;BR /&gt;Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 0); //Use PIO_0_0 for test toggle&lt;/P&gt;&lt;P&gt;//Setup DMA&lt;BR /&gt;Chip_DMA_Init(LPC_DMA);&lt;BR /&gt;Chip_DMA_Enable(LPC_DMA);&lt;BR /&gt;Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));&lt;BR /&gt;/* Setup channel 0 for the following configuration:&lt;BR /&gt;- High channel priority&lt;BR /&gt;- Interrupt A fires on descriptor completion */&lt;BR /&gt;Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_EnableIntChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_SetupChannelConfig(LPC_DMA, DMA_CH0,&lt;BR /&gt;(DMA_CFG_HWTRIGEN | DMA_CFG_TRIGTYPE_EDGE | DMA_CFG_TRIGPOL_HIGH&lt;BR /&gt;| DMA_CFG_TRIGBURST_BURST | DMA_CFG_BURSTPOWER_1&lt;BR /&gt;| DMA_CFG_CHPRIORITY(0)));&lt;/P&gt;&lt;P&gt;Chip_INMUX_SetDMATrigger(DMA_CH0, DMATRIG_ADC0_SEQA_IRQ);&lt;/P&gt;&lt;P&gt;DMA_CHDESC_T dmaDesc0, dmaDesc1;&lt;BR /&gt;dmaDesc0.source = DMA_ADDR(&amp;amp;(LPC_ADC0-&amp;gt;SEQ_GDAT[ADC_SEQA_IDX]));&lt;BR /&gt;dmaDesc0.dest = DMA_ADDR(&amp;amp;src[SIZE_BUFFERS - 1]) + 3;&lt;BR /&gt;dmaDesc0.next = DMA_ADDR(0);&lt;/P&gt;&lt;P&gt;dmaDesc1.source = DMA_ADDR(&amp;amp;(LPC_ADC0-&amp;gt;SEQ_GDAT[ADC_SEQA_IDX]));&lt;BR /&gt;dmaDesc1.dest = DMA_ADDR(&amp;amp;dst[SIZE_BUFFERS - 1]) + 3;&lt;BR /&gt;dmaDesc1.next = DMA_ADDR(0);&lt;/P&gt;&lt;P&gt;/* Setup transfer descriptor and validate it */&lt;BR /&gt;Chip_DMA_SetupTranChannel(LPC_DMA, DMA_CH0, &amp;amp;dmaDesc0);&lt;/P&gt;&lt;P&gt;Chip_DMA_ClearActiveIntAChannel(LPC_DMA, DMA_CH0);&lt;/P&gt;&lt;P&gt;/* Enable DMA interrupt */&lt;BR /&gt;NVIC_EnableIRQ(DMA_IRQn);&lt;/P&gt;&lt;P&gt;/* Setup data transfer and software trigger in same call */&lt;BR /&gt;Chip_DMA_SetupChannelTransfer(LPC_DMA, DMA_CH0,&lt;BR /&gt;// (DMA_XFERCFG_CFGVALID | DMA_XFERCFG_SETINTA |&lt;BR /&gt;// DMA_XFERCFG_WIDTH_32 | DMA_XFERCFG_SRCINC_1 | DMA_XFERCFG_DSTINC_1 |&lt;BR /&gt;// DMA_XFERCFG_XFERCOUNT(SIZE_BUFFERS)));&lt;BR /&gt;(DMA_XFERCFG_CFGVALID | DMA_XFERCFG_RELOAD | DMA_XFERCFG_SETINTA |&lt;BR /&gt;DMA_XFERCFG_WIDTH_32 |&lt;BR /&gt;DMA_XFERCFG_SRCINC_0 | DMA_XFERCFG_DSTINC_1 |&lt;BR /&gt;DMA_XFERCFG_XFERCOUNT(SIZE_BUFFERS)));&lt;BR /&gt;Chip_DMA_SetValidChannel(LPC_DMA, DMA_CH0);&lt;/P&gt;&lt;P&gt;/* Setup ADC for 12-bit mode and normal power */&lt;BR /&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 8, (IOCON_MODE_INACT));&lt;BR /&gt;Chip_SWM_Init();&lt;BR /&gt;Chip_SWM_EnableFixedPin(SWM_FIXED_ADC0_0); //P0_8&lt;/P&gt;&lt;P&gt;Chip_ADC_Init(LPC_ADC0, 0);&lt;BR /&gt;Chip_ADC_SetClockRate(LPC_ADC0, ADC_MAX_SAMPLE_RATE);&lt;BR /&gt;Chip_ADC_SetupSequencer(LPC_ADC0, ADC_SEQA_IDX, (ADC_SEQ_CTRL_CHANSEL(0) | ADC0_SEQ_CTRL_HWTRIG_SCT2_OUT3 | ADC_SEQ_CTRL_MODE_EOS));&lt;BR /&gt;Chip_ADC_SetTrim(LPC_ADC0, ADC_TRIM_VRANGE_HIGHV);&lt;BR /&gt;Chip_ADC_StartCalibration(LPC_ADC0);&lt;BR /&gt;while (!(Chip_ADC_IsCalibrationDone(LPC_ADC1))) {}&lt;/P&gt;&lt;P&gt;Chip_ADC_ClearFlags(LPC_ADC0, Chip_ADC_GetFlags(LPC_ADC0));&lt;BR /&gt;Chip_ADC_EnableInt(LPC_ADC0, ADC_INTEN_SEQA_ENABLE);&lt;BR /&gt;// NVIC_EnableIRQ(ADC0_SEQA_IRQn);&lt;BR /&gt;Chip_ADC_EnableSequencer(LPC_ADC0, ADC_SEQA_IDX);&lt;/P&gt;&lt;P&gt;//Setup SCT 2&lt;BR /&gt;Chip_SCT_Init(LPC_SCT2);&lt;BR /&gt;Chip_SCT_Config(LPC_SCT2, (SCT_CONFIG_32BIT_COUNTER | SCT_CONFIG_AUTOLIMIT_L));&lt;BR /&gt;Chip_SCT_SetMatchReload(LPC_SCT2, SCT_MATCH_0, Chip_Clock_GetSystemClockRate() / 100000);&lt;/P&gt;&lt;P&gt;LPC_SCT2-&amp;gt;EVENT[0].STATE = 0xFFFFFFFF; // event 0 happens in all states&lt;BR /&gt;LPC_SCT2-&amp;gt;EVENT[0].CTRL = (1 &amp;lt;&amp;lt; 12); // match 0 condition only&lt;/P&gt;&lt;P&gt;Chip_SCTPWM_SetOutPin(LPC_SCT2, 3, 3);&lt;/P&gt;&lt;P&gt;Chip_SCT_ClearControl(LPC_SCT2, SCT_CTRL_HALT_L | SCT_CTRL_HALT_H);&lt;/P&gt;&lt;P&gt;while(1) {&lt;BR /&gt;__NOP();&lt;BR /&gt;}&lt;BR /&gt;return 0 ;&lt;BR /&gt;}&lt;/P&gt;</description>
    <pubDate>Thu, 17 Dec 2020 09:56:09 GMT</pubDate>
    <dc:creator>jespermadsen</dc:creator>
    <dc:date>2020-12-17T09:56:09Z</dc:date>
    <item>
      <title>LPC1549: Problem with SCT triggering ADC triggering DMA at a certain frequency</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Problem-with-SCT-triggering-ADC-triggering-DMA-at-a/m-p/1201160#M43296</link>
      <description>&lt;P&gt;I'm using the Xpresso-LPC1549 board with MCUXpresso IDE v11 and LPCOpen v2_20.&lt;/P&gt;&lt;P&gt;I made the SCT trigger the ADC at 100 KHz.&lt;/P&gt;&lt;P&gt;And then the DMA should to write the result to memory (eventually with the Ping - Pong mode).&lt;/P&gt;&lt;P&gt;The DMA interrupt is only fired one time, when the ADC is enabled.&lt;/P&gt;&lt;P&gt;Can someone help?&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;void DMA_IRQHandler(void)&lt;BR /&gt;{&lt;BR /&gt;/* Error interrupt on channel 0? */&lt;BR /&gt;if ((Chip_DMA_GetIntStatus(LPC_DMA) &amp;amp; DMA_INTSTAT_ACTIVEERRINT) != 0) {&lt;BR /&gt;/* This shouldn't happen for this simple DMA example, so set the LED&lt;BR /&gt;to indicate an error occurred. This is the correct method to clear&lt;BR /&gt;an abort. */&lt;BR /&gt;Chip_DMA_DisableChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;while ((Chip_DMA_GetBusyChannels(LPC_DMA) &amp;amp; (1 &amp;lt;&amp;lt; DMA_CH0)) != 0) {}&lt;BR /&gt;Chip_DMA_AbortChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_ClearErrorIntChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* Clear DMA interrupt for the channel */&lt;BR /&gt;Chip_DMA_ClearActiveIntAChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_ADC_ClearFlags(LPC_ADC0, Chip_ADC_GetFlags(LPC_ADC0));&lt;/P&gt;&lt;P&gt;dmaDone = true;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;int main(void) {&lt;/P&gt;&lt;P&gt;#if defined (__USE_LPCOPEN)&lt;BR /&gt;// Read clock settings and update SystemCoreClock variable&lt;BR /&gt;SystemCoreClockUpdate();&lt;BR /&gt;#if !defined(NO_BOARD_LIB)&lt;BR /&gt;// Set up and initialize all required blocks and&lt;BR /&gt;// functions related to the board hardware&lt;BR /&gt;Board_Init();&lt;BR /&gt;// Set the LED to the state of "On"&lt;BR /&gt;Board_LED_Set(0, true);&lt;BR /&gt;#endif&lt;BR /&gt;#endif&lt;BR /&gt;/* Initialize GPIO */&lt;BR /&gt;Chip_GPIO_Init(LPC_GPIO);&lt;BR /&gt;Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 0); //Use PIO_0_0 for test toggle&lt;/P&gt;&lt;P&gt;//Setup DMA&lt;BR /&gt;Chip_DMA_Init(LPC_DMA);&lt;BR /&gt;Chip_DMA_Enable(LPC_DMA);&lt;BR /&gt;Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));&lt;BR /&gt;/* Setup channel 0 for the following configuration:&lt;BR /&gt;- High channel priority&lt;BR /&gt;- Interrupt A fires on descriptor completion */&lt;BR /&gt;Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_EnableIntChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_SetupChannelConfig(LPC_DMA, DMA_CH0,&lt;BR /&gt;(DMA_CFG_HWTRIGEN | DMA_CFG_TRIGTYPE_EDGE | DMA_CFG_TRIGPOL_HIGH&lt;BR /&gt;| DMA_CFG_TRIGBURST_BURST | DMA_CFG_BURSTPOWER_1&lt;BR /&gt;| DMA_CFG_CHPRIORITY(0)));&lt;/P&gt;&lt;P&gt;Chip_INMUX_SetDMATrigger(DMA_CH0, DMATRIG_ADC0_SEQA_IRQ);&lt;/P&gt;&lt;P&gt;DMA_CHDESC_T dmaDesc0, dmaDesc1;&lt;BR /&gt;dmaDesc0.source = DMA_ADDR(&amp;amp;(LPC_ADC0-&amp;gt;SEQ_GDAT[ADC_SEQA_IDX]));&lt;BR /&gt;dmaDesc0.dest = DMA_ADDR(&amp;amp;src[SIZE_BUFFERS - 1]) + 3;&lt;BR /&gt;dmaDesc0.next = DMA_ADDR(0);&lt;/P&gt;&lt;P&gt;dmaDesc1.source = DMA_ADDR(&amp;amp;(LPC_ADC0-&amp;gt;SEQ_GDAT[ADC_SEQA_IDX]));&lt;BR /&gt;dmaDesc1.dest = DMA_ADDR(&amp;amp;dst[SIZE_BUFFERS - 1]) + 3;&lt;BR /&gt;dmaDesc1.next = DMA_ADDR(0);&lt;/P&gt;&lt;P&gt;/* Setup transfer descriptor and validate it */&lt;BR /&gt;Chip_DMA_SetupTranChannel(LPC_DMA, DMA_CH0, &amp;amp;dmaDesc0);&lt;/P&gt;&lt;P&gt;Chip_DMA_ClearActiveIntAChannel(LPC_DMA, DMA_CH0);&lt;/P&gt;&lt;P&gt;/* Enable DMA interrupt */&lt;BR /&gt;NVIC_EnableIRQ(DMA_IRQn);&lt;/P&gt;&lt;P&gt;/* Setup data transfer and software trigger in same call */&lt;BR /&gt;Chip_DMA_SetupChannelTransfer(LPC_DMA, DMA_CH0,&lt;BR /&gt;// (DMA_XFERCFG_CFGVALID | DMA_XFERCFG_SETINTA |&lt;BR /&gt;// DMA_XFERCFG_WIDTH_32 | DMA_XFERCFG_SRCINC_1 | DMA_XFERCFG_DSTINC_1 |&lt;BR /&gt;// DMA_XFERCFG_XFERCOUNT(SIZE_BUFFERS)));&lt;BR /&gt;(DMA_XFERCFG_CFGVALID | DMA_XFERCFG_RELOAD | DMA_XFERCFG_SETINTA |&lt;BR /&gt;DMA_XFERCFG_WIDTH_32 |&lt;BR /&gt;DMA_XFERCFG_SRCINC_0 | DMA_XFERCFG_DSTINC_1 |&lt;BR /&gt;DMA_XFERCFG_XFERCOUNT(SIZE_BUFFERS)));&lt;BR /&gt;Chip_DMA_SetValidChannel(LPC_DMA, DMA_CH0);&lt;/P&gt;&lt;P&gt;/* Setup ADC for 12-bit mode and normal power */&lt;BR /&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 8, (IOCON_MODE_INACT));&lt;BR /&gt;Chip_SWM_Init();&lt;BR /&gt;Chip_SWM_EnableFixedPin(SWM_FIXED_ADC0_0); //P0_8&lt;/P&gt;&lt;P&gt;Chip_ADC_Init(LPC_ADC0, 0);&lt;BR /&gt;Chip_ADC_SetClockRate(LPC_ADC0, ADC_MAX_SAMPLE_RATE);&lt;BR /&gt;Chip_ADC_SetupSequencer(LPC_ADC0, ADC_SEQA_IDX, (ADC_SEQ_CTRL_CHANSEL(0) | ADC0_SEQ_CTRL_HWTRIG_SCT2_OUT3 | ADC_SEQ_CTRL_MODE_EOS));&lt;BR /&gt;Chip_ADC_SetTrim(LPC_ADC0, ADC_TRIM_VRANGE_HIGHV);&lt;BR /&gt;Chip_ADC_StartCalibration(LPC_ADC0);&lt;BR /&gt;while (!(Chip_ADC_IsCalibrationDone(LPC_ADC1))) {}&lt;/P&gt;&lt;P&gt;Chip_ADC_ClearFlags(LPC_ADC0, Chip_ADC_GetFlags(LPC_ADC0));&lt;BR /&gt;Chip_ADC_EnableInt(LPC_ADC0, ADC_INTEN_SEQA_ENABLE);&lt;BR /&gt;// NVIC_EnableIRQ(ADC0_SEQA_IRQn);&lt;BR /&gt;Chip_ADC_EnableSequencer(LPC_ADC0, ADC_SEQA_IDX);&lt;/P&gt;&lt;P&gt;//Setup SCT 2&lt;BR /&gt;Chip_SCT_Init(LPC_SCT2);&lt;BR /&gt;Chip_SCT_Config(LPC_SCT2, (SCT_CONFIG_32BIT_COUNTER | SCT_CONFIG_AUTOLIMIT_L));&lt;BR /&gt;Chip_SCT_SetMatchReload(LPC_SCT2, SCT_MATCH_0, Chip_Clock_GetSystemClockRate() / 100000);&lt;/P&gt;&lt;P&gt;LPC_SCT2-&amp;gt;EVENT[0].STATE = 0xFFFFFFFF; // event 0 happens in all states&lt;BR /&gt;LPC_SCT2-&amp;gt;EVENT[0].CTRL = (1 &amp;lt;&amp;lt; 12); // match 0 condition only&lt;/P&gt;&lt;P&gt;Chip_SCTPWM_SetOutPin(LPC_SCT2, 3, 3);&lt;/P&gt;&lt;P&gt;Chip_SCT_ClearControl(LPC_SCT2, SCT_CTRL_HALT_L | SCT_CTRL_HALT_H);&lt;/P&gt;&lt;P&gt;while(1) {&lt;BR /&gt;__NOP();&lt;BR /&gt;}&lt;BR /&gt;return 0 ;&lt;BR /&gt;}&lt;/P&gt;</description>
      <pubDate>Thu, 17 Dec 2020 09:56:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Problem-with-SCT-triggering-ADC-triggering-DMA-at-a/m-p/1201160#M43296</guid>
      <dc:creator>jespermadsen</dc:creator>
      <dc:date>2020-12-17T09:56:09Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1549: Problem with SCT triggering ADC triggering DMA at a certain frequency</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Problem-with-SCT-triggering-ADC-triggering-DMA-at-a/m-p/1201619#M43303</link>
      <description>&lt;P&gt;Hi, Jesper,&lt;/P&gt;
&lt;P&gt;I think you have to reinitialize the Transfer Configuration registers in the void DMA_IRQHandler(void), especially XFERCOUNT bits so that the DMA can&amp;nbsp; work repeatedly.&lt;/P&gt;
&lt;P&gt;For simplicity, you can have a test without using ping-pong mode, and check if you can enter void DMA_IRQHandler(void) continuously.&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;XiangJun Rong&lt;/P&gt;</description>
      <pubDate>Fri, 18 Dec 2020 06:39:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Problem-with-SCT-triggering-ADC-triggering-DMA-at-a/m-p/1201619#M43303</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2020-12-18T06:39:16Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1549: Problem with SCT triggering ADC triggering DMA at a certain frequency</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Problem-with-SCT-triggering-ADC-triggering-DMA-at-a/m-p/1206015#M43433</link>
      <description>&lt;P&gt;Thank you xiangjun_rong.&lt;/P&gt;&lt;P&gt;You where right. The interrupt entered continuously.&lt;/P&gt;&lt;P&gt;But I could not get the ADC data out.&lt;/P&gt;&lt;P&gt;I found this example:&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/t5/LPC-Microcontrollers-Knowledge/DMA-Ping-Pong-application/ta-p/1120977" target="_blank"&gt;https://community.nxp.com/t5/LPC-Microcontrollers-Knowledge/DMA-Ping-Pong-application/ta-p/1120977&lt;/A&gt;&lt;/P&gt;&lt;P&gt;for the&amp;nbsp;&lt;SPAN&gt;LPCXpressor54114 Board and changed it to match the &amp;nbsp;LPC1549 LPCXpresso™ board.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Now I get ADC results in the buffer. But there are zeros and not compleately processed data there too.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I'm using the SCT2_Out3 to ADC0_SEQA to DMA. I'm not sure if the ADC_SEQA is setup correctly.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Can you help again? The code is shown below:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;//-------------------------------------------------------------&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;#if defined (__USE_LPCOPEN)&lt;BR /&gt;#if defined(NO_BOARD_LIB)&lt;BR /&gt;#include "chip.h"&lt;BR /&gt;#else&lt;BR /&gt;#include "board.h"&lt;BR /&gt;#endif&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;#include &amp;lt;cr_section_macros.h&amp;gt;&lt;/P&gt;&lt;P&gt;#define NUM_BUFFERS 4&lt;BR /&gt;#define DMA_TRANSFER_SIZE 8&lt;BR /&gt;#define ADC_INPUT_CHANNEL 0&lt;/P&gt;&lt;P&gt;#define SCT_PWM_RATE 10000 /* PWM frequency 10 KHz */&lt;BR /&gt;#define SCT_PWM_PIN_OUT 3 /* COUT3 Generate square wave */&lt;BR /&gt;#define SCT_PWM_OUT 3 /* Index of OUT PWM */&lt;/P&gt;&lt;P&gt;uint16_t adcOut;&lt;/P&gt;&lt;P&gt;DMA_CHDESC_T ADC_TransferDescriptors[NUM_BUFFERS] __attribute__ ((aligned(512)));&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;uint16_t CapturedData[32];&lt;/P&gt;&lt;P&gt;uint16_t DMA_Sum=0;&lt;/P&gt;&lt;P&gt;/**&lt;BR /&gt;*&lt;BR /&gt;* ADC IRQ not Used right now... Only for testing&lt;BR /&gt;*/&lt;BR /&gt;void ADC_SEQA_IRQHandler(void)&lt;BR /&gt;{&lt;BR /&gt;/* If SeqA flags is set i.e. data in global register is valid then read it */&lt;BR /&gt;Chip_ADC_ClearFlags(LPC_ADC0,0xFFFFFFFF);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;void DMA_IRQHandler(void)&lt;BR /&gt;{&lt;BR /&gt;static uint16_t DMA_Sum=0;&lt;/P&gt;&lt;P&gt;DMA_Sum++;&lt;/P&gt;&lt;P&gt;if(DMA_Sum ==8)&lt;BR /&gt;{&lt;BR /&gt;DMA_Sum=4;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/* Rrror interrupt on channel 0? */&lt;BR /&gt;if ((Chip_DMA_GetIntStatus(LPC_DMA) &amp;amp; DMA_INTSTAT_ACTIVEERRINT) != 0)&lt;BR /&gt;{&lt;BR /&gt;/* This shouldn't happen for this simple DMA example, so set the LED&lt;BR /&gt;to indicate an error occurred. This is the correct method to clear&lt;BR /&gt;an abort. */&lt;BR /&gt;Chip_DMA_DisableChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;while ((Chip_DMA_GetBusyChannels(LPC_DMA) &amp;amp; (1 &amp;lt;&amp;lt; DMA_CH0)) != 0) {}&lt;BR /&gt;Chip_DMA_AbortChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_ClearErrorIntChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* Clear DMA interrupt for the channel */&lt;BR /&gt;Chip_DMA_ClearActiveIntAChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/***&lt;BR /&gt;* ____ __ __ _&lt;BR /&gt;* | _ \| \/ | / \&lt;BR /&gt;* | | | | |\/| | / _ \&lt;BR /&gt;* | |_| | | | |/ ___ \&lt;BR /&gt;* |____/|_| |_/_/ \_\&lt;BR /&gt;* / ___| ___| |_ _ _ _ __&lt;BR /&gt;* \___ \ / _ \ __| | | | '_ \&lt;BR /&gt;* ___) | __/ |_| |_| | |_) |&lt;BR /&gt;* |____/ \___|\__|\__,_| .__/&lt;BR /&gt;* |_|&lt;BR /&gt;*/&lt;BR /&gt;void DMA_Setup(void)&lt;BR /&gt;{&lt;BR /&gt;DMA_CHDESC_T Initial_DMA_Descriptor;&lt;/P&gt;&lt;P&gt;ADC_TransferDescriptors[0].source = (uint32_t)&amp;amp;LPC_ADC0-&amp;gt;SEQ_GDAT[0];&lt;BR /&gt;ADC_TransferDescriptors[1].source = (uint32_t)&amp;amp;LPC_ADC0-&amp;gt;SEQ_GDAT[0];&lt;BR /&gt;ADC_TransferDescriptors[2].source = (uint32_t)&amp;amp;LPC_ADC0-&amp;gt;SEQ_GDAT[0];&lt;BR /&gt;ADC_TransferDescriptors[3].source = (uint32_t)&amp;amp;LPC_ADC0-&amp;gt;SEQ_GDAT[0];&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;ADC_TransferDescriptors[0].dest = DMA_ADDR(&amp;amp;CapturedData[(0+1)*DMA_TRANSFER_SIZE-1]);&lt;BR /&gt;ADC_TransferDescriptors[1].dest = DMA_ADDR(&amp;amp;CapturedData[(1+1)*DMA_TRANSFER_SIZE-1]);&lt;BR /&gt;ADC_TransferDescriptors[2].dest = DMA_ADDR(&amp;amp;CapturedData[(2+1)*DMA_TRANSFER_SIZE-1]);&lt;BR /&gt;ADC_TransferDescriptors[3].dest = DMA_ADDR(&amp;amp;CapturedData[(3+1)*DMA_TRANSFER_SIZE-1]);&lt;/P&gt;&lt;P&gt;//The initial DMA desciptor is the same as the 1st transfer descriptor. It&lt;BR /&gt;//Will link into the 2nd of the main descriptors.&lt;/P&gt;&lt;P&gt;ADC_TransferDescriptors[0].next = (uint32_t)&amp;amp;ADC_TransferDescriptors[1];&lt;BR /&gt;ADC_TransferDescriptors[1].next = (uint32_t)&amp;amp;ADC_TransferDescriptors[2];&lt;BR /&gt;ADC_TransferDescriptors[2].next = (uint32_t)&amp;amp;ADC_TransferDescriptors[3];&lt;/P&gt;&lt;P&gt;//Link back to the 1st descriptor&lt;BR /&gt;ADC_TransferDescriptors[3].next = (uint32_t)&amp;amp;ADC_TransferDescriptors[0];&lt;/P&gt;&lt;P&gt;//For a test, stop the transfers here. The sine wave will look fine.&lt;BR /&gt;//ADC_TransferDescriptors[3].next = 0;&lt;/P&gt;&lt;P&gt;ADC_TransferDescriptors[0].xfercfg = (DMA_XFERCFG_CFGVALID |&lt;BR /&gt;DMA_XFERCFG_RELOAD |&lt;BR /&gt;DMA_XFERCFG_SETINTA |&lt;BR /&gt;DMA_XFERCFG_WIDTH_16 |&lt;BR /&gt;DMA_XFERCFG_SRCINC_0 |&lt;BR /&gt;DMA_XFERCFG_DSTINC_1 |&lt;BR /&gt;DMA_XFERCFG_XFERCOUNT(DMA_TRANSFER_SIZE));&lt;/P&gt;&lt;P&gt;ADC_TransferDescriptors[1].xfercfg = ADC_TransferDescriptors[0].xfercfg;&lt;BR /&gt;ADC_TransferDescriptors[2].xfercfg = ADC_TransferDescriptors[0].xfercfg;&lt;/P&gt;&lt;P&gt;ADC_TransferDescriptors[3].xfercfg = (DMA_XFERCFG_CFGVALID |&lt;BR /&gt;DMA_XFERCFG_RELOAD |&lt;BR /&gt;DMA_XFERCFG_SETINTA |&lt;BR /&gt;DMA_XFERCFG_WIDTH_16 |&lt;BR /&gt;DMA_XFERCFG_SRCINC_0 |&lt;BR /&gt;DMA_XFERCFG_DSTINC_1 |&lt;BR /&gt;DMA_XFERCFG_XFERCOUNT(DMA_TRANSFER_SIZE));&lt;/P&gt;&lt;P&gt;Initial_DMA_Descriptor.source = ADC_TransferDescriptors[0].source;&lt;BR /&gt;Initial_DMA_Descriptor.dest = ADC_TransferDescriptors[0].dest;&lt;BR /&gt;Initial_DMA_Descriptor.next = (uint32_t)&amp;amp;ADC_TransferDescriptors[1];&lt;BR /&gt;Initial_DMA_Descriptor.xfercfg = ADC_TransferDescriptors[0].xfercfg;&lt;/P&gt;&lt;P&gt;/* DMA initialization - enable DMA clocking and reset DMA if needed */&lt;BR /&gt;Chip_DMA_Init(LPC_DMA);&lt;/P&gt;&lt;P&gt;/* Enable DMA controller and use driver provided DMA table for current descriptors */&lt;BR /&gt;Chip_DMA_Enable(LPC_DMA);&lt;BR /&gt;Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));&lt;/P&gt;&lt;P&gt;/* Setup channel 0 for the following configuration:&lt;BR /&gt;- High channel priority&lt;BR /&gt;- Interrupt A fires on descriptor completion */&lt;BR /&gt;Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_EnableIntChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;Chip_DMA_SetupChannelConfig(LPC_DMA, DMA_CH0, //(DMA_CFG_PERIPHREQEN |&lt;BR /&gt;(DMA_CFG_HWTRIGEN |&lt;BR /&gt;DMA_CFG_TRIGBURST_BURST |&lt;BR /&gt;DMA_CFG_TRIGTYPE_EDGE |&lt;BR /&gt;DMA_CFG_TRIGPOL_HIGH | //DMA_CFG_TRIGPOL_HIGH&lt;BR /&gt;DMA_CFG_BURSTPOWER_1 |&lt;BR /&gt;DMA_CFG_CHPRIORITY(0)&lt;BR /&gt;)&lt;BR /&gt;);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;//make sure ADC Sequence A interrupts is selected for for a DMA trigger&lt;BR /&gt;Chip_INMUX_SetDMATrigger(DMA_CH0, DMATRIG_ADC0_SEQA_IRQ);&lt;/P&gt;&lt;P&gt;/* Enable DMA interrupt */&lt;BR /&gt;NVIC_EnableIRQ(DMA_IRQn);&lt;/P&gt;&lt;P&gt;// The 1st descriptor is set up through the registers.&lt;/P&gt;&lt;P&gt;/* Setup transfer descriptor and validate it */&lt;BR /&gt;Chip_DMA_SetupTranChannel(LPC_DMA, DMA_CH0, &amp;amp;Initial_DMA_Descriptor);&lt;/P&gt;&lt;P&gt;//Use the transfer configuration for our 4 main descriptors&lt;BR /&gt;Chip_DMA_SetupChannelTransfer(LPC_DMA, DMA_CH0, ADC_TransferDescriptors[0].xfercfg);&lt;BR /&gt;Chip_DMA_SetValidChannel(LPC_DMA, DMA_CH0);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;void SCT_PWM_Generate(void)&lt;BR /&gt;{&lt;BR /&gt;/* Initialize the SCT2 as PWM and set frequency */&lt;BR /&gt;Chip_SCTPWM_Init(LPC_SCT2);&lt;BR /&gt;Chip_SCTPWM_SetRate(LPC_SCT2, SCT_PWM_RATE);&lt;/P&gt;&lt;P&gt;/* Use SCT2_OUT3 pin */&lt;BR /&gt;Chip_SCTPWM_SetOutPin(LPC_SCT2, SCT_PWM_OUT, SCT_PWM_PIN_OUT);&lt;/P&gt;&lt;P&gt;/* Start with 50% duty cycle */&lt;BR /&gt;Chip_SCTPWM_SetDutyCycle(LPC_SCT2, SCT_PWM_OUT, Chip_SCTPWM_PercentageToTicks(LPC_SCT2, 50));&lt;BR /&gt;Chip_SCTPWM_Start(LPC_SCT2);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/***&lt;BR /&gt;* _ ____ ____&lt;BR /&gt;* / \ | _ \ / ___|&lt;BR /&gt;* / _ \ | | | | |&lt;BR /&gt;* / ___ \| |_| | |___&lt;BR /&gt;* /_/__ \_\____/ \____|&lt;BR /&gt;* / ___| ___| |_ _ _ _ __&lt;BR /&gt;* \___ \ / _ \ __| | | | '_ \&lt;BR /&gt;* ___) | __/ |_| |_| | |_) |&lt;BR /&gt;* |____/ \___|\__|\__,_| .__/&lt;BR /&gt;* |_|&lt;BR /&gt;*/&lt;BR /&gt;void ADC_Setup(void)&lt;BR /&gt;{&lt;BR /&gt;/*Set Asynch Clock to the Main clock*/&lt;BR /&gt;// LPC_SYSCON-&amp;gt;ADCCLKSEL = 0;&lt;BR /&gt;// Chip_Clock_SetADCASYNCSource(SYSCTL_ADCASYNCCLKSRC_IRC);&lt;BR /&gt;//Set the divider to 1 and enable. note, the HALT bit (30) and RESET (29) are not in the manual&lt;BR /&gt;// LPC_SYSCON-&amp;gt;ADCCLKDIV = 0;&lt;/P&gt;&lt;P&gt;/* Initialization ADC to 12 bit and set clock divide to 1 to operate synchronously at System clock */&lt;BR /&gt;Chip_ADC_Init(LPC_ADC0, ADC_CR_BITACC(0) | ADC_CR_CLKDIV(0)| ADC_CR_ASYNMODE);&lt;BR /&gt;Chip_ADC_SetClockRate(LPC_ADC0, ADC_MAX_SAMPLE_RATE);&lt;BR /&gt;//select ADC Channel 0 as input&lt;BR /&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 8, IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_ADMODE_EN);&lt;BR /&gt;Chip_SWM_Init();&lt;BR /&gt;Chip_SWM_EnableFixedPin(SWM_FIXED_ADC0_0); //P0_8&lt;/P&gt;&lt;P&gt;Chip_ADC_SetADC0Input(LPC_ADC0, ADC_INSEL_ADC0);&lt;/P&gt;&lt;P&gt;//Setup ADC0_SEQA_IRQ&lt;BR /&gt;Chip_ADC_SetupSequencer(LPC_ADC0,ADC_SEQA_IDX,&lt;BR /&gt;ADC_SEQ_CTRL_SEQ_ENA |&lt;BR /&gt;ADC_SEQ_CTRL_CHANSEL(ADC_INPUT_CHANNEL) |&lt;BR /&gt;ADC0_SEQ_CTRL_HWTRIG_SCT2_OUT3 |&lt;BR /&gt;// ADC_SEQ_CTRL_HWTRIG_POLPOS |&lt;BR /&gt;// ADC_SEQ_CTRL_HWTRIG_SYNCBYPASS |&lt;BR /&gt;ADC_SEQ_CTRL_MODE_EOS);&lt;BR /&gt;/* Enable Sequence A interrupt */&lt;BR /&gt;Chip_ADC_EnableInt(LPC_ADC0, ADC_INTEN_SEQA_ENABLE);&lt;/P&gt;&lt;P&gt;/* Calibrate ADC */&lt;BR /&gt;Chip_ADC_StartCalibration(LPC_ADC0);&lt;BR /&gt;while (!(Chip_ADC_IsCalibrationDone(LPC_ADC0))) {}&lt;/P&gt;&lt;P&gt;Chip_ADC_ClearFlags(LPC_ADC0, Chip_ADC_GetFlags(LPC_ADC0));&lt;BR /&gt;// Chip_ADC_EnableInt(LPC_ADC0, ADC_INTEN_SEQA_ENABLE);&lt;BR /&gt;// NVIC_EnableIRQ(ADC0_SEQA_IRQn);&lt;BR /&gt;Chip_ADC_EnableSequencer(LPC_ADC0, ADC_SEQA_IDX);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;int main(void)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;/* Setup SystemCoreClock and any needed board code */&lt;BR /&gt;SystemCoreClockUpdate();&lt;BR /&gt;Board_Init();&lt;/P&gt;&lt;P&gt;DMA_Setup();&lt;BR /&gt;ADC_Setup();&lt;BR /&gt;SCT_PWM_Generate();&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;while(1)&lt;BR /&gt;{}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 04 Jan 2021 09:01:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Problem-with-SCT-triggering-ADC-triggering-DMA-at-a/m-p/1206015#M43433</guid>
      <dc:creator>jespermadsen</dc:creator>
      <dc:date>2021-01-04T09:01:23Z</dc:date>
    </item>
  </channel>
</rss>

