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.
如何发送 I2C 目标地址
1) 1)要发送目标地址、我们是否需要写入 MTXDATA 寄存器(Tx 缓冲器)?
或
2) 2)如果我们在 MSA[SADDR]中写入目标地址、它将在设置 MCTR[START]位后自动发送?
在第二种情况下、控制器如何知道目标地址已成功传输? 因为地址没有中断。
需要有关这方面的信息。
您好、 Sourabh
请参阅 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 启动代码。
/** * @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 DL_Common_updateReg(&i2c->MASTER.MCTR, (((uint32_t) length << I2C_MCTR_MBLEN_OFS) | I2C_MCTR_BURSTRUN_ENABLE | I2C_MCTR_START_ENABLE | I2C_MCTR_STOP_ENABLE), (I2C_MCTR_MBLEN_MASK | I2C_MCTR_BURSTRUN_MASK | I2C_MCTR_START_MASK | I2C_MCTR_STOP_MASK)); }
-------------------------------------------------------
请参阅 SDK 中的演示代码:
C:\ti\mspm0_sdk_2_00_00_03\examples\nortos\lp_MSPM0L1306\driverlib\i2c_controller_rw_multibyte_fifo_poll
此致、
赫利克