NXPサポートの皆さん、こんにちは。
私はFlexCAN Enhanced RX FIFOとRTDを搭載したS32K388を使用しています。CPU割り込みなしで連続的なDMAベースのCAN受信を実現したいと考えています。
私の要望は以下の通りです。
MCU: S32K388
CAN: クラシックキャン、CAN FD無効
CANペイロード: 8バイト
FlexCAN拡張RX FIFO対応
DMA受信が有効
フィルターなしで 、どのCAN IDでもCANメッセージを受け取る必要があります。
DMAが受信したすべてのCANフレームを自動的に RAMソフトウェアのリングバッファに転送したいのです。
FlexCANの受信割り込みは不要です。
DMAのメジャーループ完了割り込みも不要です。
DMAは、CPUがFlexCAN_Ip_RxFifo()を再度呼び出すことなく、自動的に実行を継続するはずです。
理想的には、受信した各FIFO要素が即座にDMA転送を引き起こすべきなので、大きなFIFOウォーターマークを待ちたくありません。
RTDのソースコードを確認しました。FlexCAN_StartRxMessageEnhancedFifoData()で、ドライバがDMAを次のように設定していることがわかりました。
Source address = Enhanced RX FIFO output Source transfer size = 4 bytes Source offset = 4 bytes Destination transfer size = 4 bytes Destination offset = 4 bytes Minor loop size = 80 bytes Major loop count = num_enhanced_watermark EnMajorInt = TRUE DisAutoHwRequest = TRUE
現在のRTD実装では、有限のDMA転送を実行した後、停止するため、FlexCAN_Ip_RxFifo()を再度呼び出す必要があると理解しています。
私の質問は次のとおりです。
S32K388上で、eDMA TCDを設定して、FlexCAN Enhanced RX FIFO DMA要求が、CPU割り込みやソフトウェアの再武装なしに、受信したFIFO要素を円形RAMバッファに継続的に転送する設定は可能でしょうか?
特に、 Destination Modulo や他のeDMA TCD機能を使えば、この連続リングバッファを実装できますか?
もし可能であれば、具体的な構成を教えていただけるか、NXPの例やリファレンス実装を教えていただけませんか?
必要に応じてRTD FlexCANドライバーを修正したり、eDMA TCDを直接設定することも可能です。
よろしくお願いします!