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.

[参考译文] RTOS/MSP432P401R:TI-RTOS内部温度传感器示例

Guru**** 2550550 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/579797/rtos-msp432p401r-ti-rtos-internal-temperature-sensor-example

部件号:MSP432P401R

工具/软件:TI-RTOS

是否有使用TI-RTOS读取MSP432上内部温度传感器的示例?

我看到了NO-RTOS 'adc14_single,channel_temperature_sensor'的例子,但不知道如何转换所有这些单独的设置命令,所以我只需要用'adc_converbate()'进行一个简单的调用。

谢谢。

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

    您好,

     目前我们没有TI RTOS示例。

    因此,您必须执行如下操作:

    /***********************************************************
    函数:adcInit
    */
    static void adcInit (void)
    {
    Hwip_Params adcHwiParams;
    
    Hwip_Params_init(&adcHwiParams);
    adcHwiParams.arg =0;
    adcHwiParams.priority =~0;
    adcHwiParams.name ="ADC14";
    adcHwiHandle = HwiP_CREATE (40,&Hwi_ADC,&adcHwiParams);
    
    /*在温度传感器已布设的情况下初始化ADC (MCLK/1/1)*/
    ADC14_enableModule();
    ADC14_INITModule (ADC_CLOCKSOURCE_MCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,
    ADC_TEMPSENSEMAP);
    
    /*为GPIO 4.2 (A11)配置模拟输入*/
    GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P4,
    GPIO_PIN2,GPIO第三模块功能);
    
    /*配置ADC内存(ADC_MEM0 A22 (温度传感器)和
    * ADC_MEM1 A11在重复模式下)。
    */
    ADC14_configureMultiSequenceMode (ADC_MEM0,ADC_MEM1,FALSE);
    ADC14_configureConversionMemory (ADC_MEM0,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
    ADC_INPUT_A22,FALSE);
    
    ADC14_configureConversionMemory (ADC_MEM1,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
    ADC_INPUT_A11,FALSE);
    
    /*为TBD */配置采样/保持时间
    ADC14_setSampleHoldTime (ADC_PULSE_WIDES_192,ADC_PULSE_WIDES_192);
    
    /*在自动迭代模式下启用采样计时器并中断*/
    ADC14_enableSampleTimer(ADC_AUTOMATICATE_IREDATE);
    
    /*在通道1上进行转换时启用中断(序列结束)
    *已完成并启用转换*/
    ADC14_enableInterrupt (ADC_INT1);
    
    /*将参考电压设置为2.5 并启用温度传感器*/
    ref_a_enableTempSensor();
    ref_a_setReferenceVoltage (REF_A_VREF2_5V);
    ref_a_enableReferenceVoltage();
    
    /*获取校准值*/
    cal30 = map_sysctl_getTempCalibrationConstant (sysctl_2_5V_REF,
    sysctl_30_degrees_C);
    cal85 = map_sysctl_getTempCalibrationConstant (sysctl_2_5V_REF,
    sysctl_85_degrees_C);
    CalDifference = cal85 - cal30;
    
    Hwip_enableInterrupt (40);
    ADC14_enableConversion();
    } 

    和HWI (我正在使用信号来发出任务信号):

    /***********************************************************
    函数:HWI_ADC
    */
    void HWI_ADC (UArg arg)
    {
    UINT64_t状态;
    
    状态= MAP_ADC14_getEnabledInterruptStatus();
    MAP_ADC14_clearInterruptFlag (状态);
    
    IF (状态和ADC_INT1)
    {
    温度读数=(ADC14_getResult (ADC_MEM0)- cal30)* 55);
    SemaphoreP_post(tempsem);
    }
    } 

    希望这能有所帮助。

     David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉,但这对我来说似乎太复杂了,我只是想看看温度。 我不想中断,我只想等待直到我得到读数,就像在TI-RTOS示例中一样(ADC_CONVERT (ADC,&adcValue0);)。 另外,我已经初始化了ADC模块(ADC_INIT();),并且正在读取ADC0和ADC1。 上述代码是否会重新初始化,是否可以?

    同样,我还想读取输入电压,例如温度也可以映射到ADC,对吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris,

    很抱歉给您带来不便,我们正在努力为使用TI-RTOS的ADC添加TI驱动程序,希望能尽快使其更容易。 只是想让您知道我们已经知道并正在进行此项工作:)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,David:

    我只是想知道为什么您不使用"任务"而使用HwiP。 由于我将在TI-RTOS上使用Task.h设计更多的调度任务,因此使用HwiP而不是ADC的任务并与其余部分结合是否可行?
    如果我想了解TI-RTOS驱动程序中提供的示例代码:adcsinglechannel_MSP_EXP432P401R_TI (使用任务),我可以编辑此代码以获取温度传感器读数吗? 我一直在尝试,但我无法找到驱动程序实现,无法进行更改以获取温度传感器数据。

    如果您能告诉我,我该怎么做,这将会大有帮助,因为我刚开始使用RTOS,我很难让其正常工作。