こんにちは
現在、RTD 3.0.0 で IIC スレーブクロックの中断問題が発生しており、これは IIC クロック拡張機能に関連していることが判明しました。FAE の推奨に従い、この問題は 6.0.0 ドライバには存在しないとのことでした。プロジェクトのスケジュールと最小限の変更という原則に基づき、私は...IICドライバファイルはバージョン6.0.00から抽出され、バージョン3.00に配置されました。RTDでは、正常に動作していないことがわかりました。変更後、IICはデータを受信すると割り込みから抜け出せなくなっていました。
質問させてください。
1. この操作(3.00RTD)を試した人はいますか?(一部のドライバーをバージョン6.00に置き換えました。)この変更はサポートされていますか?まだ移植されていない関連ドライバーは他にありますか?
2. バージョン6.0.00でIICの変更項目を発見しました。これはバージョン4.00で修正済みでした。バージョン5.00はこの修正を継承しましたが、バージョン6.00ではバージョン3.00のロジックに戻ってしまいました。しかし、6.00リリースでは…注記にはその説明がありませんでした。バージョン6.00では、このバグを修正するために他の変更が加えられたのでしょうか?
static void Lpi2c_Ip_SlaveIRQHandlerInternal(uint8 Instance)
ヤージュ
LPI2C_Type *BaseAddr;
Lpi2c_Ip_SlaveStateType * スレーブ;
boolean StopDetect = FALSE;
boolean RepeatStartDetect = FALSE;
BaseAddr = Lpi2c_Ip_pxBase[インスタンス];
Slave = Lpi2c_Ip_pxSlaveState[Instance];
StopDetect = LPI2C_Get_SlaveSTOPDetectEvent(BaseAddr);
RepeatStartDetect = LPI2C_Get_SlaveRepeatedStartEvent(BaseAddr);
/* アドレスの有効性と送受信イベントをチェック */
Lpi2c_Ip_SlaveCheckDataEvent(Instance, BaseAddr, Slave);
if (RepeatStartDetect)
ヤージュ
スレーブ->RepeatedStarts++;
if ((1U == Slave->RepeatedStarts) && (Slave->Is10bitAddress)) // これはバージョン4.00で変更されました
ヤージュ
RepeatStartDetect = FALSE;
LPI2C_Clear_SlaveRepeatedStartEvent(BaseAddr);
}
}
((TRUE == StopDetect) || (TRUE == RepeatStartDetect)) の場合
ヤージュ
/* 停止/繰り返し開始を検出しました */
Lpi2c_Ip_SlaveStopDetectHandler(BaseAddr, Slave);
if (TRUE == StopDetect)
ヤージュ
/* 新しい転送のために、repetead をリセットします */
Slave->RepeatedStarts = 0U;
}
}
/* スレーブエラーのチェック */
Lpi2c_Ip_SlaveCheckErrorEvent(BaseAddr, Slave);
}
関連バグ: ARTD-6112
こんにちは、 @Reyna_pan45さん
異なるRTDリリースのコードを混在させることは推奨しません。この組み合わせは検証されていないためです。このため、異なるリリースのコンポーネントが一緒に使われた場合の期待される機能や挙動を保証することはできません。
ARTD-81841に関してですが、最新リリースではこの問題はARTDCC2-91として追跡されています。これは現在既知の問題であり、残念ながら現時点では回避策はありません。下の画像をご覧ください。
ご迷惑をおかけして申し訳ございません。
BR、VaneB
こんにちは、 @VaneBさん
このバグに関する、より詳しい説明はありますか?テスト中に、ARTD-81841 アイテムを修正することで(頻繁に割り込みが切れる場合に)根本原因が特定できなくてもいくつかの問題が緩和されることが分かりました。