私はS32DS IDEとRTD 3.0を使っています。SPIでDMAを起動する方法や、ステップバイステップの手順や、もしあれば他の例コードがあれば教えてもらえますか?
ご回答ありがとうございます。
この作業はs32k322 MCUで行ってください
こんにちは@ershi
RTDにはDMAを用いたSPI通信用の2つの例コードが付属しており、1つは低レベルドライバ(Ip)を用い、もう1つは高レベルドライバ(MCAL)を使用します。例のインポート方法については、HOWTO: S32 Design Studio - Create a New S32DS Project from Example Threadを参照してください。
また、スレッドの 例であるS32K31 SPI Multiple Packet Transmit and Receive: Solution for DMA Cache Issueの例を参照することもできます。
BR、VaneB
こんにちは@ershi
これらの例はS32K322向けに特別に設計されているわけではありませんが、リファレンス・マニュアルに特に記載されていない限り、S32K3 ファミリ全体で機能性は概ね同じです。したがって、このプロジェクトを実装の参考として活用し、必要に応じてデバイスに合わせて調整することができます。
すべて設定しましたが、最初は動作せず、(Lpspi_Ip_AsyncTransmit)でLPSPI_IP_STATUS_SUCCESSとして返され、2回目は失敗と表示されますLPSPI_IP_STATUS_FAIL、DMAなしでこのAPIを使ってデータをSPI経由で送信できますLpspi_Ip_SyncTransmit()いくつかの設定スクリーンショットを添付しました。
こんにちは@ershi
こんにちは、 @VaneBさん
RMとIntCtrl_IPドライバの設定のスクリーンショットと、詳細な参考のために短い動画クリップを添付しました。
LPSPIの設定ページで1つの違いに気づきました。SPI GeneralタブのSpi_Phy_TxDmaChannelの項目で、TX設定とRX設定で名前が異なっています。
追加情報が必要な場合はお知らせください。
InterruptsInterruptsInterruptsInterruptsInterruptsInterruptsInterrupts割り込み
RMRMRMRMRMRMRMRM
こんにちは@ershi
情報を共有していただきありがとうございます。
一つだけ気づいたことがあります。Dma_Ipドライバー構成では、DMA_SPI_CALLBACK_0を割り込みコールバックとして定義しています。しかし、LPSPI DMAのコールバックはドライバーから既に提供されており、Lpspi_Ip_Irq.cで見つけることができますファイル。
LPSPI2の場合、設定するコールバックは以下のとおりです。
こんにちは、 @VaneBさん
ご説明いただきありがとうございます。
Dma_Ip設定を更新し、LPSPI2ではTXとRX DMAチャネルがLpspi_Ip_Irq.cからのコールバックを使うようになりました。
TX DMAチャネルのLpspi_Ip_LPSPI_2_IrqTxDmaHandler
RX DMAチャネルnxpのLpspi_Ip_LPSPI_2_IrqRxDmaHandler
しかしながら、私の環境ではDMAベースのLPSPI転送が期待通りに動作していません。参考までに、現在の設定画面のスクリーンショットを添付しました。他に調整すべき設定があれば教えてください。
こんにちは@ershi
SPIコミュニケーションをどのように実装しているのか教えていただけますか?また、以前共有したサンプルコードをテストしてみましたか?
こんにちは、 @VaneBさん
以前の設定を削除し、SPIデータはDMA経由で送信されるようになりましたが、データが一致しないという問題が発生しています。
#define RX_MSG_SIZE (15U)
#define TX_MSG_SIZE (15U)
uint8_t txBuffer_check[TX_MSG_SIZE] = {0x48,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15};
uint8_t rxBuffer_check[]={0};
if(Lpspi_Ip_AsyncTransmit(&Lpspi_Ip_DeviceAttributes_SpiExternalDevice_1_Instance_2_BOARD_InitPeripherals,txBuffer_check,rxBuffer_check,TX_MSG_SIZE,spi_DMA_Function) == LPSPI_IP_STATUS_SUCCESS)
{
}
こんにちは@ershi
LPSPI2のSOUT信号をSINに直接接続していますか、それともロジックアナライザを使用して送受信データを検証していますか?
こんにちは、 @VaneB さん。
コードを書き直したところ、今は完璧に動作しています。データは正しく入力されています。
ご協力ありがとうございました。