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.

[参考译文] TMS320F28388D:看不到任何 I2C 中断

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1242357/tms320f28388d-cannot-see-any-i2c-interrupt

器件型号:TMS320F28388D
主题中讨论的其他器件:SysConfigADS7128

尊敬的先生/女士:

我们正在使用 TMS320F28388D 开发套件来测试 ADS7128。 如果 使用以下配置在 SysConfig 中启用 I2C_INT_TXFF:

I2C_setFIFOInterruptLevel(i2c0_uc_BASE, I2C_FIFO_TX0, I2C_FIFO_RX1);

TX 中断永久运行且不能被清除。 这是可以理解的、因为 TXFFST < TXFFIL。  

但是、如果在 SysConfig 中禁用了 I2C TX FIFO 中断并在 Board_init 之后启用、则无法看到所有中断。 您能指出以下代码存在任何问题吗?

代码非常简单:

    I2C_disableModule(i2c0_uc_BASE);
    I2C_initController(i2c0_uc_BASE, DEVICE_SYSCLK_FREQ, 400000, I2C_DUTYCYCLE_33);
    I2C_setConfig(i2c0_uc_BASE, I2C_CONTROLLER_SEND_MODE | I2C_REPEAT_MODE);
    I2C_setTargetAddress(i2c0_uc_BASE, addr);
    I2C_disableLoopback(i2c0_uc_BASE);
    I2C_setBitCount(i2c0_uc_BASE, I2C_BITCOUNT_8);
    I2C_setDataCount(i2c0_uc_BASE, count);
    I2C_setAddressMode(i2c0_uc_BASE, I2C_ADDR_MODE_7BITS);
    I2C_enableFIFO(i2c0_uc_BASE);
    I2C_clearInterruptStatus(i2c0_uc_BASE, I2C_INT_ARB_LOST | I2C_INT_NO_ACK | I2C_INT_RXFF | I2C_INT_TXFF);
    I2C_setFIFOInterruptLevel(i2c0_uc_BASE, I2C_FIFO_TX0, I2C_FIFO_RX1);
    I2C_enableInterrupt(i2c0_uc_BASE, I2C_INT_ARB_LOST | I2C_INT_NO_ACK | I2C_INT_RXFF | I2C_INT_TXFF);
    I2C_setEmulationMode(i2c0_uc_BASE, I2C_EMULATION_FREE_RUN);
    I2C_enableModule(i2c0_uc_BASE);

    while (I2C_isBusBusy(i2c0_uc_BASE));

    // Part one transmission: No interrupt
    I2C_putData(i2c0_uc_BASE, OPCODE_SW);
    I2C_putData(i2c0_uc_BASE, address);
    I2C_putData(i2c0_uc_BASE, value);
    I2C_sendStartCondition(i2c0_uc_BASE);
    DEVICE_DELAY_US(BUSY_DELAY_100us);
    I2C_sendStopCondition(i2c0_uc_BASE);
    DEVICE_DELAY_US(BUSY_DELAY_50us);

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

    Li、

    要获得 CPU 中断、您需要在 I2C 和 EPIE 上进行配置。 您是否确保获得正确的 EPIE 中断配置? 否则、您将永远不会获得 CPU 中断、因为它未在 EPIE 中启用以将该中断传播到 CPU。

    此致、

    马诺伊

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

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

    我启用了 PIE 设置、该设置可以如上所示。

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

    地址:首街  

    您在 I2C 引脚上看到 I2C 总线事务了吗? 你是否尝试在 STOP 条件下启用中断?

    此致、

    马诺伊