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.

[参考译文] CCS/MSP430F2012:MSP430F2012 ADC10CTL1寄存器读取

Guru**** 1863580 points
Other Parts Discussed in Thread: MSP430F2012, MSP-TS430PW14
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/884685/ccs-msp430f2012-msp430f2012-adc10ctl1-register-readout

器件型号:MSP430F2012
主题中讨论的其他器件: MSP-TS430PW14

工具/软件:Code Composer Studio

您好!

我在一个新项目(电机驱动器)中使用了使用 MSP430F2012的非常旧的设计

对 ADC10进行编程时、我发现使用 CCS 中的拆分函数进行检查时、正确的值会写入 ADC10CTL1寄存器、但不会读回相同的值。

ADC10CTL1寄存器只显示值0x0002、不管我对它进行何种编程。  

根据 MSP430F2xx 用户指南、这是一个 r/w 寄存器、我希望读回我写的内容(正如 ADC10CTL0所做的那样)。

我在 定时器 A ISR 中的 ADC10SC 位触发的4个通道序列中使用 ADC10。  Timer-A ISR 运行正常。

用于设置 ADC10SC 位的编程为:ADC10CTL0 |= ADC10SC;

ADC10 ISR 是第一次访问、之后不再访问、因此 ADC 似乎不再生成中断。

初始化后不修改中断标志

ADC10寄存器的编程如下

   ADC10CTL0 =(SREF_0 + ADC10SHT_1 + MSC + ADC10ON + ADC10IE + ENC);
   ADC10CTL1 =(INCH_3 + ADC10DIV_1 + ADC10SSEL_3 + CONSEQ_1);
   ADC10AE0  = 0x0F;   
   ADC10DTC0 = 0;
   ADC10DTC1 = 4;
   ADC10SA       =(无符号 int)温度值;  

_EINT();                                                                       //启用全局中断

有什么想法会导致 ADC10CTL1的这种奇怪行为?

PS:我在 EVM 上运行了代码:MSP-TS430PW14

        
  

  

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

    好的、

    这是一个典型的“阅读您的!@#$手册”时刻

    大多数 ADC10CTLn 位只能在 ENC 位被清零时被修改。

    因此、正确的编程顺序为:

       ADC10CTL0 =(SREF_0 + ADC10SHT_1 + MSC + ADC10ON + ADC10IE);
       ADC10CTL1 =(INCH_3 + ADC10DIV_1 + ADC10SSEL_3 + CONSEQ_1);
       ADC10CTL0 |= ENC;
       ADC10AE0 =(HV_IN + LV_IN + POT_IN + IM);
       ADC10DTC0 = 0;
       ADC10DTC1 = 4;
       ADC10SA  =(无符号 int)温度值;