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.

[参考译文] TM4C1231H6PGE:如何启用 i2c 2总线的 NVIC 中断

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/814609/tm4c1231h6pge-how-to-enable-interrupt-of-nvic-of-i2c-2-bus

器件型号:TM4C1231H6PGE

您好,

我正在尝试为 i2c 2总线启用 NVIC 的中断。

当我 这样做时,巴士会被绞死,不知道为什么。

下面是在缺少内容时使用 i2c2帮助我的代码

---------------------------------------------------- 代码-------------------------------------------------------

   SysCtlPeripheralDisable (SYSCTL_Periph_I2C2);
   SysCtlPeripheralReset (SYSCTL_Periph_I2C2);
   SysCtlPeripheralEnable (SYSCTL_Periph_I2C2);

   //使用系统时钟启用和初始化 I2C 主模块。
   // I2C 传输速率将始终为100kHz。
   //
   MAP_I2CMasterInitExpClk (I2C2_MASTER_BASE、 SysCtlClockGet ()、false);
   // map_I2CMasterGlitchFilterConfigSet (I2C2_master_BASE、I2C_master_glitch_filter_32);
   HWREG (I2C2_MASTER_BASE + I2C_O_MCR2)|=(6<<4);//设置为16时钟干扰滤波器
   HWREG (I2C2_MASTER_BASE + I2C_O_MCR)|=(1<<6);//并立即启用
   //
   //将总线超时配置为25ms。  25ms 的12位值为0x9C4 (2500
   //时钟)、将高8位舍入到0x9C。  每个时钟的周期为10us
   CiscoI2C 需要100kHz I2C。
   //
   MAP_I2CMasterTimeoutSet (I2C2_MASTER_BASE、0x9C);

   MAP_I2CMasterIntEnableEx (I2C2_MASTER_BASE、I2C_MASTER_INT_DATA | I2C_MASTER_INT_TIMEOUT);
 
   ROM_IntEnable (INT_I2C2);
------------------------------------------------------------------

代码中的这个特定函数导致了这个问题。

 
   ROM_IntEnable (INT_I2C2);

谢谢、

Rohith

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

    您好、Rohith、

    是否也调用了主中断使能? 我不确定是否有比您显示的代码更多的代码、但您也需要此 API:

    ROM_IntMasterEnable();
    

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

    您好、Ralph、

    谢谢。

    代码的这一行是指 ROM_IntMasterEnable:

    MAP_I2CMasterIntEnableEx (I2C2_MASTER_BASE、I2C_MASTER_INT_DATA | I2C_MASTER_INT_TIMEOUT);

    在 ROM_IntEnable (INT_I2C2)之前调用该函数

    谢谢、

    Rohith。

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

    您好、Rohith、

    该 API 将中断作为 I2C 主设备启用、并且该 API 特定于 I2C 外设。

    这不是 MCU 范围中断使能。

    ROM_IntMasterEnable();不是特定于 I2C,而是作为一个整体启用 MCU 的 NVIC。

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

    您好,Ralph,

    感谢您的快速响应。

    类似的代码用于初始化用于驱动各种从设备的其他 i2c 总线(i2c 1和 i2c 3总线)。

    当我尝试对 i2c 2总线执行相同的操作时,我遇到了问题。

    因为..it 连接到了 MCU 的 PF7和 PF6,所以这些引脚是否对功能有任何限制。

    谢谢,

    Rohith。

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

    您好、Rohith、

    您可能需要共享用于其他 I2C 的代码、以便我评论不同之处、但我可以在不查看代码的情况下想到的一个想法是、您没有将 ISR 添加到 startup_ccs.c 文件中。 如果您进行调试,请暂停并查看您是否位于 DefaultIntHandler 中。 如果是这样、您的 ISR 链接不正确。