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.

[参考译文] BOOSTXL-CAPKEYPAD:默认应用 I2C 协议记录在哪里?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/992759/boostxl-capkeypad-where-is-default-application-i2c-protocol-documented

器件型号:BOOSTXL-CAPKEYPAD

BOOSTXL-CAPKEYPAD 评估板预装了一个使用 I2C 与外部世界通信的应用。  在哪里可以找到所需协议的文档?

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

    您好、Jim、

    《CapTIvate 技术指南》、软件一章、 通信模块对此进行了说明。

    CapTIvate 软件 API 包含函数说明。

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

    不幸的是、这并不能直接解决我的问题。  我正在寻找从主器件期望的 I2C 协议、而不是驱动程序 API。  我们使用来自 Silicon Labs 的微控制器作为我们新产品的主器件。  我们设计中的 MSP430将用作从器件、仅驱动键盘; 非常接近 BOOSTXL-CAPKEYPAD 开箱即用的功能。  我需要了解 I2C 协议、以便向其发送正确的命令以读回按键状态。

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

    好的、明白。

    您有2个选项;一个是遵循 REGISTER_I2C 协议、另一个是创建您自己的协议。

    选项1 - REGISTER_I2C 已集成到 CapTIvate 库中、并记录在 软件一章的主机处理器通信部分中。  它提供了与 MSP430进行通信所需的示例。  请注意、在 GUI 中、您必须选择此协议、或者您可以手动编辑 CAPT_UserConfig.h 文件第81行:#define CAPT_interface (__CAPT_REGISTERI2C_interface__)。

    您将发现主机可以请求传感器数据、状态和其他数据。  使用此方法的缺点是主机浪费大量的轮询时间来查看是否按下 IFA 键。  效率不是很高、因此您可以轻松添加一个中断、允许 MSP430在主机具有数据时通知主机。 为此,请查看您的 CCS 或 IAR 项目目录并找到 captate>comm>CAPT_CommConfig.h 文件。  在第12行附近、您将看到一些#defines、用于选择您希望 I2C 驱动程序使用的 GPIO。 我认为 BOOSTXL-PKEYPAD 已设置。

    由于 REGISTER_I2C 驱动程序不用于激活此中断、因此您需要在用户回调中执行此操作、您需要创建并注册。  此处提供了有关如何执行该操作的信息。  注册回调后、CapTIvate 库将知道在每次测量后自动调用它。 在回调中、只需调用 I2C 从设备驱动程序函数即可激活中断引脚。

    空 I2CSlave_setRequestFlag (空)

    选项2 -可以使用自定义协议。  由于您已经有一个用户回调来生成中断请求、 因此您需要使用几行代码来读取感兴趣的传感器数据、将其填充到您指定的缓冲区中、然后生成中断。  自定义协议的优点是可以发送所需的任何数据。  如果它只是按下键的值、那么您就会按下。

    如何知道按下了哪个按钮?  这就是 CAPT_getDominantButton ()的作用。  

    要使用 I2C 驱动程序、您必须禁用 CapTIvate GUI 的接口:

    //========================================
    //修改 CAPT_UserConfig.h,第81行,设置为无
    //========================================
    #define CAPT_interface (_CAPT_NONE 接口_)

    这将防止 I2C 驱动器初始化 REGISTER_I2C 或 REGISTER_BULK 资源。

    接下来、您需要向 CAPT_CommConfig.h 添加几行代码 以"重新启用"I2C 驱动程序、以便可以调用 I2C 函数。  请参阅粗体文本。
    //========================================
    //修改第140行周围的 CAPT_CommConfig.h,如下所示:
    //========================================
    #if 1.
    #define UART__ENABLE           (false)
    #define I2CSLAVE__ENABLE       (真)
    #define FUNCHTIONTIME__ENABLE  (真)
    #elif (CAPT_INTERF=_CAPT_UART_INTERFIT__)
    #define UART__ENABLE         (真)
    #define I2CSLAVE__ENABLE      (false)
    #define FUNCHTIONTIME__ENABLE   (false)
    #elif (CAPT_INTERF=_CAPT_BULKI2C_INTERFIT__)
    #define UART__ENABLE         (false)
    #define I2CSLAVE__ENABLE      (真)
    #define FUNCHTIONTIME__ENABLE   (真)
    #elif (CAPT_interface=_CAPT_REGISTERI2C_interface__)
    #define UART__ENABLE         (false)
    #define I2CSLAVE__ENABLE      (真)
    #define FUNCHTIONTIME__ENABLE   (真)
    #endif

    现在、对于代码... 您可以在回调函数中创建缓冲区
    //========================================
    //创建发送缓冲区
    //========================================
    uint8_t    TXBuffer[16];


    在代码初始阶段、在启用 CapTIvate 之前、请执行以下3项操作:
    //========================================
    //在代码早期执行以下操作:
    //========================================

       map_CAPT_registerCallback (&keypadSensor、&sensorCallback);

       I2CSlave_openPort (&slaveI2c);

       I2CSlave_setTransmitBuffer (TXBuffer、sizeof (TXBuffer));//此处使用缓冲区名称
         

    然后创建回调:
    //========================================
    //回调函数
    //========================================
    void sensorCallback (TSENSOR* pSensor)

       //仅在传感器处于触摸状态时检查显性按钮
       if (pSensor->bSensorTouch=true)
       {
           TXBuffer[0]= CAPT_getDominantButton (keypadSensor);
          
          I2CSlave_setRequestFlag();
       }
       

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

    我已经听过你几天了,所以我假设你的问题已经得到了解答。
    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。