主题中讨论的其他器件: TMS320F28377S、 C2000WARE
我的主控制器是 TMS320F28377、从控制器是 TMS320F28027。
我想从从从器件读取数据。 如何将读取命令从主器件发送到从器件,以便从器件充当从器件发送器?
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.
我的主控制器是 TMS320F28377、从控制器是 TMS320F28027。
我想从从从器件读取数据。 如何将读取命令从主器件发送到从器件,以便从器件充当从器件发送器?
您好、先生、
我在两个微控制器之间使用 I2C 接口。 TMS320F28377S 是主器件、TMS320F28027是从器件。 我已成功执行主发送器和从接收器部分。 从器件接收多个字节并将其存储在阵列中。
我的下一个任务是实现主接收器和从发送器部分。 在本节中、我能够将读取查询发送到从器件。 从机接收查询并进入发送中断。 在这里、我可以看到从器件的发送缓冲区填满了我要发送的数据、但 SDA 线上没有任何数据。 相反、SDA 和 SCL 线路都保持低电平。
谢谢、此致、
Vrushali Jangam。
您好、Vrushali、
您在使从器件开始传输、然后使主器件接收的代码中有何区别?
您可以使用以下代码片段作为参考。 此初始化代码可用于外部回送、主器件作为接收器件、从器件作为发送器件。
忽略有关 RX/TX 的注释。
基准代码是
C2000Ware0\driverlib\f2837xd\examples\cpu1\i2c\i2c_ex3_external_loopback.c
void initI2CFIFO()
{
//
//必须在配置 I2C 之前将其复位
//
I2C_DisableModule (I2CA_BASE);
I2C_DisableModule (I2CB_BASE);
//
// I2C 配置。 使用占空比为50%的400kHz I2CCLK。
//
I2C_initMaster (I2CA_BASE、DEVICE_SYSCLK_FREQ、400000、I2C_DUTYCYCLE _50);
I2C_setConfig (I2CA_BASE、I2C_MASTER_Receive_MODE);
I2C_setDataCount (I2CA_BASE、2);
I2C_setBitCount (I2CA_BASE、I2C_BITCOUNT_8);
//
// I2C 从器件配置
//
I2C_setConfig (I2CB_BASE、I2C_SLAVE_SEND_MODE);
I2C_setDataCount (I2CB_BASE、2);
I2C_setBitCount (I2CB_BASE、I2C_BITCOUNT_8);
//
//配置外部回送
//
I2C_setSlaveAddress (I2CA_BASE、SLAVE_ADDRESS);
I2C_setOwnSlaveAddress (I2CB_BASE、SLAVE_ADDRESS);
I2C_setEmulationMode (I2CA_BASE、I2C_emulation_free_run);
I2C_setEmulationMode (I2CB_BASE、I2C_emulation_free_run);
//
// FIFO 和中断配置
//
I2C_enableFIFO (I2CA_BASE);
I2C_clearInterruptStatus (I2CA_BASE、I2C_INT_RXFF);
//
//发送 FIFO 中断级别被设置为生成中断
// 16字节 TX FIFO 包含2个或更少字节的数据。
//
I2C_setFIFOInterruptLevel (I2CA_BASE、I2C_FIFO_TX2、I2C_FIFO_RX2);
I2C_enableInterrupt (I2CA_BASE、I2C_INT_RXFF | I2C_INT_STOP_Condition);
I2C_enableFIFO (I2CB_BASE);
I2C_clearInterruptStatus (I2CB_BASE、I2C_INT_TXFF);
//
//接收 FIFO 中断级别被设置为生成中断
// 16字节 RX FIFO 包含2个或更大字节的数据。
//
I2C_setFIFOInterruptLevel (I2CB_BASE、I2C_FIFO_TX2、I2C_FIFO_RX2);
I2C_enableInterrupt (I2CB_BASE、I2C_INT_TXFF | I2C_INT_STOP_Condition);
//
//配置完成。 启用模块。
//
I2C_enableModule (I2CA_BASE);
I2C_enableModule (I2CB_BASE);
}
此致。
您好、Meghana、
感谢你的答复。
现在、我能够在主机端接收数据、但它只会执行一次。 我要附加从器件第一次传输时所获取的波形的快照。
从波形中、我可以观察到虚拟写入和从 id +读取命令正常。 红色圆圈突出显示的部分位于主器件发送从器件 ID +读取命令之后。 之后、观察到从器件发送的延迟数据。
当主器件发送下一个读取命令时、SDA 和 SCL 在主器件在假写入后发送从器件 ID+读取命令后保持低电平。
请帮助我获取从发送器和从接收器示例代码。
谢谢、此致、
Vrushali Jangam。