版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、嵌入式系統(tǒng)復習題集 、基礎知識1、什么是代碼的臨界區(qū)?答:代碼的監(jiān)界區(qū)是指處理時不可分割的代碼,運行這些代碼不允許被打斷。一旦這部分代 碼開始執(zhí)行,則不允許任何中斷打入。中斷不調用任何臨界區(qū)的代碼或不訪問任何臨界區(qū)使 用的共享資源時,這個中斷是可能可以執(zhí)行。為確保臨界區(qū)代碼的執(zhí)行,在進入臨界區(qū)之前 要關中斷,而臨界區(qū)代碼執(zhí)行完成以后要立即開中斷。2、什么是嵌入式系統(tǒng)?答:嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,軟件硬件可裁剪,適應應用系統(tǒng)對 功能、可靠性、成本、體積及功耗嚴格要求的專用計算機系統(tǒng),具有完成復雜功能的硬件和 軟件且緊密耦合在一起的計算機系統(tǒng)。3、什么是嵌入式操作系統(tǒng)?為何要
2、使用嵌入式操作系統(tǒng)?答:運用在嵌入式系統(tǒng)上的實時操作系統(tǒng),具有事件驅動和任務(進程)調度功能,且在有 限時隙內能完成事件的響應和任務(進程)的切換,能可靠、實時、靈活地管理嵌入式系統(tǒng) 上的各種資源和任務。使用嵌入式操作系統(tǒng),能方便實時應用軟件的開發(fā)和有機地整合,能 有效地管理和協(xié)調各項工作,因此是開發(fā)和運行非常重要的環(huán)境。4、ARM狀態(tài)與Thumb狀態(tài)的互換以什么條件來判斷?似舉出狀態(tài)從ARM到Thumb或從Thumb至ij ARM切換的例子。答:其互換條件是執(zhí)行 BXregisters指令時,判斷registers的最低一位bo是否為0或為1 來確定的,當bo為0時,則執(zhí)行的程序是 ARM狀
3、態(tài)的32位指令程序,當bo為1時,則執(zhí)行 的程序是Thumb狀態(tài)的16位指令程序。如下例:;從ARM狀態(tài)轉變?yōu)?Thumb狀態(tài)LDR R0, Lable+1BX R0;從Thumb狀態(tài)轉變?yōu)锳RM狀態(tài)LDR R0, LableBX R0ARM體系結構支持多少種處理器模式,分別是什么?答:ARM體系結本支持7種處理器模式,分別是用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統(tǒng)模式。6、子程序利用R14 (LR),獲得返回到主程序的下條指令,通常有直接輸入法和堆棧方法, 試填寫下面兩種方法的代碼: TOC o 1-5 h z MOV PC,LRSTMFD SR , regist
4、ers, LRLDMFD SP!, registers,PC如果是異常處理后的返回,如IRQ中斷返回又如何改寫代碼?7、在修復產生數(shù)據中止的原因后,不管處于哪種處理器操作狀態(tài),處理程序都必須執(zhí)行返 回指令:SUBS PC R14_abt,#8 ;而預取中止時為:SUBS PC R14_abt,#4試解釋減8原因?而在預取中止中為什么減4 ?答:由于ARM為三級流水,執(zhí)行段相對取指令段差為 8,產生數(shù)據中止是在執(zhí)行段結束點進入, 此日PC值為數(shù)據中止指令地址 +8,即保存當前 PC到R14_abt為數(shù)據中止指令地址+8,因此 在修復產生數(shù)據中止的原因后,返回地址應為數(shù)據中止指令地址本身,處理程序
5、都必須執(zhí)行返回指令:SUBS PC R14_abt,#8才能實現(xiàn)其目的。而在預取中止中時,出現(xiàn)中止異常是在譯碼段進入執(zhí)行段的開始點,此時保存到 R14_abt 值為預取中止指令地址 +4 ,因此要恢復到中止指令地址必為當前保存的R14_abt值減4,即執(zhí)行SUBS PC R14_abt,#樨作就可。什么是小端存儲?什么是大端存儲?答: 小端存儲就是其存儲格式為保存的字最低地址的字節(jié)看作是最低位字節(jié), 最高地址字節(jié)被看作是最高位字節(jié)。因此,存儲器系統(tǒng)字節(jié)0 連接到數(shù)據線7-0。大端存儲就是其存儲格式為將最高位字節(jié)保存在最低地址字節(jié),最低位字節(jié)保存在最高地址字節(jié)。因此存儲器系統(tǒng)字節(jié)0 連接到數(shù)據線
6、31-24 。ARM7TDMI 中 T、 D、 M 、 I 的含義是什么?答:T表示具有高密度16位白Thumb指令機擴展功能;D表示具有支持片上調試功能;M表示具有64位乘法指令;I表示增加了 EmbededICE觀察點硬件。ARM7TDMI 采用幾級流水線?使用何種存儲器編址方式?答: ARM7TDMI 采用三級流水段,分別為取指段、譯碼段和執(zhí)行段。使用字節(jié)編址方式。ARM處理器模式和 ARM處理器狀態(tài)有何區(qū)別?答: ARM 處理器模式是指用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統(tǒng)模式。每種模式都表明一種程序使用內部寄存器和一些片內外的硬件設備權利。而 ARM 處
7、理器狀態(tài)是指Thumb 狀態(tài)和 ARM 狀態(tài), 即程序指令的執(zhí)行譯碼按 16 位 Thumb 指令集還是按32 位 ARM 指令集譯碼執(zhí)行。分別列舉 ARM 的處理器模式和狀態(tài)。答: ARM 處理器模式分別是用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統(tǒng)模式。 ARM 處理器狀態(tài)是指16 位 Thumb 指令集運行的 Thumb 狀態(tài)和 32 位 ARM指令集運行的 ARM 狀態(tài)。PC 和 LR 分別使用哪個寄存器?答:PC使用R15; LR使用R14。14、R13寄存器的通用功能是什么?答: R13 寄存器在 ARM 狀態(tài)時, 可用作通用寄存器功能, 但通常為堆棧指針S
8、P, 但在 Thumb狀態(tài)時,其壓棧 PUSH和彈棧POP指令都要用到 R13 (SP)O15、CPSRt存器中哪些位用來定義處理器狀態(tài)?答:在CPSRt存器中b5位T定義處理器狀態(tài),T=0為ARM狀態(tài),T=1為Thumb狀態(tài)。ARM 和 Thumb 指令的邊界對齊有何不同?答: ARM 指令長度為 32 位,其邊界對齊存取地址位都是按b1:0=00 方式進行,而Thumb指令長度為 16 位,其邊界對齊存取地址位都是按b0=0 方式進行。描述一下如何禁止IRQ和FIQ的中斷?答:對CPSR中白b7 (I位)和b6 (F位)標志位置位時,可分別來禁止 IRQ和FIQ中斷。定義R0=0 x123
9、45678,假設使用存儲指令將R0的值存放在0 x4000單元中。如果存儲器格式為大端格式,請寫出在執(zhí)行加載指令將存儲器0 x4000 單元的內容取出存放到 R2寄存器操作后得R2 的值;如果存儲器格式改為小端格式,所得的 R2 值又為多少?低地址 0 x4000 單元的字節(jié)內容分別是多少?答:按大端格式和小端格式存儲,從存儲器中讀出的值是不變的,R2=0 x12345678o按大端格式從 0 x4000 單元讀出的值為 0 x12, 按小端格式從0 x4000 單元讀出的值為0 x78 。請描述進入內核時異常操作步驟?答:在LR 中保存下一條指令的地址;2)將CPS或制到適當?shù)?SPSR3)
10、根據異常將CPSR莫式強制設為某一值;4)強制PC從相關的異常處取指。異常結束時,異常處理程序必須將LR 中的值減去偏移量后移入PC。6)將SPSR勺值復制回CPSR清零在入口置位的中斷禁止標志。請描述一下ARM7TDMI 產生異常的條件分別是什么?各種異常會使處理器進入哪種模式?進入異常時內核有何操作?各種異常的返回指令又是什么?模式 快中斷模式 中斷模式 中止模式中止模式 未定義指令模式管理模式返回指令SUBS PC,R14_fiq,#4SUBS PC, R14_irq,#4SUBS PC, R14_abt,#4SUBS PC, R14_abt,#8MOVS PC, R14_undMOVS
11、 PC, R14_svc答: ARM7TDMI 產生異常:異常條件快速中斷請求中斷請求預取中止請求數(shù)據中止請求未定義指令中斷請求軟件中斷請求進入內核時異常操作是:1 ) 將 LR 中保存下一條指令的地址;2)將CPS限制到適當?shù)?SPSR3)根據異常將CPSR莫式強制設為某一值;4)強制PC從相關的異常處取指。5 ) 異常結束時,異常處理程序必須將LR 中的值減去偏移量后移入PC。6)將SPSR勺值復制回CPSR 7 ) 清零在入口置位的中斷禁止標志。簡單描述一下ARM7 的三級流水線,并說明其對程序設計的影響。答: ARM7 的三級流水分為取指段、分析段和執(zhí)行段。對程序設計的影響:提高指令執(zhí)
12、行的速度,并使處理和存儲系統(tǒng)連續(xù)操作。ARMThumbPCPC取指PC-4PC-2譯碼PC-8PC-4執(zhí)行由此看出,它對子程序調用返回、異?;謴头祷?, LR 值需減一個常數(shù)值作為返回地址。ARM7TDMI(-S)有幾種尋址方式?LDR R1, R0, #0 x08屬于哪種尋址方式?答:有 9 種,分別是:寄存器尋址、立即尋址、寄存器移位尋址、寄存器間接尋址、基址尋址、多寄存器尋址、堆棧尋址、塊拷貝尋址、相對尋址。其中:LDR R1, R0, #0 x08屬于基址尋址。ARM 指令的條件碼有多少個?默認條件碼是什么?答: ARM 指令的條件碼有16 個,默認條件碼是: AL 編碼為 1110 即
13、無條件執(zhí)行。ARM 指令中第二個操作數(shù)有哪幾種形式?列舉5 個 8 位圖立即數(shù)。答: ARM 指令中第2 個操作數(shù)有3 種形式:#immed_8r 常數(shù)表達式;Rm寄存器方式;Rm,shift 寄存器移位方式。例如:0 x3FC、 0、 0 xF0000000、 200、 0 xF0000001。將ARM指令中,使用第2個操作數(shù)時,第2操作數(shù)的形式可為常數(shù)表達式#immed_8r,這種常數(shù)的合理表達方式是什么?答:這種常數(shù)須對應 8 位位圖數(shù)據的循環(huán)移位偶數(shù)位得到的任何 32 位數(shù)據。將ARM指令中,使用第2個操作數(shù)時,第2操作數(shù)的形式可為常數(shù)表達式#immed_8r,請說明下面常數(shù)哪些合理,
14、哪些非法?0 x3FC,0 x1F,0 x1FE,0,0 xF0000000,511,0 xFFFF,0 x1010,0 xF0000010,200,0 xF000000,1 0 x12800000 ,0 x4000003B, 0 x0016C000答: 合法常量:0 x3FC/0/0 xF0000000/200/0 xF0000001/0 x1F, 0 x12800000 , 0 x4000003B , 0 x0016C000;非法常量:0 x1FE/511/0 xFFFF0/x1010/0 xF0000010。將比較兩個值大小,并進行相應加1 處理, C 代碼為:if(ab) a+;els
15、e b+;寫出對應的ARM指令程序(其中設 R0為a, R1為b) ?答: CMPR0, R1ADDHIR0, R0, #1;若 R0R1 則 R0=R0+1ADDLS R1, R1, #1;若 R0?R1,貝U R1=R1 + 1將 C 代碼:if(a!=10)&(b!=20) a=a+b 轉化為 ARM 指令程序?答: CMP R0, #10;比較 R0是否為10CMPNE R1, #20;若R0不為10,則比較 R1是否為20CMPNE R0, R0, R1 ;若 R0 不為 10 且 R1 不為 20,指令執(zhí)行, R0=R0+R1LDR/STR旨令的偏移形式有哪 4種? LDRB和LD
16、RSBf何區(qū)另答: LDR/STR 指令的偏移形式有:1)零偏移;2)前索引偏移;3)程序相對偏移;4)后索引偏移。LDRB僅為無符號字節(jié)數(shù)據裝載,其裝載后的高24位為0,而LDRSB為有符號字節(jié)數(shù)據裝載,高24 位為符號位的擴展。請指出MOV指令與LDR加載指令的區(qū)別及用途。答: MOV 指令是數(shù)據處理過程中的操作,可以傳遞立即數(shù)和寄存器到另一個寄存器的操作,而LDR加載指令用于將存儲器單元數(shù)據裝載到寄存器的操作。CMP 指令的操作是什么?寫一個程序, 判斷 R1 的值是否大于0 x30, 是則將 R1 減去0 x30。答:CMP指令操作是比較操作;判斷R1的值是否大于0 x30,是則將R1
17、減去0 x30程序如下:CMP R1, #0 x30SUBGT R1,R1,#0 x30 OrCMP R1, #0 x30SUBHI R1,R1,#0 x30調用子程序是用 B還是用BL指令?請寫出返回子程序的指令?答:調用子程序是用BL 指令。返回子程序的指令:BL lableMOV PC,LRLDR偽指令用途?其指令格式與LDR裝載指令的差別?答:LDR偽指令用于加載32位的立即數(shù)或一個地址值到指定寄存器,映射真正指令類型由編譯程序決定;LDR偽指令指令格式為 LDR Rn,=expr LDR加載指令為LDR Rn,地址值。ARM 狀態(tài)與 Thumb 狀態(tài)的切換指令是什么?請舉例說明。答:
18、ARM狀態(tài)與Thumb狀態(tài)的切換指令是 BX Rm=例如:ARM_CODE ADR R0,THUMB_CODE+1BX R0CODE 16THUMB_CODE MOV R0,#10 MOV R1,#20 ADD R0,R1 B THUM_CODE ENDThumb狀態(tài)與ARM狀態(tài)的寄存器有區(qū)別嗎?Thumb指令對哪些寄存器訪問受到一定限制?答:Thumb狀態(tài)與ARM狀態(tài)的寄存器本身并無區(qū)別,都是32位寄存器。但Thumb指令僅對R8-R15受到一定限。Thumb指令集的堆棧入棧、出棧指令是哪兩條?答:壓棧指令:PUSH reglist,LR;彈棧指令:POP reglist,PCThumb指令
19、集的BL指令轉移范圍為何能達到 ?4MB?其指令編碼是怎樣的?答:Thumb指令集的BL采用2條這樣的指令組合成 22位半字偏移(符號擴展為32位),使指 令轉移范圍為?4MB。其指令編碼為:1111+H+offset11共16位。其中H為1位,offset11為 了 11 位。在中斷向量中轉移指令為什么沒有用B指令?而是用什么指令實現(xiàn)跳轉的?答:在中斷向量中車t移指令沒有用B指令是由于B指令轉移范圍僅在?32MB內,因此滿足不了中斷向量的全地址范圍內的轉移。實際中斷向量中轉移指令是用LDR PC ,addr,和文字池(DCD偽指令)來實現(xiàn)的,它可以實現(xiàn)4GB范圍內跳轉。LPC2114可使用的
20、外部晶振頻率范圍是多少(使用/不使用PLL功能時)?描述一下LPC2210的P0.14、P1.20、P1.26、BOOT1和BOOT0弓I腳在芯片復位時分另有什么作用?并簡單說明LPC2000系列ARM7微控制器的復位處理流程。答:使用PLL功能時,外部晶振頻率范圍為10-25MHZ;不使用PLL功能時為1-30MHZ。在復位時,LPC2210的P0.14決定外部復位后是否進入ISP狀態(tài),如為低電平則進入 ISP狀態(tài)。P1.20決定復位后是否使用 P1.16-P1.25作為跟蹤端口進行跟蹤同步。P1.26決定復位后是否使用 P1.31-P1.26作為調試端口。BOOT1和BOOT0引腳在芯片復
21、位時決定復位后存儲器的來源以及存儲器的寬度。LPC2000系歹U ARM7微控制器的復位處理流程: 流程略。LPC2000系列ARM7微控制器對向量表有何要求(向量表中的保留字)?答:LPC2000系歹U ARM7微控制器要求:在向量表中所有32位向量按有符合數(shù)據累加之和為0,這時向量表才有效,且芯片復位后,能脫機獨立運行。因此向量表中的保留字是配置數(shù)據 累加和為0而留著的。如何啟動LPC2000系列ARM7微控制器的ISP功能?相關電路應該如何設計?答:微控制器在復位后可能有多種初始狀態(tài),決定于引腳狀態(tài)和只讀存儲器的數(shù)據。當有外 部復位信號?Reset , P0.14低電平時,進入ISP狀態(tài)
22、,當P0.14為高電平時,同時 BOOT0和 BOOT1為高電平時,進入 ISP狀態(tài)。LPC2000系歹U ARM7微控制器片內Flash是多少位寬度的接口?它是通過哪個功能模塊來提高 Flash 的訪問速度?答:LPC2000系列ARM7微控制器片內Flash是128位寬度的接口,是通過數(shù)據緩沖模塊、預 取緩沖模塊、分支跟蹤緩存模塊、兩Flash存儲模塊來提高 Flash的訪問速度。LPC2210的BANK0存儲塊使用 32位總線,訪問BANK0時,地址線 A1、A0是否有效?EMC模塊中的BLSO-BLS3具有什么功能?答:如果存儲器組配置成32 位寬度,地址線 A0 和 A1 無用,這是
23、由于地址位的增減與存儲器數(shù)據增減同步,此日A0和A1可作為GPIO使用(由PINSEL皴置)。EMC模塊中的BLSO-BLS3具有字節(jié)定位的選擇信號功能,當BLSO 為低時,存取定位到低8 位字節(jié)上,當 BLS1 為低時,存取定位次到低8位字節(jié)上,當BLS2為低時,存取定位到次高字節(jié),當BLS3為低時,存取定位到高位字節(jié)上。如果存儲器組配置寄存器中 RBLE 位置 1 ,表示按字節(jié)區(qū)分存儲器組,現(xiàn)有程序:LDR R0, =0X80000001MOV R1,0X55STR R1,R0請問執(zhí)行STR指令后,存儲器地址線上的地址應為0X80000000,數(shù)據線的前16位數(shù)據中,低8位為 無效 ,高8
24、位為 0X55 。EMC模塊中的引腳線 BLS0和BLS1電平分另 為 高電平 和 低電平 。 (填高低電平)在startup.s啟動代碼中,設置異常向量表時,IRQ入口處為什么放置LDR PC, PC, # -0 x0f0指令而非 LDR PC IRQ_Addr。答:這是由于LDR PC, IRQ_Addr 指令不能提供靈活的轉移地址,在處理時就要耗費大量的時間解決IRQ轉移分類問題。 而LDR PC, PC, # -0f0指令轉移地址來源于完部的VICVectAddr寄存器保存的地址值。 不同的中斷異常,其VICVectAddr 的值不同, 可通過初始配置, 節(jié)省了軟件的轉移選擇開銷。在s
25、tartup.s啟動代碼中,設置異常向量表時,IRQ入口處放置LDR PC PC, # -0 x0f0指令中PC-0 x0FF0地址單元是指向VICVectAddr寄存器的地址。BOOT0和BOOT1與BCFG029: 28的關系和區(qū)別是什么?答:Bank0用于引導程序運行, BCFG029: 28的復位值與BOOT0和BOOT1設定有關。BOOT0和 BOOT1 與 BCFG029: 28的關系:Bank復位時BOOT1:0的狀態(tài)BCFG29: 28存儲器寬度0LL008位0LH0116位0HL1032 位0HH1032 位1xx1032 位2xx0116位3xx008位而對 Bank1、B
26、ank2 和 Bank3 而言,BCFG29:28決定存儲器寬度,與 BOOT1:0設定無關。對Bank0而言,BCFG29: 28的復位值由BOOT1:0設定決定,且存儲器寬度也由 BOOT1:0 決定。請問引腳連接模塊選擇寄存器有哪些?請舉一個例子說明選擇寄存器的功能?答:引腳連接模塊選擇寄存器有PINSEL0 PINSEL1和PINSEL2如設定:PINSEL0 &= 0 x00000001則選擇 P0.0 腳,功能為 TxD(UART0)啟動代碼中總線引腳設置為:ResetInit LDR R0,=PINSEL2IF : DEF:EN_CRPLDR R1,=0 x0f814910ELS
27、ELDR R1,=0 x0f814914ENDIFSTR R1,R0分析每條代碼的含義,并說明PINSEL2配置0 x0f814910和配置0 x0f814914的區(qū)別?答:程序清單中,當預定義有EN_CR際時,將會編譯程序清單LDR R1,=0 x0f814910語句,并將PINSEL2寄存器設置為 0 x0f814910 ,否則編譯 LDR R1,=0 x0f814914語句,并將PINSEL2 寄存器設置為0 x0f814914。區(qū)別:前一種執(zhí)行禁止使用JTAG口調試,起到加密作用。后一種使用JTAG 口調試。LPC2000 系列 ARM7 微控制器具有引腳功能復用特性,那么如何設置某個
28、引腳為指定功能?答:例如通過設置 PINSEL01:0=00時,引腳為 GPIO功能;設置為01時,引腳為 UART0的 TxD功能。設置為10時,引腳為PWM1功能腳。設置引腳為 GPIO 功能時,如何控制某個引腳單獨輸入 /輸出?當需要知道某個引腳當前的輸出狀態(tài)時,是讀取IOPIN寄存器還是讀取IOSET寄存器?答:設置引腳為GPIO功能時,控制某個引腳單獨輸入/輸出是用IODIR方向控制寄存器控制,寄存器中每位對應控制著I/O位,如IODIR0對應PX.0腳,IODIR31對應PX.31腳,寫入1時對應引腳作為輸出功能,寫入 0 時作為輸入功能。當需要知道某個引腳當前的輸出狀態(tài)時, 是讀
29、取IOPIN寄存器。P0.2和P0.3 口是I2C接口,當設置它們?yōu)?GPIO時,是否需要外接上拉電阻才能輸出高電平?答:需要外接上拉電阻1-10K?,這是因此I2C接口兩根線都開漏輸出。使用SPI主模式時,SSEL3I腳是否可以作為 GPIO?若不能,SSEL引腳應如何處理?答:使用SPI主模式時,SSEL3I腳不可以作為 GPIO,對SSEL弓唧的處理,使用SPI主模式時, 必須選擇相應的引腳用作SSE能并使其保持高電平。LPC2114的兩個UART是符合什么標準?哪一個 UART可用ISP通信?哪一個 UART具有 MODEM 接口?答:必須符合 16C550 工業(yè)標準;UART0可用I
30、SP通信,UART1具有MODEM接口功能。LPC2114具有幾個32位定時器? PWM定時器是否可以作通用定時器使用?答:LPC2114具有2個32位定時器,定時器 0和定時器1, PWM定時器是專用定時器,不可 作通用定時器使用。LPC2000 系列ARM7 微控制器具有哪兩種低耗模式?如何降低系統(tǒng)的功耗?答: LPC2000 系列 ARM7 微控制器具空閑模式和掉電模式的低耗模式。在空閑模式下,處理器、存儲器系統(tǒng)和相關控制器以及內部總線不再消耗功率,但外設繼續(xù)保持并可產生中斷使處理器恢復運行。在掉電模式下,振蕩器關閉,芯片沒有任何內部時鐘,處理器狀態(tài)和寄存器、外設寄存器以及內部SRAM
31、值在掉電模式下被保持。芯片的邏輯電平保持靜態(tài)。復位或特定的不需要時鐘仍能工作的中斷可終止掉模式,并使芯片恢復正常運行。有符號和無符號加法下面給出A和B的值,可先手動計算 A+B,并預測N、Z、V和C標志位的值。其中(A, B)值分別為(0 xFFFF000F 0X0000FFF1)或(0 x7FFFFFFF,0 x02345678或(67654321、23110000 ), 將三組用分別用LDR偽指令向寄存器(R0, R1)附值。其程序如下:START LDR R0, =ALDR R1, =BLOOP BL ADD_SUBB LOOPADD_SUB ADDS R0,R0,R1MOV PC,LR
32、END試判斷如果A 和 B 為有符號數(shù)時,計算結果和標志位的狀態(tài)?如果為無符號數(shù)時,計算結果和標志的狀態(tài)?答:0 xFFFF000F0 x7FFFFFFF+0 x0000FFF10 x02345678結果: 0 x1000000000 x82345677N=0;Z=1;V=0;C=1N=1;Z=0;V=1;C=058、把下面的C代碼轉換成匯編代碼。數(shù)組始地址的存儲區(qū)內,類型為10ng(即32位)。67654321 A23110000 B90764321N=0 ;Z=0;V=O ;C=0a 和 b 分別存放在以 0 x4000 和 0 x5000 為起F0r(I=0;I8;I+)答:LDRLDR
33、MOVLOOPLDRSTRSUBSBPLAI=b7-I;R0, =0 x3FFCR1, =0 x5028R2, 0 x0008R3,R1,# -4 R3, R0,#4 R2,R2,#1 LOOP59、60、假設有一個基于FACTORIALLOOPMOVR6, #10MOVR4, R6SUBS R6,R6,#1MULNE R4,R4,R6BNE LOOPLPC2114 的系統(tǒng),所使用的晶振為11.0592MHz 石英晶振。請計算計算一個數(shù) n 的階乘,即 n!=n*(n-1)*(n-2) (1)。解:由公式:件,因出最大的系統(tǒng)時鐘(cclk)頻率為多少MHz?此時PLL的M值和P值各為多少?請列
34、出計算 公式,并編寫設置 PLL的程序段。由公式:Fcclk = M*Fosc ,要使Fcclk最大,F(xiàn)osc為11.0592MHz ,必M為最大時滿足條 因 LPC2114 的 Fcclk 最大值為 60MHZ,而 60/11.0592 ? 5.4 Mmax 僅能設置為 5當前條件下的最大的系統(tǒng)時種Fcclk =5*11.0592=55.296MHZ,此日M值為5,寫入MSEL的值為4;又由公式:Fcco=Fosc * M * 2 * P ; 而 Fcco 在 156-320MHZ 內,因此:158 (11.0592*5*2 ) ?1.4 P320/ (11.0592*5*2 ) ? 2.8
35、9 故:P取 2。PSEL=1設置PLL的程序段:PLLCON=1PLLCFG = 60/Fosc -1PLLCFG=(PLLCFG&0 x1F) | (320(/ 11.0592*5*2 ) -1)5)PLLFEED = 0 xaa;PLLFEED = 0 x55;存儲器重映射:LPC2210具有(D )種存儲映射模式。A 3; B 5 ; C 1; D 4 ;當程序已固化到片內Flash,向量表保存在 0 x00000000起始處,則 MAP1:0的值應該為 ( B ) 。A 00; B 01; C 10 ; D 11;LPC2000系列ARM7微控制器存儲器重映射的目標起始地址為(0 x
36、00000000 ),共有( 16 ) 個字。A0 x00000000,8B0 x40000000,8C0 x00000000,16D0 x7FFFE000,8外部中斷喚醒掉電設計:以下代碼是初始化部中斷0,用它來喚醒掉電的LPC2114,請?zhí)羁?。PINSEL0 = 0 x00000000;PINSEL1 = (PINSEL1& 0 xFFFFFFFC)|0 x00000001;設置 I/O 口連接,P0.16 設置為 EINT0EXTMODE = EXTMODE & 0 xFE ;設置EINT0為電平觸發(fā)模式EXTPOLAR = EXTPOLAR & 0 xFE ;設置 EINT0為低電平觸
37、發(fā)EXTWAKE = EXTWAKE | 0 x01 ;/ 允許外部中斷0 喚醒掉電的 CPUEXTINT = 0 x0F ;/ 清除外部中斷標志。使用定時器時脈寬測量: 脈沖從 P0.0 口輸入, 程序等待 P0.0 口變?yōu)榈碗娖胶髥佣〞r器測量,當P0.0 口變?yōu)楦唠娖綍r,停止定時器,然后從T0TC寄存器讀取定時計數(shù)值。編寫程序代碼?答:TOPR = 0;while(IO0PIN & 0 x01) != 0);TOTCR = 0 x01;While (IO0PIN & 0 x01) = = 0);TOTCR = 0 x00;Time = TOTC;U0RBR寄存器和U0THR寄存器的地址是
38、完全一樣的,是不是說明接收寄存器和發(fā)送寄存器是同一物理寄存器?它們是怎樣區(qū)分的?答:雖然U0RBR寄存器和U0THR寄存器的地址是完全一樣,但接收寄存器和發(fā)送寄存器不是同 一物理寄器。它們是通過讀寫信號線來區(qū)分的,當為 WE操作時,選擇U0THR寄存器;當為 RD操作時,選擇U0RBR寄存器。改錯:ARM 狀態(tài)與 Thumb 狀態(tài)的切換是要影響處理器的模式或寄存器的內容的。 ( X )特權模式是哪些模式?為什么叫特權模式?答:特權模式除了用戶模式外,其它模式均為特權模式,即:系統(tǒng)模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式。之所以稱為特權模式是因為ARM內部寄存器和一些片內外設在
39、硬件設計上只允許這些模式訪問。此外,特權模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。異常模式是哪些模式?答:異常模式由快中斷模式、中斷模式、管理模式、中止模式、未定義模式。判錯:進入異常模式可以通過程序切換進入,也可以由特定的異常進入。(V)在ARM7TDMI處理器內部有37 個用戶可見的寄存器,這些寄存器分成兩大類:一類為通用32位寄存器,有 31 個,另一類為狀態(tài)寄存器,有 6 個。未分組的寄存器有 R0-R7共8個。在任何模式下,這些寄存器都對應于相同的32位物理寄存器。寄存器R8 R12有兩個分組的物理寄存器。一個用于除FIQ模式之外的所有寄存器模式,另一個用于 F
40、IQ模式。這樣在發(fā)生 FIQ中斷后,可以加速 FIQ的處理速度。當使用STR或STM指令保存R15時,保存值與 R15值是不一致的,為什么?答:這是由于 R15是當前指令的地址,而 ARM為多級流指令操作,當在執(zhí)行段執(zhí)行保存PC時,此時的PC值已不是當前指令的 PC值,而是當前地址的加一個偏移常量,如 8或12。判錯:ARM執(zhí)行STR或STM指令保存R15時,其保存的值與當前指令地址PC 一致的。(X)請判斷下面程序段的作用是獲取常量值,即跳轉時地址 =PC+常量+偏移地址中的常量,通常為 8。 TOC o 1-5 h z SUBR1,PC,#4STRPC,R0LDRR0,R0SUBR0,R0
41、,R1如果異常處理程序已經把返回的地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復用戶寄存器并實現(xiàn)返回。SUB LR,LR,#4STMFD SP!,R0-R3,LRLDMFD SP!,R0-R3,PCA請解釋“! ”和“人”的含義?答:“一表示最后的地址值要寫回SR表示這是一條特殊形式的指令。這條指令在從存儲器中裝載PC的同時( PC是最 后恢復的),SPS他恢復到CPSRARM7TDMI處理器采用是“哈佛結構”而非馮諾依曼(Von Neumann)結構。(X)ARM7TDMI處理器指令和數(shù)據共用一條 32位數(shù)據總線。只有裝載、保存和交換指令可訪問存儲器中的數(shù)據。(V)ARM指令集哪幾大
42、類指令?答:ARM指令集5大類指令,它們是:分支指令;數(shù)據處理指令;加載和存儲指令;協(xié)處理 器指令;雜項指令。從尋址方式的地址計算方法分,加載/存儲指令有4種格式。零偏移、前索引偏移、程序相對偏移、后索引偏移,請標出下面指令屬于哪一種:LDR R0,R1,#0 x04; LDRR0,R1,#0 x04LDRR0,label ;LDR R0,R1 ;在多寄存器加載指令 LDMIA R0!, R1-R4,LR人中,請解釋“! ”和“人”的作用?答:“一表示在操作結束后,將最后的地址寫回R0中;表示兩方面,一方面進行數(shù)據傳送且寄存器列表不包含PC時,加載/存儲的寄存器是用戶模式下的,而不是當前模式的
43、寄存器。另一方面,若在LDM指令且寄存器列表中包含有PC時使用,那么除了正常的多寄存器傳送外,還將SPS他拷貝到CPSR中,這可用于異常處理返回。該后綴不允許在用戶模式或系統(tǒng)模式下使用。ARM狀態(tài)下的壓棧和出棧操作可以用數(shù)據塊傳送指令完成,為什么還要用堆棧指令進行堆棧操作?答:如STMDA R0!,R5-R6 LDMIB R0!,R5-R6的數(shù)據塊傳送指令進行堆棧操作,也可用STMED R0!,R5-R6 LDMED R0!,R5-R6的堆棧指令進行堆棧操作。兩段代碼的執(zhí)行結果 是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡單,前后模式一致即可,而使用數(shù) 據塊指令進行壓棧和出棧操作則需要考
44、慮空與滿、加與減對應的問題。LPC2000系列微控制器包含四大部分:ARM7TDMI-S CPC ARM7局夸B總線及相關夸B件、AHB高性能總線及相關部件、VLSI外設總線及相關部件。AHB外設分配了8 M字節(jié)的地十范圍, 它位于4G字節(jié)ARM尋址空間的最頂端。AHB可接外設12 8 個,每個分配 16KB 的地址空間。VPB外設分配了2M字節(jié)的地址范圍.從3.5GB地址點開始,VPB可分配128個外設,每個 VPB外設都分配了 16KB的地址空間。向量中斷控制器(VIC)最多可以管理32個中斷請求,LPC2000實際管理了 19個中斷請求。外部存儲器控制器(EMC)支持4個BANK的外部S
45、RAM或Flash,每個BANK最多名MB 容量。對SRAM的寫入一次操作后,如果發(fā)生芯片復位,實際的SRAM內容將不會反映最近一次的寫操作。(V)在LPC2000系列芯片中,對 SRAM執(zhí)行一次寫入操作,此時芯片復位,為什么實際的SRAM內容將不會反映最近一次的寫操作?答:由于SRAM控制器包含一個回寫緩沖區(qū),它總是保存著軟件發(fā)送到SRAM的最后一個字數(shù)據。該數(shù)據只有在軟件請求下一次寫操作時才寫入SRAM。如果發(fā)生芯片復位,實際的SRAM內容將不反映最近一次的寫操作。為什么整個BootBlock塊被映射到片內存儲器空間的頂端?答:這是為了兼容將來的器件,以便將來的芯片內置不同的RAM和FAL
46、SH都不會影響B(tài)ootBlock 的位置。實現(xiàn)掉電喚醒不需要在向量中斷控制器VIC中使能相應的中斷。(X)異常向量表可能來源于內部Flash、內部SRAM內部BootBlock、外部存儲器。(V)對LPC2210來說,當 MEMMAP寄存器的MAP1:0=11時,當引腳BOOT1和BOOT0全為高電平,復位后從外部Flash執(zhí)行程序。(X)對LPC2210來說,當 MEMMAP寄存器的MAP1:0=11時,當引腳BOOT1和BOOT0不全為高電平但芯片加密,復位后從外部Flash執(zhí)行程序。(X)與外部存儲器的連接時,如果存儲器組配置成32位寬度,地址線A0和A1為什么無用,且可作為GPIO使用
47、?答:與外部存儲器的連接時,如果存儲器組配置成32位寬度,則尋址是按字(4字節(jié))操作,但存儲器地址是按字節(jié)編址,因此只有當A0和A1不參與尋址時才是按字操作,因此 A0和A1這兩根線可用作 GPIO而不影響尋址。與外部存儲器的連接時, 如果存儲器組配置成 16位寬度,地址線 A0為什么無用?同一寄存器組的器件寬度可以不一致。 (X)與外部存儲器連接的是32位寬度,請畫出4片8位存儲器芯構成32位存儲器的連接示意圖?中斷控制器將32個中斷輸入進行分配,可轉向的中斷類型是FRQ、向量IRQ 和 非向量IRQ。請描述ARM內核是如何通過向量中斷控制器VIC獲取中斷服務程序地址的?答:在發(fā)生向量IRQ
48、中斷后,VIC能將對應中斷的服務程序地址保存的寄存器VICVectAddr0-15中按對應VICVectCntl0-15的優(yōu)先級順序選取級別最高的地址,并送入 VICVectAddr寄存器中, 而非向量中斷是將 VICDefVectAddr送入VICVectAddr寄存器中,在異常向量表的IRQ異常入口 處放置一條指令,將 VICVectAddr寄存器的內容裝入程序計數(shù)器PC,就可以跳轉到當前中斷的服務函數(shù)。請編寫一段C代碼。要求設置外部中斷0產生向量IRQ中斷后執(zhí)行中斷服務程序IRQ_Eint0()。答:PINSEL1 = (PINSEL1&0XFFFFFFFC) | 0 x0綠置 P0.1
49、6 為外部中斷VICIntSelect = 0 x00000000; 設置所有中斷為IRQ中斷 VICVectCntl0 = (0 x20 | 14);將EINT0設置為優(yōu)先級 0,使能IRQ中斷 VICVectAddr。= (int)IRQ_Eint0;EXTINT = 0 x01;清除外部中斷0的標志后使能外部中斷0 VICIntEnable = (114);簡述向量IRQ的中斷入口地址的形成過程?答:初始化時,向量IRQ的入口地址保存在 VICVectAddrx寄存器中,通過 VICVectCntlx保存 中斷源類型,當有所設置的IRQ中斷源發(fā)生中斷時,中斷控制器(VIC)將中斷源所對應
50、的向量IRQ入口地址寄存器 VICVectAddrx內容保存到 VICVectAddr并由ARM通過異常向量表所對 應的入口地址 0 x00000018執(zhí)行LDR PC PC, # -0 xFF0指令就完成將 VICVectAddr地址內容裝 載到PC中形成中斷入口地址跳轉,進入中斷服務程序。簡述非向量IRQ的中斷入口地址的形成過程?答:初始化時,非向量 IRQ的入口地址保存在 VICDefVectAddr,當有所設置的非向量IRQ中斷源發(fā)生中斷時,中斷控制器( VIC)將中斷源所對應的非向量IRQ入口地址寄存器VICDefVectAddr內容保存到VICVectAddr,并由 ARM通過異常
51、向量表所對應的入口地址0 x00000018執(zhí)行LDR PC PC, # -0 xFF0脂令就完成將 VICVectAddr地址內容裝載到 PC中形成 中斷入口地址跳轉,進入中斷服務程序。簡述向量IRQ和非向量IRQ的中斷入口地址形成異同?答:相同點:同為IRQ中斷,ARM通過異常向量表所對應的入口地址 0 x00000018執(zhí)行LDR PC PC, # -0 xFF0俏令就完成將 VICVectAddr地址內容裝載到 PC中形成中斷入口地址跳轉 ,進入中 斷服務程序。不同點:VIC形成VICVectAddr地址,一個是從向量地址寄存器VICVectAddrx讀取,一個是從寄存器VICDefVectAddr讀取。設置引腳為GPIO為輸出模式時,向IOxSET寄存器對應位寫1時輸出高電平,寫0時輸出低電平。(X)VIC寄存器 VICIntSelect 的作用。VIC寄存器 VICVectCntlx 的作用 。VIC寄存器 VICVectAddrx 的作用 。VIC寄存器 VICVectAddr 的作用。VIC寄存器 VICDefVectAddr 的作用LPC2000型中的定時器功能除了可作計數(shù)操作外,還可作:信號捕獲和信號匹配發(fā)生。I2C的2根線分別是串行數(shù)據SDA和串行時鐘 SCL簡述
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論