《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > ARM應(yīng)用系統(tǒng)開發(fā)詳解(入門資料)

ARM應(yīng)用系統(tǒng)開發(fā)詳解(入門資料)

2015-09-28
關(guān)鍵詞: ARM 詳解

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

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。