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.

[参考译文] MSP430FR2633:可通过 prox 和 GPIO 实现 CapTIvate 低功耗模式唤醒

Guru**** 2390755 points
Other Parts Discussed in Thread: MSP430FR2633

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1058818/msp430fr2633-captivate-low-power-mode-wake-on-prox-and-a-gpio

器件型号:MSP430FR2633

大家好、

我对 MSP430FR2633 CapTIvate 设计非常陌生、我已经从 CapTIvate 设计中心生成了我的代码。 在有吸引力的方面一切都很好、它会在触摸事件上升高和中断、 它从接近的 LPM 唤醒、但我想在代码中添加 GPIO 输入、该输入也应该像触摸按钮一样唤醒器件、并使用触摸按钮在同一 IRQ 引脚上生成中断。 是否有人可以向我发送一些示例代码?将其添加到哪里? 当器件从高电平转换为低电平时、此 GPIO (P1.6)应将器件唤醒、并在 IRQ 引脚(P1.1)上向主机控制器发出类似的触摸事件并将其中断。 之后、主机将尝试读取 MSP430FR2633、因为它认为存在触摸事件、但 MSP 将不返回触摸标志。 到目前为止还可以。

提前感谢您、

此致

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

    你(们)好  

    我不完全理解您的问题。 P1.6在 P1.1上生成 IRQ 意味着什么?

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

    您好!

    P1.6是具有中断功能的 GPIO 输入、当 MSP430FR2633处于 LPM 模式时、如果 P1.6上存在从高电平到低电平的转换、则器件应唤醒并在 P1.1 (I2C 请求信号)上产生中断输出。 我使用此 P1.1在触摸事件时向主机控制器发出中断。 因此、外部 GPIO P1.6输入也应唤醒器件并在 P1.1上生成和中断(I2C 请求)

    通常情况下、器件在接近时唤醒、如果发生触摸、则会在 P1.1上发出中断(I2C 请求)。  

    我希望这清楚说明。  

    感谢您的快速回复。

    此致  

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

    您好、Ahmet、

    现在已经很清楚了。 您的项目中是否存在任何问题? 您可以参考示例代码。

    dev.ti.com/.../node

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

    您好、Allen、

    我实施了该部分、但我现在有另一个问题。 我还对 I2C 通信进行了编辑、并添加了一条新命令来更改运行时的阈值电平。 但我想检查转换是否结束、更新按钮的阈值电平是合适的时间。 我能否检查 g_BDetectionFlag、如果它为 true、这是否意味着没有转换、我可以更新触摸阈值电平?

    此致

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

    您好、Allen、

    在 CAPT_Interface.c 文件中、我已将这一行添加到 CAPT_I2CRegisterReceiveHandler 方法中。  

    否则、如果(g_ui8I2CDataBuffer[tL_pckt_CMD_field]= 0x20)

    //uint8_t i=0、k=0;
    uint8_t id = 0;
    uint8_t 阈值= 10;
    ID = g_ui8I2CDataBuffer[tL_pckt_CMD_field+2];
    阈值= g_ui8I2CDataBuffer[tL_pckt_CMD_field+3];

    //将其视为自定义 CMD 以获取原始数据
    //g_BConvTimerFlag
    //if (g_BConvTimerFlag=false)
    if ((g_bEndOfConversionFlag=true)&&(阈值> 5))

    MAP_CAPT_STOPTimer();
    MAP_CAPT_clearTimer();
    开关(ID)

    情况0:
    pSensor->pCycle [1]->pElements[0]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例1:
    pSensor->pCycle [3]->pElements[0]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例2:
    pSensor->pCycle [3]->pElements[1]->ui8TouchThreshold = threshold;
    //__delay_cycles (8000);
    中断;
    案例3:
    pSensor->pCycle [2]->pElements[0]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例4:
    pSensor->pCycle [0]-> pElements[0]-> ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    情况5:
    pSensor->pCycle [3]->pElements[2]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例6:
    pSensor->pCycle [2]->pElements[1]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例7:
    pSensor->pCycle [2]->pElements[2]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例8:
    pSensor->pCycle [1]->pElements[1]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例9:
    pSensor->pCycle [3]->pElements[3]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例10:
    pSensor->pCycle [1]->pElements[2]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例11:
    pSensor->pCycle [2]->pElements[3]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    情况12:
    pSensor->pCycle [0]->pElements[1]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例13:
    pSensor->pCycle [0]->pElements[2]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    案例14:
    pSensor->pCycle [0]->pElements[3]->ui8TouchThreshold =阈值;
    //__delay_cycles (8000);
    中断;
    //案例15:
    // pSensor->ui16ConversionCount=阈值;
    //中断;
    //案例16:
    // pSensor->ui16 ConversionGain=阈值;
    //中断;
    //案例17:
    // pSensor->ui16ProxThreshold=阈值;
    //中断;
    默认值:
    中断;

    G_ui8I2CDataBuffer[TL_pckt_CMD_FIELD+2]=0xAA;//成功
    //CAPT_calibrateUI (&g_uiApp);
    map_CAPT_startTimer();

    其他

    G_ui8I2CDataBuffer[TL_pckt_CMD_FIELD+2]=0xFF;//失败
    // map_CAPT_stopTimer();
    // map_CAPT_clearTimer();
    // CAPT_calibrateUI (&g_uiApp);
    // map_CAPT_startTimer();

    这是我的代码、我将向主机返回失败或成功消息。 我在论坛中使用了一些票。 我将从主机向 MSP430FR2633发送4个字节的数据、其中包括第一个字节为命令、第二个字节为传感器 ID、第三个字节为元件 ID、第四个字节为阈值电平。 我注释掉 了 CAPT_calibrateUI (&g_uiApp)函数、因为它会产生一些问题、MSP430在此命令之后不起作用。  

    您能否检查此代码是否存在问题以及需要解决的问题。  

    此致

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

    你(们)好  

    什么问题导致 MSP 无法正常工作? 您能不能更详细地描述它。 转换不会影响阈值的设置。 您可以在需要时尝试更改阈值、而不是等待转换结束

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

    您好、Allen、

    我通常会检查结束转换标志、如果该标志已设置、我将更新参数。 如果我取消对 CAPT_calibrateUI 部件的注释、则不会设置 endofconversion 标志、而且我也不再获得触控中断。 我不知道为什么、但看起来计时器不会再次启动、可能是因为我没有重新加载计时器。

    此致、

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

    你(们)好  

    这可能是因为您注释掉 了 MAP_CAPT_startTimer()。   

    您可以参阅这两个指南。