第1章 ARM微處理器概述
本章簡介ARM微處理器的一些基本概念、應用領域及特點,引導讀者進入ARM技術的殿堂。
本章主要內容:
- ARM及相關技術簡介
?。?nbsp; ARM微處理器的應用領域及特點
- ARM微處理器系列
?。?nbsp; ARM微處理器的體系結構
?。?nbsp; ARM微處理器的應用選型
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),既可以認為是一個公司的名字,也可以認為是對一類微處理器的通稱,還可以認為是一種技術的名字。
1991 <http://www.dzsc.com/stock-ic/1991.html>年 ARM公司成立于英國劍橋,主要出售芯片設計技術的授權。目前,采用ARM技術知識產(chǎn)權(IP)核的微處理器,即我們通常所說的ARM微處理器,已遍及工 業(yè)控制、消費類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡系統(tǒng)、無線系統(tǒng)等各類產(chǎn)品市場,基于ARM技術的微處理器應用約占據(jù)了32位RISC微處理器75%以上的市場份 額,ARM技術正在逐步滲入到我們生活的各個方面。
ARM公司是專門從事基于RISC技術芯片設計開發(fā)的公司,作為知識產(chǎn)權供應商,本身不直接從 事芯片生產(chǎn),靠轉讓設計許可由合作公司生產(chǎn)各具特色的芯片,世界各大半導體生產(chǎn)商從ARM公司購買其設計的ARM微處理器核,根據(jù)各自不同的應用領域,加 入適當?shù)耐鈬娐?,從而形成自己的ARM微處理器芯片進入市場。目前,全世界有幾十家大的半導體公司都使用ARM公司的授權,因此既使得ARM技術獲得更 多的第三方工具、制造、軟件的支持,又使整個系統(tǒng)成本降低,使產(chǎn)品更容易進入市場被消費者所接受,更具有競爭力。
1.2 ARM微處理器的應用領域及特點
1.2.1 ARM微處理器的應用領域
到目前為止,ARM微處理器及技術的應用幾乎已經(jīng)深入到各個領域:
1、工業(yè)控制領域:作為32的RISC架構,基于ARM核的微控制器芯片不但占據(jù)了高端微控制器市場的大部分市場份額,同時也逐漸向低端微控制器應用領域擴展,ARM微控制器的低功耗、高性價比,向傳統(tǒng)的8位/16位微控制器提出了挑戰(zhàn)。
2、無線通訊領域:目前已有超過85%的無線通訊設備采用了ARM技術, ARM以其高性能和低成本,在該領域的地位日益鞏固。
3、網(wǎng)絡應用:隨著寬帶技術的推廣,采用ARM技術的ADSL <http://www.dzsc.com/stock-ic/ADSL.html>芯片正逐步獲得競爭優(yōu)勢。此外,ARM在語音及視頻處理上行了優(yōu)化,并獲得廣泛支持,也對DSP的應用領域提出了挑戰(zhàn)。
4、消費類電子產(chǎn)品:ARM技術在目前流行的數(shù)字音頻播放器、數(shù)字機頂盒和游戲機中得到廣泛采用。
5、成像和安全產(chǎn)品:現(xiàn)在流行的數(shù)碼相機和打印機中絕大部分采用ARM技術。手機中的32位SIM智能卡也采用了ARM技術。
除此以外,ARM微處理器及技術還應用到許多不同的領域,并會在將來取得更加廣泛的應用。
1.2.2 ARM微處理器的特點
采用RISC架構的ARM微處理器一般具有如下特點:
1、體積小、低功耗、低成本、高性能;
2、支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件;
3、大量使用寄存器,指令執(zhí)行速度更快;
4、大多數(shù)數(shù)據(jù)操作都在寄存器中完成;
5、尋址方式靈活簡單,執(zhí)行效率高;
6、指令長度固定;
1.3 ARM微處理器系列
ARM微處理器目前包括下面幾個系列,以及其它廠商基于ARM體系結構的處理器,除了具有ARM體系結構的共同特點以外,每一個系列的ARM微處理器都有各自的特點和應用領域。
?。?nbsp; ARM7系列
- ARM9系列
?。?nbsp; ARM9E系列
?。?nbsp; ARM10E系列
?。?nbsp; SecurCore系列
?。?nbsp; Inter的Xscale
- Inter的StrongARM
其中,ARM7、ARM9、ARM9E和ARM10為4個通用處理器系列,每一個系列提供一套相對獨特的性能來滿足不同應用領域的需求。SecurCore系列專門為安全要求較高的應用而設計。
以下我們來詳細了解一下各種處理器的特點及應用領域。
1.3.1 ARM7微處理器系列
ARM7系列微處理器為低功耗的32位RISC處理器,最適合用于對價位和功耗要求較高的消費類應用。ARM7微處理器系列具有如下特點:
?。?nbsp; 具有嵌入式ICE-RT邏輯,調試開發(fā)方便。
?。?nbsp; 極低的功耗,適合對功耗要求較高的應用,如便攜式產(chǎn)品。
?。?nbsp; 能夠提供0.9MIPS/MHz的三級流水線結構。
?。?nbsp; 代碼密度高并兼容16位的Thumb指令集。
- 對操作系統(tǒng)的支持廣泛,包括Windows CE、Linux、Palm OS等。
?。?nbsp; 指令系統(tǒng)與ARM9系列、ARM9E系列和ARM10E系列兼容,便于用戶的產(chǎn)品升級換代。
- 主頻最高可達130MIPS,高速的運算處理能力能勝任絕大多數(shù)的復雜應用。
ARM7系列微處理器的主要應用領域為:工業(yè)控制、Internet設備、網(wǎng)絡和調制解調器設備、移動電話等多種多媒體和嵌入式應用。
ARM7系列微處理器包括如下幾種類型的核:ARM7TDMI、ARM7TDMI-S、
ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理器,屬低端ARM處理器核。TDMI的基本含義為:
T: 支持16為壓縮指令集Thumb;
D: 支持片上Debug;
M:內嵌硬件乘法器(Multiplier)
I: 嵌入式ICE,支持片上斷點和調試點;
本書所介紹的SAMSUNG <http://www.dzsc.com/stock-ic/SAMSUNG.html>公司的S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>即屬于該系列的處理器。
1.3.2 ARM9微處理器系列
ARM9系列微處理器在高性能和低功耗特性方面提供最佳的性能。具有以下特點:
?。?nbsp; 5級整數(shù)流水線,指令執(zhí)行效率更高。
?。?nbsp; 提供1.1MIPS/MHz的哈佛結構。
?。?nbsp; 支持32位ARM指令集和16位Thumb指令集。
?。?nbsp; 支持32位的高速AMBA總線接口。
?。?nbsp; 全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng)。
- MPU支持實時操作系統(tǒng)。
?。?nbsp; 支持數(shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。
ARM9系列微處理器主要應用于無線設備、儀器儀表、安全系統(tǒng)、機頂盒、高端打印機、數(shù)字照相機和數(shù)字攝像機等。
ARM9系列微處理器包含ARM920T、ARM922T和ARM940T三種類型,以適用于不同的應用場合。
1.3.3 ARM9E微處理器系列
ARM9E系列微處理器為可綜合處理器,使用單一的處理器內核提供了微控制器、DSP、Java應用系統(tǒng)的解決方案,極大的減少了芯片的面積和系統(tǒng)的復雜程度。ARM9E系列微處理器提供了增強的DSP處理能力,很適合于那些需要同時使用DSP和微控制器的應用場合。
ARM9E系列微處理器的主要特點如下:
?。?nbsp; 支持DSP指令集,適合于需要高速數(shù)字信號處理的場合。
?。?nbsp; 5級整數(shù)流水線,指令執(zhí)行效率更高。
- 支持32位ARM指令集和16位Thumb指令集。
- 支持32位的高速AMBA總線接口。
?。?nbsp; 支持VFP9浮點處理協(xié)處理器。
?。?nbsp; 全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng)。
?。?nbsp; MPU支持實時操作系統(tǒng)。
?。?nbsp; 支持數(shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。
?。?nbsp; 主頻最高可達300MIPS。
ARM9系列微處理器主要應用于下一代無線設備、數(shù)字消費品、成像設備、工業(yè)控制、存儲設備和網(wǎng)絡設備等領域。
ARM9E系列微處理器包含ARM926EJ-S、ARM946E-S和ARM966E-S三種類型,以適用于不同的應用場合。
1.3.4 ARM10E微處理器系列
ARM10E系列微處理器具有高性能、低功耗的特點,由于采用了新的體系結構,與同等的ARM9器件相比較,在同樣的時鐘頻率下,性能提高了近50%,同時,ARM10E系列微處理器采用了兩種先進的節(jié)能方式,使其功耗極低。
ARM10E系列微處理器的主要特點如下:
- 支持DSP指令集,適合于需要高速數(shù)字信號處理的場合。
?。?nbsp; 6級整數(shù)流水線,指令執(zhí)行效率更高。
?。?nbsp; 支持32位ARM指令集和16位Thumb指令集。
?。?nbsp; 支持32位的高速AMBA總線接口。
?。?nbsp; 支持VFP10浮點處理協(xié)處理器。
- 全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng)。
?。?nbsp; 支持數(shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力
?。?nbsp; 主頻最高可達400MIPS。
?。?nbsp; 內嵌并行讀/寫操作部件。
ARM10E系列微處理器主要應用于下一代無線設備、數(shù)字消費品、成像設備、工業(yè)控制、通信和信息系統(tǒng)等領域。
ARM10E系列微處理器包含ARM1020E、ARM1022E和ARM1026EJ-S三種類型,以適用于不同的應用場合。
1.3.5 SecurCore微處理器系列
SecurCore系列微處理器專為安全需要而設計,提供了完善的32位RISC技術的安全解決方案,因此,SecurCore系列微處理器除了具有ARM體系結構的低功耗、高性能的特點外,還具有其獨特的優(yōu)勢,即提供
第2章 ARM微處理器的編程模型
本章簡介ARM微處理器編程模型的一些基本概念,包括工作狀態(tài)切換、數(shù)據(jù)的存儲格式、處理器異常等,通過對本章的閱讀,希望讀者能了解ARM微處理器的基本工作原理和一些與程序設計相關的基本技術細節(jié),為以后的程序設計打下基礎。
本章的主要內容:
?。?nbsp; ARM微處理器的工作狀態(tài)
?。?nbsp; ARM體系結構的存儲器格式
?。?nbsp; ARM微處理器的工作模式
?。?nbsp; ARM體系結構的寄存器組織
?。?nbsp; ARM微處理器的異常狀態(tài)
在開始本章之前,首先對字(Word)、半字(Half-Word)、字節(jié)(Byte)的概念作一個說明:
字(Word):在ARM體系結構中,字的長度為32位,而在8位/16位處理器體系結構中,字的長度一般為16位,請讀者在閱讀時注意區(qū)分。
半字(Half-Word):在ARM體系結構中,半字的長度為16位,與8位/16位處理器體系結構中字的長度一致。
字節(jié)(Byte):在ARM體系結構和8位/16位處理器體系結構中,字節(jié)的長度均為8位。
2.1 ARM微處理器的工作狀態(tài)
從編程的角度看,ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:
?。?nbsp; 第一種為ARM狀態(tài),此時處理器執(zhí)行32位的字對齊的ARM指令;
- 第二種為Thumb狀態(tài),此時處理器執(zhí)行16位的、半字對齊的Thumb指令。
當 ARM微處理器執(zhí)行32位的ARM指令集時,工作在ARM狀態(tài);當ARM微處理器執(zhí)行16位的Thumb指令集時,工作在Thumb狀態(tài)。在程序的執(zhí)行過 程中,微處理器可以隨時在兩種工作狀態(tài)之間切換,并且,處理器工作狀態(tài)的轉變并不影響處理器的工作模式和相應寄存器中的內容。
狀態(tài)切換方法:
ARM指令集和Thumb指令集均有切換處理器狀態(tài)的指令,并可在兩種工作狀態(tài)之間切換,但ARM微處理器在開始執(zhí)行代碼時,應該處于ARM狀態(tài)。
進 入Thumb狀態(tài):當操作數(shù)寄存器的狀態(tài)位(位0)為1時,可以采用執(zhí)行BX指令的方法,使微處理器從ARM狀態(tài)切換到Thumb狀態(tài)。此外,當處理器處 于Thumb狀態(tài)時發(fā)生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時,自動切換到Thumb狀態(tài)。
進入ARM狀態(tài):當操作數(shù)寄存器的狀態(tài)位為0時,執(zhí)行BX指令時可以使微處理器從Thumb狀態(tài)切換到ARM狀態(tài)。此外,在處理器進行異常處理時,把PC指針放入異常模式鏈接寄存器中,并從異常向量地址開始執(zhí)行程序,也可以使處理器切換到ARM狀態(tài)。
2.2 ARM體系結構的存儲器格式
ARM體系結構將存儲器看作是從零地址開始的字節(jié)的線性組合。從零字節(jié)到三字節(jié)放置第一個存儲的字數(shù)據(jù),從第四個字節(jié)到第七個字節(jié)放置第二個存儲的字數(shù)據(jù),依次排列。作為32位的微處理器,ARM體系結構所支持的最大尋址空間為4GB(232字節(jié))。
ARM體系結構可以用兩種方法存儲字數(shù)據(jù),稱之為大端格式和小端格式,具體說明如下:
大端格式:
在這種格式中,字數(shù)據(jù)的高字節(jié)存儲在低地址中,而字數(shù)據(jù)的低字節(jié)則存放在高地址中,如圖2.1所示:
圖2.1 以大端格式存儲字數(shù)據(jù)
小端格式:
與大端存儲格式相反,在小端存儲格式中,低地址中存放的是字數(shù)據(jù)的低字節(jié),高地址存放的是字數(shù)據(jù)的高字節(jié)。如圖2.2所示:
圖2. 2 以小端格式存儲字數(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種運行模式,分別為:
─ 用戶模式(usr): ARM處理器正常的程序執(zhí)行狀態(tài)
─ 快速中斷模式(fiq): 用于高速數(shù)據(jù)傳輸或通道處理
─ 外部中斷模式(irq): 用于通用的中斷處理
─ 管理模式(svc): 操作系統(tǒng)使用的保護模式
─ 數(shù)據(jù)訪問終止模式(abt): 當數(shù)據(jù)或指令預取終止時進入該模式,可用于虛擬存儲及存儲保護。
─ 系統(tǒng)模式(sys): 運行具有特權的操作系統(tǒng)任務。
─ 未定義指令中止模式(und):當未定義的指令執(zhí)行時進入該模式,可用于支持硬件協(xié)處理器的軟件仿真。
ARM微處理器的運行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。
大多數(shù)的應用程序運行在用戶模式下,當處理器運行在用戶模式下時,某些被保護的系統(tǒng)資源是不能被訪問的。
除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權模式(Privileged Modes);其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式(Exception Modes),常用于處理中斷或異常,以及需要訪問受保護的系統(tǒng)資源等情況。
2.5 寄存器組織
ARM 微處理器共有37個32位寄存器,其中31個為通用寄存器,6個為狀態(tài)寄存器。但是這些寄存器不能被同時訪問,具體哪些寄存器是可編程訪問的,取決微處理 器的工作狀態(tài)及具體的運行模式。但在任何時候,通用寄存器R14~R0、程序計數(shù)器PC、一個或兩個狀態(tài)寄存器都是可訪問的。
2.5.1 ARM狀態(tài)下的寄存器組織
通用寄存器:
通用寄存器包括R0~R15,可以分為三類:
─ 未分組寄存器R0~R7;
─ 分組寄存器R8~R14
─ 程序計數(shù)器PC(R15)
未分組寄存器R0~R7:
在所有的運行模式下,未分組寄存器都指向同一個物理寄存器,他們未被系統(tǒng)用作特殊的用途,因此,在中斷或異常處理進行運行模式轉換時,由于不同的處理器運行模式均使用相同的物理寄存器,可能會造成寄存器中數(shù)據(jù)的破壞,這一點在進行程序設計時應引起注意。
分組寄存器R8~R14
對于分組寄存器,他們每一次所訪問的物理寄存器與處理器當前的運行模式有關。
對于R8~R12來說,每個寄存器對應兩個不同的物理寄存器,當使用fiq模式時,訪問寄存器R8_fiq~R12_fiq;當使用除fiq模式以外的其他模式時,訪問寄存器R8_usr~R12_usr。
對于R13、R14來說,每個寄存器對應6個不同的物理寄存器,其中的一個是用戶模式與系統(tǒng)模式共用,另外5個物理寄存器對應于其他5種不同的運行模式。
采用以下的記號來區(qū)分不同的物理寄存器:
R13_<mode>
R14_<mode>
其中,mode為以下幾種模式之一:usr、fiq、irq、svc、abt、und。
寄存器R13在ARM指令中常用作堆棧指針,但這只是一種習慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強制性的要求使用R13作為堆棧指針。
由 于處理器的每種運行模式均有自己獨立的物理寄存器R13,在用戶應用程序的初始化部分,一般都要初始化每種模式下的R13,使其指向該運行模式的??臻g, 這樣,當程序的運行進入異常模式時,可以將需要保護的寄存器放入R13所指向的堆棧,而當程序從異常模式返回時,則從對應的堆棧中恢復,采用這種方式可以 保證異常發(fā)生后程序的正常執(zhí)行。
R14也稱作子程序連接寄存器(Subroutine LINK <http://www.dzsc.com/stock-ic/LINK.html> Register)或連接寄存器LR。當執(zhí)行BL子程序調用指令時,R14中得到R15(程序計數(shù)器PC)的備份。其他情況下,R14用作通用寄存器。與 之類似,當發(fā)生中斷或異常時,對應的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保存R15的返回 值。
寄存器R14常用在如下的情況:
在每一種運行模式下,都可用R14保存子程序的返回地址,當用BL或BLX指令調用子程序時,將PC的當前值拷貝給R14,執(zhí)行完子程序后,又將R14的值拷貝回PC,即可完成子程序的調用返回。以上的描述可用指令完成:
1、執(zhí)行以下任意一條指令:
MOV PC,LR
BX LR
2、在子程序入口處使用以下指令將R14存入堆棧:
STMFD SP!,{<Regs>,LR}
對應的,使用以下指令可以完成子程序返回:
LDMFD SP!,{<Regs>,PC}
R14也可作為通用寄存器。
程序計數(shù)器PC(R15)
寄 存器R15用作程序計數(shù)器(PC)。在ARM狀態(tài)下,位[1:0]為0,位[31:2]用于保存PC;在Thumb狀態(tài)下,位[0]為0,位[31:1] 用于保存PC;雖然可以用作通用寄存器,但是有一些指令在使用R15時有一些特殊限制,若不注意,執(zhí)行的結果將是不可預料的。在ARM狀態(tài)下,PC的0和 1位是0,在Thumb狀態(tài)下,PC的0位是0。
R15雖然也可用作通用寄存器,但一般不這么使用,因為對R15的使用有一些特殊的限制,當違反了這些限制時,程序的執(zhí)行結果是未知的。
由于ARM體系結構采用了多級流水線技術,對于ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值為當前指令的地址值加8個字節(jié)。
圖2.3 ARM狀態(tài)下的寄存器組織
在ARM狀態(tài)下,任一時刻可以訪問以上所討論的16個通用寄存器和一到兩個狀態(tài)寄存器。在非用戶模式(特權模式)下,則可訪問到特定模式分組寄存器,圖2.3說明在每一種運行模式下,哪一些寄存器是可以訪問的。
寄存器R16:
寄存器R16用作CPSR(Current Program Status Register,當前程序狀態(tài)寄
第3章 ARM微處理器的指令系統(tǒng)
本章介紹ARM指令集、Thumb指令集,以及各類指令對應的尋址方式,通過對本章的閱讀,希望讀者能了解ARM微處理器所支持的指令集及具體的使用方法。
本章的主要內容有:
- ARM指令集、Thumb指令集概述。
?。?nbsp; ARM指令集的分類與具體應用。
?。?nbsp; Thumb指令集簡介及應用場合。
3.1 ARM微處理器的指令集概述
3.1.1 ARM微處理器的指令的分類與格式
ARM微處理器的指令集是加載/存儲型的,也即指令集僅能處理寄存器中的數(shù)據(jù),而且處理結果都要放回寄存器中,而對系統(tǒng)存儲器的訪問則需要通過專門的加載/存儲指令來完成。
ARM微處理器的指令集可以分為跳轉指令、數(shù)據(jù)處理指令、程序狀態(tài)寄存器(PSR)處理指令、加載/存儲指令、協(xié)處理器指令和異常產(chǎn)生指令六大類,具體的指令及功能如表3-1所示(表中指令為基本ARM指令,不包括派生的ARM指令)。
表3-1 ARM指令及功能描述
助記符 指令功能描述
ADC 帶進位加法指令
ADD 加法指令
AND 邏輯與指令
B 跳轉指令
BIC 位清零指令
BL 帶返回的跳轉指令
BLX 帶返回和狀態(tài)切換的跳轉指令
BX 帶狀態(tài)切換的跳轉指令
CDP 協(xié)處理器數(shù)據(jù)操作指令
CMN 比較反值指令
CMP 比較指令
EOR 異或指令
LDC 存儲器到協(xié)處理器的數(shù)據(jù)傳輸指令
LDM 加載多個寄存器指令
LDR 存儲器到寄存器的數(shù)據(jù)傳輸指令
MCR 從ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳輸指令
MLA 乘加運算指令
MOV 數(shù)據(jù)傳送指令
MRC 從協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳輸指令
MRS 傳送CPSR或SPSR的內容到通用寄存器指令
MSR 傳送通用寄存器到CPSR或SPSR的指令
MUL 32位乘法指令
MLA 32位乘加指令
MVN 數(shù)據(jù)取反傳送指令
ORR 邏輯或指令
RSB 逆向減法指令
RSC 帶借位的逆向減法指令
SBC 帶借位減法指令
STC 協(xié)處理器寄存器寫入存儲器指令
STM 批量內存字寫入指令
STR 寄存器到存儲器的數(shù)據(jù)傳輸指令
SUB 減法指令
SWI 軟件中斷指令
SWP 交換指令
TEQ 相等測試指令
TST 位測試指令
3.1.2 指令的條件域
當處理器工作在ARM狀態(tài)時,幾乎所有的指令均根據(jù)CPSR中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。當指令的執(zhí)行條件滿足時,指令被執(zhí)行,否則指令被忽略。
每 一條ARM指令包含4位的條件碼,位于指令的最高4位[31:28]。條件碼共有16種,每種條件碼可用兩個字符表示,這兩個字符可以添加在指令助記符的 后面和指令同時使用。例如,跳轉指令B可以加上后綴EQ變?yōu)锽EQ表示“相等則跳轉”,即當CPSR中的Z標志置位時發(fā)生跳轉。
在16種條件標志碼中,只有15種可以使用,如表3-2所示,第16種(1111 <http://www.dzsc.com/stock-ic/1111.html>)為系統(tǒng)保留,暫時不能使用。
表3-2 指令的條件碼
條件碼 助記符后綴 標 志 含 義
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置位 負數(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ù),對應的尋址方式也就叫做立即尋址。例如以下指令:
ADD R0,R0,#1 ;R0←R0+1
ADD R0,R0,#0x3f ;R0←R0+0x3f
在以上兩條指令中,第二個源操作數(shù)即為立即數(shù),要求以“#”為前綴,對于以十六進制表示的立即數(shù),還要求在“?!焙蠹由稀?x”或“&”。
3.2.2 寄存器尋址
寄存器尋址就是利用寄存器中的數(shù)值作為操作數(shù),這種尋址方式是各類微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。以下指令:
ADD R0,R1,R2 ;R0←R1+R2
該指令的執(zhí)行效果是將寄存器R1和R2的內容相加,其結果存放在寄存器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相加,結果存入寄存器R0中。
第二條指令將以R1的值為地址的存儲器中的數(shù)據(jù)傳送到R0中。
第三條指令將R0的值傳送到以R1的值為地址的存儲器中。
3.2.3 基址變址尋址
基址變址尋址就是將寄存器(該寄存器一般稱作基址寄存器)的內容與指令中給出的地址偏移量相加,從而得到一個操作數(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的內容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器R0中。
在第二條指令中,將寄存器R1的內容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器R0中,然后,R1的內容自增4個字節(jié)。
在第三條指令中,以寄存器R1的內容作為操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器R0中,然后,R1的內容自增4個字節(jié)。
在第四條指令中,將寄存器R1的內容加上寄存器R2的內容形成操作數(shù)的有效地址,從而取得
第4章 ARM程序設計基礎
ARM編譯器一般都支持匯編語言的程序設計和C/C++語言的程序設計,以及兩者的混合編程。本章介紹ARM程序設計的一些基本概念,如ARM匯編語言的偽指令、匯編語言的語句格式和匯編語言的程序結構等,同時介紹C/C++和匯編語言的混合編程等問題。
本章的主要內容:
?。?nbsp; ARM編譯器所支持的偽指令
?。?nbsp; 匯編語言的語句格式
- 匯編語言的程序結構
?。?nbsp; 相關的程序示例
4.1 ARM匯編器所支持的偽指令
在 ARM匯編語言程序里,有一些特殊指令助記符,這些助記符與指令系統(tǒng)的助記符不同,沒有相對應的操作碼,通常稱這些特殊指令助記符為偽指令,他們所完成的 操作稱為偽操作。偽指令在源程序中的作用是為完成匯編程序作各種準備工作的,這些偽指令僅在匯編過程中起作用,一旦匯編結束,偽指令的使命就完成。
在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偽指令用于定義一個全局的字符串變量,并初始化為空;
由于以上三條偽指令用于定義全局變量,因此在整個程序范圍內變量名必須唯一。
使用示例:
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偽指令用于定義一個局部的字符串變量,并初始化為空;
以上三條偽指令用于聲明局部變量,在其作用范圍內變量名必須唯一。
使用示例:
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) 表達式
偽指令SETA、SETL、SETS用于給一個已經(jīng)定義的全局變量或局部變量賦值。
SETA偽指令用于給一個數(shù)學變量賦值;
SETL偽指令用于給一個邏輯變量賦值;
SETS偽指令用于給一個字符串變量賦值;
其中,變量名為已經(jīng)定義過的全局變量或局部變量,表達式為將要賦給變量的值。
使用示例:
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指令中,列表中的寄存器訪問次序為根據(jù)寄存器的編號由低到高,而與列表中的寄存器排列次序無關。
使用示例:
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)用于為雙精度的浮點數(shù)分配一片連續(xù)的字存儲單元并用指定的數(shù)據(jù)初始化。
- DCFS(DCFSU) 用于為單精度的浮點數(shù)分配一片連續(xù)的字存儲單元并用指定的數(shù)據(jù)初始化。
- DCQ(DCQU) 用于分配一片以8字節(jié)為單位的連續(xù)的存儲單元并用指定的數(shù)據(jù)初始化。
- SPACE 用于分配一片連續(xù)的存儲單元
- MAP 用于定義一個結構化的內存表首地址
- FIELD 用于定義一個結構化的內存表的數(shù)據(jù)域
1、 DCB
語法格式:
標號 DCB 表達式
DCB偽指令用于分配一片連續(xù)的字節(jié)存儲單元并用
第5章 應用系統(tǒng)設計與調試
本章主要介紹基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的硬件系統(tǒng)的詳細設計步驟、實現(xiàn)細節(jié)、硬件系統(tǒng)的調試方法等,通過對本章的閱讀,可以使絕大多數(shù)的讀者具有根據(jù)自身的需求、設計特定應用系統(tǒng)的能力。
盡管本章所描述的內容為基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的應用系統(tǒng)設計,但由于ARM體系結構的一致性、以及外圍電路的通用性,本章的所有內容對設計其他基于ARM內核芯片的應用系統(tǒng),也具有很大的參考價值。
本章的主要內容包括:
?。?nbsp; 嵌入式系統(tǒng)設計的基本方法。
?。?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>的硬件系統(tǒng)設計詳述
?。?nbsp; 硬件系統(tǒng)的調試方法
5.1 系統(tǒng)設計概述
根 據(jù)用戶需求,設計出特定的嵌入式應用系統(tǒng),是每一個嵌入式系統(tǒng)設計工程師應該達到的目標。嵌入式應用系統(tǒng)的設計包含硬件系統(tǒng)的設計和軟件系統(tǒng)設計兩個部 分,并且這兩部分的設計是互相關聯(lián)、密不可分的,嵌入式應用系統(tǒng)的設計經(jīng)常需要在硬件和軟件的設計之間進行權衡與折中。因此,這就要求嵌入式系統(tǒng)設計工程 師具有較深厚的硬件和軟件基礎,并具有熟練應用的能力。這也是嵌入式應用系統(tǒng)設計與其他的純粹的軟件設計或硬件設計最大的區(qū)別。
本章以北京微芯力 科技有限公司(www.winsilicon.com)設計生產(chǎn)的ARM Linux評估開發(fā)板為原型,詳細分析系統(tǒng)的軟、硬件設計步驟、實現(xiàn)細節(jié)以及調試技巧等。ARM Linux評估開發(fā)板的設計以學習與應用兼顧為出發(fā)點,在保證用戶完成ARM技術的學習開發(fā)的同時,考慮了系統(tǒng)的擴展、電路板的面積、散熱、電磁兼容性以 及安裝等問題,因此,該板也可作為嵌入式系統(tǒng)主板,直接應用在一些實際系統(tǒng)中。
圖5.1.1是ARM Linux評估開發(fā)板的結構框圖,各部分基本功能描述如下:
- 串行接口電路用于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)與其他應用系統(tǒng)的短距離雙向串行通訊;
?。?nbsp; 復位電路可完成系統(tǒng)上電復位和在系統(tǒng)工作時用戶按鍵復位;
?。?nbsp; 電源電路為5V到3.3V <http://www.dzsc.com/icstock/508/3.3V.html>的DC-DC轉換器,給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)提供工作時鐘,通過片內PLL電路倍頻為50MHZ <http://www.dzsc.com/icstock/619/50MHZ.html>作為微處理器的工作時鐘;
?。?nbsp; FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲器可存放已調試好的用戶應用程序、嵌入式操作系統(tǒng)或其他在系統(tǒng)掉電后需要保存的用戶數(shù)據(jù)等;
- SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>存儲器作為系統(tǒng)運行時的主要區(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接口可對芯片內部的所有部件進行訪問,通過該接口可對系統(tǒng)進行調試、編程等;
- IIC存儲器可存儲少量需要長期保存的用戶數(shù)據(jù);
- 系統(tǒng)總線擴展引出了數(shù)據(jù)總線、地址總線和必須的控制總線,便于用戶根據(jù)自身的特定需求,擴展外圍電路。
圖5.1.1 ARM Linux評估開發(fā)板的結構框圖
5.2 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>概述
5.2.1 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>及片內外圍簡介
在進行系統(tǒng)設計之前,有必要對ARM Linux評估開發(fā)板上的ARM芯片S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>及其工作原理進行比較詳細的介紹,讀者只有對該微處理器的工作原理有了較詳細的了解,才能進行特定應用系統(tǒng)的設計。
SAMSUNG <http://www.dzsc.com/stock-ic/SAMSUNG.html>公司的S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>是基于以太網(wǎng)應用系統(tǒng)的高性價比16/32位RISC微控制器,內含一個由ARM公司設計的16/32位ARM7TDMI RISC處理器核,ARM7TDMI為低功耗、高性能的16/32核,最適合用于對價格及功耗敏感的應用場合。
除了ARM7TDMI核以外,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>比較重要的片內外圍功能模塊包括:
- 2個帶緩沖描述符(Buffer Descriptor)的HDLC通道
- 2個UART通道
- 2個GDMA通道
- 2個32位定時器
- 18個可編程的I/O口。
片內的邏輯控制電路包括:
- 中斷控制器
- DRAM/SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>控制器
- ROM/SRAM和FLASH <http://www.dzsc.com/stock-ic/FLASH.html>控制器
- 系統(tǒng)管理器
- 一個內部32位系統(tǒng)總線仲裁器
- 一個外部存儲器控制器。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>結構框圖如圖5.2.1所示。
圖 5.2.1 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>結構框
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的特性描述如下:
體系結構
- 用于嵌入式以太網(wǎng)應用的集成系統(tǒng)
- 全16/32的RISC架構
- 支持大、小端模式。內部架構為大端模式,外部存儲器可為大、小端模式
- 內含效率高、功能強的ARM7TDMI處理器核
- 高性價比、基于JTAG接口的調試方案
- 邊界掃描接口
系統(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位的方式操作
- 帶總線請求/應答引腳的外部總線控制器
- 支持EDO/常規(guī)或SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>存儲器
- 可編程的訪問周期(可設定0~7個等待周期)
- 4字的寫緩沖
- 高性價比的從存儲器到外圍的DMA接口
一體化的指令/數(shù)據(jù)Cache
- 一體化的8K Cache
- 支持LRC(近期最少使用)替換算法
- Cache可配置為內部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ù)對準邏輯
- 支持端模式變換
- 100M/10Mbps的工作速率
- 與IEEE802.3標準完全兼容
- 提供MII和7線制10Mbps接口
- 站管理信號生成
- 片內CAM(可達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é)議特征:標志檢測與同步;零插入與刪除;空閑檢測和發(fā)送;FCS生成和檢測(16位);終止檢測與發(fā)送
- 地址搜索模式(可擴展到四字節(jié))
- 可選擇CRC模式或非CRC模式
- 用于時鐘恢復的數(shù)字PLL模塊
- 波特率生成器
- 發(fā)送和接收支持NRZ/NRZI/FM/曼切斯特數(shù)據(jù)格式
- 回環(huán)與自動回波模式
- 8字的發(fā)送和接收FIFO
- 可選的1字或4字數(shù)據(jù)傳送方式
- 數(shù)據(jù)對準邏輯
- 可編程中斷
- MODEM <http://www.dzsc.com/stock-ic/MODEM.html>接口
- 高達10Mbps的工作速率
- 基于8位位組的HDLC幀長度
- 每個HDLC有2通道DMA緩沖描述符用于發(fā)送和接收
DMA控制器
- 用于存儲器到存儲器、存儲器到UATR、UATR到存儲器數(shù)據(jù)傳送的2通道通用DMA控制器,不受CPU干預
- 可由程序或外部DMA請求啟動
- 可增減源地址或目的地址,無論8位、16位或32位數(shù)據(jù)傳輸
- 4種數(shù)據(jù)猝發(fā)模式
UART
- 2個可工作于DMA方式或中斷方式的UART模塊
- 支持5、6、7、8位的串行數(shù)據(jù)發(fā)送和接收
- 波特率可編程
- 1位或2位停止位
- 奇/偶校驗
- 間隔信號的生成與檢測
- 奇偶校驗、覆蓋和幀錯誤檢測
- ×16時鐘模式
- 支持紅外發(fā)送和接收
定時器
- 2個可編程32位定時器
- 間隔模式或觸發(fā)模式工作
可編程I/O口
- 18個可編程I/O口
- 可分別配置為輸入模式、輸出模式或特殊功能模式
中斷控制器
- 21個中斷源,包括4個外部中斷源
- 正常中斷或快速中斷模式(IRQ、FIQ)
- 基于優(yōu)先級的中斷處理
PLL
- 外部時鐘可由片內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>的內部系統(tǒng)時鐘。如果CLKSEN為高電平,XCLK直接作為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的內部系統(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>的內部系統(tǒng)時鐘。如果CLKSEL為高電平,XCLK直接作為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的內部系統(tǒng)時鐘。
nRESET 82 I 復位信號。nRESET為S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的復位信號,要使系統(tǒng)可靠復位,nRESET必須至少保持64個主時鐘周期的低電平。
CLKOEN 76 I 時鐘輸出允許/禁止。高電平允許系統(tǒng)時鐘信號輸出,低電平禁止。
TMODE 63 I 測試模式選擇。低電平為正常工作模式,高電平為芯片測試模式。
FILTER <http://www.dzsc.com/stock-ic/FILTER.html> 55 AI 如果使用PLL,應在該引腳和數(shù)字地之間接820pF的陶瓷電容。
TCK 58 I JTAG測試時鐘。JTAG測試時鐘信號用于切換狀態(tài)信息和檢測數(shù)據(jù)的輸入輸出。該引腳在片內下拉。
TMS 59 I JTAG測試模式選擇。該信號控制S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的JTAG測試操作。該引腳在片內上拉。
TDI 60 I JTAG測試數(shù)據(jù)輸入。在JTAG測試操作的過程中,該信號將指令和數(shù)據(jù)串行送入S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>。該引腳在片內上拉。
TDO 61 O JTAG測試數(shù)據(jù)輸出。在JTAG測試操作的過程中,該信號將指令和數(shù)據(jù)串行送出S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>。
nTRST 62 I JTAG復位信號,低電平復位。異步復位JTAG邏輯。該引腳在片內上拉。
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設備時,由外設插入等待周期。
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>可訪問多達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ù)總線寬度設定。ROM/SRAM/FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲器組0常用于程序的啟動?!?1’=字節(jié)(8位);‘10’=半字(16位);‘11’=字(32位);‘00’=保留
nOE 72 O 輸出使能。當對存儲器進行訪問的時候,該信號控制存儲器的輸出使能。
nWBE[3:0]/
DQM[3:0] 107,
102-100 O 寫字節(jié)使能。當對存儲器進行寫操作時,該信號控制存儲器(DRAM除外)的寫使能。對于DRAM存儲器組,由nCAS[3:0]和nDWE控制寫操作。DQM用于SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>數(shù)據(jù)輸入/輸出的屏蔽信號。
ExtMREQ 108 I 外部總線控制器請求信號。外部總線控制器通過該引腳請求控制外部總線,當該信號有效時,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>將外部總線置為高阻狀態(tài),以便外部總線控制器取得對外部總線的控制。當ExtMACK信號為的電平時,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>重新取得對外部總線的控制權。
ExtMACK 109 O 外部總線應答信號。
MDC 50 O 管理數(shù)據(jù)時鐘。該引腳產(chǎn)生MDIO數(shù)據(jù)輸入輸出時所需的時鐘信號。
MDIO 48 I/O 管理數(shù)據(jù)輸入/輸出。當執(zhí)行一個讀數(shù)據(jù)的命令時,該引腳輸入由物理層產(chǎn)生的數(shù)據(jù),當執(zhí)行一個寫數(shù)據(jù)的命令時,由該引腳輸出數(shù)據(jù)到物理層(PHY)。
LITTLE 49 I 小端模式選擇引腳。當該引腳為高電平時,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>工作在小端模式,當該引腳為低電平時,工作在大端模式。該引腳在片內已下拉,因此,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的上升沿驅動TXD[3:0]和TX_EN,當工作在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)測試位驅動。
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ù)的時鐘信號,當其頻率為25MHZ <http://www.dzsc.com/icstock/240/25MHZ.html>時,數(shù)據(jù)傳輸速率為100M <http://www.dzsc.com/stock-ic/100M.html>,當其頻率為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終端準備就緒。nDTRA引腳指示數(shù)據(jù)終端設備準備發(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)工作中起至關重要作用,只有清楚的了解系統(tǒng)管理器在系統(tǒng)中的作用及工作原理,才能進行程序設計和系統(tǒng)開發(fā),但同時,相對于8位或16位微處理器而言,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)管理器的工作原理又是比較復雜的,因此需要讀者認真細致的閱讀該部分內容,并通過編程實踐加以掌握。
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]設定訪問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ù)總線和內部數(shù)據(jù)總線之間的數(shù)據(jù)流協(xié)調總線寬度的差別。
- 對外部存儲器和I/O設備,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>同時支持小端模式和大端模式的訪問方式。
通過產(chǎn)生外部總線請求信號,外設可訪問S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的外部總線。另外,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>可通過插入等待周期(WAIT信號)訪問低速外設。WAIT信號由外設產(chǎn)生,可延長CPU的存儲器訪問周期。
系統(tǒng)管理器寄存器(SYSTEM <http://www.dzsc.com/stock-ic/SYSTEM.html> Manager Registers)
系統(tǒng)管理器使用一組專用的特殊功能寄存器來控制外部存儲器的讀/寫操作,通過對該組特殊功能寄存器編程,可以設定:
- 存儲器的類型
- 外部數(shù)據(jù)總線寬度及訪問周期
- 定時的控制信號(例如RAS和CAS)
- 存儲器組的定位
- 存儲器組的大小
在標準系統(tǒng)配置中訪問外設必需的控制信號、地址信號和數(shù)據(jù)信號,系統(tǒng)管理器通過設置特殊功能寄存器的值來控制其產(chǎn)生和處理。特殊功能寄存器也被用于控制對ROM/SRAM/Flash組的訪問,同時還能控制對多達四個DRAM <http://www.dzsc.com/stock-ic/DRAM.html> 組和四個外部I/O組以及一個特殊功能寄存器映射區(qū)域的訪問。
每個存儲器組在組內通過基指針(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字)。
在進行系統(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)
關于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)存儲器映射,以下是幾個應當注意的重點:
?。?nbsp; S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>采用統(tǒng)一編址的方式,將系統(tǒng)的片外存儲器、片內存儲器、特殊功能寄存器和外部的I/O設備,都映射到64MB <http://www.dzsc.com/stock-ic/64MB.html>的 地址空間,同時,為便于管理,又將地址空間分為如圖5.2.4所示的若干個存儲器組,可以通過配置包含基指針(Base Pointer)和尾指針(End Pointer)的特殊功能寄存器,設定每個存儲器組的大小和位置。用戶可利用基指針和尾指針設置連續(xù)的存儲器映射。具體操作如下:即把某個存儲器組的基 指針的地址設置為前一個存儲器組的尾指針的地址。請注意在設定存儲器組的控制寄存器時,每兩個相連的存儲器組的地址空間決不能重疊,即使這些組被禁用。
?。?nbsp; 四 個外部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組的起始地址并沒有被固定。通過設定組的基指針,可以設定一個具體的組起始地址,但總的地址空間是連續(xù)的64KB <http://www.dzsc.com/icstock/721/64KB.html>。
- 每個組的起始物理地址為“基指針左移16位”, 每組末尾的物理地址為“尾指針左移16位 - 1”。
在 上電或系統(tǒng)復位后,所有組的地址指針寄存器都被初始化到其缺省值。這時,所有的組指針(ROM/SRAM/Flash組0和特殊功能寄存器組除外)都被清 零。這意味著:除ROM/SRAM/Flash組0和特殊功能寄存器組以外,所有其它組在系統(tǒng)啟動時都是未被定義的。這一點很重要,用戶在進行程序設計 時,一般總是要首先通過配置相應寄存器,定義系統(tǒng)的存儲空間。
ROM/SRAM/Flash組0的尾指針和基指針的復位值分別為0x200和0x0。這意味著系統(tǒng)復位后將自動定義ROM/SRAM/Flash組0的地址空間為32MB <http://www.dzsc.com/stock-ic/32MB.html>, 實際地址范圍為0x0000,0000~0x0200,0000-1。ROM/SRAM/Flash組0的這種初始化定義使得系統(tǒng)在上電或復位后,將系統(tǒng) 的控制權交給了由用戶編寫的啟動代碼,當然這些啟動代碼應存放在外部ROM中的,并映射到ROM/SRAM/Flash組0。當起動代碼執(zhí)行時,它執(zhí)行各 種系統(tǒng)初始化任務,并根據(jù)應用系統(tǒng)的外部存儲器和設備的實際情況來重新配置系統(tǒng)的存儲器映射。
特殊功能寄存器組的基址針在系統(tǒng)復位時被初始化為0x3FF0000,一般不再改動。
圖5.2.5是在系統(tǒng)啟動或復位時的系統(tǒng)存儲器映射。
圖5.2.5 系統(tǒng)復位時的存儲器映射
表5-2-4為系統(tǒng)管理器對應的寄存器,系統(tǒng)的存儲器映射可通過對這些寄存器的配置來完成。
表5-2-4 系統(tǒng)管理器對應的寄存器
寄存器 偏移量 操作 描 述 復位值
SYSCFG 0x0000 讀/寫 系統(tǒng)配置寄存器 0x37FFFF91
CLKCON 0x3000 讀/寫 時鐘控制寄存器 0x00000000
EXTACON0 0x3008 讀/寫 外部I/O時序寄存器1 0x00000000
EXTACON1 0x300C 讀/寫 外部I/O時序寄存器2 0x00000000
EXTDBWTH 0x3010 讀/寫 分組數(shù)據(jù)總線的寬度設置寄存器 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>應 用系統(tǒng)的地址總線的連接方式相對簡單。由于ARM7TDMI采用32位地址總線,所有的地址都可以看作字節(jié)地址,地址總線提供4GB的線性尋址空間,當發(fā) 出字訪問信號時,存儲系統(tǒng)忽略低2位A[1:0],當發(fā)出半字訪問信號時,存儲系統(tǒng)忽略低位A[0],基于以上原因,某些ARM系統(tǒng)在與存儲器接口時,地 址總線的連接需要錯開,而S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>則通過一個片內的地址總線生成部件,隱藏該過程,用戶在設計系統(tǒng)時,只需將S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的地址總線與存儲器的地址總線一一對應連接即可(即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(內部) 4M字節(jié)
16位 A21-A1(內部) 4M半字
32位 &
5.3 系統(tǒng)的硬件選型與單元電路設計
從這一節(jié)開始,將詳細描述系統(tǒng)的硬件選型與設計,希望通過對這些章節(jié)的閱讀,能使讀者具有初步設計特定系統(tǒng)的能力。
盡管硬件選型與單元電路設計部分的內容是基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的系統(tǒng),但由于ARM體系結構的一致性和常見外圍電路的通用性,只要讀者能真正理解本部分的設計方法,從而設計出基于其他ARM微處理器的系統(tǒng),應該也是比較容易的。
需要說明,以下的應用電路可能不是最佳的,但經(jīng)驗證是可以正常工作的。
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封裝微控制器的讀者來說,可能會覺得有點復雜,然而,盡管S3C4510B引腳較多,但根據(jù)各自的功能,分布很有規(guī)律。
首 先,電源和接地引腳有近50根,再除去地址總線、數(shù)據(jù)總線和通用I/O口,以及其他的專用模塊如HDLC、UART、IIC、MAC等的接口,真正需要仔 細研究的引腳數(shù)就不是很多了,但這些引腳主要是控制信號,需要認真對待,在此先進行簡單的分析,其后的單元電路設計里,會有更再詳細的說明。
在硬件系統(tǒng)的設計中,應當注意芯片引腳的類型,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>(也包括其他的微處理器)的引腳主要分為三類,即:輸入(I)、輸出(O)、輸入/輸出(I/O)。
輸出類型的引腳主要用于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>對外設的控制或通信,由S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>主動發(fā)出,這些引腳的連接不會對S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>自身的運行有太大的影響。
輸入/輸出類型的引腳主要是S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>與外設的雙向數(shù)據(jù)傳輸通道。
而某些輸入類型的引腳,其電平信號的設置是S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>本身正常工作的前提,在系統(tǒng)設計時必須小心處理。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的主要控制信號如下:
LITTLE(Pin49):大、小端模式選擇引腳。高電平 = 小端模式;低電平 = 大端模式;該引腳在片內下拉,系統(tǒng)默認為大端模式,但在實際系統(tǒng)中一般使用小端模式,更符合我們的使用習慣,因此該引腳可上拉或接電源。
FILTER <http://www.dzsc.com/stock-ic/FILTER.html>(Pin55):如果使用PLL倍頻電路,應在該引腳和地之間接820pF的陶瓷電容。在實際系統(tǒng)中,一般應使用PLL電路,因此,該電容應連接。
TCK、TMS、TDI、TDO、nTRST(Pin58~Pin62):JTAG接口引腳。根據(jù)IEEE標準,TCK應下拉,TMS、TDI和nTRST應上拉。S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>已按此標準在片內連接,只需要與JTAG插座直接相連即可,但某些ARM芯片并未做相應的處理,在設計電路時應注意。
TMODE(Pin63):測試模式。高電平 = 芯片測試模式;低電平 = 正常工作模式;用戶一般不作芯片測試,該引腳下拉或接地,使芯片處于正常工作模式。
nEWAIT(Pin71):外部等待請求信號。該引腳應上拉。
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)復位引腳。低電平復位,當系統(tǒng)正常工作時,該引腳應處于高電平狀態(tài)。
CLKSEL(Pin83):時鐘選擇。高電平 = XCLK直接作為系統(tǒng)的工作時鐘;低電平 = XCLK經(jīng)過PLL電路倍頻后作為系統(tǒng)的工作時鐘。
ExtMREQ(Pin108):外部主機總線請求信號。該引腳應下拉。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的其余引腳為電源線、接地線、數(shù)據(jù)總線、地址總線以及其他功能模塊地輸入/輸出線,對CPU自身地運行地影響相對較小,其連接方式也比較簡單,在此不作詳述。
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)電源電路的設計,要求整個系統(tǒng)的輸入電壓為高質量的5V的直流穩(wěn)壓電源。系統(tǒng)電源電路如下圖所示:
圖5.3.1 系統(tǒng)的電源電路
有很多DC-DC轉換器可完成5V到3.3V <http://www.dzsc.com/icstock/508/3.3V.html>的轉換,在此選用LINEAR <http://www.dzsc.com/icstock/385/LINEAR.html> TECHNOLOGY <http://www.dzsc.com/stock-ic/TECHNOLOGY.html>的LT108X系列。常見的型號和對應的電流輸出如下:
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
設計者可根據(jù)系統(tǒng)的實際功耗,選擇不同的器件。
5.3.3 晶振電路與復位電路
晶振電路用于向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>片內的PLL電路倍頻后,最高可以達到50MHZ <http://www.dzsc.com/icstock/619/50MHZ.html>。片內的PLL電路兼有頻率放大和信號提純的功能,因此,系統(tǒng)可以以較低的外部時鐘信號獲得較高的工作頻率,以降低因高速開關時鐘所造成的高頻噪聲。
有源晶振的1腳接5V電源,2腳懸空,3腳接地,4腳為晶振的輸出,可通過一個小電阻(此處為22歐姆)接S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的XCLK引腳。
在系統(tǒng)中,復位電路主要完成系統(tǒng)的上電復位和系統(tǒng)在運行時用戶的按鍵復位功能。復位電路可由簡單的RC電路構成,也可使用其他的相對較復雜,但功能更完善的電路。
本系統(tǒng)采用較簡單的RC復位電路,經(jīng)使用證明,其復位邏輯是可靠的。復位電路如圖5.3.3所示:
圖5.3.3 系統(tǒng)的復位電路
該復位電路的工作原理如下:在系統(tǒng)上電時,通過電阻R1向電容C1充電,當C1兩端的電壓未達到高電平的門限電壓時,Reset端輸出為低電平,系統(tǒng)處于復位狀態(tài);當C1兩端的電壓達到高電平的門限電壓時,Reset端輸出為高電平,系統(tǒng)進入正常工作狀態(tài)。
當用戶按下按鈕S1時,C1兩端的電荷被瀉放掉,Reset端輸出為低電平,系統(tǒng)進入復位狀態(tài),再重復以上的充電過程,系統(tǒng)進入正常工作狀態(tài)。
兩級非門電路用于按鈕去抖動和波形整形;nReset端的輸出狀態(tài)與Reset端相反,以用于高電平復位的器件;通過調整R1和C1的參數(shù),可調整復位狀態(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)進行電擦寫,掉電后信息不丟失的存儲器。它具有低功耗、大容量、擦寫速度快、可整片或分扇區(qū)在系統(tǒng)編程(燒 寫)、擦除等特點,并且可由內部嵌入的算法完成對芯片的操作,因而在各種嵌入式系統(tǒ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)的編程與擦除操作,通過對其內部的命令寄存器寫入標準的命令序列,可對FLASH <http://www.dzsc.com/stock-ic/FLASH.html>進行編程(燒寫)、整片擦除、按扇區(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>進行讀寫操作時,該引腳必須為低電平,當為高電平時,芯片處于高阻旁路狀態(tài)
OE# I 輸出使能,低電平有效。在讀操作時有效,寫操作時無效。
WE# I 寫使能,低電平有效。在對HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>進行編程和擦除操作時,控制相應的寫命令。
RESET# I 硬件復位,低電平有效。對HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>進行硬件復位。當復位時,HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>立即終止正在進行的操作。
RY/BY# O 就緒/忙 狀態(tài)指示。用于指示寫或擦除操作是否完成。當HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>正在進行編程或擦除操作時,該引腳位低電平,操作完成時為高電平,此時可讀取內部的數(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>的簡介,更具體的內容可參考HY29LV160 <http://www.dzsc.com/icstock/123/HY29LV160.html>的用戶手冊。其他類型的
5.4 硬件系統(tǒng)的調試
通過5.3節(jié)對S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>應用系統(tǒng)設計方法的閱讀,具有一定系統(tǒng)開發(fā)經(jīng)驗的讀者就可以設計開發(fā)自己的特定應用系統(tǒng),上節(jié)所介紹的內容實際上可理解為一個基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的最小系統(tǒng),讀者可根據(jù)自己的實際需要做適當?shù)脑鰷p。
當 系統(tǒng)設計制作完成時,必須經(jīng)過仔細的調試,才能保證系統(tǒng)按照設計意圖正常工作。盡管系統(tǒng)的調試與個人對電路工作原理的理解和實際的電路調試經(jīng)驗有很大的關 系,但一定的調試方法也是必不可少的。掌握正確的調試方法可使調試工作變得容易,大大縮短系統(tǒng)的開發(fā)時間,反之,可能會使整個系統(tǒng)的開發(fā)前功盡棄,以失敗 告終。
本節(jié)以單元電路為單位,并結合筆者自身在系統(tǒng)調試時所遇到的一些具有代表性的問題,循序漸進的介紹整個系統(tǒng)的調試過程。在此,筆者建議:當 用戶的印制電路板制作完畢后,不要急于焊接元器件,請首先對照原理圖仔細檢查印制電路板的連線,確保無誤后方可焊接。同時,盡可能的以各單元電路為單位, 一個個焊接調試,以便在調試過程中遇到困難時縮小故障范圍,在系統(tǒng)上電后,應先檢查電路工作有無異常,芯片在工作時有一定的發(fā)熱是正常的,但如果有芯片特 別發(fā)燙,則一定有故障存在,需斷電檢查確認無誤后方可繼續(xù)通電調試。
調試工具需要示波器、萬用表等,同時需要ARM調試開發(fā)軟件ADS或SDT及相應的仿真器,本系統(tǒng)在調試時使用ADS1.2及由北京微芯力科技有限公司開發(fā)的ARM JTAG仿真器。關于ADS的使用方法在以后的章節(jié)有詳細的敘述。
5.4.1 電源、晶振及復位電路
電源電路、晶振電路和復位電路相對比較簡單,按圖5.3.1、圖5.3.2和圖5.3.3連接后應該就可以正常工作,此時電源電路的輸出因為DC 3.3V <http://www.dzsc.com/icstock/508/3.3V.html>。
用示波器觀測,有源晶振的輸出應為10MHZ <http://www.dzsc.com/icstock/609/10MHZ.html>;
復位電路的RESET端在未按按鈕時輸出應為高電平(3.3V),按下按鈕后變?yōu)榈碗娖剑粹o松開后應恢復到高電平。
電源電路、晶振電路和復位電路是整個系統(tǒng)正常工作的基礎,應首先保證他們的正常工作。
5.4.2 S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>及JTAG接口電路
在保證電源電路、晶振電路和復位電路正常工作的前提下,可通過JTAG接口調試S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>,在系統(tǒng)上電前,首先應檢測JTAG接口的TMS、TCK、TDI、TDO信號是否已與S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的對應引腳相連,其次應檢測S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的nEWAIT引腳(Pin71)是否已上拉,ExtMREQ引腳(Pin108)是否已下拉,對這兩只引腳的處理應注意,作者遇到多起S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>不能正常工作或無法與JTAG接口通信,均與沒有正確處理這兩只引腳有關。
給系統(tǒng)上電后,可通過示波器查看S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>對應引腳的輸出波形,判斷是否已正常工作,若S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>已正常工作,在使能片內PLL電路的情況下,SDCLK/MCLKO引腳(Pin77)應輸出頻率為50MHZ <http://www.dzsc.com/icstock/619/50MHZ.html>的波形,同時,MDC引腳(Pin50)和其他一些引腳也應有波形輸出。
在保證S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>已正常工作的情況下,可使用ADS或SDT通過JTAG接口對片內的部件進行訪問和控制。
在此,首先通過對片內控制通用I/O口的特殊功能寄存器的操作,來點亮連接在P3~P0口上的4只LED,用以驗證ADS或SDT調試環(huán)境是否已正確設置,以及與JTAG接口的連接是否正常。
ADS和SDT均為ARM公司為方便用戶在ARM芯片上進行應用開發(fā)而推出的一整套集成開發(fā)工具,其中,ADS為SDT的升級版本。該系統(tǒng)的調試以ADS為例,同時也適合于SDT開發(fā)環(huán)境。圖5.4.1為調試系統(tǒng)的硬件連接。
圖5.4.1 調試系統(tǒng)的硬件連接
按圖5.4.1連接好硬件后,打開AXD Debugger,建立與目標板(待調試的系統(tǒng)板)的連接,AXD Debugger有軟件仿真方式和帶目標系統(tǒng)的調試方式,此時應工作在帶目標系統(tǒng)的調試方式。
選擇菜單SYSTEM <http://www.dzsc.com/stock-ic/SYSTEM.html> Views→Command LINE <http://www.dzsc.com/stock-ic/LINE.html> Interface功能,該選項為AXD Debugger的一個命令行窗口,可在該窗口內輸入各種調試命令,使用非常方便。在命令行窗口輸入:
>setmem 0x3FF5000, 0xFFFF, 32
>setmem 0x3FF5008, 0xFFFF, 32
setmem命令用于對特定的地址設置特定的值,待設定的值可以是8位、16位或32位,在此,對通用I/O口的模式寄存器和數(shù)據(jù)寄存器設置相應的值,點亮LED。
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>在 復位后,特殊功能寄存器的基地址為0x3FF0000, 由表5-2-3可知,I/O口的模式寄存器偏移地址為0x5000,因此,I/O口的模式寄存器的物理地址為0x3FF5000,設定該寄存器的值為 0xFFFF,將I/O口置為輸出方式。I/O口的數(shù)據(jù)寄存器的物理地址為0x3FF5008,設定該寄存器的值為0xFFFF,將I/O口的輸出置為高 電平。
在執(zhí)行完以上兩條命令后,連接在通用I/O口的4只LED應被點亮,表示調試系統(tǒng)的軟、硬件連接完好,可進行下一步的調試工作,否則,應重新檢查調試系統(tǒng)。
用戶若使用SDT作為調試工具,操作方法類似。按圖5.4.1連接好硬件后,打開ARM Debugger for Windows,建立與目標板(待調試的系統(tǒng)板)的連接,選擇菜單View→Command功能,即可顯示命令行窗口,在命令行窗口輸入:
Debug:let 0x3FF5000 = 0xFFFF
Debug:let 0x3FF5008 = 0xFFFF
執(zhí)行完以上兩條命令后,連接在通用I/O口的4只LED應被點亮。
關于通用I/O口更具體的工作原理和使用方法,可參考S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>用戶手冊。
用戶系統(tǒng)若能正常完成上述操作并成功點亮連接在P3~P0口上的LED顯示器,則表明S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>已在正常工作,且調試環(huán)境也已正確建立,以后的調試工作就相對簡單。筆者曾遇到多個用戶系統(tǒng)因為不能完成這步工作,使開發(fā)者失去信心而最終放棄。
5.4.3 SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>接口電路的調試
在系統(tǒng)的兩類存儲器中,SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>相對于FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲器控制信號較多,似乎調試應該困難一些,但由于SDRAM的所有刷新及控制信號均由S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>片內的專門部件控制,無需用戶干預,在S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>正常工作的前提下,只要連線無誤,SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>就應能正常工作,反之,F(xiàn)LASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲器的編程、擦除操作均需要用戶編程控制,且程序還應在SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>中運行,因此,應先調試好SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>存儲器系統(tǒng),再進行FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲器系統(tǒng)的調試。
在進行存儲器系統(tǒng)調試之前,用戶必須深入了解S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>系統(tǒng)管理器關于存儲器映射的工作原理。
基于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以及片內的特殊功能寄存器和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>的地址空間分為若干個組,分別由相應的特殊功能寄存器進行控制:
?。?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控制;
- 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)的其他外擴接口器件,由特殊功能寄存器REFEXTCON控制;
?。?nbsp; 特殊功能寄存器組用于配置S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>片內特殊功能寄存器的基地址以及片內的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,暫未使用外擴接口器件。
參照表5-2-4和5.2.4節(jié)對應特殊功能寄存器的相關描述可知,當系統(tǒng)復位時,只有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,片內8K一體化SRAM <http://www.dzsc.com/icstock/221/SRAM.html>的起始地址被映射到0x03FE,0000,它們是可訪問的,而其他的存儲器組均未被映射,是不可訪問的。
因此,要調試SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>存儲器系統(tǒng),首先應配置相關的特殊功能寄存器,使系統(tǒng)中的SDRAM <http://www.dzsc.com/icstock/613/SDRAM.html>能被訪問。表5-4-1為針對該系統(tǒng)的與系統(tǒng)管理器相關的特殊功能寄存器的配置,以下詳細說明該系統(tǒng)所使用的相關特殊功能寄存器的配置方法。
表5-4-1 系統(tǒng)管理器相關特殊功能寄存器的配置
寄存器 偏移量 配置值
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;片內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>的刷新計數(shù)值,刷新時間、刷新使能等。
系統(tǒng)管理器對應的其他特殊功能寄存器使用其復位值,用戶也可根據(jù)自身系統(tǒng)的特定情況,對相關特殊功能寄存器進行配置。
在C:\下建立文本文件memmap.txt,其內容為:
第6章 部件工作原理與編程示例
本章主要以S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的幾個常用功能部件為編程對象,介紹基于S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的系統(tǒng)的程序設計與調試,同時簡介BootLoader的基本原理和編程方法,通過對本章的閱讀,可以使讀者了解S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>各功能部件的工作原理及基本編程方法。
本章的主要內容包括:
?。?nbsp; 嵌入式系統(tǒng)應用程序設計的基本方法。
?。?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>定時器的工作原理與編程示例。
?。?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)控制器的工作原理。
?。?nbsp; FLASH <http://www.dzsc.com/stock-ic/FLASH.html>存儲器的工作原理與編程示例。
?。?nbsp; BootLoader簡介
6.1 嵌入式系統(tǒng)的程序設計方法
一 般說來,對于一個完整的嵌入式應用系統(tǒng)的開發(fā),硬件的設計與調試工作僅占整個工作量的一半,應用系統(tǒng)的程序設計也是嵌入式系統(tǒng)設計一個非常重要的方面,程 序的質量直接影響整個系統(tǒng)功能的實現(xiàn),好的程序設計可以克服系統(tǒng)硬件設計的不足,提高應用系統(tǒng)的性能,反之,會使整個應用系統(tǒng)無法正常工作。
本章從應用的角度出發(fā),以S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的 各個功能模塊為編程對象,介紹一些實用的程序段,讀者既可按自己的需要修改,也可吸收其設計思想和方法,以便設計出適合于自己特定應用系統(tǒng)的實用程序。同 時,由于ARM體系結構的一致性,盡管以下的應用程序段是針對特定硬件平臺開發(fā)的,其編程思路同樣適合于其他類型的ARM微處理器。
不同于基于PC平臺的程序開發(fā),嵌入式系統(tǒng)的程序設計具有其自身的特點,程序設計的方法也會因系統(tǒng)或因人而異,但其程序設計還是有其共同的特點及規(guī)律的。在編寫嵌入式系統(tǒng)應用程序時,可采取如下幾個步驟:
?。?) 明確所要解決的問題:根據(jù)問題的要求,將軟件分成若干個相對獨立的部分,并合理設計軟件的總體結構。
?。?) 合理配置系統(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>、中斷控制等,都是有限的,應合理配置系統(tǒng)資源。
?。?) 程序的設計、調試與優(yōu)化:根據(jù)軟件的總體結構編寫程序,同時采用各種調試手段,找出程序的各種語法和邏輯錯誤,最后應使各功能程序模塊化,縮短代碼長度以節(jié)省存儲空間并減少程序執(zhí)行時間。
此外,由于嵌入式系統(tǒng)一般都應用在環(huán)境比較惡劣的場合,易受各種干擾,從而影響到系統(tǒng)的可靠性,因此,應用程序的抗干擾技術也是必須考慮的,這也是嵌入式系統(tǒng)應用程序不同于其他應用程序的一個重要特點。
6.2 部件工作原理與編程示例
6.2.1 通用I/O口工作原理與編程示例
S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>提供了18個可編程的通用I/O端口,用戶可將每個端口配置為輸入模式、輸出模式或特殊功能模式,由片內的特殊功能寄存器IOPMOD和IOPCON控制。
端 口0~端口7的工作模式僅由IOPMOD寄存器控制,但通過設置IOPCON寄存器,端口8~端口11可用作外部中斷請求INTREQ0~INTREQ3 的輸入,端口12、端口13可用作外部DMA請求XDREQ0、XDREQ1的輸入,端口14、端口15可作為外部DMA請求的應答信號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。
寄存器 偏移地址 操作 功能描述 復位值
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的特殊功能,當這些端口用作特殊功能(如外部中斷請求、外部中斷請求應答、外部DMA請求或應答、定時器溢出)時,其工作模式由IOPCON寄存器控制,而不再由IOPMOD寄存器。
對于特殊功能輸入端口,S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>提供了一個濾波器用于檢測特殊功能信號的輸入,如果輸入信號電平寬度等于三個系統(tǒng)時鐘周期,該信號被認為是諸如外部中斷請求或外部DMA請求等特殊功能信號。
寄存器 偏移地址 操作 功能描述 復位值
IOPCON 0x5004 讀/寫 I/O口控制寄存器 0x0000,0000
[4:0]控制端口8的外部中斷請求信號0(xIRQ0)輸入
[4]端口8用作外部中斷請求信號0
0 = 禁止 1 = 使能
[3] 0 = 低電平有效 1 = 高電平有效
[2] 0 = 濾波器關 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 = 濾波器關 1 = 濾波器開
[20] 0 = 低電平有效 1 = 高電平有效
[25:23]控制端口13的外部DMA請求信號1(DRQ1)輸入
[25]端口13用作外部DMA請求信號1(nXDREQ1)
0 = 禁止 1 = 使能
[24] 0 = 濾波器關 1 = 濾波器開
[23] 0 = 低電平有效 1 = 高電平有效
[27:26]控制端口14的外部DMA應答信號0(DAK0)輸出
[27]端口14用作外部DMA信號0(nXDACK0)
0 = 禁止 1 = 使能
[26] 0 = 低電平有效 1 = 高電平有效
[29:28]控制端口15的外部DMA應答信號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):
當配置為輸入模式時,讀取I/O口數(shù)據(jù)寄存器IOPDATA的每一位對應輸入狀態(tài),當配置為輸出模式時,寫每一位對應輸出狀態(tài)。位[17:0]對應于18個I/O引腳P17~P0。
寄存器 偏移地址 操作 功能描述 復位值
IOPDATA 0x5008 讀/寫 I/O口數(shù)據(jù)寄存器 未定義
[17:0]對應I/O口P17~P0的讀/寫值。I/O口數(shù)據(jù)寄存器的值反映對應引腳的信號電平。
以上簡述了S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的通用I/O口的基本工作原理,更詳細的內容可參考S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的用戶手冊。
作為本章的第一個例子,將比較詳細的描述建立項目、編寫程序的過程,同時可參考第八章關于ADS集成編譯調試環(huán)境的使用方法。
打開CodeWarrior for ARM Developer Suite(或ARM Project Manager),新建一個項目,并新建一個文件,名為Init.s,具體內容如下:
6.2.3 中斷控制器工作原理與編程示例
中斷是計算機的一種基本工作方式,幾乎所有的CPU都支持中斷,S3C4510B的支持多達21個中斷源,中斷請求可由內部功能模塊和外部引腳信號產(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)生和對中斷進行處理:
?。?nbsp; 中斷優(yōu)先級寄存器(Interrupt Priority Register):每一個中斷源的索引號寫入一個預定義的中斷優(yōu)先級寄存器,以獲得特定的優(yōu)先級。中斷優(yōu)先級預定義為從0~20。
- 中斷模式寄存器(Interrupt Mode Register):為每一個中斷源定義中斷模式,是IRQ還是FIQ。
- 中 斷懸掛寄存器(Interrupt Pending Register):指示中斷請求處于懸掛狀態(tài)(未處理)。如果中斷懸掛位被置位,則中斷懸掛狀態(tài)會一直保存,直到CPU通過寫‘1’到中斷懸掛寄存器的 相應位清除(注意是寫‘1’清除,而不是寫‘0’)。當中斷懸掛位被置位時,無論中斷屏蔽寄存器是否為‘0’,中斷服務程序都開始執(zhí)行。在中斷服務程序 中,必須通過向中斷懸掛寄存器的相應位寫‘1’來清除中斷懸掛標志,以避免由于同一個中斷懸掛位導致中斷服務程序的反復執(zhí)行。
?。?nbsp; 中斷屏蔽寄存器(Interrupt Mask Register):如果中斷屏蔽位為‘1’
則對應的中斷會被禁止,如果中斷屏蔽位為‘0’,則對應的中斷請求能正常響應。但如果全局中斷屏蔽位(位21)為‘1’,則所有的中斷都會被禁止。當有中斷請求產(chǎn)生時,對應的中斷懸掛位會被置為‘1’,在全局中斷屏蔽位和對應的中斷屏蔽位為‘0’時,中斷請求就會被響應。
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通過每一位的設置決定每一種中斷是按快速中斷(FIQ)還是按正常中斷(IRQ)響應。
寄存器 偏移地址 操作 功能描述 復位值
INTMOD 0x4000 讀/寫 中斷模式寄存器 0x0000,0000
[20:0]中斷模式位
INTMOD的21個位分別對應于表6-2-7中所描述的21個中斷源,當中斷模式位被置為‘1’時,ARM7TDMI核按FIQ方式處理對應的中斷,否則按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保持每一個中斷源的中斷懸掛位。該寄存器對應的中斷懸掛位應在中斷服務程序中首先清除,以避免由于同一個中斷懸掛位導致中斷服務程序的反復執(zhí)行。
寄存器 偏移地址 操作 功能描述 復位值
INTPND 0x4004 讀/寫 中斷懸掛寄存器 0x0000,0000
[20:0]中斷懸掛位
INTPND的21個位分別對應于表6-2-7中所描述的21個中斷源,當中斷請求產(chǎn)生時,對應的中斷懸掛位被置為‘1’,在中斷服務程序中應通過向對應位寫入‘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>片內的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)。當IIC總線處于空閑狀態(tài)時,兩根傳輸線均為高電平。
?。?nbsp; 連接到總線上的每一個設備都可以通過一個主控器使用唯一的地址進行軟件尋址??偩€主控器既可以是一個主發(fā)送器,也可以是一個主接收器。但S3C4510B <http://www.dzsc.com/icstock/597/S3C4510B.html>的IIC總線控制器僅支持單主控器模式。
- 支持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總線主控器??赏ㄟ^設置預分頻寄存器(Prescaler Register,IICPSR)對串行時鐘頻率進行編程。串行時鐘頻率可由下式計算:
MCLK/(16×(預分頻寄存器的值+1)+3)
可通過對控制狀態(tài)寄存器(IICCON)的位[5:4]寫入“01”發(fā)送啟動碼初始化串行IIC總線,然后總線控制器發(fā)送7位的從設備地址并通過移位緩沖寄存器發(fā)送讀/寫控制位,接收器則在主控器的SCL脈沖期間通過將SDA線從高電平下拉到低電平作為應答信號。
寫數(shù)據(jù)的操作:先設置控制狀態(tài)寄存器的BF位,然后寫入數(shù)據(jù)到移位緩沖寄存器。移位緩沖寄存器無論是被讀還是寫,BF位均會自動清零。若要進行連續(xù)的讀/寫操作,必須設置控制狀態(tài)寄存器的ACK位。
讀數(shù)據(jù)的操作:在設置控制狀態(tài)寄存器的BF位以后,可以進行讀數(shù)據(jù)的操作,當讀/寫完最后一個字節(jié)時,可對ACK位進行復位通知發(fā)送器/接收器讀數(shù)據(jù)操作的結束。
在讀/寫操作完成以后,可通過設置IICCON[5:4]=“10”生成結束碼。
IIC總線概念(IIC-BUS Concepts)
基本操作(Basic Operation):IIC總線通過兩根傳輸線,一根串行數(shù)據(jù)線SDL,一根串行時鐘線SCL,在連接到總線上的IC器件之間傳遞信息,每一個IC器件通過唯一的地址進行識別,根據(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均為雙向傳輸線,各通過一個上拉電阻連接到電源正端,當IIC總線空閑時,SDL和SCL傳輸線均為高 電平,連接在總線上的IIC接口在輸出階段通過漏極開路(Open-drain)或集電極開路(Open-collector)的方式完成線與 (Wired-AND)功能。IIC總線的數(shù)據(jù)傳輸速率最高可達到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)生后,總線被認為處于忙狀態(tài),在完成數(shù)據(jù)傳輸產(chǎn)生停止條件后,總線被認為處于空閑狀態(tài)。
?。?nbsp; 開始條件:當SCL為高電平時,SDA產(chǎn)生由高電平到低電平的跳變。
- 停止條件:當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é)必須跟一個應答位ACK(如圖6.2.7),傳輸字節(jié)時最高位在前(MSB-first)。
如果接收器因為執(zhí)行其他功能(如中斷服務)而不能接收其他剩余的數(shù)據(jù)字節(jié)時,接收器就保持時鐘線SCL為低電平強制發(fā)送器進入等待狀態(tài),只有當接收器準備接收其他字節(jié)并釋放SCL傳輸線時,數(shù)據(jù)傳輸才會繼續(xù)進行。
應 答過程(Acknowledge Procedure):在數(shù)據(jù)的傳輸過程中必須帶有應答信號,與應答信號相關的時鐘脈沖必須由總線主控器產(chǎn)生。在應答時鐘脈沖期間,發(fā)送器釋放SDA傳輸 線(為高電平),但此時接收器必須下拉SDA傳輸線,以便在時鐘脈沖的高電平期間SDA能夠保持穩(wěn)定的低電平。
通常,被尋址的接收器在接收到每一個字節(jié)后必須產(chǎn)生一個應答信號,當從接收器不能產(chǎn)生應答信號時,必須釋放數(shù)據(jù)線,然后由主控器產(chǎn)生停止條件中止數(shù)據(jù)傳輸。
數(shù)據(jù)傳輸格式(Data Transfer Format):圖6.2.8顯示傳輸數(shù)據(jù)的格式。當產(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)生停止條件后中止。但當主控器還要利用總線進行通訊時,主控器可以在不產(chǎn)生前一個停止條件的情況下,再產(chǎn)生開始條件并尋址另一個從器件,該特性可用于支持不同數(shù)據(jù)傳輸讀/寫格式的聯(lián)合使用。
IIC總線尋址(IIC-Bus Addressing):IIC總線的尋址過程為在開始條件后發(fā)送的第一個字節(jié),該字節(jié)地址決定主控器選擇哪一個從器件。通常,第一個字節(jié)總是緊跟在開始過程之后。
還可以通過“廣播”尋址方式同時尋址所有的IC器件,當使用廣播尋址時,理論上所有的IC器件都應該返回應答信號,但器件也可以忽略這個這個地址。廣播尋址的第二個字節(jié)決定其后的操作。
第一個數(shù)據(jù)字節(jié)的位定義(Definition of Bits in the First Data Byte
第一個數(shù)據(jù)字節(jié)的前7位為從器件地址,第8位為方向位,決定數(shù)據(jù)的傳輸方向(讀/寫)。
當?shù)刂纷止?jié)發(fā)出以后,總線上的每一個IC器件將該地址與自己的地址進行比較,若地址匹配,則這個IC器件就認為自身被主控器尋址為一個從發(fā)送器或從接收器。
廣播尋址(General Call Address):廣播尋址方式可用于尋址連接在IIC總線上的每一個IC器件,但當某個IC器件不需要進行數(shù)據(jù)傳輸時,將忽略廣播尋址而不作任何應答。
如果某個IC器件需要獲取數(shù)據(jù),將發(fā)出應答信號并作為一個從接收器。
開始字節(jié)(Start Byte):在每一次的數(shù)據(jù)傳輸之前都有一個開始過程,描述如下:
?。?nbsp; 一個開始條件,S
?。?nbsp; 一個開始字節(jié),“00000001”
- 一個應答時鐘脈沖
?。?nbsp; 一個重復開始條件,Sr
當 需要訪問總線的主控器在發(fā)送完開始條件S后,接著發(fā)送開始字節(jié)(“00000001”),總線上其余的IC器件以較低的采樣率對SDA傳輸線進行采樣,一 直到檢測到開始字節(jié)中七個零中的某一個。當檢測到SDA傳輸線上的低電平時,IC器件就切換到較高的采樣率檢測重復開始條件Sr用于同步,接收器在檢測到 重復開始條件Sr后復位,忽略該開始字節(jié)。
在開始字節(jié)發(fā)送完畢之后產(chǎn)生一個應答時鐘脈沖。
IIC總線特殊功能寄存器(IIC Bus Special Registers)
IIC總線控制器由三個特殊功能寄存器:一個控制狀態(tài)寄存器(IICON),一個預分頻寄存器(IICPS)和一個移位緩沖寄存器(IICBUF)。
控制狀態(tài)寄存器(CONTROL <http://www.dzsc.com/stock-ic/CONTROL.html> Status Register,IICON):
寄存器 偏移地址 操作 功能描述 復位值
IICCON 0xF000 讀/寫 控制狀態(tài)寄存器 0x0000,0000
IIC總線的控制狀態(tài)寄存器描述如表6-2-10。
表6-2-10 IICCON寄存器描述
位 位名 功能描述
[0] 緩沖標志(BF) 在發(fā)送模式下緩沖區(qū)空時,或在接收模式下緩沖區(qū)滿時,BF置位。
通過對該位寫“0”可以清除緩沖區(qū)。
IICBUF寄存器無論是被讀還是寫,BF位都自動清零。
如果將該位置為“1”,IIC總線停止工作,要激活IIC總線,應將該位清零。
[1]&nMAC功能模塊
以太網(wǎng)控制器MAC層的功能模塊描述如表6-2-13和圖6.2.10。
表6-2-13 MAC功能模塊描述
功能模塊 描 述
媒體獨立接口(MII) MII為物理層和發(fā)送/接收模塊之間的接口
發(fā)送模塊 將要發(fā)送的數(shù)據(jù)從發(fā)送緩沖區(qū)移到MII。發(fā)送模塊包括CRC生成電路、奇偶校驗電路、前導與后綴生成電路。發(fā)送模塊同時還包含用于 處理沖突后的回退和數(shù)據(jù)幀間間隔的定時器。
接 收模塊 從MII接收數(shù)據(jù)并存入接收FIFO。接收模塊完成邏輯功能:計算與校驗CRC值;對從MII接收的數(shù)據(jù)進行奇偶生成和檢測最大與最小數(shù)據(jù) 包長度。接收模塊同時還包含一個匹配地址存儲器(CAM)模塊,用于存儲網(wǎng)絡目的地址,根據(jù)該目的地址決定接收或丟棄數(shù)據(jù)包。
流控模塊 辨別MAC控制包,并支持用于全雙工連接的暫停操作。流控模塊同時支持生成暫??刂瓢?,并提供用于暫停控制的定時器和計數(shù)器。
MAC控制(命令)與狀態(tài)寄存器 控制可編程選項,包括禁止或使能當某條件發(fā)生時通知系統(tǒng)的各種信號。狀態(tài)寄存器保持各種用于錯誤處理的狀態(tài)信息,以及用于網(wǎng)絡管理的錯誤計數(shù)器累加統(tǒng)計信息等。
回環(huán)電路 提供獨立于MII和物理層的MAC層測試。
圖6.2.10 MAC層流控功能模塊
媒體獨立接口(Media Independent Interface,MII)
發(fā)送和接收模塊均通過MII進行操作,其接口特性描述如下:
?。?nbsp; 獨立于傳輸媒體。
?。?nbsp; 支持多生產(chǎn)商互操作。
?。?nbsp; 支持到MAC層和到物理層接口設備的連接。
?。?nbsp; 支持10M或100M <http://www.dzsc.com/stock-ic/100M.html>的數(shù)據(jù)傳輸能力。
?。?nbsp; 數(shù)據(jù)與分隔符的傳輸和參考時鐘同步。
?。?nbsp; 提供獨立的4位數(shù)據(jù)寬度發(fā)送與接收通道。
- 使用TTL電平信號,與通用數(shù)字CMOS <http://www.dzsc.com/stock-ic/CMOS.html> ASIC處理器電平兼容。
?。?nbsp; 支持到物理層和到站管理設備的連接。
?。?nbsp; 提供簡單的管理接口。
?。?nbsp; 具有驅動有限長度屏蔽電纜的能力。
物理層(Physical Layer Entity,PHY)
物 理層完成發(fā)送與接收數(shù)據(jù)的編碼/解碼。其編碼/解碼(用于10BASE-T的曼切斯特編碼、用于100BASE-X的4B/5B編碼以及用于 100BASE-T4的8B/6T編碼)方式對MII無影響。MII對原始數(shù)據(jù)進行接收時,以前導字段開始,到CRC字段結束。同時,MII對原始數(shù)據(jù)進 行發(fā)送時,也以前導字段開始,到CRC字段結束。MAC層可生成填充數(shù)據(jù)并傳送到PHY。
帶緩沖的DMA接口(Buffered DMA Interface,BDI)
帶 緩沖的DMA接口支持通過系統(tǒng)總線的讀/寫操作,帶有兩個8位的總線數(shù)據(jù)收發(fā)器,同時可選擇奇偶校驗功能。數(shù)據(jù)收發(fā)器通過系統(tǒng)接口進行初始化。MAC層控 制器通過響應BDI的準備好信號從BDI接收數(shù)據(jù)并發(fā)送出去,或將接收到的數(shù)據(jù)發(fā)送給BDI,由幀結束信號標識各數(shù)據(jù)包的邊界。
MAC發(fā)送模塊(MAC Transmit Block)
MAC發(fā)送模塊負責數(shù)據(jù)發(fā)送,與802.3標準的CSMA/CD協(xié)議兼容。MAC發(fā)送模塊由如下幾部分構成:
?。?nbsp; 發(fā)送FIFO和發(fā)送控制器。
- 前導與后綴發(fā)生器。
?。?nbsp; 填充發(fā)生器。
?。?nbsp; 并行CRC發(fā)生器。
?。?nbsp; 開始邏輯與計數(shù)器。
- 回退與重發(fā)定時器。
- 發(fā)送狀態(tài)機。
圖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ù)附加一個奇偶校驗位,即每個字節(jié)為9位長度,其中,前64個字節(jié)數(shù)據(jù)可以被打包 存儲和發(fā)送,并在發(fā)生碰撞時進行重發(fā),無需系統(tǒng)更多的干預。如果沒有碰撞發(fā)生,則進行數(shù)據(jù)包發(fā)送,剩余的16個字節(jié)由系統(tǒng)處理,以避免因為FIFO不發(fā)送 而丟失。
當系統(tǒng)接口設置了相應控制寄存器的發(fā)送使能位時,發(fā)送狀態(tài)機就從BDI請求數(shù)據(jù),然后由系統(tǒng)控制器從系統(tǒng)存儲器中獲取數(shù)據(jù)。
FIFO 控制器將數(shù)據(jù)存儲在發(fā)送FIFO中,然后通過一個握手信號通知發(fā)送狀態(tài)機,F(xiàn)IFO中的數(shù)據(jù)有效,可以開始發(fā)送操作。如果FIFO未滿,F(xiàn)IFO控制器向 BDI請求更多的數(shù)據(jù)。發(fā)送狀態(tài)機連續(xù)的發(fā)送數(shù)據(jù),直到檢測到最后一個字節(jié)的幀結束信號,然后追加經(jīng)過計算的CRC值到數(shù)據(jù)包的末尾(若發(fā)送控制寄存器的 CRC除去位被置位,則不追加),狀態(tài)寄存器的包發(fā)送位被置位,若中斷使能同時產(chǎn)生中斷。
模塊中的寫FIFO控制器與計數(shù)器和發(fā)送狀態(tài)機的讀FIFO控制器與計數(shù)器根據(jù)各自的計數(shù)值協(xié)同工作,盡管他們由不同的時鐘源驅動。
FIFO控制器將數(shù)據(jù)和校驗位存儲在FIFO中,并對數(shù)據(jù)進行奇偶校驗,如果校驗錯誤,F(xiàn)IFO控制器就設置一個錯誤狀態(tài)位,若對應的中斷使能同時產(chǎn)生中斷。
前導與后綴發(fā)生器(Preamble and Jam Generator):一旦控制寄存器中的發(fā)送使能位被置位,且FIFO中有8個字節(jié)的數(shù)據(jù),發(fā)送狀態(tài)機發(fā)出Tx_en信號啟動發(fā)送,開始發(fā)送前導與起始幀分隔符。
填充發(fā)生器(PAD Generator):如果發(fā)送一個短的數(shù)據(jù)包,MAC會生成填充字節(jié)將短數(shù)據(jù)包擴展到64字節(jié)的最小限制,填充字節(jié)由“0”組成。有一個控制位可以禁止填充字節(jié)的生成。
并 行CRC發(fā)生器(Parallel CRC Generator):數(shù)據(jù)包中所有要發(fā)送的數(shù)據(jù),從目的地址域到其后的所有數(shù)據(jù)域都可以生成CRC。用戶也可通過設置發(fā)送控制寄存器的對應位禁止CRC 生成。該功能可以用于測試,例如,為測試接收器的錯誤檢測功能,可強制發(fā)送CRC錯誤的數(shù)據(jù)。該功能也可用在某些需要端到端CRC校驗的網(wǎng)橋與交換機應用 場合。
回退與重發(fā)定時器(Back-off and Retransmit Timers):當檢測到網(wǎng)絡上有碰撞時,發(fā)送器模塊就停止數(shù)據(jù)的發(fā)送并向網(wǎng)絡發(fā)送一個特定的阻塞信號,通知所有的節(jié)點網(wǎng)絡有碰撞。之后,發(fā)送器等待一段 時間后再重發(fā)數(shù)據(jù),如果連續(xù)16次的重發(fā)失敗,發(fā)送狀態(tài)機就置錯誤標志位,并在中斷使能的情況下產(chǎn)生中斷通知系統(tǒng)由于網(wǎng)絡的過渡阻塞使數(shù)據(jù)包發(fā)送失敗。發(fā) 送狀態(tài)機清除FIFO,MAC準備下一個數(shù)據(jù)包的發(fā)送。
發(fā)送數(shù)據(jù)奇偶校驗器(Transmit Data Parity Checker):FIFO中的數(shù)據(jù)要進行奇校驗檢測。當數(shù)據(jù)準備發(fā)送時,發(fā)送狀態(tài)機進行奇偶校驗,如果檢測到奇偶錯誤,發(fā)送數(shù)據(jù)奇偶校驗器作如下操作:
?。?nbsp; 停止數(shù)據(jù)的發(fā)送。
?。?nbsp; 設置發(fā)送狀態(tài)寄存器中的奇偶錯誤位。
- 如果中斷使能則產(chǎn)生中斷。
發(fā)送狀態(tài)機(Transmit State Machine):發(fā)送狀態(tài)機是發(fā)送模塊的中央控制邏輯,控制著各種信號的傳輸、定時器、處理狀態(tài)寄存器中的錯誤。
MAC接收模塊(MAC RECEIVE BLOCK)
MAC接收模塊負責數(shù)據(jù)的接收,與802.3標準的CSMA/CD協(xié)議兼容。
當接收到一個數(shù)據(jù)包時,接收模塊首先檢測諸如CRC錯誤、對齊錯誤、長度錯誤等錯誤條件,也可以通過設置控制寄存器的相應位禁止錯誤檢查。接收模塊根據(jù)CAM的狀態(tài)和目的地址,決定接收或拒絕數(shù)據(jù)包。MAC接收模塊由以下幾個部分構成:
?。?nbsp; 接收FIFO,F(xiàn)IFO控制器和計數(shù)器。
- 接收BDI狀態(tài)機。
- 開始邏輯與計數(shù)器。
?。?nbsp; 用于地址識別的CAM塊。
?。?nbsp; 并行CRC校驗器。
- 接收狀態(tài)機。
接收模塊的主要部件如圖6.2.12所示。
圖6.2.12 MAC接收功能模塊
接 收FIFO控制器(Receive FIFO Controller):接收FIFO控制器一次接收一個字節(jié)的數(shù)據(jù),并根據(jù)接收到的字節(jié)數(shù)更新計數(shù)器的值。在FIFO接收數(shù)據(jù)時,CAM模塊根據(jù)自身存 儲的地址對數(shù)據(jù)包的目的地址進行檢測,如果CAM能識別該地址,F(xiàn)IFO就繼續(xù)接收數(shù)據(jù)包,如果CAM不能識別,接收模塊就丟棄數(shù)據(jù)包并清除FIFO。
地 址CAM和地址識別(Address CAM and Address Recognition):CAM模塊完成地址識別。它將接收到的數(shù)據(jù)包的目的地址與自身存儲的地址進行比較,如果地址匹配,接收狀態(tài)機就繼續(xù)接收數(shù)據(jù)。 CAM模塊按6個字節(jié)存儲一個地址的方式組織,共有32字(128字節(jié))的大小,最多可存儲21個地