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.

[参考译文] 为什么 tm4c123gh下午6的 i2c 中断只被调用一次?

Guru**** 2606375 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/748850/why-doeas-the-i2c-interrupt-for-tm4c123gh6pm-is-called-just-once

您好,

我想在数据中断时触发 i2c 主器件中断、并验证中断是否已调用 I 将一个引脚链接到示波器、并在每次中断调用时更改引脚的状态。

我的中断似乎只被调用一次、我想为什么?

下面是我启用中断的方法:

IntEnable (INT_I2C0);

I2CMasterIntEnableEx( INT_I2C0、I2C_MASTER_INT_DATA );

中断处理程序:

空 I2C0_Handler ()

  I2CMasterIntClear (I2C0_BASE);

  if (val ==0)
  {
    GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_PIN_1);

   Val = 1;
  }
 其他
 {
   GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0);

   Val = 0;
  }

中断触发:

while (1)

I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_addr、I2C_HAL_WRITE_OPERATION);

I2CMasterDataPut ( I2C0_BASE,src[ndx]);

I2CMasterControl ( I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_START);

while (I2CMasterBusy ( I2C0_BASE);

范围视图:  

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

    我无法从您提供的代码中判断出什么是错误的、但它看起来比不获得下一个中断更重要。 I2C 传输应从我在您提供的代码中看到的内容返回。 代码看起来可能会发出嘶嘶声、然后在10ms 之后开始。

    我已经连接了一个简单的 I2C 程序、该程序将 I2C0用作主机、将 I2C2用作从机。 它写入并读取三个字节。 它基本上是一个轮询例程、但我添加了一个 I2C 主中断例程、仅对引脚 PF1进行脉冲。

    /cfs-file/__key/communityserver-discussions-components-files/908/I2C_5F00_master2slaveInt.zip

    使用 Code Composers "File"、"Import"函数将项目加载到您的工作空间中。 这是一 个逻辑分析仪快照。

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

    尊敬的 Bob Crosby:

    感谢你的答复。 我使用的是 Keil 而不是 code composer。 我使用 code composer 测试了您的项目、输出看起来是这样的。 似乎程序仅传输一个 i2c 帧、然后停止。

    我不会修改您的代码中的某些内容。 Code Composer 编译器出现问题?

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

    从您的逻辑分析仪图片中、您没有从从器件获得确认。 这可能是接线问题。 您是否遵循了 C 程序中的说明?

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

    很抱歉耽误你的回答。 我找到了问题。 我应该调用 I2CMasterIntEnable 而不是 I2CMasterIntEnableEx。
    感谢您的示例。