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.

[参考译文] MSP430F5342:TI 的 MSP430F534x ADC 示例

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/740167/msp430f5342-msp430f534x-adc-examples-by-ti

器件型号:MSP430F5342

我将会查看 ADC 的纹波代码。 (例如 MSP430F534x_ADC_07.c)。 该代码使用模拟输入 A0 (称为 P6.0)、但 MSP430F534X uC 似乎只有模拟输入 A1至 A5 (即 P6.1至 P6.5)+ A8 (P5.0)和 A9 (P5.1)。 此外、当我尝试使用 IAR 调试器进行调试时、我看到只有 ADC12MEM0寄存器值发生了更改、但使用了垃圾值、而其他 ADC12MEM 寄存器为0x0000。 我已使用 P6SEL |= 0x02选择模拟输入 A1 (P6.1)。 但 ADC12MEM0值仍会发生更改(仍然是垃圾值)、 ADC12MEM1为0x00000。 这样做的原因可能是什么?

请帮帮我。  提前感谢。

我将原始示例代码放在下面。

#include

#define Num_of 结果8.

volatile unsigned int results[num_for_results];
//在这方面需要是全局的
//示例。 否则、会显示
//编译器删除它是因为它
//不用于任何操作。

int main (空)

WDTCTL = WDTPW+WDTHOLD;//停止看门狗计时器
P6SEL |= 0x01;//启用 A/D 通道 A0
ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC;//打开 ADC12、设置采样时间
//设置多个采样转换
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2;//使用采样计时器、设置模式
ADC12IE = 0x01;//启用 ADC12IFG.0
ADC12CTL0 |= ADC12ENC;//启用转换
ADC12CTL0 |= ADC12SC;//开始转换

_bis_SR_register (LPM4_bits + GIE);//输入 LPM4、启用中断
__no_operation();//用于调试器


#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=ADC12_vector
_interrupt void ADC12ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (ADC12_vector)) ADC12ISR (void)
其他
错误编译器不受支持!
#endif

静态无符号字符索引= 0;

switch (__evo_in_range (ADC12IV、34))

情况0:中断;//向量0:无中断
情况2:中断;//矢量2:ADC 溢出
情况4:中断;//矢量4:ADC 时序溢出
情况6://向量6:ADC12IFG0
Results[索引]= ADC12MEM0;//移动结果
index++;//递增结果索引,模;在此处设置 Breakpoint1

如果(索引==8)

索引= 0;

情况8:中断;//向量8:ADC12IFG1
情况10:中断;//向量10:ADC12IFG2
情况12:中断;//向量12:ADC12IFG3
案例14:中断;//矢量14:ADC12IFG4
情况16:中断;//向量16:ADC12IFG5
情况18:中断;//向量18:ADC12IFG6
情况20:中断;//向量20:ADC12IFG7
情况22:中断;//向量22:ADC12IFG8
情况24:中断;//向量24:ADC12IFG9
情况26:中断;//向量26:ADC12IFG10
情况28:中断;//向量28:ADC12IFG11
情况30:中断;//向量30:ADC12IFG12
情况32:中断;//向量32:ADC12IFG13
案例34:中断;//矢量34:ADC12IFG14
默认值:break;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    作者似乎省略了 ADC12MCTL0设置(我想)、因为它是=0。 尝试添加:

    >ADC12MCTL0=ADC12EOS|ADC12SREF_0|ADC12INCH_1;// EOS (面向未来)、ref=Vcc、A1

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

    您能不能给 EOS 的需求放些光。 ?

    如果我们省略 EOS 位会发生什么情况。 ?

    提前感谢!!!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 CONSEQ=2 (或=0)、则没关系、您可以根据需要将其保留。 如果您稍后决定使用 CONSEQ=1或=3 (您提到了 ADC12MEM1)、这将很重要。 这就是为什么它是"(面向未来)"。

    该示例的作者留下了"ADC12MCTL0=ADC12SREF_0|ADC12INCH_0"、因为它无关紧要、但后来确实如此。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢帮助。