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:CAPT_updateUI ()因未触发转换结束中断(CAPT_IV_END_OF_TRANSITION)而卡住

Guru**** 2481465 points
Other Parts Discussed in Thread: MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1276181/msp430fr2633-capt_updateui-is-stuck-due-to-end-of-conversion-interrupt-capt_iv_end_of_conversion-not-being-fired

器件型号:MSP430FR2633
主题中讨论的其他器件:MSP-FET

您好!

以下是我所面临问题的详细说明。

我使用 CapTIvate 设计中心设置了一个新项目、其中包括一个 MSP430FR2633IRHBR 微控制器和一个触控板。 在触控板的属性中、我将元素计数定义为64。 这与我设计的8x8触摸矩阵相匹配。 然后、我将触控板引脚手动分配给 CAP 端口、将工作条件设置为25°C、将低功耗模式设置为 LPM0、将通信接口设置为 REGISTER_I2C、并使用设计中心源代码生成向导生成源代码。

然后、我将项目导入到 Code Composer Studio 中。 可以编译该项目而不会出现任何问题。 但是,当我尝试使用 MSP-FET 运行调试会话时,它无法过去CAPT_appHandler()-->MAP_CAPT_updateUI(&g_uiApp) CAPT_MANAGER_UPDATE_SENSOR(pApp->pSensorList[ui8SensorID], pApp->ui8AppLPM)

查看后CAPT_ISR(),我可以肯定地说CAPT_IV_END_OF_CONVERSION中断没有被触发,因此g_bEndOfConversionFlag仍然是错误的,可能会阻止 UI 更新例程。 我尝试通过调用来启用此中断MAP_CAPT_enableISR(CAPT_END_OF_CONVERSION_INTERRUPT),但仍然是相同的行为。

以下是代码中的触控板定义:

tSensor TKP00 =
{
    // Basic Properties
    .TypeOfSensor = eTrackpad,
    .SensingMethod = eProjected,
    .DirectionOfInterest = eDOIUp,
    .pvCallback = NULL,
    .ui8NrOfCycles = 32,
    .pCycle = TKP00_Cycles,
    .pSensorParams = (tGenericSensorParams*)&TKP00_Params,
    // Conversion Control Parameters
    .ui16ConversionCount = 500,
    .ui16ConversionGain = 100,
    .ui8FreqDiv = 2,
    .ui8ChargeLength = 0,
    .ui8TransferLength = 0,
    .bModEnable = false,
    .ui8BiasControl = 3,
    .bCsDischarge = true,
    .bLpmControl = false,
    .ui8InputSyncControl = 0,
    .bTimerSyncControl = false,
    .bIdleState = false,             // The touch surface is not grounded! = Hi-Z
    // Tuning  Parameters
    .ui16ProxThreshold = 10,
    .ui16NegativeTouchThreshold = 30,
    .ui16ErrorThreshold = 8191,
    .ui16TimeoutThreshold = 65535,
    .ProxDbThreshold.DbIn = 1,
    .ProxDbThreshold.DbOut = 0,
    .TouchDbThreshold.DbIn = 1,
    .TouchDbThreshold.DbOut = 0,
    .bCountFilterEnable = false,
    .ui8CntBeta = 1,
    .bSensorHalt = false,
    .bPTSensorHalt = true,
    .bPTElementHalt = true,
    .ui8LTABeta = 7,
    .bReCalibrateEnable = true,
};

也就是说、有趣的是、我仍然能够通过 I2C 读取触控板数据、但 X 和 Y 位置值为0。 数据包如下所示:

0x02、0x00、0x01、0xFF、0x00、 0x00、0x00、0x00

感谢您提供任何意见。

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

    尊敬的 Mehdi:

    听起来好像它没有在一个或多个周期内完成转换、所以通道配置可能有问题。 您确定代码是通过 APP_START()执行校准的吗?  在触控板结构 CKP00中、尝试更改.ui8NrOfCycles = 1并重试。  如果运行、它会告诉我们其他31个周期的某些内容可能不正确、并会阻碍测量结果的执行。 BTW、您提到了手动分配通道、我看到您最后得到了32个周期。 这是8x8所需的数字的两倍。  16位、因此我对您的设计和任务很好奇。  您是否有一个原理图显示特定 CapTIvate 引脚的 RX/TX 电极分配?

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

    非常感谢您花时间回答、Dennis!

    我很确定代码已经过了 APP_START(),但仍然停留在我上面提到的地方。 我尝试了你的建议,把 ui8NrOfCycles 更改为1 ,它确实有用! 我会看到 X 和 Y 位置值发生变化。 我想知道其它阻碍转换的周期会有什么问题。

    嗯、 我仔细遵循了这个链接上的硬件设计建议: https://www.ti.com/lit/an/slaa842b/slaa842b.pdf、除了一点遗憾的是! 我没有根据 CapTIvate 设计中心的引脚分配建议来设计 PCB。 我设计了一个矩阵、其中有8行连接到电容器0.0、0.1、0.2、0.3、1.0、 连接到 CAP 2.0、2.1、2.2、2.3、3.0的1.1、1.2、1.3和8列 3.1、3.2和3.3、全部都带有470欧姆的串联电阻器。 然后、我尝试在设计中心应用中以完全相同的方式分配它们、它生成了32个周期。 我给出了下面的配置屏幕截图。 如果我可以采取任何措施来拯救我当前的设计、请告诉我。

    再次感谢。

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

    有关此问题的快速更新:

    我玩过 ui8NrOfCycles 一个位,从1一直递增到31在每一种情况下,我可以获得 X 和 Y 值。 一旦我将其设置为32、它就会停止工作。 原因似乎是这个结构成员只有5个专用位。 因此、它可以容纳的最大值为31:

    //
    //! Defines the number of cycles that are implemented in this sensor.
    //! The maximum number of cycles supported is 32.
    //
    uint8_t ui8NrOfCycles : 5;

    我希望库能够处理从0到31的所有32个值。

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

    尊敬的 Mehdi:

    好的、关于引脚配置、我假定这是您所做的、但只是想确保准确并提出问题。 是的、从 CAP0.0开始着手、让您绕过芯片是很有吸引力的、尤其是对于 PCB 布线。  遗憾的是、为了更大限度地利用(4) CapTIvate 测量块并能够在单个周期内从每个(通道)读取一个通道、芯片都是这样设计的。

    是的、您对最大周期数= 32的回答正确。

    让我了解您的最新进展。