現在、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を使っているのか教えていただけますか?
これはカスタムボードですか?そうでない場合は、使用しているボードを指定してください。