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! :)