看穿單片機(jī)第三節(jié):總線模型
總線模型
如果把CPU看作“帝都”,存儲(chǔ)器看作是“衛(wèi)城”,它們之間要互通往來(lái),就必然要修建道路,而這條道路又可以不斷延伸分支,將很多城市串連起來(lái)。這樣,城市兩兩之間便均可通行。這條“道路”就是總線!如圖1.11所示。(這些被串連起來(lái)的“城市”就猶如振南后面要講到的“CPU外設(shè)”)。
圖1.11 總線的結(jié)構(gòu)模型
好,現(xiàn)在CPU與存儲(chǔ)器之間的這條通路有了。此時(shí),CPU如果要讀取存儲(chǔ)器中地址為addr位置上的一個(gè)字節(jié),該如何作呢?這個(gè)過(guò)程主要分三步:(是不是想起了“把大象裝冰箱總共分幾步?”)
CPU首先告訴存儲(chǔ)器要讀取的地址;
等待存儲(chǔ)器將相應(yīng)地址上的數(shù)據(jù)取出來(lái);
CPU將數(shù)據(jù)取走。
更為形象地說(shuō)明如圖1.12所示。
圖1.12 CPU訪問(wèn)存儲(chǔ)器的主要過(guò)程
仔細(xì)想一下,這個(gè)過(guò)程的實(shí)現(xiàn)其實(shí)涉及幾個(gè)問(wèn)題:CPU如何將地址給存儲(chǔ)器?CPU如何知道存儲(chǔ)器已將數(shù)據(jù)準(zhǔn)備好?CPU又如何將數(shù)據(jù)取走?……總結(jié)起來(lái),主要是地址和數(shù)據(jù)的傳輸,以及它們之間的協(xié)調(diào)與控制。為了解決這一問(wèn)題,我們提出了這一模型,請(qǐng)看圖1.13。
圖1.13 CPU與存儲(chǔ)器之間的總線模型(讀數(shù)據(jù))
圖中所看到的連線就是實(shí)實(shí)在在的用于傳輸二進(jìn)制信號(hào)(0或1)的導(dǎo)線。CPU首先將地址輸出到地址總線上(很顯然地址線的數(shù)量決定了CPU可以尋址的空間范圍),然后再將RD信號(hào)置為0(RD平時(shí)為1),告訴存儲(chǔ)器地址已經(jīng)給出,請(qǐng)準(zhǔn)備好數(shù)據(jù)并將其輸出到數(shù)據(jù)總線上(數(shù)據(jù)線的數(shù)量決定了CPU的數(shù)據(jù)吞吐量,這也是衡量CPU位數(shù)的標(biāo)準(zhǔn),51單片機(jī)是8位單片機(jī),則它每次只能讀到一個(gè)字節(jié)的數(shù)據(jù),ARM是32位的,所以它可以一次性讀取一個(gè)字)。CPU對(duì)數(shù)據(jù)總線進(jìn)行讀取,再將RD信號(hào)置1,整個(gè)過(guò)程便完成了。
那CPU如何向存儲(chǔ)器寫(xiě)入數(shù)據(jù)呢?其實(shí)道理是一樣的,如圖1.14所示。
圖1.14 CPU與存儲(chǔ)器之間的總線模型(寫(xiě)數(shù)據(jù))
仍然是由CPU先給出地址,再向數(shù)據(jù)總線給出要寫(xiě)入的數(shù)據(jù),然后將WR信號(hào)置0,告訴存儲(chǔ)器地址與數(shù)據(jù)已經(jīng)就緒,請(qǐng)予以處理。最后將WR信號(hào)置1即可。
綜上所述,CPU中有三大總線:地址總線、數(shù)據(jù)總線與控制總線。這一模型最終如圖1.15所示。
圖1.15 CPU與存儲(chǔ)器之間的總線模型
如果我們把CPU訪存過(guò)程中,各總線信號(hào)上的電平隨時(shí)間變化的示意圖畫(huà)出來(lái)的話,它將是這樣的,如圖1.16所示。
圖1.16 CPU總線操作的時(shí)序圖
上圖就是CPU總線操作的時(shí)序圖(Timing Digram)。它是描述接口時(shí)序與信號(hào)協(xié)議最為直觀的形式。看懂時(shí)序圖是我們學(xué)習(xí)電子和單片機(jī)技術(shù),使用C語(yǔ)言正確編寫(xiě)底層驅(qū)動(dòng)程序的根本基礎(chǔ)。