我正在使用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;无论如何,似乎没有区别。零和数组是做什么的?