2016-06-22 30 views
0

私は、STM32F446を使用して3倍のSPI(私はそのすべてがマスターです)とSDIOインターフェイスを必要とするアプリケーションに取り組んでいます。STM32F4 DMAは並行して動作できますか?

2個のSPI(SPI1とSPI2)は、1msごとに読み取る必要があるセンサーです。 SPI1の場合、1バイトを書き込む必要があり、それに対する応答は値になります。 SPI2の場合、1バイトを書き込んだ後に6を読み出す必要があります。

3番目のSPI(SPI3)とSDIOは通信/ロギング用であり、どちらも固定周期のデータを送信する必要はありません。

STM32F46x manual、セクション9を見て、私は周辺機器とDMA転送をトリガすることができますように、それは見ていません(それはあまりにも悪いです)interuptsが、私はすべてのことのように行うことができます。

  1. タイマーは、すべての割り込み1ms:ISR SPI1およびSPI2 DMA転送がトリガされます。 DMA転送は、受信したセンサデータでバッファを満たす。
  2. 私はSDIOまたはSPI3に書き込む必要があるたびに、SPI1とSPI2のDMA転送より優先度の低いDMA転送を開始します。

SPI1とSPI2は2つのDMAコントローラを搭載しているため、SPI2とSDIOの同時発生時にコントローラがフリーになるまでブロックされてしまうと思います。そうですか?

+0

私は既にSPIをDMAで最大速度で実行していますが、SPI1とSPI2は遅いため(1msはstm4では非常に遅いです)、割り込みに1を設定してメインでチェックしますフラグが設定されている場合はコードループになります。 DMAを使用する場合は、まったく同じようにする必要があるため、DMAを再起動するたびに速度が上がりません。 – hamboy75

答えて

2

SPI1の場合、1バイトを書き込む必要があり、その応答は の値になります。設定するときSPI2のために、私は1つのバイトを書き込み、SPIは、読み取りと書き込みが同時に発生すると、あなたはダミーの1を書くことによって、バイトを読み取ることができること6.

ノートを読む必要がある、あなたは、このことを考慮すべきです送信する単語の数。

DMA転送は、受信したセンサデータでバッファを満たします。

一部のSPIスレーブは、転送の間にCSをハイに設定しないかぎり正しく動作しません。これがセンサーの場合は、受信DMAストリーム割り込みで行う必要があります。 DMAが大きなバッファを自動的に埋めるように考えているなら、この場合は動作しません。

私は2つの DMAコントローラを持っているので、SPI1とSPI2は並列で実行できることを推測していると、彼らはSPI2と SDIOの同時に発生した場合、コントローラがあるまで、それは、後にはブロックされます無料です。その は正しいですか?

優先度の高い転送がDMA帯域幅を完全に占有しない限りブロックされずにインターリーブされます。 1バイト(少なくとも2サイクル/ビット)を転送するには、SPIが少なくとも16クロック・サイクルを必要とするため、SPI転送は実行できません。

関連する問題