主题中讨论的其他器件:ADS8598S
我正在进行一个时序关键型 ADC 卸载过程、我已经开始工作了、但下游处理所需的时间比我想的长大约50%。 ADC 是一款8通道18位 SAR、我使用20MHz SPI (QSSI)和 UDMA 在大约4.8us 的时间内卸载它。 这将为我提供一个9 x 16位块、其中8 x 18位样本通过"条形轮询"进行采样。 目前、我正在使用 UDMA 存储器散聚传输将18位采样解压为32位字。 然后、我将32位字移出以使数据正确对齐、并将结果复制到输出队列。 使用本地优化代码时、对齐和复制过程大约需要1.5 us。
但是、在处理器以60 MHz 运行时、使用处理器内存时、散聚 UDMA 过程似乎需要大约6 us 的时间。 该过程进行8次传输、每次传输3个字节。 总线没有其他 DMA 处理争用。 理想情况下、我希望在3us 以下进行解压缩处理、这使我能够以100kHz 的频率运行 ADC。
6us 对于8 x 3字节 UDMA 散聚交易是否听起来正确?
哪些因素可能会影响总交易时间?
我的设置代码是:
//设置散聚处理以从 DMA 解压18位样本 //缓冲区到32位样本块 uint8_t *字节源= reinterpret_cast (sDMARxBuffer); size_t taskIdx = 0; while (*输入枚举&& taskIdx < 8) { size_t srcByteOffset =(*输入枚举-1)* 18 / 8; ++输入基准; sSampleXferTable[taskIdx]= uDMATaskStructEntry( 3、UDMA_SIZE_8、 UDMA_SRC_INC_8、字节源+ srcByteOffset、 UDMA_DST_INC_8、sSamplesUnpackBuffer + taskIdx、 UDMA_ARB_2、 !*输入枚举? UDMA_MODE_AUTO:UDMA_MODE_MEM_散 射收集 ); ++taskIdx; } IntRegister (UDMA_INT_SW、CommitSamples); IntEnable (UDMA_INT_SW); uDMAChannelAttributeEnable (UDMA_CHANGE_SW、0); //提供散聚 DMA 处理高优先 级 UDMA_PRIOSET_R = 1 << UDMA_CHANGE_SW; //设置解压指针 uDMAChannelScatterGatherSet (UDMA_CHANGE_SW、8、sSampleXferTable、0);
我是否可以通过另一种方法来解决此问题? 一种可能是 ADC 卸载和样本解压缩 UDMA 流程重叠、但我在这方面没有取得太大成功。