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.

[参考译文] MSP430FR2311:ADC 通道接口序列

Guru**** 2562120 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/602522/msp430fr2311-adc-sequence-of-channel-interface

器件型号:MSP430FR2311

我有 P1.2至 P1.0的接口3模拟输入、而我已将 ADC 配置为通道序列模式。

实际上、问题是我的 ADC 中断发生4次、而不是3次。

我设置计数器= 3。

 

#include
INT ADC = 0;
浮点 X_Axis、Y_Axis、Z_Axis;
int ADC_Result [3];
//unsigned int adc_result;
//void read_X_Axis_Data ();
//void read_Y_Axis_Data ();
//void read_Z_Axis_Data ();

int i = 3;
int main (空)

WDTCTL = WDTPW | WDTHOLD;//停止 WDT

//配置 GPIO
// P1DIR |= BIT1;//将 P1.0/LED 设置为输出方向

//配置 ADC A5-A4-A3引脚
P1SEL0 |= BIT0 | BIT1 | BIT2;//BIT2 = X 轴、BIT4 = Y 轴、BIT3 = Z 轴
P1SEL1 |= BIT0 | BIT1 | BIT2;

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

//配置 ADC10
ADCCTL0 |= ADCSHT_5 | ADCON;// ADCON、S&H=16 ADC CLKS
ADCCTL1 |= ADCSHP | ADCCONSEQ_1;
ADCCTL2 |= ADCRES_1;// 10位转换结果
ADCIE |= ADCIE0;//启用 ADC 转换完成中断
ADCMCTL0 |= ADCINCH_2 | ADCSREF_0;// A1 ADC 输入选择;Vref=1.5V

//配置引用
// PMMCTL0_H = PMMPW_H;//解锁 PMM 寄存器
//PMMCTL2 |= INTREFEN;//启用内部基准
_DELAY_CYCLES (40);//基准趋稳延迟
// LPM0、ADC_ISR 将强制退出

while (1)

_DELAY_CYCLES (1000);
//while (ADCCTL1和 ADCBUSY);//等待 ADC 内核处于活动状态
ADCCTL0 |= ADCENC | ADCSC;
_bis_SR_register (GIE);

if (i ==0)


//Z_Axis =(0.003222 * ADC_Result [2]);
// Y_Axis =(0.003222 * ADC_Result [1]);
// X_Axis =(0.003222 * ADC_Result [0]);

// Y_Axis =((float)(0.003222 * ADC_Result [1]));
//Z_Axis =((float)(0.003222 * ADC_Result [2]));
ADC = 0;
I = 3;



// ADC 中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=ADC_vector
_interrupt void ADC_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (ADC_vector))) ADC_ISR (void)
其他
错误编译器不受支持!
#endif

switch (__evo_in_range (ADCIV、ADCIV_ADCIFG))

案例 ADCIV_NONE:
中断;
ADCIV_ADCOVIFG 案例:
中断;
案例 ADCIV_ADCTOVIFG:
中断;
ADCIV_ADCHIIFG 案例:
中断;
ADCIV_ADCLOIFG 案例:
中断;
ADCIV_ADCINIFG 案例:
中断;
ADCIV_ADCIFG 案例:
一----;
ADC_RESULSE[i]= ADCMEM0;
//ADC_Result = ADCMEM0;
ADC++;
//if (i =0)
//{
// i = 3;
//}
中断;
默认:中断;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在评估变量 l 之前启用 ADC 并开始转换、并且不使用任何条件语句、因此即使 l 已经等于0、也会处理第四个 ADC 序列。 我建议您进一步调试应用并重新评估 msp430fr231x_ADC10_10.c 示例。

    此致、
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢
    它在工作。

    此致、
    开尔文