《ARM原理與C程序設計》課件第二章_第1頁
《ARM原理與C程序設計》課件第二章_第2頁
《ARM原理與C程序設計》課件第二章_第3頁
《ARM原理與C程序設計》課件第二章_第4頁
《ARM原理與C程序設計》課件第二章_第5頁
已閱讀5頁,還剩136頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第二章ARM體系結構與接口電路2.1ARM微處理器工作模式2.2ARM寄存器2.3ARM異常2.4S3C2410存儲器配置及接口電路設計2.5S3C2410外設接口電路設計本章小結2.1ARM微處理器工作模式

ARM微處理器支持三種數(shù)據(jù)類型,即32位的字、16位的半字和8位的字節(jié)。對于無符號數(shù),取值范圍為0~2N-1,為普通二進制碼存儲格式;對于有符號數(shù),取值范圍為-2N-1~+2N-1-1,為二進制補碼存儲格式,其中,N取8、16或32,為數(shù)據(jù)字長。ARM指令嚴格占一個字或四個連續(xù)字節(jié)(且首字節(jié)地址最后兩位為00比特)的存儲空間。

目前,ARM體系結構支持七種處理器模式,如表2-1所示。表2-1中的模式碼是指寄存器CPSR(當前程序狀態(tài)寄存器)中的低5位,即CPSR[4:0]。需要說明的是,對于ARM920T核心的S3C2410A處理器,上電復位后工作于管理模式。工作模式之間可以通過MSR指令、軟中斷、外部中斷或異常等切換。上電復位后,可執(zhí)行指令“MSRCPSR_c,#0x10”由管理模式切換到用戶模式,大多數(shù)應用程序工作在用戶模式下。進入用戶模式后,只能通過異常才能切換到其他工作模式,應用程序不能訪問一些受保護的系統(tǒng)資源。用戶模式和系統(tǒng)模式之外的五種工作模式統(tǒng)稱為特權模式,特權模式下,可以訪問所有系統(tǒng)資源,工作模式可以借助MSR指令隨意切換,每種特權模式都有一些專用寄存器,用于保存其工作狀態(tài)。系統(tǒng)模式與用戶模式共用相同的寄存器,但是,系統(tǒng)模式屬于特權模式,它能訪問所有系統(tǒng)資源,可隨意切換工作模式,主要供需要訪問所有系統(tǒng)資源的操作系統(tǒng)任務使用。

2.2ARM寄存器

ARM寄存器都是32位的,其組織如圖2-1所示。

從圖2-1中可以看出,每種模式下最多可訪問的寄存器個數(shù)為18個,其中,用戶模式和系統(tǒng)模式下只能訪問17個寄存器。圖2-1中同名的寄存器具有相同的物理寄存器,而帶有沙粒三角形的寄存器則具有獨立的物理寄存器,例如,R0在七種工作模式下都映射到同一個物理寄存器,而R13、R13_svc、R13_abt等表示在不同工作模式下映射到不同的物理寄存器。圖2-1ARM寄存器組織這樣,ARM共有37個物理寄存器,即未分組的寄存器R0~R7映射的8個物理寄存器+分組的寄存器R8~R14映射的22個物理寄存器+程序計數(shù)器PC和當前程序狀態(tài)寄存器CPSR映射的2個物理寄存器+異常模式下備份程序狀態(tài)的寄存器SPSR映射的5個物理寄存器=37(圖2-1上名稱完全相同的寄存器只能計數(shù)一次,則數(shù)遍圖上所有的寄存器,剛好得到37)。

一般地,如果某條指令可以使用R0,則它也可以使用R1~R13的其他寄存器。在所有工作模式下,R0~R7都對應于相同的物理寄存器,因此,在工作模式切換時,這些寄存器的數(shù)據(jù)可以直接使用,同時,原來的數(shù)據(jù)就有可能被破壞。因此,R0~R7稱為未分組的寄存器,用于存放數(shù)據(jù)。

R8~R12在快速中斷模式時映射到獨立的物理寄存器,這些寄存器均加了后綴_fiq,而在其他工作模式下均映射到相同的物理寄存器,這樣R8~R12共占有了10個物理寄存器,一般用于存放數(shù)據(jù)。R13通常用于堆棧指針(SP),保存當前工作模式下的堆棧棧頂;R14被稱為鏈接寄存器(LR),保存子程序調用或跳轉時的返回地址。R13和R14在五種異常模式下都有其獨立的物理寄存器,因此,R13和R14共占有12個物理寄存器。PC即R15,為程序計數(shù)器,存放的是處理器要取的下一條指令的地址(具體地址與流水線個數(shù)有關),在七種工作模式下占有同一個物理寄存器。R8~R14被稱為分組寄存器,這些寄存器在工作模式切換時,原有工作模式下的寄存器不能被訪問,而使用新工作模式下的同名寄存器替代,這樣,原來的寄存器的數(shù)據(jù)得到了保護。上述R0~R15通稱為通用寄存器,即這些寄存器可以保存數(shù)據(jù)(或指令數(shù)據(jù)),也可以用于保存指令地址。此外,還有兩個專用寄存器,用于保存當前程序的工作狀態(tài),即CPSR和異常模式下保存CPSR值的寄存器SPSR,這兩個寄存器占有6個物理寄存器。

需要重點指出的是,ARM微處理器工作模式雖然可以切換,但是,其工作模式確定后,ARM微處理器僅能訪問圖2-1上該模式下的寄存器。2.2.1通用寄存器

通用寄存器包括未分組寄存器R0~R7、分組寄存器R8~R14和R15(即PC)。如圖2-1所示,分組寄存器在某些異常模式下映射為獨立的物理地址,此時的寄存器名稱被描述為

<寄存器名>_<mode>,例如,圖2-1中的R8_fiq和R13_und等,其中,mode分別取為svc、abt、und、irq或fiq等,用戶模式和系統(tǒng)模式的寄存器名可以添加后綴_usr和_sys。需要指出的是,在RVDS程序設計時,只需使用寄存器名。

以寄存器R13為例,仿照第1.3.2小節(jié)的1.?和2.?的內(nèi)容調試如下的程序(注意圖1-16的設置),可以看到不同工作模式下R13的值是不同的。

1AREA INIT,CODE,READONLY

2ENTRY ;EnterSVCMode

3MOV R13,#0xAA

4MSR CPSR_c,#0x11 ;EnterFIQMode

5MOV R13,#0xBB

6MSR CPSR_c,#0x12 ;Enter

IRQMode

7MOV R13,#0xCC

8MSR CPSR_c,#0x1F ;EnterSYSMode

9MOV R13,#0xDD

10MSR CPSR_c,#0x13 ;EnterSVCMode

11MOV R0,#0x5512MSR CPSR_c,#0x11 ;EnterFIQMode

13MOV R0,#0x55

14MSR CPSR_c,#0x12 ;EnterIRQMode

15MOV R0,#0x55

16MSR CPSR_c,#0x1F ;EnterSYSMode

17MOV R0,#0x55

18MSR CPSR_c,#0x13 ;EnterSVCMode

19MOV R0,#0x55

20stop

21BL stop

22END程序的解釋如下(R13在RVDEBUG中的寄存器視圖中為SP):

第1行:定義只讀代碼段INIT;

第2行:標識程序入口,程序復位后進入SVC模式;

第3行:在SVC模式下,R13置成0xAA;

第4行:進入FIQ模式;

第5行:在FIQ模式下,R13置成0xBB;

第6行:進入IRQ模式;

第7行:在IRQ模式下,R13置成0xCC;

第8行:進入SYS模式;

第9行:在SYS模式下,R13置成0xDD;

第10行:再次進入SVC模式;第11行:在SVC模式下,R0置成0x55,此時,可以看到R13的值為0xAA;

第12行:再次進入FIQ模式;

第13行:在FIQ模式下,R0置成0x55,此時,可以看到R13的值為0xBB;

第14行:再次進入IRQ模式;

第15行:在IRQ模式下,R0置成0x55,此時,可以看到R13的值為0xCC;

第16行:再次進入SYS模式;

第17行:在SYS模式下,R0置成0x55,此時,可以看到R13的值為0xDD;

第18行:再次進入SVC模式;第19行:在SVC模式下,R0置成0x55,此時,可以看到R13的值為0xAA;

第20、21行:死循環(huán)跳轉;

第22行:程序段結束標志。

從程序的運行情況可以看出,R13在不同的工作模式下雖然具有相同的標識名,但對應于不同的物理寄存器,它們的賦值互不影響(注意:R13一般用作SP指針,上面的賦值意義不大,僅用于說明分組寄存器在不同的工作模式下對應不同的物理寄存器這一特點)。2.2.2程序狀態(tài)寄存器

32位的當前程序狀態(tài)寄存器(CPSR)分為4個8位區(qū)域,從高位至低位依次為標志位域(CPSR_f)、狀態(tài)位域(CPSR_s)、擴展位域(CPSR_x)和控制位域(CPSR_c)。每種異常模式下都各有一個備份CPSR值用的寄存器,稱為備份的程序狀態(tài)寄存器(SPSR),用于異常發(fā)生時保存CPSR的值(用戶模式和系統(tǒng)模式下沒有SPSR)。

CPSR(或SPSR)寄存器位如圖2-2所示。圖2-2CPSR寄存器位的含義圖2-2中各位分為四類:其一,保留位,為后續(xù)ARM版本擴展功能保留的位,圖中使用Res、RESERVED標記這些位;其二,用戶模式下可寫的位,這些位為N、Z、C、V、Q、E和GE[3:0],其中,Q出現(xiàn)在ARMv5E以上版本中,E和GE[3:0]在ARMv6以上版本中,所有這些位特權模式下也均可寫;其三,特權模式下可寫的位,這些位為A、I、F和M[4:0],用戶模式下無法向這些位寫入,其中,A用于ARMv6以上版本;其四,執(zhí)行狀態(tài)位,這些位為J和T,在ARM狀態(tài)下必須為0。注意:所有CPSR的各位,在用戶模式下都是可以讀出的。

對CPSR的訪問操作一般是這樣的:如果想設置某位或某幾位,先執(zhí)行指令MRS讀出CPSR的值;然后,借助于與、或、異或等位操作僅把需要設置的位賦值,不需要設置的位的值保持不變;最后,執(zhí)行MSR指令把設置好的值寫回CPSR。

1.條件碼標識位

圖2-2的第31位至28位依次為N、Z、C和V,被定義為條件碼標識位,取自Negative、Zero、Carry和oVerflow中的大寫字母。一般地,算術、邏輯和賦值指令后添加S(目的寄存器不是R15)或比較指令(如CMN、CMP、TEQ和TST)等的執(zhí)行會影響CPSR中的條件碼標識位。此外,MSR、MRC(目的寄存器為R15)、LDM指令的某些變種、特權模式下使用REF指令從存儲器向CPSR裝入數(shù)據(jù)、目的寄存器為R15的少數(shù)算術和邏輯指令變種等的執(zhí)行也會影響條件碼標識位。對于二進制補碼表示的有符號數(shù)運算,N=1表示運算結果為負,N=0表示結果大于或等于0。Z=1表示運算結果為0,Z=0表示運算結果非0。C有兩種情況:對于加法指令(包括CMN),當C=1時表示有進位,當C=0時表示無進位;對于減法指令(包括CMP),當C=0時有借位,C=1時無借位。無論操作數(shù)是否為二進制補碼表示的有符號數(shù),只要V=1,則表示最高位發(fā)生溢出,否則,V=0表示無溢出。

2.中斷狀態(tài)位

圖2-2中CPSR的第7位和第6位依次為I和F,用于表示中

斷狀態(tài)。如果I=1,則IRQ中斷被屏蔽;如果I=0,則IRQ中斷使能。如果F=1,則FIQ中斷被屏蔽;如果F=0,則FIQ中斷被使能。

3.工作模式位

第2.1節(jié)中指出ARM有七種工作模式,工作于哪種模式受CPSR中的工作模式位M[4:0]控制,這些位處于CPSR寄存器的低五位,即圖2-2中的第4~0位。工作模式位的含義如表2-2

所示。2.2.3PC與指令流水線

流水線是RISC處理器執(zhí)行指令的方式,ARM7支持三級流水線,ARM9支持五級流水線,ARM10支持六級流水線。ARM9與ARM7相比,指令吞吐量增加了約13%。ARM7和ARM9的流水線如圖2-3所示。圖2-3ARM7和ARM9的流水線對于五級流水線來說,每個機器周期內(nèi)可以有五個指令的不同階段同時處理,但只有一條指令處于執(zhí)行階段,其他四條指令處于取指、譯碼、存儲和寫階段。當某條指令正處于執(zhí)行階段時,PC寄存器指向此時要取指的指令,對于ARM7和ARM9來說,如圖2-3所示,PC指向該正在執(zhí)行的指令的地址加上2條指令的地址。對于所有流水線來說,執(zhí)行階段與取指階段間的管道數(shù)乘以每條指令所占的字節(jié)數(shù),再加上當前正處于執(zhí)行階段的指令地址,即為PC指向的下一條指令的地址。對于ARM7和ARM9來說,雖然流水線級數(shù)不同,但是執(zhí)行階段與取指階段間的管道數(shù)均為2,所以,PC指向的下一條指令的地址均為當前處于執(zhí)行階段的指令地址+8字節(jié)(每條32位的ARM指令占有4個字節(jié))。對于ARM10和ARM11等,按相同的方法推理PC的值。

2.3ARM異常

異常是由內(nèi)部或外部的觸發(fā)源引起的,異常發(fā)生后,ARM處理器將中斷當前的操作,而跳轉到異常向量地址處執(zhí)行異常服務程序(或稱中斷服務程序)。除了上電復位異常之外,其他的異常服務程序跳轉執(zhí)行前,處理器將自動保存當前的程序狀態(tài),異常服務程序執(zhí)行完畢后,將返回到被中斷的程序處繼續(xù)執(zhí)行。

異常向量表如表2-3所示。異常發(fā)生后,R14和SPSR用于保存處理器狀態(tài),具體如下:

R14_<異常模式>=返回地址

SPSR_<異常模式>=CPSR

CPSR[4:0]=異常模式標識碼

如果<異常模式>=復位或FIQ,則

CPSR[6]=1,屏蔽快速中斷

否則,CPSR[6]不變

CPSR[7]=1,屏蔽常規(guī)中斷

PC=異常向量地址對于上述偽語言表示,當某種異常發(fā)生后,程序的返回地址保存在該異常模式下的R14(即LR)中,程序狀態(tài)CPSR保存在該異常模式的SPSR中;然后,CPSR的M[4:0]被置位成該異常模式位,如果發(fā)生的異常為復位或FIQ異常,則要屏蔽快速中斷;最后,屏蔽常規(guī)中斷,PC指向異常向量表中該異常向量的地址處。異常服務程序處理完后,SPSR復制到CPSR,R14(LR)復制至PC(此時的PC為程序被異常中斷前的執(zhí)行地址),程序將從PC處繼續(xù)執(zhí)行。異常返回有兩種方式:其一,借助帶S的數(shù)據(jù)處理指令,且PC為目的寄存器;其二,借助多寄存器加載指令賦值CPSR,例如:希望異常返回到特定的地址處,則進入異常前將該地址保存在堆棧內(nèi),即

SUBR14,R14,#4 ;獲得R14(即LR)

STMFDSP!,{<其他寄存器列表>,R14}

;R14壓入堆棧中

異常返回時,執(zhí)行

LDMFDSP!,{<其他寄存器列表>,PC}^

;R14出棧,賦給PC

上述三行代碼的含義依次為:R14減去4賦給R14;將其他需要保存內(nèi)容的寄存器和R14壓入堆棧中,SP(即R13,為堆棧指針)指向棧頂,“!”表示SP減少后的值賦給SP;將SP指向的堆棧數(shù)據(jù)依次出棧,賦給寄存器列表中的寄存器和PC,“!”表示SP增加后的值賦給SP,“^”表示將SPSR的值傳回CPSR中。對這些語句更深入的理解請參考第三章。

下面具體介紹一下每個異常。2.3.1復位異常

外部輸入復位信號有效后,ARM微處理器將執(zhí)行以下

操作:

R14_svc=不確定值

SPSR_svc=不確定值

CPSR[4:0]=0b10011 //上電復位后進入管理模式

CPSR[5]=0 //工作在ARM狀態(tài)

CPSR[6]=1 //屏蔽快速中斷

CPSR[7]=1 //屏蔽普通中斷

如果高端異常向量地址配置了,則

PC=0xFFFF0000否則,

PC=0x00000000

由此可見,上電復位后的ARM微處理器處于管理工作模式下,且為執(zhí)行ARM指令的ARM狀態(tài),從地址0x0開始執(zhí)行指令,普通中斷和快速中斷均處于被屏蔽狀態(tài),連接寄存器LR(即R14)和備份的程序狀態(tài)寄存器SPSR的值不確定。復位異常一般發(fā)生于ARM硬件系統(tǒng)上電工作瞬時,或者由于手工復位按鍵復位以及看門狗電路引起的復位等。

復位異常服務程序需要完成系統(tǒng)初始化工作,包括配置時鐘、存儲器、高速緩存、堆棧、片上外設寄存器等。復位異常程序執(zhí)行初始化過程時應避免SWI軟件中斷、未定義指令中斷及存儲器訪問導致的中止等異常,系統(tǒng)初始化成功后ARM處理器進入工作狀態(tài)。2.3.2中斷請求異常

ARM微處理器外部IRQ中斷引腳有效,且CPSR的第I位(即CPSR[7])為0時,可產(chǎn)生IRQ普通中斷,ARM微處理器將繼續(xù)執(zhí)行處于流水線“執(zhí)行”階段的指令,然后跳轉到IRQ中斷服務程序。

如果IRQ中斷產(chǎn)生了,ARM微處理器自動執(zhí)行如下操作:

R14_irq=下一條將被執(zhí)行的指令地址+4

SPSR_irq=CPSR

CPSR[4:0]=0b10010 //進入IRQ模式

CPSR[5]=0 //工作在ARM狀態(tài)

CPSR[6]保持不變

CPSR[7]=1 //屏蔽再次產(chǎn)生的IRQ中斷

如果高端異常向量地址配置了,則

PC=0xFFFF0018

否則,

PC=0x00000018

IRQ中斷服務程序執(zhí)行完畢后,借助如下指令返回:

SUBSPC,R14,#4

上述SUBS指令中,由于PC為目的操作數(shù),因此,將執(zhí)行兩個操作:即R14_irq的值賦給PC,SPSR_irq的值賦給CPSR。典型的IRQ中斷服務程序結構為:

ISR_irq: //IRQ中斷服務程序開始標號

<中斷處理代碼>

SUBSPC,R14,#4//IRQ中斷服務程序返回指令

另一種IRQ中斷服務程序結構為:

ISR_irq://IRQ中斷服務程序開始標號

SUBR14,R14,#4//IRQ中斷服務程序第一條語句

<中斷處理代碼>

MOVSPC,R14//IRQ中斷服務程序返回指令

在MOVS中,PC為目的操作數(shù),因此,“MOVSPC,R14”將R14的值寫入PC中,同時自動實現(xiàn)從SPSR_irq中恢復CPSR的值。以上兩種IRQ中斷服務程序結構具有一個共同的特點,即在中斷處理代碼中不能更改R14的值,否則將導致中斷返回的地址錯誤。所以,常用的方法為借助堆棧實現(xiàn)中斷服務程序,其結構如下:

ISR_irq:

//IRQ中斷服務程序開始標號

SUBR14,R14,#4//R14=R14–4

STMFDR13!,{R0–R3,R14}

//R13為堆棧指針,將R0至R3和R14保存在堆棧中

<中斷處理代碼>

LDMFDR13!,{R0–R3,PC}^//IRQ中斷服務程序返回語句,從堆棧中恢復PC的值,并強制CPSR從SPSR寄存器恢復2.3.3快速中斷請求異常

當ARM微處理器外部FIQ引腳有效,且CPSR的F位為0時,可產(chǎn)生FIQ快速中斷請求,其優(yōu)先級高于IRQ,主要用于對實時數(shù)據(jù)流的快速傳輸和處理。ARM微處理器檢測到FIQ異常時,當前處于流水線“執(zhí)行”階段的指令執(zhí)行完成后,跳轉到FIQ快速中斷服務程序,ARM微處理器自動實現(xiàn)如下操作:

R14_fiq=下一條要執(zhí)行的指令地址+4

SPSR_fiq=CPSR

CPSR[4:0]=0b10001//進入FIQ工作模式

CPSR[5]=0 //工作在ARM狀態(tài)

CPSR[6]=1 //屏蔽再次產(chǎn)生的快速中斷

CPSR[7]=1 //屏蔽IRQ中斷

如果高端異常向量地址配置了,則

PC=0xFFFF001C

否則,

PC=0x0000001C

從快速中斷返回的方法與從IRQ中斷返回的方法相同,典型的語句為

SUBSPC,R14,#42.3.4軟件中斷異常

ARM微處理器通過執(zhí)行SWI(軟件中斷)指令進入管理模式,這是用戶模式轉換到特權模式的常用方法。SWI指令執(zhí)行時,ARM微處理器自動實現(xiàn)如下操作:

R14_svc=SWI指令的下一條指令地址

SPSR_svc=CPSR

CPSR[4:0]=0b10011 //進入管理模式

CPSR[5]=0 //工作在ARM狀態(tài)

CPSR[6]保持不變

CPSR[7]=1 //屏蔽IRQ中斷如果高端異常向量地址配置了,則

PC=0xFFFF0008

否則,

PC=0x00000008

從軟件中斷異常返回的典型語句為

MOVSPC,R142.3.5數(shù)據(jù)中止異常

數(shù)據(jù)中止異常是由存儲系統(tǒng)引發(fā)的。當要訪問的存儲空間數(shù)據(jù)無效時,將產(chǎn)生數(shù)據(jù)中止異常。ARM微處理器自動實現(xiàn)以下操作:

R14_abt=被中止的指令地址+8

SPSR_abt=CPSR

CPSR[4:0]=0b10111 //進入中止工作模式

CPSR[5]=0 //處于ARM狀態(tài)

CPSR[6]保持不變

CPSR[7]=1 //屏蔽IRQ中斷如果高端異常向量地址配置了,則

PC=0xFFFF0010

否則,

PC=0x00000010

從數(shù)據(jù)中止異常服務程序返回的典型語句為

SUBSPC,R14,#82.3.6預取指令異常

預取指令異常由存儲系統(tǒng)引發(fā),當取指的指令無效,且ARM微處理器試圖執(zhí)行該無效指令時,將產(chǎn)生預取指令異常,ARM微處理器將自動實現(xiàn)以下操作:

R14_abt=被中止的指令地址+4

SPSR_abt=CPSR

CPSR[4:0]=0b10111 //進入中止模式

CPSR[5]=0 //處于ARM狀態(tài)

CPSR[6]保持不變

CPSR[7]=1 //屏蔽IRQ中斷如果高端異常向量地址配置了,則

PC=0xFFFF000C

否則,

PC=0x0000000C

從預取指令異常服務程序返回的典型語句為

SUBSPC,R14,#42.3.7未定義指令異常

如果ARM微處理器要執(zhí)行一條協(xié)處理器指令,將等待外部協(xié)處理器確認該指令可以被執(zhí)行。如果沒有外部協(xié)處理器應答,將產(chǎn)生未定義指令異常。未定義指令異常主要用于沒有硬件協(xié)處理器系統(tǒng)的協(xié)處理器軟件仿真或者通用目的指令集軟件仿真擴展。

當未定義指令異常發(fā)生后,ARM微處理器自動執(zhí)行以下操作:

R14_und=未定義指令后的下一條指令的地址

SPSR_und=CPSR

CPSR[4:0]=0b11011//進入未定義指令模式

CPSR[5]=0 //處于ARM狀態(tài)

CPSR[6]保持不變

CPSR[7]=1 //屏蔽IRQ中斷

如果高端異常向量地址配置了,則

PC=0xFFFF0004

否則,

PC=0x00000004

從未定義指令異常返回的典型語句為

MOVSPC,R142.3.8異常返回地址

異常處理是ARM微處理器控制軟件設計的核心內(nèi)容,主要包括異常優(yōu)先級、異常嵌套、異常入口和異常返回等。其中,異常優(yōu)先級避免了多個異常同時發(fā)生時的資源競爭,多個異常同時發(fā)生時,優(yōu)先級較高的異常優(yōu)先得到處理,例如,F(xiàn)IQ和IRQ中斷同時發(fā)生,則FIQ中斷得到處理;異常嵌套使得某個異常服務程序處理過程中可以響應其他的異常,例如,數(shù)據(jù)中止異常服務程序執(zhí)行過程中,由于沒有屏蔽FIQ中斷,當外部FIQ中斷產(chǎn)生后,將執(zhí)行FIQ中斷服務程序,F(xiàn)IQ中斷服務程序執(zhí)行完后,再繼續(xù)處理數(shù)據(jù)中止異常;異常入口點為異常發(fā)生后PC寄存器裝入的值,是ARM微處理器自動強制PC跳轉的地址值。異常返回地址是相對于異常發(fā)生前的程序而言的。異常發(fā)生后,PC將跳轉到異常入口點,對應異常模式的LR寄存器設置為基于跳轉前的PC值的一個特定地址,異常服務程序執(zhí)行過程中,不能修改LR的值(如果異常服務程序中要使用LR寄存器,必須在異常服務程序開始處將LR的值壓棧)。異常服務程序執(zhí)行完畢后,PC的值需要恢復為跳轉前執(zhí)行的最后一條指令的下一條指令,這條指令的地址即為異常返回地址。不同的異常處理,其返回地址不完全相同,如表2-4所示。從表2-4可以看出,對于SWI、IRQ、FIQ和未定義指令異常,異常返回地址為異常跳轉前的程序最后執(zhí)行完的指令的下一條指令地址;而數(shù)據(jù)中止和預取指中止異常的返回地址則為異常跳轉前的程序未得到執(zhí)行的那條指令地址。

需要指出的是異常發(fā)生后的LR值是ARM微處理器自動設置的,無法修改;而返回地址是程序配置的,可以人為修改。例如,對于數(shù)據(jù)中止異常,不希望異常返回后重復執(zhí)行跳轉時沒有執(zhí)行的指令,可以使用以下語句

SUBSPC,R14,#4

跳轉到其下一條指令地址(PC_b+4)處。

2.4

S3C2410存儲器配置及接口電路設計

ARM微處理器存儲器配置涉及協(xié)處理器寄存器CP15、存儲管理單元(MMU)和高速緩存(Cache)等,將在第四章中展開論述,本節(jié)具體討論基于ARM920T核的S3C2410芯片的存儲器配置。S3C2410是SAMSUNG公司代工的高性價比ARM9系列微處理器芯片,支持外擴SDRAM、NANDFLASH,尋址空間為128?MB/區(qū)塊(共有8區(qū)塊,即1?GB空間),片內(nèi)具有4?KBSRAM,集成MMU和豐富的片上外設,集成獨立的16?KB指令Cache和16?KB數(shù)據(jù)Cache,支持μC/OS-Ⅱ、WindowsCE和嵌入式Linux等嵌入式操作系統(tǒng),適用于移動設備和小型通用嵌入式應用場合。2.4.1存儲格式

ARM920T將存儲空間按字節(jié)進行物理編址,第0個字節(jié)的地址為0x00000000,第1個字節(jié)的地址為0x00000001,地址0x00000000至0x00000003(即第0個字節(jié)至第3個字節(jié))存放第一個字,地址0x00000004至0x00000007(即第4個字節(jié)至第7個字節(jié))存放第二個字,依次類推。每個字存放的32位首地址的最后兩位,即第1和0位為0b00時,稱為字對齊存儲。字的對齊存儲格式有兩種,即小端(LittleEndian)格式和大端(BigEndian)格式。

其中,小端存儲格式中,存儲字的四個字節(jié)的最低地址字節(jié)存儲字的最低字節(jié),而最高地址字節(jié)存儲字的最高字節(jié),如圖2-4所示。圖2-4小端存儲格式圖2-4中存儲字的位地址是指32位的字數(shù)據(jù)各位的相對位置;字存儲空間的位地址是指存儲字數(shù)據(jù)的連續(xù)四個字節(jié)按高地址向低地址的位排序位置;方格中的數(shù)字表示存儲的字數(shù)據(jù)的字節(jié)序號。

大端存儲格式與小端存儲格式相反,存儲字的四個字節(jié)的最低地址字節(jié)存儲字的最高字節(jié),而最高地址字節(jié)存儲字的最低字節(jié),如圖2-5所示。

小端和大端格式也稱為小E和大E存儲模式,在S3C2410芯片中,可通過軟件設定。圖2-5大端存儲格式2.4.2映射存儲空間

S3C2410復位后的存儲器映射空間配置模式受器件管腳OM1和OM0的電平影響而分為兩種方式,如圖2-6所示??稍L問映射地址空間共分成8個區(qū)塊(Bank),每區(qū)塊為128?MB,其中,第6和7區(qū)塊大小可以配置,各個區(qū)塊的地址是連續(xù)編址的,區(qū)塊0至5的編址是固定的,當區(qū)塊6小于128?MB時,區(qū)塊7的首地址仍然為區(qū)塊6的末地址加1,如表2-5所示。區(qū)塊0的訪問字長為16位或32位,其余7個區(qū)塊的訪問字長可為8位、16位或32位,且各區(qū)塊的程序訪問周期可以編程,因此,各區(qū)塊實際訪問的存儲大小和時序是可編程的。各個區(qū)塊均可以外擴SROM(SROM指SRAM和ROM型存儲器);只有區(qū)塊6和7才能外擴SDRAM,且支持自刷新和掉電工作模式。圖2-6復位后S3C2410映射存儲空間從表2-5可以看出,區(qū)塊6和7的大小必須相等,且編址是連續(xù)的。

1.區(qū)塊0的總線寬度

由于區(qū)塊0作為啟動ROM區(qū)塊,在訪問區(qū)塊0前,必需設定該區(qū)塊的總線寬度??梢栽O定為16位或32位寬度,由上電

復位時S3C2410的管腳OM0和OM1(合記為OM[1:0])的電壓決定,如表2-6所示。這里OM為OperatingMode(操作模式)的

縮寫。由表2-6可以看出,如果使用NAND型FLASH作為啟動ROM,則OM[1:0]需配置為0b00;如果使用NOR型FLASH,需要根據(jù)FLASH的數(shù)據(jù)總線寬度為16位還是32位,配置OM[1:0]的值為0b01或0b11。

2.區(qū)塊地址連接樣式

S3C2410中,所有區(qū)塊均可外接SROM,但只有區(qū)塊6和7可以外接SDRAM。各區(qū)塊根據(jù)外接存儲器芯片的數(shù)據(jù)總線位寬,用到的S3C2410地址管腳總線不同。

如果外接8位數(shù)據(jù)總線的存儲器芯片,則S3C2410地址管腳總線A0接外擴存儲器的地址線ADDR0,A1接ADDR1,依次類推,直到把外擴存儲器芯片所有的地址線都連接好,即地址總線是同名相連接的,這時S3C2410訪問外部存儲器芯片是按字節(jié)訪問的。如果外接16位數(shù)據(jù)總線的存儲器芯片,則S3C2410地址管腳線A1接外擴存儲器的地址線ADDR0,A2接ADDR1,依次類推,即S3C2410的地址線A0不與外接存儲器芯片的地址線相連,而是接地,這時,S3C2410訪問外部存儲器芯片是按16位的半字訪問的,每次訪問時,需要一次從數(shù)據(jù)線上讀出兩個字節(jié)的內(nèi)容。由于A0為0,故這種讀寫方式下一定是半字對齊的。與16位的ROM及SROM連接的典型接口如圖2-7和圖2-8所示。

圖2-7和圖2-8中,方框內(nèi)部的管腳標號為ROM或SRAM的,方框代表ROM或SRAM芯片,方框外部的標號屬于S3C2410的管腳標號。圖2-7與16位ROM的典型接口圖2-8與16位SRAM的典型接口如果外接32位數(shù)據(jù)總線的存儲器芯片,則S3C2410地址管腳線A2接外擴存儲器的地址線ADDR0,A3接ADDR1,依次類推,即S3C2410的地址線A1和A0不與外接存儲器芯片的地址線相連,而是接地,這時,S3C2410訪問外部存儲器芯片是按32位的字訪問的,每次訪問時,需要一次從數(shù)據(jù)線上讀出四個字節(jié)的內(nèi)容。由于A[1:0]=0b00,這種讀寫方式下一定是字對齊的。外接32位數(shù)據(jù)總線的存儲芯片可等效于連接兩片16位數(shù)據(jù)總線的存儲芯片,如圖2-9所示,讀寫時,其中一片存儲器芯片存放每個字的低16位,另一片

存儲器芯片存放同一個字的高16位。圖2-9中,方框內(nèi)部標號屬于SRAM,外部標號為S3C2410的管腳標號。圖2-932位典型接口(2片16位SRAM)

3.SDRAM區(qū)塊地址配置樣式

可外擴SDRAM的區(qū)塊6和7可以配置大小,如表2-5所示,其大小可設為2?MB、4?MB、8?MB、16?MB、32?MB、64?MB、128?MB等。這里列出8?MB、16?MB、32?MB、64?MB和128?MB情況下外擴SDRAM器件時地址線的配置樣式,如表2-7所示。表2-7中第一列區(qū)塊大小是指圖2-6中S3C2410映射存儲空間的區(qū)塊6或7的大??;第二列SDRAM總線寬度是指SDRAM的數(shù)據(jù)總線寬度,可取8位、16位或32位;第三列SDRAM芯片容量大小是指每片SDRAM芯片的存儲容量大??;第四列存儲器配置表示SDRAM的存儲結構和使用的片數(shù),例如64?Mb大小、16位數(shù)據(jù)總線以及內(nèi)部具有4個存儲段的SDRAM使用了2片,則存儲器配置表示為:(1?Mb×16×4段)×2片,注意,這里的SDRAM芯片的數(shù)據(jù)總線寬度可以為4位、8位、16位或32位;第五列SDRAM區(qū)段選址是指SDRAM芯片內(nèi)部分為多個存儲段時,用于選取特定存儲段的S3C2410管腳地址線。第五列中的地址線根據(jù)區(qū)塊6或7的容量大小和外接SDRAM的存儲段數(shù)設置,例如,區(qū)塊6的大小為8?MB,則尋址地址線為A[22:0],即最大尋址地址線為A22,當SDRAM芯片有4個存儲段時,需要2根地址線,于是,SDRAM芯片區(qū)段選址地址線為A[22:21]。圖2-10和圖2-11分別為(1?Mb×16×4段)×1片和(1?Mb×16×4段)×2片的存儲器接口情況。

4.存儲器映射寄存器

從圖2-6可以看出,映射存儲空間的地址0x48000000至0x60000000區(qū)段為特殊功能寄存器區(qū),S3C2410有豐富的特殊功能寄存器(SFR),詳見附錄一,各個SFR的描述參見附錄二。圖2-10外接8?MBSDRAM圖2-11外接16?MBSDRAM2.4.3NOR型FLASH接口電路設計

由于S3C2410支持NAND型FLASH作為啟動FLASH,啟動后,NAND型FLASH仍可以用作外部存儲器,此外,NAND型FLASH的容量比NOR型FLASH大得多,并且NAND型FLASH價格便宜。所以,S3C2410一般只需外接NAND型FLASH即可。NOR型FLASH的優(yōu)點在于其接口類似于SRAM,具有地址總線和數(shù)據(jù)總線管腳,可以直接訪問存儲器內(nèi)部每一個字節(jié),讀取速度很快。博創(chuàng)UP-NETARM2410實驗箱支持對NOR型FLASH芯片AM29LV160D的存儲擴展(技創(chuàng)SBC2440實驗板上為AM29LV800B),由于板上還載有NAND型FLASH芯片K9F1208U0M,所以,AM29LV160D芯片可以不用焊到板子上(這是博創(chuàng)實驗箱核心板上有一個空焊盤沒裝芯片的原因)。

1.AM29LV160D特性

AM29LV160D是AMD公司的NOR型FLASH型片,存儲容量為2?MB,應用十分廣泛。其顯著特性有:3.3?V工作電壓;0.23?μm生產(chǎn)工藝;訪問速度最快達70?ns;功耗極低,待機模式典型電流為200?nA,讀典型電流為9?mA@5?MHz,擦寫典型電流為20?mA@5?MHz;扇區(qū)結構靈活,具有扇區(qū)保護特性,支持8位和16位讀寫模式;壽命在100萬次擦寫以上;內(nèi)部數(shù)據(jù)掉電可保存20年;芯片讀寫方便;具有硬件復位管腳。

AM29LV160D有三種封裝型式,其中48腳TSOP外型如圖2-12所示,各管腳含義如表2-8所示。圖2-12AM29LV160D芯片封裝

2.AM29LV160D接口電路

AM29LV160D與S3C2410的接口電路如圖2-13和圖2-14所示。圖2-13AM29LV160D接口電路圖2-14S3C2410部分接口電路說明:圖2-13和圖2-14使用ProtelDXP(AltiumDXP)繪制,采用網(wǎng)標表示不同芯片管腳的連通性。圖2-13中AM29LV160D的D0至D15即為圖2-12中的DQ0至DQ15,通過網(wǎng)標LDATA0至LDATA15與S3C2410的數(shù)據(jù)總線DATA0至DATA15連接;AM29LV160D的A0至A19通過網(wǎng)標LA1至LA20與S3C2410的地址總線ADDR1至ADDR20連接;其他管腳連接方法相同。圖2-13和圖2-14中的VDD33表示3.3V電源;網(wǎng)標nRESET對于AM29LV160D和S3C2410來說均為輸入信號,nRESET來源于電源芯片或復位芯片的復位輸出腳。

AM29LV160D的操作主要有擦片、寫片、讀片、保護等,介紹這方面操作的參考書很多,筆者在西安電子科技大學出版社出版的《C/C++語言硬件程序設計——基于TMS320C5000系列DSP》一書的第六章中也詳細地介紹了該類FLASH芯片的操作,本書不再重復。

關于管腳標注的一點補充:一般地,如果數(shù)字化芯片的管腳為低有效輸入時,常在管腳名稱后面添加“#”,或在管腳名稱上面添加一個橫線(DXP中在每個字母后加“\”即可),或在管腳名稱前添加字母“n”。2.4.4NAND型FLASH接口電路設計

NOR型FLASH芯片在很多基于DSP的系統(tǒng)中十分常用,在基于ARM型芯片的系統(tǒng)中,NAND型FLASH芯片用得更多一些,主要因素為NAND型FLASH芯片容量大、價格低,且ARM芯片支持NAND型FLASH作為啟動ROM。博創(chuàng)UP-NETARM2410實驗箱上集成了K9F1208U0C芯片(完全兼容K9F1208U0M)。

1.K9F1208U0M芯片特性

K9F1208U0M為SAMSUNG公司的64?MB大小NAND型FLASH存儲器芯片,其主要特性有:工作電壓為3.3V;存儲單元陣列為(64?M+2048?K)×8?bit,分為4個可同時擦寫大小為128?Mb的存儲面,每個存儲面包括1024個存儲塊和528?B的頁寄存器;片上寫控制器自動管理寫入和擦除操作,典型的16?KB存儲塊整塊擦除時間為2?ms,528?B大小的存儲頁寫入的典型時間為200?μs,連續(xù)頁讀取時間最小可達50?ns;I/O管腳用作數(shù)據(jù)、地址的輸入/輸出以及控制命令的輸入;數(shù)據(jù)保存時間長達10年;具有硬件數(shù)據(jù)保護功能。K9F1208U0M芯片的封裝如圖2-15所示,其管腳含義如表2-9所示。圖2-15K9F1208U0M封裝結構

2.K9F1208U0M接口電路

K9F1208U0M與S3C2410的接口電路如圖2-16所示。注意:需要結合圖2-14理解圖2-16中的網(wǎng)標。在第七章中介紹了對K9F1208U0M訪問的程序設計方法。

圖2-16的接法比較典型,8根I/O口線連接到S3C2410的數(shù)據(jù)總線DATA0~DATA7,K9F1208U0M的控制信號線通過網(wǎng)標FCLE、FALE、nFRE、nFWE、nFCE和FRB連接到圖2-14中的S3C2410的NANDFLASH控制總線上。

由圖2-16和圖2-14可知,S3C2410接NAND型FLASH芯片時,不使用地址總線。圖2-16F9F1208U0M接口電路2.4.5SDRAM接口電路設計

SDRAM是SynchronousDynamicRandomAccessMemory的縮寫,直譯為同步動態(tài)隨機訪問存儲器。SDRAM芯片的數(shù)據(jù)傳輸速率與同步時鐘相同,速率很高。桌面電腦的DDRSDRAM和DDRⅡSDRAM也是SDRAM型內(nèi)存,DDR為DoubleDateRate的縮寫,表示數(shù)據(jù)傳輸速率是同步時鐘的兩倍,即時鐘信號的上升沿和下降沿均可被用來傳送同步數(shù)據(jù)。博創(chuàng)UP-NETARM2410實驗箱使用了兩片HYNIX公司的SDRAM型HY57V561620芯片,本節(jié)給出HY57V561620芯片與S3C2410的接口電路。

1.HY57V561620芯片特性

HY57V561620芯片為32?MB大小的SDRAM存儲器,主

要特性為:工作電壓為3.3?V;管腳兼容LVTTL邏輯電平;輸入和輸出均參考同步時鐘上升沿(或稱為上升沿觸發(fā)和上升沿有效);具有自動刷新功能;內(nèi)部具有4個存儲塊,每個存儲塊的大小為4?M×16?bit;支持猝發(fā)式(Burst)連續(xù)讀寫方式;輸入時鐘頻率可達166?MHz。HY57V561620芯片管腳封裝如圖2-17所示,各管腳含義如表2-10所示。圖2-17HY57V561620管腳封裝結構

HY57V561620內(nèi)部有4個存儲塊(Bank),通過塊地址線BA0和BA1取0b00、0b01、0b10或0b11選擇其中的一個塊,當RAS有效時,A0~A12選中某個存儲塊的行地址(RA0~RA12);然后,當CAS有效且WE為高電平時,A0~A8用作這個存儲塊的列地址(CA0~CA8),此時的操作為從相應的地址陣列中讀取數(shù)據(jù);如果A10為高電平,讀操作伴隨有自動預充電功能。同理,操作過程中,如果WE為低電平,則表示向地址陣列中寫入數(shù)據(jù),A10為高電平時,寫操作伴隨有自動預充電功能。讀寫HY57V561620的控制真值表如表2-11所示。表2-11中“L”表示低電平,“H”表示高電平,RA為行地址,CA為列地址。13根行地址線和9根列地址線組合成22根地址線,HY57V561620每個存儲塊的尋址能力為222=4?M,4個塊的尋址能力為16?M,數(shù)據(jù)總線為16bit,因此,每片HY57V561620的容量為16?M×16bit=32?MB。

2.HY57V561620接口電路

UP-NETARM2410實驗箱中S3C2410外擴了2片HY57V561620,共64?MB大小的SDRAM空間,參考表2-7中S3C2410區(qū)塊6配置大小為64?MB以及外接數(shù)據(jù)總線寬度為32位且有4段空間的SDRAM時的存儲器配置方案為(4Mb×16×4段)×2片,SDRAM內(nèi)部區(qū)段選址信號接S3C2410的地址線A[25:24]。由此,可得兩片HY57V561620芯片與S3C2410的接口電路圖如圖2-18和圖2-19所示。

圖2-18和圖2-19表明S3C2410映射存儲區(qū)塊6外擴了64?MB大小的SDRAM。圖2-18兩片HY57V561620接口電路圖2-19S3C2410部分接口電路2.5S3C2410外設接口電路設計

S3C2410為基于ARM920T的16/32位RISC微處理器芯片,片內(nèi)集成了豐富的系統(tǒng)外設,消除了為系統(tǒng)配置額外接口器件的需要,大大降低了整個系統(tǒng)的成本。S3C2410片上集成的外設功能有:1.8?V或2.0?V核電壓,3.3?V存儲器電壓,3.3?V外部I/O接口(亦稱IO接口)電壓;集成16?KB指令高速緩存和16?KB數(shù)據(jù)高速緩存;內(nèi)嵌MMU;外部存儲器控制器(SDRAM控制和片選邏輯);LCD控制器(支持4K色STN和256K色TFT),帶有1通道LCD專用DMA。具有外部請求引腳的4通道DMA;3通道UART(IrDA1.0,16字節(jié)TxFIFO和16字節(jié)RxFIFO)/2通道SPI;1通道多主IIC總線/1通道IIS總線控制器;支持SD主接口版本1.0,兼容MMC協(xié)議版本2.11;2個USB主機接口/1個USB設備接口(1.1版);4個PWM定時器和1個內(nèi)部定時器;具有看門狗定時器;117個通用目的I/O口/24個外部中斷源;8通道10位ADC和觸摸屏接口;具有日歷功能的RTC;帶PLL的片內(nèi)時鐘發(fā)生器;具有正常、低速、空閑、掉電工作模式。

2.5.1片上外設及其映射寄存器

S3C2410芯片管腳結構及含義參見附錄三。S3C2410功能結構框圖如圖2-20所示。圖2-20S3C2410功能結構框圖由圖2-20可見,S3C2410核心為支持JTAG功能內(nèi)嵌ICE單元的ARM9TDMI微處理器核,ARM920TDMI通過系統(tǒng)控制協(xié)處理器CP15寄存器C13借助指令MMU(存儲器管理單元)和數(shù)據(jù)MMU以及AMBA總線到外部存儲器尋址指令和數(shù)據(jù),或通過C13到16?KB指令Cache和16?KB數(shù)據(jù)Cache快速尋址指令和數(shù)據(jù),指令地址和數(shù)據(jù)地址通過總線IVA[31:0]和DVA[31:0]傳送。選址后,使用總線ID[31:0]和總線DD[31:0]借助指令MMU和數(shù)據(jù)MMU以及AMBA總線訪問外部存儲器的指令或數(shù)據(jù),或直接在16?KB指令Cache和16?KB數(shù)據(jù)Cache中讀寫或存取指令和數(shù)據(jù)。MMU指向AMBA總線的連接總線IPA[31:0]或DPA[31:0]是指指令或數(shù)據(jù)的物理地址,而C13單元連接MMU單元的IVA[31:0]或DVA[31:0]是指指令或數(shù)據(jù)的映射(或稱虛擬)地址。

MMU的作用是把ARM920T核產(chǎn)生的地址(稱為虛擬地址)轉化為物理地址去訪問外部的存儲器。CP15用于配置MMU,寫緩沖器(WriteBuffer)可用于保存16個字和4個地址,寫回物理地址伴隨緩存器(WriteBackPATagRAM)可把數(shù)據(jù)Cache更新的數(shù)據(jù)快速刷回外部存儲器。16?KB的高速Cache存儲陣列為512行×32?B,帶寬為64位,訪問Cache的地址總線為ARM920T核的虛擬地址通過C13翻譯后的地址總線,Cache處于ARM920T核和外部存儲器(稱為主存)之間,用于緩沖將要讀/寫的主存數(shù)據(jù),有效地提高ARM920T核的數(shù)據(jù)處理速度。

AMBA總線包括AHB總線和APB總線。由圖2-20可知,AHB總線主要用于擴展LCDDMA、LCD控制器(圖中的CONT.為Controller的縮寫),USB主機控制器,NANDFLASH控制器及啟動控制,中斷控制器;電源管理,SRAM/NORFLASH/SDRAM存儲器控制器等。APB總線主要用于擴展UART、USB設備、SDI/MMC、看門狗定時器、SPI、IIC、IIS、GPIO、RTC、ADC、定時器/PWM等。AHB和APB都具有總線控制器,能實現(xiàn)總線仲裁和譯碼功能。

所有片上外設通過外設寄存器管理。片上外設相關的存儲器映射寄存器及其含義參見附錄一和附錄二。2.5.2LED接口電路設計

UP-NETARM2410實驗箱上有3個貼片的LED燈、2個7段數(shù)碼管和1個8×8點陣的LED陣列,其連接電路圖如圖2-21至圖2-28所示。圖2-21總線隔離驅動圖2-22CPLD控制電路圖2-23EPM240的JTAG口圖2-24七段LED數(shù)碼管圖圖2-258×8?LED陣列圖2-26LED燈圖2-27與門電路圖2-28與LED顯示相關的S3C2410部分電路上述圖中,圖2-23為圖2-22中CPLD的JTAG下載口電路。

從圖2-26和圖2-28可以看出,LED燈的控制直接由S3C2410的通用目的IO口GPC5~GPC7控制,當這些管腳置為低電平時,對應的LED燈會亮。

結合圖2-21、圖2-22、圖2-24、圖2-27和圖2-28以及圖2-6,理解2個7段數(shù)碼電路的工作原理。圖2-24中2個7段數(shù)碼管的控制輸入LED1A~LED1G和LED1DP以及LED2A~LED2G和LED2DP,來自圖2-22中CPLD的IO口,這些IO口被配置為輸出。圖2-22中DATA0~DATA7和A1~A4通過簡單的組合邏輯與LED1A~LED1G和LED1DP以及LED2A~LED2G和LED2DP在CPLD內(nèi)部相連通(需要編制VHDL語言程序)。這個控制邏輯為當A8=1且A[4:1]=0b1000時,DATA[7:0]連通LED2[A:G]和LED2DP;當A8=1且A[4:1]=0b1001時,DATA[7:0]連通LED1[A:G]和LED1DP。經(jīng)過圖2-21的總線隔離驅動后,圖2-28中S3C2410的數(shù)據(jù)總線LDATA[7:0]和地址總線LA[4:1]與圖2-21中的DATA[7:0]和A[4:1]連通,控制信號為來自圖2-27與門的nBUS_OE。圖2-27中,YOUT為nGCS[4:1]的與操作,nBUS_OE為YOUT、nGCS5、nXDACK0以及nXDACK1的與操作,上述8個信號中,只要有一個為低電平,則nBUS_OE為低電平。當nBUS_OE為低電平時,74ALVCH16245輸出腳為輸入腳的信號;當nBUS_OE為高電平時,輸出管腳鎖存。

S3C2410的LnOE通過74LVCH16245_1后的信號nOE加在74LVCH16245_2的DIR上,當nOE為高電平時,LDATA[7:0]的值送出到DATA[7:0];當nOE為低電平時,方向相反。

經(jīng)過上述分析后知,可使用S3C2410區(qū)塊1的四個地址0x08000110、0x08000111、0x08000112和0x08000113控制7段數(shù)碼管(這是實驗箱資料給出來的控制地址,由于A0沒有使用,所以A0位為0或1不影響控制結果。事實上沒有連接到CPLD的地址線均可以取0或1,因此,0x08FFF113地址與0x08000113在控制數(shù)碼管上意義相同)。第一個數(shù)碼管(用于表示十位數(shù))的地址為0x0800?0110或0x0800?0111,第二個數(shù)碼管(用于表示個位數(shù))的地址為0x0800?0112或0x0800?0113。按圖2-24的接法,顯示在數(shù)碼管上的數(shù)據(jù)如下:

#defineU8unsignedchar

U8seg7val[16]=

{

0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,

0x88,0x83,0xC6,0xA1,0x86,0x8E

//0123456789AB

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論