我使用的是 F28377D 'elfino' DSC。 我使用外部 ADC (AD7986)来获取18位样本。 ADC 将执行2MSPS、但这需要100MHz 的时钟频率。 DSC 有50MHz SPI 端口、但我无法使用它们、我正在使用 EMIF 的引脚。 因此、我将 PLLSYSCLK 设置为25MHz (40ns 周期)。 由于位宽限制为16、SPI 端口正在传输两个9位值。
我可以获取并存储以下数据和代码。 当我查看样本之间的时间时、它从3.76us 到3.84us 不等。 这相当于+/-1个时钟周期(40ns)。
是否可以使时间更短到一致的值? 我目前没有使用中断或 CPU 时钟计时器、这两种方法是否有帮助?
uint32 read_spi (){ int i; uint32 vsread //发送 ADC 虚拟数据 for (i=0;i<2;i++){ SpibRegs.SPITXBUF = 0; //SPI-B } //等待数据被接收 while (SpibRegs.SPIFFRX.bit.RXFFST!=2){} //转换 SPI-B 数据 Vsread = SpibRegs.SPIRXBUF; //加载 MS 9b Vsread <= 9; //向左移位9位 vsread |= SpibRegs.SPIRXBUF; //加载并合并 LS 9b Vsread = Vsread ^ 0x20000; //从二进制补码转换 返回 vsread ;}