主题中讨论的其他器件:HALCOGEN
尊敬的 TI 支持:
此 TT 与其他帖子相关:
简而言之:
当我们使用 DMA 模块时、4个 ADC 转换的结果似乎在一个未定义的时间后交换、实际上 ADC 结果无效、并且同一 ADC 通道再次被触发。 因此、结果的新值不在预期的 ADC 缓冲区中、并且 DMA 将无效值复制到应用缓冲区中。
为了解决这个问题、我们将 DMA 模块的元素计数设置为8、即使 G2_blocks 仍然为4。
其理念是在触发 DMA 请求后 DMA 将复制所有 ADC->G2BUF[0-7]。
在我们的应用中、我们会丢弃所有无效结果。
使用一个在10 DMA 帧结束时触发的块传输 IRQ (帧计数= 10)、我们测量每个 IRQ 之间的时间。
在一个未定义的时间之后、IRQ 被每2-3ms 而不是每10ms 触发一次。
我们不知道为什么 IRQ 会提前触发。
作为新的权变措施、我们考虑在两个不同的 DMA 请求行(11和17)上使用 ADC 端口 A 和端口 B。 同时、我们将 FIFO 大小从16减小到2或4。
A)您会推荐什么?
b)顺便说一下、如果我们使用大于8的 FIFO 大小、结果存储在哪里? 16是 Halcogen 的默认值、尽管只有8个缓冲寄存器?
我们启用大小为2的 G2_BLK_Xfer。 在我们的应用中、我们检查是否设置了 G2_EMPTY 标志、并且仅在该位未设置时复制值。
c) ADC 没有有效数据意味着什么?
d)块传输何时触发 DMA 请求? 如果我们将 G2_BLK_Xfer 设置 为2、是否会在第二次有效或次级测量之后生成请求?