msp430G2553的AD10的DTC问题

2019-07-15 15:19发布

题目要求要对外部输入正弦波进行正负幅值采样,所以我使用了DTC两个通道,下面是我的代码:

[C] 纯文本查看 复制代码
void ADC_Init(void){/*失能ADC才能改变相关寄存器的值*/ADC10CTL0 &= ~ENC;/*16个ADC Clock , SHI信号自动执行 , 基准电压生成器打开(2.5V),使能中断*/ADC10CTL0 = ADC10SHT_2 + MSC + REFON + ADC10ON + ADC10IE+REF2_5V;ADC10CTL1 = INCH_5 + SHS_0 + ADC10SSEL_2 + CONSEQ_3 + ADC10DIV0;ADC10AE0 |= BIT4 + BIT5 ;//使能模拟输入脚A04,A05ADC10AE0|=0x30;//定义了每个块中的传输量为2个。转换结果是16位的,也就是传输2个16位数据就是一个块就会把中断标志位置位,触发中断。//因为是两个通道的,所以每个通道数据传输一次ADC10DTC1 = 0x04;__delay_cycles(30000);ADC10CTL0&=~ADC10IFG;//清除中断标志位ADC10CTL0 |= ENC;//ADC使能}
[C] 纯文本查看 复制代码
#pragma vector =ADC10_VECTOR__interrupt void ADC10_ISR(void){ADC10CTL0&=~ADC10IFG;/*清除中断*/_disable_interrupts();printf("1=%d  ",Result[0]);printf("2=%d  ",Result[1]);printf("3=%d  ",Result[2]);printf("4=%d   ",Result[3]);Channel_A=0;Channel_B=0;P1OUT^=BIT0;_enable_interrupts();}
[C] 纯文本查看 复制代码
ClockInit();USART_Init();ADC_Init();P1DIR|=BIT0; while(1) { ADC10CTL0 &= ~ENC; ADC10SA = (int)Result;// 设置DTC的开始地址while (ADC10CTL1 & BUSY);//等待忙,ADC10 忙。 该位标志着一个有效的采样和转换操作 ADC10CTL0 |= ENC + ADC10SC;//使能转换并且开始转换 _delay_cycles(1000000); }
现象是我把P1.4和P1.5直接接地,对应2.5V的参考电压来说应该是输出0的但是这是现象:




然后我一个接地一个结VCC是这个现象:





我的问题是:第一我试了连续转换和单次通道转换(不是单通道),都是这个值。
                    我如果直接每次采样直接输出及定义DTC块大小为0x02的时候又是正确的
                    所以想请教下搞过DTC的大神
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。