TMS320C28346: 使用I2C寄存器配置时,I2caRegs.I2CMDR.all = 0x6E20

Part Number: TMS320C28346

配置完成后STP位置1,但在总线运行一段时间后,STP位会置0,后续再次置1,直到停止位发送完毕,再次置0

    I2caRegs.I2CSTR.bit.SCD = 1;
    I2caRegs.I2CCNT = data_num + 2;
    I2caRegs.I2CSAR = slave_addr;
    I2caRegs.I2CDXR = (Uint16)((addr >> 8) & 0xff); // 高8位地址
    I2caRegs.I2CMDR.all = 0x6E20;                   // FREE,STT,STP,MST,TRX,IRS
    I2caRegs.I2CDXR = (Uint16)(addr & 0xff);        // 低8位地址
    for (i = 0; i < data_num; i++)
    {
        I2caRegs.I2CDXR = (Uint16)(send_data[i]); // 数据
    }
    time_cnt = SysTickUsGet();
    while (I2caRegs.I2CMDR.bit.STP == 1);
    return I2C_SUCCESS;
源代码如上,STP提前置0会导致程序提前退出。
另外STP和SCD信号的跳转时序是什么样的,STP信号会比SCD信号延时几个us再跳转吗,像下面这张图所示: