ZHDZ019E October   2021  – August 2026 TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1

 

  1.   1
  2.   TMS320F28003x 实时 MCU 器件勘误表器件修订版本 0
  3. 1使用说明和公告模型
    1. 1.1 使用说明汇总表
    2. 1.2 公告汇总表
  4. 2命名规则、封装编号法和修订版本标识
    1. 2.1 器件和开发支持工具命名规则
    2. 2.2 支持的器件
    3. 2.3 封装编号法和修订版本标识
  5. 3器件修订版本 0 使用说明和公告
    1. 3.1 器件修订版本 0 使用说明
      1. 3.1.1 PIE:背对背 PIEACK 写入和手动 CPU 中断屏蔽清除之后的伪波嵌套中断
      2. 3.1.2 将嵌套中断与重复块一起使用时的注意事项
      3. 3.1.3 I2C 从机模式:在中断响应时间较长的应用中管理状态标志
      4. 3.1.4 安全性:主要的防御层是构建芯片安全边界,从启用 JTAGLOCK 和零引脚引导至闪存功能开始
    2. 3.2 器件修订版本 0 公告
      1.      公告
      2.      公告
      3.      公告
      4.      公告
      5.      公告
      6.      公告
      7.      公告
      8.      公告
      9.      公告
      10.      公告
      11.      公告
      12.      公告
      13.      公告
      14.      公告
      15.      公告
      16.      公告
      17.      公告
      18.      公告
      19.      公告
      20.      公告
      21.      公告
      22.      公告
      23.      公告
      24.      公告
      25.      公告
      26.      公告
      27.      公告
      28.      公告
      29.      公告
  6. 4文档支持
  7. 5商标
  8. 6修订历史记录

I2C 从机模式:在中断响应时间较长的应用中管理状态标志

受影响修订版:0

如果应用在 I2C 总线活动继续进行时延迟处理 I2C 中断,后续总线事件可能导致 I2C 状态寄存器 (I2CSTR) 中的多个状态标志同时变为活动状态。如果 I2CIER 中启用了这些中断事件中的多个,后续中断可能会丢失。

  • 以 I2C 主机模式工作时,此问题不适用。
  • 如果每个 I2CSTR 标志在另一个标志置位之前已由软件清除,则此问题不适用。

解决方法:轮询 I2CISRC.INTCODE 字段,并针对每个中断源执行相应操作,直到 I2CISRC.INTCODE 字段的值为 0(无挂起中断)。

__interrupt void I2CA_ISR(void){
    uint16_t isrc;
    while((isrc = I2C_getInterruptSource(I2CA_BASE)) != I2C_INTSRC_NONE){
        switch(isrc) {
            case I2C_INTSRC_ARB_LOST: 
                    /* ARBLINT ISR code */ 
                    break;
            case I2C_INTSRC_NO_ACK: 
                    /* NACKINT ISR code */ 
                    break;
            case I2C_INTSRC_REG_ACCESS_RDY: 
                    /* ARDYINT ISR code */ 
                    I2C_clearStatus(I2CA_BASE, I2C_STS_REG_ACCESS_RDY); 
                    break;
            case I2C_INTSRC_RX_DATA_RDY: 
                    /* RRDYINT ISR code, including I2C_getData() call */ 
                    break;
            case I2C_INTSRC_TX_DATA_RDY: 
                    /* XRDYINT ISR code, including I2C_putData() call */ 
                    break;
            case I2C_INTSRC_STOP_CONDITION: 
                    /* SCDINT ISR code */ 
                    break;
            case I2C_INTSRC_ADDR_TARGET: 
                    /* AASINT ISR code */ 
                    break;
        }
        NOP;
        NOP;
    }
    Interrupt_clearACKGroup();
}