私はC8051F320を使用しており、HIDサンプルファームウェア(BlinkyExampleなど)でファームウェアをベースにしています。ダブルバッファの理解
INレポートとOUTレポートはそれぞれ64Bの長さです(1つの64Bパケット)。
ADCを有効にして、10kSpsに設定しました。 ADCが割り込みするたびに、サンプルがアレイに格納されます。パケットを満たすのに十分なサンプルが取られると、INパケットが送信されます。
ソフトウェアは、返されるレポートの数をファームウェアに通知するレポートを送信します。
1)ファームウェアの例では、128BのEP1を使用しています。 EPをそれぞれINとOUT、64Bに分割します。
ファームウェアは、各INレポートの最初のサンプルを10kSpsでドロップします。 5kSpsでは正常に動作します。
2)EP1をダブルバッファーに変更しましたが、現在はわずか32Bです。それにもかかわらず、10kSpsデータのINレポートのストリーミング1000sは素晴らしいです(ソフトウェアでサンプリングされた正弦波のFFTによって確認されます)。
3)EP2を使用するようにファームウェアを変更しました。これは256Bの合計を持つため、分割とダブルバッファリングの場合は64Bになります。
a)ここでも、10kSpsで、各パケットの最初のサンプルが廃棄されます。どうして?それは5kSpsで正常に動作します。
実際には、ダブルバッファリングの仕組みを視覚化することはできません。サンプルレートがHID転送レートより速い場合、FIFOは関係なくオーバーフローします。ダブルバッファリングはどのように役立ちますか?しかし、ダブルバッファリングを有効にするためには、パケットサイズを半減する必要があります。
b)EP1からEP2への参照を切り替えながら、F3xx_USB0_Standard_Requests.cにこのコードがあります。DATAPTR =(符号なしchar *)& ONES_PACKET ;. char *のchar * =アドレスの設定は、私にとっては正しいとは思われません。私はそれをDATAPTR =(unsigned char *)ONES_PACKETに変更しました。いずれにせよ、違いはないようです。 0と1の配列は何をしますか?あなたのHID記述子に応じて、それははるかに遅くすることができます -