您好!
我不熟悉 i2c、请多多包涵。
我有一个代码、其中我的处理器(TM4C123GH6PZ)被定义为一个主器件、并通过 i2c 将数据发送到另一个组件。
我使用的代码为:
"
SysCtlPeripheralEnable (SYSCTL_Periph_I2C1);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_GPIOPinConfigure (GPIO_PA6_I2C1SCL);
ROM_GPIOPinConfigure (GPIO_PA7_I2C1SDA);
I2CMasterEnable (I2C1_MASTER_BASE);
GPIOPinTypeI2C (GPIO_Porta_base、GPIO_PIN_6| GPIO_PIN_7);
GPIOPadConfigSet (GPIO_Porta_base、GPIO_PIN_6、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);
GPIOPadConfigSet (GPIO_Porta_base、GPIO_PIN_7、GPIO_Strength _2mA、GPIO_PIN_TYPE_OD_WPU);
I2CMasterInitExpClk (I2C1_MASTER_BASE、SysCtlClockGet ()、false);
SysCtlDelay (ROM_SysCtlClockGet ()/20);"
这里是设置代码、
下一部分是有问题的部分、这是尝试发送数据的代码:
"
I2CMasterSlaveAddrSet (I2C1_MASTER_BASE、SLAVE_ADDRESS、false);
I2CMasterDataPut (I2C1_MASTER_BASE、reg);
I2CMasterControl (I2C1_MASTER_BASE、I2C_MASTER_CMD_BURST_SEND_START);
while (I2CMasterIntStatus (I2C1_MASTER_BASE、false)=0)
{
}
//
//清除 I2C 中断。
//
I2CMasterIntClear (I2C1_MASTER_BASE);
I2CMasterDataPut (I2C1_MASTER_BASE、(无符号长整型)数据);
I2CMasterControl (I2C1_MASTER_BASE、I2C_MASTER_CMD_BURST_SEND_FINISH);
while (I2CMasterIntStatus (I2C1_MASTER_BASE、false)=0)
{
}
//
//清除 I2C 中断。
//
I2CMasterIntClear (I2C1_MASTER_BASE);
"
有时工作正常、但有时 我会卡在黄色标记的 while 循环上。 "I2CMasterIntStatus"函数中的以下代码似乎是这样的
"return ((HWREG (ulBase + I2C_O_MRI))? 真:假);"
有时总是返回 false。 我不清楚为什么、也不清楚"打开"该寄存器的责任是什么。
如果有任何解释和决议,将不胜感激