如图 8-26 所示,AMC131M01 有两个用于保存转换数据的内部数据缓冲器:一个 ADC 输出缓冲器 和一个 FIFO 缓冲器。每个缓冲器一次只能保存一个转换结果。DOUT 上的数据输出始终来自 FIFO 缓冲器。
每当 ADC 生成新的转换数据时,ADC 输出缓冲器都会立即用新数据进行更新。然而,FIFO 缓冲器更新取决于主机的前一次转换数据检索。有三种情况:
- 如果在新的转换数据 (N+1) 可用时存储在 FIFO 缓冲器中的转换数据 (N) 已被主机读取,则 FIFO 缓冲器将更新为新的转换数据 (N+1)。在这种情况下,ADC 输出缓冲器和 FIFO 缓冲器中的数据同时更新(即,两个缓冲器现在保存相同的转换数据 N+1)。
- 如果在新的转换数据 (N+1) 可用时存储在 FIFO 缓冲器中的转换数据 (N) 尚未 被主机读取,则 FIFO 缓冲器不 会更新并仍然保存先前的转换数据 (N),而 ADC 输出缓冲器现在保存新的转换数据 (N+1)。在这种情况下,ADC 输出缓冲器 (N+1) 和 FIFO 缓冲器 (N) 之间的数据内容不同。主机从 FIFO 缓冲器读取转换数据 N 后,FIFO 缓冲器将更新为转换数据 N+1。然后主机可以检索转换数据 N+1。
- 如果存储在 FIFO 缓冲器中的转换数据 (N) 尚未 被主机读取,但同时有两个 新的转换数据可用(即 ADC 输出缓冲器已使用转换数据 N+2 更新),则存在一种特殊情况。在这种情况下,在 ADC 输出缓冲器用转换结果 N+2 更新的同时,FIFO 缓冲器用转换结果 N+2 更新(即两个缓冲器现在保存相同的转换数据 N+2)。这意味着转换数据 N 和 N+1 丢失,主机无法再检索这些数据。
表 8-10 总结了新转换数据 (N+1) 可用时的 ADC 输出缓冲器和 FIFO 缓冲器操作。
表 8-10 新的转换数据可用:ADC 输出缓冲器和 FIFO 缓冲器的操作
SPI 历史记录 |
在时间 t = S 时可用的新转换数据 |
ADC 输出缓冲器内容 (t < tS) |
FIFO 缓冲器内容 (t < tS) |
ADC 输出缓冲器内容 (t > tS) |
FIFO 缓冲器内容 (t > tS) |
FIFO 数据 N 已被主机读取 |
N+1 |
否 |
否 |
N+1 |
N+1 |
FIFO 数据 N 尚未被主机读取 |
N+1 |
否 |
否 |
N+1 |
否 |
FIFO 数据 N 尚未被主机读取 |
N+2 |
N+1 |
N |
N+2 |
N+2 |
以下三个示例使用简化符号说明了 ADC 输出和 FIFO 缓冲器的行为,以指示每个缓冲器中存储了哪些转换数据:[ADC 输出缓冲器中的样本数 | FIFO 缓冲器中的样本数]。
示例 1:主机在结果可用后立即读取转换结果
- 当第一次转换(结果 1)完成时,该结果将同时置于 ADC 输出缓冲器和 FIFO 缓冲器中 [1 | 1]。
- 如果主机在转换完成后立即读取转换结果 1,则缓冲器的内容保持为 [1 | 1]。如果需要,主机可以在转换结果 2 完成之前多次从 FIFO 缓冲器读取转换结果 1。
- 当转换结果 2 完成时,结果再次置于 ADC 输出缓冲器和 FIFO 缓冲器中 [2 | 2]。
- 如果主机在第三次转换完成之前读取结果,则会读取结果 2,缓冲器保持为 [2 | 2]。
示例 2:主机错过读取一个转换结果
- 当第一次转换(结果 1)完成时,结果将同时置于 ADC 输出缓冲器和 FIFO 缓冲器中 [1 | 1]。
- 如果主机在第二次转换完成之前错过了从 FIFO 缓冲器读取结果 1,则 ADC 输出缓冲器保存结果 2,FIFO 缓冲器仍然保存结果 1 [2 | 1]。
- 如果主机现在在第三次转换完成之前读取数据,则会读取结果 1。缓冲器的内容随后更新为 [2 | 2]。
- 主机的另一个转换数据读取请求会在 DOUT 上移出结果 2。缓冲器保持为 [2 | 2]。
- 现在,当第三次转换完成时,两个缓冲器都会使用结果 3 进行更新 [3 | 3]。
示例 3:主机错过读取两个连续的转换结果
- 当第一次转换(结果 1)完成时,结果将同时置于 ADC 输出缓冲器和 FIFO 缓冲器中 [1 | 1]。
- 如果主机在第二次转换完成之前错过了从 FIFO 缓冲器读取结果 1,则 ADC 输出缓冲器保存结果 2,FIFO 缓冲器仍然保存结果 1 [2 | 1]。
- 现在,如果第三次转换完成但主机仍未从 FIFO 缓冲器检索数据,则结果 3 将覆盖 ADC 输出和 FIFO 缓冲器中的数据 [3 | 3]。
- 在这种情况下,转换结果 1 和结果 2 都会丢失,无法再被主机读取。
根据 ADC 的内部结构(包括 ADC 输出缓冲器和 FIFO 缓冲器),DRDY 引脚的行为如下所述:
- 如果主机在每次新转换数据可用时读取转换数据,则 DRDY 将遵循数据就绪 (DRDY) 部分中所述的格式,具体取决于 MODE 寄存器中的 DRDY_FMT 位:当 DRDY_FMT 位为 0b 时,通过以下方式来指示新数据:DRDY 从高电平变为低电平并保持低电平直到所有转换数据移出器件,或者保持低电平并在下一次 DRDY 转换为低电平之前短暂变为高电平。当 DRDY_FMT 位为 1b 时,新数据由 DRDY 引脚上的短负脉冲指示。
- 如果 DRDY_FMT 位为 0b 并且主机在下一次转换完成之前没有从 FIFO 缓冲器读取转换数据,则 DRDY 保持低电平,并在 DRDY 下一次转换为低电平之前短暂变为高电平(表示新的转换)。
- 如果 DRDY_FMT 位为 1b 并且主机在下一次转换完成之前没有从 FIFO 缓冲器读取转换数据,则器件会跳过一个 DRDY 脉冲,并且在数据就绪后的第二个实例之前不提供另一个 DRDY 脉冲。因此,如果 DRDY_FMT 位为 1b 并且主机根本不读取转换数据,则 DRDY 引脚将以转换速率一半的速率进行切换。