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