
182
|
第六章
當然,如果 FIFO 深度有 16 位元組,只需要以 7.8 KHz(125 kHz/16)的速度觸發中
斷,也可以只在 FIFO 滿了的時候觸發,但如果延屬高於 128 us(1/7.8 kHz)會產生通
訊落後的情況,在半滿的時候中斷會較有餘裕,大約是以 15.6 kHz 的速度觸發中斷,
每次中斷只需要將位元組從接收 FIFO 移到 RAM 的其他位置,以及將傳送位元組移進
FIFO。
接著是 DAM,如果目標是達到最高吞吐量,將 RAM 分為兩塊,較小的部分放置區域變
數,較大的空間作為乒乓緩衝區。以 32 KB 的 RAM 為例,留下 2 KB 作為變數使用,
每個乒乓緩衝區 15 KB,代表每秒會有八次中斷,有很多時間能執行其他的作業。
表 6-2 比較了不同方式的差異,包含中斷的負擔(假設每個中斷有 10 循環的額外負載,
不算太大),DMA 緩衝也以不算太大的 521 byte 為基準。要注意採用 bit-bang 方式實作
時,會需要比 DMA 作法快 8000 倍的處理器,這還只是為了額外的負載! bit-bang 驅動
程式比 DMA 中斷複雜得多,DMA 只需要切換指標,以及在緩衝區滿了的時候設定處
理旗標。
表 6-2 DMA 快多少?
緩衝方式
Bit-Bang
介面
硬體
週邊介面
16 位元組 FIFO
(一半中斷 )
使用 512 位元組
緩衝的 DMA
中斷環境切換每秒需要的時脈數
(10 循環的額外負載)
20 MHz 1.25 MHz 156 kHz 2.44 ...