第1章 ARM微處理器概述
本章簡(jiǎn)介ARM微處理器的一些基本概念、應(yīng)用領(lǐng)域及特點(diǎn),引導(dǎo)讀者進(jìn)入ARM技術(shù)的殿堂。
本章主要內(nèi)容:
- ARM及相關(guān)技術(shù)簡(jiǎn)介
- ARM微處理器的應(yīng)用領(lǐng)域及特點(diǎn)
?。?nbsp; ARM微處理器系列
?。?nbsp; ARM微處理器的體系結(jié)構(gòu)
?。?nbsp; ARM微處理器的應(yīng)用選型
1.1 ARM-ADVANCED <http://www.dzsc.com/stock-ic/ADVANCED.html> RISC Machines
ARM(ADVANCED <http://www.dzsc.com/stock-ic/ADVANCED.html> RISC Machines),既可以認(rèn)為是一個(gè)公司的名字,也可以認(rèn)為是對(duì)一類微處理器的通稱,還可以認(rèn)為是一種技術(shù)的名字。
1991 <http://www.dzsc.com/stock-ic/1991.html>年 ARM公司成立于英國(guó)劍橋,主要出售芯片設(shè)計(jì)技術(shù)的授權(quán)。目前,采用ARM技術(shù)知識(shí)產(chǎn)權(quán)(IP)核的微處理器,即我們通常所說(shuō)的ARM微處理器,已遍及工 業(yè)控制、消費(fèi)類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無(wú)線系統(tǒng)等各類產(chǎn)品市場(chǎng),基于ARM技術(shù)的微處理器應(yīng)用約占據(jù)了32位RISC微處理器75%以上的市場(chǎng)份 額,ARM技術(shù)正在逐步滲入到我們生活的各個(gè)方面。
ARM公司是專門從事基于RISC技術(shù)芯片設(shè)計(jì)開(kāi)發(fā)的公司,作為知識(shí)產(chǎn)權(quán)供應(yīng)商,本身不直接從 事芯片生產(chǎn),靠轉(zhuǎn)讓設(shè)計(jì)許可由合作公司生產(chǎn)各具特色的芯片,世界各大半導(dǎo)體生產(chǎn)商從ARM公司購(gòu)買其設(shè)計(jì)的ARM微處理器核,根據(jù)各自不同的應(yīng)用領(lǐng)域,加 入適當(dāng)?shù)耐鈬娐?,從而形成自己的ARM微處理器芯片進(jìn)入市場(chǎng)。目前,全世界有幾十家大的半導(dǎo)體公司都使用ARM公司的授權(quán),因此既使得ARM技術(shù)獲得更 多的第三方工具、制造、軟件的支持,又使整個(gè)系統(tǒng)成本降低,使產(chǎn)品更容易進(jìn)入市場(chǎng)被消費(fèi)者所接受,更具有競(jìng)爭(zhēng)力。
1.2 ARM微處理器的應(yīng)用領(lǐng)域及特點(diǎn)
1.2.1 ARM微處理器的應(yīng)用領(lǐng)域
到目前為止,ARM微處理器及技術(shù)的應(yīng)用幾乎已經(jīng)深入到各個(gè)領(lǐng)域:
1、工業(yè)控制領(lǐng)域:作為32的RISC架構(gòu),基于ARM核的微控制器芯片不但占據(jù)了高端微控制器市場(chǎng)的大部分市場(chǎng)份額,同時(shí)也逐漸向低端微控制器應(yīng)用領(lǐng)域擴(kuò)展,ARM微控制器的低功耗、高性價(jià)比,向傳統(tǒng)的8位/16位微控制器提出了挑戰(zhàn)。
2、無(wú)線通訊領(lǐng)域:目前已有超過(guò)85%的無(wú)線通訊設(shè)備采用了ARM技術(shù), ARM以其高性能和低成本,在該領(lǐng)域的地位日益鞏固。
3、網(wǎng)絡(luò)應(yīng)用:隨著寬帶技術(shù)的推廣,采用ARM技術(shù)的ADSL <http://www.dzsc.com/stock-ic/ADSL.html>芯片正逐步獲得競(jìng)爭(zhēng)優(yōu)勢(shì)。此外,ARM在語(yǔ)音及視頻處理上行了優(yōu)化,并獲得廣泛支持,也對(duì)DSP的應(yīng)用領(lǐng)域提出了挑戰(zhàn)。
4、消費(fèi)類電子產(chǎn)品:ARM技術(shù)在目前流行的數(shù)字音頻播放器、數(shù)字機(jī)頂盒和游戲機(jī)中得到廣泛采用。
5、成像和安全產(chǎn)品:現(xiàn)在流行的數(shù)碼相機(jī)和打印機(jī)中絕大部分采用ARM技術(shù)。手機(jī)中的32位SIM智能卡也采用了ARM技術(shù)。
除此以外,ARM微處理器及技術(shù)還應(yīng)用到許多不同的領(lǐng)域,并會(huì)在將來(lái)取得更加廣泛的應(yīng)用。
1.2.2 ARM微處理器的特點(diǎn)
采用RISC架構(gòu)的ARM微處理器一般具有如下特點(diǎn):
1、體積小、低功耗、低成本、高性能;
2、支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件;
3、大量使用寄存器,指令執(zhí)行速度更快;
4、大多數(shù)數(shù)據(jù)操作都在寄存器中完成;
5、尋址方式靈活簡(jiǎn)單,執(zhí)行效率高;
6、指令長(zhǎng)度固定;
1.3 ARM微處理器系列
ARM微處理器目前包括下面幾個(gè)系列,以及其它廠商基于ARM體系結(jié)構(gòu)的處理器,除了具有ARM體系結(jié)構(gòu)的共同特點(diǎn)以外,每一個(gè)系列的ARM微處理器都有各自的特點(diǎn)和應(yīng)用領(lǐng)域。
?。?nbsp; ARM7系列
- ARM9系列
?。?nbsp; ARM9E系列
?。?nbsp; ARM10E系列
?。?nbsp; SecurCore系列
- Inter的Xscale
?。?nbsp; Inter的StrongARM
其中,ARM7、ARM9、ARM9E和ARM10為4個(gè)通用處理器系列,每一個(gè)系列提供一套相對(duì)獨(dú)特的性能來(lái)滿足不同應(yīng)用領(lǐng)域的需求。SecurCore系列專門為安全要求較高的應(yīng)用而設(shè)計(jì)。
以下我們來(lái)詳細(xì)了解一下各種處理器的特點(diǎn)及應(yīng)用領(lǐng)域。
1.3.1 ARM7微處理器系列
ARM7系列微處理器為低功耗的32位RISC處理器,最適合用于對(duì)價(jià)位和功耗要求較高的消費(fèi)類應(yīng)用。ARM7微處理器系列具有如下特點(diǎn):
?。?nbsp; 具有嵌入式ICE-RT邏輯,調(diào)試開(kāi)發(fā)方便。
?。?nbsp; 極低的功耗,適合對(duì)功耗要求較高的應(yīng)用,如便攜式產(chǎn)品。
?。?nbsp; 能夠提供0.9MIPS/MHz的三級(jí)流水線結(jié)構(gòu)。
?。?nbsp; 代碼密度高并兼容16位的Thumb指令集。
- 對(duì)操作系統(tǒng)的支持廣泛,包括Windows CE、Linux、Palm OS等。
- 指令系統(tǒng)與ARM9系列、ARM9E系列和ARM10E系列兼容,便于用戶的產(chǎn)品升級(jí)換代。
?。?nbsp; 主頻最高可達(dá)130MIPS,高速的運(yùn)算處理能力能勝任絕大多數(shù)的復(fù)雜應(yīng)用。
ARM7系列微處理器的主要應(yīng)用領(lǐng)域?yàn)椋汗I(yè)控制、Internet設(shè)備、網(wǎng)絡(luò)和調(diào)制解調(diào)器設(shè)備、移動(dòng)電話等多種多媒體和嵌入式應(yīng)用。
ARM7系列微處理器包括如下幾種類型的核:ARM7TDMI、ARM7TDMI-S、
ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理器,屬低端ARM處理器核。TDMI的基本含義為:
T: 支持16為壓縮指令集Thumb;
D: 支持片上Debug;
M:內(nèi)嵌硬件乘法器(Multiplier)
I: 嵌入式ICE,支持片上斷點(diǎn)和調(diào)試點(diǎn);
本書(shū)所介紹的SAMSUNG <http://www.dzsc.com/stock-ic/SAMSUNG.html>公司的S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>即屬于該系列的處理器。
1.3.2 ARM9微處理器系列
ARM9系列微處理器在高性能和低功耗特性方面提供最佳的性能。具有以下特點(diǎn):
?。?nbsp; 5級(jí)整數(shù)流水線,指令執(zhí)行效率更高。
- 提供1.1MIPS/MHz的哈佛結(jié)構(gòu)。
- 支持32位ARM指令集和16位Thumb指令集。
- 支持32位的高速AMBA總線接口。
?。?nbsp; 全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng)。
?。?nbsp; MPU支持實(shí)時(shí)操作系統(tǒng)。
- 支持?jǐn)?shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。
ARM9系列微處理器主要應(yīng)用于無(wú)線設(shè)備、儀器儀表、安全系統(tǒng)、機(jī)頂盒、高端打印機(jī)、數(shù)字照相機(jī)和數(shù)字?jǐn)z像機(jī)等。
ARM9系列微處理器包含ARM920T、ARM922T和ARM940T三種類型,以適用于不同的應(yīng)用場(chǎng)合。
1.3.3 ARM9E微處理器系列
ARM9E系列微處理器為可綜合處理器,使用單一的處理器內(nèi)核提供了微控制器、DSP、Java應(yīng)用系統(tǒng)的解決方案,極大的減少了芯片的面積和系統(tǒng)的復(fù)雜程度。ARM9E系列微處理器提供了增強(qiáng)的DSP處理能力,很適合于那些需要同時(shí)使用DSP和微控制器的應(yīng)用場(chǎng)合。
ARM9E系列微處理器的主要特點(diǎn)如下:
?。?nbsp; 支持DSP指令集,適合于需要高速數(shù)字信號(hào)處理的場(chǎng)合。
?。?nbsp; 5級(jí)整數(shù)流水線,指令執(zhí)行效率更高。
- 支持32位ARM指令集和16位Thumb指令集。
?。?nbsp; 支持32位的高速AMBA總線接口。
?。?nbsp; 支持VFP9浮點(diǎn)處理協(xié)處理器。
- 全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng)。
?。?nbsp; MPU支持實(shí)時(shí)操作系統(tǒng)。
?。?nbsp; 支持?jǐn)?shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。
?。?nbsp; 主頻最高可達(dá)300MIPS。
ARM9系列微處理器主要應(yīng)用于下一代無(wú)線設(shè)備、數(shù)字消費(fèi)品、成像設(shè)備、工業(yè)控制、存儲(chǔ)設(shè)備和網(wǎng)絡(luò)設(shè)備等領(lǐng)域。
ARM9E系列微處理器包含ARM926EJ-S、ARM946E-S和ARM966E-S三種類型,以適用于不同的應(yīng)用場(chǎng)合。
1.3.4 ARM10E微處理器系列
ARM10E系列微處理器具有高性能、低功耗的特點(diǎn),由于采用了新的體系結(jié)構(gòu),與同等的ARM9器件相比較,在同樣的時(shí)鐘頻率下,性能提高了近50%,同時(shí),ARM10E系列微處理器采用了兩種先進(jìn)的節(jié)能方式,使其功耗極低。
ARM10E系列微處理器的主要特點(diǎn)如下:
- 支持DSP指令集,適合于需要高速數(shù)字信號(hào)處理的場(chǎng)合。
?。?nbsp; 6級(jí)整數(shù)流水線,指令執(zhí)行效率更高。
?。?nbsp; 支持32位ARM指令集和16位Thumb指令集。
?。?nbsp; 支持32位的高速AMBA總線接口。
?。?nbsp; 支持VFP10浮點(diǎn)處理協(xié)處理器。
?。?nbsp; 全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng)。
?。?nbsp; 支持?jǐn)?shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力
?。?nbsp; 主頻最高可達(dá)400MIPS。
?。?nbsp; 內(nèi)嵌并行讀/寫(xiě)操作部件。
ARM10E系列微處理器主要應(yīng)用于下一代無(wú)線設(shè)備、數(shù)字消費(fèi)品、成像設(shè)備、工業(yè)控制、通信和信息系統(tǒng)等領(lǐng)域。
ARM10E系列微處理器包含ARM1020E、ARM1022E和ARM1026EJ-S三種類型,以適用于不同的應(yīng)用場(chǎng)合。
1.3.5 SecurCore微處理器系列
SecurCore系列微處理器專為安全需要而設(shè)計(jì),提供了完善的32位RISC技術(shù)的安全解決方案,因此,SecurCore系列微處理器除了具有ARM體系結(jié)構(gòu)的低功耗、高性能的特點(diǎn)外,還具有其獨(dú)特的優(yōu)勢(shì),即提供
第2章 ARM微處理器的編程模型
本章簡(jiǎn)介ARM微處理器編程模型的一些基本概念,包括工作狀態(tài)切換、數(shù)據(jù)的存儲(chǔ)格式、處理器異常等,通過(guò)對(duì)本章的閱讀,希望讀者能了解ARM微處理器的基本工作原理和一些與程序設(shè)計(jì)相關(guān)的基本技術(shù)細(xì)節(jié),為以后的程序設(shè)計(jì)打下基礎(chǔ)。
本章的主要內(nèi)容:
?。?nbsp; ARM微處理器的工作狀態(tài)
?。?nbsp; ARM體系結(jié)構(gòu)的存儲(chǔ)器格式
?。?nbsp; ARM微處理器的工作模式
?。?nbsp; ARM體系結(jié)構(gòu)的寄存器組織
- ARM微處理器的異常狀態(tài)
在開(kāi)始本章之前,首先對(duì)字(Word)、半字(Half-Word)、字節(jié)(Byte)的概念作一個(gè)說(shuō)明:
字(Word):在ARM體系結(jié)構(gòu)中,字的長(zhǎng)度為32位,而在8位/16位處理器體系結(jié)構(gòu)中,字的長(zhǎng)度一般為16位,請(qǐng)讀者在閱讀時(shí)注意區(qū)分。
半字(Half-Word):在ARM體系結(jié)構(gòu)中,半字的長(zhǎng)度為16位,與8位/16位處理器體系結(jié)構(gòu)中字的長(zhǎng)度一致。
字節(jié)(Byte):在ARM體系結(jié)構(gòu)和8位/16位處理器體系結(jié)構(gòu)中,字節(jié)的長(zhǎng)度均為8位。
2.1 ARM微處理器的工作狀態(tài)
從編程的角度看,ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:
- 第一種為ARM狀態(tài),此時(shí)處理器執(zhí)行32位的字對(duì)齊的ARM指令;
?。?nbsp; 第二種為Thumb狀態(tài),此時(shí)處理器執(zhí)行16位的、半字對(duì)齊的Thumb指令。
當(dāng) ARM微處理器執(zhí)行32位的ARM指令集時(shí),工作在ARM狀態(tài);當(dāng)ARM微處理器執(zhí)行16位的Thumb指令集時(shí),工作在Thumb狀態(tài)。在程序的執(zhí)行過(guò) 程中,微處理器可以隨時(shí)在兩種工作狀態(tài)之間切換,并且,處理器工作狀態(tài)的轉(zhuǎn)變并不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。
狀態(tài)切換方法:
ARM指令集和Thumb指令集均有切換處理器狀態(tài)的指令,并可在兩種工作狀態(tài)之間切換,但ARM微處理器在開(kāi)始執(zhí)行代碼時(shí),應(yīng)該處于ARM狀態(tài)。
進(jìn) 入Thumb狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位(位0)為1時(shí),可以采用執(zhí)行BX指令的方法,使微處理器從ARM狀態(tài)切換到Thumb狀態(tài)。此外,當(dāng)處理器處 于Thumb狀態(tài)時(shí)發(fā)生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時(shí),自動(dòng)切換到Thumb狀態(tài)。
進(jìn)入ARM狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位為0時(shí),執(zhí)行BX指令時(shí)可以使微處理器從Thumb狀態(tài)切換到ARM狀態(tài)。此外,在處理器進(jìn)行異常處理時(shí),把PC指針?lè)湃氘惓DJ芥溄蛹拇嫫髦?,并從異常向量地址開(kāi)始執(zhí)行程序,也可以使處理器切換到ARM狀態(tài)。
2.2 ARM體系結(jié)構(gòu)的存儲(chǔ)器格式
ARM體系結(jié)構(gòu)將存儲(chǔ)器看作是從零地址開(kāi)始的字節(jié)的線性組合。從零字節(jié)到三字節(jié)放置第一個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),從第四個(gè)字節(jié)到第七個(gè)字節(jié)放置第二個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),依次排列。作為32位的微處理器,ARM體系結(jié)構(gòu)所支持的最大尋址空間為4GB(232字節(jié))。
ARM體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),稱之為大端格式和小端格式,具體說(shuō)明如下:
大端格式:
在這種格式中,字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中,如圖2.1所示:
圖2.1 以大端格式存儲(chǔ)字?jǐn)?shù)據(jù)
小端格式:
與大端存儲(chǔ)格式相反,在小端存儲(chǔ)格式中,低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。如圖2.2所示:
圖2. 2 以小端格式存儲(chǔ)字?jǐn)?shù)據(jù)
2.3 指令長(zhǎng)度及數(shù)據(jù)類型
ARM微處理器的指令長(zhǎng)度可以是32位(在ARM狀態(tài)下),也可以為16位(在Thumb狀態(tài)下)。
ARM微處理器中支持字節(jié)(8位)、半字(16位)、字(32位)三種數(shù)據(jù)類型,其中,字需要4字節(jié)對(duì)齊(地址的低兩位為0)、半字需要2字節(jié)對(duì)齊(地址的最低位為0)。
2.4 處理器模式
ARM微處理器支持7種運(yùn)行模式,分別為:
─ 用戶模式(usr): ARM處理器正常的程序執(zhí)行狀態(tài)
─ 快速中斷模式(fiq): 用于高速數(shù)據(jù)傳輸或通道處理
─ 外部中斷模式(irq): 用于通用的中斷處理
─ 管理模式(svc): 操作系統(tǒng)使用的保護(hù)模式
─ 數(shù)據(jù)訪問(wèn)終止模式(abt): 當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。
─ 系統(tǒng)模式(sys): 運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。
─ 未定義指令中止模式(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。
ARM微處理器的運(yùn)行模式可以通過(guò)軟件改變,也可以通過(guò)外部中斷或異常處理改變。
大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用戶模式下時(shí),某些被保護(hù)的系統(tǒng)資源是不能被訪問(wèn)的。
除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權(quán)模式(Privileged Modes);其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式(Exception Modes),常用于處理中斷或異常,以及需要訪問(wèn)受保護(hù)的系統(tǒng)資源等情況。
2.5 寄存器組織
ARM 微處理器共有37個(gè)32位寄存器,其中31個(gè)為通用寄存器,6個(gè)為狀態(tài)寄存器。但是這些寄存器不能被同時(shí)訪問(wèn),具體哪些寄存器是可編程訪問(wèn)的,取決微處理 器的工作狀態(tài)及具體的運(yùn)行模式。但在任何時(shí)候,通用寄存器R14~R0、程序計(jì)數(shù)器PC、一個(gè)或兩個(gè)狀態(tài)寄存器都是可訪問(wèn)的。
2.5.1 ARM狀態(tài)下的寄存器組織
通用寄存器:
通用寄存器包括R0~R15,可以分為三類:
─ 未分組寄存器R0~R7;
─ 分組寄存器R8~R14
─ 程序計(jì)數(shù)器PC(R15)
未分組寄存器R0~R7:
在所有的運(yùn)行模式下,未分組寄存器都指向同一個(gè)物理寄存器,他們未被系統(tǒng)用作特殊的用途,因此,在中斷或異常處理進(jìn)行運(yùn)行模式轉(zhuǎn)換時(shí),由于不同的處理器運(yùn)行模式均使用相同的物理寄存器,可能會(huì)造成寄存器中數(shù)據(jù)的破壞,這一點(diǎn)在進(jìn)行程序設(shè)計(jì)時(shí)應(yīng)引起注意。
分組寄存器R8~R14
對(duì)于分組寄存器,他們每一次所訪問(wèn)的物理寄存器與處理器當(dāng)前的運(yùn)行模式有關(guān)。
對(duì)于R8~R12來(lái)說(shuō),每個(gè)寄存器對(duì)應(yīng)兩個(gè)不同的物理寄存器,當(dāng)使用fiq模式時(shí),訪問(wèn)寄存器R8_fiq~R12_fiq;當(dāng)使用除fiq模式以外的其他模式時(shí),訪問(wèn)寄存器R8_usr~R12_usr。
對(duì)于R13、R14來(lái)說(shuō),每個(gè)寄存器對(duì)應(yīng)6個(gè)不同的物理寄存器,其中的一個(gè)是用戶模式與系統(tǒng)模式共用,另外5個(gè)物理寄存器對(duì)應(yīng)于其他5種不同的運(yùn)行模式。
采用以下的記號(hào)來(lái)區(qū)分不同的物理寄存器:
R13_<mode>
R14_<mode>
其中,mode為以下幾種模式之一:usr、fiq、irq、svc、abt、und。
寄存器R13在ARM指令中常用作堆棧指針,但這只是一種習(xí)慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強(qiáng)制性的要求使用R13作為堆棧指針。
由 于處理器的每種運(yùn)行模式均有自己獨(dú)立的物理寄存器R13,在用戶應(yīng)用程序的初始化部分,一般都要初始化每種模式下的R13,使其指向該運(yùn)行模式的??臻g, 這樣,當(dāng)程序的運(yùn)行進(jìn)入異常模式時(shí),可以將需要保護(hù)的寄存器放入R13所指向的堆棧,而當(dāng)程序從異常模式返回時(shí),則從對(duì)應(yīng)的堆棧中恢復(fù),采用這種方式可以 保證異常發(fā)生后程序的正常執(zhí)行。
R14也稱作子程序連接寄存器(Subroutine LINK <http://www.dzsc.com/stock-ic/LINK.html> Register)或連接寄存器LR。當(dāng)執(zhí)行BL子程序調(diào)用指令時(shí),R14中得到R15(程序計(jì)數(shù)器PC)的備份。其他情況下,R14用作通用寄存器。與 之類似,當(dāng)發(fā)生中斷或異常時(shí),對(duì)應(yīng)的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來(lái)保存R15的返回 值。
寄存器R14常用在如下的情況:
在每一種運(yùn)行模式下,都可用R14保存子程序的返回地址,當(dāng)用BL或BLX指令調(diào)用子程序時(shí),將PC的當(dāng)前值拷貝給R14,執(zhí)行完子程序后,又將R14的值拷貝回PC,即可完成子程序的調(diào)用返回。以上的描述可用指令完成:
1、執(zhí)行以下任意一條指令:
MOV PC,LR
BX LR
2、在子程序入口處使用以下指令將R14存入堆棧:
STMFD SP!,{<Regs>,LR}
對(duì)應(yīng)的,使用以下指令可以完成子程序返回:
LDMFD SP!,{<Regs>,PC}
R14也可作為通用寄存器。
程序計(jì)數(shù)器PC(R15)
寄 存器R15用作程序計(jì)數(shù)器(PC)。在ARM狀態(tài)下,位[1:0]為0,位[31:2]用于保存PC;在Thumb狀態(tài)下,位[0]為0,位[31:1] 用于保存PC;雖然可以用作通用寄存器,但是有一些指令在使用R15時(shí)有一些特殊限制,若不注意,執(zhí)行的結(jié)果將是不可預(yù)料的。在ARM狀態(tài)下,PC的0和 1位是0,在Thumb狀態(tài)下,PC的0位是0。
R15雖然也可用作通用寄存器,但一般不這么使用,因?yàn)閷?duì)R15的使用有一些特殊的限制,當(dāng)違反了這些限制時(shí),程序的執(zhí)行結(jié)果是未知的。
由于ARM體系結(jié)構(gòu)采用了多級(jí)流水線技術(shù),對(duì)于ARM指令集而言,PC總是指向當(dāng)前指令的下兩條指令的地址,即PC的值為當(dāng)前指令的地址值加8個(gè)字節(jié)。
圖2.3 ARM狀態(tài)下的寄存器組織
在ARM狀態(tài)下,任一時(shí)刻可以訪問(wèn)以上所討論的16個(gè)通用寄存器和一到兩個(gè)狀態(tài)寄存器。在非用戶模式(特權(quán)模式)下,則可訪問(wèn)到特定模式分組寄存器,圖2.3說(shuō)明在每一種運(yùn)行模式下,哪一些寄存器是可以訪問(wèn)的。
寄存器R16:
寄存器R16用作CPSR(Current Program Status Register,當(dāng)前程序狀態(tài)寄
第3章 ARM微處理器的指令系統(tǒng)
本章介紹ARM指令集、Thumb指令集,以及各類指令對(duì)應(yīng)的尋址方式,通過(guò)對(duì)本章的閱讀,希望讀者能了解ARM微處理器所支持的指令集及具體的使用方法。
本章的主要內(nèi)容有:
- ARM指令集、Thumb指令集概述。
?。?nbsp; ARM指令集的分類與具體應(yīng)用。
- Thumb指令集簡(jiǎn)介及應(yīng)用場(chǎng)合。
3.1 ARM微處理器的指令集概述
3.1.1 ARM微處理器的指令的分類與格式
ARM微處理器的指令集是加載/存儲(chǔ)型的,也即指令集僅能處理寄存器中的數(shù)據(jù),而且處理結(jié)果都要放回寄存器中,而對(duì)系統(tǒng)存儲(chǔ)器的訪問(wèn)則需要通過(guò)專門的加載/存儲(chǔ)指令來(lái)完成。
ARM微處理器的指令集可以分為跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、程序狀態(tài)寄存器(PSR)處理指令、加載/存儲(chǔ)指令、協(xié)處理器指令和異常產(chǎn)生指令六大類,具體的指令及功能如表3-1所示(表中指令為基本ARM指令,不包括派生的ARM指令)。
表3-1 ARM指令及功能描述
助記符 指令功能描述
ADC 帶進(jìn)位加法指令
ADD 加法指令
AND 邏輯與指令
B 跳轉(zhuǎn)指令
BIC 位清零指令
BL 帶返回的跳轉(zhuǎn)指令
BLX 帶返回和狀態(tài)切換的跳轉(zhuǎn)指令
BX 帶狀態(tài)切換的跳轉(zhuǎn)指令
CDP 協(xié)處理器數(shù)據(jù)操作指令
CMN 比較反值指令
CMP 比較指令
EOR 異或指令
LDC 存儲(chǔ)器到協(xié)處理器的數(shù)據(jù)傳輸指令
LDM 加載多個(gè)寄存器指令
LDR 存儲(chǔ)器到寄存器的數(shù)據(jù)傳輸指令
MCR 從ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳輸指令
MLA 乘加運(yùn)算指令
MOV 數(shù)據(jù)傳送指令
MRC 從協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳輸指令
MRS 傳送CPSR或SPSR的內(nèi)容到通用寄存器指令
MSR 傳送通用寄存器到CPSR或SPSR的指令
MUL 32位乘法指令
MLA 32位乘加指令
MVN 數(shù)據(jù)取反傳送指令
ORR 邏輯或指令
RSB 逆向減法指令
RSC 帶借位的逆向減法指令
SBC 帶借位減法指令
STC 協(xié)處理器寄存器寫(xiě)入存儲(chǔ)器指令
STM 批量?jī)?nèi)存字寫(xiě)入指令
STR 寄存器到存儲(chǔ)器的數(shù)據(jù)傳輸指令
SUB 減法指令
SWI 軟件中斷指令
SWP 交換指令
TEQ 相等測(cè)試指令
TST 位測(cè)試指令
3.1.2 指令的條件域
當(dāng)處理器工作在ARM狀態(tài)時(shí),幾乎所有的指令均根據(jù)CPSR中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時(shí),指令被執(zhí)行,否則指令被忽略。
每 一條ARM指令包含4位的條件碼,位于指令的最高4位[31:28]。條件碼共有16種,每種條件碼可用兩個(gè)字符表示,這兩個(gè)字符可以添加在指令助記符的 后面和指令同時(shí)使用。例如,跳轉(zhuǎn)指令B可以加上后綴EQ變?yōu)锽EQ表示“相等則跳轉(zhuǎn)”,即當(dāng)CPSR中的Z標(biāo)志置位時(shí)發(fā)生跳轉(zhuǎn)。
在16種條件標(biāo)志碼中,只有15種可以使用,如表3-2所示,第16種(1111 <http://www.dzsc.com/stock-ic/1111.html>)為系統(tǒng)保留,暫時(shí)不能使用。
表3-2 指令的條件碼
條件碼 助記符后綴 標(biāo) 志 含 義
0000 EQ Z置位 相等
0001 NE Z清零 不相等
0010 CS C置位 無(wú)符號(hào)數(shù)大于或等于
0011 <http://www.dzsc.com/stock-ic/0011.html> CC C清零 無(wú)符號(hào)數(shù)小于
0100 MI N置位 負(fù)數(shù)
0101 PL N清零 正數(shù)或零
0110 VS V置位 溢出
0111 VC V清零 未溢出
1000 <http://www.dzsc.com/stock-ic/1000.html> HI C置位Z清零 無(wú)符號(hào)數(shù)大于
1001 <http://www.dzsc.com/stock-ic/1001.html> LS C清零Z置位 無(wú)符號(hào)數(shù)小于或等于
1010 <http://www.dzsc.com/stock-ic/1010.html> GE N等于V 帶符號(hào)數(shù)大于或等于
1011 <http://www.dzsc.com/stock-ic/1011.html> LT N不等于V 帶符號(hào)數(shù)小于
1100 <http://www.dzsc.com/stock-ic/1100.html> GT Z清零且(N等于V) 帶符號(hào)數(shù)大于
1101 <http://www.dzsc.com/stock-ic/1101.html> LE Z置位或(N不等于V) 帶符號(hào)數(shù)小于或等于
1110 <http://www.dzsc.com/stock-ic/1110.html> AL 忽略 無(wú)條件執(zhí)行
3.2 ARM指令的尋址方式
所謂尋址方式就是處理器根據(jù)指令中給出的地址信息來(lái)尋找物理地址的方式。目前ARM指令系統(tǒng)支持如下幾種常見(jiàn)的尋址方式。
3.2.1 立即尋址
立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù)。這個(gè)操作數(shù)被稱為立即數(shù),對(duì)應(yīng)的尋址方式也就叫做立即尋址。例如以下指令:
ADD R0,R0,#1 ;R0←R0+1
ADD R0,R0,#0x3f ;R0←R0+0x3f
在以上兩條指令中,第二個(gè)源操作數(shù)即為立即數(shù),要求以“?!睘榍熬Y,對(duì)于以十六進(jìn)制表示的立即數(shù),還要求在“?!焙蠹由稀?x”或“&”。
3.2.2 寄存器尋址
寄存器尋址就是利用寄存器中的數(shù)值作為操作數(shù),這種尋址方式是各類微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。以下指令:
ADD R0,R1,R2 ;R0←R1+R2
該指令的執(zhí)行效果是將寄存器R1和R2的內(nèi)容相加,其結(jié)果存放在寄存器R0中。
3.2.2 寄存器間接尋址
寄存器間接尋址就是以寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲(chǔ)器中。例如以下指令:
ADD R0,R1,[R2] ;R0←R1+[R2]
LDR R0,[R1] ;R0←[R1]
STR R0,[R1] ;[R1]←R0
在第一條指令中,以寄存器R2的值作為操作數(shù)的地址,在存儲(chǔ)器中取得一個(gè)操作數(shù)后與R1相加,結(jié)果存入寄存器R0中。
第二條指令將以R1的值為地址的存儲(chǔ)器中的數(shù)據(jù)傳送到R0中。
第三條指令將R0的值傳送到以R1的值為地址的存儲(chǔ)器中。
3.2.3 基址變址尋址
基址變址尋址就是將寄存器(該寄存器一般稱作基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操作數(shù)的有效地址。變址尋址方式常用于訪問(wèn)某基地址附近的地址單元。采用變址尋址方式的指令常見(jiàn)有以下幾種形式,如下所示:
LDR R0,[R1,#4] ;R0←[R1+4]
LDR R0,[R1,#4]! ;R0←[R1+4]、R1←R1+4
LDR R0,[R1] ,#4 ;R0←[R1]、R1←R1+4
LDR R0,[R1,R2] ;R0←[R1+R2]
在第一條指令中,將寄存器R1的內(nèi)容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器R0中。
在第二條指令中,將寄存器R1的內(nèi)容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器R0中,然后,R1的內(nèi)容自增4個(gè)字節(jié)。
在第三條指令中,以寄存器R1的內(nèi)容作為操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器R0中,然后,R1的內(nèi)容自增4個(gè)字節(jié)。
在第四條指令中,將寄存器R1的內(nèi)容加上寄存器R2的內(nèi)容形成操作數(shù)的有效地址,從而取得
第4章 ARM程序設(shè)計(jì)基礎(chǔ)
ARM編譯器一般都支持匯編語(yǔ)言的程序設(shè)計(jì)和C/C++語(yǔ)言的程序設(shè)計(jì),以及兩者的混合編程。本章介紹ARM程序設(shè)計(jì)的一些基本概念,如ARM匯編語(yǔ)言的偽指令、匯編語(yǔ)言的語(yǔ)句格式和匯編語(yǔ)言的程序結(jié)構(gòu)等,同時(shí)介紹C/C++和匯編語(yǔ)言的混合編程等問(wèn)題。
本章的主要內(nèi)容:
- ARM編譯器所支持的偽指令
- 匯編語(yǔ)言的語(yǔ)句格式
?。?nbsp; 匯編語(yǔ)言的程序結(jié)構(gòu)
?。?nbsp; 相關(guān)的程序示例
4.1 ARM匯編器所支持的偽指令
在 ARM匯編語(yǔ)言程序里,有一些特殊指令助記符,這些助記符與指令系統(tǒng)的助記符不同,沒(méi)有相對(duì)應(yīng)的操作碼,通常稱這些特殊指令助記符為偽指令,他們所完成的 操作稱為偽操作。偽指令在源程序中的作用是為完成匯編程序作各種準(zhǔn)備工作的,這些偽指令僅在匯編過(guò)程中起作用,一旦匯編結(jié)束,偽指令的使命就完成。
在ARM的匯編程序中,有如下幾種偽指令:符號(hào)定義偽指令、數(shù)據(jù)定義偽指令、匯編控制偽指令、宏指令以及其他偽指令。
4.1.1 符號(hào)定義(Symbol Definition)偽指令
符號(hào)定義偽指令用于定義ARM匯編程序中的變量、對(duì)變量賦值以及定義寄存器的別名等操作。常見(jiàn)的符號(hào)定義偽指令有如下幾種:
- 用于定義全局變量的GBLA、GBLL和GBLS。
- 用于定義局部變量的LCLA、LCLL和LCLS。
- 用于對(duì)變量賦值的SETA、SETL、SETS。
- 為通用寄存器列表定義名稱的RLIST。
1、 GBLA、GBLL和GBLS
語(yǔ)法格式:
GBLA(GBLL或GBLS) 全局變量名
GBLA、GBLL和GBLS偽指令用于定義一個(gè)ARM程序中的全局變量,并將其初始化。其中:
GBLA偽指令用于定義一個(gè)全局的數(shù)字變量,并初始化為0;
GBLL偽指令用于定義一個(gè)全局的邏輯變量,并初始化為F(假);
GBLS偽指令用于定義一個(gè)全局的字符串變量,并初始化為空;
由于以上三條偽指令用于定義全局變量,因此在整個(gè)程序范圍內(nèi)變量名必須唯一。
使用示例:
GBLA TEST1 <http://www.dzsc.com/stock-ic/TEST1.html> ;定義一個(gè)全局的數(shù)字變量,變量名為TEST1 <http://www.dzsc.com/stock-ic/TEST1.html>
TEST1 <http://www.dzsc.com/stock-ic/TEST1.html> SETA 0xaa ;將該變量賦值為0xaa
GBLL TEST2 <http://www.dzsc.com/stock-ic/TEST2.html> ;定義一個(gè)全局的邏輯變量,變量名為TEST2 <http://www.dzsc.com/stock-ic/TEST2.html>
TEST2 <http://www.dzsc.com/stock-ic/TEST2.html> SETL {TRUE} ;將該變量賦值為真
GBLS test3 <http://www.dzsc.com/stock-ic/test3.html> ;定義一個(gè)全局的字符串變量,變量名為test3 <http://www.dzsc.com/stock-ic/test3.html>
test3 <http://www.dzsc.com/stock-ic/test3.html> SETS “Testing” ;將該變量賦值為“Testing”
2、 LCLA、LCLL和LCLS
語(yǔ)法格式:
LCLA(LCLL或LCLS) 局部變量名
LCLA、LCLL和LCLS偽指令用于定義一個(gè)ARM程序中的局部變量,并將其初始化。其中:
LCLA偽指令用于定義一個(gè)局部的數(shù)字變量,并初始化為0;
LCLL偽指令用于定義一個(gè)局部的邏輯變量,并初始化為F(假);
LCLS偽指令用于定義一個(gè)局部的字符串變量,并初始化為空;
以上三條偽指令用于聲明局部變量,在其作用范圍內(nèi)變量名必須唯一。
使用示例:
LCLA test4 <http://www.dzsc.com/stock-ic/test4.html> ;聲明一個(gè)局部的數(shù)字變量,變量名為test4 <http://www.dzsc.com/stock-ic/test4.html>
test3 <http://www.dzsc.com/stock-ic/test3.html> SETA 0xaa ;將該變量賦值為0xaa
LCLL TEST5 <http://www.dzsc.com/icstock/224/TEST5.html> ;聲明一個(gè)局部的邏輯變量,變量名為TEST5 <http://www.dzsc.com/icstock/224/TEST5.html>
test4 <http://www.dzsc.com/stock-ic/test4.html> SETL {TRUE} ;將該變量賦值為真
LCLS TEST6 <http://www.dzsc.com/stock-ic/TEST6.html> ;定義一個(gè)局部的字符串變量,變量名為TEST6 <http://www.dzsc.com/stock-ic/TEST6.html>
TEST6 <http://www.dzsc.com/stock-ic/TEST6.html> SETS “Testing” ;將該變量賦值為“Testing”
3、 SETA、SETL和SETS
語(yǔ)法格式:
變量名 SETA(SETL或SETS) 表達(dá)式
偽指令SETA、SETL、SETS用于給一個(gè)已經(jīng)定義的全局變量或局部變量賦值。
SETA偽指令用于給一個(gè)數(shù)學(xué)變量賦值;
SETL偽指令用于給一個(gè)邏輯變量賦值;
SETS偽指令用于給一個(gè)字符串變量賦值;
其中,變量名為已經(jīng)定義過(guò)的全局變量或局部變量,表達(dá)式為將要賦給變量的值。
使用示例:
LCLA test3 <http://www.dzsc.com/stock-ic/test3.html> ;聲明一個(gè)局部的數(shù)字變量,變量名為test3 <http://www.dzsc.com/stock-ic/test3.html>
test3 <http://www.dzsc.com/stock-ic/test3.html> SETA 0xaa ;將該變量賦值為0xaa
LCLL test4 <http://www.dzsc.com/stock-ic/test4.html> ;聲明一個(gè)局部的邏輯變量,變量名為test4 <http://www.dzsc.com/stock-ic/test4.html>
test4 <http://www.dzsc.com/stock-ic/test4.html> SETL {TRUE} ;將該變量賦值為真
4、 RLIST
語(yǔ)法格式:
名稱 RLIST {寄存器列表}
RLIST偽指令可用于對(duì)一個(gè)通用寄存器列表定義名稱,使用該偽指令定義的名稱可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器訪問(wèn)次序?yàn)楦鶕?jù)寄存器的編號(hào)由低到高,而與列表中的寄存器排列次序無(wú)關(guān)。
使用示例:
RegList RLIST {R0-R5,R8,R10} ;將寄存器列表名稱定義為RegList,可在ARM指令LDM/STM中通過(guò)該名稱訪問(wèn)寄存器列表。
4.1.2 數(shù)據(jù)定義(Data Definition)偽指令
數(shù)據(jù)定義偽指令一般用于為特定的數(shù)據(jù)分配存儲(chǔ)單元,同時(shí)可完成已分配存儲(chǔ)單元的初始化。常見(jiàn)的數(shù)據(jù)定義偽指令有如下幾種:
- DCB 用于分配一片連續(xù)的字節(jié)存儲(chǔ)單元并用指定的數(shù)據(jù)初始化。
- DCW(DCWU) 用于分配一片連續(xù)的半字存儲(chǔ)單元并用指定的數(shù)據(jù)初始化。
- DCD(DCDU) 用于分配一片連續(xù)的字存儲(chǔ)單元并用指定的數(shù)據(jù)初始化。
- DCFD(DCFDU)用于為雙精度的浮點(diǎn)數(shù)分配一片連續(xù)的字存儲(chǔ)單元并用指定的數(shù)據(jù)初始化。
- DCFS(DCFSU) 用于為單精度的浮點(diǎn)數(shù)分配一片連續(xù)的字存儲(chǔ)單元并用指定的數(shù)據(jù)初始化。
- DCQ(DCQU) 用于分配一片以8字節(jié)為單位的連續(xù)的存儲(chǔ)單元并用指定的數(shù)據(jù)初始化。
- SPACE 用于分配一片連續(xù)的存儲(chǔ)單元
- MAP 用于定義一個(gè)結(jié)構(gòu)化的內(nèi)存表首地址
- FIELD 用于定義一個(gè)結(jié)構(gòu)化的內(nèi)存表的數(shù)據(jù)域
1、 DCB
語(yǔ)法格式:
標(biāo)號(hào) DCB 表達(dá)式
DCB偽指令用于分配一片連續(xù)的字節(jié)存儲(chǔ)單元并用
第5章 應(yīng)用系統(tǒng)設(shè)計(jì)與調(diào)試
本章主要介紹基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的硬件系統(tǒng)的詳細(xì)設(shè)計(jì)步驟、實(shí)現(xiàn)細(xì)節(jié)、硬件系統(tǒng)的調(diào)試方法等,通過(guò)對(duì)本章的閱讀,可以使絕大多數(shù)的讀者具有根據(jù)自身的需求、設(shè)計(jì)特定應(yīng)用系統(tǒng)的能力。
盡管本章所描述的內(nèi)容為基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的應(yīng)用系統(tǒng)設(shè)計(jì),但由于ARM體系結(jié)構(gòu)的一致性、以及外圍電路的通用性,本章的所有內(nèi)容對(duì)設(shè)計(jì)其他基于ARM內(nèi)核芯片的應(yīng)用系統(tǒng),也具有很大的參考價(jià)值。
本章的主要內(nèi)容包括:
?。?nbsp; 嵌入式系統(tǒng)設(shè)計(jì)的基本方法。
- S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>概述。
?。?nbsp; S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的基本工作原理
- 基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的硬件系統(tǒng)設(shè)計(jì)詳述
?。?nbsp; 硬件系統(tǒng)的調(diào)試方法
5.1 系統(tǒng)設(shè)計(jì)概述
根 據(jù)用戶需求,設(shè)計(jì)出特定的嵌入式應(yīng)用系統(tǒng),是每一個(gè)嵌入式系統(tǒng)設(shè)計(jì)工程師應(yīng)該達(dá)到的目標(biāo)。嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)包含硬件系統(tǒng)的設(shè)計(jì)和軟件系統(tǒng)設(shè)計(jì)兩個(gè)部 分,并且這兩部分的設(shè)計(jì)是互相關(guān)聯(lián)、密不可分的,嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)經(jīng)常需要在硬件和軟件的設(shè)計(jì)之間進(jìn)行權(quán)衡與折中。因此,這就要求嵌入式系統(tǒng)設(shè)計(jì)工程 師具有較深厚的硬件和軟件基礎(chǔ),并具有熟練應(yīng)用的能力。這也是嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)與其他的純粹的軟件設(shè)計(jì)或硬件設(shè)計(jì)最大的區(qū)別。
本章以北京微芯力 科技有限公司(www.winsilicon.com)設(shè)計(jì)生產(chǎn)的ARM Linux評(píng)估開(kāi)發(fā)板為原型,詳細(xì)分析系統(tǒng)的軟、硬件設(shè)計(jì)步驟、實(shí)現(xiàn)細(xì)節(jié)以及調(diào)試技巧等。ARM Linux評(píng)估開(kāi)發(fā)板的設(shè)計(jì)以學(xué)習(xí)與應(yīng)用兼顧為出發(fā)點(diǎn),在保證用戶完成ARM技術(shù)的學(xué)習(xí)開(kāi)發(fā)的同時(shí),考慮了系統(tǒng)的擴(kuò)展、電路板的面積、散熱、電磁兼容性以 及安裝等問(wèn)題,因此,該板也可作為嵌入式系統(tǒng)主板,直接應(yīng)用在一些實(shí)際系統(tǒng)中。
圖5.1.1是ARM Linux評(píng)估開(kāi)發(fā)板的結(jié)構(gòu)框圖,各部分基本功能描述如下:
?。?nbsp; 串行接口電路用于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)與其他應(yīng)用系統(tǒng)的短距離雙向串行通訊;
- 復(fù)位電路可完成系統(tǒng)上電復(fù)位和在系統(tǒng)工作時(shí)用戶按鍵復(fù)位;
?。?nbsp; 電源電路為5V到3.3V <http://www.dzsc.com/icstock/508/3.3V.html>的DC-DC轉(zhuǎn)換器,給S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>及其他需要3.3V <http://www.dzsc.com/icstock/508/3.3V.html>電源的外圍電路供電;
- 10MHZ <http://www.dzsc.com/icstock/609/10MHZ.html>有源晶振為系統(tǒng)提供工作時(shí)鐘,通過(guò)片內(nèi)PLL電路倍頻為50MHZ <http://www.dzsc.com/icstock/619/50MHZ.html>作為微處理器的工作時(shí)鐘;
?。?nbsp; FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器可存放已調(diào)試好的用戶應(yīng)用程序、嵌入式操作系統(tǒng)或其他在系統(tǒng)掉電后需要保存的用戶數(shù)據(jù)等;
?。?nbsp; SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>存儲(chǔ)器作為系統(tǒng)運(yùn)行時(shí)的主要區(qū)域,系統(tǒng)及用戶數(shù)據(jù)、堆棧均位于SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>存儲(chǔ)器中;
- 10M/100M以太網(wǎng)接口為系統(tǒng)提供以太網(wǎng)接入的物理通道,通過(guò)該接口,系統(tǒng)可以10M或100Mbps的速率接入以太網(wǎng);
?。?nbsp; JTAG接口可對(duì)芯片內(nèi)部的所有部件進(jìn)行訪問(wèn),通過(guò)該接口可對(duì)系統(tǒng)進(jìn)行調(diào)試、編程等;
?。?nbsp; IIC存儲(chǔ)器可存儲(chǔ)少量需要長(zhǎng)期保存的用戶數(shù)據(jù);
- 系統(tǒng)總線擴(kuò)展引出了數(shù)據(jù)總線、地址總線和必須的控制總線,便于用戶根據(jù)自身的特定需求,擴(kuò)展外圍電路。
圖5.1.1 ARM Linux評(píng)估開(kāi)發(fā)板的結(jié)構(gòu)框圖
5.2 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>概述
5.2.1 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>及片內(nèi)外圍簡(jiǎn)介
在進(jìn)行系統(tǒng)設(shè)計(jì)之前,有必要對(duì)ARM Linux評(píng)估開(kāi)發(fā)板上的ARM芯片S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>及其工作原理進(jìn)行比較詳細(xì)的介紹,讀者只有對(duì)該微處理器的工作原理有了較詳細(xì)的了解,才能進(jìn)行特定應(yīng)用系統(tǒng)的設(shè)計(jì)。
SAMSUNG <http://www.dzsc.com/stock-ic/SAMSUNG.html>公司的S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>是基于以太網(wǎng)應(yīng)用系統(tǒng)的高性價(jià)比16/32位RISC微控制器,內(nèi)含一個(gè)由ARM公司設(shè)計(jì)的16/32位ARM7TDMI RISC處理器核,ARM7TDMI為低功耗、高性能的16/32核,最適合用于對(duì)價(jià)格及功耗敏感的應(yīng)用場(chǎng)合。
除了ARM7TDMI核以外,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>比較重要的片內(nèi)外圍功能模塊包括:
- 2個(gè)帶緩沖描述符(Buffer Descriptor)的HDLC通道
- 2個(gè)UART通道
- 2個(gè)GDMA通道
- 2個(gè)32位定時(shí)器
- 18個(gè)可編程的I/O口。
片內(nèi)的邏輯控制電路包括:
- 中斷控制器
- DRAM/SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>控制器
- ROM/SRAM和FLASH <http://www.dzsc.com/stock-ic/FLASH.html>控制器
- 系統(tǒng)管理器
- 一個(gè)內(nèi)部32位系統(tǒng)總線仲裁器
- 一個(gè)外部存儲(chǔ)器控制器。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>結(jié)構(gòu)框圖如圖5.2.1所示。
圖 5.2.1 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>結(jié)構(gòu)框
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的特性描述如下:
體系結(jié)構(gòu)
- 用于嵌入式以太網(wǎng)應(yīng)用的集成系統(tǒng)
- 全16/32的RISC架構(gòu)
- 支持大、小端模式。內(nèi)部架構(gòu)為大端模式,外部存儲(chǔ)器可為大、小端模式
- 內(nèi)含效率高、功能強(qiáng)的ARM7TDMI處理器核
- 高性價(jià)比、基于JTAG接口的調(diào)試方案
- 邊界掃描接口
系統(tǒng)管理器
- 支持ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>、FLASH <http://www.dzsc.com/stock-ic/FLASH.html>、DRAM和外部I/O以8/16/32位的方式操作
- 帶總線請(qǐng)求/應(yīng)答引腳的外部總線控制器
- 支持EDO/常規(guī)或SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>存儲(chǔ)器
- 可編程的訪問(wèn)周期(可設(shè)定0~7個(gè)等待周期)
- 4字的寫(xiě)緩沖
- 高性價(jià)比的從存儲(chǔ)器到外圍的DMA接口
一體化的指令/數(shù)據(jù)Cache
- 一體化的8K Cache
- 支持LRC(近期最少使用)替換算法
- Cache可配置為內(nèi)部SRAM <http://www.dzsc.com/icstock/221/SRAM.html>
IIC接口
- 僅支持主控模式
- 串行時(shí)鐘由波特率發(fā)生器生成
Ethernet控制器
- 帶猝發(fā)模式的DMA引擎
- DMA發(fā)送/接收緩沖區(qū)(256字節(jié)發(fā)送,256字節(jié)接收)
- MAC發(fā)送/接收FIFO緩沖區(qū)(80字節(jié)發(fā)送,16字節(jié)接收)
- 數(shù)據(jù)對(duì)準(zhǔn)邏輯
- 支持端模式變換
- 100M/10Mbps的工作速率
- 與IEEE802.3標(biāo)準(zhǔn)完全兼容
- 提供MII和7線制10Mbps接口
- 站管理信號(hào)生成
- 片內(nèi)CAM(可達(dá)21個(gè)目的地址)
- 帶暫停特性的全雙工模式
- 支持長(zhǎng)/短包模式
- 包拆裝PDA生成
HDLC (High-Level Data LINK <http://www.dzsc.com/stock-ic/LINK.html> CONTROL <http://www.dzsc.com/stock-ic/CONTROL.html>) 高層數(shù)據(jù)鏈路協(xié)議
- HDLC協(xié)議特征:標(biāo)志檢測(cè)與同步;零插入與刪除;空閑檢測(cè)和發(fā)送;FCS生成和檢測(cè)(16位);終止檢測(cè)與發(fā)送
- 地址搜索模式(可擴(kuò)展到四字節(jié))
- 可選擇CRC模式或非CRC模式
- 用于時(shí)鐘恢復(fù)的數(shù)字PLL模塊
- 波特率生成器
- 發(fā)送和接收支持NRZ/NRZI/FM/曼切斯特?cái)?shù)據(jù)格式
- 回環(huán)與自動(dòng)回波模式
- 8字的發(fā)送和接收FIFO
- 可選的1字或4字?jǐn)?shù)據(jù)傳送方式
- 數(shù)據(jù)對(duì)準(zhǔn)邏輯
- 可編程中斷
- MODEM <http://www.dzsc.com/stock-ic/MODEM.html>接口
- 高達(dá)10Mbps的工作速率
- 基于8位位組的HDLC幀長(zhǎng)度
- 每個(gè)HDLC有2通道DMA緩沖描述符用于發(fā)送和接收
DMA控制器
- 用于存儲(chǔ)器到存儲(chǔ)器、存儲(chǔ)器到UATR、UATR到存儲(chǔ)器數(shù)據(jù)傳送的2通道通用DMA控制器,不受CPU干預(yù)
- 可由程序或外部DMA請(qǐng)求啟動(dòng)
- 可增減源地址或目的地址,無(wú)論8位、16位或32位數(shù)據(jù)傳輸
- 4種數(shù)據(jù)猝發(fā)模式
UART
- 2個(gè)可工作于DMA方式或中斷方式的UART模塊
- 支持5、6、7、8位的串行數(shù)據(jù)發(fā)送和接收
- 波特率可編程
- 1位或2位停止位
- 奇/偶校驗(yàn)
- 間隔信號(hào)的生成與檢測(cè)
- 奇偶校驗(yàn)、覆蓋和幀錯(cuò)誤檢測(cè)
- ×16時(shí)鐘模式
- 支持紅外發(fā)送和接收
定時(shí)器
- 2個(gè)可編程32位定時(shí)器
- 間隔模式或觸發(fā)模式工作
可編程I/O口
- 18個(gè)可編程I/O口
- 可分別配置為輸入模式、輸出模式或特殊功能模式
中斷控制器
- 21個(gè)中斷源,包括4個(gè)外部中斷源
- 正常中斷或快速中斷模式(IRQ、FIQ)
- 基于優(yōu)先級(jí)的中斷處理
PLL
- 外部時(shí)鐘可由片內(nèi)PLL倍頻以提高系統(tǒng)時(shí)鐘
- 輸入頻率范圍:10~40MHZ <http://www.dzsc.com/icstock/580/40MHZ.html>
- 輸出頻率可以是輸入時(shí)鐘的5倍
工作電壓
- 3.3V <http://www.dzsc.com/icstock/508/3.3V.html>,偏
5.2.2 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的引腳分布及信號(hào)描述
圖5.2.2是S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的引腳分布圖
圖5.2.2 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的引腳分布圖
各引腳信號(hào)描述如下:
表5-2-1 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的引腳信號(hào)描述
信 號(hào) 引腳號(hào) 類 型 描 述
XCLK 80 I S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的系統(tǒng)時(shí)鐘源。如果CLKSEN為低電平,通過(guò)PLL倍頻的輸出時(shí)鐘作為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的內(nèi)部系統(tǒng)時(shí)鐘。如果CLKSEN為高電平,XCLK直接作為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的內(nèi)部系統(tǒng)時(shí)鐘。
MCLKO/SDCLK 77 O 系統(tǒng)時(shí)鐘輸出。SDCLK為SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>提供時(shí)鐘信號(hào)
CLKSEL 83 I 時(shí)鐘選擇。如果CLKSEL為低電平,PLL輸出時(shí)鐘作為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的內(nèi)部系統(tǒng)時(shí)鐘。如果CLKSEL為高電平,XCLK直接作為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的內(nèi)部系統(tǒng)時(shí)鐘。
nRESET 82 I 復(fù)位信號(hào)。nRESET為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的復(fù)位信號(hào),要使系統(tǒng)可靠復(fù)位,nRESET必須至少保持64個(gè)主時(shí)鐘周期的低電平。
CLKOEN 76 I 時(shí)鐘輸出允許/禁止。高電平允許系統(tǒng)時(shí)鐘信號(hào)輸出,低電平禁止。
TMODE 63 I 測(cè)試模式選擇。低電平為正常工作模式,高電平為芯片測(cè)試模式。
FILTER <http://www.dzsc.com/stock-ic/FILTER.html> 55 AI 如果使用PLL,應(yīng)在該引腳和數(shù)字地之間接820pF的陶瓷電容。
TCK 58 I JTAG測(cè)試時(shí)鐘。JTAG測(cè)試時(shí)鐘信號(hào)用于切換狀態(tài)信息和檢測(cè)數(shù)據(jù)的輸入輸出。該引腳在片內(nèi)下拉。
TMS 59 I JTAG測(cè)試模式選擇。該信號(hào)控制S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的JTAG測(cè)試操作。該引腳在片內(nèi)上拉。
TDI 60 I JTAG測(cè)試數(shù)據(jù)輸入。在JTAG測(cè)試操作的過(guò)程中,該信號(hào)將指令和數(shù)據(jù)串行送入S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>。該引腳在片內(nèi)上拉。
TDO 61 O JTAG測(cè)試數(shù)據(jù)輸出。在JTAG測(cè)試操作的過(guò)程中,該信號(hào)將指令和數(shù)據(jù)串行送出S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>。
nTRST 62 I JTAG復(fù)位信號(hào),低電平復(fù)位。異步復(fù)位JTAG邏輯。該引腳在片內(nèi)上拉。
ADDR[21:0]/
ADDR[10]/AP 117-110
129-120
135-132 O 地址總線。22位的地址總線可尋址每一個(gè)ROM/ SRAM <http://www.dzsc.com/icstock/221/SRAM.html>組、FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器組、DRAM組和外部I/O組的4M字(64M字節(jié))的地址范圍。
XDATA[31:0] 141-136
154-144
166-159
175-169 I/O 外部數(shù)據(jù)總線(雙向、32位)。S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>支持外部8位,16位,32位的數(shù)據(jù)寬度。
nRAS[3:0]/
nSDCS[3:0] 94,91,
90,89 O DRAM行地址鎖存信號(hào)。S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>支持最多4個(gè)DRAM組,每個(gè)nRAS輸出控制一組。nSDCS[3:0]用作SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>的片選信號(hào)。
nCAS[3:0]
nCAS[0]
/nSDRAS
nCAS[1]
/nSDCAS
nCAS[2]/CKE 98,97,
96,95 O DRAM列地址鎖存信號(hào)。無(wú)論訪問(wèn)哪一個(gè)DRAM組,4個(gè)nCAS輸出信號(hào)均表示字節(jié)選擇。nSDRAS作為SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>的行地址鎖存信號(hào),nSDCAS作為SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>的列地址鎖存信號(hào),CKE作為SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>的時(shí)鐘使能信號(hào)。
nDWE 99 O DRAM寫(xiě)使能信號(hào)。該引腳為DRAM組提供寫(xiě)操作信號(hào)。(nWBE[3:0]用于為ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器組提供寫(xiě)操作信號(hào)。)
nECS[3:0] 70,69,
68,67 O 外部I/O片選信號(hào)??梢杂?個(gè)外部I/O組映射到存儲(chǔ)空間,每一個(gè)外部I/O組的地址范圍最大為16KB。nECS提供每一個(gè)外部I/O組的片選信號(hào)。
nEWAIT 71 I 外部等待信號(hào)。該信號(hào)用于在訪問(wèn)外部I/O設(shè)備時(shí),由外設(shè)插入等待周期。
nRCS[5:0] 88-84,75 O ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>片選信號(hào)。S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>可訪問(wèn)多達(dá)6個(gè)的外部ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>組。
B0SIZE[1:0] 74,73 I ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器組0的數(shù)據(jù)總線寬度設(shè)定。ROM/SRAM/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器組0常用于程序的啟動(dòng)?!?1’=字節(jié)(8位);‘10’=半字(16位);‘11’=字(32位);‘00’=保留
nOE 72 O 輸出使能。當(dāng)對(duì)存儲(chǔ)器進(jìn)行訪問(wèn)的時(shí)候,該信號(hào)控制存儲(chǔ)器的輸出使能。
nWBE[3:0]/
DQM[3:0] 107,
102-100 O 寫(xiě)字節(jié)使能。當(dāng)對(duì)存儲(chǔ)器進(jìn)行寫(xiě)操作時(shí),該信號(hào)控制存儲(chǔ)器(DRAM除外)的寫(xiě)使能。對(duì)于DRAM存儲(chǔ)器組,由nCAS[3:0]和nDWE控制寫(xiě)操作。DQM用于SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>數(shù)據(jù)輸入/輸出的屏蔽信號(hào)。
ExtMREQ 108 I 外部總線控制器請(qǐng)求信號(hào)。外部總線控制器通過(guò)該引腳請(qǐng)求控制外部總線,當(dāng)該信號(hào)有效時(shí),S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>將外部總線置為高阻狀態(tài),以便外部總線控制器取得對(duì)外部總線的控制。當(dāng)ExtMACK信號(hào)為的電平時(shí),S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>重新取得對(duì)外部總線的控制權(quán)。
ExtMACK 109 O 外部總線應(yīng)答信號(hào)。
MDC 50 O 管理數(shù)據(jù)時(shí)鐘。該引腳產(chǎn)生MDIO數(shù)據(jù)輸入輸出時(shí)所需的時(shí)鐘信號(hào)。
MDIO 48 I/O 管理數(shù)據(jù)輸入/輸出。當(dāng)執(zhí)行一個(gè)讀數(shù)據(jù)的命令時(shí),該引腳輸入由物理層產(chǎn)生的數(shù)據(jù),當(dāng)執(zhí)行一個(gè)寫(xiě)數(shù)據(jù)的命令時(shí),由該引腳輸出數(shù)據(jù)到物理層(PHY)。
LITTLE 49 I 小端模式選擇引腳。當(dāng)該引腳為高電平時(shí),S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>工作在小端模式,當(dāng)該引腳為低電平時(shí),工作在大端模式。該引腳在片內(nèi)已下拉,因此,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>缺省工作在大端模式。
COL/COL_10M 38 I 沖突檢測(cè)/10M沖突檢測(cè)。該引腳顯示是否檢測(cè)到?jīng)_突。
TX_CLK/
TXCLK_10M 46 I 發(fā)送時(shí)鐘/10M發(fā)送時(shí)鐘。S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>在TX_CLK的上升沿驅(qū)動(dòng)TXD[3:0]和TX_EN,當(dāng)工作在MII模式時(shí),PHY在TX_CLK的上升沿采樣TXD[3:0]和TX_EN。在發(fā)送數(shù)據(jù)時(shí),TXCLK_10M由10M的PHY產(chǎn)生。
TXD[3:0]
LOOP_10M
TXD_10M 44,43,
40,39 O 發(fā)送數(shù)據(jù)/10M發(fā)送數(shù)據(jù)/10M回環(huán)測(cè)試。TXD[3:0]為發(fā)送數(shù)據(jù)引腳,TXD_10M為10M的PHY的發(fā)送數(shù)據(jù)引腳,LOOP_10M由控制寄存器的回環(huán)測(cè)試位驅(qū)動(dòng)。
TX_EN/
TXEN_10M 47 O 發(fā)送使能/10M發(fā)送使能。
TX_ERR/
PCOMP_10M 45 O 發(fā)送錯(cuò)誤/10M包壓縮使能。
CRS/CRS_10M 28 I 載波偵聽(tīng)/10M載波偵聽(tīng)。
RX_CLK/
RXCLK_10M 37 I 接收時(shí)鐘/10M接收時(shí)鐘。RX_CLK為連續(xù)的時(shí)鐘信號(hào),當(dāng)其頻率為25MHZ <http://www.dzsc.com/icstock/240/25MHZ.html>時(shí),數(shù)據(jù)傳輸速率為100M <http://www.dzsc.com/stock-ic/100M.html>,當(dāng)其頻率為2.5MHz時(shí),數(shù)據(jù)傳輸速率為10M。在接收數(shù)據(jù)時(shí),RXCLK_10M由10M的PHY產(chǎn)生。
RXD[3:0]
RXD_10M 35,34,
33,30 I 接收數(shù)據(jù)/10M接收數(shù)據(jù)。
RX_DV/
LINK10M 29 I 接收數(shù)據(jù)有效/10M連接狀態(tài)。
RX_ERR 36 I 接收錯(cuò)誤。
TXDA 9 O HDLC Ch-A發(fā)送數(shù)據(jù)。
RXDA 7 I HDLC Ch-A接收數(shù)據(jù)。
nDTRA 6 O HDLC Ch-A終端準(zhǔn)備就緒。nDTRA引腳指示數(shù)據(jù)終端設(shè)備準(zhǔn)備發(fā)送或接收。
nRTSA 8 O HDLC Ch-A傳送請(qǐng)求。
nCTSA 10 I HDLC Ch-A傳送清除。
nDCDA 13 &nb
5.2.4 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的系統(tǒng)管理器(SYSTEM <http://www.dzsc.com/stock-ic/SYSTEM.html> Manager)
概述
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html> 微處理器的系統(tǒng)管理器(SYSTEM <http://www.dzsc.com/stock-ic/SYSTEM.html> Manager)在整個(gè)系統(tǒng)工作中起至關(guān)重要作用,只有清楚的了解系統(tǒng)管理器在系統(tǒng)中的作用及工作原理,才能進(jìn)行程序設(shè)計(jì)和系統(tǒng)開(kāi)發(fā),但同時(shí),相對(duì)于8位或16位微處理器而言,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)管理器的工作原理又是比較復(fù)雜的,因此需要讀者認(rèn)真細(xì)致的閱讀該部分內(nèi)容,并通過(guò)編程實(shí)踐加以掌握。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html> 微處理器的系統(tǒng)管理器具有以下功能:
- 基于固定的優(yōu)先級(jí),仲裁來(lái)自幾個(gè)主功能模塊的系統(tǒng)總線訪問(wèn)請(qǐng)求。
- 為訪問(wèn)外部存儲(chǔ)器提供必需的存儲(chǔ)器控制信號(hào)。例如DMA控制器或CPU要訪問(wèn)DRAM <http://www.dzsc.com/stock-ic/DRAM.html>組的某地址,則系統(tǒng)管理器的DRAM <http://www.dzsc.com/stock-ic/DRAM.html>控制器就會(huì)產(chǎn)生必需的normal/EDO 或SDRAM <http://www.dzsc.com/stock-ic/DRAM.html>訪問(wèn)信號(hào)。可由SYSCFG[31]設(shè)定訪問(wèn)normal/EDO或SDRAM <http://www.dzsc.com/stock-ic/DRAM.html>的信號(hào)。
- 為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>和ROM/SRAM,以及外部I/O組之間的總線通信提供必需的信號(hào)。
- 為外部存儲(chǔ)器的數(shù)據(jù)總線和內(nèi)部數(shù)據(jù)總線之間的數(shù)據(jù)流協(xié)調(diào)總線寬度的差別。
- 對(duì)外部存儲(chǔ)器和I/O設(shè)備,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>同時(shí)支持小端模式和大端模式的訪問(wèn)方式。
通過(guò)產(chǎn)生外部總線請(qǐng)求信號(hào),外設(shè)可訪問(wèn)S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的外部總線。另外,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>可通過(guò)插入等待周期(WAIT信號(hào))訪問(wèn)低速外設(shè)。WAIT信號(hào)由外設(shè)產(chǎn)生,可延長(zhǎng)CPU的存儲(chǔ)器訪問(wèn)周期。
系統(tǒng)管理器寄存器(SYSTEM <http://www.dzsc.com/stock-ic/SYSTEM.html> Manager Registers)
系統(tǒng)管理器使用一組專用的特殊功能寄存器來(lái)控制外部存儲(chǔ)器的讀/寫(xiě)操作,通過(guò)對(duì)該組特殊功能寄存器編程,可以設(shè)定:
- 存儲(chǔ)器的類型
- 外部數(shù)據(jù)總線寬度及訪問(wèn)周期
- 定時(shí)的控制信號(hào)(例如RAS和CAS)
- 存儲(chǔ)器組的定位
- 存儲(chǔ)器組的大小
在標(biāo)準(zhǔn)系統(tǒng)配置中訪問(wèn)外設(shè)必需的控制信號(hào)、地址信號(hào)和數(shù)據(jù)信號(hào),系統(tǒng)管理器通過(guò)設(shè)置特殊功能寄存器的值來(lái)控制其產(chǎn)生和處理。特殊功能寄存器也被用于控制對(duì)ROM/SRAM/Flash組的訪問(wèn),同時(shí)還能控制對(duì)多達(dá)四個(gè)DRAM <http://www.dzsc.com/stock-ic/DRAM.html> 組和四個(gè)外部I/O組以及一個(gè)特殊功能寄存器映射區(qū)域的訪問(wèn)。
每個(gè)存儲(chǔ)器組在組內(nèi)通過(guò)基指針(Base Pointer)尋址,其尋址范圍是64KB <http://www.dzsc.com/icstock/721/64KB.html>(16位),而基指針本身為10位。因此S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的最大可尋址范圍是226=64MB <http://www.dzsc.com/stock-ic/64MB.html>(或16M字)。
在進(jìn)行系統(tǒng)存儲(chǔ)器映射時(shí),注意兩個(gè)相連的存儲(chǔ)器組的地址空間決不能重疊。圖5.2.4 為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)存儲(chǔ)器映射。
圖5.2.4 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)存儲(chǔ)器映射
系統(tǒng)存儲(chǔ)器映射(SYSTEM <http://www.dzsc.com/stock-ic/SYSTEM.html> MEMORY <http://www.dzsc.com/icstock/933/MEMORY.html> Map)
關(guān)于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)存儲(chǔ)器映射,以下是幾個(gè)應(yīng)當(dāng)注意的重點(diǎn):
?。?nbsp; S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>采用統(tǒng)一編址的方式,將系統(tǒng)的片外存儲(chǔ)器、片內(nèi)存儲(chǔ)器、特殊功能寄存器和外部的I/O設(shè)備,都映射到64MB <http://www.dzsc.com/stock-ic/64MB.html>的 地址空間,同時(shí),為便于管理,又將地址空間分為如圖5.2.4所示的若干個(gè)存儲(chǔ)器組,可以通過(guò)配置包含基指針(Base Pointer)和尾指針(End Pointer)的特殊功能寄存器,設(shè)定每個(gè)存儲(chǔ)器組的大小和位置。用戶可利用基指針和尾指針設(shè)置連續(xù)的存儲(chǔ)器映射。具體操作如下:即把某個(gè)存儲(chǔ)器組的基 指針的地址設(shè)置為前一個(gè)存儲(chǔ)器組的尾指針的地址。請(qǐng)注意在設(shè)定存儲(chǔ)器組的控制寄存器時(shí),每?jī)蓚€(gè)相連的存儲(chǔ)器組的地址空間決不能重疊,即使這些組被禁用。
- 四 個(gè)外部I/O組被定義在一個(gè)連續(xù)的地址空間中。只需要將基指針?lè)峙浣o外部I/O組0,外部I/O組1的起始地址就等于外部I/O組0的起始地 址+16KB,同理,外部I/O組2的起始地址就等于外部I/O組0的起始地址+32KB,外部I/O組3的起始地址就等于外部I/O組0的起始地 址+48KB。因此,四個(gè)外部組的總的連續(xù)的可尋址范圍被定義在外部I/O組0的起始地址+64KB <http://www.dzsc.com/icstock/721/64KB.html>的地址空間。在整個(gè)可尋址的地址空間中,外部I/O組的起始地址并沒(méi)有被固定。通過(guò)設(shè)定組的基指針,可以設(shè)定一個(gè)具體的組起始地址,但總的地址空間是連續(xù)的64KB <http://www.dzsc.com/icstock/721/64KB.html>。
?。?nbsp; 每個(gè)組的起始物理地址為“基指針左移16位”, 每組末尾的物理地址為“尾指針左移16位 - 1”。
在 上電或系統(tǒng)復(fù)位后,所有組的地址指針寄存器都被初始化到其缺省值。這時(shí),所有的組指針(ROM/SRAM/Flash組0和特殊功能寄存器組除外)都被清 零。這意味著:除ROM/SRAM/Flash組0和特殊功能寄存器組以外,所有其它組在系統(tǒng)啟動(dòng)時(shí)都是未被定義的。這一點(diǎn)很重要,用戶在進(jìn)行程序設(shè)計(jì) 時(shí),一般總是要首先通過(guò)配置相應(yīng)寄存器,定義系統(tǒng)的存儲(chǔ)空間。
ROM/SRAM/Flash組0的尾指針和基指針的復(fù)位值分別為0x200和0x0。這意味著系統(tǒng)復(fù)位后將自動(dòng)定義ROM/SRAM/Flash組0的地址空間為32MB <http://www.dzsc.com/stock-ic/32MB.html>, 實(shí)際地址范圍為0x0000,0000~0x0200,0000-1。ROM/SRAM/Flash組0的這種初始化定義使得系統(tǒng)在上電或復(fù)位后,將系統(tǒng) 的控制權(quán)交給了由用戶編寫(xiě)的啟動(dòng)代碼,當(dāng)然這些啟動(dòng)代碼應(yīng)存放在外部ROM中的,并映射到ROM/SRAM/Flash組0。當(dāng)起動(dòng)代碼執(zhí)行時(shí),它執(zhí)行各 種系統(tǒng)初始化任務(wù),并根據(jù)應(yīng)用系統(tǒng)的外部存儲(chǔ)器和設(shè)備的實(shí)際情況來(lái)重新配置系統(tǒng)的存儲(chǔ)器映射。
特殊功能寄存器組的基址針在系統(tǒng)復(fù)位時(shí)被初始化為0x3FF0000,一般不再改動(dòng)。
圖5.2.5是在系統(tǒng)啟動(dòng)或復(fù)位時(shí)的系統(tǒng)存儲(chǔ)器映射。
圖5.2.5 系統(tǒng)復(fù)位時(shí)的存儲(chǔ)器映射
表5-2-4為系統(tǒng)管理器對(duì)應(yīng)的寄存器,系統(tǒng)的存儲(chǔ)器映射可通過(guò)對(duì)這些寄存器的配置來(lái)完成。
表5-2-4 系統(tǒng)管理器對(duì)應(yīng)的寄存器
寄存器 偏移量 操作 描 述 復(fù)位值
SYSCFG 0x0000 讀/寫(xiě) 系統(tǒng)配置寄存器 0x37FFFF91
CLKCON 0x3000 讀/寫(xiě) 時(shí)鐘控制寄存器 0x00000000
EXTACON0 0x3008 讀/寫(xiě) 外部I/O時(shí)序寄存器1 0x00000000
EXTACON1 0x300C 讀/寫(xiě) 外部I/O時(shí)序寄存器2 0x00000000
EXTDBWTH 0x3010 讀/寫(xiě) 分組數(shù)據(jù)總線的寬度設(shè)置寄存器 0x00000000
ROMCON0 0x3014 讀/寫(xiě) ROM/ARAM/FLASH組0控制寄存器 0x20000060
ROMCON1 0x3018 讀/寫(xiě) ROM/ARAM/FLASH組1控制寄存器 0x00000060
ROMCON2 0x301C 讀/寫(xiě) ROM/ARAM/FLASH組2控制寄存器 0x00000060
ROMCON3 0x3020 讀/寫(xiě) ROM/ARAM/FLASH組3控制寄存器 0x00000060
ROMCON4 0x3024 讀/寫(xiě) ROM/ARAM/FLASH組4控制寄存器 0x00000060
ROMCON5 0x3028 讀/寫(xiě) ROM/ARAM/FLASH組5控制寄存器 0x00000060
DRAM <http://www.dzsc.com/stock-ic/DRAM.html>CON0 0x302C 讀/寫(xiě) DRAM <http://www.dzsc.com/stock-ic/DRAM.html>組0控制寄存器 0x00000000
DRAM <http://www.dzsc.com/stock-ic/DRAM.html>CON1 0x3030 讀/寫(xiě) DRAM <http://www.dzsc.com/stock-ic/DRAM.html>組1控制寄存器 0x00000000
DRAM <http://www.dzsc.com/stock-ic/DRAM.html>CON2 0x3034 讀/寫(xiě) DRAM <http://www.dzsc.com/stock-ic/DRAM.html>組2控制寄存器 0x00000000
DRAM <http://www.dzsc.com/stock-ic/DRAM.html>CON3 0x3038 讀/寫(xiě) DRAM <http://www.dzsc.com/stock-ic/DRAM.html>組3控制寄存器 0x00000000
REFEXTCON 0x303C 讀/寫(xiě) 刷新與外部I/O控制寄存器 0x000083FD
根據(jù)外部存儲(chǔ)器的寬度決定外部地址譯碼方法(External Address Translation Method Depends on the Width of External MEMORY <http://www.dzsc.com/icstock/933/MEMORY.html>)
與某些ARM芯片不同,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>應(yīng) 用系統(tǒng)的地址總線的連接方式相對(duì)簡(jiǎn)單。由于ARM7TDMI采用32位地址總線,所有的地址都可以看作字節(jié)地址,地址總線提供4GB的線性尋址空間,當(dāng)發(fā) 出字訪問(wèn)信號(hào)時(shí),存儲(chǔ)系統(tǒng)忽略低2位A[1:0],當(dāng)發(fā)出半字訪問(wèn)信號(hào)時(shí),存儲(chǔ)系統(tǒng)忽略低位A[0],基于以上原因,某些ARM系統(tǒng)在與存儲(chǔ)器接口時(shí),地 址總線的連接需要錯(cuò)開(kāi),而S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>則通過(guò)一個(gè)片內(nèi)的地址總線生成部件,隱藏該過(guò)程,用戶在設(shè)計(jì)系統(tǒng)時(shí),只需將S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的地址總線與存儲(chǔ)器的地址總線一一對(duì)應(yīng)連接即可(即S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的A[0]與外部存儲(chǔ)器的A[0]對(duì)齊)。表5-2-5和圖5.2.6說(shuō)明了該過(guò)程。
表5-2-5 地址總線生成
數(shù)據(jù)總線寬度 外部地址引腳,ADDR[21:0] 可訪問(wèn)的存儲(chǔ)空間
8位 A21-A0(內(nèi)部) 4M字節(jié)
16位 A21-A1(內(nèi)部) 4M半字
32位 &
5.3 系統(tǒng)的硬件選型與單元電路設(shè)計(jì)
從這一節(jié)開(kāi)始,將詳細(xì)描述系統(tǒng)的硬件選型與設(shè)計(jì),希望通過(guò)對(duì)這些章節(jié)的閱讀,能使讀者具有初步設(shè)計(jì)特定系統(tǒng)的能力。
盡管硬件選型與單元電路設(shè)計(jì)部分的內(nèi)容是基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的系統(tǒng),但由于ARM體系結(jié)構(gòu)的一致性和常見(jiàn)外圍電路的通用性,只要讀者能真正理解本部分的設(shè)計(jì)方法,從而設(shè)計(jì)出基于其他ARM微處理器的系統(tǒng),應(yīng)該也是比較容易的。
需要說(shuō)明,以下的應(yīng)用電路可能不是最佳的,但經(jīng)驗(yàn)證是可以正常工作的。
5.3.1 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>芯片及引腳分析
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>共有208只引腳,采用QFP封裝,這對(duì)于那些常使用8位/16位DIP封裝微控制器的讀者來(lái)說(shuō),可能會(huì)覺(jué)得有點(diǎn)復(fù)雜,然而,盡管S3C4510B引腳較多,但根據(jù)各自的功能,分布很有規(guī)律。
首 先,電源和接地引腳有近50根,再除去地址總線、數(shù)據(jù)總線和通用I/O口,以及其他的專用模塊如HDLC、UART、IIC、MAC等的接口,真正需要仔 細(xì)研究的引腳數(shù)就不是很多了,但這些引腳主要是控制信號(hào),需要認(rèn)真對(duì)待,在此先進(jìn)行簡(jiǎn)單的分析,其后的單元電路設(shè)計(jì)里,會(huì)有更再詳細(xì)的說(shuō)明。
在硬件系統(tǒng)的設(shè)計(jì)中,應(yīng)當(dāng)注意芯片引腳的類型,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>(也包括其他的微處理器)的引腳主要分為三類,即:輸入(I)、輸出(O)、輸入/輸出(I/O)。
輸出類型的引腳主要用于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>對(duì)外設(shè)的控制或通信,由S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>主動(dòng)發(fā)出,這些引腳的連接不會(huì)對(duì)S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>自身的運(yùn)行有太大的影響。
輸入/輸出類型的引腳主要是S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>與外設(shè)的雙向數(shù)據(jù)傳輸通道。
而某些輸入類型的引腳,其電平信號(hào)的設(shè)置是S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>本身正常工作的前提,在系統(tǒng)設(shè)計(jì)時(shí)必須小心處理。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的主要控制信號(hào)如下:
LITTLE(Pin49):大、小端模式選擇引腳。高電平 = 小端模式;低電平 = 大端模式;該引腳在片內(nèi)下拉,系統(tǒng)默認(rèn)為大端模式,但在實(shí)際系統(tǒng)中一般使用小端模式,更符合我們的使用習(xí)慣,因此該引腳可上拉或接電源。
FILTER <http://www.dzsc.com/stock-ic/FILTER.html>(Pin55):如果使用PLL倍頻電路,應(yīng)在該引腳和地之間接820pF的陶瓷電容。在實(shí)際系統(tǒng)中,一般應(yīng)使用PLL電路,因此,該電容應(yīng)連接。
TCK、TMS、TDI、TDO、nTRST(Pin58~Pin62):JTAG接口引腳。根據(jù)IEEE標(biāo)準(zhǔn),TCK應(yīng)下拉,TMS、TDI和nTRST應(yīng)上拉。S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>已按此標(biāo)準(zhǔn)在片內(nèi)連接,只需要與JTAG插座直接相連即可,但某些ARM芯片并未做相應(yīng)的處理,在設(shè)計(jì)電路時(shí)應(yīng)注意。
TMODE(Pin63):測(cè)試模式。高電平 = 芯片測(cè)試模式;低電平 = 正常工作模式;用戶一般不作芯片測(cè)試,該引腳下拉或接地,使芯片處于正常工作模式。
nEWAIT(Pin71):外部等待請(qǐng)求信號(hào)。該引腳應(yīng)上拉。
B0SIZE[1:0](Pin74,Pin73):BANK0數(shù)據(jù)寬度選擇?!?1’ = 8位;’10’ = 16位;’11’ = 32位;’00’ = 系統(tǒng)保留。
CLKOEN(Pin76):時(shí)鐘輸出允許/禁止。高電平 = 允許;低電平 = 禁止。一些外圍器件(如SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>)需要CPU的時(shí)鐘輸出作為自身的時(shí)鐘源,該引腳一般接高電平,使時(shí)鐘輸出為允許狀態(tài)。
XCLK(Pin80):系統(tǒng)時(shí)鐘源。接有源晶振的輸出。
nRESET(Pin82):系統(tǒng)復(fù)位引腳。低電平復(fù)位,當(dāng)系統(tǒng)正常工作時(shí),該引腳應(yīng)處于高電平狀態(tài)。
CLKSEL(Pin83):時(shí)鐘選擇。高電平 = XCLK直接作為系統(tǒng)的工作時(shí)鐘;低電平 = XCLK經(jīng)過(guò)PLL電路倍頻后作為系統(tǒng)的工作時(shí)鐘。
ExtMREQ(Pin108):外部主機(jī)總線請(qǐng)求信號(hào)。該引腳應(yīng)下拉。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的其余引腳為電源線、接地線、數(shù)據(jù)總線、地址總線以及其他功能模塊地輸入/輸出線,對(duì)CPU自身地運(yùn)行地影響相對(duì)較小,其連接方式也比較簡(jiǎn)單,在此不作詳述。
5.3.2 電源電路
在該系統(tǒng)中,需要使用5V和3.3V <http://www.dzsc.com/icstock/508/3.3V.html>的直流穩(wěn)壓電源,其中,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>及部分外圍器件需3.3V <http://www.dzsc.com/icstock/508/3.3V.html>電源,另外部分器件需5V電源,為簡(jiǎn)化系統(tǒng)電源電路的設(shè)計(jì),要求整個(gè)系統(tǒng)的輸入電壓為高質(zhì)量的5V的直流穩(wěn)壓電源。系統(tǒng)電源電路如下圖所示:
圖5.3.1 系統(tǒng)的電源電路
有很多DC-DC轉(zhuǎn)換器可完成5V到3.3V <http://www.dzsc.com/icstock/508/3.3V.html>的轉(zhuǎn)換,在此選用LINEAR <http://www.dzsc.com/icstock/385/LINEAR.html> TECHNOLOGY <http://www.dzsc.com/stock-ic/TECHNOLOGY.html>的LT108X系列。常見(jiàn)的型號(hào)和對(duì)應(yīng)的電流輸出如下:
LT1083 <http://www.dzsc.com/icstock/403/LT1083.html> 7.5A
LT1084 <http://www.dzsc.com/stock-ic/LT1084.html> 5A
LT1085 <http://www.dzsc.com/icstock/403/LT1085.html> 3A
LT1086 <http://www.dzsc.com/icstock/403/LT1086.html> 1.5A
設(shè)計(jì)者可根據(jù)系統(tǒng)的實(shí)際功耗,選擇不同的器件。
5.3.3 晶振電路與復(fù)位電路
晶振電路用于向CPU及其他電路提供工作時(shí)鐘。在該系統(tǒng)中,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>使用有源晶振。不同于常用的無(wú)源晶振,有源晶振的接法略有不同。常用的有源晶振的接法如下圖所示:
圖5.3.2 系統(tǒng)的晶振電路
根據(jù)S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的最高工作頻率以及PLL電路的工作方式,選擇10MHZ <http://www.dzsc.com/icstock/609/10MHZ.html>的有源晶振,10MHZ <http://www.dzsc.com/icstock/609/10MHZ.html>的晶振頻率經(jīng)過(guò)S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>片內(nèi)的PLL電路倍頻后,最高可以達(dá)到50MHZ <http://www.dzsc.com/icstock/619/50MHZ.html>。片內(nèi)的PLL電路兼有頻率放大和信號(hào)提純的功能,因此,系統(tǒng)可以以較低的外部時(shí)鐘信號(hào)獲得較高的工作頻率,以降低因高速開(kāi)關(guān)時(shí)鐘所造成的高頻噪聲。
有源晶振的1腳接5V電源,2腳懸空,3腳接地,4腳為晶振的輸出,可通過(guò)一個(gè)小電阻(此處為22歐姆)接S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的XCLK引腳。
在系統(tǒng)中,復(fù)位電路主要完成系統(tǒng)的上電復(fù)位和系統(tǒng)在運(yùn)行時(shí)用戶的按鍵復(fù)位功能。復(fù)位電路可由簡(jiǎn)單的RC電路構(gòu)成,也可使用其他的相對(duì)較復(fù)雜,但功能更完善的電路。
本系統(tǒng)采用較簡(jiǎn)單的RC復(fù)位電路,經(jīng)使用證明,其復(fù)位邏輯是可靠的。復(fù)位電路如圖5.3.3所示:
圖5.3.3 系統(tǒng)的復(fù)位電路
該復(fù)位電路的工作原理如下:在系統(tǒng)上電時(shí),通過(guò)電阻R1向電容C1充電,當(dāng)C1兩端的電壓未達(dá)到高電平的門限電壓時(shí),Reset端輸出為低電平,系統(tǒng)處于復(fù)位狀態(tài);當(dāng)C1兩端的電壓達(dá)到高電平的門限電壓時(shí),Reset端輸出為高電平,系統(tǒng)進(jìn)入正常工作狀態(tài)。
當(dāng)用戶按下按鈕S1時(shí),C1兩端的電荷被瀉放掉,Reset端輸出為低電平,系統(tǒng)進(jìn)入復(fù)位狀態(tài),再重復(fù)以上的充電過(guò)程,系統(tǒng)進(jìn)入正常工作狀態(tài)。
兩級(jí)非門電路用于按鈕去抖動(dòng)和波形整形;nReset端的輸出狀態(tài)與Reset端相反,以用于高電平復(fù)位的器件;通過(guò)調(diào)整R1和C1的參數(shù),可調(diào)整復(fù)位狀態(tài)的時(shí)間。
5.3.4 FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器接口電路
FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存 儲(chǔ)器是一種可在系統(tǒng)(In-System)進(jìn)行電擦寫(xiě),掉電后信息不丟失的存儲(chǔ)器。它具有低功耗、大容量、擦寫(xiě)速度快、可整片或分扇區(qū)在系統(tǒng)編程(燒 寫(xiě))、擦除等特點(diǎn),并且可由內(nèi)部嵌入的算法完成對(duì)芯片的操作,因而在各種嵌入式系統(tǒng)中得到了廣泛的應(yīng)用。作為一種非易失性存儲(chǔ)器,F(xiàn)LASH <http://www.dzsc.com/stock-ic/FLASH.html>在系統(tǒng)中通常用于存放程序代碼、常量表以及一些在系統(tǒng)掉電后需要保存的用戶數(shù)據(jù)等。常用的FLASH <http://www.dzsc.com/stock-ic/FLASH.html>為8位或16位的數(shù)據(jù)寬度,編程電壓為單3.3V <http://www.dzsc.com/icstock/508/3.3V.html>。主要的生產(chǎn)廠商為ATMEL <http://www.dzsc.com/icstock/151/ATMEL.html>、AMD、HYUNDAI <http://www.dzsc.com/stock-ic/HYUNDAI.html>等,他們生產(chǎn)的同型器件一般具有相同的電氣特性和封裝形式,可通用。
以該系統(tǒng)中使用的FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>為例,簡(jiǎn)要描述一下FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器的基本特性:
圖5.3.4 HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>的邏輯框圖
HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>的單片存儲(chǔ)容量為16M位(2M字節(jié)),工作電壓為2.7V <http://www.dzsc.com/icstock/189/2.7V.html>~3.6V <http://www.dzsc.com/stock-ic/3.6V.html>,采用48腳TSOP封裝或48腳FBGA封裝,16位數(shù)據(jù)寬度,可以以8位(字節(jié)模式)或16位(字模式)數(shù)據(jù)寬度的方式工作。
HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>僅需單3V電壓即可完成在系統(tǒng)的編程與擦除操作,通過(guò)對(duì)其內(nèi)部的命令寄存器寫(xiě)入標(biāo)準(zhǔn)的命令序列,可對(duì)FLASH <http://www.dzsc.com/stock-ic/FLASH.html>進(jìn)行編程(燒寫(xiě))、整片擦除、按扇區(qū)擦除以及其他操作。
HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>的邏輯框圖、引腳分布及信號(hào)描述分別如圖5.3.4、圖5.3.5和表5-3-1所示:
圖5.3.5 HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>引腳分布(TSOP48 <http://www.dzsc.com/stock-ic/TSOP48.html>封裝)
表5-3-1 HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>的引腳信號(hào)描述
引 腳 類型 描 述
A[19:0] I 地址總線。在字節(jié)模式下,DQ[15]/A[-1]用作21位字節(jié)地址的最低位。
DQ[15]/A[-1]
DQ[14:0] I/O
三態(tài) 數(shù)據(jù)總線。在讀寫(xiě)操作時(shí)提供8位或16位的數(shù)據(jù)寬度。在字節(jié)模式下,DQ[15]/A[-1]用作21位字節(jié)地址的最低位,而DQ[14:8]處于高阻狀態(tài)。
BYTE# I 模式選擇。低電平選擇字節(jié)模式,高電平選擇字模式
CE# I 片選信號(hào),低電平有效。在對(duì)HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>進(jìn)行讀寫(xiě)操作時(shí),該引腳必須為低電平,當(dāng)為高電平時(shí),芯片處于高阻旁路狀態(tài)
OE# I 輸出使能,低電平有效。在讀操作時(shí)有效,寫(xiě)操作時(shí)無(wú)效。
WE# I 寫(xiě)使能,低電平有效。在對(duì)HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>進(jìn)行編程和擦除操作時(shí),控制相應(yīng)的寫(xiě)命令。
RESET# I 硬件復(fù)位,低電平有效。對(duì)HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>進(jìn)行硬件復(fù)位。當(dāng)復(fù)位時(shí),HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>立即終止正在進(jìn)行的操作。
RY/BY# O 就緒/忙 狀態(tài)指示。用于指示寫(xiě)或擦除操作是否完成。當(dāng)HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>正在進(jìn)行編程或擦除操作時(shí),該引腳位低電平,操作完成時(shí)為高電平,此時(shí)可讀取內(nèi)部的數(shù)據(jù)。
VCC -- 3.3V <http://www.dzsc.com/icstock/508/3.3V.html>電源
VSS -- 接地
以上為一款常見(jiàn)的FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>的簡(jiǎn)介,更具體的內(nèi)容可參考HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>的用戶手冊(cè)。其他類型的
5.4 硬件系統(tǒng)的調(diào)試
通過(guò)5.3節(jié)對(duì)S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>應(yīng)用系統(tǒng)設(shè)計(jì)方法的閱讀,具有一定系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)的讀者就可以設(shè)計(jì)開(kāi)發(fā)自己的特定應(yīng)用系統(tǒng),上節(jié)所介紹的內(nèi)容實(shí)際上可理解為一個(gè)基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的最小系統(tǒng),讀者可根據(jù)自己的實(shí)際需要做適當(dāng)?shù)脑鰷p。
當(dāng) 系統(tǒng)設(shè)計(jì)制作完成時(shí),必須經(jīng)過(guò)仔細(xì)的調(diào)試,才能保證系統(tǒng)按照設(shè)計(jì)意圖正常工作。盡管系統(tǒng)的調(diào)試與個(gè)人對(duì)電路工作原理的理解和實(shí)際的電路調(diào)試經(jīng)驗(yàn)有很大的關(guān) 系,但一定的調(diào)試方法也是必不可少的。掌握正確的調(diào)試方法可使調(diào)試工作變得容易,大大縮短系統(tǒng)的開(kāi)發(fā)時(shí)間,反之,可能會(huì)使整個(gè)系統(tǒng)的開(kāi)發(fā)前功盡棄,以失敗 告終。
本節(jié)以單元電路為單位,并結(jié)合筆者自身在系統(tǒng)調(diào)試時(shí)所遇到的一些具有代表性的問(wèn)題,循序漸進(jìn)的介紹整個(gè)系統(tǒng)的調(diào)試過(guò)程。在此,筆者建議:當(dāng) 用戶的印制電路板制作完畢后,不要急于焊接元器件,請(qǐng)首先對(duì)照原理圖仔細(xì)檢查印制電路板的連線,確保無(wú)誤后方可焊接。同時(shí),盡可能的以各單元電路為單位, 一個(gè)個(gè)焊接調(diào)試,以便在調(diào)試過(guò)程中遇到困難時(shí)縮小故障范圍,在系統(tǒng)上電后,應(yīng)先檢查電路工作有無(wú)異常,芯片在工作時(shí)有一定的發(fā)熱是正常的,但如果有芯片特 別發(fā)燙,則一定有故障存在,需斷電檢查確認(rèn)無(wú)誤后方可繼續(xù)通電調(diào)試。
調(diào)試工具需要示波器、萬(wàn)用表等,同時(shí)需要ARM調(diào)試開(kāi)發(fā)軟件ADS或SDT及相應(yīng)的仿真器,本系統(tǒng)在調(diào)試時(shí)使用ADS1.2及由北京微芯力科技有限公司開(kāi)發(fā)的ARM JTAG仿真器。關(guān)于ADS的使用方法在以后的章節(jié)有詳細(xì)的敘述。
5.4.1 電源、晶振及復(fù)位電路
電源電路、晶振電路和復(fù)位電路相對(duì)比較簡(jiǎn)單,按圖5.3.1、圖5.3.2和圖5.3.3連接后應(yīng)該就可以正常工作,此時(shí)電源電路的輸出因?yàn)镈C 3.3V <http://www.dzsc.com/icstock/508/3.3V.html>。
用示波器觀測(cè),有源晶振的輸出應(yīng)為10MHZ <http://www.dzsc.com/icstock/609/10MHZ.html>;
復(fù)位電路的RESET端在未按按鈕時(shí)輸出應(yīng)為高電平(3.3V),按下按鈕后變?yōu)榈碗娖?,按鈕松開(kāi)后應(yīng)恢復(fù)到高電平。
電源電路、晶振電路和復(fù)位電路是整個(gè)系統(tǒng)正常工作的基礎(chǔ),應(yīng)首先保證他們的正常工作。
5.4.2 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>及JTAG接口電路
在保證電源電路、晶振電路和復(fù)位電路正常工作的前提下,可通過(guò)JTAG接口調(diào)試S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>,在系統(tǒng)上電前,首先應(yīng)檢測(cè)JTAG接口的TMS、TCK、TDI、TDO信號(hào)是否已與S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的對(duì)應(yīng)引腳相連,其次應(yīng)檢測(cè)S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的nEWAIT引腳(Pin71)是否已上拉,ExtMREQ引腳(Pin108)是否已下拉,對(duì)這兩只引腳的處理應(yīng)注意,作者遇到多起S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>不能正常工作或無(wú)法與JTAG接口通信,均與沒(méi)有正確處理這兩只引腳有關(guān)。
給系統(tǒng)上電后,可通過(guò)示波器查看S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>對(duì)應(yīng)引腳的輸出波形,判斷是否已正常工作,若S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>已正常工作,在使能片內(nèi)PLL電路的情況下,SDCLK/MCLKO引腳(Pin77)應(yīng)輸出頻率為50MHZ <http://www.dzsc.com/icstock/619/50MHZ.html>的波形,同時(shí),MDC引腳(Pin50)和其他一些引腳也應(yīng)有波形輸出。
在保證S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>已正常工作的情況下,可使用ADS或SDT通過(guò)JTAG接口對(duì)片內(nèi)的部件進(jìn)行訪問(wèn)和控制。
在此,首先通過(guò)對(duì)片內(nèi)控制通用I/O口的特殊功能寄存器的操作,來(lái)點(diǎn)亮連接在P3~P0口上的4只LED,用以驗(yàn)證ADS或SDT調(diào)試環(huán)境是否已正確設(shè)置,以及與JTAG接口的連接是否正常。
ADS和SDT均為ARM公司為方便用戶在ARM芯片上進(jìn)行應(yīng)用開(kāi)發(fā)而推出的一整套集成開(kāi)發(fā)工具,其中,ADS為SDT的升級(jí)版本。該系統(tǒng)的調(diào)試以ADS為例,同時(shí)也適合于SDT開(kāi)發(fā)環(huán)境。圖5.4.1為調(diào)試系統(tǒng)的硬件連接。
圖5.4.1 調(diào)試系統(tǒng)的硬件連接
按圖5.4.1連接好硬件后,打開(kāi)AXD Debugger,建立與目標(biāo)板(待調(diào)試的系統(tǒng)板)的連接,AXD Debugger有軟件仿真方式和帶目標(biāo)系統(tǒng)的調(diào)試方式,此時(shí)應(yīng)工作在帶目標(biāo)系統(tǒng)的調(diào)試方式。
選擇菜單SYSTEM <http://www.dzsc.com/stock-ic/SYSTEM.html> Views→Command LINE <http://www.dzsc.com/stock-ic/LINE.html> Interface功能,該選項(xiàng)為AXD Debugger的一個(gè)命令行窗口,可在該窗口內(nèi)輸入各種調(diào)試命令,使用非常方便。在命令行窗口輸入:
>setmem 0x3FF5000, 0xFFFF, 32
>setmem 0x3FF5008, 0xFFFF, 32
setmem命令用于對(duì)特定的地址設(shè)置特定的值,待設(shè)定的值可以是8位、16位或32位,在此,對(duì)通用I/O口的模式寄存器和數(shù)據(jù)寄存器設(shè)置相應(yīng)的值,點(diǎn)亮LED。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>在 復(fù)位后,特殊功能寄存器的基地址為0x3FF0000, 由表5-2-3可知,I/O口的模式寄存器偏移地址為0x5000,因此,I/O口的模式寄存器的物理地址為0x3FF5000,設(shè)定該寄存器的值為 0xFFFF,將I/O口置為輸出方式。I/O口的數(shù)據(jù)寄存器的物理地址為0x3FF5008,設(shè)定該寄存器的值為0xFFFF,將I/O口的輸出置為高 電平。
在執(zhí)行完以上兩條命令后,連接在通用I/O口的4只LED應(yīng)被點(diǎn)亮,表示調(diào)試系統(tǒng)的軟、硬件連接完好,可進(jìn)行下一步的調(diào)試工作,否則,應(yīng)重新檢查調(diào)試系統(tǒng)。
用戶若使用SDT作為調(diào)試工具,操作方法類似。按圖5.4.1連接好硬件后,打開(kāi)ARM Debugger for Windows,建立與目標(biāo)板(待調(diào)試的系統(tǒng)板)的連接,選擇菜單View→Command功能,即可顯示命令行窗口,在命令行窗口輸入:
Debug:let 0x3FF5000 = 0xFFFF
Debug:let 0x3FF5008 = 0xFFFF
執(zhí)行完以上兩條命令后,連接在通用I/O口的4只LED應(yīng)被點(diǎn)亮。
關(guān)于通用I/O口更具體的工作原理和使用方法,可參考S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>用戶手冊(cè)。
用戶系統(tǒng)若能正常完成上述操作并成功點(diǎn)亮連接在P3~P0口上的LED顯示器,則表明S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>已在正常工作,且調(diào)試環(huán)境也已正確建立,以后的調(diào)試工作就相對(duì)簡(jiǎn)單。筆者曾遇到多個(gè)用戶系統(tǒng)因?yàn)椴荒芡瓿蛇@步工作,使開(kāi)發(fā)者失去信心而最終放棄。
5.4.3 SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>接口電路的調(diào)試
在系統(tǒng)的兩類存儲(chǔ)器中,SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>相對(duì)于FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器控制信號(hào)較多,似乎調(diào)試應(yīng)該困難一些,但由于SDRAM的所有刷新及控制信號(hào)均由S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>片內(nèi)的專門部件控制,無(wú)需用戶干預(yù),在S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>正常工作的前提下,只要連線無(wú)誤,SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>就應(yīng)能正常工作,反之,F(xiàn)LASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器的編程、擦除操作均需要用戶編程控制,且程序還應(yīng)在SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>中運(yùn)行,因此,應(yīng)先調(diào)試好SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>存儲(chǔ)器系統(tǒng),再進(jìn)行FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器系統(tǒng)的調(diào)試。
在進(jìn)行存儲(chǔ)器系統(tǒng)調(diào)試之前,用戶必須深入了解S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)管理器關(guān)于存儲(chǔ)器映射的工作原理。
基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)的最大可尋址空間為64MB <http://www.dzsc.com/stock-ic/64MB.html>,采用統(tǒng)一編址的方式,將系統(tǒng)的SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>、SRAM <http://www.dzsc.com/icstock/221/SRAM.html>、ROM、FLASH <http://www.dzsc.com/stock-ic/FLASH.html>、外部I/O以及片內(nèi)的特殊功能寄存器和8K一體化SRAM <http://www.dzsc.com/icstock/221/SRAM.html>均映射到該地址空間。為便于使用與管理,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>又將64MB <http://www.dzsc.com/stock-ic/64MB.html>的地址空間分為若干個(gè)組,分別由相應(yīng)的特殊功能寄存器進(jìn)行控制:
?。?nbsp; ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>組0~ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>組5,用于配置ROM、SRAM <http://www.dzsc.com/icstock/221/SRAM.html>或FLASH <http://www.dzsc.com/stock-ic/FLASH.html>,分別由特殊功能寄存器ROMCON0~ROMCON5控制;
?。?nbsp; DRAM/SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>組0~DRAM/SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>組3用于配置DRAM或SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>,分別由特殊功能寄存器DRAMCON0~DRAMCON3控制;
?。?nbsp; 外部I/O組0~外部I/O組3用于配置系統(tǒng)的其他外擴(kuò)接口器件,由特殊功能寄存器REFEXTCON控制;
?。?nbsp; 特殊功能寄存器組用于配置S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>片內(nèi)特殊功能寄存器的基地址以及片內(nèi)的8K一體化SRAM <http://www.dzsc.com/icstock/221/SRAM.html>,由特殊功能寄存器SYSCFG控制;
在該系統(tǒng)中,使用了FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器和SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>,分別配置在ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>組0和DRAM/SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>組0,暫未使用外擴(kuò)接口器件。
參照表5-2-4和5.2.4節(jié)對(duì)應(yīng)特殊功能寄存器的相關(guān)描述可知,當(dāng)系統(tǒng)復(fù)位時(shí),只有ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>組0被映射到地址空間為0x0000,0000~0x0200,0000的位置,特殊功能寄存器的基地址被映射到0x03FF,0000,片內(nèi)8K一體化SRAM <http://www.dzsc.com/icstock/221/SRAM.html>的起始地址被映射到0x03FE,0000,它們是可訪問(wèn)的,而其他的存儲(chǔ)器組均未被映射,是不可訪問(wèn)的。
因此,要調(diào)試SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>存儲(chǔ)器系統(tǒng),首先應(yīng)配置相關(guān)的特殊功能寄存器,使系統(tǒng)中的SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>能被訪問(wèn)。表5-4-1為針對(duì)該系統(tǒng)的與系統(tǒng)管理器相關(guān)的特殊功能寄存器的配置,以下詳細(xì)說(shuō)明該系統(tǒng)所使用的相關(guān)特殊功能寄存器的配置方法。
表5-4-1 系統(tǒng)管理器相關(guān)特殊功能寄存器的配置
寄存器 偏移量 配置值
SYSCFG 0x0000 0xE7FF,FF82
EXTDBWTH 0x3010 0x0000,3000 <http://www.dzsc.com/stock-ic/3000.html>
ROMCON0 0x3014 0x0200,0060
DRAMCON0 0x302C 0x1401,0380
REFEXTCON 0x303C 0xCE33,83FD
SYSCFG = 0xE7FF,FF82;其含義為:
為4個(gè)DRAM組選擇SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>;特殊功能寄存器組的基地址為0x03FF,0000;片內(nèi)SRAM <http://www.dzsc.com/icstock/221/SRAM.html>基地址為0x03FE,0000;4KB配置為SRAM <http://www.dzsc.com/icstock/221/SRAM.html>,另外4KB配置為Cache;使能Cache操作。
EXTDBWTH = 0x0000,3000 <http://www.dzsc.com/stock-ic/3000.html>;其含義為:
4個(gè)外部I/O組禁用;DRAM/SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>組0配置為32位數(shù)據(jù)寬度,其余的DRAM/SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>組禁用;ROM/SRAM/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>組0由B0SIZE[1:0]的狀態(tài)配置,其余ROM/SRAM <http://www.dzsc.com/icstock/221/SRAM.html>/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>組禁用。
ROMCON0 = 0x0200,0060;其含義為:
該系統(tǒng)共有2MB的FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器,映射到地址空間的0x0000,0000~(0x0020,0000-1)處。
DRAMCON0 = 0x1401,0380;其含義為:
該系統(tǒng)共有16MB的SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>,映射到地址空間的0x0040,0000~(0x0140,0000-1)處。
用戶也可將FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器和SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>映射到地址空間的其他位置,但注意組與組之間的地址不要發(fā)生重疊。
DRAMCON0 = 0xCE33,83FD;其含義為:
配置SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>的刷新計(jì)數(shù)值,刷新時(shí)間、刷新使能等。
系統(tǒng)管理器對(duì)應(yīng)的其他特殊功能寄存器使用其復(fù)位值,用戶也可根據(jù)自身系統(tǒng)的特定情況,對(duì)相關(guān)特殊功能寄存器進(jìn)行配置。
在C:\下建立文本文件memmap.txt,其內(nèi)容為:
第6章 部件工作原理與編程示例
本章主要以S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的幾個(gè)常用功能部件為編程對(duì)象,介紹基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的系統(tǒng)的程序設(shè)計(jì)與調(diào)試,同時(shí)簡(jiǎn)介BootLoader的基本原理和編程方法,通過(guò)對(duì)本章的閱讀,可以使讀者了解S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>各功能部件的工作原理及基本編程方法。
本章的主要內(nèi)容包括:
?。?nbsp; 嵌入式系統(tǒng)應(yīng)用程序設(shè)計(jì)的基本方法。
?。?nbsp; S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>通用I/O口的工作原理與編程示例。
?。?nbsp; S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>串行通信控制器的工作原理與編程示例。
?。?nbsp; S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>中斷控制器的工作原理與編程示例。
?。?nbsp; S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>定時(shí)器的工作原理與編程示例。
- S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html> DMA控制器的工作原理與編程示例。
- S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html> IIC總線控制器的工作原理。
?。?nbsp; S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html> 以太網(wǎng)控制器的工作原理。
?。?nbsp; FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲(chǔ)器的工作原理與編程示例。
?。?nbsp; BootLoader簡(jiǎn)介
6.1 嵌入式系統(tǒng)的程序設(shè)計(jì)方法
一 般說(shuō)來(lái),對(duì)于一個(gè)完整的嵌入式應(yīng)用系統(tǒng)的開(kāi)發(fā),硬件的設(shè)計(jì)與調(diào)試工作僅占整個(gè)工作量的一半,應(yīng)用系統(tǒng)的程序設(shè)計(jì)也是嵌入式系統(tǒng)設(shè)計(jì)一個(gè)非常重要的方面,程 序的質(zhì)量直接影響整個(gè)系統(tǒng)功能的實(shí)現(xiàn),好的程序設(shè)計(jì)可以克服系統(tǒng)硬件設(shè)計(jì)的不足,提高應(yīng)用系統(tǒng)的性能,反之,會(huì)使整個(gè)應(yīng)用系統(tǒng)無(wú)法正常工作。
本章從應(yīng)用的角度出發(fā),以S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的 各個(gè)功能模塊為編程對(duì)象,介紹一些實(shí)用的程序段,讀者既可按自己的需要修改,也可吸收其設(shè)計(jì)思想和方法,以便設(shè)計(jì)出適合于自己特定應(yīng)用系統(tǒng)的實(shí)用程序。同 時(shí),由于ARM體系結(jié)構(gòu)的一致性,盡管以下的應(yīng)用程序段是針對(duì)特定硬件平臺(tái)開(kāi)發(fā)的,其編程思路同樣適合于其他類型的ARM微處理器。
不同于基于PC平臺(tái)的程序開(kāi)發(fā),嵌入式系統(tǒng)的程序設(shè)計(jì)具有其自身的特點(diǎn),程序設(shè)計(jì)的方法也會(huì)因系統(tǒng)或因人而異,但其程序設(shè)計(jì)還是有其共同的特點(diǎn)及規(guī)律的。在編寫(xiě)嵌入式系統(tǒng)應(yīng)用程序時(shí),可采取如下幾個(gè)步驟:
?。?) 明確所要解決的問(wèn)題:根據(jù)問(wèn)題的要求,將軟件分成若干個(gè)相對(duì)獨(dú)立的部分,并合理設(shè)計(jì)軟件的總體結(jié)構(gòu)。
?。?) 合理配置系統(tǒng)資源:與基于8位或16位微控制器的系統(tǒng)相比較,基于32位微控制器的系統(tǒng)資源要豐富得多,但合理的資源配置可最大限度的發(fā)揮系統(tǒng)的硬件潛能,提高系統(tǒng)的性能。對(duì)于一個(gè)特定的系統(tǒng)來(lái)說(shuō),其系統(tǒng)資源,如FLASH <http://www.dzsc.com/stock-ic/FLASH.html> 、EEPROM <http://www.dzsc.com/stock-ic/EEPROM.html>、SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>、中斷控制等,都是有限的,應(yīng)合理配置系統(tǒng)資源。
?。?) 程序的設(shè)計(jì)、調(diào)試與優(yōu)化:根據(jù)軟件的總體結(jié)構(gòu)編寫(xiě)程序,同時(shí)采用各種調(diào)試手段,找出程序的各種語(yǔ)法和邏輯錯(cuò)誤,最后應(yīng)使各功能程序模塊化,縮短代碼長(zhǎng)度以節(jié)省存儲(chǔ)空間并減少程序執(zhí)行時(shí)間。
此外,由于嵌入式系統(tǒng)一般都應(yīng)用在環(huán)境比較惡劣的場(chǎng)合,易受各種干擾,從而影響到系統(tǒng)的可靠性,因此,應(yīng)用程序的抗干擾技術(shù)也是必須考慮的,這也是嵌入式系統(tǒng)應(yīng)用程序不同于其他應(yīng)用程序的一個(gè)重要特點(diǎn)。
6.2 部件工作原理與編程示例
6.2.1 通用I/O口工作原理與編程示例
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>提供了18個(gè)可編程的通用I/O端口,用戶可將每個(gè)端口配置為輸入模式、輸出模式或特殊功能模式,由片內(nèi)的特殊功能寄存器IOPMOD和IOPCON控制。
端 口0~端口7的工作模式僅由IOPMOD寄存器控制,但通過(guò)設(shè)置IOPCON寄存器,端口8~端口11可用作外部中斷請(qǐng)求INTREQ0~I(xiàn)NTREQ3 的輸入,端口12、端口13可用作外部DMA請(qǐng)求XDREQ0、XDREQ1的輸入,端口14、端口15可作為外部DMA請(qǐng)求的應(yīng)答信號(hào)XDACK0、 XDACK1,端口16可作為定時(shí)器0的溢出TOUT0,端口17可作為定時(shí)器1的溢出TOUT1。
I/O端口的功能模塊如圖6.2.1所示:
圖6.2.1 通用I/O口的功能模塊
控制I/O口的特殊功能寄存器一共有3個(gè):IOPMOD、IOPCON和IOPDATA,簡(jiǎn)要描述如下:
I/O口模式寄存器(IOPMOD):
I/O口模式寄存器IOPMOD用于配置P17~P0。
寄存器 偏移地址 操作 功能描述 復(fù)位值
IOPMOD 0x5000 讀/寫(xiě) I/O口模式寄存器 0x0000,0000
[0]P0口的I/O模式位
0=輸入
1=輸出
[1]P1口的I/O模式位
0=輸入
1=輸出
[2]P2口的I/O模式位
0=輸入
1=輸出
[3~17]P3~P17口的I/O模式位
0=輸入
1=輸出
I/O口控制寄存器(IOPCON):
I/O口控制寄存器IOPCON用于配置端口P8~P17的特殊功能,當(dāng)這些端口用作特殊功能(如外部中斷請(qǐng)求、外部中斷請(qǐng)求應(yīng)答、外部DMA請(qǐng)求或應(yīng)答、定時(shí)器溢出)時(shí),其工作模式由IOPCON寄存器控制,而不再由IOPMOD寄存器。
對(duì)于特殊功能輸入端口,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>提供了一個(gè)濾波器用于檢測(cè)特殊功能信號(hào)的輸入,如果輸入信號(hào)電平寬度等于三個(gè)系統(tǒng)時(shí)鐘周期,該信號(hào)被認(rèn)為是諸如外部中斷請(qǐng)求或外部DMA請(qǐng)求等特殊功能信號(hào)。
寄存器 偏移地址 操作 功能描述 復(fù)位值
IOPCON 0x5004 讀/寫(xiě) I/O口控制寄存器 0x0000,0000
[4:0]控制端口8的外部中斷請(qǐng)求信號(hào)0(xIRQ0)輸入
[4]端口8用作外部中斷請(qǐng)求信號(hào)0
0 = 禁止 1 = 使能
[3] 0 = 低電平有效 1 = 高電平有效
[2] 0 = 濾波器關(guān) 1 = 濾波器開(kāi)
[1:0] 00 = 電平檢測(cè) 01 = 上升沿檢測(cè)
10 = 下降沿檢測(cè) 11 = 上升、下降沿均檢測(cè)
[9:5]控制端口9的外部中斷請(qǐng)求信號(hào)1(xIRQ1)輸入
使用方法同端口8。
[14:10]控制端口10的外部中斷請(qǐng)求信號(hào)2(xIRQ2)輸入
使用方法同端口8。
[19:15]控制端口11的外部中斷請(qǐng)求信號(hào)3(xIRQ3)輸入
使用方法同端口8。
[22:20]控制端口12的外部DMA請(qǐng)求信號(hào)0(DRQ0)輸入
[22]端口12用作外部DMA請(qǐng)求信號(hào)0(nXDREQ0)
0 = 禁止 1 = 使能
[21] 0 = 濾波器關(guān) 1 = 濾波器開(kāi)
[20] 0 = 低電平有效 1 = 高電平有效
[25:23]控制端口13的外部DMA請(qǐng)求信號(hào)1(DRQ1)輸入
[25]端口13用作外部DMA請(qǐng)求信號(hào)1(nXDREQ1)
0 = 禁止 1 = 使能
[24] 0 = 濾波器關(guān) 1 = 濾波器開(kāi)
[23] 0 = 低電平有效 1 = 高電平有效
[27:26]控制端口14的外部DMA應(yīng)答信號(hào)0(DAK0)輸出
[27]端口14用作外部DMA信號(hào)0(nXDACK0)
0 = 禁止 1 = 使能
[26] 0 = 低電平有效 1 = 高電平有效
[29:28]控制端口15的外部DMA應(yīng)答信號(hào)1(DAK1)輸出
[29]端口15用作外部DMA信號(hào)1(nXDACK1)
0 = 禁止 1 = 使能
[28] 0 = 低電平有效 1 = 高電平有效
[30]控制端口16作為定時(shí)器0溢出信號(hào)(TOEN0)
0 = 禁止 1 = 使能
[31]控制端口17作為定時(shí)器1溢出信號(hào)(TOEN1)
0 = 禁止 1 = 使能
I/O口數(shù)據(jù)寄存器(IOPDATA):
當(dāng)配置為輸入模式時(shí),讀取I/O口數(shù)據(jù)寄存器IOPDATA的每一位對(duì)應(yīng)輸入狀態(tài),當(dāng)配置為輸出模式時(shí),寫(xiě)每一位對(duì)應(yīng)輸出狀態(tài)。位[17:0]對(duì)應(yīng)于18個(gè)I/O引腳P17~P0。
寄存器 偏移地址 操作 功能描述 復(fù)位值
IOPDATA 0x5008 讀/寫(xiě) I/O口數(shù)據(jù)寄存器 未定義
[17:0]對(duì)應(yīng)I/O口P17~P0的讀/寫(xiě)值。I/O口數(shù)據(jù)寄存器的值反映對(duì)應(yīng)引腳的信號(hào)電平。
以上簡(jiǎn)述了S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的通用I/O口的基本工作原理,更詳細(xì)的內(nèi)容可參考S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的用戶手冊(cè)。
作為本章的第一個(gè)例子,將比較詳細(xì)的描述建立項(xiàng)目、編寫(xiě)程序的過(guò)程,同時(shí)可參考第八章關(guān)于ADS集成編譯調(diào)試環(huán)境的使用方法。
打開(kāi)CodeWarrior for ARM Developer Suite(或ARM Project Manager),新建一個(gè)項(xiàng)目,并新建一個(gè)文件,名為Init.s,具體內(nèi)容如下:
6.2.3 中斷控制器工作原理與編程示例
中斷是計(jì)算機(jī)的一種基本工作方式,幾乎所有的CPU都支持中斷,S3C4510B的支持多達(dá)21個(gè)中斷源,中斷請(qǐng)求可由內(nèi)部功能模塊和外部引腳信號(hào)產(chǎn)生。
ARM7TDMI核可以識(shí)別兩種類型的中斷:正常中斷請(qǐng)求(Normal Interrupt Request,IRQ)和快速中斷請(qǐng)求(FAST <http://www.dzsc.com/icstock/272/FAST.html> Interrupt Request,F(xiàn)IQ),因此,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的所有中斷都可以歸類為IRQ或FIQ。S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的中斷控制器對(duì)每一個(gè)中斷源都有一個(gè)中斷懸掛位(Interrupt Pending Bit)。
S3C4510B用如下四個(gè)寄存器控制中斷的產(chǎn)生和對(duì)中斷進(jìn)行處理:
?。?nbsp; 中斷優(yōu)先級(jí)寄存器(Interrupt Priority Register):每一個(gè)中斷源的索引號(hào)寫(xiě)入一個(gè)預(yù)定義的中斷優(yōu)先級(jí)寄存器,以獲得特定的優(yōu)先級(jí)。中斷優(yōu)先級(jí)預(yù)定義為從0~20。
- 中斷模式寄存器(Interrupt Mode Register):為每一個(gè)中斷源定義中斷模式,是IRQ還是FIQ。
?。?nbsp; 中 斷懸掛寄存器(Interrupt Pending Register):指示中斷請(qǐng)求處于懸掛狀態(tài)(未處理)。如果中斷懸掛位被置位,則中斷懸掛狀態(tài)會(huì)一直保存,直到CPU通過(guò)寫(xiě)‘1’到中斷懸掛寄存器的 相應(yīng)位清除(注意是寫(xiě)‘1’清除,而不是寫(xiě)‘0’)。當(dāng)中斷懸掛位被置位時(shí),無(wú)論中斷屏蔽寄存器是否為‘0’,中斷服務(wù)程序都開(kāi)始執(zhí)行。在中斷服務(wù)程序 中,必須通過(guò)向中斷懸掛寄存器的相應(yīng)位寫(xiě)‘1’來(lái)清除中斷懸掛標(biāo)志,以避免由于同一個(gè)中斷懸掛位導(dǎo)致中斷服務(wù)程序的反復(fù)執(zhí)行。
?。?nbsp; 中斷屏蔽寄存器(Interrupt Mask Register):如果中斷屏蔽位為‘1’
則對(duì)應(yīng)的中斷會(huì)被禁止,如果中斷屏蔽位為‘0’,則對(duì)應(yīng)的中斷請(qǐng)求能正常響應(yīng)。但如果全局中斷屏蔽位(位21)為‘1’,則所有的中斷都會(huì)被禁止。當(dāng)有中斷請(qǐng)求產(chǎn)生時(shí),對(duì)應(yīng)的中斷懸掛位會(huì)被置為‘1’,在全局中斷屏蔽位和對(duì)應(yīng)的中斷屏蔽位為‘0’時(shí),中斷請(qǐng)求就會(huì)被響應(yīng)。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的中斷源(Interrupt Sources)
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>可支持21個(gè)中斷源,如表6-2-7所示:
表6-2-7 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的中斷源
索引號(hào) 中斷源
[20] IIC總線中斷
[19] 以太網(wǎng)控制器MAC接收中斷
[18] 以太網(wǎng)控制器MAC發(fā)送中斷
[17] 以太網(wǎng)控制器BDMA接收中斷
[16] 以太網(wǎng)控制器BDMA發(fā)送中斷
[15] HDLC通道B接收中斷
[14] HDLC通道B發(fā)送中斷
[13] HDLC通道A接收中斷
[12] HDLC通道A發(fā)送中斷
[11] 定時(shí)器1中斷
[10] 定時(shí)器0中斷
[9] GDMA通道1中斷
[8] GDMA通道0中斷
[7] UART1接收與錯(cuò)誤中斷
[6] UART1發(fā)送中斷
[5] UART0接收與錯(cuò)誤中斷
[4] UART0發(fā)送中斷
[3] 外部中斷3
[2] 外部中斷2
[1] 外部中斷1
[0] 外部中斷0
中斷控制器的特殊功能寄存器(Interrupt Controller Special Registers)
中斷模式寄存器(Interrupt Mode Register)
中斷模式寄存器INTMOD通過(guò)每一位的設(shè)置決定每一種中斷是按快速中斷(FIQ)還是按正常中斷(IRQ)響應(yīng)。
寄存器 偏移地址 操作 功能描述 復(fù)位值
INTMOD 0x4000 讀/寫(xiě) 中斷模式寄存器 0x0000,0000
[20:0]中斷模式位
INTMOD的21個(gè)位分別對(duì)應(yīng)于表6-2-7中所描述的21個(gè)中斷源,當(dāng)中斷模式位被置為‘1’時(shí),ARM7TDMI核按FIQ方式處理對(duì)應(yīng)的中斷,否則按IRQ方式處理中斷。21個(gè)中斷源映射如下:
[20] IIC中斷
[19] 以太網(wǎng)控制器MAC接收中斷
[18] 以太網(wǎng)控制器MAC發(fā)送中斷
[17] 以太網(wǎng)控制器BDMA接收中斷
[16] 以太網(wǎng)控制器BDMA發(fā)送中斷
[15] HDLC通道B接收中斷
[14] HDLC通道B發(fā)送中斷
[13] HDLC通道A接收中斷
[12] HDLC通道A發(fā)送中斷
[11] 定時(shí)器1中斷
[10] 定時(shí)器0中斷
[9] GDMA通道1中斷
[8] GDMA通道0中斷
[7] UART1接收與錯(cuò)誤中斷
[6] UART1發(fā)送中斷
[5] UART0接收與錯(cuò)誤中斷
[4] UART0發(fā)送中斷
[3] 外部中斷3
[2] 外部中斷2
[1] 外部中斷1
[0] 外部中斷0
中斷懸掛寄存器(Interrupt Pending Register)
中斷懸掛寄存器INTPND保持每一個(gè)中斷源的中斷懸掛位。該寄存器對(duì)應(yīng)的中斷懸掛位應(yīng)在中斷服務(wù)程序中首先清除,以避免由于同一個(gè)中斷懸掛位導(dǎo)致中斷服務(wù)程序的反復(fù)執(zhí)行。
寄存器 偏移地址 操作 功能描述 復(fù)位值
INTPND 0x4004 讀/寫(xiě) 中斷懸掛寄存器 0x0000,0000
[20:0]中斷懸掛位
INTPND的21個(gè)位分別對(duì)應(yīng)于表6-2-7中所描述的21個(gè)中斷源,當(dāng)中斷請(qǐng)求產(chǎn)生時(shí),對(duì)應(yīng)的中斷懸掛位被置為‘1’,在中斷服務(wù)程序中應(yīng)通過(guò)向?qū)?yīng)位寫(xiě)入‘1’的方式清除中斷懸掛位。21個(gè)中斷源映射如下:
[20] IIC中斷
[19] 以太網(wǎng)控制器MAC接收中斷
[18] 以太網(wǎng)控制器MAC發(fā)送中斷
[17] 以太網(wǎng)控制器BDMA接收中斷
[16] 以太網(wǎng)控制器BDMA發(fā)送中斷
[15] HDLC通道B接收中斷
[14] HDLC通道B發(fā)送中斷
[13] HDLC通道A接收中斷
[12] HDLC通道A發(fā)送中斷
[11] 定時(shí)器1中斷
[10] 定時(shí)器0中斷
[9] GDMA通道1中斷
[8] GDMA通道0中斷
[7] UART1接收與錯(cuò)誤中斷
[6] UART1發(fā)送中斷
[5] UART0接收與錯(cuò)誤中斷
[4] UART0發(fā)送中斷
[3] 外部中斷3
6.2.6 IIC總線控制器工作原理
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>片內(nèi)的IIC總線控制器具有如下重要特性:
?。?nbsp; 僅需要兩根傳輸線。一根為串行數(shù)據(jù)線(Serial Data LINE <http://www.dzsc.com/stock-ic/LINE.html>,SDA),另一根為串行時(shí)鐘線(Serial Clock LINE <http://www.dzsc.com/stock-ic/LINE.html>,SCL)。當(dāng)IIC總線處于空閑狀態(tài)時(shí),兩根傳輸線均為高電平。
?。?nbsp; 連接到總線上的每一個(gè)設(shè)備都可以通過(guò)一個(gè)主控器使用唯一的地址進(jìn)行軟件尋址??偩€主控器既可以是一個(gè)主發(fā)送器,也可以是一個(gè)主接收器。但S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的IIC總線控制器僅支持單主控器模式。
- 支持8位、雙向,串行數(shù)據(jù)傳輸。
?。?nbsp; 連接到IIC總線的器件數(shù)目?jī)H受到最大總線電容(400PF)的限制。
圖6.2.6為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html> IIC總線控制器的功能模塊。
圖6.2.6 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html> IIC總線控制器的功能模塊圖
功能描述(Functional DESCRIPTION <http://www.dzsc.com/stock-ic/DESCRIPTION.html>)
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的IIC總線控制器為一個(gè)串行IIC總線主控器??赏ㄟ^(guò)設(shè)置預(yù)分頻寄存器(Prescaler Register,IICPSR)對(duì)串行時(shí)鐘頻率進(jìn)行編程。串行時(shí)鐘頻率可由下式計(jì)算:
MCLK/(16×(預(yù)分頻寄存器的值+1)+3)
可通過(guò)對(duì)控制狀態(tài)寄存器(IICCON)的位[5:4]寫(xiě)入“01”發(fā)送啟動(dòng)碼初始化串行IIC總線,然后總線控制器發(fā)送7位的從設(shè)備地址并通過(guò)移位緩沖寄存器發(fā)送讀/寫(xiě)控制位,接收器則在主控器的SCL脈沖期間通過(guò)將SDA線從高電平下拉到低電平作為應(yīng)答信號(hào)。
寫(xiě)數(shù)據(jù)的操作:先設(shè)置控制狀態(tài)寄存器的BF位,然后寫(xiě)入數(shù)據(jù)到移位緩沖寄存器。移位緩沖寄存器無(wú)論是被讀還是寫(xiě),BF位均會(huì)自動(dòng)清零。若要進(jìn)行連續(xù)的讀/寫(xiě)操作,必須設(shè)置控制狀態(tài)寄存器的ACK位。
讀數(shù)據(jù)的操作:在設(shè)置控制狀態(tài)寄存器的BF位以后,可以進(jìn)行讀數(shù)據(jù)的操作,當(dāng)讀/寫(xiě)完最后一個(gè)字節(jié)時(shí),可對(duì)ACK位進(jìn)行復(fù)位通知發(fā)送器/接收器讀數(shù)據(jù)操作的結(jié)束。
在讀/寫(xiě)操作完成以后,可通過(guò)設(shè)置IICCON[5:4]=“10”生成結(jié)束碼。
IIC總線概念(IIC-BUS Concepts)
基本操作(Basic Operation):IIC總線通過(guò)兩根傳輸線,一根串行數(shù)據(jù)線SDL,一根串行時(shí)鐘線SCL,在連接到總線上的IC器件之間傳遞信息,每一個(gè)IC器件通過(guò)唯一的地址進(jìn)行識(shí)別,根據(jù)其特性,可作為發(fā)送器或接收器工作。
IIC總線是一種多主控器總線,有多個(gè)IC器件具有控制總線的能力。
IIC總線的數(shù)據(jù)傳輸過(guò)程描述如下:
第一種情況,一個(gè)主IC器件要傳送數(shù)據(jù)到其他的從IC器件,可分為如下三個(gè)步驟:
1、 主IC器件尋址從IC器件。
2、 主IC器件發(fā)送數(shù)據(jù)到從IC器件(此時(shí),主器件為發(fā)送器,從器件為接收器)。
3、 主IC器件終止數(shù)據(jù)的傳輸。
第二種情況,一個(gè)主IC器件要從其他的從IC器件獲取數(shù)據(jù),可分為如下三個(gè)步驟:
1、 主IC器件尋址從IC器件。
2、 主IC器件從從IC器件接收數(shù)據(jù)(此時(shí),主器件為接收器,從器件為發(fā)送器)。
3、主IC器件終止數(shù)據(jù)的傳輸。
即使是在第二種情況,也由主IC器件產(chǎn)生時(shí)序信號(hào)并終止數(shù)據(jù)的傳輸。
通 用特性(General Characteristics):SDL和SCL均為雙向傳輸線,各通過(guò)一個(gè)上拉電阻連接到電源正端,當(dāng)IIC總線空閑時(shí),SDL和SCL傳輸線均為高 電平,連接在總線上的IIC接口在輸出階段通過(guò)漏極開(kāi)路(Open-drain)或集電極開(kāi)路(Open-collector)的方式完成線與 (Wired-AND)功能。IIC總線的數(shù)據(jù)傳輸速率最高可達(dá)到100Kb/S??蛇B接到總線上的IC器件數(shù)目?jī)H受到總線電容的限制(400PF)。
位傳輸(Bit Transfers):由于連接到IIC總線上的器件各不相同(如有CMOS <http://www.dzsc.com/stock-ic/CMOS.html>器件,NMOS器件,TTL器件等),邏輯0或邏輯1的電平會(huì)根據(jù)電源電壓的高低發(fā)生變化,因此,每傳輸一個(gè)位就產(chǎn)生一個(gè)時(shí)鐘脈沖。
數(shù)據(jù)有效性(Data Validity):在時(shí)鐘信號(hào)的高電平期間,SDA傳輸線上的電平必須穩(wěn)定,只有在SCL傳輸線上的時(shí)鐘信號(hào)為低電平時(shí),數(shù)據(jù)線上的高低電平才允許發(fā)生變化。
開(kāi)始與停止條件(Start and Stop Conditions):開(kāi)始和停止條件總是由主器件產(chǎn)生。在開(kāi)始條件產(chǎn)生后,總線被認(rèn)為處于忙狀態(tài),在完成數(shù)據(jù)傳輸產(chǎn)生停止條件后,總線被認(rèn)為處于空閑狀態(tài)。
?。?nbsp; 開(kāi)始條件:當(dāng)SCL為高電平時(shí),SDA產(chǎn)生由高電平到低電平的跳變。
?。?nbsp; 停止條件:當(dāng)SCL為高電平時(shí),SDA產(chǎn)生由低電平到高電平的跳變。
圖6.2.7為開(kāi)始與停止條件:
圖6.2.7 開(kāi)始與停止條件
數(shù)據(jù)傳輸操作(Data Transfer Operations)
數(shù)據(jù)字節(jié)格式(Data Byte Format):每一個(gè)寫(xiě)到SDA傳輸線上的數(shù)據(jù)字節(jié)必須為8位的長(zhǎng)度,每一次傳輸?shù)淖止?jié)數(shù)沒(méi)有限制,每傳輸一個(gè)字節(jié)必須跟一個(gè)應(yīng)答位ACK(如圖6.2.7),傳輸字節(jié)時(shí)最高位在前(MSB-first)。
如果接收器因?yàn)閳?zhí)行其他功能(如中斷服務(wù))而不能接收其他剩余的數(shù)據(jù)字節(jié)時(shí),接收器就保持時(shí)鐘線SCL為低電平強(qiáng)制發(fā)送器進(jìn)入等待狀態(tài),只有當(dāng)接收器準(zhǔn)備接收其他字節(jié)并釋放SCL傳輸線時(shí),數(shù)據(jù)傳輸才會(huì)繼續(xù)進(jìn)行。
應(yīng) 答過(guò)程(Acknowledge Procedure):在數(shù)據(jù)的傳輸過(guò)程中必須帶有應(yīng)答信號(hào),與應(yīng)答信號(hào)相關(guān)的時(shí)鐘脈沖必須由總線主控器產(chǎn)生。在應(yīng)答時(shí)鐘脈沖期間,發(fā)送器釋放SDA傳輸 線(為高電平),但此時(shí)接收器必須下拉SDA傳輸線,以便在時(shí)鐘脈沖的高電平期間SDA能夠保持穩(wěn)定的低電平。
通常,被尋址的接收器在接收到每一個(gè)字節(jié)后必須產(chǎn)生一個(gè)應(yīng)答信號(hào),當(dāng)從接收器不能產(chǎn)生應(yīng)答信號(hào)時(shí),必須釋放數(shù)據(jù)線,然后由主控器產(chǎn)生停止條件中止數(shù)據(jù)傳輸。
數(shù)據(jù)傳輸格式(Data Transfer Format):圖6.2.8顯示傳輸數(shù)據(jù)的格式。當(dāng)產(chǎn)生開(kāi)始條件后,首先發(fā)送7位的從器件地址,第八位為數(shù)據(jù)方向位(R/W),“0”表示發(fā)送數(shù)據(jù)(寫(xiě)),“1”表示請(qǐng)求數(shù)據(jù)(讀)。
圖6.2.8 數(shù)據(jù)傳輸?shù)母袷?br/> 數(shù)據(jù)傳輸一般總是在主控器產(chǎn)生停止條件后中止。但當(dāng)主控器還要利用總線進(jìn)行通訊時(shí),主控器可以在不產(chǎn)生前一個(gè)停止條件的情況下,再產(chǎn)生開(kāi)始條件并尋址另一個(gè)從器件,該特性可用于支持不同數(shù)據(jù)傳輸讀/寫(xiě)格式的聯(lián)合使用。
IIC總線尋址(IIC-Bus Addressing):IIC總線的尋址過(guò)程為在開(kāi)始條件后發(fā)送的第一個(gè)字節(jié),該字節(jié)地址決定主控器選擇哪一個(gè)從器件。通常,第一個(gè)字節(jié)總是緊跟在開(kāi)始過(guò)程之后。
還可以通過(guò)“廣播”尋址方式同時(shí)尋址所有的IC器件,當(dāng)使用廣播尋址時(shí),理論上所有的IC器件都應(yīng)該返回應(yīng)答信號(hào),但器件也可以忽略這個(gè)這個(gè)地址。廣播尋址的第二個(gè)字節(jié)決定其后的操作。
第一個(gè)數(shù)據(jù)字節(jié)的位定義(Definition of Bits in the First Data Byte
第一個(gè)數(shù)據(jù)字節(jié)的前7位為從器件地址,第8位為方向位,決定數(shù)據(jù)的傳輸方向(讀/寫(xiě))。
當(dāng)?shù)刂纷止?jié)發(fā)出以后,總線上的每一個(gè)IC器件將該地址與自己的地址進(jìn)行比較,若地址匹配,則這個(gè)IC器件就認(rèn)為自身被主控器尋址為一個(gè)從發(fā)送器或從接收器。
廣播尋址(General Call Address):廣播尋址方式可用于尋址連接在IIC總線上的每一個(gè)IC器件,但當(dāng)某個(gè)IC器件不需要進(jìn)行數(shù)據(jù)傳輸時(shí),將忽略廣播尋址而不作任何應(yīng)答。
如果某個(gè)IC器件需要獲取數(shù)據(jù),將發(fā)出應(yīng)答信號(hào)并作為一個(gè)從接收器。
開(kāi)始字節(jié)(Start Byte):在每一次的數(shù)據(jù)傳輸之前都有一個(gè)開(kāi)始過(guò)程,描述如下:
- 一個(gè)開(kāi)始條件,S
?。?nbsp; 一個(gè)開(kāi)始字節(jié),“00000001”
?。?nbsp; 一個(gè)應(yīng)答時(shí)鐘脈沖
?。?nbsp; 一個(gè)重復(fù)開(kāi)始條件,Sr
當(dāng) 需要訪問(wèn)總線的主控器在發(fā)送完開(kāi)始條件S后,接著發(fā)送開(kāi)始字節(jié)(“00000001”),總線上其余的IC器件以較低的采樣率對(duì)SDA傳輸線進(jìn)行采樣,一 直到檢測(cè)到開(kāi)始字節(jié)中七個(gè)零中的某一個(gè)。當(dāng)檢測(cè)到SDA傳輸線上的低電平時(shí),IC器件就切換到較高的采樣率檢測(cè)重復(fù)開(kāi)始條件Sr用于同步,接收器在檢測(cè)到 重復(fù)開(kāi)始條件Sr后復(fù)位,忽略該開(kāi)始字節(jié)。
在開(kāi)始字節(jié)發(fā)送完畢之后產(chǎn)生一個(gè)應(yīng)答時(shí)鐘脈沖。
IIC總線特殊功能寄存器(IIC Bus Special Registers)
IIC總線控制器由三個(gè)特殊功能寄存器:一個(gè)控制狀態(tài)寄存器(IICON),一個(gè)預(yù)分頻寄存器(IICPS)和一個(gè)移位緩沖寄存器(IICBUF)。
控制狀態(tài)寄存器(CONTROL <http://www.dzsc.com/stock-ic/CONTROL.html> Status Register,IICON):
寄存器 偏移地址 操作 功能描述 復(fù)位值
IICCON 0xF000 讀/寫(xiě) 控制狀態(tài)寄存器 0x0000,0000
IIC總線的控制狀態(tài)寄存器描述如表6-2-10。
表6-2-10 IICCON寄存器描述
位 位名 功能描述
[0] 緩沖標(biāo)志(BF) 在發(fā)送模式下緩沖區(qū)空時(shí),或在接收模式下緩沖區(qū)滿時(shí),BF置位。
通過(guò)對(duì)該位寫(xiě)“0”可以清除緩沖區(qū)。
IICBUF寄存器無(wú)論是被讀還是寫(xiě),BF位都自動(dòng)清零。
如果將該位置為“1”,IIC總線停止工作,要激活I(lǐng)IC總線,應(yīng)將該位清零。
[1]&nMAC功能模塊
以太網(wǎng)控制器MAC層的功能模塊描述如表6-2-13和圖6.2.10。
表6-2-13 MAC功能模塊描述
功能模塊 描 述
媒體獨(dú)立接口(MII) MII為物理層和發(fā)送/接收模塊之間的接口
發(fā)送模塊 將要發(fā)送的數(shù)據(jù)從發(fā)送緩沖區(qū)移到MII。發(fā)送模塊包括CRC生成電路、奇偶校驗(yàn)電路、前導(dǎo)與后綴生成電路。發(fā)送模塊同時(shí)還包含用于 處理沖突后的回退和數(shù)據(jù)幀間間隔的定時(shí)器。
接 收模塊 從MII接收數(shù)據(jù)并存入接收FIFO。接收模塊完成邏輯功能:計(jì)算與校驗(yàn)CRC值;對(duì)從MII接收的數(shù)據(jù)進(jìn)行奇偶生成和檢測(cè)最大與最小數(shù)據(jù) 包長(zhǎng)度。接收模塊同時(shí)還包含一個(gè)匹配地址存儲(chǔ)器(CAM)模塊,用于存儲(chǔ)網(wǎng)絡(luò)目的地址,根據(jù)該目的地址決定接收或丟棄數(shù)據(jù)包。
流控模塊 辨別MAC控制包,并支持用于全雙工連接的暫停操作。流控模塊同時(shí)支持生成暫??刂瓢?,并提供用于暫??刂频亩〞r(shí)器和計(jì)數(shù)器。
MAC控制(命令)與狀態(tài)寄存器 控制可編程選項(xiàng),包括禁止或使能當(dāng)某條件發(fā)生時(shí)通知系統(tǒng)的各種信號(hào)。狀態(tài)寄存器保持各種用于錯(cuò)誤處理的狀態(tài)信息,以及用于網(wǎng)絡(luò)管理的錯(cuò)誤計(jì)數(shù)器累加統(tǒng)計(jì)信息等。
回環(huán)電路 提供獨(dú)立于MII和物理層的MAC層測(cè)試。
圖6.2.10 MAC層流控功能模塊
媒體獨(dú)立接口(Media Independent Interface,MII)
發(fā)送和接收模塊均通過(guò)MII進(jìn)行操作,其接口特性描述如下:
- 獨(dú)立于傳輸媒體。
- 支持多生產(chǎn)商互操作。
?。?nbsp; 支持到MAC層和到物理層接口設(shè)備的連接。
?。?nbsp; 支持10M或100M <http://www.dzsc.com/stock-ic/100M.html>的數(shù)據(jù)傳輸能力。
?。?nbsp; 數(shù)據(jù)與分隔符的傳輸和參考時(shí)鐘同步。
?。?nbsp; 提供獨(dú)立的4位數(shù)據(jù)寬度發(fā)送與接收通道。
?。?nbsp; 使用TTL電平信號(hào),與通用數(shù)字CMOS <http://www.dzsc.com/stock-ic/CMOS.html> ASIC處理器電平兼容。
?。?nbsp; 支持到物理層和到站管理設(shè)備的連接。
- 提供簡(jiǎn)單的管理接口。
- 具有驅(qū)動(dòng)有限長(zhǎng)度屏蔽電纜的能力。
物理層(Physical Layer Entity,PHY)
物 理層完成發(fā)送與接收數(shù)據(jù)的編碼/解碼。其編碼/解碼(用于10BASE-T的曼切斯特編碼、用于100BASE-X的4B/5B編碼以及用于 100BASE-T4的8B/6T編碼)方式對(duì)MII無(wú)影響。MII對(duì)原始數(shù)據(jù)進(jìn)行接收時(shí),以前導(dǎo)字段開(kāi)始,到CRC字段結(jié)束。同時(shí),MII對(duì)原始數(shù)據(jù)進(jìn) 行發(fā)送時(shí),也以前導(dǎo)字段開(kāi)始,到CRC字段結(jié)束。MAC層可生成填充數(shù)據(jù)并傳送到PHY。
帶緩沖的DMA接口(Buffered DMA Interface,BDI)
帶 緩沖的DMA接口支持通過(guò)系統(tǒng)總線的讀/寫(xiě)操作,帶有兩個(gè)8位的總線數(shù)據(jù)收發(fā)器,同時(shí)可選擇奇偶校驗(yàn)功能。數(shù)據(jù)收發(fā)器通過(guò)系統(tǒng)接口進(jìn)行初始化。MAC層控 制器通過(guò)響應(yīng)BDI的準(zhǔn)備好信號(hào)從BDI接收數(shù)據(jù)并發(fā)送出去,或?qū)⒔邮盏降臄?shù)據(jù)發(fā)送給BDI,由幀結(jié)束信號(hào)標(biāo)識(shí)各數(shù)據(jù)包的邊界。
MAC發(fā)送模塊(MAC Transmit Block)
MAC發(fā)送模塊負(fù)責(zé)數(shù)據(jù)發(fā)送,與802.3標(biāo)準(zhǔn)的CSMA/CD協(xié)議兼容。MAC發(fā)送模塊由如下幾部分構(gòu)成:
?。?nbsp; 發(fā)送FIFO和發(fā)送控制器。
?。?nbsp; 前導(dǎo)與后綴發(fā)生器。
?。?nbsp; 填充發(fā)生器。
- 并行CRC發(fā)生器。
?。?nbsp; 開(kāi)始邏輯與計(jì)數(shù)器。
?。?nbsp; 回退與重發(fā)定時(shí)器。
?。?nbsp; 發(fā)送狀態(tài)機(jī)。
圖6.2.11為MAC發(fā)送功能模塊圖。
圖6.2.11 MAC發(fā)送功能模塊圖
發(fā) 送FIFO與讀/寫(xiě)控制器(Transmit FIFO and Read/Write Controllers):發(fā)送FIFO的大小為80字節(jié),每一個(gè)字節(jié)數(shù)據(jù)附加一個(gè)奇偶校驗(yàn)位,即每個(gè)字節(jié)為9位長(zhǎng)度,其中,前64個(gè)字節(jié)數(shù)據(jù)可以被打包 存儲(chǔ)和發(fā)送,并在發(fā)生碰撞時(shí)進(jìn)行重發(fā),無(wú)需系統(tǒng)更多的干預(yù)。如果沒(méi)有碰撞發(fā)生,則進(jìn)行數(shù)據(jù)包發(fā)送,剩余的16個(gè)字節(jié)由系統(tǒng)處理,以避免因?yàn)镕IFO不發(fā)送 而丟失。
當(dāng)系統(tǒng)接口設(shè)置了相應(yīng)控制寄存器的發(fā)送使能位時(shí),發(fā)送狀態(tài)機(jī)就從BDI請(qǐng)求數(shù)據(jù),然后由系統(tǒng)控制器從系統(tǒng)存儲(chǔ)器中獲取數(shù)據(jù)。
FIFO 控制器將數(shù)據(jù)存儲(chǔ)在發(fā)送FIFO中,然后通過(guò)一個(gè)握手信號(hào)通知發(fā)送狀態(tài)機(jī),F(xiàn)IFO中的數(shù)據(jù)有效,可以開(kāi)始發(fā)送操作。如果FIFO未滿,F(xiàn)IFO控制器向 BDI請(qǐng)求更多的數(shù)據(jù)。發(fā)送狀態(tài)機(jī)連續(xù)的發(fā)送數(shù)據(jù),直到檢測(cè)到最后一個(gè)字節(jié)的幀結(jié)束信號(hào),然后追加經(jīng)過(guò)計(jì)算的CRC值到數(shù)據(jù)包的末尾(若發(fā)送控制寄存器的 CRC除去位被置位,則不追加),狀態(tài)寄存器的包發(fā)送位被置位,若中斷使能同時(shí)產(chǎn)生中斷。
模塊中的寫(xiě)FIFO控制器與計(jì)數(shù)器和發(fā)送狀態(tài)機(jī)的讀FIFO控制器與計(jì)數(shù)器根據(jù)各自的計(jì)數(shù)值協(xié)同工作,盡管他們由不同的時(shí)鐘源驅(qū)動(dòng)。
FIFO控制器將數(shù)據(jù)和校驗(yàn)位存儲(chǔ)在FIFO中,并對(duì)數(shù)據(jù)進(jìn)行奇偶校驗(yàn),如果校驗(yàn)錯(cuò)誤,F(xiàn)IFO控制器就設(shè)置一個(gè)錯(cuò)誤狀態(tài)位,若對(duì)應(yīng)的中斷使能同時(shí)產(chǎn)生中斷。
前導(dǎo)與后綴發(fā)生器(Preamble and Jam Generator):一旦控制寄存器中的發(fā)送使能位被置位,且FIFO中有8個(gè)字節(jié)的數(shù)據(jù),發(fā)送狀態(tài)機(jī)發(fā)出Tx_en信號(hào)啟動(dòng)發(fā)送,開(kāi)始發(fā)送前導(dǎo)與起始幀分隔符。
填充發(fā)生器(PAD Generator):如果發(fā)送一個(gè)短的數(shù)據(jù)包,MAC會(huì)生成填充字節(jié)將短數(shù)據(jù)包擴(kuò)展到64字節(jié)的最小限制,填充字節(jié)由“0”組成。有一個(gè)控制位可以禁止填充字節(jié)的生成。
并 行CRC發(fā)生器(Parallel CRC Generator):數(shù)據(jù)包中所有要發(fā)送的數(shù)據(jù),從目的地址域到其后的所有數(shù)據(jù)域都可以生成CRC。用戶也可通過(guò)設(shè)置發(fā)送控制寄存器的對(duì)應(yīng)位禁止CRC 生成。該功能可以用于測(cè)試,例如,為測(cè)試接收器的錯(cuò)誤檢測(cè)功能,可強(qiáng)制發(fā)送CRC錯(cuò)誤的數(shù)據(jù)。該功能也可用在某些需要端到端CRC校驗(yàn)的網(wǎng)橋與交換機(jī)應(yīng)用 場(chǎng)合。
回退與重發(fā)定時(shí)器(Back-off and Retransmit Timers):當(dāng)檢測(cè)到網(wǎng)絡(luò)上有碰撞時(shí),發(fā)送器模塊就停止數(shù)據(jù)的發(fā)送并向網(wǎng)絡(luò)發(fā)送一個(gè)特定的阻塞信號(hào),通知所有的節(jié)點(diǎn)網(wǎng)絡(luò)有碰撞。之后,發(fā)送器等待一段 時(shí)間后再重發(fā)數(shù)據(jù),如果連續(xù)16次的重發(fā)失敗,發(fā)送狀態(tài)機(jī)就置錯(cuò)誤標(biāo)志位,并在中斷使能的情況下產(chǎn)生中斷通知系統(tǒng)由于網(wǎng)絡(luò)的過(guò)渡阻塞使數(shù)據(jù)包發(fā)送失敗。發(fā) 送狀態(tài)機(jī)清除FIFO,MAC準(zhǔn)備下一個(gè)數(shù)據(jù)包的發(fā)送。
發(fā)送數(shù)據(jù)奇偶校驗(yàn)器(Transmit Data Parity Checker):FIFO中的數(shù)據(jù)要進(jìn)行奇校驗(yàn)檢測(cè)。當(dāng)數(shù)據(jù)準(zhǔn)備發(fā)送時(shí),發(fā)送狀態(tài)機(jī)進(jìn)行奇偶校驗(yàn),如果檢測(cè)到奇偶錯(cuò)誤,發(fā)送數(shù)據(jù)奇偶校驗(yàn)器作如下操作:
?。?nbsp; 停止數(shù)據(jù)的發(fā)送。
?。?nbsp; 設(shè)置發(fā)送狀態(tài)寄存器中的奇偶錯(cuò)誤位。
- 如果中斷使能則產(chǎn)生中斷。
發(fā)送狀態(tài)機(jī)(Transmit State Machine):發(fā)送狀態(tài)機(jī)是發(fā)送模塊的中央控制邏輯,控制著各種信號(hào)的傳輸、定時(shí)器、處理狀態(tài)寄存器中的錯(cuò)誤。
MAC接收模塊(MAC RECEIVE BLOCK)
MAC接收模塊負(fù)責(zé)數(shù)據(jù)的接收,與802.3標(biāo)準(zhǔn)的CSMA/CD協(xié)議兼容。
當(dāng)接收到一個(gè)數(shù)據(jù)包時(shí),接收模塊首先檢測(cè)諸如CRC錯(cuò)誤、對(duì)齊錯(cuò)誤、長(zhǎng)度錯(cuò)誤等錯(cuò)誤條件,也可以通過(guò)設(shè)置控制寄存器的相應(yīng)位禁止錯(cuò)誤檢查。接收模塊根據(jù)CAM的狀態(tài)和目的地址,決定接收或拒絕數(shù)據(jù)包。MAC接收模塊由以下幾個(gè)部分構(gòu)成:
?。?nbsp; 接收FIFO,F(xiàn)IFO控制器和計(jì)數(shù)器。
?。?nbsp; 接收BDI狀態(tài)機(jī)。
?。?nbsp; 開(kāi)始邏輯與計(jì)數(shù)器。
?。?nbsp; 用于地址識(shí)別的CAM塊。
?。?nbsp; 并行CRC校驗(yàn)器。
?。?nbsp; 接收狀態(tài)機(jī)。
接收模塊的主要部件如圖6.2.12所示。
圖6.2.12 MAC接收功能模塊
接 收FIFO控制器(Receive FIFO Controller):接收FIFO控制器一次接收一個(gè)字節(jié)的數(shù)據(jù),并根據(jù)接收到的字節(jié)數(shù)更新計(jì)數(shù)器的值。在FIFO接收數(shù)據(jù)時(shí),CAM模塊根據(jù)自身存 儲(chǔ)的地址對(duì)數(shù)據(jù)包的目的地址進(jìn)行檢測(cè),如果CAM能識(shí)別該地址,F(xiàn)IFO就繼續(xù)接收數(shù)據(jù)包,如果CAM不能識(shí)別,接收模塊就丟棄數(shù)據(jù)包并清除FIFO。
地 址CAM和地址識(shí)別(Address CAM and Address Recognition):CAM模塊完成地址識(shí)別。它將接收到的數(shù)據(jù)包的目的地址與自身存儲(chǔ)的地址進(jìn)行比較,如果地址匹配,接收狀態(tài)機(jī)就繼續(xù)接收數(shù)據(jù)。 CAM模塊按6個(gè)字節(jié)存儲(chǔ)一個(gè)地址的方式組織,共有32字(128字節(jié))的大小,最多可存儲(chǔ)21個(gè)地