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.

[参考译文] MSP430FR5994:所有 ADC 通道的 ADC 结果相同

Guru**** 2394305 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/785717/msp430fr5994-adc-result-same-for-all-adc-channels

器件型号:MSP430FR5994

你(们)好

 我正在使用名为'HAL_readAdcRawValue'的函数来读取 ADC 计数值。 传递给函数的参数是项目中使用的 ADC 通道编号。 在函数内部、传递的通道编号使用开关情况转换为所需的 ADC 通道编号。

 我当前面临的问题是、将为所有通道复制第一个 ADC 读取值。 例如、如果对该函数的第一次调用针对通道1、则所有后续通道读取请求实际上仅读取通道1。

 该函数中是否有任何错误?

------------------------------

uint16_t HAL_readAdcRawValue (uint8_t 通道 Id_u8)

uint16_t adcRawValue_U16;
//配置内存缓冲区
//* ADC12模块的基地址
//*配置内存缓冲区0
//*将输入 A0映射到内存缓冲区0
//* Vref+= AVcc
//* Vref-= EXT 正极
//*内存缓冲区0不是序列的末尾
ADC12_B_configureMemoryParam configureMemoryParam ={0};
configureMemoryParam.memoryBufferControlIndex = ADC12_B_MEMORY_0;

//选择通道

switch (channelId_u8)

ADC_CHANNEL BATTERY_VOLT_MONITOR:// P1.0
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A0;
中断;
ADC_CHANNEL PRESSURE _VALUE MONITOR:// P1.1
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A1;
中断;
案例 ADC_CHANNEL PRESSURE _SUPPLY_VOLT_MONITOR:// P4.3
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A11;
中断;
ADC_CHANNEL ANALOG_IN_1:// P4.1
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A9;
中断;
ADC_CHANNEL ANALOG_IN_2:// P4.2
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A10;
中断;
案例 ADC_CHANGE_TC:// P3.1
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A13;
中断;
默认值:
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_TCMAP;//ADC12_B_INPUT_A0;
中断;

configureMemoryParam.refVoltageSourceSelect = ADC12_B_VREFPS_INTBUF_VREFNEG_VSS;//ADC12_B_VREFPS_EXTPOS_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOSEQUENCE;
configureMemoryParam.windowComparatorSelect = ADC12_B_Window_Comparator_disable;
configureMemoryParam.differialModeSelect = ADC12_B_different_mode_disable;
ADC12_B_configureMemory (ADC12_B_base、&configureMemoryParam);

//配置内部基准
while (Ref_A_isRefGenBusy (REF_A_base));//如果 ref 发生器忙、请等待
Ref_a_enableTempSensor (REF_A_base);
Ref_A_setReferenceVoltage (REF_A_base、REF_A_VREF2_0V);
Ref_a_enableReferenceVoltage (REF_A_base);

DELAY_MS (10);

//Enable/Start 第一个采样和转换周期
//* ADC12模块的基地址
//*开始转换到内存缓冲区0
//*使用单通道单次转换模式
ADC12_B_startConversion (ADC12_B_base、ADC12_B_MEMORY_0、ADC12_B_SINGLECHANNEL);

//轮询内存缓冲区0上的中断
while (!ADC12_B_getInterruptStatus (ADC12_B_base、0、ADC12_B_IFG0));

adcRawValue_U16 = ADC12_B_getResults (ADC12_B_B_B_B_BASE、ADC12_B_MEMORY_0);


return (adcRawValue_U16);

------------------------------

谢谢

-

此致

Soumyajit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此函数在 ENC 位仍然置位时退出、这会阻止在下一次调用时设置 MCTL0中的 INCH 字段。 [参考用户指南(SLAU367O)图 34-19 --注意蓝色颜色。]

    我建议您在退出之前清除 ENC、如下所示:
    > ADC12_B_DisableConversions (ADC12_BASE、ADC12_B_COMPLETECONVERSITION);// ENC=0 (下一次)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回答。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Bruce、这解决了我的问题。

    此致
    Soumyajit
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴听到这个消息。