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.

[参考译文] MSP430F5638:ADC12寄存器单个内部温度读取问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1029479/msp430f5638-adc12-register-questions-for-single-internal-temperature-read

器件型号:MSP430F5638

在定制 SBC 上使用 CCS v10.4和 msp430f5638。 我已经创建了两 个 ADC12读取函数、它们源自两个 TI 示例。

RUN_430_ADC_T ()、它源自 MSP430F55xx_ADC_10.c、并读取内部温度传感器的单个通道、ISR 案例6。

RUN_430_ADC_DAV ()、 它源自 MSP430F55xx_ADC_09.c、并读取包含内部电压的单个3个通道序列、ISR 案例32。

两个示例以及我的两个派生函数在单独运行时都可以正常运行。 按顺序运行时,第二个调用不会正确运行,而不管首先运行哪个调用。

此帖子用于 run_430_ADC_T ()(单次读取温度)和为这两个函数提供服务的 ISR。 我需要更好地了解设置和使用寄存器来确定问题。

问题

1.//ADC12CTL0  &=~ADC12ON; //初始时关闭 ADC 以清除 ADC

这是关闭和清除 ADC 设置的有效方法吗?还是仅打开/关闭、对寄存器设置没有影响?

 ADC12CTL0 = ADC12SHT0_8 + ADC12REFON + ADC12ON;//内部基准= 1.5V、基准打开、ADC 打开

ADC12SHT0_8是采样保持选择位8、与 ref = 1.5V 无关? 评论错误吗?

3.(8*0x100u)= 0x800为什么这个12位宽而不是16位宽? 是否有隐含的0000b 前缀?

ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_10; // ADC i/p ch A10 =温度感测 I/p

ADC12SREF_1选择 ADC 基准1、即(1*0x10u)= 0x10、VREF+、AVSS、这是正确的吗?

 ADC12IE = 0x001;

为什么这是12位而不是16位? 是否有隐含的0000b 前缀?

6.在针对矢量6单次转换的 ISR 中、您将 ADC12MEM0用于内部温度、但是在针对矢量32的4个通道序列的 TI 示例中、您将 ADC12MEM10用于内部温度

两者上是否有温度传感器? 还是两者都应该是 ADC12MEM10?

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

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /***************************************************************************************************************
    *
    * run_430_ADC_T() for internal Temperature
    * derived from TI MSP430F55xx_adc_10.c example, reads one channel one time
    *
    **************************************************************************************************************/
    // setup and run in single temperature sensor mode
    // runs continuously for now, ultimately only need 1 value, not averaging 10 values
    void run_430_ADC_T(void)
    {
    // local strings to hold LCD data
    unsigned char string1[LCD_ROW_WIDTH];
    // add breakpoint to stop here on debug
    __no_operation();
    WDTCTL = WDTPW + WDTHOLD; // Stop WDT
    /***************************************************************************************************************
    * setup ADC12 for Temperature
    **************************************************************************************************************/
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    手册中有详细说明。

    1) 1) ADC12ON 仅打开和关闭 ADC。 当 ADC 打开时、某些配置位无法置位。

    2) 2)使基准电压为2.5V 的位未设置、因此...

    3) 3)我在您的代码中找不到它。

    4) 4)正确。

    5) 5)我不理解问题。 除非您想知道为什么将该常量写入0x001而不是0x0001。 这并不重要、因为它们完全相同。

    6) 6) ADCMEM10上没有传感器。 这是为 ADCMCTL10控制的转换存储结果的地方。 输入将是那里选择的任何值。

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

    DS/UG 有时会有很差的描述、这些描述深得难以找到。 尽管总的来说、编写的文档非常好。

    3是来自 msp430f5638.h 头文件、与#5是相同的问题。 我不同意0x000与0x0000相同。 在第一种情况下、上半字节未定义。 现在、如果 TI 的内部代码处理这些未定义的上部半字节(在常量中)、那么这是可以的。 这是什么情况发生了、这些细节在哪里详细说明了?

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

    0是整数大小的整数常量。 16位。 0L 是一个长整数常量。 这是非常基本的 C 语言、与 MSP430无关。