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.

[参考译文] EVM430-FR6047:USS_waitForAppTimerElapse (&gUssSWConfig、USS_LOW_POWER_MODE_OPTION_LOW_POWER_MODE_3)

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1357834/evm430-fr6047-uss_waitforapptimerelapse-gussswconfig-uss_low_power_mode_option_low_power_mode_3

器件型号:EVM430-FR6047

您好!

请指出我可以更改计时器值的位置。

此外、详细说明 这个函数是如何工作的。 从该文档中、我的理解是、 如果计时器未完成其时间设置、那么该函数返回 USS_MESING_CODE_MEASURE_PERIOD_OVERFLOW、如果返回 USS_MESING_CODE_NO_ERROR。 您能否确认这一点。

谢谢。   

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

    您好、以法莲、

    正确的是、 如果出现溢出、则返回 USS_message_code_measurement_period_overflow、 如果出现溢出、则返回 USS_message_code_no_error。  

    建议您查看 ussSwLibMeasurement.c 中函数的定义、同时 CTRL +点击相应函数以查看其他基础函数。 简而言之、该函数会检查计时器是否已溢出、并将返回设置为指示已溢出、或者继续等待计时器完成。 在等待计时器完成时、它会进入低功耗模式。 一旦计时器溢出、它就返回无错误消息。

    计时器的周期由为算法给定的参数决定、特别是 UPS0到 UPS1间隙。 您在此处提到的计时器和函数只是为了确保正确实现 UPS0到 UPS1间隙、因此、如果您在达到 UPS0到 UPS1间隙之前完成从开始采集到传输结果的整个处理、 器件将在 LPM 中等待、然后再开始下一次捕获。

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

    尊敬的 Dylan:

    我们非常感谢您对模板软件中的以下代码的看法。  

        while(1){// main measuring loop
            code = USS_startLowPowerUltrasonicCapture(&gUssSWConfig);
            checkCode(code, USS_message_code_no_error);
    
            code = USS_runAlgorithms(&gUssSWConfig,&algResults);
            checkCode(code, USS_message_code_valid_results);
    
    #if 0 //APPLICATION_ENABLE_UART_DEBUG
            uartTxUSSResult(APPLICATION_UART_ABSTOF_UPS_DELIM,&algResults.totalTOF_UPS);
            uartTxUSSResult(APPLICATION_UART_ABSTOF_DNS_DELIM,&algResults.totalTOF_DNS);
            uartTxUSSResult(APPLICATION_UART_DTOF_DELIM,&algResults.deltaTOF);
            uartTxUSSResult(APPLICATION_UART_VFR_DELIM,&algResults.volumeFlowRate);
    
    #endif
            // Wait for timer to elapse
            USS_waitForAppTimerElapse(&gUssSWConfig,USS_low_power_mode_option_low_power_mode_3);
        }

    不过、最后会调用计时器例程、而不进行任何错误检查。 将代码更改为如下所示会有所帮助:

    while (USS_waitForAppTimerElapse (&gUssSWConfig、USS_low_power_mode_option_low_power_mode_3)!= USS_message_code_no_error);

    谢谢。

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

    虽然我确实认为操作期间的错误检查是好的,但我要说  USS_waitForAppTimerElapse()函数已经执行了一个 while 循环来检查计时器何时结束。 您提到的 while 循环是冗余的、仅在定时器已溢出时才起作用使程序保持在 while 循环中。  

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

    尊敬的 Dylan:

    我将保持原样。 非常感谢您的反馈。

    以法莲

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

    尊敬的 Dylan:

    我可以在读取后延迟更多的时间。 我 是否应该将 USS_SYS_measurement_period 放大至2秒、现在放大1秒? 或者我应该在 LPM3中调用一个延迟例程吗? 如果可以、您能否在 LPM3中向我展示一个延迟示例?

    谢谢。

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

    您好、以法莲、

    我建议增加 UPS0到 UPS1的间隙、这与前面提到的定义  USS_SYS_measurement_period 相对应。 因此将其增加到2秒应该会导致超声波捕获序列开始之间的间隔为2秒。