現在、32ビットパラレルシフターを構成して、外部デバイスからデータを受信するようにしようとしています。その際、ピンの1つ(FLEX_D4/DATA_VALID)をデータシフトのための信号として使用します。
これまでの進歩により、DATA_VALIDがトリガーされたときに32ビットデータを読み込み、そのデータをeDMA Ping-Pongバッファに移動させることが可能になりました。現在、Printf文を使用してバッファデータをコンソールに読み出すテストを行っています。Shifterにエラーが発生した場合(データシートによると通常はオーバーランを示す)、それもコンソールに出力されます。
私の主な問題はTimerConfigにあると考えています。DATA_VALIDの立ち上がりエッジでShifterが何度も読み取りをトリガーしてしまうのですが、正しいデータを実際に移動させながら一度だけ読み取りを行うような設定が見つかりません。
コンソール出力:
読み取りバッファA: 0x3fffefff
シフトエラーコード: 0x8
シフターの状態: 0x0
SHIFTSDEN: 0x8
DMA CSR: 0x0
DMAエラー: 0x0
TCD BITER: 0x2 CSR: 0x12
CH_MUX: 0x40
バッファBの読み取り: 0x3ffffefff
シフトエラーコード: 0x8
シフターの状態: 0x0
SHIFTSDEN: 0x8
DMA CSR: 0x0
DMAエラー: 0x0
TCD BITER: 0x2 CSR: 0x12
私のFLEX_IOの設定ファイルを添付します。ありがとう。
更新: 「 kFLEXIO_TimerDisableOnTriggerFallingEdge 」がCPUをコールバック内に留めていたことが分かりました。
タイマー比較後に無効にしたいのですが、このオプションでは SHIFTBUF は 0x0 の値のみを報告し、SHIFTERR フラグは報告しません。
こんにちは、 @carlos_oさん、返信ありがとうございます!
思ったようにタイマーをエッジで表示DATA_VALIDきましたが、Threadは更新しませんでした。現在使用しているコードを添付します。
私が現在直面している問題は、FlexIOを他のデバイスと同等の速度で動作させることです。今のセットアップでは基本的にサンプリングDATA_VALIDで、高速になるとシフターがオーバーランになることがあります。私の考えでは、私のデザインにはMCXとホストデバイス間で共有クロックが必要であり、ホストデバイスが32ビットデータを送る予定だと思います。32ビットデータバス内のピンをこの信号に使えるので、FlexIOのピンを分割する必要がありません。このアイデアについて何かご意見があればぜひお聞かせください!
以前のご質問にお答えします。
1.レジスタは、低速でも意図どおりにデータが格納されています。DATA_VALIDの降下エッジごとに、SHIFTBUFは32ピンからデータを保存し、EDMAは散布・採集方法でピンポンバッファに転送します。
2. アナログ Discovery 2で入力をシミュレートしています。アナログ Discovery 2はデータピンが16本しかないため、32ビットの上限値を書き込み、DATA_VALIDピンでクロックをシミュレートし、未使用のピンを固定しています。低速走行時におけるテストデータは正しく一致している。
3. 私はFRDM-MCXN947を使用しています
こんにちは、 @Flexin_On_The_IO さん。
投稿ありがとうございます!
あなたのレジスターで現在の行動について教えていただけますか?
どのようなテストデータを受信しようとしていますか?また、現在どのようなデータが受信されていますか?
どのMCXNを使っているのか教えていただけますか?
これはカスタムボードですか?そうでない場合は、使用しているボードを指定してください。
こんにちは、 @Flexin_On_The_IO さん。
返信が遅くなり申し訳ありません。
目指している速度を具体的に教えていただけますか?
AN14284 『FlexIO Emulated インターフェース のタイミングパラメータチューニング』をレビューすると良いでしょう。このアプリのノートにはあなたの目標に役立つ情報が載っているかもしれません。
こんにちは、 @carlos_o さん。
私が最低限達成したい速度は18.5MHzです。シフターは約6.25MHzで追いつくことは確認できますが、ハードウェアの制限で高速で問題が:Pました。
下は私のAnalog Discovery 2の波形で、MCLK信号とデータ用のバイナリカウンタ(AD2のピン数が少ないため12ビットのみ)、そしてDATA_VALID信号を手動で制御しています。
高周波数(20 MHz)になると、AD2は実際にはまともな方形波を出せず、信号の整合性が悪いためにFRDMが望ましくないシフトをトリガーしているのではないかと気づきました。
送っていただいたファイルを拝見しましたが、私が解決したいと考えている問題の解決策になるかもしれないと思いました。DATA_VALIDがMCLKと同時に立ち上がり/立ち下がりする場合、クロックが完全にデクリメントできないため、データのシフトが欠落すると考えられます。
私の主な質問は、シフターは通常、他のデバイスからのトリガー信号がローになった後でも、完全なシフトサイクルを完了するために遅延クロック/タイマーを必要とするのかということです。現在のシステム構成では、データを取りこぼさないように、MCLKのエッジ間でDATA_VALIDがハイレベルを維持する必要があります。