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.

[参考译文] MSP430FR2532:CapTIvate CAPT_blockOnFlag ()

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1298538/msp430fr2532-captivate-capt_blockonflag

器件型号:MSP430FR2532

您好!

我想知道为什么在 CAPT_blockOnFlag()中, 我们必须停止正在运行的程序。  

//! 使用 CAPT_blockOnFlag 以安全地停止当前正在运行的程序。
//! 指定了 LPM 模式、直到布尔标志设置为 true 并且 CPU
//! 被唤醒。

//*****
// CAPT_ISR.c
//
//! CAPTIVATE&TM;外设中断服务例程。
//
//! ISR 用于设置应用程序可能使用的状态标志。
//! CAPTIVATE&TM;ISR 始终以 CPU 激活模式退出。
//
//! 版本:1.83.00.05
//! 2020年5月15日发布
//
//*****
//*****
//! \addtogroup CAPT_ISR
//! @
//*****

#包含
#包含
#include "CAPT_HAL.h"

//*****
//
//! svar g_bEndOfConversionFlag 是一个全局标志,用于向
//! 转换完成时的 CAPT_Touch 层。 这个标志必须被置位
//! 由应用的 CAPTIVATE&TM 提供;ISR 用于与触控层通信
//! 在转换完成时读取。
//
//! \var g_bDetectionFlag
//! 当发生检测中断时、该 bool 由 CapTIvate&TM;ISR 设置。
//
//! \var g_bConvTimerFlag
//! 该工具在需要更新(刷新)时由 CapTIvate&TM 计时器设置
//! 用户界面。
//
//! \var g_bConvCounterFlag
//! 当转换计数器中断时、该 bool 由 CapTIvate&TM;ISR 设置
//! 量。
//
//! \var g_bMaxCountErrorFlag
//! 当一个最大计数错误中断时、这个 bool 由 CapTIvate&TM;ISR 设置
//! 量。
//
//*****
volatile bool g_BEndOfConversionFlag;
Volatile bool g_bDetectionFlag;
volatile bool g_BConvTimerFlag;
Volatile bool g_BConvCounterFlag;
Volatile bool g_BMaxCountErrorFlag;

//*****
//
//! CAPT_ISR 是 CapTIvate 外设中断服务例程。
//
//*****
#pragma vector=CAPTIVATE_Vector
__interrupt void CAPT_ISR (void)
{
switch (__ even_in_range (CAPT_getInterruptVector ()、CAPT_IV_MAX_COUNT_ERROR)
{
//转换结束中断
案例 CAPT_IV_END_OF_CONVERTION:
G_bEndOfConversionFlag = true;
中断;

//检测中断
案例 CAPT_IV_DETECTION:
g_bDetectionFlag = true;
中断;

//计时器中断
用例 CAPT_IV_TIMER:
g_BConvTimerFlag = true;
中断;

//转换计数器中断
案例 CAPT_IV_CONVERSION_COUNTER:
g_BConvCounterFlag = true;
中断;

//最大计数错误中断
案例 CAPT_IV_MAX_COUNT_ERROR:
g_BMaxCountErrorFlag = true;
中断;

__ bic_SR_register_on_exit (LPM0_bits);

我们必须用 LPM0bit 退出的原因。

如果我删除此行 __BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);

代码挂起并且不管执行什么操作。

谢谢!

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

    你好,Ibrahim Sangi  

    代码 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS)函数是 EXIT LPM0。

    这些代码。 CPU 将保持 LPM0

    谢谢

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

    如果我删除此代码、将完全无法正常工作。  

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

    你好, Ibrahim Sangi  

    请勿删除此代码。 否则、 CPU 将保持开启 LPM0

    我建议您可以运行寄存器级示例代码 https://www.ti.com/tool/download/SLAC700 来检查 代码  _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS)的特性

    谢谢

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

    "请勿删除此代码。 否则、 CPU 将保持 LPM0"

    我不希望 CPU 处于 LPM0模式。 我希望当我们从 ISR 退出时 CPU 保持活动状态、

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

    你好, Ibrahim Sangi  

    是的、您可以修改代码以使 MCU 始终处于活动模式

    请检查寄存器级示例代码 https://www.ti.com/tool/download/SLAC700上的此基本示例代码"msp430fr243x_adc10_01.c"

    该部分代码允许 MCU 进入 LPM0模式并等待中断

           ADCCTL0 |= ADCENC | ADCSC;                          //采样和转换开始
           _ bis_SR_register (LPM0_bits | GIE);                 // LPM0、ADC_ISR 将强制退出
           __ no_operation ();                                   //仅用于调试

    在中断处理中、允许 MCU 从 LPM0进入工作模式。 否则、MCU 将在中断处理之外保持 LPM0模式

           案例 ADCIV_ADCIFG:
               ADC_RESULT = ADCMEM0;
               __ bic_SR_register_on_exit (LPM0_bits);           //从 LPM0清除 CPUOFF 位
               中断;

    这是显示此代码功能的示例。

    如果您需要使 MCU 始终处于活动模式、请移除"__bis_SR_register (LPM0_bits | GIE);  " 和"__bic_SR_register_on_exit (LPM0_bits);"。

    谢谢!

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

    我删除了这两个、但代码不起作用。

    因此、当我将 __BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);放回 #pragma vector=CAPTIVATE_VECTOR 时、
    __interrupt void CAPT_ISR (void)函数。

    代码开始工作。 我只希望 CPU 始终处于运行状态以及工作代码

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

    你好, Ibrahim Sangi  

    >> 我删除了这两个和代码不起作用。

    您能否解释一下、当您删除这两个代码时、MCU 将停在哪个代码?

    谢谢