この質問は、Freescale i.mx デバイス (具体的には i.MX535) で SDMA エンジンを実行することを扱いますか?
UART から 32 バイトを超えるパケットを受信し、SDMA エンジンで自動的に取得したいと考えています。これは可能ですか?SDMAの使用に関する追加情報を持っている人はいますか?
編集:私の状況と問題についてもう少し具体的に説明します。
独自の SDMA スクリプトを読み込んで実行することができました。テストベンチは、
- UART2 で UART 通信 (9600、raw) をセットアップします (標準の Freescale UART ドライバーは使用しません)。
- しきい値レベル 16 で UART2 rx dma 要求をセットアップします。
- UART 2 外部メモリのようなスクリプトを実行する UART2 の SDMA チャネルをセットアップします。
このセットアップは、32 バイト未満のパケットではうまく機能しますが、サイズが 32 バイトを超える場合、データはRX FIFO Overrun
ビット セットでドロップされます。UART2 で SDMA を有効にして標準の Freescale UART ドライバを使用すると、同じエラーが発生します (UART からステータス レジスタをDMA ERRORラベルで出力します)。
Q1. 誰かが UART2 のような通常のUARTで 32 バイトを超えるパケットを受信できましたか? 私のスクリプトにバグがあることを暗示しています。
通常のUART は、SDMA コアに直接接続されている共有 UART であることをどのように示しますか。この UART スクリプトを UART3 でもテストしました。私の結論と考察は次のとおりです。
まず、標準の Freescale UART ドライバーと、標準のスクリプトを使用して SDMA を有効にしてテストします。これは、32 バイトを超えるパケットと 1MHZ のボーレートで問題なく動作します。したがって、これを自分のスクリプトと UART ドライバーで動作させたいと思っていましたが、UART3 RX レジスタから読み取るスクリプトを作成できません。
Q2. 誰かが共有 UART からデータを読み取るスクリプトを作成しましたか?