Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

SPI+DMAを使ってデータの送受信をしているのですが、割り込みサービス関数を2つ書く必要があるのですが、この2つの割り込みサービス関数がどのような条件で起動されるのか、ずっと探しても分かりませんでした。やった? 経験、懇願

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/td-p/659630

0 件の賞賛
15 返答(返信)
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは、

SPI を設定するには 2 つの方法があります。 QSPI または ASCLIN の SPI モードを使用しますか?割り込みサービス関数を 2 つ書くということは、SPI の送受信時を指すとおっしゃいましたが? 1.1/1.2は ASCLIN モード、2はQSPI方式です。

 

1.1) これは、ASCLIN が DMA をトリガーするように SPI モードを設定するためのリファレンスとして使用できます。

ASCLIN_SPI_Master_1_KIT_TC375_LK

サービス選択dma: spiMasterConfig .interrupt .typeOfService= IfxSrc_Tos_dma ; //サンプルコードはIfxSrc_Tos_cpu0です
 
1.2) dma の設定方法は次のとおりです。
 
2) このリファレンスは、QSPI モジュールを使用して SPI と DMA を設定する方法を示しています。
関連参照関数: initQSPI2Master、 IfxQspi_SpiMaster_initModuleConfig、 IfxQspi_SpiMaster_initChannel
 
DMA トリガーは、TXFIFO への書き込みおよび RXFIFO の読み取り時に生成されます。特定の割り込み生成モードについては、37.3.6 を参照してください。
 
 
 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/659786

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

はい、サービス関数の送受信を行います

QSPI+DMAを使用しているはずですが、いつ割り込みサービス関数に入ったのか分かりません。下の図の2つの関数だけです。

_0-1702602073807.png

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660235

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは、

入らないと反応を中断するというのか、それとも毎回入るか分からないということなのでしょうか。これは、DMA トランザクションが完了するたびにトリガーされる CPU0 割り込みである必要があります。

Kunqiao_L_0-1702608083945.png

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660342

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

はい、いつ入ったかはわかりません。いつ入ったか知りたいだけです。標識がいくつか変わってからでないと入れないのは当然ですが、私はこの標識を見つけたことがありません。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660347

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは。サンプル コードは、DMA トランザクションの完了時に CPU0 に割り込むように構成されています。

割り込みステータスはレジスタ ICR です。

DMA については、ユーザー マニュアル 18.4 を参照してください。最初に次のレジスタを確認します: CHCSRc (DMARAM チャネル c 制御およびステータス レジスタ)、TSRc (DMA チャネル c トランザクション ステート レジスタ)

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660371

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

検索しましたが、変更は見つかりませんでした。

新しい送信方法を使用しました。つまり、 CPU0 割り込みをオンにせず、DMA チャネルだけをオンにして、以下の割り込みサービス関数を実行します。これも可能です。

_0-1702617083355.jpeg_1-1702617096056.jpeg

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660477

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

これは可能です。つまり、各 DMA トランザクション (構成は 1 つの転送、1 つの移動、1 バイトの DMA のみである必要があります) は、この DMA の完了後に割り込みをトリガーせず、ISR に割り込む必要はありません。

IfxQspi_SpiMaster_isrDmaTransmit。 while を使用して、次の送信を開始させます。
 
 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660504

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

中断と私の方法は同じ伝達効果を持っています。デバッグすると、たとえば 16 個の 8 ビット数値が送信される場合、最初に 15 個が送信され、次に最後のものが割り込み関数で送信されることがわかります。

割り込みをオンにしない私のモードでも、最初に 15 個のデータを送信し、その後最後のデータを送信します。

質問: これはなぜですか?チップのマニュアルではよく分かりませんでしたが、伝達効果という点では確かにこの設定が正しいですね。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660522

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

後ほどサンプルコードで試してみますが、デバッグしたコードとサンプルコードの違いは何でしょうか? ご指摘の点以外は、割り込みが許可されておらず、バッファサイズが 8 から 16 に変更されています。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660533

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

デバッグには 275D のサンプルコードを使用しましたが、スクリーンショットの変更を除いて、他の場所は変更されていません。

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660534

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは。SpiMaster_write および SpiSlave_write を実行するときに、SPI_BUFFER_SIZE に従って転送数を調整する必要がありました。したがって上記の効果が発生します

Kunqiao_L_0-1702638525294.png

Kunqiao_L_1-1702638552367.png

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660882

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは、このジョブ→残り - 1 とはどういう意味ですか? 意味がわかりません。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/661135

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

デバッグしたところ、確かに送信メカニズムが 1 つのデータを差し引いてすべてのデータを受信することになっていることがわかりました。

そこで問題は、なぜ 1 つのデータのデクリメントが発生するのかということですが、それは最後の送信に対する割り込みをトリガーするためでしょうか?

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/661139

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

この問題についてはよくわかりません。「-1」を使用しないようにしてみましたが、問題はありませんでした。SPI フレームが最後のフレーム (BACON.LAST) であるかどうかに関係している可能性があります。コードの所有者と話し合い、結果があればフィードバックをお送りします。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/661935

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

はい、いつ入ったかはわかりません。いつ入ったか知りたいだけです。標識がいくつか変わってからでないと入れないのは当然ですが、私はこの標識を見つけたことがありません。

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/SPI-DMA/m-p/660346

0 件の賞賛