sparc V8嵌入式體系結(jié)構(gòu)_第1頁
sparc V8嵌入式體系結(jié)構(gòu)_第2頁
sparc V8嵌入式體系結(jié)構(gòu)_第3頁
sparc V8嵌入式體系結(jié)構(gòu)_第4頁
sparc V8嵌入式體系結(jié)構(gòu)_第5頁
已閱讀5頁,還剩138頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8講基于sparcV8嵌入式體系結(jié)構(gòu)S698處理器11.簡述S698_ECR是高性能的、SPARCV8架構(gòu)的、32-bitRISC嵌入式微處理器。S698_ECR內(nèi)部采用AMBA總線,內(nèi)嵌32-bit整型數(shù)處理單元(包括4K字節(jié)的指令cache和4K字節(jié)的數(shù)據(jù)cache),優(yōu)化的32/64-bit浮點數(shù)處理單元,具有較強的運算能力;并且內(nèi)嵌了大量的外設(shè)。22.特點基于AMBA總線的可裁減結(jié)構(gòu):

S698_ECR內(nèi)部的AMBA總線包括2種總線:AHB和APB。APB總線用來訪問片內(nèi)外設(shè)的寄存器;AHB總線用作高速數(shù)據(jù)傳輸。32.特點高性能的處理器內(nèi)核(帶有4K字節(jié)的指令cache和4K字節(jié)的數(shù)據(jù)cache)

32-bit整型數(shù)處理單元

RISC結(jié)構(gòu)硬件乘法器和除法器

5級流水優(yōu)化的32/64-bit浮點數(shù)處理單元,符合IEEE-754標準42.特點片內(nèi)外設(shè)集成調(diào)試支持單元(DSU:DebugSupportUnit)和數(shù)據(jù)通訊鏈路(DCL:DataCommunicationLink)集成64K字節(jié)的RAM,帶有后備電源;先進的多時鐘機制和時鐘倍頻機制;orion

開發(fā)環(huán)境5

3.芯片結(jié)構(gòu)的功能框圖

64.芯片描述(IU)S698_ECR整型數(shù)處理單元(IU)支持SPARCV8指令集。IU包括一些通用目的寄存器,控制處理器的全部工作。IU的主要功能是執(zhí)行整數(shù)運算、計算要訪問的存儲器的地址;另外,它也支持指令計數(shù)器,和控制FPU指令的執(zhí)行。在特定的時間內(nèi),一條指令可以訪問136個r寄存器中的8個globals寄存器和一個寄存器窗口。74.芯片描述(IU)寄存器窗口是一個24-寄存器組,它包括一個由8個“in”寄存器和8個“l(fā)ocal”寄存器組成的16-寄存器組,和與它相鄰的16-寄存器組中的8個“in”寄存器(被當前寄存器窗口設(shè)定為自己的“out”寄存器)。當前的寄存器窗口在“處理器狀態(tài)寄存器(PSR)”中的“currentwindowpointer(CWP)”區(qū)設(shè)定。寄存器窗口上溢和下溢由“Windowinvalidmask(WIM)register”監(jiān)控,“Windowinvalidmask(WIM)register”由管理軟件控制。寄存器窗口實際的數(shù)目對用戶應(yīng)用程序是透明的。84.芯片描述(IU)當IU訪問存儲器時,會在訪問地址后面加一個“地址空間標志符”(ASI),ASI表示處理器是處于管理模式還是用戶模式;訪問操作是訪問指令存儲器還是數(shù)據(jù)存儲器。94.芯片描述(IU)IU具有以下特點:5級單一指令流水;獨立的指令cache和數(shù)據(jù)cache;標準的8個寄存器窗口;硬件乘法器;硬件基于2的除法器。104.芯片描述(IU)S698_ECR的IU采用5級單一指令流水:FE(取指令)DE(譯碼)EX(指令執(zhí)行)ME(存儲):在此階段數(shù)據(jù)緩沖區(qū)被訪問。相應(yīng)地址的數(shù)據(jù)在此階段末要有效,在上一階段(EX)中被讀取的數(shù)據(jù)會被從新寫入數(shù)據(jù)緩沖區(qū)。WR(回寫)114.芯片描述(IU)指令時序:S698_ECR的指令按照功能分為6類:存儲器存取指令、算術(shù)運算/邏輯運算/移位指令、跳轉(zhuǎn)控制指令、讀/寫寄存器指令、浮點運算指令和其它指令。124.芯片描述(IU)存儲器存取指令存儲器存取指令是唯一用來訪問存儲器的指令。存儲器存取指令用2個‘r’寄存器或者1個‘r’寄存器和1個13-bit的無符號立即數(shù)計算出1個32-bit、按字節(jié)排列的存儲器地址,IU再在該地址后面加上“地址空間標志符(ASI)”以決定處理器是處于管理模式還是用戶模式,是訪問指令存儲器還是數(shù)據(jù)存儲器。134.芯片描述(IU)存儲器存取指令存儲器存取指令的目標域指定是一個r寄存器,f寄存器,或者是協(xié)處理器寄存器(此寄存器提供存儲的數(shù)據(jù)或取得要載入的數(shù)據(jù))。144.芯片描述(IU)整數(shù)存取指令支持字節(jié)方式(8-bit)、半字方式(16-bit)、字方式(32-bit)和雙字方式(64-bit)。整數(shù)存取指令包括一些整數(shù)取數(shù)指令,用來從內(nèi)存中取得8位或16位的單精度數(shù)并放入目的寄存器中。浮點和協(xié)處理器存取指令支持字方式和雙字方式。154.芯片描述(IU)S698對半字的大于一個字節(jié)類型的數(shù)據(jù)采用高地址優(yōu)先存儲的方式。164.芯片描述(IU)算術(shù)運算/邏輯運算/移位指令

算術(shù)運算/邏輯運算/移位指令提供了算術(shù)運算、邏輯運算和移位操作。這些指令除“SETHI”指令之外,都包括2個操作碼,并由這2個操作碼運算產(chǎn)生一個結(jié)果,這個結(jié)果或者放入目的寄存器中,或者丟棄?!癝ETHI”指令是一條專門的指令,用來和它后面的指令一起創(chuàng)建一個32位的常數(shù)并放入r寄存器中。174.芯片描述(IU)算術(shù)運算/邏輯運算/移位指令整數(shù)乘法指令提供有符號或無符號的32×32→64-bit操作。整數(shù)除法指令提供有符號或無符號的64÷32→32-bit操作。整數(shù)乘法指令和整數(shù)除法指令的結(jié)果會影響“PSR”的相應(yīng)位。被‘0’整除會產(chǎn)生一個“trap”。184.芯片描述(IU)讀/寫狀態(tài)寄存器指令讀/寫寄存器指令用來讀/寫用戶可見的狀態(tài)寄存器,也可讀/寫輔助狀態(tài)寄存器。194.芯片描述(IU)浮點運算指令浮點運算指令用來完成所有的浮點運算。浮點運算指令是寄存器到寄存器的指令,浮點運算操作利用浮點寄存器進行。象算術(shù)運算指令/邏輯運算指令和移位指令一樣,浮點運算指令有1或2個源操作數(shù),并得出一個結(jié)果。20

5.CacheS698_ECR是“Harvard”結(jié)構(gòu)(指令和數(shù)據(jù)分開),地址總線和數(shù)據(jù)總線分開,分別連接到獨立的“cache”控制器上,除地址之外,SPARC處理器還生成一個8-bit的“地址空間標志符”(ASI),可區(qū)分256個獨立的32位地址空間。在正常工作時,按照SPARC標準定義,S698_ECR處理器在訪問指令和數(shù)據(jù)時使用ASI0x8-0xB。216.FPUS698_ECR的FPU提供遵循SPARCV8標準的全部浮點指令,其浮點數(shù)據(jù)的格式和浮點指令遵循ANSI/IEEE754-1985標準。FPU連接在IU上。FPU有32個32-bit的浮點“f”寄存器.。S698_ECR使用標準的LD/ST指令在FPU和存儲器之間移動數(shù)據(jù)。存儲器地址由IU計算,浮點操作指令完成浮點算術(shù)運算。227.AMBA總線S698_ECR內(nèi)部的AMBA總線包括2種總線:AHB和APB。APB總線用來訪問片內(nèi)外設(shè)的寄存器;AHB總線用作高速數(shù)據(jù)傳輸。237.AMBA總線

AHB總線

S698_ECR用AMBA-2.0AHB總線連接處理器cache控制器和其它的高速單元,IU是總線上唯一的主控單元。另外,還有其它從屬單元連接在總線上:存儲器控制器、AHB/APB轉(zhuǎn)換橋。247.AMBA總線

APB總線

AHB/APB轉(zhuǎn)換橋作為一個從屬設(shè)備連接在AHB總線上,是APB總線唯一的主控單元。處理器通過AHB/APB橋訪問大部分片內(nèi)外設(shè)。片內(nèi)外設(shè)包括:GPI口(80位)

4路UART4個定時器24位看門狗中斷控制器PS/2

I2C

SPI

3個智能卡控制器

1個磁卡控制器258.寄存器描述“寄存器窗口”這一概念是由UCBerkeley針對提高編譯器效率以及大量減少存儲器load/store指令而首先提出的。它將工作寄存器組成若干個窗口,建立起環(huán)形結(jié)構(gòu),利用重疊寄存器窗口技術(shù)來加快程序的運轉(zhuǎn)。我們可以把窗口看作是一個用于傳遞參數(shù)以及存儲局部數(shù)據(jù)和返回地址的cache。利用寄存器窗口的重疊和當前窗口的指針改變可以實現(xiàn)過程調(diào)用/返回時傳遞參數(shù)和結(jié)果的功能。268.寄存器描述:IU寄存器

IU通用目的寄存器(rregisters)S698_ECR的整型數(shù)處理單元包含136個32-bit的通用目的寄存器(r寄存器)。這些通用目的寄存器被分成8個global寄存器、8個16-寄存器組(也稱作寄存器窗口)。一個16-寄存器組又更進一步的分成8個in寄存器和8個local寄存器.278.寄存器描述:IU寄存器IU通用目的寄存器(rregisters)

WindowAddressing288寄存器描述:IU寄存器寄存器窗口(rRegisters)

在特定的時間內(nèi),一條指令可以訪問136個r寄存器中的8個globals寄存器和一個寄存器窗口。其中,寄存器窗口是一個24-寄存器組,它包括一個由8個“in”寄存器和8個“l(fā)ocal”寄存器組成的16-寄存器組,和與它相鄰的16-寄存器組中的8個“in”寄存器(被當前寄存器窗口設(shè)定為自己的“out”寄存器).298.寄存器描述:IU寄存器當前的寄存器窗口在“處理器狀態(tài)寄存器(PSR)”中一個5-bit的“currentwindowpointer(CWP)”區(qū)設(shè)定,當執(zhí)行“RESTORE(或RETT)”指令時,CWP加1;當執(zhí)行“SAVE”指令或產(chǎn)生一個trap時,CWP的值減1。寄存器窗口上溢和下溢由“Windowinvalidmask(WIM)register”監(jiān)控。308.寄存器描述:IU寄存器寄存器窗口的重疊每個寄存器窗口都和與之相鄰的2個寄存器窗口共享ins寄存器和outs寄存器。CWP+1寄存器窗口的outs寄存器被設(shè)定為當前寄存器窗口的ins寄存器;當前寄存器窗口的outs寄存器則被設(shè)定為CWP-1寄存器窗口的ins寄存器。Locals寄存器對于每個寄存器窗口來說都是唯一的。318.寄存器描述:IU寄存器寄存器窗口的重疊

一個地址設(shè)定為“o”的“r”寄存器(其中8≤o≤15),和(CWP-1)下地址為“(o+16)”的寄存器,被認為是同一個寄存器。(moduloNWINDOWS);同樣的,一個地址設(shè)定為“i”的“r”寄存器(24≤I≤31),和(CWP+1)下地址為“(i-16)”的寄存器,被認為是同一個寄存器328.寄存器描述:IU寄存器寄存器窗口的重疊

S698_ECR包含8個寄存器窗口。編號最高的寄存器窗口(編號為7)與編號最低的寄存器窗口(編號為0)交迭在一起,即寄存器窗口7的ins寄存器與寄存器窗口0的outs寄存器是同一個寄存器。338.寄存器描述:IU寄存器34

9.IU控制/狀態(tài)寄存器

32位的IU控制/狀態(tài)寄存器包括:處理器狀態(tài)寄存器(PSR)、WindowInvalidMask寄存器(WIM)、TrapBase寄存器(TBR)、multiply/divide(Y)寄存器、programcounters(PCandnPC)、4個輔助狀態(tài)寄存器(ASRs)。359.IU控制/狀態(tài)寄存器處理器狀態(tài)寄存器(ProcessorStateRegister)PSR

32位的PSR包含若干個域,這些域控制處理器的操作或保存狀態(tài)信息。他們可以被

SAVE,RESTORE,Ticc,或RETT指令修改,特權(quán)指令RDPSR和WRPSR直接讀寫PSR寄存器。369.1處理器狀態(tài)寄存器(ProcessorStateRegister)PSR

PSR_implementation(impl)域這四位為只讀位,用來在硬件上確定,分類硬件體系架構(gòu)的實現(xiàn)。

PSR_version(ver)域這四位也為只讀位,標記S698的版本號。

PSR_integer_cond_codes(icc)域這四位標記IU的狀態(tài),他們可被以字母串cc結(jié)尾的算術(shù)邏輯指令或是WRPSR指令修改。Bicc和Ticc

指令可以引起基于此域的控制轉(zhuǎn)移。此域的格式定義如下:3710.1處理器狀態(tài)寄存器(ProcessorStateRegister)PSRPSR_negative(n)域:此位指示ALU的運算結(jié)果是否要被忽略。1=忽略,0=不忽略。PSR_zero(z)域:對于ALU的最后一條修改了icc

域的指令,此位指示是否ALU的運算結(jié)果為0。1=為零,0=不為零。PSR_overflow(v)域:對于ALU的最后一條修改了icc

域指令,此位指示ALU的結(jié)果是否在32位能表示的范圍內(nèi)。1=溢出;0=無溢出。PSR_carry(c)域:對于ALU的最后一條修改了icc

域的指令,此位指示是否指令的運算的最后一位有借位或是進位。1=有,0=?jīng)]有。389.1處理器狀態(tài)寄存器(ProcessorStateRegister)PSRPSR_reserved(r)域:此六位是保留位。如果被RDPSR指令讀,則返回0。為了以后擴展兼容性,管理軟件可以通過WRPSR向此域?qū)懭?。PSR_enable_coprocessor(EC)域:此位決定協(xié)處理器是否被激活。如果沒被激活則會有一個與協(xié)處理器相關(guān)的Trap。1=支持,0=不支持。如果硬件沒實現(xiàn)協(xié)處理器,則此位始終為0,這時對此位的寫被忽略。PSR_enable_floating-point(EF)域:此位決定FPU是否被激活。如果沒被激活則會有一個與FPU相關(guān)的Trap。1=支持,0=不支持。如果硬件沒實現(xiàn)FPU,則此位始終為0,這時對此位的寫被忽略。399.1處理器狀態(tài)寄存器(ProcessorStateRegister)PSRPSR_proc_interrupt_level(PIL)域:此域指示CPU要接受中斷的級別。PSR_supervior(S)域:此為指示CPU是處于管理狀態(tài)還是用戶狀態(tài)。1=管理狀態(tài),0=用戶狀態(tài)。PSR__previous_supervior

(PS)域:此位保存當前Trap所處的狀態(tài)值。1=管理狀態(tài),0=用戶狀態(tài)。PSR_enable_traps(ET)域:此位指示是否允許有Trap,如果當前有Trap,則此Trap會自動將此位置為0。0=忽略Trap,這時若有中斷請求則會被忽略,而且一個異常的Trap會使IU執(zhí)行掛起(halt)操作(此操作又觸發(fā)重啟Trap)。1=允許Trap。PSR_current_window_pointer(CWP)域:此五位為當前寄存器窗口指針。當發(fā)生Trap時或SAVE指令硬件會使CWP減少;RESTORE或RETT指令會CWP增加。409.2WindowInvalidMaskRegister(WIM)窗口掩碼寄存器:

WIM由管理軟件控制,被硬件使用來查看是否SAVE,RESTORE或RETT指令會引起窗口上溢(overflow)或下溢(underflow)Trap。

WIM[n]關(guān)聯(lián)n對應(yīng)的窗口。當SAVE,RESTORE或RETT指令執(zhí)行,當前CWP會和WIM比較,如果要轉(zhuǎn)到的是一個非法窗口,(即相應(yīng)的WIM位被置為1),則會轉(zhuǎn)入相應(yīng)的窗口上溢(overflow)或下溢(underflow)Trap。

WIM可被特權(quán)指令RDWIM讀取,被WRWIM指令寫入.419.3TrapBaseRegister(TBR)寄存器

此寄存器有三個域,每個域中都存放trap發(fā)生時要轉(zhuǎn)向的地址。TBR_trap_base_address(TBA)域:這20位存放trap地址表的高20位地址。這些位被管理軟件維護,可以被WRTBR指令寫入。TBR_trap_type(tt)域:這8位存放trap的類型編碼。當發(fā)生trap時,這8位被硬件寫入,且一直保持此值到下一個trap到來。WRTBR指令對此域沒有影響。TBR_zero(0)域:這四位全為0,不受WRTBR指令的影響。這四位留作以后擴展軟件使用WRTBR時應(yīng)向這四位寫0。429.4Multiply/DivideRegister(Y)域

這32位保存整數(shù)乘法的結(jié)果,相應(yīng)的乘法指令包括SMUL,SMULcc,UMUL,UMULcc

乘法指令或是含有MULScc

指令的例程。這32位也可保存SDIV,SDIVcc,UDIV,UDIVcc

等除法指令的雙精度數(shù)。此寄存器可以被RDY,WRY指令讀或?qū)憽?39.5ProgramCounters(PC,nPC)域

PC寄存器存放當前IU運行的指令的地址,nPC

寄存器存放下一個要運行的指令的地址(特指沒發(fā)生的trap)。

PC被CALL和JMPL指令讀取。在一個trap中,PC和nPC

被寫入到兩個local寄存器中。449.6AncillaryStateRegister(ASR)-watchpointregistersS698使用四對ASR寄存器(%asr24/25,%asr26/27,%asr28/30,%asr30/31)實現(xiàn)了四個監(jiān)視點。由WADDR域定義的地址范圍都可以被監(jiān)視,這個地址范圍也可被WMASK域掩碼(WMASK[x]=1)激活匹配。在一個監(jiān)視點上,trap0x0B會被生成。通過設(shè)定IF,DL和DS位監(jiān)視hit可以在取指,數(shù)據(jù)存儲讀寫的時候發(fā)生。將此三位清0會有效的禁止此項功能。459.7FPU寄存器在S698中,F(xiàn)PU(浮點運算單元)有32個32位的f寄存器(float-point)且被f[0]-f[31]來標記。不像窗口化的r寄存器,在給定的時間內(nèi)指令可以訪問任意的f寄存器。f寄存器可以被處理整數(shù)的指令或浮點數(shù)的指令(Fpop1/Fpop2格式)訪問。469.7FPU寄存器雙精度和四精度操作數(shù)

一個單精度的f寄存器內(nèi)可存儲一個單精度的操作數(shù);雙精度操作數(shù)需要一個編號分別位奇數(shù)和偶數(shù)的f寄存器對;四精度操作數(shù)需要一個含4個f寄存器的寄存器組。這樣,在某一給定時間這些f寄存器可以保存最多32個單精度數(shù),或16個雙精度數(shù),或8個四精度數(shù)。要使用訪問雙精度的浮點數(shù)的指令得保證雙精度的對齊規(guī)則:雙精度寄存器地址的最低位要為0或被軟件置為0;相似的,四精度寄存器地址的最低兩位要為0或被軟件置為0。479.7FPU寄存器推薦:若訪問了不符合對齊規(guī)則的f寄存器,需要產(chǎn)生trap(FSR.ftt=6)。

489.8浮點控制/狀態(tài)寄存器32位的FPU控制/狀態(tài)寄存器組包含F(xiàn)SR(Float-pointStateRegister即浮點狀態(tài)寄存器),其內(nèi)含有FPU的狀態(tài)信息,和一個可選的,獨立實現(xiàn)的浮點延遲Trap隊列(FQ)499.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器其內(nèi)含有狀態(tài)和模式信息,此寄存器被STFSR指令讀,LDFSR指令寫。FSR_rounding_direction(RD)域:

此域選擇浮點結(jié)果的逼近方向(roundingdirection)。509.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器FSR_unused(u)域:第29,28,12位(從0數(shù))不被使用而留作將來兼容擴展,軟件應(yīng)該只使用指令LDFAR對這些位寫入0值。FSR_trap_enable_mask(TEM)域:此域有5位,用來允許5類浮點處理異常。當發(fā)生某類的異常時,此寄存器的cexc

域會指示發(fā)生的異常,如果TEM域的相應(yīng)位又為1,則會產(chǎn)生fp_exception

的trap;反之若置為0就會屏蔽,使之不會產(chǎn)生trap。519.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器FSR_nonstandard_fp(NS)域此位為S698的保留位。FSR_version(ver)域這三位保存S698的實現(xiàn)版本信息。529.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器FSR_floating-point_trap_type(ftt)域:此域保存浮點處理異常的類型。當一個浮點處理的異常產(chǎn)生之后,ftt

域保存異常的類型直到STFSR或Fpop

被執(zhí)行,ftt

域可以被STFSR指令讀,LDFSR指令對此域沒有影響。若由管理模式的軟件處理浮點Trap,則其必須執(zhí)行一個STFSR去確定浮點Trap的類型。STFSR是否會將ftt

域清0,由芯片設(shè)計時決定。如果STFSR不會將此域清0,則處理Trap的管理軟件要保證在用戶態(tài)時,后來執(zhí)行STFSR域會返回ftt

域的值為0。注意:盡管在返回用戶態(tài)前執(zhí)行了一個不會產(chǎn)生trap的FPop(此指令能將ftt

清0如fmovs

%f0,%f0),因為LDFSR指令不會改變ftt

域則其不可用來處理ftt

域。ftt

域在下一條FPop

指令執(zhí)行前都是有效的。

539.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器此域?qū)Ω↑cTrap類型的編碼如下:549.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器

在正常的運算過程中不希望出現(xiàn)硬件錯誤或是sequence_error,它們在用戶應(yīng)用程序中都是不可恢復(fù)的。相反,IEEE_745異常、不完整的FPop

和未實現(xiàn)的FPop

錯誤偶爾會希望出現(xiàn)在正常的運算處理中。且可用管理軟件恢復(fù)。當浮點類型的trap發(fā)生時,會有:

1)aexc

域的值不被改變。

2)cexc

域也不會改變,除了發(fā)生IEEE_745異常時的相應(yīng)位被置位。不完整的FPop、未被實現(xiàn)的FPop

或是sequence_error

不會影響此域。

3)源f寄存器不會改變。(一般通過不改變目標f寄存器來實現(xiàn))

4)fcc

域不會改變。如果不完整的FPop

或未實現(xiàn)的FPop

不產(chǎn)生IEEE的Trap,則處理恢復(fù)的軟件得定義cexc,aexc或目標r寄存器,fcc。559.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器ftt=IEEE_745_exception時IEEE_745浮點異常由ANSI/IEEE標準定義。此類型在cexc

域標記。注意:aexc,fcc,和目標f寄存器不受IEEE_745異常trap的影響。ftt=unfinished_FPop

時這種情況指示FPU不能產(chǎn)生IEEE定義的結(jié)果或異常。這樣cexc

域就不會被改變。ftt=unimplemented_FPop

時這時說明FPU的一個FPop

沒有被實現(xiàn)。569.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器ftt=sequence_error

時sequence_error

指示三種FPU非正常錯誤條件中的一種,它們由管理軟件的錯誤操作引起:

1)執(zhí)行一個沒有“浮點延遲trap隊列”(FQ)的STDFQ指令。

2)執(zhí)行一個FPU不能接受的指令。這種類型的隊列錯誤源于管理軟件的邏輯錯誤(這種邏輯錯誤已經(jīng)產(chǎn)生了一個浮點Trap),如前一個浮點trap執(zhí)行完后浮點隊列沒有被清空。

3)當FSR.qne=0,即FQ為空時,執(zhí)行STDFQ指令。(推薦產(chǎn)生隊列錯誤,但這里不需要)ftt=hardware_error

時此錯誤表明FPU監(jiān)測到一個災(zāi)難性的內(nèi)部錯誤(如非法狀態(tài)或f寄存器的奇偶錯誤)。如果執(zhí)行用戶程序時發(fā)生這樣的錯誤,就不可能恢復(fù)到正確的狀態(tài)繼續(xù)執(zhí)行。ftt=invalid_fp_register

時一個invalid_fp_register

的trap類型表明FPop

的操作數(shù)“沒有對齊”(如雙精度寄存器的地址或四精度寄存器地址非法)。推薦芯片設(shè)計時在這種情況下(FSR.ftt=invalid_fp_register)產(chǎn)生fp_exception

的trap。579.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器FSR_FQ_not_empty(qne)域:延遲的fp_exception

類的trap之后或執(zhí)行完雙精度浮點隊列存儲指令(STDFQ)之后,此位指示是否FQ為空。qne=0時FQ為空;qne=1時FQ為非空。此位可被STFSR指令讀,且不受LDFSR指令的影響。然而,執(zhí)行一段STDFQ指令會使FQ變空(qne=0)。如果設(shè)計芯片時沒有實現(xiàn)FQ,讀此位會返回0。管理軟件必須要維護此位使得在用戶態(tài)讀此位時總返回0。589.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器FSR_fp_condition_codes(fcc)域:這兩位包含F(xiàn)PU的環(huán)境信息。這兩位被浮點比較指令(FCMP和FCMPE)更新;被STFSR指令讀;被LDFSR指令寫。FBfcc

根據(jù)此域跳轉(zhuǎn)。上表中frs1和frs2與指令的rs1和rs2域指定的f寄存器中的值有關(guān)。表中的問號指示無序的關(guān)系,如果frs1或frs2是signalingNaN

或quiteNaN,問號就表示true。注意:當FCMP或FCMPE產(chǎn)生IEEE_754_exception的trap時,fcc

就不會被改變。599.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器FSR_accrued_exception(aexc)域:當fp_exception

的trap被屏蔽時(利用TEM域),這5位累積IEEE_745定義的浮點異常。FPop指令執(zhí)行完后,TEM域和cexc

域要被邏輯與。如果結(jié)果為非0,則產(chǎn)生fp_exception

的trap;否則cexc

與aexc

要被邏輯或且將其結(jié)果放入aexc

域。因此,當trap被屏蔽,異常就會被積累在aexc

域。FSR_current_exception(cexc)域:這5位指示一個或更多的IEEE_745浮點異常(由最近執(zhí)行過的FPop

指令產(chǎn)生)。對于沒被產(chǎn)生的異常,相應(yīng)位被清0。609.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器619.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器FSR_invalid(nvc,nva)域:此位指示是否操作數(shù)非法。如0÷0等。1=無效的操作數(shù);0=有效的操作數(shù)。FSR_overflow(ofc,ofa)域:當結(jié)果比正常能表示的數(shù)大時,會發(fā)生向上溢出。1=上溢,0=無上溢。FSR_underflow(ufc,ufa)域:當結(jié)果比正常能表示的最小的數(shù)還小時會發(fā)生向下溢出。1=下溢,0=無下溢。當結(jié)果是0時,就不能判斷是否發(fā)生下溢。然而:如果UFM=0:當運算結(jié)果要比寄存器能正常表示的數(shù)還要小時,ufc

和ufa

位會被置為1。nxc和nxa

總是被置位。如果UFM=1:當運算結(jié)果要比寄存器能正常表示的數(shù)還要小時,會產(chǎn)生一個trap629.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器FSR_division-by-zero(dzc,dza)域:

X÷0,無論X位正?;虻陀谡5臄?shù),都不是合法的。此位指示是否發(fā)生0為除數(shù)的情況。1=(0為除數(shù));0=(0不為除數(shù))。但是0÷0時dzc

為不會被置位。FSR_inexact(nxc,nxa)域:此域指示rounded的結(jié)果和精確的結(jié)果是否一致:1=不一致,0=一致。FSRConformance域:實現(xiàn)TEM,cexc

和aexc

域的硬件方法有兩種:

1)根據(jù)ANSI/IEEE標準745-1985實現(xiàn)。

2)根據(jù)ANSI/IEEE標準實現(xiàn)NXM,nxa

和nxc

位,實現(xiàn)剩下的位可以根據(jù):

a)根據(jù)ANSI/IEEE標準745-1985實現(xiàn)。

b)作為一個可以被軟件置位的狀態(tài)位,這樣的位應(yīng)該:*)IEEE關(guān)聯(lián)的位一定要能引起異常(一個FPop

不完整的異常)。在trap控制器處理異常時,狀態(tài)域的相應(yīng)位可以被LDFSR指令寫。而且若此位被LDFSR指令寫成某個特定值,然后用STFSR指令去讀時得保證與寫入的一致。639.8Float-PointStateRegister(FSR)即浮點狀態(tài)寄存器Floating-PointDeferred-TrapQueue(FQ)――浮點延遲Trap隊列:

如果FQ被實現(xiàn),那么FQ中會含有足夠的信息來實現(xiàn)可恢復(fù)浮點延遲trap。如果要實現(xiàn)浮點運算和整數(shù)運算的并發(fā),就要提供浮點隊列。

FQ可被特權(quán)的STDFQ指令(storedoublefloating-pointqueue)讀。在芯片設(shè)計時也可用特權(quán)的LDDA,STDA(load/storedoublealternate)指令對FQ寫;也可用RDASR或WRASR指令(read/writeAncillaryStateRegiter

)對之進行讀寫。

FQ有各種實現(xiàn)方式,但管理軟件要能夠通過讀FQ推斷出產(chǎn)生異常的指令的opcode,操作數(shù)和地址。若沒有實現(xiàn)FQ功能,則FSR的qne

位總為0,且STDFQ指令產(chǎn)生fp_exception,FSR.ftt=4(sequence_error)649.9系統(tǒng)寄存器:存儲器配置寄存器1(MCFG1)[3:0]:Promreadwaitstates(PROM讀等待周期)。配置PROM讀周期時等待周期的值。

(“0000”=0,“0001”=1,…“1111”=15);[7:4]:Promwritewaitstates(PROM寫等待周期)。配置PROM寫周期時等待周期的值。(“0000”=0,“0001”=1,…“1111”=15);[9:8]:Promwidth(PROM寬度)。配置PROM數(shù)據(jù)總線的寬度(“00”=8,“01”=16,“10”=32);[10]:保留;[11]:Promwriteenable(PROM寫使能)。如配置為‘1’,則使能PROM寫周期;[17:12]:保留;[19]:I/O區(qū)0訪問使能。如配置為‘1’,則I/O區(qū)0訪問使能;659.9系統(tǒng)寄存器:存儲器配置寄存器1(MCFG1)[23:20]:I/Owaitstates

(I/O區(qū)訪問等待周期)。配置訪問I/O區(qū)時等待周期的值(“0000”=0,“0001”=1,“0010”=2,…,“1111”=15);[25]:Buserror(BEXC*)enable(總線錯誤使能);[26]:Busready(BRDY*)enable(總線準備好使能);[28:27]:I/Obuswidth(I/O總線寬度)。配置I/O區(qū)數(shù)據(jù)總線的寬度(“00”=8,“01”=16,“10”=32);[29]:I/O區(qū)1訪問使能。如配置為‘1’,則I/O區(qū)1訪問使能;[30]:I/O區(qū)2訪問使能。如配置為‘1’,則I/O區(qū)2訪問使能;[31]:I/O區(qū)3訪問使能。如配置為‘1’,則I/O區(qū)3訪問使能。669.9系統(tǒng)寄存器:存儲器配置寄存器2(MCFG2)[1:0]:RAM讀等待周期。配置RAM讀周期等待周期的值。(“00”=0,“01”=1,“10”=2,“11”=3)[3:2]:RAM寫等待周期。配置RAM寫周期等待周期的值(“00”=0,“01”=1,“10”=2,“11”=3);[5:4]:RAM寬度。配置RAM區(qū)數(shù)據(jù)總線寬度(“00”=8,“01”=16,“1X”=32);[6]:Read-modify-write.Enableread-modify-writecyclesonsub-wordwritesto16-and32-bitareaswithcommonwritestrobe(nobytewritestrobe).[7]:總線準備好使能。如果設(shè)置為‘1’,RAM區(qū)的BRDY*信號有效。679.9系統(tǒng)寄存器:存儲器配置寄存器2(MCFG2)[12:9]:RAMbank大小。配置RAMbank的大小[13]:SI–SRAM禁止位。如果配置為‘0’,則SRAM訪問被激活;如果配置為‘1’,則下表所列的信號用作GPI口。當加電或復(fù)位時,該位為‘0’;保留;[15]:extmod。使存儲器地址空間從20-bit擴展到24-bit。當該位設(shè)置為‘1’時,GPI2[3:0]用作地址線A[23:20]。當系統(tǒng)加電或復(fù)位時,該位為‘0’。[20:31]:保留;當ROM、I/O、和SRAM數(shù)據(jù)總線同時為8位或16位時,數(shù)據(jù)總線d(23:0)或d(15:0)作為GPI口使用。689.9系統(tǒng)寄存器:存儲器配置寄存器3(MCFG3)[31:0]:保留;699.9系統(tǒng)寄存器:AHB錯誤地址寄存器

當AHB總線上發(fā)生訪問錯誤時,訪問的地址被存入AHB錯誤地址寄存器。709.9系統(tǒng)寄存器:AHB狀態(tài)寄存器

當AHB總線上發(fā)生訪問錯誤時,訪問和錯誤類型被存入AHB狀態(tài)寄存器。當AHB總線訪問錯誤產(chǎn)生時,該寄存器被更新,NE位被設(shè)置為‘1’,中斷控制器產(chǎn)生中斷1通知處理器有AHB

總線訪問錯誤,錯誤處理后,NE位必須軟件復(fù)位。

[8]:NE–新錯誤。當新的錯誤產(chǎn)生時被置為‘1’。[7]:RW–如該位設(shè)置為‘1’,則失敗的AHB訪問是讀訪問周期,否則,被清‘0’。[6:3]:HMASTER–AHBmaster.ThisfieldcontainstheHMASTER[3:0]ofthefailedaccess.[2:0]HSIZE–transfersize.ThisfiledcontainstheHSIZE[2:0]ofthefailedtransfer.719.9系統(tǒng)寄存器:片內(nèi)RAM地址配置寄存器[31:8]:保留;[7:0]:配置片內(nèi)SRAM的地址,如片內(nèi)SRAM的地址為0x60000000,則[7:0]配置為0x60(16進制,二進制為00000110)72S698內(nèi)部資源簡介片內(nèi)SRAMPS/2接口控制器通用輸入/輸出接口定時器時鐘機制Trap73

片內(nèi)SRAM

S698_ECR內(nèi)嵌有32K字節(jié)的RAM,其起始地址由用戶程序在“內(nèi)部RAM地址寄存器”中設(shè)定。內(nèi)部RAM的地址必須在0x40000000~0x7fffffff

范圍之內(nèi),且不能與外部SRAM重疊。片內(nèi)SRAM可帶外部后備電源,在掉電的情況下,能夠通過外部后備電源供電,以保持片內(nèi)SRAM中的數(shù)據(jù)不丟失74

片內(nèi)RAM地址配置寄存器

07

31Reserved片內(nèi)SRAM地址配置寄存器[31:8]:保留;[7:0]:配置片內(nèi)SRAM的地址。如片內(nèi)SRAM的地址0x60000000,則[7:0]配置為0x60(16進制,二進制為00000110)75

PS/2接口控制器(1):概述

在傳統(tǒng)的計算機中,PS/2接口應(yīng)用廣泛,它常用做鍵盤接口和鼠標接口。一般,具有五腳連接器的鍵盤稱之為AT鍵盤,而具有六腳mini-din連接器的鍵盤則稱之為PS/2鍵盤。其實這兩種連接器都只有四個腳有意義。它們分別是Clock(時鐘腳)、Data(數(shù)據(jù)腳)、+5V(電源腳)和Ground(電源地)。在PS/2鍵盤與主機的物理連接上只要保證這四根線一一對應(yīng)就可以了。76PS/2接口控制器(1):概述PS/2鍵盤靠主機的PS/2端口提供+5V電源,另外兩個腳Clock(時鐘腳)和Data(數(shù)據(jù)腳)都是集電極開路的,所以必須接大阻值的上拉電阻。它們平時保持高電平,有輸出時才被拉到低電平,之后自動上浮到高電平。77PS/2接口控制器(2):PS/2接口協(xié)議PS/2通訊協(xié)議是一種雙向同步串行通訊協(xié)議。通訊的兩端通過Clock(時鐘腳)同步,并通過Data(數(shù)據(jù)腳)交換數(shù)據(jù)。任何一方如果想抑制另外一方通訊時,只需要把Clock(時鐘腳)拉到低電平。如果是主機和PS/2鍵盤間的通訊,則主機必須做主機,也就是說,主機可以抑制PS/2鍵盤發(fā)送數(shù)據(jù),而PS/2鍵盤則不會抑制主機發(fā)送數(shù)據(jù)。78PS/2接口控制器(2):PS/2接口協(xié)議一般兩設(shè)備間傳輸數(shù)據(jù)的最大時鐘頻率是33KHz,大多數(shù)PS/2設(shè)備工作在10~20KHz。推薦值在15KHz左右,也就是說,Clock(時鐘腳)高、低電平的持續(xù)時間都為40μs。79PS/2接口控制器(2):PS/2接口協(xié)議每一數(shù)據(jù)幀含11~12個位,具體含義如表1:1個起始位總是邏輯08個數(shù)據(jù)位低位在前1個奇、偶校驗位奇校驗1個停止位總是邏輯11個應(yīng)答位僅用在主機對設(shè)備的通信中表1:數(shù)據(jù)幀格式說明80PS/2接口控制器(3):

Ps/2接口通信操作1、PS/2接口的mini-DIN連接器模塊圖81PS/2接口控制器(3):

Ps/2接口通信操作2、PS/2接口設(shè)備的通訊PS/2設(shè)備的Clock(時鐘腳)和Data(數(shù)據(jù)腳)都是集電極開路的,平時都是高電平。當PS/2設(shè)備等待發(fā)送數(shù)據(jù)時,它首先檢查Clock(時鐘腳)以確認其是否為高電平。如果是低電平,則認為是主機抑制了通訊,此時它必須緩沖需要發(fā)送的數(shù)據(jù)直到重新獲得總線的控制權(quán)(一般PS/2鍵盤有16個字節(jié)的緩沖區(qū),而PS/2鼠標只有一個緩沖區(qū)僅存儲最后一個要發(fā)送的數(shù)據(jù))82PS/2接口控制器(3):

Ps/2接口通信操作如果Clock(時鐘腳)為高電平,PS/2設(shè)備便開始將數(shù)據(jù)發(fā)送到主機。一般都是由PS/2設(shè)備產(chǎn)生時鐘信號。發(fā)送時一般都是按照數(shù)據(jù)幀格式順序發(fā)送。其中數(shù)據(jù)位在Clock(時鐘腳)為高電平時準備好,在Clock(時鐘腳)的下降沿被主機讀入。83PS/2接口控制器(3):

Ps/2接口通信操作PS/2設(shè)備到主機的通訊時序如圖2。84PS/2接口控制器(3):

Ps/2接口通信操作當時鐘頻率為15KHz時,從Clock(時鐘腳)的上升沿到數(shù)據(jù)位轉(zhuǎn)變時間至少要5μs。數(shù)據(jù)變化到Clock(時鐘腳)下降沿的時間至少也有5μs,但不能大于25μs,這是由PS/2通訊協(xié)議的時序規(guī)定的。如果時鐘頻率是其它值,參數(shù)的內(nèi)容應(yīng)稍作調(diào)整。85PS/2接口控制器(3):

Ps/2接口通信操作3、按鍵的識別按鍵的識別是通過掃描碼(ScanCode)來判斷的。掃描碼可以分為:MakeCode(通碼),BreakCode(斷碼)。當鍵盤上有鍵被按下,松開,按住,鍵盤將產(chǎn)生掃描碼(ScanCode),這些掃描碼將被i8048直接得到。掃描碼有兩種,MakeCode和BreakCode。當一個鍵被按下或按住時產(chǎn)生的是MakeCode,當一個鍵被松開產(chǎn)生的是BreakCode。86PS/2接口控制器(3):

Ps/2接口通信操作每個鍵被分配了唯一的MakeCode和BreakCode,這樣主機通過掃描碼就可以知道是哪一個鍵。簡單的說就是按下鍵,產(chǎn)生一個MakeCode。松開鍵,產(chǎn)生一個BreakCode。當按住一個鍵不放時,將會Typematic(機打),也就是自動打。每隔一定時間,自動產(chǎn)生一個被按住的鍵的MakeCode,直到最后松開該鍵。87PS/2接口控制器(3):

Ps/2接口通信操作而對于同時按下多個鍵的情況:在一個鍵被按下,產(chǎn)生了MakeCode,而沒有被松開,沒有產(chǎn)生BreakCode的時候,再按下另一個鍵,于是產(chǎn)生了另一個鍵的MakeCode,就算是這兩個鍵被同時按下。之后,這兩個鍵松開時,各自產(chǎn)生各自的BreakCode。而對于按一個鍵不放的時候,再按另一個鍵的情況:我們可以打開一個記事本,把'a'鍵按住不放,不要松開,然后再按's'鍵不放。我們可以看到當按下's'時,'a'鍵并沒有松,但是并沒有'a'再出現(xiàn)了,而是's'開始出現(xiàn),這時即使松開了's','a'也不會繼續(xù)出現(xiàn)了。88PS/2接口控制器(3):

Ps/2接口通信操作到目前為止,一共有三套掃描碼集(ScanCodeSet),ps/2鍵盤默認使用第二套。按照鍵的MakeCode的值的大小,列出了第二套掃描碼集中的所有掃描碼。如表3(下頁)。89PS/2接口控制器(3):

Ps/2接口通信操作表3:第二套掃描碼集注:所有的值都是十六進制的。101、102和104鍵的鍵盤:90PS/2接口控制器(3):

Ps/2接口通信操作91PS/2接口控制器(3):

Ps/2接口通信操作92PS/2接口控制器(3):

Ps/2接口通信操作93

PS/2接口控制器(3):

PS/2控制器寄存器

1、PS/2寄存器列表94PS/2接口控制器(3):

PS/2控制器寄存器2、狀態(tài)寄存器STR

STR寄存器(StatusRegister)用于記錄PS/2接口設(shè)備的當前狀態(tài),其寬度也為8位。表4:狀態(tài)寄存器STRSTR地址:0X800002a4R95PS/2接口控制器(3):

PS/2控制器寄存器7位:0;TxTO:發(fā)送時間溢出表示鍵盤或鼠標沒有接收輸入(鍵盤或鼠標可能沒有連接),當讀取狀態(tài)寄存器后,該位被清‘0’;當發(fā)生發(fā)送時間溢出時,PS/2控制器將保持該狀態(tài),并拉低數(shù)據(jù)線,直到執(zhí)行自測試操作或系統(tǒng)復(fù)位。0:無錯誤–鍵盤或鼠標能夠接收全部數(shù)據(jù)。1:時間溢出錯誤–鍵盤或鼠標在15ms的“請求發(fā)送”脈沖后仍沒有產(chǎn)生時鐘信號。96PS/2接口控制器(3):

PS/2控制器寄存器RxTO:接收時間溢出表示鍵盤或鼠標沒有響應(yīng)命令。當讀取“狀態(tài)寄存器”后,該位被清‘0’;當發(fā)生接收時間溢出時,PS/2控制器將保持該狀態(tài),直到執(zhí)行自測試操作或系統(tǒng)復(fù)位。0:無錯誤1:接收時間溢出錯誤—鍵盤或鼠標在收到命令后20ms內(nèi)沒有產(chǎn)生時鐘信號。97PS/2接口控制器(3):

PS/2控制器寄存器Kbd_inhibit:鍵盤或鼠標接口禁止位表示鍵盤或鼠標接口通訊是否被禁止。0:KeyboardClock=0–鍵盤通訊被禁止。1:KeyboardClock=1–鍵盤通訊沒有被禁止。System_flag:systemflag主機通過讀取該位確定鍵盤或鼠標是加電復(fù)位還是軟件復(fù)位。0:加電復(fù)位1:鍵盤或鼠標已經(jīng)初始化。98PS/2接口控制器(3):

PS/2控制器寄存器Tr_full:發(fā)送緩存滿0:發(fā)送緩存空–允許寫TXR。1:發(fā)送緩存滿–不允許寫TXR。

Rr_full:接收緩存滿表示RXR中有數(shù)據(jù)收到,當讀取RXR后,該位被清‘0’。0:接收緩存空–RXR中沒有接收到數(shù)據(jù)。1:接收緩存滿–RXR中接收到了新的數(shù)據(jù)。99PS/2接口控制器(3):

PS/2控制器寄存器3、命令寄存器CMDRCMDR命令寄存器存儲控制標志,對寄存器控制要使用ReadCommandByte命令讀,使用WriteCommandByte命令寫。表5:命令寄存器CMDRCMDR地址:0X800002a4W100PS/2接口控制器(3):

PS/2控制器寄存器命令通過寫PS/2控制器的TXR來送給PS/2控制器。首先,往“命令寄存器”中寫入0x60,然后把命令寫入TXR;也就是說,當在“命令寄存器”中寫入0x60后,寫入TXR中的數(shù)據(jù)將改變PS/2控制器的配置字。當配置PS/2控制器時,TXR中數(shù)據(jù)的各位含義如下所示:101PS/2接口控制器(3):

PS/2控制器寄存器7位:保留。Translate:Enables/disablestranslationtoset1scancodes0:Translationdisabled-Dataappearsatinputbufferexactlyasreadfromkeyboard.1:Translationenabled-Scancodestranslatedtoset1beforeputininputbuffer.102PS/2接口控制器(3):

PS/2控制器寄存器Enable:禁止/使能鍵盤或鼠標接口。0:使能–鍵盤或鼠標接口使能1:禁止–所有的鍵盤或鼠標通訊都被禁止。SYSTEM:用來強制設(shè)置/清除“狀態(tài)寄存器”中的系統(tǒng)標志位。0:Power-onvalue-TellsHOSTtoperformpower-ontests/initialization.1:BATcodereceived-TellsHOSTtoperform"warmboot"tests/initiailization103PS/2接口控制器(3):

PS/2控制器寄存器IE:中斷使能位如設(shè)置為‘1’,則當RXR收到數(shù)據(jù)、發(fā)送時間溢出、接收時間溢出時,產(chǎn)生一個中斷。0:中斷禁止1:中斷使能104PS/2接口控制器(3):

PS/2控制器寄存器105PS/2接口控制器(3):

PS/2控制器寄存器106PS/2接口控制器(3):

PS/2控制器寄存器107PS/2接口控制器(3):

PS/2控制器寄存器4、分頻寄存器DVDRDVDR寄存器存儲分頻參數(shù),如表6。對于DVDR中的分頻參數(shù)值,須采用下面的方式計算:DVDR=5×fmDVDR:表示分頻參數(shù)的整數(shù)值。fm:PS/2控制器從內(nèi)部接收到的輸入頻率。表6:分頻寄存器DVDRDVDR地址:0X800002a8W/R108PS/2接口控制器(3):

PS/2控制器寄存器5、發(fā)送緩沖寄存器TXRTXR發(fā)送緩存,一個字節(jié)的輸出緩沖區(qū)包含要寫到鍵盤的字節(jié)。表7:發(fā)送緩沖寄存器TXRTXR地址:0X800002a0W109PS/2接口控制器(3):

PS/2控制器寄存器6、接收緩沖寄存器RXRRXR發(fā)送緩存,一個字節(jié)的輸入緩沖區(qū)包含從鍵盤讀入的字節(jié)。表8:接收緩沖寄存器RXRRXR地址:0X800002a0R110PS/2接口控制器(4):

PS/2信號PS2_DATAPS/2數(shù)據(jù)輸入/輸出信號,雙向OD門。

PS2_CLKPS/2時鐘輸出信號。111

I/O端口(1):概述

處理器通過I/O口和外圍硬件連接。S698-ECR芯片的I/O口通常都是和其他引腳復(fù)用的。S698-ECR處理器具有80個多功能的GPIO,他們分別是:一個32位的GPIO端口0;一個32位的GPIO端口1;一個16位的GPIO端口2。112I/O端口(1):概述每組端口都可以通過軟件配置不同的系統(tǒng)和設(shè)計需要。系統(tǒng)上電時,所有的GPIO口都被設(shè)置為輸入功能。如果某些管腳的復(fù)用功能沒有使用,則可以作為GPIO口使用,如果被使用為其他復(fù)用功能,則相應(yīng)的GPIO口必須被設(shè)置為輸入端口。113I/O端口(2):端口功能配置每個端口都可通過軟件設(shè)置來滿足各種各樣的系統(tǒng)設(shè)置和設(shè)計要求。每個端口的功能通常都要在主程序開始前被定義。如果一個引腳的多功能沒有使用,那么這個引腳將被設(shè)置為I/O端口。在引腳配置前,需要對引腳的初始化狀態(tài)進行設(shè)定,以避免出現(xiàn)一些問題。表9是S698-ECRI/O端口總的設(shè)置情況。114I/O端口(2):端口功能配置表9:S698-ECRI/O端口總的設(shè)置情況115I/O端口(2):端口功能控制描述I/O端口的各種功能主要是通過對端口的各個寄存器進行設(shè)置而實現(xiàn)的,下面通過對各個寄存器的說明來分別介紹I/O端口實現(xiàn)的功能。116I/O端口(2):端口功能控制描述1、端口方向寄存器每一個寄存器都是32位的,寄存器中每一位都對應(yīng)著相應(yīng)的GPIO口,比如GPIO0的數(shù)據(jù)寄存器中的第‘0’位就控制著GPIO0[31:0]端口的第一個GPIO[0]。使用前首先確認GPIO口作為何種功能,如果作為復(fù)用功能,則其方向寄存器必須被設(shè)置為輸入狀態(tài)。當方向寄存器的某一位為‘1’,則其對應(yīng)的GPIO口就為輸出功能,反之設(shè)為‘0’,為輸入功能。117I/O端口(2):端口功能控制描述2、端口數(shù)據(jù)寄存器在GPIO口通過方向寄存器被設(shè)置為輸入功能時,可以通過讀取數(shù)據(jù)寄存器了解當前端口的狀態(tài),‘0’為低電平,‘1’為高電平。在GPIO口通過方向寄存器被設(shè)置為輸出功能時,可以通過寫數(shù)據(jù)寄存器控制當前輸出狀態(tài),‘0’為輸出低電平,‘1’為輸出高電平。118I/O端口(2):端口功能控制描述3、外部中斷懸掛寄存器當一個中斷產(chǎn)生時,“中斷懸掛寄存器”中相應(yīng)的位被置‘1’。懸掛的位與“中斷屏蔽寄存器”相“與”后轉(zhuǎn)送到優(yōu)先級選擇器。級別1的優(yōu)先級高于級別0。在每個級別中,中斷又按照硬件優(yōu)先級先后的順序區(qū)分。中斷15的優(yōu)先級最高,中斷1的優(yōu)先級最低。級別1中優(yōu)先級最高的中斷被送往IU,如果級別1中沒有中斷,則級別0中優(yōu)先級最高的中斷被送往IU,當IU相應(yīng)該中斷后,“中斷懸掛寄存器”中相應(yīng)的位將自動被清‘0’119I/O端口(2):端口功能控制描述4、外部中斷配置寄存器外部中斷寄存器為外部中斷設(shè)置了信號觸發(fā)方法選擇位,也設(shè)置了觸發(fā)信號的極性選擇位。GPIO中斷通過中斷信號過濾模塊連接在中斷控制器1的第4號至第7號中斷上,GPIO中斷可通過軟件設(shè)定為高電平觸發(fā)、低電平觸發(fā)、上升沿觸發(fā)和下降沿觸發(fā)。利用5.1K電阻分別將GPIO[0:3]上拉至高電平,利用軟件分別將中斷控制器1的第4號中斷至第7號中斷分配到GPIO[0:3]上,同時設(shè)定相應(yīng)的觸發(fā)條件,利用低電平分別觸發(fā)這四個中斷。120

I/O端口(3):特殊功能寄存器

1、外部中斷懸掛寄存器外部中斷懸掛寄存器如表10所示,它以各個位設(shè)置為‘1’來判斷中斷是否掛起;表10:外部中斷懸掛寄存器121I/O端口(3):特殊功能寄存器2、外部中斷配置寄存器為信號觸發(fā):高電平觸發(fā)、低電平觸發(fā)、上升沿觸發(fā)和下降沿觸發(fā)。122定時器(1):概述S698-ECR內(nèi)嵌4個24位的通用目的定時器(定時器1、2、3&4)。定時器3&4的功能與S698、S698M片內(nèi)定時器完全一致;定時器1&2能夠產(chǎn)生占空比可調(diào)的輸出波形,并通過相應(yīng)的輸出引腳(TMROUT[1:0])輸出。并可通過外部輸入的門控信號(TMRIN[1:0])控制定時器1&2的輸出。定時器1&2的輸出波形的占空比通過2個24位的“定時器波形參數(shù)配置寄存器1&2”設(shè)定。123定時器(1):概述例如:如果定時器1的“預(yù)置數(shù)重載寄存器”配置為15、“定時器波形參數(shù)配置寄存器1”配置5(T1)、“定時器波形參數(shù)配置寄存器2”配置為10(T2),則定時器1或定時器2產(chǎn)生的波形如圖1所示:圖1:定時器1或定時器2產(chǎn)生的波形124定時器(2):工作原理S698-ECR平臺提供4個定時器,使用時先設(shè)定Prescalercounter和Prescalerreload

、Timercounter和Timerreload寄存器、設(shè)定Timercontrol寄存器,設(shè)為Mo

溫馨提示

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

評論

0/150

提交評論