1

stm32f2xxのDACペリフェラルをプログラミングしています。バイト(サウンド)の配列があり、サンプルレート=8Kの信号を生成したいと思います。

今私の質問は:サンプルレートを指定するにはどうすればよいですか?

注:私はたくさんググった。DMAを使用してトラングル波の生成と正弦波の生成のみを取得しています。DMAを使いたくない。

助けてくれてありがとう...よろしく、

4

3 に答える 3

4

DMA を使用せずに DAC から波形を再生するのは現実的ではありません。サンプルを使用して DMA をセットアップし、タイマーをトリガーとして使用するように DAC をセットアップします。次に、目的のサンプル レートでトリガーするようにタイマーを設定します。

于 2012-08-02T16:39:08.960 に答える
2

私はTJDに同意します。一般に、DMAなしでこれを行うことは実用的ではありませんが、特に低いサンプルレートでは不可能ではありません。

タイマーセットを使用して、1/8000秒ごとに固定タイムベースとしてトリガーすることができます。そこから、割り込みルーチンは次のサンプルをDACにロードする必要があります。サンプルレートは、タイマーのタイムベースを変更することで変更できます。

正しいサンプルをバッファーに移動するコードを作成する場合と比較して、DMAコントローラーを構成するコードを作成する場合も同様の作業になります。ただし、DMAアプローチの方が信頼性が高く、サンプルレートのジッターが少なくなり、コアを解放して、必要になる可能性のある他のコードを実行できるようになります。実際、TIM / DMA / DACのセットアップを使用すると、コアを停止したり、周辺機器のクロックを実行し続けるスリープモードに入ることができる場合があります。

于 2012-08-22T18:52:35.207 に答える
0

はい、私も TJD に同意します。
DMA の使用は効率的であり、他のタスクのために CPU を解放します [良い]。
ソフトウェア(ビジーループのあるコア)でタイミングを管理する[悪い]では、良い結果が得られません。(そのため、タイミングにはタイマーを使用してください[良い])。
コピーの場合、特定の時間間隔 (ビジー ループまたはタイマー タイムアウトから) の後に DAC レジスタへのコピーを行うために CPU を専用にする必要があります。[悪い]

最後に、DMAとタイマーを接続することをお勧めします。タイムアウトすると、DMAはデータをDACレジスタにコピーします[良い]。このソリューションは難しそうに見えますが、実際には、セットアップするとはるかに簡単に操作できます。
[注: このようなことを理解しようとしている/始めようとしている人の視点で書かれています]

于 2015-08-04T23:06:27.573 に答える