工具/软件:Code Composer Studio
尊敬的:
我在使用 ADC 从3轴加速计 adxl335读取数据时遇到问题。 我只能同时正确读取 x-y 或 x-y。 我无法同时正确读取 x-y-z。 是否有人会检查我的 ADC 配置是否正确? 谢谢!
void adc_setup (void){ int i =0; P6DIR &=~(BIT3 | BIT4 | BIT4); //将 P6.3、P6.4和 P6.7配置为输入引脚 P6SEL |= BIT3 | BIT4 | BIT7; //将 P6.3、P6.4和 P6.7配置为模拟引脚 /****** ADCCore 配置***** * /*复位 REFMSTR 以使能 ADC12对基准电压的控制*/ ADC12CTL0 &=~ENC; /* *初始化控制寄存器 ADC12CTL0 * ADC12ON = 1 =>打开 ADC12 * STH0x = 9 =>采样保持时间需要384个时钟周期 * MSC = 1 => ADC12多采样转换 * ADC12CTL0 = ADC12ON | SHT0_9 | MSC; //配置 ADC 转换器 /* *初始化控制寄存器 ADC12CTL1 * SHP = 1 =>采样/保持脉冲模式 * CONSEQx = 1 =>转换序列模式:通道序列 * ADC12CTL1 = SHP | CONSEQ_1; //使用采样计时器、单序列 /****** 通道配置***** * ADC12MCTL0 = INCH_3; // ADC A3引脚-粘上 X 轴 ADC12MCTL1 = INCH_4; // ADC A4引脚-粘着 Y 轴 ADC12MCTL2 = INCH_7 | EOS; // ADC A7引脚-粘接 Z 轴 // EOS - ADC12MCTL2上的序列结束 ADC12IE |= 0x04; //在 BIT2 (EOS ADC 通道)上启用 ADC12IFG.1 对于(I = 0;I < 0x3600;I++); //基准启动延迟 ADC12CTL0 |= ENC; //启用转换 } void main (void){ WDTCTL = WDTPW +WDTHOLD; //停止 WDT TimerA_setup(); //设置发送 ADC 数据的计时器 adc_setup(); //设置 ADC UART_Utilize(); //为 RS-232设置 UART _EINT(); while (1){ _bis_SR_register (LPM0_Bits + GIE);//输入 LPM0 } } #pragma vector = ADC12_vector __interrupt void ADC12ISR (void){ ADCXval = ADC12MEM0; //移动结果,IFG 被清除 ADCYval = ADC12MEM1; ADCZval = ADC12MEM2; _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0 } #pragma vector = TIMERRA0_VECTOR __INTERRUPT void timerA_ISR (){ ADC12CTL0 |= ADC12SC; //每0.25秒开始转换 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0 }
最棒的
Tony