版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8講基于sparcV8嵌入式體系結(jié)構(gòu)S698處理器11.簡(jiǎn)述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浮點(diǎn)數(shù)處理單元,具有較強(qiáng)的運(yùn)算能力;并且內(nèi)嵌了大量的外設(shè)。22.特點(diǎn)基于AMBA總線的可裁減結(jié)構(gòu):
S698_ECR內(nèi)部的AMBA總線包括2種總線:AHB和APB。APB總線用來(lái)訪問片內(nèi)外設(shè)的寄存器;AHB總線用作高速數(shù)據(jù)傳輸。32.特點(diǎn)高性能的處理器內(nèi)核(帶有4K字節(jié)的指令cache和4K字節(jié)的數(shù)據(jù)cache)
32-bit整型數(shù)處理單元
RISC結(jié)構(gòu)硬件乘法器和除法器
5級(jí)流水優(yōu)化的32/64-bit浮點(diǎn)數(shù)處理單元,符合IEEE-754標(biāo)準(zhǔn)42.特點(diǎn)片內(nèi)外設(shè)集成調(diào)試支持單元(DSU:DebugSupportUnit)和數(shù)據(jù)通訊鏈路(DCL:DataCommunicationLink)集成64K字節(jié)的RAM,帶有后備電源;先進(jìn)的多時(shí)鐘機(jī)制和時(shí)鐘倍頻機(jī)制;orion
開發(fā)環(huán)境5
3.芯片結(jié)構(gòu)的功能框圖
64.芯片描述(IU)S698_ECR整型數(shù)處理單元(IU)支持SPARCV8指令集。IU包括一些通用目的寄存器,控制處理器的全部工作。IU的主要功能是執(zhí)行整數(shù)運(yùn)算、計(jì)算要訪問的存儲(chǔ)器的地址;另外,它也支持指令計(jì)數(shù)器,和控制FPU指令的執(zhí)行。在特定的時(shí)間內(nèi),一條指令可以訪問136個(gè)r寄存器中的8個(gè)globals寄存器和一個(gè)寄存器窗口。74.芯片描述(IU)寄存器窗口是一個(gè)24-寄存器組,它包括一個(gè)由8個(gè)“in”寄存器和8個(gè)“l(fā)ocal”寄存器組成的16-寄存器組,和與它相鄰的16-寄存器組中的8個(gè)“in”寄存器(被當(dāng)前寄存器窗口設(shè)定為自己的“out”寄存器)。當(dāng)前的寄存器窗口在“處理器狀態(tài)寄存器(PSR)”中的“currentwindowpointer(CWP)”區(qū)設(shè)定。寄存器窗口上溢和下溢由“Windowinvalidmask(WIM)register”監(jiān)控,“Windowinvalidmask(WIM)register”由管理軟件控制。寄存器窗口實(shí)際的數(shù)目對(duì)用戶應(yīng)用程序是透明的。84.芯片描述(IU)當(dāng)IU訪問存儲(chǔ)器時(shí),會(huì)在訪問地址后面加一個(gè)“地址空間標(biāo)志符”(ASI),ASI表示處理器是處于管理模式還是用戶模式;訪問操作是訪問指令存儲(chǔ)器還是數(shù)據(jù)存儲(chǔ)器。94.芯片描述(IU)IU具有以下特點(diǎn):5級(jí)單一指令流水;獨(dú)立的指令cache和數(shù)據(jù)cache;標(biāo)準(zhǔn)的8個(gè)寄存器窗口;硬件乘法器;硬件基于2的除法器。104.芯片描述(IU)S698_ECR的IU采用5級(jí)單一指令流水:FE(取指令)DE(譯碼)EX(指令執(zhí)行)ME(存儲(chǔ)):在此階段數(shù)據(jù)緩沖區(qū)被訪問。相應(yīng)地址的數(shù)據(jù)在此階段末要有效,在上一階段(EX)中被讀取的數(shù)據(jù)會(huì)被從新寫入數(shù)據(jù)緩沖區(qū)。WR(回寫)114.芯片描述(IU)指令時(shí)序:S698_ECR的指令按照功能分為6類:存儲(chǔ)器存取指令、算術(shù)運(yùn)算/邏輯運(yùn)算/移位指令、跳轉(zhuǎn)控制指令、讀/寫寄存器指令、浮點(diǎn)運(yùn)算指令和其它指令。124.芯片描述(IU)存儲(chǔ)器存取指令存儲(chǔ)器存取指令是唯一用來(lái)訪問存儲(chǔ)器的指令。存儲(chǔ)器存取指令用2個(gè)‘r’寄存器或者1個(gè)‘r’寄存器和1個(gè)13-bit的無(wú)符號(hào)立即數(shù)計(jì)算出1個(gè)32-bit、按字節(jié)排列的存儲(chǔ)器地址,IU再在該地址后面加上“地址空間標(biāo)志符(ASI)”以決定處理器是處于管理模式還是用戶模式,是訪問指令存儲(chǔ)器還是數(shù)據(jù)存儲(chǔ)器。134.芯片描述(IU)存儲(chǔ)器存取指令存儲(chǔ)器存取指令的目標(biāo)域指定是一個(gè)r寄存器,f寄存器,或者是協(xié)處理器寄存器(此寄存器提供存儲(chǔ)的數(shù)據(jù)或取得要載入的數(shù)據(jù))。144.芯片描述(IU)整數(shù)存取指令支持字節(jié)方式(8-bit)、半字方式(16-bit)、字方式(32-bit)和雙字方式(64-bit)。整數(shù)存取指令包括一些整數(shù)取數(shù)指令,用來(lái)從內(nèi)存中取得8位或16位的單精度數(shù)并放入目的寄存器中。浮點(diǎn)和協(xié)處理器存取指令支持字方式和雙字方式。154.芯片描述(IU)S698對(duì)半字的大于一個(gè)字節(jié)類型的數(shù)據(jù)采用高地址優(yōu)先存儲(chǔ)的方式。164.芯片描述(IU)算術(shù)運(yùn)算/邏輯運(yùn)算/移位指令
算術(shù)運(yùn)算/邏輯運(yùn)算/移位指令提供了算術(shù)運(yùn)算、邏輯運(yùn)算和移位操作。這些指令除“SETHI”指令之外,都包括2個(gè)操作碼,并由這2個(gè)操作碼運(yùn)算產(chǎn)生一個(gè)結(jié)果,這個(gè)結(jié)果或者放入目的寄存器中,或者丟棄。“SETHI”指令是一條專門的指令,用來(lái)和它后面的指令一起創(chuàng)建一個(gè)32位的常數(shù)并放入r寄存器中。174.芯片描述(IU)算術(shù)運(yùn)算/邏輯運(yùn)算/移位指令整數(shù)乘法指令提供有符號(hào)或無(wú)符號(hào)的32×32→64-bit操作。整數(shù)除法指令提供有符號(hào)或無(wú)符號(hào)的64÷32→32-bit操作。整數(shù)乘法指令和整數(shù)除法指令的結(jié)果會(huì)影響“PSR”的相應(yīng)位。被‘0’整除會(huì)產(chǎn)生一個(gè)“trap”。184.芯片描述(IU)讀/寫狀態(tài)寄存器指令讀/寫寄存器指令用來(lái)讀/寫用戶可見的狀態(tài)寄存器,也可讀/寫輔助狀態(tài)寄存器。194.芯片描述(IU)浮點(diǎn)運(yùn)算指令浮點(diǎn)運(yùn)算指令用來(lái)完成所有的浮點(diǎn)運(yùn)算。浮點(diǎn)運(yùn)算指令是寄存器到寄存器的指令,浮點(diǎn)運(yùn)算操作利用浮點(diǎn)寄存器進(jìn)行。象算術(shù)運(yùn)算指令/邏輯運(yùn)算指令和移位指令一樣,浮點(diǎn)運(yùn)算指令有1或2個(gè)源操作數(shù),并得出一個(gè)結(jié)果。20
5.CacheS698_ECR是“Harvard”結(jié)構(gòu)(指令和數(shù)據(jù)分開),地址總線和數(shù)據(jù)總線分開,分別連接到獨(dú)立的“cache”控制器上,除地址之外,SPARC處理器還生成一個(gè)8-bit的“地址空間標(biāo)志符”(ASI),可區(qū)分256個(gè)獨(dú)立的32位地址空間。在正常工作時(shí),按照SPARC標(biāo)準(zhǔn)定義,S698_ECR處理器在訪問指令和數(shù)據(jù)時(shí)使用ASI0x8-0xB。216.FPUS698_ECR的FPU提供遵循SPARCV8標(biāo)準(zhǔn)的全部浮點(diǎn)指令,其浮點(diǎn)數(shù)據(jù)的格式和浮點(diǎn)指令遵循ANSI/IEEE754-1985標(biāo)準(zhǔn)。FPU連接在IU上。FPU有32個(gè)32-bit的浮點(diǎn)“f”寄存器.。S698_ECR使用標(biāo)準(zhǔn)的LD/ST指令在FPU和存儲(chǔ)器之間移動(dòng)數(shù)據(jù)。存儲(chǔ)器地址由IU計(jì)算,浮點(diǎn)操作指令完成浮點(diǎn)算術(shù)運(yùn)算。227.AMBA總線S698_ECR內(nèi)部的AMBA總線包括2種總線:AHB和APB。APB總線用來(lái)訪問片內(nèi)外設(shè)的寄存器;AHB總線用作高速數(shù)據(jù)傳輸。237.AMBA總線
AHB總線
S698_ECR用AMBA-2.0AHB總線連接處理器cache控制器和其它的高速單元,IU是總線上唯一的主控單元。另外,還有其它從屬單元連接在總線上:存儲(chǔ)器控制器、AHB/APB轉(zhuǎn)換橋。247.AMBA總線
APB總線
AHB/APB轉(zhuǎn)換橋作為一個(gè)從屬設(shè)備連接在AHB總線上,是APB總線唯一的主控單元。處理器通過AHB/APB橋訪問大部分片內(nèi)外設(shè)。片內(nèi)外設(shè)包括:GPI口(80位)
4路UART4個(gè)定時(shí)器24位看門狗中斷控制器PS/2
I2C
SPI
3個(gè)智能卡控制器
1個(gè)磁卡控制器258.寄存器描述“寄存器窗口”這一概念是由UCBerkeley針對(duì)提高編譯器效率以及大量減少存儲(chǔ)器load/store指令而首先提出的。它將工作寄存器組成若干個(gè)窗口,建立起環(huán)形結(jié)構(gòu),利用重疊寄存器窗口技術(shù)來(lái)加快程序的運(yùn)轉(zhuǎn)。我們可以把窗口看作是一個(gè)用于傳遞參數(shù)以及存儲(chǔ)局部數(shù)據(jù)和返回地址的cache。利用寄存器窗口的重疊和當(dāng)前窗口的指針改變可以實(shí)現(xiàn)過程調(diào)用/返回時(shí)傳遞參數(shù)和結(jié)果的功能。268.寄存器描述:IU寄存器
IU通用目的寄存器(rregisters)S698_ECR的整型數(shù)處理單元包含136個(gè)32-bit的通用目的寄存器(r寄存器)。這些通用目的寄存器被分成8個(gè)global寄存器、8個(gè)16-寄存器組(也稱作寄存器窗口)。一個(gè)16-寄存器組又更進(jìn)一步的分成8個(gè)in寄存器和8個(gè)local寄存器.278.寄存器描述:IU寄存器IU通用目的寄存器(rregisters)
WindowAddressing288寄存器描述:IU寄存器寄存器窗口(rRegisters)
在特定的時(shí)間內(nèi),一條指令可以訪問136個(gè)r寄存器中的8個(gè)globals寄存器和一個(gè)寄存器窗口。其中,寄存器窗口是一個(gè)24-寄存器組,它包括一個(gè)由8個(gè)“in”寄存器和8個(gè)“l(fā)ocal”寄存器組成的16-寄存器組,和與它相鄰的16-寄存器組中的8個(gè)“in”寄存器(被當(dāng)前寄存器窗口設(shè)定為自己的“out”寄存器).298.寄存器描述:IU寄存器當(dāng)前的寄存器窗口在“處理器狀態(tài)寄存器(PSR)”中一個(gè)5-bit的“currentwindowpointer(CWP)”區(qū)設(shè)定,當(dāng)執(zhí)行“RESTORE(或RETT)”指令時(shí),CWP加1;當(dāng)執(zhí)行“SAVE”指令或產(chǎn)生一個(gè)trap時(shí),CWP的值減1。寄存器窗口上溢和下溢由“Windowinvalidmask(WIM)register”監(jiān)控。308.寄存器描述:IU寄存器寄存器窗口的重疊每個(gè)寄存器窗口都和與之相鄰的2個(gè)寄存器窗口共享ins寄存器和outs寄存器。CWP+1寄存器窗口的outs寄存器被設(shè)定為當(dāng)前寄存器窗口的ins寄存器;當(dāng)前寄存器窗口的outs寄存器則被設(shè)定為CWP-1寄存器窗口的ins寄存器。Locals寄存器對(duì)于每個(gè)寄存器窗口來(lái)說都是唯一的。318.寄存器描述:IU寄存器寄存器窗口的重疊
一個(gè)地址設(shè)定為“o”的“r”寄存器(其中8≤o≤15),和(CWP-1)下地址為“(o+16)”的寄存器,被認(rèn)為是同一個(gè)寄存器。(moduloNWINDOWS);同樣的,一個(gè)地址設(shè)定為“i”的“r”寄存器(24≤I≤31),和(CWP+1)下地址為“(i-16)”的寄存器,被認(rèn)為是同一個(gè)寄存器328.寄存器描述:IU寄存器寄存器窗口的重疊
S698_ECR包含8個(gè)寄存器窗口。編號(hào)最高的寄存器窗口(編號(hào)為7)與編號(hào)最低的寄存器窗口(編號(hào)為0)交迭在一起,即寄存器窗口7的ins寄存器與寄存器窗口0的outs寄存器是同一個(gè)寄存器。338.寄存器描述:IU寄存器34
9.IU控制/狀態(tài)寄存器
32位的IU控制/狀態(tài)寄存器包括:處理器狀態(tài)寄存器(PSR)、WindowInvalidMask寄存器(WIM)、TrapBase寄存器(TBR)、multiply/divide(Y)寄存器、programcounters(PCandnPC)、4個(gè)輔助狀態(tài)寄存器(ASRs)。359.IU控制/狀態(tài)寄存器處理器狀態(tài)寄存器(ProcessorStateRegister)PSR
32位的PSR包含若干個(gè)域,這些域控制處理器的操作或保存狀態(tài)信息。他們可以被
SAVE,RESTORE,Ticc,或RETT指令修改,特權(quán)指令RDPSR和WRPSR直接讀寫PSR寄存器。369.1處理器狀態(tài)寄存器(ProcessorStateRegister)PSR
PSR_implementation(impl)域這四位為只讀位,用來(lái)在硬件上確定,分類硬件體系架構(gòu)的實(shí)現(xiàn)。
PSR_version(ver)域這四位也為只讀位,標(biāo)記S698的版本號(hào)。
PSR_integer_cond_codes(icc)域這四位標(biāo)記IU的狀態(tài),他們可被以字母串cc結(jié)尾的算術(shù)邏輯指令或是WRPSR指令修改。Bicc和Ticc
指令可以引起基于此域的控制轉(zhuǎn)移。此域的格式定義如下:3710.1處理器狀態(tài)寄存器(ProcessorStateRegister)PSRPSR_negative(n)域:此位指示ALU的運(yùn)算結(jié)果是否要被忽略。1=忽略,0=不忽略。PSR_zero(z)域:對(duì)于ALU的最后一條修改了icc
域的指令,此位指示是否ALU的運(yùn)算結(jié)果為0。1=為零,0=不為零。PSR_overflow(v)域:對(duì)于ALU的最后一條修改了icc
域指令,此位指示ALU的結(jié)果是否在32位能表示的范圍內(nèi)。1=溢出;0=無(wú)溢出。PSR_carry(c)域:對(duì)于ALU的最后一條修改了icc
域的指令,此位指示是否指令的運(yùn)算的最后一位有借位或是進(jìn)位。1=有,0=?jīng)]有。389.1處理器狀態(tài)寄存器(ProcessorStateRegister)PSRPSR_reserved(r)域:此六位是保留位。如果被RDPSR指令讀,則返回0。為了以后擴(kuò)展兼容性,管理軟件可以通過WRPSR向此域?qū)懭?。PSR_enable_coprocessor(EC)域:此位決定協(xié)處理器是否被激活。如果沒被激活則會(huì)有一個(gè)與協(xié)處理器相關(guān)的Trap。1=支持,0=不支持。如果硬件沒實(shí)現(xiàn)協(xié)處理器,則此位始終為0,這時(shí)對(duì)此位的寫被忽略。PSR_enable_floating-point(EF)域:此位決定FPU是否被激活。如果沒被激活則會(huì)有一個(gè)與FPU相關(guān)的Trap。1=支持,0=不支持。如果硬件沒實(shí)現(xiàn)FPU,則此位始終為0,這時(shí)對(duì)此位的寫被忽略。399.1處理器狀態(tài)寄存器(ProcessorStateRegister)PSRPSR_proc_interrupt_level(PIL)域:此域指示CPU要接受中斷的級(jí)別。PSR_supervior(S)域:此為指示CPU是處于管理狀態(tài)還是用戶狀態(tài)。1=管理狀態(tài),0=用戶狀態(tài)。PSR__previous_supervior
(PS)域:此位保存當(dāng)前Trap所處的狀態(tài)值。1=管理狀態(tài),0=用戶狀態(tài)。PSR_enable_traps(ET)域:此位指示是否允許有Trap,如果當(dāng)前有Trap,則此Trap會(huì)自動(dòng)將此位置為0。0=忽略Trap,這時(shí)若有中斷請(qǐng)求則會(huì)被忽略,而且一個(gè)異常的Trap會(huì)使IU執(zhí)行掛起(halt)操作(此操作又觸發(fā)重啟Trap)。1=允許Trap。PSR_current_window_pointer(CWP)域:此五位為當(dāng)前寄存器窗口指針。當(dāng)發(fā)生Trap時(shí)或SAVE指令硬件會(huì)使CWP減少;RESTORE或RETT指令會(huì)CWP增加。409.2WindowInvalidMaskRegister(WIM)窗口掩碼寄存器:
WIM由管理軟件控制,被硬件使用來(lái)查看是否SAVE,RESTORE或RETT指令會(huì)引起窗口上溢(overflow)或下溢(underflow)Trap。
WIM[n]關(guān)聯(lián)n對(duì)應(yīng)的窗口。當(dāng)SAVE,RESTORE或RETT指令執(zhí)行,當(dāng)前CWP會(huì)和WIM比較,如果要轉(zhuǎn)到的是一個(gè)非法窗口,(即相應(yīng)的WIM位被置為1),則會(huì)轉(zhuǎn)入相應(yīng)的窗口上溢(overflow)或下溢(underflow)Trap。
WIM可被特權(quán)指令RDWIM讀取,被WRWIM指令寫入.419.3TrapBaseRegister(TBR)寄存器
此寄存器有三個(gè)域,每個(gè)域中都存放trap發(fā)生時(shí)要轉(zhuǎn)向的地址。TBR_trap_base_address(TBA)域:這20位存放trap地址表的高20位地址。這些位被管理軟件維護(hù),可以被WRTBR指令寫入。TBR_trap_type(tt)域:這8位存放trap的類型編碼。當(dāng)發(fā)生trap時(shí),這8位被硬件寫入,且一直保持此值到下一個(gè)trap到來(lái)。WRTBR指令對(duì)此域沒有影響。TBR_zero(0)域:這四位全為0,不受WRTBR指令的影響。這四位留作以后擴(kuò)展軟件使用WRTBR時(shí)應(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寄存器存放當(dāng)前IU運(yùn)行的指令的地址,nPC
寄存器存放下一個(gè)要運(yùn)行的指令的地址(特指沒發(fā)生的trap)。
PC被CALL和JMPL指令讀取。在一個(gè)trap中,PC和nPC
被寫入到兩個(gè)local寄存器中。449.6AncillaryStateRegister(ASR)-watchpointregistersS698使用四對(duì)ASR寄存器(%asr24/25,%asr26/27,%asr28/30,%asr30/31)實(shí)現(xiàn)了四個(gè)監(jiān)視點(diǎn)。由WADDR域定義的地址范圍都可以被監(jiān)視,這個(gè)地址范圍也可被WMASK域掩碼(WMASK[x]=1)激活匹配。在一個(gè)監(jiān)視點(diǎn)上,trap0x0B會(huì)被生成。通過設(shè)定IF,DL和DS位監(jiān)視hit可以在取指,數(shù)據(jù)存儲(chǔ)讀寫的時(shí)候發(fā)生。將此三位清0會(huì)有效的禁止此項(xiàng)功能。459.7FPU寄存器在S698中,F(xiàn)PU(浮點(diǎn)運(yùn)算單元)有32個(gè)32位的f寄存器(float-point)且被f[0]-f[31]來(lái)標(biāo)記。不像窗口化的r寄存器,在給定的時(shí)間內(nèi)指令可以訪問任意的f寄存器。f寄存器可以被處理整數(shù)的指令或浮點(diǎn)數(shù)的指令(Fpop1/Fpop2格式)訪問。469.7FPU寄存器雙精度和四精度操作數(shù)
一個(gè)單精度的f寄存器內(nèi)可存儲(chǔ)一個(gè)單精度的操作數(shù);雙精度操作數(shù)需要一個(gè)編號(hào)分別位奇數(shù)和偶數(shù)的f寄存器對(duì);四精度操作數(shù)需要一個(gè)含4個(gè)f寄存器的寄存器組。這樣,在某一給定時(shí)間這些f寄存器可以保存最多32個(gè)單精度數(shù),或16個(gè)雙精度數(shù),或8個(gè)四精度數(shù)。要使用訪問雙精度的浮點(diǎn)數(shù)的指令得保證雙精度的對(duì)齊規(guī)則:雙精度寄存器地址的最低位要為0或被軟件置為0;相似的,四精度寄存器地址的最低兩位要為0或被軟件置為0。479.7FPU寄存器推薦:若訪問了不符合對(duì)齊規(guī)則的f寄存器,需要產(chǎn)生trap(FSR.ftt=6)。
489.8浮點(diǎn)控制/狀態(tài)寄存器32位的FPU控制/狀態(tài)寄存器組包含F(xiàn)SR(Float-pointStateRegister即浮點(diǎn)狀態(tài)寄存器),其內(nèi)含有FPU的狀態(tài)信息,和一個(gè)可選的,獨(dú)立實(shí)現(xiàn)的浮點(diǎn)延遲Trap隊(duì)列(FQ)499.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器其內(nèi)含有狀態(tài)和模式信息,此寄存器被STFSR指令讀,LDFSR指令寫。FSR_rounding_direction(RD)域:
此域選擇浮點(diǎn)結(jié)果的逼近方向(roundingdirection)。509.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器FSR_unused(u)域:第29,28,12位(從0數(shù))不被使用而留作將來(lái)兼容擴(kuò)展,軟件應(yīng)該只使用指令LDFAR對(duì)這些位寫入0值。FSR_trap_enable_mask(TEM)域:此域有5位,用來(lái)允許5類浮點(diǎn)處理異常。當(dāng)發(fā)生某類的異常時(shí),此寄存器的cexc
域會(huì)指示發(fā)生的異常,如果TEM域的相應(yīng)位又為1,則會(huì)產(chǎn)生fp_exception
的trap;反之若置為0就會(huì)屏蔽,使之不會(huì)產(chǎn)生trap。519.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器FSR_nonstandard_fp(NS)域此位為S698的保留位。FSR_version(ver)域這三位保存S698的實(shí)現(xiàn)版本信息。529.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器FSR_floating-point_trap_type(ftt)域:此域保存浮點(diǎn)處理異常的類型。當(dāng)一個(gè)浮點(diǎn)處理的異常產(chǎn)生之后,ftt
域保存異常的類型直到STFSR或Fpop
被執(zhí)行,ftt
域可以被STFSR指令讀,LDFSR指令對(duì)此域沒有影響。若由管理模式的軟件處理浮點(diǎn)Trap,則其必須執(zhí)行一個(gè)STFSR去確定浮點(diǎn)Trap的類型。STFSR是否會(huì)將ftt
域清0,由芯片設(shè)計(jì)時(shí)決定。如果STFSR不會(huì)將此域清0,則處理Trap的管理軟件要保證在用戶態(tài)時(shí),后來(lái)執(zhí)行STFSR域會(huì)返回ftt
域的值為0。注意:盡管在返回用戶態(tài)前執(zhí)行了一個(gè)不會(huì)產(chǎn)生trap的FPop(此指令能將ftt
清0如fmovs
%f0,%f0),因?yàn)長(zhǎng)DFSR指令不會(huì)改變ftt
域則其不可用來(lái)處理ftt
域。ftt
域在下一條FPop
指令執(zhí)行前都是有效的。
539.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器此域?qū)Ω↑c(diǎn)Trap類型的編碼如下:549.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器
在正常的運(yùn)算過程中不希望出現(xiàn)硬件錯(cuò)誤或是sequence_error,它們?cè)谟脩魬?yīng)用程序中都是不可恢復(fù)的。相反,IEEE_745異常、不完整的FPop
和未實(shí)現(xiàn)的FPop
錯(cuò)誤偶爾會(huì)希望出現(xiàn)在正常的運(yùn)算處理中。且可用管理軟件恢復(fù)。當(dāng)浮點(diǎn)類型的trap發(fā)生時(shí),會(huì)有:
1)aexc
域的值不被改變。
2)cexc
域也不會(huì)改變,除了發(fā)生IEEE_745異常時(shí)的相應(yīng)位被置位。不完整的FPop、未被實(shí)現(xiàn)的FPop
或是sequence_error
不會(huì)影響此域。
3)源f寄存器不會(huì)改變。(一般通過不改變目標(biāo)f寄存器來(lái)實(shí)現(xiàn))
4)fcc
域不會(huì)改變。如果不完整的FPop
或未實(shí)現(xiàn)的FPop
不產(chǎn)生IEEE的Trap,則處理恢復(fù)的軟件得定義cexc,aexc或目標(biāo)r寄存器,fcc。559.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器ftt=IEEE_745_exception時(shí)IEEE_745浮點(diǎn)異常由ANSI/IEEE標(biāo)準(zhǔn)定義。此類型在cexc
域標(biāo)記。注意:aexc,fcc,和目標(biāo)f寄存器不受IEEE_745異常trap的影響。ftt=unfinished_FPop
時(shí)這種情況指示FPU不能產(chǎn)生IEEE定義的結(jié)果或異常。這樣cexc
域就不會(huì)被改變。ftt=unimplemented_FPop
時(shí)這時(shí)說明FPU的一個(gè)FPop
沒有被實(shí)現(xiàn)。569.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器ftt=sequence_error
時(shí)sequence_error
指示三種FPU非正常錯(cuò)誤條件中的一種,它們由管理軟件的錯(cuò)誤操作引起:
1)執(zhí)行一個(gè)沒有“浮點(diǎn)延遲trap隊(duì)列”(FQ)的STDFQ指令。
2)執(zhí)行一個(gè)FPU不能接受的指令。這種類型的隊(duì)列錯(cuò)誤源于管理軟件的邏輯錯(cuò)誤(這種邏輯錯(cuò)誤已經(jīng)產(chǎn)生了一個(gè)浮點(diǎn)Trap),如前一個(gè)浮點(diǎn)trap執(zhí)行完后浮點(diǎn)隊(duì)列沒有被清空。
3)當(dāng)FSR.qne=0,即FQ為空時(shí),執(zhí)行STDFQ指令。(推薦產(chǎn)生隊(duì)列錯(cuò)誤,但這里不需要)ftt=hardware_error
時(shí)此錯(cuò)誤表明FPU監(jiān)測(cè)到一個(gè)災(zāi)難性的內(nèi)部錯(cuò)誤(如非法狀態(tài)或f寄存器的奇偶錯(cuò)誤)。如果執(zhí)行用戶程序時(shí)發(fā)生這樣的錯(cuò)誤,就不可能恢復(fù)到正確的狀態(tài)繼續(xù)執(zhí)行。ftt=invalid_fp_register
時(shí)一個(gè)invalid_fp_register
的trap類型表明FPop
的操作數(shù)“沒有對(duì)齊”(如雙精度寄存器的地址或四精度寄存器地址非法)。推薦芯片設(shè)計(jì)時(shí)在這種情況下(FSR.ftt=invalid_fp_register)產(chǎn)生fp_exception
的trap。579.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器FSR_FQ_not_empty(qne)域:延遲的fp_exception
類的trap之后或執(zhí)行完雙精度浮點(diǎn)隊(duì)列存儲(chǔ)指令(STDFQ)之后,此位指示是否FQ為空。qne=0時(shí)FQ為空;qne=1時(shí)FQ為非空。此位可被STFSR指令讀,且不受LDFSR指令的影響。然而,執(zhí)行一段STDFQ指令會(huì)使FQ變空(qne=0)。如果設(shè)計(jì)芯片時(shí)沒有實(shí)現(xiàn)FQ,讀此位會(huì)返回0。管理軟件必須要維護(hù)此位使得在用戶態(tài)讀此位時(shí)總返回0。589.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器FSR_fp_condition_codes(fcc)域:這兩位包含F(xiàn)PU的環(huán)境信息。這兩位被浮點(diǎn)比較指令(FCMP和FCMPE)更新;被STFSR指令讀;被LDFSR指令寫。FBfcc
根據(jù)此域跳轉(zhuǎn)。上表中frs1和frs2與指令的rs1和rs2域指定的f寄存器中的值有關(guān)。表中的問號(hào)指示無(wú)序的關(guān)系,如果frs1或frs2是signalingNaN
或quiteNaN,問號(hào)就表示true。注意:當(dāng)FCMP或FCMPE產(chǎn)生IEEE_754_exception的trap時(shí),fcc
就不會(huì)被改變。599.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器FSR_accrued_exception(aexc)域:當(dāng)fp_exception
的trap被屏蔽時(shí)(利用TEM域),這5位累積IEEE_745定義的浮點(diǎn)異常。FPop指令執(zhí)行完后,TEM域和cexc
域要被邏輯與。如果結(jié)果為非0,則產(chǎn)生fp_exception
的trap;否則cexc
與aexc
要被邏輯或且將其結(jié)果放入aexc
域。因此,當(dāng)trap被屏蔽,異常就會(huì)被積累在aexc
域。FSR_current_exception(cexc)域:這5位指示一個(gè)或更多的IEEE_745浮點(diǎn)異常(由最近執(zhí)行過的FPop
指令產(chǎn)生)。對(duì)于沒被產(chǎn)生的異常,相應(yīng)位被清0。609.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器619.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器FSR_invalid(nvc,nva)域:此位指示是否操作數(shù)非法。如0÷0等。1=無(wú)效的操作數(shù);0=有效的操作數(shù)。FSR_overflow(ofc,ofa)域:當(dāng)結(jié)果比正常能表示的數(shù)大時(shí),會(huì)發(fā)生向上溢出。1=上溢,0=無(wú)上溢。FSR_underflow(ufc,ufa)域:當(dāng)結(jié)果比正常能表示的最小的數(shù)還小時(shí)會(huì)發(fā)生向下溢出。1=下溢,0=無(wú)下溢。當(dāng)結(jié)果是0時(shí),就不能判斷是否發(fā)生下溢。然而:如果UFM=0:當(dāng)運(yùn)算結(jié)果要比寄存器能正常表示的數(shù)還要小時(shí),ufc
和ufa
位會(huì)被置為1。nxc和nxa
總是被置位。如果UFM=1:當(dāng)運(yùn)算結(jié)果要比寄存器能正常表示的數(shù)還要小時(shí),會(huì)產(chǎn)生一個(gè)trap629.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器FSR_division-by-zero(dzc,dza)域:
X÷0,無(wú)論X位正?;虻陀谡5臄?shù),都不是合法的。此位指示是否發(fā)生0為除數(shù)的情況。1=(0為除數(shù));0=(0不為除數(shù))。但是0÷0時(shí)dzc
為不會(huì)被置位。FSR_inexact(nxc,nxa)域:此域指示rounded的結(jié)果和精確的結(jié)果是否一致:1=不一致,0=一致。FSRConformance域:實(shí)現(xiàn)TEM,cexc
和aexc
域的硬件方法有兩種:
1)根據(jù)ANSI/IEEE標(biāo)準(zhǔn)745-1985實(shí)現(xiàn)。
2)根據(jù)ANSI/IEEE標(biāo)準(zhǔn)實(shí)現(xiàn)NXM,nxa
和nxc
位,實(shí)現(xiàn)剩下的位可以根據(jù):
a)根據(jù)ANSI/IEEE標(biāo)準(zhǔn)745-1985實(shí)現(xiàn)。
b)作為一個(gè)可以被軟件置位的狀態(tài)位,這樣的位應(yīng)該:*)IEEE關(guān)聯(lián)的位一定要能引起異常(一個(gè)FPop
不完整的異常)。在trap控制器處理異常時(shí),狀態(tài)域的相應(yīng)位可以被LDFSR指令寫。而且若此位被LDFSR指令寫成某個(gè)特定值,然后用STFSR指令去讀時(shí)得保證與寫入的一致。639.8Float-PointStateRegister(FSR)即浮點(diǎn)狀態(tài)寄存器Floating-PointDeferred-TrapQueue(FQ)――浮點(diǎn)延遲Trap隊(duì)列:
如果FQ被實(shí)現(xiàn),那么FQ中會(huì)含有足夠的信息來(lái)實(shí)現(xiàn)可恢復(fù)浮點(diǎn)延遲trap。如果要實(shí)現(xiàn)浮點(diǎn)運(yùn)算和整數(shù)運(yùn)算的并發(fā),就要提供浮點(diǎn)隊(duì)列。
FQ可被特權(quán)的STDFQ指令(storedoublefloating-pointqueue)讀。在芯片設(shè)計(jì)時(shí)也可用特權(quán)的LDDA,STDA(load/storedoublealternate)指令對(duì)FQ寫;也可用RDASR或WRASR指令(read/writeAncillaryStateRegiter
)對(duì)之進(jìn)行讀寫。
FQ有各種實(shí)現(xiàn)方式,但管理軟件要能夠通過讀FQ推斷出產(chǎn)生異常的指令的opcode,操作數(shù)和地址。若沒有實(shí)現(xiàn)FQ功能,則FSR的qne
位總為0,且STDFQ指令產(chǎn)生fp_exception,FSR.ftt=4(sequence_error)649.9系統(tǒng)寄存器:存儲(chǔ)器配置寄存器1(MCFG1)[3:0]:Promreadwaitstates(PROM讀等待周期)。配置PROM讀周期時(shí)等待周期的值。
(“0000”=0,“0001”=1,…“1111”=15);[7:4]:Promwritewaitstates(PROM寫等待周期)。配置PROM寫周期時(shí)等待周期的值。(“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)寄存器:存儲(chǔ)器配置寄存器1(MCFG1)[23:20]:I/Owaitstates
(I/O區(qū)訪問等待周期)。配置訪問I/O區(qū)時(shí)等待周期的值(“0000”=0,“0001”=1,“0010”=2,…,“1111”=15);[25]:Buserror(BEXC*)enable(總線錯(cuò)誤使能);[26]:Busready(BRDY*)enable(總線準(zhǔn)備好使能);[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)寄存器:存儲(chǔ)器配置寄存器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]:總線準(zhǔn)備好使能。如果設(shè)置為‘1’,RAM區(qū)的BRDY*信號(hào)有效。679.9系統(tǒng)寄存器:存儲(chǔ)器配置寄存器2(MCFG2)[12:9]:RAMbank大小。配置RAMbank的大小[13]:SI–SRAM禁止位。如果配置為‘0’,則SRAM訪問被激活;如果配置為‘1’,則下表所列的信號(hào)用作GPI口。當(dāng)加電或復(fù)位時(shí),該位為‘0’;保留;[15]:extmod。使存儲(chǔ)器地址空間從20-bit擴(kuò)展到24-bit。當(dāng)該位設(shè)置為‘1’時(shí),GPI2[3:0]用作地址線A[23:20]。當(dāng)系統(tǒng)加電或復(fù)位時(shí),該位為‘0’。[20:31]:保留;當(dāng)ROM、I/O、和SRAM數(shù)據(jù)總線同時(shí)為8位或16位時(shí),數(shù)據(jù)總線d(23:0)或d(15:0)作為GPI口使用。689.9系統(tǒng)寄存器:存儲(chǔ)器配置寄存器3(MCFG3)[31:0]:保留;699.9系統(tǒng)寄存器:AHB錯(cuò)誤地址寄存器
當(dāng)AHB總線上發(fā)生訪問錯(cuò)誤時(shí),訪問的地址被存入AHB錯(cuò)誤地址寄存器。709.9系統(tǒng)寄存器:AHB狀態(tài)寄存器
當(dāng)AHB總線上發(fā)生訪問錯(cuò)誤時(shí),訪問和錯(cuò)誤類型被存入AHB狀態(tài)寄存器。當(dāng)AHB總線訪問錯(cuò)誤產(chǎn)生時(shí),該寄存器被更新,NE位被設(shè)置為‘1’,中斷控制器產(chǎn)生中斷1通知處理器有AHB
總線訪問錯(cuò)誤,錯(cuò)誤處理后,NE位必須軟件復(fù)位。
[8]:NE–新錯(cuò)誤。當(dāng)新的錯(cuò)誤產(chǎn)生時(shí)被置為‘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進(jìn)制,二進(jìn)制為00000110)72S698內(nèi)部資源簡(jiǎn)介片內(nèi)SRAMPS/2接口控制器通用輸入/輸出接口定時(shí)器時(shí)鐘機(jī)制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進(jìn)制,二進(jìn)制為00000110)75
PS/2接口控制器(1):概述
在傳統(tǒng)的計(jì)算機(jī)中,PS/2接口應(yīng)用廣泛,它常用做鍵盤接口和鼠標(biāo)接口。一般,具有五腳連接器的鍵盤稱之為AT鍵盤,而具有六腳mini-din連接器的鍵盤則稱之為PS/2鍵盤。其實(shí)這兩種連接器都只有四個(gè)腳有意義。它們分別是Clock(時(shí)鐘腳)、Data(數(shù)據(jù)腳)、+5V(電源腳)和Ground(電源地)。在PS/2鍵盤與主機(jī)的物理連接上只要保證這四根線一一對(duì)應(yīng)就可以了。76PS/2接口控制器(1):概述PS/2鍵盤靠主機(jī)的PS/2端口提供+5V電源,另外兩個(gè)腳Clock(時(shí)鐘腳)和Data(數(shù)據(jù)腳)都是集電極開路的,所以必須接大阻值的上拉電阻。它們平時(shí)保持高電平,有輸出時(shí)才被拉到低電平,之后自動(dòng)上浮到高電平。77PS/2接口控制器(2):PS/2接口協(xié)議PS/2通訊協(xié)議是一種雙向同步串行通訊協(xié)議。通訊的兩端通過Clock(時(shí)鐘腳)同步,并通過Data(數(shù)據(jù)腳)交換數(shù)據(jù)。任何一方如果想抑制另外一方通訊時(shí),只需要把Clock(時(shí)鐘腳)拉到低電平。如果是主機(jī)和PS/2鍵盤間的通訊,則主機(jī)必須做主機(jī),也就是說,主機(jī)可以抑制PS/2鍵盤發(fā)送數(shù)據(jù),而PS/2鍵盤則不會(huì)抑制主機(jī)發(fā)送數(shù)據(jù)。78PS/2接口控制器(2):PS/2接口協(xié)議一般兩設(shè)備間傳輸數(shù)據(jù)的最大時(shí)鐘頻率是33KHz,大多數(shù)PS/2設(shè)備工作在10~20KHz。推薦值在15KHz左右,也就是說,Clock(時(shí)鐘腳)高、低電平的持續(xù)時(shí)間都為40μs。79PS/2接口控制器(2):PS/2接口協(xié)議每一數(shù)據(jù)幀含11~12個(gè)位,具體含義如表1:1個(gè)起始位總是邏輯08個(gè)數(shù)據(jù)位低位在前1個(gè)奇、偶校驗(yàn)位奇校驗(yàn)1個(gè)停止位總是邏輯11個(gè)應(yīng)答位僅用在主機(jī)對(duì)設(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(時(shí)鐘腳)和Data(數(shù)據(jù)腳)都是集電極開路的,平時(shí)都是高電平。當(dāng)PS/2設(shè)備等待發(fā)送數(shù)據(jù)時(shí),它首先檢查Clock(時(shí)鐘腳)以確認(rèn)其是否為高電平。如果是低電平,則認(rèn)為是主機(jī)抑制了通訊,此時(shí)它必須緩沖需要發(fā)送的數(shù)據(jù)直到重新獲得總線的控制權(quán)(一般PS/2鍵盤有16個(gè)字節(jié)的緩沖區(qū),而PS/2鼠標(biāo)只有一個(gè)緩沖區(qū)僅存儲(chǔ)最后一個(gè)要發(fā)送的數(shù)據(jù))82PS/2接口控制器(3):
Ps/2接口通信操作如果Clock(時(shí)鐘腳)為高電平,PS/2設(shè)備便開始將數(shù)據(jù)發(fā)送到主機(jī)。一般都是由PS/2設(shè)備產(chǎn)生時(shí)鐘信號(hào)。發(fā)送時(shí)一般都是按照數(shù)據(jù)幀格式順序發(fā)送。其中數(shù)據(jù)位在Clock(時(shí)鐘腳)為高電平時(shí)準(zhǔn)備好,在Clock(時(shí)鐘腳)的下降沿被主機(jī)讀入。83PS/2接口控制器(3):
Ps/2接口通信操作PS/2設(shè)備到主機(jī)的通訊時(shí)序如圖2。84PS/2接口控制器(3):
Ps/2接口通信操作當(dāng)時(shí)鐘頻率為15KHz時(shí),從Clock(時(shí)鐘腳)的上升沿到數(shù)據(jù)位轉(zhuǎn)變時(shí)間至少要5μs。數(shù)據(jù)變化到Clock(時(shí)鐘腳)下降沿的時(shí)間至少也有5μs,但不能大于25μs,這是由PS/2通訊協(xié)議的時(shí)序規(guī)定的。如果時(shí)鐘頻率是其它值,參數(shù)的內(nèi)容應(yīng)稍作調(diào)整。85PS/2接口控制器(3):
Ps/2接口通信操作3、按鍵的識(shí)別按鍵的識(shí)別是通過掃描碼(ScanCode)來(lái)判斷的。掃描碼可以分為:MakeCode(通碼),BreakCode(斷碼)。當(dāng)鍵盤上有鍵被按下,松開,按住,鍵盤將產(chǎn)生掃描碼(ScanCode),這些掃描碼將被i8048直接得到。掃描碼有兩種,MakeCode和BreakCode。當(dāng)一個(gè)鍵被按下或按住時(shí)產(chǎn)生的是MakeCode,當(dāng)一個(gè)鍵被松開產(chǎn)生的是BreakCode。86PS/2接口控制器(3):
Ps/2接口通信操作每個(gè)鍵被分配了唯一的MakeCode和BreakCode,這樣主機(jī)通過掃描碼就可以知道是哪一個(gè)鍵。簡(jiǎn)單的說就是按下鍵,產(chǎn)生一個(gè)MakeCode。松開鍵,產(chǎn)生一個(gè)BreakCode。當(dāng)按住一個(gè)鍵不放時(shí),將會(huì)Typematic(機(jī)打),也就是自動(dòng)打。每隔一定時(shí)間,自動(dòng)產(chǎn)生一個(gè)被按住的鍵的MakeCode,直到最后松開該鍵。87PS/2接口控制器(3):
Ps/2接口通信操作而對(duì)于同時(shí)按下多個(gè)鍵的情況:在一個(gè)鍵被按下,產(chǎn)生了MakeCode,而沒有被松開,沒有產(chǎn)生BreakCode的時(shí)候,再按下另一個(gè)鍵,于是產(chǎn)生了另一個(gè)鍵的MakeCode,就算是這兩個(gè)鍵被同時(shí)按下。之后,這兩個(gè)鍵松開時(shí),各自產(chǎn)生各自的BreakCode。而對(duì)于按一個(gè)鍵不放的時(shí)候,再按另一個(gè)鍵的情況:我們可以打開一個(gè)記事本,把'a'鍵按住不放,不要松開,然后再按's'鍵不放。我們可以看到當(dāng)按下's'時(shí),'a'鍵并沒有松,但是并沒有'a'再出現(xiàn)了,而是's'開始出現(xiàn),這時(shí)即使松開了's','a'也不會(huì)繼續(xù)出現(xiàn)了。88PS/2接口控制器(3):
Ps/2接口通信操作到目前為止,一共有三套掃描碼集(ScanCodeSet),ps/2鍵盤默認(rèn)使用第二套。按照鍵的MakeCode的值的大小,列出了第二套掃描碼集中的所有掃描碼。如表3(下頁(yè))。89PS/2接口控制器(3):
Ps/2接口通信操作表3:第二套掃描碼集注:所有的值都是十六進(jìn)制的。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è)備的當(dāng)前狀態(tài),其寬度也為8位。表4:狀態(tài)寄存器STRSTR地址:0X800002a4R95PS/2接口控制器(3):
PS/2控制器寄存器7位:0;TxTO:發(fā)送時(shí)間溢出表示鍵盤或鼠標(biāo)沒有接收輸入(鍵盤或鼠標(biāo)可能沒有連接),當(dāng)讀取狀態(tài)寄存器后,該位被清‘0’;當(dāng)發(fā)生發(fā)送時(shí)間溢出時(shí),PS/2控制器將保持該狀態(tài),并拉低數(shù)據(jù)線,直到執(zhí)行自測(cè)試操作或系統(tǒng)復(fù)位。0:無(wú)錯(cuò)誤–鍵盤或鼠標(biāo)能夠接收全部數(shù)據(jù)。1:時(shí)間溢出錯(cuò)誤–鍵盤或鼠標(biāo)在15ms的“請(qǐng)求發(fā)送”脈沖后仍沒有產(chǎn)生時(shí)鐘信號(hào)。96PS/2接口控制器(3):
PS/2控制器寄存器RxTO:接收時(shí)間溢出表示鍵盤或鼠標(biāo)沒有響應(yīng)命令。當(dāng)讀取“狀態(tài)寄存器”后,該位被清‘0’;當(dāng)發(fā)生接收時(shí)間溢出時(shí),PS/2控制器將保持該狀態(tài),直到執(zhí)行自測(cè)試操作或系統(tǒng)復(fù)位。0:無(wú)錯(cuò)誤1:接收時(shí)間溢出錯(cuò)誤—鍵盤或鼠標(biāo)在收到命令后20ms內(nèi)沒有產(chǎn)生時(shí)鐘信號(hào)。97PS/2接口控制器(3):
PS/2控制器寄存器Kbd_inhibit:鍵盤或鼠標(biāo)接口禁止位表示鍵盤或鼠標(biāo)接口通訊是否被禁止。0:KeyboardClock=0–鍵盤通訊被禁止。1:KeyboardClock=1–鍵盤通訊沒有被禁止。System_flag:systemflag主機(jī)通過讀取該位確定鍵盤或鼠標(biāo)是加電復(fù)位還是軟件復(fù)位。0:加電復(fù)位1:鍵盤或鼠標(biāo)已經(jīng)初始化。98PS/2接口控制器(3):
PS/2控制器寄存器Tr_full:發(fā)送緩存滿0:發(fā)送緩存空–允許寫TXR。1:發(fā)送緩存滿–不允許寫TXR。
Rr_full:接收緩存滿表示RXR中有數(shù)據(jù)收到,當(dāng)讀取RXR后,該位被清‘0’。0:接收緩存空–RXR中沒有接收到數(shù)據(jù)。1:接收緩存滿–RXR中接收到了新的數(shù)據(jù)。99PS/2接口控制器(3):
PS/2控制器寄存器3、命令寄存器CMDRCMDR命令寄存器存儲(chǔ)控制標(biāo)志,對(duì)寄存器控制要使用ReadCommandByte命令讀,使用WriteCommandByte命令寫。表5:命令寄存器CMDRCMDR地址:0X800002a4W100PS/2接口控制器(3):
PS/2控制器寄存器命令通過寫PS/2控制器的TXR來(lái)送給PS/2控制器。首先,往“命令寄存器”中寫入0x60,然后把命令寫入TXR;也就是說,當(dāng)在“命令寄存器”中寫入0x60后,寫入TXR中的數(shù)據(jù)將改變PS/2控制器的配置字。當(dāng)配置PS/2控制器時(shí),TXR中數(shù)據(jù)的各位含義如下所示:101PS/2接口控制器(3):
PS/2控制器寄存器7位:保留。Translate:Enables/disablestranslationtoset1scancodes0:Translationdisabled-Dataappearsatinputbufferexactlyasreadfromkeyboard.1:Translationenabled-Scancodestranslatedtoset1beforeputininputbuffer.102PS/2接口控制器(3):
PS/2控制器寄存器Enable:禁止/使能鍵盤或鼠標(biāo)接口。0:使能–鍵盤或鼠標(biāo)接口使能1:禁止–所有的鍵盤或鼠標(biāo)通訊都被禁止。SYSTEM:用來(lái)強(qiáng)制設(shè)置/清除“狀態(tài)寄存器”中的系統(tǒng)標(biāo)志位。0:Power-onvalue-TellsHOSTtoperformpower-ontests/initialization.1:BATcodereceived-TellsHOSTtoperform"warmboot"tests/initiailization103PS/2接口控制器(3):
PS/2控制器寄存器IE:中斷使能位如設(shè)置為‘1’,則當(dāng)RXR收到數(shù)據(jù)、發(fā)送時(shí)間溢出、接收時(shí)間溢出時(shí),產(chǎn)生一個(gè)中斷。0:中斷禁止1:中斷使能104PS/2接口控制器(3):
PS/2控制器寄存器105PS/2接口控制器(3):
PS/2控制器寄存器106PS/2接口控制器(3):
PS/2控制器寄存器107PS/2接口控制器(3):
PS/2控制器寄存器4、分頻寄存器DVDRDVDR寄存器存儲(chǔ)分頻參數(shù),如表6。對(duì)于DVDR中的分頻參數(shù)值,須采用下面的方式計(jì)算:DVDR=5×fmDVDR:表示分頻參數(shù)的整數(shù)值。fm:PS/2控制器從內(nèi)部接收到的輸入頻率。表6:分頻寄存器DVDRDVDR地址:0X800002a8W/R108PS/2接口控制器(3):
PS/2控制器寄存器5、發(fā)送緩沖寄存器TXRTXR發(fā)送緩存,一個(gè)字節(jié)的輸出緩沖區(qū)包含要寫到鍵盤的字節(jié)。表7:發(fā)送緩沖寄存器TXRTXR地址:0X800002a0W109PS/2接口控制器(3):
PS/2控制器寄存器6、接收緩沖寄存器RXRRXR發(fā)送緩存,一個(gè)字節(jié)的輸入緩沖區(qū)包含從鍵盤讀入的字節(jié)。表8:接收緩沖寄存器RXRRXR地址:0X800002a0R110PS/2接口控制器(4):
PS/2信號(hào)PS2_DATAPS/2數(shù)據(jù)輸入/輸出信號(hào),雙向OD門。
PS2_CLKPS/2時(shí)鐘輸出信號(hào)。111
I/O端口(1):概述
處理器通過I/O口和外圍硬件連接。S698-ECR芯片的I/O口通常都是和其他引腳復(fù)用的。S698-ECR處理器具有80個(gè)多功能的GPIO,他們分別是:一個(gè)32位的GPIO端口0;一個(gè)32位的GPIO端口1;一個(gè)16位的GPIO端口2。112I/O端口(1):概述每組端口都可以通過軟件配置不同的系統(tǒng)和設(shè)計(jì)需要。系統(tǒng)上電時(shí),所有的GPIO口都被設(shè)置為輸入功能。如果某些管腳的復(fù)用功能沒有使用,則可以作為GPIO口使用,如果被使用為其他復(fù)用功能,則相應(yīng)的GPIO口必須被設(shè)置為輸入端口。113I/O端口(2):端口功能配置每個(gè)端口都可通過軟件設(shè)置來(lái)滿足各種各樣的系統(tǒng)設(shè)置和設(shè)計(jì)要求。每個(gè)端口的功能通常都要在主程序開始前被定義。如果一個(gè)引腳的多功能沒有使用,那么這個(gè)引腳將被設(shè)置為I/O端口。在引腳配置前,需要對(duì)引腳的初始化狀態(tài)進(jìn)行設(shè)定,以避免出現(xiàn)一些問題。表9是S698-ECRI/O端口總的設(shè)置情況。114I/O端口(2):端口功能配置表9:S698-ECRI/O端口總的設(shè)置情況115I/O端口(2):端口功能控制描述I/O端口的各種功能主要是通過對(duì)端口的各個(gè)寄存器進(jìn)行設(shè)置而實(shí)現(xiàn)的,下面通過對(duì)各個(gè)寄存器的說明來(lái)分別介紹I/O端口實(shí)現(xiàn)的功能。116I/O端口(2):端口功能控制描述1、端口方向寄存器每一個(gè)寄存器都是32位的,寄存器中每一位都對(duì)應(yīng)著相應(yīng)的GPIO口,比如GPIO0的數(shù)據(jù)寄存器中的第‘0’位就控制著GPIO0[31:0]端口的第一個(gè)GPIO[0]。使用前首先確認(rèn)GPIO口作為何種功能,如果作為復(fù)用功能,則其方向寄存器必須被設(shè)置為輸入狀態(tài)。當(dāng)方向寄存器的某一位為‘1’,則其對(duì)應(yīng)的GPIO口就為輸出功能,反之設(shè)為‘0’,為輸入功能。117I/O端口(2):端口功能控制描述2、端口數(shù)據(jù)寄存器在GPIO口通過方向寄存器被設(shè)置為輸入功能時(shí),可以通過讀取數(shù)據(jù)寄存器了解當(dāng)前端口的狀態(tài),‘0’為低電平,‘1’為高電平。在GPIO口通過方向寄存器被設(shè)置為輸出功能時(shí),可以通過寫數(shù)據(jù)寄存器控制當(dāng)前輸出狀態(tài),‘0’為輸出低電平,‘1’為輸出高電平。118I/O端口(2):端口功能控制描述3、外部中斷懸掛寄存器當(dāng)一個(gè)中斷產(chǎn)生時(shí),“中斷懸掛寄存器”中相應(yīng)的位被置‘1’。懸掛的位與“中斷屏蔽寄存器”相“與”后轉(zhuǎn)送到優(yōu)先級(jí)選擇器。級(jí)別1的優(yōu)先級(jí)高于級(jí)別0。在每個(gè)級(jí)別中,中斷又按照硬件優(yōu)先級(jí)先后的順序區(qū)分。中斷15的優(yōu)先級(jí)最高,中斷1的優(yōu)先級(jí)最低。級(jí)別1中優(yōu)先級(jí)最高的中斷被送往IU,如果級(jí)別1中沒有中斷,則級(jí)別0中優(yōu)先級(jí)最高的中斷被送往IU,當(dāng)IU相應(yīng)該中斷后,“中斷懸掛寄存器”中相應(yīng)的位將自動(dòng)被清‘0’119I/O端口(2):端口功能控制描述4、外部中斷配置寄存器外部中斷寄存器為外部中斷設(shè)置了信號(hào)觸發(fā)方法選擇位,也設(shè)置了觸發(fā)信號(hào)的極性選擇位。GPIO中斷通過中斷信號(hào)過濾模塊連接在中斷控制器1的第4號(hào)至第7號(hào)中斷上,GPIO中斷可通過軟件設(shè)定為高電平觸發(fā)、低電平觸發(fā)、上升沿觸發(fā)和下降沿觸發(fā)。利用5.1K電阻分別將GPIO[0:3]上拉至高電平,利用軟件分別將中斷控制器1的第4號(hào)中斷至第7號(hào)中斷分配到GPIO[0:3]上,同時(shí)設(shè)定相應(yīng)的觸發(fā)條件,利用低電平分別觸發(fā)這四個(gè)中斷。120
I/O端口(3):特殊功能寄存器
1、外部中斷懸掛寄存器外部中斷懸掛寄存器如表10所示,它以各個(gè)位設(shè)置為‘1’來(lái)判斷中斷是否掛起;表10:外部中斷懸掛寄存器121I/O端口(3):特殊功能寄存器2、外部中斷配置寄存器為信號(hào)觸發(fā):高電平觸發(fā)、低電平觸發(fā)、上升沿觸發(fā)和下降沿觸發(fā)。122定時(shí)器(1):概述S698-ECR內(nèi)嵌4個(gè)24位的通用目的定時(shí)器(定時(shí)器1、2、3&4)。定時(shí)器3&4的功能與S698、S698M片內(nèi)定時(shí)器完全一致;定時(shí)器1&2能夠產(chǎn)生占空比可調(diào)的輸出波形,并通過相應(yīng)的輸出引腳(TMROUT[1:0])輸出。并可通過外部輸入的門控信號(hào)(TMRIN[1:0])控制定時(shí)器1&2的輸出。定時(shí)器1&2的輸出波形的占空比通過2個(gè)24位的“定時(shí)器波形參數(shù)配置寄存器1&2”設(shè)定。123定時(shí)器(1):概述例如:如果定時(shí)器1的“預(yù)置數(shù)重載寄存器”配置為15、“定時(shí)器波形參數(shù)配置寄存器1”配置5(T1)、“定時(shí)器波形參數(shù)配置寄存器2”配置為10(T2),則定時(shí)器1或定時(shí)器2產(chǎn)生的波形如圖1所示:圖1:定時(shí)器1或定時(shí)器2產(chǎn)生的波形124定時(shí)器(2):工作原理S698-ECR平臺(tái)提供4個(gè)定時(shí)器,使用時(shí)先設(shè)定Prescalercounter和Prescalerreload
、Timercounter和Timerreload寄存器、設(shè)定Timercontrol寄存器,設(shè)為Mo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- SZSD01 0006-2024國(guó)際貿(mào)易商品追溯平臺(tái)建設(shè)指南
- 2024年軌道交通服務(wù)項(xiàng)目評(píng)估分析報(bào)告
- 2023年醫(yī)用中心供氧設(shè)備項(xiàng)目評(píng)估分析報(bào)告
- 2024屆海南省??谑懈呷?月第一次階段性測(cè)試數(shù)學(xué)試題
- 餐飲員工培訓(xùn)協(xié)議書簡(jiǎn)易版
- 不存在合同關(guān)系回復(fù)
- 保障保險(xiǎn)合同
- 山西省2024八年級(jí)物理上冊(cè)第二章聲現(xiàn)象專題訓(xùn)練3.辨析聲音的特性課件新版新人教版
- 山東省威海市文登區(qū)實(shí)驗(yàn)中學(xué)(五四制)2024-2025學(xué)年七年級(jí)上學(xué)期期中考試生物試題
- 《紡織品 色牢度試驗(yàn) 洗液沾色的測(cè)定》
- 美的中央空調(diào)故障代碼H系列家庭中央空調(diào)(第一部分多聯(lián)機(jī))
- 物料承認(rèn)管理辦法
- 業(yè)主委員會(huì)成立流程圖
- AEFI防范與處置PPT課件
- (完整版)全usedtodo,beusedtodoing,beusedtodo辨析練習(xí)(帶答案)
- 小學(xué)綜合實(shí)踐活動(dòng)方便筷子教案三年級(jí)上冊(cè)精品
- 廣聯(lián)達(dá)辦公大廈工程施工組織設(shè)計(jì)
- 阜陽(yáng)市腫瘤醫(yī)院病房大樓建筑智能化設(shè)備、材料采購(gòu)及安裝系統(tǒng)工程技術(shù)要求
- 疑難病例HELLP綜合征
- Tiptop管理員手冊(cè)
- 財(cái)務(wù)報(bào)告模版(向股東會(huì)、董事會(huì))
評(píng)論
0/150
提交評(píng)論