1

簡単な理論上の質問があります。私が知っているDMAには、通常、半分完全または完全な割り込みがあります。周辺機器からのデータ転送にDMAを使用する場合、データがdma転送境界にない可能性があるため、すべてのデータを確実に取得するにはどうすればよいですか。

たとえば、シリアルポートが5バイトを送信する場合、最初の4つを組み合わせて(dmaサイズが4と仮定して)割り込みを取得しますが、5番目のバイトは何も送信しません。そのような問題を解決するために人々が通常使用する方法は何ですか。

4

1 に答える 1

2

私の最善のアプローチはこれです:

  • DMA メモリ領域をセットアップします。アドレス0x2から0x1000だとしましょう
  • シリアル デバイスは、循環バッファとしてこの領域にバイトを書き込みます。
  • シリアル デバイスが書き込むたびに、「書き込みポインタ」を更新し、バイト 0x0 と 0x1 に保存します。
  • PC ホストは、書き込みポインターを dma し、それ自体の読み取りポインターと比較できます。読み取りポインターは PC ホスト上に保持でき、DMA をまったく処理しません。次に、PC は読み取るメモリの量を認識し、アンダーフローまたはオーバーフローが発生したかどうかも認識します。

これは、あなたが望むものの良い出発点になるはずです。

于 2013-12-04T05:05:05.933 に答える