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