您好!
我使用 RM57L84x 作为 I2C 主设备、与以100kHz 频率运行的 I2C 外设通信。
它在大多数时间内都能正常工作、但在这种情况下、RM57L84x 的 can‘t 输出 SCL (clk)。
出现、我检查 Tx 数据是否已加载到 Tx 寄存器 I2CDXR。关闭 RM57L84x
一段时间后、通信变为正常。 我的 i2c 驱动程序代码由 HALCoGen 04.06.01。生成
代码如下:
uint8 writeDataToRTC (uint8 addr、uint8 cnt、uint8*数据)
{
uint32延迟= 0;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 主传输功能 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*配置要与*/通话的从机地址
i2cSetSlaveAdd (i2cREG1、RTC_ADDRESS);
/*将方向设置为发送器*/
/*注意:可选-在 Init 中完成*/
i2cSetDirection (i2cREG1、I2C_transmitter);
/*配置数据计数*/
/*数据计数+ 1 (字地址)*/
i2cSetCount (i2cREG1、cnt + 1);
/*将模式设置为主设备*/
i2cSetMode (i2cREG1、I2C_MASTER);
/*设置编程计数后停止*/
i2cSetStop (i2cREG1);
/*发送开始条件*/
i2cSetStart (i2cREG1);
/*发送字地址*/
i2cSendByte (i2cREG1、addr);
/*轮询模式下的 Transmit data_count 数据数量*/
i2cSend (i2cREG1、cnt、data);
/*等待总线忙被清除*/
while (i2cIsBusy (i2cREG1)=true);
/*等待直到检测到停止*/
while (i2cIsStopDetected (i2cREG1)=0);
/*清除停止条件*/
i2cClearSCD (i2cREG1);
/*在开始下一个块之前使用 Simple Dealya */
/*取决于从属设备准备就绪的速度*/
for (delay=0;delay<100000;delay++);
返回1;
}