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.

MSP430F5529使用DMA传输ADC双通道重复转换结果出错

我在尝试利用DMA传输ADC的双通道连续转换结果到一个二维数组中,ADC的配置如下:

REFCTL0 &= ~REFMSTR;      // 复位REFMSTR控制位以控制ADC12参考电压控制寄存器
ADC12CTL0 = ADC12SHT0_3 + ADC12MSC + ADC12ON +        // 采样周期为32个ADC时钟,自动转换
                         ADC12REFON + ADC12REF2_5V;                        // 打开参考电压产生器,设置参考电压2.5V
ADC12CTL1 = ADC12CSTARTADD_0 + ADC12SHP +                 // 首地址为ADC12MEM0 ,软件启动
                        ADC12SSEL_3 + ADC12DIV_1 + ADC12CONSEQ_3; // ADC时钟频率为SMCLK 2分频,序列通道重复转换
ADC12CTL2 = ADC12RES_2;         // ADC 转换分辨率是12位

ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_0;                                
ADC12MCTL1 = ADC12SREF_1 + ADC12INCH_1 + ADC12EOS;         

DMA的配置如下:

DMACTL0 |= DMA0TSEL_24;             // ADC作为DMA触发源
DMACTL4 |= DMARMWDIS;               // DMA传输期间禁止CPU读写

DMA0CTL &= ~DMAIFG;                   // 禁止DMA中断

DMA0CTL |= DMADT_5 + DMADSTINCR_3 + DMASRCINCR_0 + // 重复快传输,目标地址递增,源地址不变
                      DMAEN;                       // 使能DMA,基本传输单位为字

DMA0SZ |= 0x02;              // 传输大小为2字
// 设置源地址
 __data16_write_addr((unsigned short) &DMA0SA, (unsigned long) &ADC12MEM0);
// 设置目标地址
// __data16_write_addr((unsigned short) &DMA0DA, (unsigned long) Act_Ref_Volts);       //  Act_Ref_Volts[1000][2]

调试时,观察 Act_Ref_Volts[1000][2]这个数组,Act_Ref_Volts[i]的值都是其地址,展开Act_Ref_Volts[i][j],报错“unknown Error: Could not read 0x02402: Execution state prevented access”。希望熟悉ADC和DMA的朋友或TI员工能够帮我解决这个问题,不胜感激!

ps:DMA设置源地址和目标地址时,我试过直接对DMA0SA寄存器赋值的方式,同样不起作用