如圖 8-26 所示,AMC131M01 有兩個用于保存轉(zhuǎn)換數(shù)據(jù)的內(nèi)部數(shù)據(jù)緩沖器:一個 ADC 輸出緩沖器 和一個 FIFO 緩沖器。每個緩沖器一次只能保存一個轉(zhuǎn)換結(jié)果。DOUT 上的數(shù)據(jù)輸出始終來自 FIFO 緩沖器。
每當 ADC 生成新的轉(zhuǎn)換數(shù)據(jù)時,ADC 輸出緩沖器都會立即用新數(shù)據(jù)進行更新。然而,F(xiàn)IFO 緩沖器更新取決于主機的前一次轉(zhuǎn)換數(shù)據(jù)檢索。有三種情況:
- 如果在新的轉(zhuǎn)換數(shù)據(jù) (N+1) 可用時存儲在 FIFO 緩沖器中的轉(zhuǎn)換數(shù)據(jù) (N) 已被主機讀取,則 FIFO 緩沖器將更新為新的轉(zhuǎn)換數(shù)據(jù) (N+1)。在這種情況下,ADC 輸出緩沖器和 FIFO 緩沖器中的數(shù)據(jù)同時更新(即,兩個緩沖器現(xiàn)在保存相同的轉(zhuǎn)換數(shù)據(jù) N+1)。
- 如果在新的轉(zhuǎn)換數(shù)據(jù) (N+1) 可用時存儲在 FIFO 緩沖器中的轉(zhuǎn)換數(shù)據(jù) (N) 尚未 被主機讀取,則 FIFO 緩沖器不 會更新并仍然保存先前的轉(zhuǎn)換數(shù)據(jù) (N),而 ADC 輸出緩沖器現(xiàn)在保存新的轉(zhuǎn)換數(shù)據(jù) (N+1)。在這種情況下,ADC 輸出緩沖器 (N+1) 和 FIFO 緩沖器 (N) 之間的數(shù)據(jù)內(nèi)容不同。主機從 FIFO 緩沖器讀取轉(zhuǎn)換數(shù)據(jù) N 后,F(xiàn)IFO 緩沖器將更新為轉(zhuǎn)換數(shù)據(jù) N+1。然后主機可以檢索轉(zhuǎn)換數(shù)據(jù) N+1。
- 如果存儲在 FIFO 緩沖器中的轉(zhuǎn)換數(shù)據(jù) (N) 尚未 被主機讀取,但同時有兩個 新的轉(zhuǎn)換數(shù)據(jù)可用(即 ADC 輸出緩沖器已使用轉(zhuǎn)換數(shù)據(jù) N+2 更新),則存在一種特殊情況。在這種情況下,在 ADC 輸出緩沖器用轉(zhuǎn)換結(jié)果 N+2 更新的同時,F(xiàn)IFO 緩沖器用轉(zhuǎn)換結(jié)果 N+2 更新(即兩個緩沖器現(xiàn)在保存相同的轉(zhuǎn)換數(shù)據(jù) N+2)。這意味著轉(zhuǎn)換數(shù)據(jù) N 和 N+1 丟失,主機無法再檢索這些數(shù)據(jù)。
表 8-10 總結(jié)了新轉(zhuǎn)換數(shù)據(jù) (N+1) 可用時的 ADC 輸出緩沖器和 FIFO 緩沖器操作。
表 8-10 新的轉(zhuǎn)換數(shù)據(jù)可用:ADC 輸出緩沖器和 FIFO 緩沖器的操作
| SPI 歷史記錄 |
在時間 t = S 時可用的新轉(zhuǎn)換數(shù)據(jù) |
ADC 輸出緩沖器內(nèi)容 (t < tS) |
FIFO 緩沖器內(nèi)容 (t < tS) |
ADC 輸出緩沖器內(nèi)容 (t > tS) |
FIFO 緩沖器內(nèi)容 (t > tS) |
| FIFO 數(shù)據(jù) N 已被主機讀取 |
N+1 |
否 |
否 |
N+1 |
N+1 |
| FIFO 數(shù)據(jù) N 尚未被主機讀取 |
N+1 |
否 |
否 |
N+1 |
否 |
| FIFO 數(shù)據(jù) N 尚未被主機讀取 |
N+2 |
N+1 |
N |
N+2 |
N+2 |
以下三個示例使用簡化符號說明了 ADC 輸出和 FIFO 緩沖器的行為,以指示每個緩沖器中存儲了哪些轉(zhuǎn)換數(shù)據(jù):[ADC 輸出緩沖器中的樣本數(shù) | FIFO 緩沖器中的樣本數(shù)]。
示例 1:主機在結(jié)果可用后立即讀取轉(zhuǎn)換結(jié)果
- 當?shù)谝淮无D(zhuǎn)換(結(jié)果 1)完成時,該結(jié)果將同時置于 ADC 輸出緩沖器和 FIFO 緩沖器中 [1 | 1]。
- 如果主機在轉(zhuǎn)換完成后立即讀取轉(zhuǎn)換結(jié)果 1,則緩沖器的內(nèi)容保持為 [1 | 1]。如果需要,主機可以在轉(zhuǎn)換結(jié)果 2 完成之前多次從 FIFO 緩沖器讀取轉(zhuǎn)換結(jié)果 1。
- 當轉(zhuǎn)換結(jié)果 2 完成時,結(jié)果再次置于 ADC 輸出緩沖器和 FIFO 緩沖器中 [2 | 2]。
- 如果主機在第三次轉(zhuǎn)換完成之前讀取結(jié)果,則會讀取結(jié)果 2,緩沖器保持為 [2 | 2]。
示例 2:主機錯過讀取一個轉(zhuǎn)換結(jié)果
- 當?shù)谝淮无D(zhuǎn)換(結(jié)果 1)完成時,結(jié)果將同時置于 ADC 輸出緩沖器和 FIFO 緩沖器中 [1 | 1]。
- 如果主機在第二次轉(zhuǎn)換完成之前錯過了從 FIFO 緩沖器讀取結(jié)果 1,則 ADC 輸出緩沖器保存結(jié)果 2,F(xiàn)IFO 緩沖器仍然保存結(jié)果 1 [2 | 1]。
- 如果主機現(xiàn)在在第三次轉(zhuǎn)換完成之前讀取數(shù)據(jù),則會讀取結(jié)果 1。緩沖器的內(nèi)容隨后更新為 [2 | 2]。
- 主機的另一個轉(zhuǎn)換數(shù)據(jù)讀取請求會在 DOUT 上移出結(jié)果 2。緩沖器保持為 [2 | 2]。
- 現(xiàn)在,當?shù)谌无D(zhuǎn)換完成時,兩個緩沖器都會使用結(jié)果 3 進行更新 [3 | 3]。
示例 3:主機錯過讀取兩個連續(xù)的轉(zhuǎn)換結(jié)果
- 當?shù)谝淮无D(zhuǎn)換(結(jié)果 1)完成時,結(jié)果將同時置于 ADC 輸出緩沖器和 FIFO 緩沖器中 [1 | 1]。
- 如果主機在第二次轉(zhuǎn)換完成之前錯過了從 FIFO 緩沖器讀取結(jié)果 1,則 ADC 輸出緩沖器保存結(jié)果 2,F(xiàn)IFO 緩沖器仍然保存結(jié)果 1 [2 | 1]。
- 現(xiàn)在,如果第三次轉(zhuǎn)換完成但主機仍未從 FIFO 緩沖器檢索數(shù)據(jù),則結(jié)果 3 將覆蓋 ADC 輸出和 FIFO 緩沖器中的數(shù)據(jù) [3 | 3]。
- 在這種情況下,轉(zhuǎn)換結(jié)果 1 和結(jié)果 2 都會丟失,無法再被主機讀取。
根據(jù) ADC 的內(nèi)部結(jié)構(gòu)(包括 ADC 輸出緩沖器和 FIFO 緩沖器),DRDY 引腳的行為如下所述:
- 如果主機在每次新轉(zhuǎn)換數(shù)據(jù)可用時讀取轉(zhuǎn)換數(shù)據(jù),則 DRDY 將遵循數(shù)據(jù)就緒 (DRDY) 部分中所述的格式,具體取決于 MODE 寄存器中的 DRDY_FMT 位:當 DRDY_FMT 位為 0b 時,通過以下方式來指示新數(shù)據(jù):DRDY 從高電平變?yōu)榈碗娖讲⒈3值碗娖街钡剿修D(zhuǎn)換數(shù)據(jù)移出器件,或者保持低電平并在下一次 DRDY 轉(zhuǎn)換為低電平之前短暫變?yōu)楦唠娖?。?DRDY_FMT 位為 1b 時,新數(shù)據(jù)由 DRDY 引腳上的短負脈沖指示。
- 如果 DRDY_FMT 位為 0b 并且主機在下一次轉(zhuǎn)換完成之前沒有從 FIFO 緩沖器讀取轉(zhuǎn)換數(shù)據(jù),則 DRDY 保持低電平,并在 DRDY 下一次轉(zhuǎn)換為低電平之前短暫變?yōu)楦唠娖剑ū硎拘碌霓D(zhuǎn)換)。
- 如果 DRDY_FMT 位為 1b 并且主機在下一次轉(zhuǎn)換完成之前沒有從 FIFO 緩沖器讀取轉(zhuǎn)換數(shù)據(jù),則器件會跳過一個 DRDY 脈沖,并且在數(shù)據(jù)就緒后的第二個實例之前不提供另一個 DRDY 脈沖。因此,如果 DRDY_FMT 位為 1b 并且主機根本不讀取轉(zhuǎn)換數(shù)據(jù),則 DRDY 引腳將以轉(zhuǎn)換速率一半的速率進行切換。