您好!
我想知道为什么在 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);
代码挂起并且不管执行什么操作。
谢谢!