<?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>LPC MicrocontrollersのトピックPin-Interrupt triggered DMA needs Flag-Reset</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Pin-Interrupt-triggered-DMA-needs-Flag-Reset/m-p/571632#M18432</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by TheBird on Thu Jan 07 03:42:05 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Dear all&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm new on this Forum and on ARM-Microcontrollers. So far I have programmed PIC-Microcontrollers. I hope that someone can help me &lt;SPAN class="lia-unicode-emoji" title=":grinning_face_with_big_eyes:"&gt;&lt;LI-EMOJI id="lia_grinning-face-with-big-eyes" title=":grinning_face_with_big_eyes:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;project description&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have to akquire data from an external ADC via SPI. I have the LPCXpresso824-MAX eval-board. The ADC sample-rate is up to 1MSPs at 16Bit Data-with.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This ADC start the Analog-digital-conversion after a digital signal, generated by PWM. After the Confersion the ADC offers a rising edge on a different digital line (called ADC_INT) to signal that data is available. After this signal i have to initiate a 16bit SPI conversion.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;approach&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I want to use the ADC_INT signal to trigger an DMA-Channel who will initiate a SPI-Write. After that, another DMA-Channel have to store the SPI-Data to the RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;implementation&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;For the first step i wanted to send a 'X' by USART over a PININT-Triggered DMA.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This works by the attached code below. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My problem is that i need to clear the LPC_PININT-&amp;gt;IST Interrupt flag after each external interrupt.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So i tryed to disable the PinInterrupt by outcomment "Chip_PININT_SetPinModeEdge(LPC_PININT, PININTCH0);" and &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;"Chip_PININT_EnableIntLow(LPC_PININT, PININTCH0);" . After that the DMA-trigger will not be fired.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If i enable the interrupt, but dont clear the Interrupt-Flag the DMA-trigger will be fired once.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope that anyone can explain me how to use the DMA-Controller without clearing the LPC_PININT-&amp;gt;IST Interrupt-Flag.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;With best regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;TheBird &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;#include &amp;lt;string.h&amp;gt;
#include "board.h"

/*****************************************************************************
 * Private types/enumerations/variables
 ****************************************************************************/
#ifdef __ICCARM__
#define ALIGNSTR(x) # x
#define ALIGN(x) _Pragma(ALIGNSTR(data_alignment = ## x))
#else
#define ALIGN(x) __attribute__ ((aligned(x)))
#endif


/* DMA descriptors must be aligned to 16 bytes */
ALIGN(16) static DMA_CHDESC_T dmaTXDesc[8];

#define UART_TX_PIN 6
#define UART_RX_PIN 0

char DMASEN = 'X';

/*****************************************************************************
 * Public types/enumerations/variables
 ****************************************************************************/

/*****************************************************************************
 * Private functions
 ****************************************************************************/

/* Clear an error on a DMA channel */
static void dmaClearChannel(DMA_CHID_T ch) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_DisableChannel(LPC_DMA, ch);
&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((Chip_DMA_GetBusyChannels(LPC_DMA) &amp;amp; (1 &amp;lt;&amp;lt; ch)) != 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_AbortChannel(LPC_DMA, ch);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_ClearErrorIntChannel(LPC_DMA, ch);
}

/*****************************************************************************
 * Public functions
 ****************************************************************************/

/**
 * @brief&amp;nbsp;&amp;nbsp; DMA Interrupt Handler
 * @return&amp;nbsp; None
 */
void DMA_IRQHandler(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t errors, pending;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Get DMA error and interrupt channels */
&amp;nbsp;&amp;nbsp;&amp;nbsp; errors = Chip_DMA_GetErrorIntChannels(LPC_DMA);
&amp;nbsp;&amp;nbsp;&amp;nbsp; pending = Chip_DMA_GetActiveIntAChannels(LPC_DMA);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check DMA interrupts of UART 0 TX channel */
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((errors | pending) &amp;amp; (1 &amp;lt;&amp;lt; DMAREQ_USART0_TX)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear DMA interrupt for the channel */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_ClearActiveIntAChannel(LPC_DMA, DMAREQ_USART0_TX);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Handle errors if needed */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (errors &amp;amp; (1 &amp;lt;&amp;lt; DMAREQ_USART0_TX)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* DMA error, channel needs to be reset */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaClearChannel(DMAREQ_USART0_TX);
&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; Board_LED_Toggle(2); //Visualize DMA-Interrupt
}

///**
// * @brief Handle interrupt from PININT0
// * @return&amp;nbsp;&amp;nbsp;&amp;nbsp; Nothing
// */
void PIN_INT0_IRQHandler(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_PININT_ClearIntStatus(LPC_PININT, PININTCH0); //Clear Pin-Interrupt-Status-Flag
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_LED_Toggle(0);&amp;nbsp;&amp;nbsp;&amp;nbsp; //Visualize PinInterrupt
}

/**
 * @brief&amp;nbsp;&amp;nbsp; Main UART/DMA program body
 * @return&amp;nbsp; Does not exit
 */int main(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; int i = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; char tmp[64];
&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemCoreClockUpdate();
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_Init();

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "%c[2J", 27);&amp;nbsp;&amp;nbsp; //Clear Screen
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "Board Initialized\r\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; //========= Initialize UART for DMA ==============================

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM); //Enable the clock to the Switch Matrix

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Disable the fixed pins assigned to 0 and 6 */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_DisableFixedPin(SWM_FIXED_ACMP_I1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_DisableFixedPin(SWM_FIXED_ADC1);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Connect the U0_TXD_O and U0_RXD_I signals to port pins (see define above) */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_MovablePinAssign(SWM_U0_TXD_O, UART_TX_PIN);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_MovablePinAssign(SWM_U0_RXD_I, UART_RX_PIN);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Disable the clock to the Switch Matrix to save power */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Configure UART-Module */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_Init(LPC_USART0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_ConfigData(LPC_USART0, UART_CFG_DATALEN_8 | UART_CFG_PARITY_NONE | UART_CFG_STOPLEN_1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_SetBaud(LPC_USART0, 115200);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_Enable(LPC_USART0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_TXEnable(LPC_USART0);

&amp;nbsp;&amp;nbsp;&amp;nbsp; //========= GPIO-Interrupt for Wake-Up-Switch (PIO0_4) =====================
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_DisableFixedPin(SWM_FIXED_ADC11);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, 0, 4); //!&amp;lt; Configure GPIO pin as input pin
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_SetPinInterrupt(0, 4); //!&amp;lt; Configure interrupt channel 0 for the GPIO pin in SysCon block
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Configure channel 1 interrupt as edge sensitive and falling edge interrupt */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_PININT_SetPinModeEdge(LPC_PININT, PININTCH0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_PININT_EnableIntLow(LPC_PININT, PININTCH0);

&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(PIN_INT0_IRQn);&amp;nbsp; //Enable PIN-Interrupt

&amp;nbsp;&amp;nbsp;&amp;nbsp; //========= Configure DMA Support for UART-TX ==============================
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_Init(LPC_DMA);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Map PINT0 to DMA_USART0_TX */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMATRIGMUX_SetInputTrig(LPC_DMATRIGMUX, DMAREQ_USART0_TX, DMATRIG_PINT0);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enable DMA controller and use driver provided DMA table for current descriptors */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_Enable(LPC_DMA);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Create a descriptor for the data */
&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaTXDesc[0].source = DMA_ADDR(&amp;amp;DMASEN);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write DMASEN
&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaTXDesc[0].dest = DMA_ADDR(&amp;amp;LPC_USART0-&amp;gt;TXDATA);&amp;nbsp; // To USART0_TX
&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaTXDesc[0].xfercfg = DMA_XFERCFG_CFGVALID | DMA_XFERCFG_RELOAD | DMA_XFERCFG_CLRTRIG | DMA_XFERCFG_WIDTH_8 | DMA_XFERCFG_SRCINC_0 | DMA_XFERCFG_DSTINC_0 | DMA_XFERCFG_XFERCOUNT(1); // Just 1 value
&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaTXDesc[0].next = DMA_ADDR(&amp;amp;(dmaTXDesc[0]));

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Setup transfer descriptor and validate it */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetupTranChannel(LPC_DMA, DMAREQ_USART0_TX, &amp;amp;dmaTXDesc[0]);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Setup data transfer */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetupChannelTransfer(LPC_DMA, DMAREQ_USART0_TX, dmaTXDesc[0].xfercfg);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Setup DMA UART TX support*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_EnableChannel(LPC_DMA, DMAREQ_USART0_TX);&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable Channel 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_EnableIntChannel(LPC_DMA, DMAREQ_USART0_TX); //Enable DMA Interrupt for Channel 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetupChannelConfig(LPC_DMA, DMAREQ_USART0_TX, DMA_CFG_HWTRIGEN | DMA_CFG_TRIGPOL_HIGH | DMA_CFG_TRIGTYPE_EDGE | DMA_CFG_TRIGBURST_SNGL | DMA_CFG_CHPRIORITY(2));

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetChannelValid(LPC_DMA, DMAREQ_USART0_TX);

&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(DMA_IRQn);&amp;nbsp;&amp;nbsp; //Enable DMA-Interrupt

&amp;nbsp;&amp;nbsp;&amp;nbsp; //========= Print Debug-Informations ==============================
&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "Application started\r\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "System Clock: %uMHz\r\n", (uint) (SystemCoreClock / 1000000));
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "Main Clock: %uMHz\r\n", (uint) (Chip_Clock_GetMainClockRate() / 1000000));
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "Device ID: 0x%04X\r\n", (uint) Chip_SYSCTL_GetDeviceID());
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);


&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Blink a LED to visualise th
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i++ &amp;gt; 1000000) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_LED_Toggle(1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 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; //Chip_PININT_ClearIntStatus(LPC_PININT, PININTCH0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("NOP");

&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 20:11:09 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T20:11:09Z</dc:date>
    <item>
      <title>Pin-Interrupt triggered DMA needs Flag-Reset</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Pin-Interrupt-triggered-DMA-needs-Flag-Reset/m-p/571632#M18432</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by TheBird on Thu Jan 07 03:42:05 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Dear all&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm new on this Forum and on ARM-Microcontrollers. So far I have programmed PIC-Microcontrollers. I hope that someone can help me &lt;SPAN class="lia-unicode-emoji" title=":grinning_face_with_big_eyes:"&gt;&lt;LI-EMOJI id="lia_grinning-face-with-big-eyes" title=":grinning_face_with_big_eyes:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;project description&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have to akquire data from an external ADC via SPI. I have the LPCXpresso824-MAX eval-board. The ADC sample-rate is up to 1MSPs at 16Bit Data-with.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This ADC start the Analog-digital-conversion after a digital signal, generated by PWM. After the Confersion the ADC offers a rising edge on a different digital line (called ADC_INT) to signal that data is available. After this signal i have to initiate a 16bit SPI conversion.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;approach&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I want to use the ADC_INT signal to trigger an DMA-Channel who will initiate a SPI-Write. After that, another DMA-Channel have to store the SPI-Data to the RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;implementation&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;For the first step i wanted to send a 'X' by USART over a PININT-Triggered DMA.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This works by the attached code below. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My problem is that i need to clear the LPC_PININT-&amp;gt;IST Interrupt flag after each external interrupt.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So i tryed to disable the PinInterrupt by outcomment "Chip_PININT_SetPinModeEdge(LPC_PININT, PININTCH0);" and &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;"Chip_PININT_EnableIntLow(LPC_PININT, PININTCH0);" . After that the DMA-trigger will not be fired.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If i enable the interrupt, but dont clear the Interrupt-Flag the DMA-trigger will be fired once.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope that anyone can explain me how to use the DMA-Controller without clearing the LPC_PININT-&amp;gt;IST Interrupt-Flag.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;With best regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;TheBird &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;#include &amp;lt;string.h&amp;gt;
#include "board.h"

/*****************************************************************************
 * Private types/enumerations/variables
 ****************************************************************************/
#ifdef __ICCARM__
#define ALIGNSTR(x) # x
#define ALIGN(x) _Pragma(ALIGNSTR(data_alignment = ## x))
#else
#define ALIGN(x) __attribute__ ((aligned(x)))
#endif


/* DMA descriptors must be aligned to 16 bytes */
ALIGN(16) static DMA_CHDESC_T dmaTXDesc[8];

#define UART_TX_PIN 6
#define UART_RX_PIN 0

char DMASEN = 'X';

/*****************************************************************************
 * Public types/enumerations/variables
 ****************************************************************************/

/*****************************************************************************
 * Private functions
 ****************************************************************************/

/* Clear an error on a DMA channel */
static void dmaClearChannel(DMA_CHID_T ch) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_DisableChannel(LPC_DMA, ch);
&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((Chip_DMA_GetBusyChannels(LPC_DMA) &amp;amp; (1 &amp;lt;&amp;lt; ch)) != 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_AbortChannel(LPC_DMA, ch);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_ClearErrorIntChannel(LPC_DMA, ch);
}

/*****************************************************************************
 * Public functions
 ****************************************************************************/

/**
 * @brief&amp;nbsp;&amp;nbsp; DMA Interrupt Handler
 * @return&amp;nbsp; None
 */
void DMA_IRQHandler(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t errors, pending;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Get DMA error and interrupt channels */
&amp;nbsp;&amp;nbsp;&amp;nbsp; errors = Chip_DMA_GetErrorIntChannels(LPC_DMA);
&amp;nbsp;&amp;nbsp;&amp;nbsp; pending = Chip_DMA_GetActiveIntAChannels(LPC_DMA);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check DMA interrupts of UART 0 TX channel */
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((errors | pending) &amp;amp; (1 &amp;lt;&amp;lt; DMAREQ_USART0_TX)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear DMA interrupt for the channel */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_ClearActiveIntAChannel(LPC_DMA, DMAREQ_USART0_TX);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Handle errors if needed */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (errors &amp;amp; (1 &amp;lt;&amp;lt; DMAREQ_USART0_TX)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* DMA error, channel needs to be reset */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaClearChannel(DMAREQ_USART0_TX);
&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; Board_LED_Toggle(2); //Visualize DMA-Interrupt
}

///**
// * @brief Handle interrupt from PININT0
// * @return&amp;nbsp;&amp;nbsp;&amp;nbsp; Nothing
// */
void PIN_INT0_IRQHandler(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_PININT_ClearIntStatus(LPC_PININT, PININTCH0); //Clear Pin-Interrupt-Status-Flag
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_LED_Toggle(0);&amp;nbsp;&amp;nbsp;&amp;nbsp; //Visualize PinInterrupt
}

/**
 * @brief&amp;nbsp;&amp;nbsp; Main UART/DMA program body
 * @return&amp;nbsp; Does not exit
 */int main(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; int i = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; char tmp[64];
&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemCoreClockUpdate();
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_Init();

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "%c[2J", 27);&amp;nbsp;&amp;nbsp; //Clear Screen
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "Board Initialized\r\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; //========= Initialize UART for DMA ==============================

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM); //Enable the clock to the Switch Matrix

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Disable the fixed pins assigned to 0 and 6 */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_DisableFixedPin(SWM_FIXED_ACMP_I1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_DisableFixedPin(SWM_FIXED_ADC1);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Connect the U0_TXD_O and U0_RXD_I signals to port pins (see define above) */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_MovablePinAssign(SWM_U0_TXD_O, UART_TX_PIN);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_MovablePinAssign(SWM_U0_RXD_I, UART_RX_PIN);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Disable the clock to the Switch Matrix to save power */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Configure UART-Module */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_Init(LPC_USART0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_ConfigData(LPC_USART0, UART_CFG_DATALEN_8 | UART_CFG_PARITY_NONE | UART_CFG_STOPLEN_1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_SetBaud(LPC_USART0, 115200);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_Enable(LPC_USART0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART_TXEnable(LPC_USART0);

&amp;nbsp;&amp;nbsp;&amp;nbsp; //========= GPIO-Interrupt for Wake-Up-Switch (PIO0_4) =====================
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SWM_DisableFixedPin(SWM_FIXED_ADC11);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, 0, 4); //!&amp;lt; Configure GPIO pin as input pin
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_SetPinInterrupt(0, 4); //!&amp;lt; Configure interrupt channel 0 for the GPIO pin in SysCon block
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Configure channel 1 interrupt as edge sensitive and falling edge interrupt */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_PININT_SetPinModeEdge(LPC_PININT, PININTCH0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_PININT_EnableIntLow(LPC_PININT, PININTCH0);

&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(PIN_INT0_IRQn);&amp;nbsp; //Enable PIN-Interrupt

&amp;nbsp;&amp;nbsp;&amp;nbsp; //========= Configure DMA Support for UART-TX ==============================
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_Init(LPC_DMA);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Map PINT0 to DMA_USART0_TX */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMATRIGMUX_SetInputTrig(LPC_DMATRIGMUX, DMAREQ_USART0_TX, DMATRIG_PINT0);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enable DMA controller and use driver provided DMA table for current descriptors */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_Enable(LPC_DMA);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Create a descriptor for the data */
&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaTXDesc[0].source = DMA_ADDR(&amp;amp;DMASEN);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write DMASEN
&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaTXDesc[0].dest = DMA_ADDR(&amp;amp;LPC_USART0-&amp;gt;TXDATA);&amp;nbsp; // To USART0_TX
&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaTXDesc[0].xfercfg = DMA_XFERCFG_CFGVALID | DMA_XFERCFG_RELOAD | DMA_XFERCFG_CLRTRIG | DMA_XFERCFG_WIDTH_8 | DMA_XFERCFG_SRCINC_0 | DMA_XFERCFG_DSTINC_0 | DMA_XFERCFG_XFERCOUNT(1); // Just 1 value
&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaTXDesc[0].next = DMA_ADDR(&amp;amp;(dmaTXDesc[0]));

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Setup transfer descriptor and validate it */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetupTranChannel(LPC_DMA, DMAREQ_USART0_TX, &amp;amp;dmaTXDesc[0]);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Setup data transfer */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetupChannelTransfer(LPC_DMA, DMAREQ_USART0_TX, dmaTXDesc[0].xfercfg);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Setup DMA UART TX support*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_EnableChannel(LPC_DMA, DMAREQ_USART0_TX);&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable Channel 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_EnableIntChannel(LPC_DMA, DMAREQ_USART0_TX); //Enable DMA Interrupt for Channel 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetupChannelConfig(LPC_DMA, DMAREQ_USART0_TX, DMA_CFG_HWTRIGEN | DMA_CFG_TRIGPOL_HIGH | DMA_CFG_TRIGTYPE_EDGE | DMA_CFG_TRIGBURST_SNGL | DMA_CFG_CHPRIORITY(2));

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_DMA_SetChannelValid(LPC_DMA, DMAREQ_USART0_TX);

&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(DMA_IRQn);&amp;nbsp;&amp;nbsp; //Enable DMA-Interrupt

&amp;nbsp;&amp;nbsp;&amp;nbsp; //========= Print Debug-Informations ==============================
&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "Application started\r\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "System Clock: %uMHz\r\n", (uint) (SystemCoreClock / 1000000));
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "Main Clock: %uMHz\r\n", (uint) (Chip_Clock_GetMainClockRate() / 1000000));
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);

&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tmp, "Device ID: 0x%04X\r\n", (uint) Chip_SYSCTL_GetDeviceID());
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_UARTPutSTR(tmp);


&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Blink a LED to visualise th
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i++ &amp;gt; 1000000) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_LED_Toggle(1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 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; //Chip_PININT_ClearIntStatus(LPC_PININT, PININTCH0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("NOP");

&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:11:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Pin-Interrupt-triggered-DMA-needs-Flag-Reset/m-p/571632#M18432</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:11:09Z</dc:date>
    </item>
  </channel>
</rss>

