This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/msp430fr5969: DMA Destination Address incrementation issue

Part Number: MSP430FR5969
Other Parts Discussed in Thread: MSP430FR5969

Tool/software: Code Composer Studio

Hi,

I am using msp430fr5969 uC. I am trying to integrate DMA with ADC. Well, everything is OK despite the destination address incrementation. It does not change each DMA interrupt.

Here is my code:

	uint16_t res_data[4];

	...	
	
	void DMA0_INIT(){
		DMACTL0 = DMA0TSEL__ADC12IFG; //DMA Trigger Assignments:26==ADC12 end of conversion
		DMACTL4 = DMARMWDIS;
		DMA0CTL = DMADT_4 | DMASRCINCR_0 | DMADSTINCR_3 | DMAIE;  
		DMA0SZ = 1; // Block size
		__data16_write_addr((unsigned short) &DMA0SA,(unsigned short ) &ADC12MEM0);
		__data16_write_addr((unsigned short) &DMA0DA,(unsigned short) &res_data); // Destination single address
		DMA0CTL |= DMAEN;
	}

    void Measure_3V3_Init(void)
    {
        // Initialize the shared reference module

          while(REFCTL0 & REFGENBUSY);              // If ref generator busy, WAIT
          REFCTL0 &= ~REFVSEL_0;             // Enable internal 1.2V reference
          REFCTL0 |= REFVSEL_2 + REFON;             // Enable internal 1.2V reference
          // Initialize ADC12_A
          ADC12CTL0 &= ~ADC12ENC;                   // Disable ADC12
          ADC12CTL0 = ADC12SHT0_8 + ADC12ON;        // Set sample time
          ADC12CTL1 = ADC12SHP | ADC12CONSEQ_0;                     // Enable sample timer
          ADC12CTL3 = ADC12BATMAP;                   // Enable internal temperature sensor
          ADC12MCTL0 = ADC12VRSEL_1 + ADC12INCH_31; // ADC input ch A30 => temp sense
          while(!(REFCTL0 & REFGENRDY));            // Wait for reference generator to settle
          ADC12CTL0 |= ADC12ENC;
    }
	
	void Measure_Trigger(void)
    {
        while(!(REFCTL0 & REFGENRDY));
        ADC12CTL0 |= ADC12SC;        // Start sampling/conversion
        __bis_SR_register(GIE);      //   Just in case?
    }
	
	
	...
	
	
	while(1){
        Measure_3V3_Init();                // Internal 3v3 voltage ADC REG settings
        Measure_Trigger();            // Start measure using Interrupts
        __delay_cycles(300000);
    }

DMA ISR contains only nop operation to check DMA0DA. Do you have any suggestions? Did I miss something?

Thanks in advice! :)

**Attention** This is a public forum