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.

[参考译文] MSPM0L1305:如何发送 I2C 目标地址

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1354832/mspm0l1305-how-to-send-i2c-target-address

器件型号:MSPM0L1305
主题中讨论的其他器件:MSPM0L1306

如何发送 I2C 目标地址

1) 1)要发送目标地址、我们是否需要写入 MTXDATA 寄存器(Tx 缓冲器)?

2) 2)如果我们在 MSA[SADDR]中写入目标地址、它将在设置 MCTR[START]位后自动发送?

在第二种情况下、控制器如何知道目标地址已成功传输? 因为地址没有中断。

需要有关这方面的信息。  

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

    您好、 

    请参阅 SDK 中的演示代码:

    C:\ti\mspm0_sdk_2_00_00_03\examples\nortos\lp_MSPM0L1306\driverlib\i2c_controller_rw_multibyte_fifo_poll

    这是目标地址:

    /* I2C 目标地址*/
    #define I2C_TARGET_ADDRESS (0x48)

    此处使用:

    DL_I2C_startControllerTransfer (I2C_INST、I2C_TARGET_ADDRESS、
    DL_I2C_CONTROL_DIRECTION_TX、I2C_TX_packet_size);

    写入:

    I2C->MASTER.MSA[10:1]

    Unknown 说:
    1)要发送目标地址,我们需要在 MTXDATA 寄存器(Tx 缓冲区)中写入吗?

    首先写入 I2C FIFO。 然后开始传输。

    如果我们在 MSA[SADDR]中写入目标地址,它将在设置 MCTR[start]位后自动发送?

    可以。  建议参考 API 函数[ DL_I2C_startControllerTransfer ]以配置 I2C 启动代码。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /**
    * @brief Sets up a transfer from I2C controller
    *
    * Set target address, transfer direction, burst length, START+STOP generation.
    * @note Reading/writing data must be done separately.
    *
    * @param[in] i2c Pointer to the register overlay for the peripheral
    * @param[in] targetAddr Target address [0x00, 0x3FF]
    * @param[in] direction One of @ref DL_I2C_CONTROLLER_DIRECTION
    * @param[in] length Intended burst length in number of bytes
    */
    __STATIC_INLINE void DL_I2C_startControllerTransfer(I2C_Regs *i2c,
    uint32_t targetAddr, DL_I2C_CONTROLLER_DIRECTION direction,
    uint16_t length)
    {
    // Specify target address and read/write mode
    DL_Common_updateReg(&i2c->MASTER.MSA,
    ((targetAddr << I2C_MSA_SADDR_OFS) | (uint32_t) direction),
    (I2C_MSA_SADDR_MASK | I2C_MSA_DIR_MASK));
    // STOP bit is generated after burst length number of bytes transferred
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    -------------------------------------------------------

    请参阅 SDK 中的演示代码:

    C:\ti\mspm0_sdk_2_00_00_03\examples\nortos\lp_MSPM0L1306\driverlib\i2c_controller_rw_multibyte_fifo_poll

    此致、

    赫利克