请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:LAUNCHXL-F2.8377万S
您好,
我正在尝试将项目转移到独立模式。 通过CCS上载程序代码时,所有程序都工作正常(调试中)。 拔下USB电缆并重新连接,我可以确保SCL保持在低电平。 不进行I2C通信 ,因此应用程序未按预期运行。 我花了一段时间才发现在按下启动板上的重置按钮后I2C工作正常(简而言之:通过CCS ->调试视图上传的代码,所有操作都正常;退出调试会话,拔下USB并重新连接它-> SCL为低; 在USB电缆连接时按下RESET按钮-> I2C工作正常)。
我做错了什么? 我还尝试切换SCL针脚,但在插入USB电缆后应用程序无法正常工作。
注:我知道切换SCL应尝试释放从属设备,使其不再保持SDA 低电平,而不是SCL。 因此,在这种情况下,我会将其保留在初始化过程中。
////
此函数将I2C初始化为已知状态。
//
void InitI2cb (void)
{
ToggleI2cbSCL(); //这是否有影响?
I2cBGpioConfig (I2C_B_GPIO66_GPIO69); // TI源(F2837xS_I2C.c)
//初始化I2C
I2cbRegs.I2CMDR.bit.IRS = 0; //重置I2C
I2cbRegs.I2CPsc.all = 19; // I2C模块clk ~10MHz
// TODO:I2C速度高达400kHz
// I2cbRegs.I2CCLKL = 60; //设置SCL ~ 100kHz,I2C标准模式
// I2cbRegs.I2CCLKH = 30; //设置SCL ~ 100kHz,I2C标准模式
I2cbRegs.I2CCLKL = 10; //设置SCL ~ 400kHz,I2C快速模式
I2cbRegs.I2CCLKH = 5; //设置SCL ~ 400kHz,I2C快速模式
// TODO:nack create句柄
I2cbRegs.I2CIER.bit.nack = 1; //启用nack IRQ
I2cbRegs.I2CMDR.bit.IRS = 1; //解除I2C重置
I2cbRegs.I2CFFTX.ALL = 0x6000; //启用FIFO模式和TXFIFO
I2cbRegs.I2CFFRX.ALL = 0x2000; //启用RXFIFO
}
void ToggleI2cbSCL(void){
//切换(至少9次),如果从机挂机,则释放SDA (SDA低)
Int16 I = 0;
GPIO写入引脚(69,0); // P69 I2Cb_SCL引脚低
GPIO设置PIN选项(69,GPIO输出,GPIO同步); //引脚设置为输出
对于(i=18; i>0; i--)
{
GPIO _转换引脚(69);
DELAY _US(50);
}
}
我非常感谢您的帮助。 这个问题花了我几个小时。 谢谢你。