我正在使用C8051F320並將我的固件基於HID示例固件(例如BlinkyExample)。瞭解雙緩衝區
IN和OUT報告每個長度爲64B(一個64B數據包)。
我啓用ADC並將其設置爲10kSps。每個ADC中斷,一個採樣都存儲在一個數組中。當採集足夠的樣本來填充分組時,發送IN分組。
軟件發送一個報告告訴固件要返回多少報告。
1)示例固件使用EP1,它有128B。它將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 =(unsigned char *)& ONES_PACKET ;.設置char * = char *的地址對我來說似乎不正確。我將它修改爲DATAPTR =(unsigned char *)ONES_PACKET;無論如何,似乎沒有區別。零和數組是做什麼的?