2014-3-嵌入式系統體系結構與開發(fā)-指令系統與IO接口資料_第1頁
2014-3-嵌入式系統體系結構與開發(fā)-指令系統與IO接口資料_第2頁
2014-3-嵌入式系統體系結構與開發(fā)-指令系統與IO接口資料_第3頁
2014-3-嵌入式系統體系結構與開發(fā)-指令系統與IO接口資料_第4頁
2014-3-嵌入式系統體系結構與開發(fā)-指令系統與IO接口資料_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

嵌入式系統體系構造與開發(fā)

嵌入式處理器ARM指令系統ARM體系的構造版本ARM體系的構造版本ARM體系構造共有6個版本,版本號1-6指令集功能不斷擴大特定功能:T——支持Thumb指令集M——支持長乘法指令E——支持增加型DSP指令J——javaSIMD——ARM媒體功能擴展ARM微處理器工作模式與存放器ARM微處理器指令集ARMTHUMBARM微處理器工作模式用戶模式特權模式〔系統模式與特殊模式〕模式切換存放器組織存放器定義模式與存放器ARM與THUMB從編程的角度看,ARM微處理器有兩種指令集,可在兩種指令集之間切換:ARM指令集,處理器執(zhí)行32位的字對齊的ARM指令;Thumb指令集,處理器執(zhí)行16位的、半字對齊Thumb指令。THUMB指令是ARM指令的子集可以相互調用,只要遵循確定的調用規(guī)章Thumb指令與ARM指令的時間效率和空間效率關系為:存儲空間約為ARM代碼的60%~70%指令數比ARM代碼多約30%~40%存儲器為32位時,ARM代碼比Thumb代碼快約40%存儲器為16位時,Thumb比ARM代碼快約40~50%使用Thumb代碼,存儲器的功耗會降低約30%ARM與THUMB指令指令切換方法ARM指令集和Thumb指令集均有切換處理器狀態(tài)的指令,在開頭執(zhí)行代碼時,應當處于ARM指令集指令集切換分狀態(tài)位設置和特殊處理兩種進入Thumb指令當操作數存放器的狀態(tài)位〔位0〕為1時,承受執(zhí)行BX指令的方法,使微處理器從ARM指令集切換到Thumb指令集當處理器處于Thumb指令時,發(fā)生特殊〔如IRQ、FIQ、Undef、Abort、SWI等〕,則特殊處理返回時,自動切換到Thumb指令。切換到ARM指令當操作數存放器的狀態(tài)位〔位0〕為0時,執(zhí)行BX指令時可以使微處理器從Thumb切換到ARM在處理器進展特殊處理時,把PC指針放入特殊模式鏈接存放器中,并從特殊向量地址開頭執(zhí)行程序,也可以使處理器切換到ARM。ARM微處理器運行模式User模式用戶程序不能訪問有些受疼惜的資源只能通過特殊的形式來轉變CPU的當前運行模式特權模式可以存取系統中的任何資源System模式系統模式與User模式的運行環(huán)境一樣但是它可以不受任何限制的訪問任何資源該模式主要用于運行系統中的一些特權任務FIQ模式IRQ模式Supervisor模式Abort模式Undefined模式特殊模式:主要是在外部中斷或者程序執(zhí)行非法操作時會觸發(fā)用戶模式處理器模式用戶模式。usr:ARM處理器正常的程序執(zhí)行狀態(tài)特權模式〔特殊模式〕fiq:用于高速數據傳輸或通道處理irq:用于通用的中斷處理svc:操作系統使用的疼惜模式abt:用于虛擬存儲及存儲疼惜und:當消逝未定義指令終止時進入該模式sys:運行具有特權的操作系統任務ARM微處理器運行模式ARM處理器運行模式圖ARM微處理器的指令系統

ARM微處理器的指令集是加載/存儲型的指令集僅能處理存放器中的數據,處理結果都要放回存放器中對系統存儲器的訪問則需要通過特地的加載/存儲指令來完成。ARM微處理器的指令集可以分為六大類跳轉指令數據處理指令程序狀態(tài)存放器〔PSR〕處理指令加載/存儲指令協處理器指令和特殊產生指令OpCode指令助記符Cond:執(zhí)行條件S:是否影響狀態(tài)存放器Rd:目標存放器Rn:第1個操作數存放器Operand2:第2個操作數ARM指令根本語法格式<Opcode>{<Cond>}{S}<Rd><Rn>{,<Operand2>}例子LDR R0,[R1] ;無條件執(zhí)行BEQ LOOP ;等于條件ADDSR2,R2,#1 ;影響狀態(tài)位,R2<-R2+1指令編碼格式ARM指令編碼構造——條件域ARM指令編碼的條件域當處理器工作在ARM狀態(tài)時,幾乎全部的指令均依據CPSR中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。當指令的執(zhí)行條件滿足時,指令被執(zhí)行,否則指令被無視。每一條ARM指令包含4位的條件碼,位于指令的最高4位[31:28]。條件碼共有16種,每種條件碼可用兩個字符表示,這兩個字符可以添加在指令助記符的后面和指令同時使用。例如,跳轉指令B可以加上后綴EQ變?yōu)锽EQ表示“相等則跳轉”,即當CPSR中的Z標志置位時發(fā)生跳轉。ARM指令編碼的條件域條件編碼條件碼后綴標志含義0000EQZ置位相等0001NEZ清零不相等0010CSC置位無符號數大于或等于0011CCC清零無符號數小于0100MIN置位負數0101PLN清零正數或零0110VSV置位溢出0111VCV清零未溢出ARM指令編碼的條件域條件編碼條件碼后綴標志含義1001LSC清零Z置位無符號數小于或等于1010GEN等于V帶符號數大于或等于1011LTN不等于V帶符號數小于1100GTZ清零且(N等于V)帶符號數大于1101LEZ置位或(N不等于V)帶符號數小于或等于1110AL忽略無條件執(zhí)行ARM微處理器指令表-1助記符指令功能描述ADC帶進位加法指令ADD加法指令AND邏輯與指令B跳轉指令BIC位清零指令BL帶返回的跳轉指令BLX帶返回和狀態(tài)切換的跳轉指令BX帶狀態(tài)切換的跳轉指令ARM微處理器指令表-2助記符指令功能描述CDP協處理器數據操作指令CMN比較反值指令CMP比較指令EOR異或指令LDC存儲器到協處理器的數據傳輸指令LDM加載多個寄存器指令LDR存儲器到寄存器的數據傳輸指令MCRARM寄存器到協處理器寄存器數據傳輸ARM微處理器指令表-3助記符指令功能描述MLA乘加運算指令MOV數據傳送指令MRC協處理器寄存器到ARM寄存器數據傳輸MRS傳送CPSR或SPSR的內容到通用寄存器MSR傳送通用寄存器到CPSR或SPSR的指令MUL32位乘法指令MLA32位乘加指令MVN數據取反傳送指令ARM微處理器指令表-4助記符指令功能描述ORR邏輯或指令RSB逆向減法指令RSC帶借位的逆向減法指令SBC帶借位減法指令STC協處理器寄存器寫入存儲器指令STM批量內存字寫入指令STR寄存器到存儲器的數據傳輸指令SUB減法指令ARM微處理器指令表-5助記符指令功能描述SWI軟件中斷指令SWP交換指令TEQ相等測試指令TST位測試指令ARM尋址方式ARM尋址方式馬上尋址存放器尋址存放器間接尋址基址變址尋址多存放器尋址相對尋址堆棧尋址ARM指令的尋址方式ARM指令系統支持如下幾種常見的尋址方式:馬上尋址存放器尋址存放器間接尋址基址變址尋址多存放器尋址相對尋址堆棧尋址ARM指令的尋址方式-馬上尋址馬上尋址操作數本身就在指令中給出,只要取出指令也就取到了操作數。這個操作數被稱為馬上數。例如以下指令:ADDR0,R0,#1 /*R0←R0+1*/ADDR0,R0,#0x3f /*R0←R0+0x3f*/馬上操作數在以上兩條指令中,其次個源操作數即為馬上數,要求以“#”為前綴,對于以十六進制表示的馬上數,還要求在“#”后加上“0x”。ARM指令的尋址方式-存放器尋址存放器尋址利用存放器中的數值作為操作數,這種尋址方式是各類微處理器常常承受的一種方式,也是一種執(zhí)行效率較高的尋址方式。以下指令: ADD R0,R1,R2 /*R0←R1+R2*/該指令的執(zhí)行效果是將存放器R1和R2的內容相加,其結果存放在存放器R0中。ARM指令的尋址方式-存放器間接尋址存放器間接尋址以存放器中的值作為操作數的地址,而操作數本身存放在存儲器中。例如以下指令:ADDR0,R1,[R2] /*R0←R1+[R2]*/LDR R0,[R1] /*R0←[R1]*/STR R0,[R1] /*[R1]←R0*/第一條指令中,以存放器R2的值作為操作數的地址,在存儲器中取得一個操作數后與R1相加,結果存入存放器R0中;其次條指令將以R1的值為地址的存儲器中的數據傳送到R0中。第三條指令將R0的值傳送到以R1的值為地址的存儲器中。ARM指令的尋址方式-基址變址尋址

基址變址尋址將基址存放器的內容與指令中給出的地址偏移量相加,從而得到一個操作數的有效地址。變址尋址方式常用于訪問某基地址四周的地址單元。承受變址尋址方式的指令常見有以下幾種形式,如下所示: LDRR0,[R1,#4] ;R0←[R1+4] LDRR0,[R1,#4]! ;R0←[R1+4]、R1←R1+4 LDRR0,[R1],#4 ;R0←[R1]、R1←R1+4 LDRR0,[R1,R2] ;R0←[R1+R2]在第一條指令中,將存放器R1的內容加上4形成操作數的有效地址,從而取得操作數存入存放器R0中。在其次條指令中,將存放器R1的內容加上4形成操作數的有效地址,從而取得操作數存入存放器R0中,然后,R1的內容自增4個字節(jié)。在第三條指令中,以存放器R1的內容作為操作數的有效地址,從而取得操作數存入存放器R0中,然后,R1的內容自增4個字節(jié)。在第四條指令中,將存放器R1的內容加上存放器R2的內容形成操作數的有效地址,從而取得操作數存入存放器R0中。ARM指令的尋址方式-多存放器尋址多存放器尋址方式,一條指令可以完成多個存放器值的傳送。這種尋址方式可以用一條指令完成傳送最多16個通用存放器的值。以下指令: LDMIAR0,{R1,R2,R3,R4} ;R1←[R0] ;R2←[R0+4] ;R3←[R0+8] ;R4←[R0+12]該指令的后綴IA表示在每次執(zhí)行完加載/存儲操作后,R0按字長度增加,因此,指令可將連續(xù)存儲單元的值傳送到R1~R4。STMIAR0!,{R1-R4};[R0]←R1 ;[R0+4]←R2 ;[R0+8]←R3 ;[R0+12]←R4ARM指令的尋址方式-相對尋址

與基址變址尋址方式相類似,相對尋址以程序計數器PC的當前值為基地址,指令中的地址標號作為偏移量,將兩者相加之后得到操作數的有效地址。以下程序段完成子程序的調用和返回,跳轉指令BL承受了相對尋址方式:

BLNEXT ;跳轉到子程序NEXT處執(zhí)行 …… NEXT …… MOV PC,LR ;從子程序返回ARM指令的尋址方式-堆棧尋址

堆棧是一種數據構造,按先進后出〔FirstInLastOut,FILO〕的方式工作,使用一個稱作堆棧指針的專用存放器指示當前的操作位置,堆棧指針總是指向棧頂。當堆棧指針指向最終壓入堆棧的數據時,稱為滿堆?!睩ullStack〕,而當堆棧指針指向下一個將要放入數據的空位置時,稱為空堆?!睧mptyStack〕。ARM指令的尋址方式-堆棧尋址堆棧的生成方式:遞增堆?!睞scendingStack〕當堆棧由低地址向高地址生成時,稱為遞增堆棧;遞減堆?!睤ecendingStack〕,當堆棧由高地址向低地址生成時,稱為遞減堆棧。四種類型的堆棧工作方式:滿遞增堆棧:堆棧指針指向最終壓入的數據,且由低地址向高地址生成。滿遞減堆棧:堆棧指針指向最終壓入的數據,且由高地址向低地址生成??者f增堆棧:堆棧指針指向下一個將要放入數據的空位置,且由低地址向高地址生成??者f減堆棧:堆棧指針指向下一個將要放入數據的空位置,且由高地址向低地址生成ARM偽指令ARM偽指令數據定義偽指令把握偽指令地址加載偽指令聲明引用段域偽指令ARM的偽指令定義數據偽指令DCB安排連續(xù)的字節(jié)存儲單元,并設置初值DCW/DCWU安排連續(xù)的半字存儲單元,并設置初值DCD/DCDU安排連續(xù)的字存儲單元,并設置初值DCQ/DCQU安排8字節(jié)為塊存儲單元,并設置初值DCFS/DCFSU為單精度浮點數安排連續(xù)存儲單元,并設置初值DCFD/DCFDU為雙精度浮點數安排連續(xù)的字存儲單元,并設置初值SPACE安排一塊連續(xù)的存儲單元FIELD安排一塊連續(xù)的存儲單元MAP定義一個構造化的內存表的首地址ARM的偽指令把握偽指令IF指令序列ELSE指令序列ENDIF條件編譯指令WHILEWEND條件循環(huán)執(zhí)行指令地址加載偽指令ADR 小范圍的地址讀取ADRL 中范圍的地址讀取LDR 大范圍的地址讀取NOPARM的偽指令聲明引用EQU定義字符名稱EXPORT聲明全局標號IMPORT在其他源文件中定義標號EXTERN在其他源文件中定義標號GET(或Include)包含源文件指令INCBIN包含目標文件和數據文件包指令RN定義存放器別名ROUT定義局部變量的作用范圍ARM的偽指令段域偽指令FILED和MAP構造化內存表中的數據域指令AREA定義代碼段和數據段指令CODE:代碼段DATA:數據段READONLYREADWRITEALIGNCOMMON:通用段ALIGN對齊指令CODE16和CODE32指示指令序列類型指令ENTRY指定入口點指令END應用程序結尾指令程序舉例ENTRYstartMOVR0,#0xFFMOVR1,#0xEF000000MOVR2,#0x2F000000MOVR3,#0xFFADDR4,R2,R1 ;不轉變狀態(tài)位,R4=0X1E000000ADDS R5,R2,R1 ;轉變狀態(tài)位CPSR=0x2023003d,結果不變ADCSR6,R2,R1 ;結果R4=0X1E000001,SUBR4,R2,R1 ;不轉變狀態(tài)位,R4=0X40000000SUBSR4,R2,R1 ;轉變狀態(tài)位CPSR=0x0000003dRSBR5,R2,R1 ;R5=0XC0000000RSBSR5,R2,R1 ;轉變狀態(tài)位CPSR=0xA000003dSBCR6,R1,R2 ;R6=0XC0000000RSCR7,R1,R2 ;R7=0x40000000,不轉變狀態(tài)位stopBstopEND2GPIOI/O定義ARM中的I/O接口定義2410硬件上的引線系統上的可編程存放器程序上的應用各類接口的定義接口的主要功能硬件上信號線可編程硬件存放器應用程序的設計各類接口的程序組織系統局部公共局部共性局部ARM中的I/O接口定義ARM中的I/O接口定義2410硬件上的引線系統上的可編程存放器程序上的應用2410硬件上的引線有117個通用的IO接口PROTA(23)PROTB(11)PROTC(16)PROTD(16)PROTE(16)PROTF(8)PROTG(16)PROTH(11)ARM公司將每個IO接口作成復用信號線見圖Mini2410P1-3每個應用可以依據實際狀況選用PortA組的引腳功能PortB組的引腳功能PortC組的引腳功能PortD組的引腳功能PortE組的引腳功能PortF組的引腳功能PortG組的引腳功能PortH組的引腳功能系統上的可編程存放器可編程的幾種存放器接口配置存放器PORTCONFIGURATIONREGISTER(GPACON-GPHCON)接口數據存放器PORTDATAREGISTER(GPADAT-GPHDAT)接口上拉存放器PORTPULL-UPREGISTER(GPBUP-GPHUP)雜項存放器MISCELLANEOUSCONTROLREGISTER外部中斷把握存放器EXTERNALINTERRUPTCONTROLREGISTER(EXTINTN)電源關閉模式和I/O接口POWER_OFFMODEANDI/OPORTS通用狀態(tài)存放器GENERALSTATUSREGISTER(GSTATUSn)系統上的可編程存放器可編程的幾種存放器地址GPX每組有四個可編程存放器:CON,DAT,UP,RESERVED地址連續(xù):00,04,08,0C分組存放器編址PortA0X56000000-0X5600000CPortB0X56000010-0X5600001CPortC0X56000020-0X5600002CPortD0X56000030-0X5600003CPortE0X56000040-0X5600004CPortF0X56000050-0X5600005CPortG0X56000060-0X5600006CPortH0X56000070-0X5600007C接口配置存放器(GPACON)0X56000000只有輸出地址線接口配置存放器(GPB-HCON)0X56000010輸入輸出專用信號線保存接口數據存放器(GPADAT-GPHDAT)0X560000X4接口數據存放器定義引腳被定義為輸出時,數據存放器作為輸出鎖存引腳被定義為輸入時,數據存放器作為輸入鎖存引腳被定義為專用功能時,數據存放器依據功能線定義留意:輸出數據是寫入的把握命令或數據輸入數據是讀入的狀態(tài)或數據接口上拉存放器(GPBUP-GPHUP)X560000X8上拉存放器當相應的位為=0時,表示該位上拉信號使能當相應的位為=1時,表示該位上拉信號無效留意上拉是為引腳供給電流假設不使用上拉,需要外接上拉電壓來供給電流接口雜項存放器(MISCELLANEOUS)X56000080程序上的定義定義存放器名和端口地址定義2410addr.h初始化存放器端口初值2410lib.Cvoidport_init(void)正常調用關系MainSysInitport_initAPP_TEST系統初始化voidsys_init{ change_clock_divider(1,1); //1:2:4 change_value_MPLL(M_MDIV,M_PDIV,M_SDIV); //Fin=12MHzFCLK=202.8MHz delay(0); //adjustthedelaycount port_init; interrupts_init; uart_init(PCLK,115200,UART0); uart_init(PCLK,115200,UART1); uart_init(PCLK,115200,UART2);#ifdefCLK124_200M change_value_MPLL(88,1,1); //Fin=12MHzFCLK=192MHz uart_init(192023000/4,115200,UART0); uart_init(192023000/4,115200,UART1);#endif uart_select(UART1); print_infor; delay(500);}port_init(void)voidport_init(void){//CAUTION:Followtheconfigurationorderforsettingtheports.//1)settingcontrolregister(GPnCON)//*(bitn)--meansthispinnotuseoncircuit,andsetasdefaultfunction//2)configurepull-upresistor(GPnUP)//3)settingvalue(GPnDAT)//===PORTAGROUPrGPACON=0x5fbfff;//===*PORTBGROUP//Ports:GPB10GPB9GPB8GPB7GPB6GPB5GPB4GPB3GPB2GPB1GPB0//Signal:GPB10GPB9GPB8GPB7GPB6DIS_OFFL3CLOCKL3DATAL3MODEPWM2PWM1//Setting:OutputOutputOutputOutputOutputOutputOutputOutputOutputTOUT1TOUT0//Binary:01,01*01,*01*01,0101,0101,1010

rGPBCON=0x155559;……各類接口的定義各類接口的定義接口的主要功能硬件上信號線可編程硬件存放器應用程序的設計接口功能接口功能系統板上信號指示燈三個指示燈接在鎖存器的D2-D0上電路引腳電路關系CPLD-138-或門-8D輸出鎖存器CPLD選通信號線EXCS:A25-A21(01000)3-8譯碼器片選使能接EXCS,3-8譯碼器譯碼信號ABC:A20-A18(110),~Y6輸出輸出鎖存器的數據接LED負端,正端接上拉電阻~Y6和~WE信號或作用輸出鎖存器LED屬于無條件輸出,輸出地址A25-A18=010001100000000000000000

溫馨提示

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

評論

0/150

提交評論