代碼通過TMOS任務(wù),每隔500ms讀一次從機I2C數(shù)據(jù)?,F(xiàn)在測試結(jié)果就是,跑了幾分鐘或者十幾分鐘后就會卡死在I2C,數(shù)據(jù)線拉低。
您好,卡死時可以調(diào)用以下接口復(fù)位一下硬件IIC模塊。
I2C_SoftwareResetCmd(ENABLE);
I2C_SoftwareResetCmd(DISABLE);
排查①外圍電路是否有5~10K的上拉電阻上拉到V33
②出故障時打印一下IIC狀態(tài)寄存器R16_I2C_STAR1和R16_I2C_STAR2,查看哪些標(biāo)志位異常
③可以嘗試提高IIC的中斷優(yōu)先級,接口函數(shù):PFIC_SetPriority
上拉電阻是10K,中斷也只有I2C中斷開著。
目前發(fā)現(xiàn),只要一出現(xiàn)I2C卡死,電流會莫名的高5mA。我現(xiàn)在是一個任務(wù)里多次讀I2C,這個是否會有影響呢?
R16_I2C_STAR2狀態(tài)如圖
把編譯器中的代碼優(yōu)化改成無優(yōu)化貌似就不會死掉了,現(xiàn)在掛著讓它跑了三小時都還正常,取而代之的是內(nèi)存暴漲= =。優(yōu)化程度怎么還會影響這個的?
掛了一晚上,無優(yōu)化也還是會死,不過無優(yōu)化可以運行3,4個小時才會死,全優(yōu)化最多半小時。
而且無優(yōu)化死的時候是報的錯是總線忙,沒有數(shù)據(jù)線拉低的動作。
? ? while(wait && (i2c_state == I2C_MTX)) {
? ? ? ? continue;
? ? }
會一直卡在這個地方。
這個問題有點神奇,導(dǎo)致我想優(yōu)化都無從下手= =
您發(fā)送聯(lián)系方式到郵箱zhaiyw@wch.cn,交流更多信息以協(xié)助您排查。