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.

[参考译文] TMS570LS1115:I2C 中断不工作

Guru**** 2390925 points
Other Parts Discussed in Thread: TMS570LS1227

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1027528/tms570ls1115-i2c-interrupt-not-working

器件型号:TMS570LS1115
主题中讨论的其他器件:TMS570LS1227

您好!

我在 TMS570LS1227也遇到了同样的问题。 在这个问题上是否有任何进展?

e2e.ti.com/.../tms570ls1115-i2c-interrupt-not-working

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

    您好!

    如果 TX 中断被启用、即使 长度= 1、也将生成中断。 但 HAL 生成的代码有一个错误、即如果 length=1、则不会调用 TX 通知。

    您可以将 I2C ISR 修改为:

    原始代码;

    ================================================================

    案例5U:
    /*用户代码开始(42)*/
    /*用户代码结束*/
    /*发送*/

     if (g_i2cTransfer_T.length > 0U)
     {
      i2cREG1->DXR =*g_i2cTransfer_t.data;
      /*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
      g_i2c 传输_t.data++;
      g_i2c 转移_t.length --;
      if (g_i2cTransfer_t.length == 0U)
      {//在传输所需的数据计数后禁用 TX 中断*/
        i2cREG1->IMR &=(uint32)(~(uint32) I2C_TX_INT);
        i2cNotification (i2cREG1、(uint32) I2C_TX_INT);
      }
     }
      中断;

    ================================================================

    修改的代码;

    ================================================================

    案例5U:
    /*用户代码开始(42)*/
    /*用户代码结束*/
    /*发送*/

     if (g_i2cTransfer_T.length > 0U)
     {
      i2cREG1->DXR =*g_i2cTransfer_t.data;
      /*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
      g_i2c 传输_t.data++;
      g_i2c 转移_t.length --;
     }

      if (g_i2cTransfer_t.length == 0U)
      {//在传输所需的数据计数后禁用 TX 中断*/
        i2cREG1->IMR &=(uint32)(~(uint32) I2C_TX_INT);
        i2cNotification (i2cREG1、(uint32) I2C_TX_INT);
      }
      中断;

    ================================================================

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

    您好!

    非常感谢您的快速回复。 实际上、我尝试了您的权变措施、但对我不起作用、因为当 length = 1时、微控制器不会调用 i2cInterrupt 函数。 当我改变长度= 2时、一切都很好。 因此、我认为问题可能与硬件相关。 您是否尝试过解决方案? 此变通办法是否在您的设置中起作用?

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

    即使 length=1、也应生成 INT

    I2C_SEND (){

         …

    /*长度-1、因为一个数据已被写入*/
    g_i2cTransfer_t.length =(长度- 1U);

    /*启用发送中断*/
    I2C->IMR |=(uint32) I2C_TX_INT;

    我将进行快速测试

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

    我得到了中断:

    我在测试中使用 HAL 示例。 DATA_COUNT=1。