主题中讨论的其他器件:MSPM0L1306
如何发送 I2C 目标地址
1) 1)要发送目标地址、我们是否需要写入 MTXDATA 寄存器(Tx 缓冲器)?
或
2) 2)如果我们在 MSA[SADDR]中写入目标地址、它将在设置 MCTR[START]位后自动发送?
在第二种情况下、控制器如何知道目标地址已成功传输? 因为地址没有中断。
需要有关这方面的信息。
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
此致、
赫利克