本文的內容原本是打算放在我剛出版的《專業嵌入式軟件開發 — 全面走向高質高效編程》一書中的。但後來因爲將該書定位爲偏向軟件,因此將本文所在的章所有刪除了,打算將之放在我另外一本偏向硬件的書中。最近,因爲網友在個人博客空間中問起如何經過3/8譯碼器擴展地址空間,因此在此將之整理與你們分享。
假設咱們但願實現圖1所示的採用3/8譯碼器將處理器的CS1片選信號擴展成兩個以分別控制以太網芯片和Flash芯片。爲了方便解釋,進一步假設CS1的片選空間是0xFFE00000~0xFFFFFFFF。咱們但願通過片選擴展之後,Flash位於0xFFE00000~0xFFEFFFFF地址空間,而以太網芯片位於0xFFF00000~0xFFFFFFFF地址空間。
圖1
先來講一說3/8譯碼器的功能是什麼,從名字來看就是將3位比特轉換爲8(2的3次方)根獨立的信號線。3/8譯碼器有三根輸入信號線(圖1中74LS138的A、B和C)和八根輸出信號線(Y0~Y7)。注意:圖1中如在管腳名稱上加了一條橫線則表示該信號是低電平有效,不然是高電平有效。
圖 2是74LS138譯碼器的真值表,其表達了輸入與輸出之間的對應關係,表中的「X」表示信號是高阻態。從圖中能夠看出,這一3/8譯碼器的做用,其實就是將CBA的二進制數值分別轉換爲Y0~Y7中一根線的低電平信號。從圖 1中的原理圖來看,CS1與G1是相連的,即只有當CS1爲高電平有效時,Y0~Y7纔會有低電平信號輸出。另外,Y6和Y7是被用做片選信號擴展的兩根管腳,當Y6爲低電平時,CBA三根信號線的電平組合分別是110,而Y7爲低電平時CBA的組合變爲了111。如何將CBA三根信號線與處理的地址線鏈接,以實現片選信號擴展呢?
圖2
圖 3列出了Flash和以太網芯片各自開始地址所對應的比特位,其中只列出了四個比特。能夠看出,A20地址線將能決定是選擇哪一塊芯片。若是將A22與74LS138的C相連、A21與74LS138的B相連以及A20與74LS138的A相連,則徹底能夠實現將Y6和Y7做爲兩個片選信號,且各片選信號的地址空間也是咱們所但願的。
圖3