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.

[参考译文] TM4C1290NCZAD:使用带有 I2C 的 UDMA

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/941093/tm4c1290nczad-using-udma-with-i2c

器件型号:TM4C1290NCZAD

团队、

我正在使用示例"ektm4c129_i2c_main_udma_fifo"从应用手册 SPMA073中进行工作。 此演示基于与24C256外部存储器器件的通信。 我遇到的问题是我尝试与24C02通信。 主要区别在于24C256使用2字节内部寻址方案、24C02使用单字节内部寻址方案。

请详细说明将"ektm4c129_i2c_master_udma_fifo"示例从使用2字节地址内部地址(24C256)更改为单字节地址(24C02)的步骤吗?  

我曾试图自己做到这一点,但迄今未能取得成功。

谢谢。

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

    您好 Chris、

    我对该示例不是很熟悉、但仔细看一下该示例以及您所描述的内容、我希望您不再需要 I2C_OP_TXADDR 状态、并可以删除该状态。

    为此、您需要像这样进入 I2C_OP_FIFO、然后使用8位寻址:

    实例 I2C_OP_IDLE:
    //
    从空闲移动到发送地址状态
    //
    g_ui8MasterPrevState = g_ui8MasterSlavState;g_ui8Current State
    = I2C_OP_FIFO;
    
    //
    将页面的高位写入从属
    设备//
    I2CMastereAddrSet (I2I2EXT)
    、PudeC2;I2I2I2C_Base、Pude2
    I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_START);
    break;
    
    

    这将取代所有这些:

    案例 I2C_OP_IDLE:
    //
    从空闲状态移动到发送地址状态
    //
    g_ui8MasterPrevState = g_ui8MasterSlaveState;g_ui8Current WordState
    = I2C_OP_TXADDR;
    
    //
    将页面的高位写入从属
    设备//
    I2USBasterSlaveAddrSet (I2i2_I2EXT
    )、I2u2u_I2u2u2u2u_Israb (I2u2u_Israb);
    I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_START);
    break;
    
    case I2C_OP_TXADDR:
    //
    将当前状态分配到上一状态
    //
    g_ui8MasterPrevState = g_ui8MasterState;
    
    //
    如果地址已被设置为'n'u2C_ruptState
    
    
    
    
    
    ;//如果是 i2C_ui2C_ruptState = g/ ui2ui2u_u_u_uiSPI Current;如果是 I2u_u_u_u_u_u_uSPI 状态,则停止状态;如果是 i2ui2ui2u_u_u_u_u_u_uiSPI 状态
    否则
    {
    g_ui8MasterCurrent State = I2C_OP_FIFO;
    }
    
    //
    //如果
    地址已通过 ACK 写入、则将页面低位写入从属方
    //
    I2CMasterDataPut (I2C2_base、(g_ui16SlaveWordAddress >> 0));
    I2CMasterControl (I2CMasterDataPut (I2C2_base、(g_ui16SlaveWordAddress >> 0)));I2CMaster_d_star_s_dip_d_cont
    ;
    

    您可能还需要从  I2C_MASTER_STATE 中删除 I2C_OP_TXADDR。

x 出现错误。请重试或与管理员联系。