嵌入式系統(tǒng)與應(yīng)用實驗_第1頁
嵌入式系統(tǒng)與應(yīng)用實驗_第2頁
嵌入式系統(tǒng)與應(yīng)用實驗_第3頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、入式系統(tǒng)與應(yīng)用實驗報告班級:網(wǎng)絡(luò) 111姓名:石長江學(xué)號: 201100824123實驗一匯編指令試驗一、實驗?zāi)康恼莆誂RM7TMDI匯編指令的用法,并能編寫簡單的匯編程序; 學(xué)習(xí)ARM微控制器的16位Thumb匯編指令的使用方法 掌握指令的條件執(zhí)行二、實驗設(shè)備硬件:嵌入式實驗平臺一套、仿真器一個、PC機一臺。軟件:Win dows 98/2000/NT/XP 操作系統(tǒng)、仿真器驅(qū)動程序、ADS開發(fā)軟件一套。三、實驗內(nèi)容分別使用ARM Thumb指令A(yù)DD,MOV,CMP,B計算1+ 2+ 3 + N的值。四、實驗原理ARM處理器共有兩種工作狀態(tài):ARM 32位,這種狀態(tài)下執(zhí)行字對準(zhǔn)的 ARM指

2、令。Thumb 16位,這種狀態(tài)下執(zhí)行半字對準(zhǔn)的Thumb指令。注意:ARM和Thumb之間狀態(tài)的切換不影響處理器的模式或寄存器的內(nèi)容。ARM處理器在兩種工作狀態(tài)之間可以切換。(1)進入Thumb狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位0為1時,執(zhí)行BX指令進入Thumb狀態(tài)。如果處理器在 Thumb狀態(tài)進入異常,則當(dāng)從異常出來(IRQ、FIQ、Undef、Abort、SWI) 返回時,自動切換到 Thumb狀態(tài)。進入ARM狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位 0為0時,執(zhí)行BX指令進入ARM狀態(tài)。處 理器進行異常處理(IRQ、FIQ、Un def、Abort、SW)。在此情況下,把 PC放入異常模 式鏈接寄存器

3、中。從異常向量地址開始執(zhí)行也可以進入ARM狀態(tài)。Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的子集。程序員可以直接訪問8個通用寄存器(R0- R7)、PC SP、LR和CPSP每一種特權(quán)模式都有一組 SP、LR和SPSRThumb狀態(tài)的R0-R7與ARM狀態(tài)的R0-R7 一致。Thumb狀態(tài)的CPSR和SPSR與ARM狀態(tài)下的CPSR和SPSR一致。Thumb狀態(tài)的SP映射到ARM狀態(tài)的R13oThumb狀態(tài)的LR映射到ARM狀態(tài)的R14Thumb狀態(tài)的PC映射到ARM狀態(tài)的PC(R15)。本程序使用R0保存結(jié)果,所以一開始就要初始化為 0 ;循環(huán)執(zhí)行R0=R0+R1,R1為循環(huán)計 數(shù)器,

4、從1開始計數(shù),每一次循環(huán) R1加1;當(dāng)循環(huán)計數(shù)器R1的值到達N時,運算結(jié)束。五、實驗操作步驟1 .啟動 ADS1.2,使用 ARM Execuatable Image 工程模板建立一個工程 ASM_Project。2.建立源文件test2.s,編寫實驗程序,然后添加到工程中(ARM指令和Thumb指令實驗的test2.s 程序源碼分別見下清單)。3.設(shè)置工程鏈接地址 RO Base為0x0C000000I ¥IFI Hu廠 p : KJI-.-lva.i g如珂 1 Ld 0 " 出同占IL. IlM卻土 亠I町g | 腳“倉丹 |甘比tsaw 斗saa選疫藝刊!*tfnM

5、rfcb £DdiUr«niarFiw AfiM DfvAfHr-kfli! rJJ4. 編譯鏈接工程,選擇【Project】-【Debug,啟動AXD進行調(diào)試。5. 打開寄存器窗口( Processor Registers ),選擇Current項監(jiān)視各寄存器的值。6. 單步運行程序,注意執(zhí)行BX R0指令前后CPSR寄存器的T位。說明:在寄存器窗口的 CPSR寄存器,大寫字母的位表示該位為 1,小寫字母的位表示該位為0 (比如“ T”表示T位為1,“ t ”表示T位為0)。7. 理解并掌握本實驗原理及程序,完成練習(xí)題六、實驗參考程序Thumb匯編指令實驗的參考程序代碼清

6、單;文件名:test.s;功能:計算1 + 2 + 3+N的值定義N的值為50區(qū)域名為testcode,代碼,只讀入口N EQU 50AREA testcode,CODE,READONLYENTRYCODE32ARM_CODE LDR SP,=0x40003F00sp=0x40003F00ADR R0,THUMB_CODE+1BX R0LTORGCODE16THUMB_CODELDR R0,=NBL SUM_NB THUMB_CODE; 名稱: SUM_N;功能:計算1 + 2 + 3+N的值; 入口參數(shù): R0( N 的值 ); 出口參數(shù): R0( 運算結(jié)果 )SUM_NPUSH R1-R7

7、,LRMOVS R2,R0 R0BEQ SUM_ENDCMP R2,#1 R2BEQ SUM_ENDMOV R1,#1MOV R0,#0SUM_L1 ADD R0,R1 R0=R0+R1BCS SUM_ERRCMP R1,R2R1BHS SUM_ENDADD R1,#1R0=R0+1B SUM_L1SUM_ERR MOV R0,#0_SUM_END POP R1-R7,PCENDARM匯編指令實驗的參考程序代碼清單:; 文件名: add.s;功能:計算1 + 2 + 3+N的值NEQU 5;AREA Example,CODE,READONLYENTRYCODE32STARTLDR R0,=NM

8、OV R2,R0MOV R0,#0MOV R1,#0LOOPCMP R1,R2將分支目標(biāo)地址送R0,使R1的bit0=1分支并且轉(zhuǎn)換為thumb狀態(tài)匯編以下代碼為thumb指令偽指令 R0=50跳轉(zhuǎn)到SUM_執(zhí)行跳轉(zhuǎn)至U THUMB_CODEhumb模式的內(nèi)容放入 R2相等轉(zhuǎn)到 SUM_END與1比較 ,設(shè)置標(biāo)志位相等轉(zhuǎn)到 SUM_END將1送入R1將0送入R0與R2比較,設(shè)置標(biāo)志位轉(zhuǎn)到 SUM_L1將 0 送入 R0定義 N 的內(nèi)容為 5 定義區(qū)域,區(qū)域名為 Example ,代碼,只讀 入口R0=5R2=R0R0=0R1=0比較 R1 與 R2R0=R0+R1R1=R1+1 轉(zhuǎn)到 loop

9、 轉(zhuǎn)到 startBHI ADD_ENDADD R0,R0,R1ADD R1,R1,#1B LOOPADD_ENDB STARTEND實驗二 ARM 微處理器工作模式實驗一、實驗?zāi)康?通過實驗掌握學(xué)會使用 MSR/MRS 指令實現(xiàn) ARM 處理器工作模式的切換,觀察 不同模式下的寄存器,加深對 CPU 結(jié)構(gòu)的理解。二、實驗設(shè)備硬件:嵌入式實驗平臺一套、仿真器一個、PC 機一臺。軟件: Windows 98/2000/NT/XP 操作系統(tǒng)、仿真器驅(qū)動程序、 ADS 開發(fā)軟件一套。三、實驗內(nèi)容 通過 ARM 匯編指令,在各種處理器模式下切換并觀察各種模式下寄存器的區(qū)別;掌握 ARM 不同模式的進入

10、與退出。四、實驗原理 1 ARM 處理器模式 ARM 體系結(jié)構(gòu)支持表 1- 所示的 7 種處理器模式。處理器模式 說明 用戶 usr 正常程序執(zhí)行模式 FIQ fiq 支持告訴數(shù)據(jù)傳送或通道處 理CPSR CPS包含條件碼標(biāo)志、中斷IRQ irq 用于通用中斷處理 管理 svc 操作系統(tǒng)保護模式 中止 abt 實現(xiàn)虛擬存儲器和 /或存儲器 保護 未定義 und 支持硬件協(xié)處理器的軟件仿 真 系統(tǒng) sys 運行特權(quán)操作系統(tǒng)任務(wù) 表1- 處理器模式 在軟件控制下也可以改變模式,外部中斷或異常處理也可以引起模式發(fā)生改變。大多數(shù) 應(yīng)用程序在用戶模式下執(zhí)行。 當(dāng)處理器工作在用戶模式時, 正在執(zhí)行的程序不

11、能訪問某些被 保護的系統(tǒng)資源, 也不能改變模式, 除非異常發(fā)生。 這允許適當(dāng)編寫操作系統(tǒng)來控制系統(tǒng)資 源的使用。 除用戶模式外的其他模式成為特權(quán)模式。 它們可以自由地訪問系統(tǒng)資源和改變模 式。其中 5 種稱為異常模式,即: FIQ (Fast Interrupt Request) ; IRQ (Interrupt Request) ; 管理 (Supervisor) ; 中止 (Abort) ; 未定義 (Undefined) 當(dāng)特定的異常出現(xiàn)時,進入相應(yīng)的模式。每種模式都有某些附加的寄存器,以避免異常 出現(xiàn)時用戶模式的狀態(tài)不可靠。剩下的模式是系統(tǒng)模式。僅 ARM 體系結(jié)構(gòu) V4 以及以上的

12、版本有該模式。 不能由于任何異常而進入該模式。 它與用戶模式有相同的寄存器, 但它是特 權(quán)模式, 不受用戶模式的限制。 它供需要訪問系統(tǒng)資源的操作系統(tǒng)任務(wù)使用, 但希望避免使 用與異常模式有關(guān)的附加寄存器。 避免使用附加寄存器保證了當(dāng)任何異常出現(xiàn)時, 都不會使 任務(wù)的狀態(tài)不可靠。 2程序狀態(tài)寄存器 在所有處理模式下,都可以訪問當(dāng)前程序狀態(tài)寄存器禁止位、當(dāng)前處理器模式以及其他狀態(tài)和控制信息。每種異常模式都有一個程序狀態(tài)保存寄存器SPSR當(dāng)異常出現(xiàn)時,SPSR用于保存CPSR勺狀態(tài)。CPSR和SPSR的格式如下:(1) 條件碼標(biāo)志N Z、C V:大多數(shù)指令可以檢測這些條碼標(biāo)志,以決定程序指令如何執(zhí)

13、行。(2) 控制位最低8位I、F、T和M位用作控制位。當(dāng)異常出現(xiàn)時改變控制位。當(dāng)處理器在特權(quán)模式下時也可以由軟件改變。I中斷禁止位:I置1則禁止IRQ中斷;F置1則禁止FIQ中斷。I T位:T= 0指示ARM執(zhí)行;T= 1指示Thumb執(zhí)行。在這些體系結(jié)構(gòu)的系統(tǒng)中,可自由 地使用能在ARM和Thumb狀態(tài)之間切換的指令。l模式位:M0 M1、M2、M3和M4(M4: 0)是模式位。這些位決定處理器的工作模(3) 其他位程序狀態(tài)寄存器的其他位保留,用作以后擴展。五、實驗操作步驟1啟動ADS1.2,建立一個新的工程;2建立匯編源程序文件 TEST3.S,編寫實驗程序,添加到工程中;3編譯鏈接工程,

14、點擊 Debug按鈕,啟動AXD進行調(diào)試;4. 點擊【Processor Views】-【Registers】,打開Current項監(jiān)視個寄存器的值;5. 單步運行程序,注意觀察 CPSR SPSR以及R0寄存器值得變化。說明:CPSR寄存器顯示方式如圖1-所示。顯示分為兩部分,一部分是各個標(biāo)志位,另 一部分是工作模式。標(biāo)志位 NZCVQ為條件碼標(biāo)志N Z、C V、Q,顯示為大寫字母,表示該 位為1;顯示為小寫字母,表示該位為 0。Q標(biāo)志在ARM體系結(jié)構(gòu)v5及以上版本的E變量中 才有效。標(biāo)志位IFT為IRQ中斷禁止位I、FIQ中斷禁止位F、ARM微控制器狀態(tài)位T,顯示 為大寫字母,表示該位為

15、1 ;顯示為小寫字母,表示該位為0。T標(biāo)志在ARM體系結(jié)構(gòu)v4及以上版本的T變量中才有效。寄存器顯示窗口沖X勺回*出 丨區(qū)創(chuàng)丨E "lm區(qū)聞珂® .匱回日同匚1巳回IPfflLPWT曰Eint.1)eMDONHMDJu.KhDQKIIDQDe2gDQKKEMCl占CmWQOIMD-u|-eJDxMUlZOlD-rfiOMWWtOQO-tl-tar?諭聞叭4QtiO4NMCO4MD-eLIEbfHirazDaDrlfgpg聞凹qrtlS個聞腫削NO-E14QKDaCQZDOD侶DuUMIMD卜 Cf StrurvijLEc. Ria田 Ui»E/5yjj. . jb

16、teoU田URh-i1齊I刪護mi冋n擁1M7TD1I -LamnCBLEFT3 EDU >54 aEW Li I TTJhne IZCTT EHJETS EW 沁 EOU 0 ju£ilBM Kb 號n:vHW陽n:VHW F川TBWn:vHW RLEirfW六、實驗參考程序ARM微控制器工作模式實驗的參考程序如下:定義各塊的長度USR_STACK_LEGTH EQU 64SVC_STACK_LEGTH EQU 0FIQ_STACK_LEGTH EQU 16IRQ_STACK_LEGTH EQU 64ABT_STACK_LEGTH EQU 0UND_STACK_LEGTH E

17、QU 0AREA Example3,CODE,READONLYENTRYCODE32START MOV R0,#0MOV R1,#1MOV R2,#2MOV R3,#3MOV R4,#4MOV R5,#5MOV R6,#6MOV R7,#7MOV R8,#8MOV R9,#9MOV R10,#10MOV R11,#11MOV R12,#12BL InitStackMRS R0,CPSRBIC R0,R0,#0X80MSR CPSR_cxsf,R0MSR CPSR_c,#0xd0MRS R0,CPSRMSR CPSR_c,#0xd0MRS R0,CPSRHALT B HALT;名稱: InitS

18、tack;功能:堆棧初始化,即初始化各模式下下的堆棧指針。;入口參數(shù):無;出口參數(shù):無InitStackMOV R0,LRMSR CPSR_c,#0xd3LDR SP,StackSvcMSR CPSR_c,#0xd2LDR SP,StackIrqMSR CPSR_c,#0xd1LDR SP,StackFiqMSR CPSR_c,#0xd7LDR SP,StackAbtMSR CPSR_c,#0xdbLDR SP,StackUndMSR CPSR_c,#0xdfLDR SP,StackUsr定義區(qū)域,區(qū)域名為 Example3 ,代碼,只讀 入口R0=0R1=1R2=2R3=3R4=4R5=5R

19、6=6R7=7R8=8R9=9R10=10R11=11R12=12R0 的內(nèi)容送入 CPSRCPSR_cxsf =R0CPSR_c=0xd0R0 的內(nèi)容送入 CPSRCPSR_c=0xd0R0 的內(nèi)容送入 CPSR暫停LR=R0CPSR_c=0xd3SP= StackSvc,指針指到 StackSvcCPSR_c=0xd2SP= StackIrq,指針指到 StackIrqCPSR_c=0xd1SP= StackFiq,指針指到 StackFiqCPSR_c=0xd7SP= StackAbt,指針指到 StackAbtCPSR_c=0xdbSP= StackUnd,指針指到 StackUndC

20、PSR_c=0xdfSP= StackUsr,指針指到 StackUsrMOV PC,R0PC=R0StackUsr DCD UsrStackSpace+(USR_STACK_LEGTH-1)*4StackSvc DCD SvcStackSpace+(SVC_STACK_LEGTH-1)*4StackIrq DCD lrqStackSpace+(IRQ_STACK_LEGTH-1)*4StackFiq DCD FiqStackSpace+(FIQ_STACK_LEGTH-1)*4StackAbt DCD AbtStackSpace+(ABT_STACK_LEGTH-1)*4StackUnd D

21、CD UndStackSpace+(UND_STACK_LEGTH-1)*4AREA MyStacks,DATA,NOINIT,ALIGN=2字定義區(qū)域名為MyStacks,數(shù)據(jù),UsrStackSpace SPACE USR_STACK_LEGTH*4 SvcStackSpace SPACE SVC_STACK_LEGTH*4 IrqStackSpace SPACE IRQ_STACK_LEGTH*4 FiqStackSpace SPACE FIQ_STACK_LEGTH*4 AbtStackSpace SPACE ABT_STACK_LEGTH*4UndStackSpace SPACE U

22、ND_STACK_LEGTH*4END各模式下cpsr的值的含義及相關(guān)寄存器的值的變化。&'CuEcenx-t®-El-c20rO£l£l£llMl£lOxCOODIKaOMOODWCig(bdMOOIXXiO-e5OkMODKiOO-eTn&ociooiKtio-EflOKCODDIKflDEClQQlBdQeU(bcMOONXJO-eL?-EliCu 40003! FOO-cl-4(UCKI00H40-pcOEOddOftdilCi= qpjxn=rqirr_SWti 珅j 嗣ffl-i.feier.i'Sy

23、FWi.>d-bTV.:PtgiFwi741 Ufi-IlOxDDIHXiai-IS0x00000403-EiXQIMRWI 斗QxDDKCCOSid-FDkDMXXXICI?-ifPkQIKIXIQ-I?OkDD«XX1Q9-eXO-HlOkDEXXMQQ-siiQKDEMXKCaaeL4P-:OkDINK嗣 28spdlnxn»q3rt_3¥Cn£mjaiT_Fje3S' Qnx.i'5yati>1J哥nqf)-e«OKdiNBCdddDxDDHXXiaO-tinn.nnopiMmT-l 1rh-nMYYWinV

24、aiiuE4卜i-xaEheDaaoaODD«-Klthtnaatnooi1沁QMDcmoang-S3henaaoa»DDMdaaooooDi沙DudaaoaofiDOttnaaDDOQDi沙EheOadffiMODi曲DttdaaacooDi-aStheaaaaaaoD*-k1QDttnaaoaooDi-siliDaaaDoaoD-M12ounaaiKiCKiD-K1S血丸血3EEDOttDaddSOl?ip亡taoaaoeazfii亡聲"L.昨 時1U*忙 因FIQ2CTTT_S¥C 3TlECUql£L_G*fl 1 1-丨實驗三 通用

25、IO 口試驗、實驗?zāi)康氖煜?ARM芯片 I/O掌握 ARM芯片 I/O、實驗設(shè)備口編程配置方法;口控制 LED 顯示的方法。硬件:嵌入式實驗平臺一套、仿真器一個、 PC 機一臺。ADS 開發(fā)軟件一套。軟件: Windows 98/2000/NT/XP 操作系統(tǒng)、仿真器驅(qū)動程序、三、實驗內(nèi)容控制嵌入式實驗箱上的 LED 輪流點亮。四、實驗原理S3CRRB0X 芯片上共有 71 個多功能 I/O 引腳,他們分別為 7 組 I/O 端口:2 個 9 位 I/O 端口 (端口 E 和 F)2 個 8 位 I/O 端口 (端口 D 和 G )1 個 16 位 I/O 端口 (端口 C )1 個 10 位

26、 I/O 端口 (端口 A )1 個 11 位 I/O 端口 (端口 B ) 每組端口都可以通過軟件配置寄存器來滿足不同系統(tǒng)合設(shè)計的需要。在運行主程序之 前,必須先對每一個用到的引腳的功能進行設(shè)置。 如果某些引腳的附庸功能沒有使用, 那么 可以先將該引腳設(shè)置為 I/O 口。S3C44B0X 芯片與端口相關(guān)的寄存器(1)端口控制寄存器(PCONAG ):在S3C44B0X 芯片中,大部分引腳是使用多路復(fù)用的,所以要確定每個引腳的功能。 PCONn (端口控制寄存器)能夠定義引腳功能。如 果 PG0PG7 作為掉電模式下的喚醒信號,那么這些端口必須配置成中斷模式。( 2)端口數(shù)據(jù)寄存器 ( PDA

27、TAG ):如果端口定義為輸出口,那么輸出數(shù)據(jù)可以寫入 PDATn 中 相 應(yīng) 的 位 ; 如 果 端 口 定 義 為 輸 入 口 , 那 么 輸 入 數(shù) 據(jù) 可 以 從 PDATn 相應(yīng)的位中讀 入。(3)端口上拉寄存器(PUPCG):通過配置端口上拉寄存器,可以使該組端口與上拉 電阻連接或斷開。當(dāng)寄存器中相應(yīng)位配置為 0 時,該引腳接上拉寄存器;當(dāng)寄存器中相 應(yīng)位 配置為 1 時,該引腳不接上拉電阻。(4 )外部中斷寄存器 (EXTINT ):通過不同的信號方式可以使 8 個外部中斷被請 求。 EXTINT 寄存器可以根據(jù)外部中斷的需求,將中斷觸發(fā)信號配置為低電平觸發(fā),高 電平觸發(fā),下降沿

28、觸發(fā),上升沿觸發(fā)和邊沿觸發(fā)幾種方式。五、實驗操作步驟1. 啟動 ADS1.2,使用 ARM Execuatable Image 工程模板新建一個工程 ; 2添加兩個組 INC 和 SRC;3. 將 INC 文件夾下所有文件添加到組 INC 中;4. 將 SRC 文件夾下所有文件添加到組 SRC 中 ;5. 建立源文件test5.C,編寫實驗程序,添加到工程中 ;6. 編譯鏈接選項的設(shè)置同前面實驗;7. 編譯鏈接工程,點擊 Debug 按鈕,啟動 AXD 進行調(diào)試 ;8 . 連 續(xù) 點 擊 step in 按 鈕 , 單 步 運 行 程 序 , 主 板 上 的 三 個 LED 燈循環(huán)點亮。9.理

29、解并掌握本實驗原理及程序,完成練習(xí)題六、實驗參考程序#include "option.h"#include "def.h"#include "44b.h"#include "44blib.h"void Isr_Init(void); void HaltUndef(void); void HaltSwi(void); void HaltPabort(void); void HaltDabort(void);void Main(void) rSYSCFG=SYSCFG_8KB;#if (PLLON 1) ChangeP

30、llValue(PLL_M,PLL_P,PLL_S);#endifIsr_Init();Port_Init();Uart_Init(0,115200);Uart_Select(0);Delay(0); /calibrate Delay()Led_Display(7);Delay(1000); /calibrate Delay() Led_Display(0);Delay(5000); /calibrate Delay()Led_Display(7);Uart_Printf("n start n");while(1)Delay(5000); /calibrate Delay(

31、) Led_Display(1);Delay(5000); /calibrate Delay() Led_Display(2);Delay(5000); /calibrate Delay()Led_Display(4);void Isr_Init(void)波特率是 115200延遲0111三個燈全亮亮第一個燈,其他滅亮第二個燈,其他滅亮第三個燈,其他滅U32 i; pISR_UNDEF=(unsigned)HaltUndef; pISR_SWI =(unsigned)HaltSwi; pISR_PABORT=(unsigned)HaltPabort; pISR_DABORT=(unsigne

32、d)HaltDabort;for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4) *(volatile unsigned *)i)=0xEA000000+0x1FFE;rINTCON=0x5; / Non-vectored,IRQ enable,FIQ disable rINTMOD=0x0;/ All=IRQ moderINTMSK|=BIT_GLOBAL|BIT_EINT3;/ All interrupt is masked.void HaltUndef(void)Uart_Printf("Undefined ins

33、truction exception!n");while(1);void HaltSwi(void)Uart_Printf("SWI exception!n");while(1);void HaltPabort(void)Uart_Printf("Pabort exception!n");while(1);void HaltDabort(void)Uart_Printf("Dabort exception!n");while(1);思考題1本試驗中共用到了那些寄存器,他們的作用是什么?2 在原程序的基礎(chǔ)上改變led燈的閃爍方

34、式。將其中部分程序改為以下程序,使其變?yōu)槊看蝺蓚€燈一起亮 Uart_Printf("n start n");while(1)Delay(5000); /calibrate Delay()Led_Display(3);Delay(5000); /calibrate Delay()Led_Display(5);Delay(5000); /calibrate Delay()Led_Display(6);實驗四串口試驗一、實驗?zāi)康?. 掌握ARM的串行口工作原理2. 學(xué)習(xí)編程實現(xiàn) ARM的UART通訊3. 掌握CPU利用串口通訊的方法二、實驗設(shè)備硬件:ARM嵌入式開發(fā)板、用于 AR

35、M7TDMI的JTAG仿真器、PC、串口線。軟件:PC 機操作系統(tǒng) win98、Win2000 或 WinXP、ARM SDT 2.51 或 ADS1.2 集成開發(fā)環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序三、預(yù)備知識1. 用ARM ADS1.2集成開發(fā)環(huán)境,編寫和調(diào)試程序的基本過程2. ARM應(yīng)用程序的框架結(jié)構(gòu)3. 了解串行總線四、實驗內(nèi)容學(xué)習(xí)串行通訊原理,了解串行通訊控制器,閱讀ARM芯片文檔,掌握 ARM的UART相關(guān)寄存器的功能,熟悉ARM系統(tǒng)硬件的UART相關(guān)接口。編程實現(xiàn) ARM和計算機實現(xiàn)串行通訊。ARM監(jiān)視串行口,將接收到的字符再發(fā)送給串口(計算機與開發(fā)板是通過超級終端通訊的),即

36、按PC鍵盤通過超級終端發(fā)送數(shù)據(jù),開發(fā)板將接收到的數(shù)據(jù) 再返送給PC,在超級終端上顯示。五、實驗原理串行通訊是微計算機之間種常見的近距離通訊手段,因使用方便、編程簡單而廣泛使用,幾乎所有的微控制器、PC都提供串行通訊接口。1. 異步串行I /O異步串行方式是將傳輸數(shù)據(jù)的每個字符位接位(例如先低位、后高位)地傳送。數(shù)據(jù)的各不同位可以分時使用同傳輸通道,因此串行I / O 可以減少信號連線,最少用 對線即可進行。接收方對于同 根線上 連串的數(shù)字信號,首先要分割成 位,再按位組成字符。為了恢復(fù)發(fā)送的信息,雙方必須協(xié)調(diào)工作。在微型計算機中 大量使用異步串行I /O方式,雙方使用各自的時鐘信號,而且允許時

37、鐘頻率有定誤差,因此實現(xiàn)較容易。但是由于每個字符都要獨立確定起始和結(jié)束(即每個字符都要重新同步),字符和字符間還可能有長度不定的空閑時間,因此效率較低。圖4.1串行通信字符格式圖4.1給出異步串行通信中個字符的傳送格式。開始前,線路處于空閑狀態(tài),送出連續(xù)1”。傳送開始時首先發(fā) 個0”作為起始位,然后出現(xiàn)在通信線上的是字 符的二進制編碼數(shù)據(jù)。每個字符的數(shù)據(jù)位長可以約定為5位、6位、7位或8位,般采用ASCII編碼。后面是奇偶校驗位,根據(jù)約定,用奇偶校驗位將所傳字符中為1的位數(shù)湊成奇 數(shù)個或偶數(shù)個。也可以約定不要奇偶校驗,這樣就取消奇偶校驗位。最后是 表示停止位的1 ”信號,這個停止位可以約定持續(xù)

38、1 位、1.5 位或2 位的時間寬度。至此個字符傳送完畢,線路又進入空閑,持續(xù)為 1”。經(jīng)過 段隨機的時間后,下個字 符開始傳送才又發(fā)出起始位每個數(shù)據(jù)位的寬度等于傳送波特率的倒數(shù)。微機異步 串行通信中,常用的波特率為2400,4800, 9600, 19200bps 等。接收方按約定的格式接收數(shù)據(jù),并進行檢查,可以查出以下三種錯誤:1) 奇偶錯:在約定奇偶檢查的情況下,接收到的字符奇偶狀態(tài)和約定不符。2) 幀格式錯:個字符從起始位到停止位的總位數(shù)不對。3) 溢出錯:若先接收的字符尚未被微機讀取,后面的字符又傳送過來,則產(chǎn)生溢出錯。每 種錯誤都會給出相應(yīng)的出錯信息,提示用戶處理。2. ARM自帶

39、的串行口寄存器S3C4510B的UART單元提供兩個獨立的異步串行I/O 口( Asynchronous Serial I/O,SIO),每個通訊口均可工作在中斷模式或DMA模式,也即UART能產(chǎn)生內(nèi)部中斷請求或DMA請求在CPU和串行I/O 口之間傳送數(shù)據(jù)。S3C4510B的UART單元特性包括:1) 波特率可編程2) 支持紅外發(fā)送與接收3) 12個停止位4) 5、6、7或8個數(shù)據(jù)位5) 奇偶校驗每個異步串行通訊口都具有獨立的波特率發(fā)生器、發(fā)送器、接收器和控制單元。波特率發(fā)生器可由片內(nèi)系統(tǒng)時鐘 MCLK 驅(qū)動,或由外部時鐘 UCLK(Pin64 )驅(qū)動;發(fā)送器和接收器都有獨立的數(shù)據(jù)緩沖寄存器

40、和數(shù)據(jù)移位器。待發(fā)送的數(shù)據(jù)首先傳送到發(fā)送緩沖寄存器,然后拷貝到發(fā)送移位器并通過發(fā)送數(shù)數(shù)據(jù)引腳UATXDn發(fā)送出去。接收數(shù)據(jù)首先從接收數(shù)據(jù)引腳UARXDn移入移位器,當(dāng)接收到 個字節(jié)時就拷貝到接收緩沖寄存器。SIO的控制單元通過軟件控制工作模式的選擇、狀態(tài)和中斷產(chǎn)生。當(dāng)使用UART的發(fā)送中斷功能時,應(yīng)在初始化UART之前先寫個字節(jié)數(shù)據(jù)到UART的發(fā)送緩沖寄存器,這樣,當(dāng)發(fā)送緩沖寄存器空時就可以產(chǎn)生UART的發(fā)送中斷。圖4.2串行口功能模塊表4.1為UART特殊功能寄存器描述表4.1 UART特殊功能寄存器描述甜存腓曲感比旬:按作功膽捕謹(jǐn)ULCON1OxEOOOUART® 道 憲控制富存

41、器OxADUCONO0x0004讀叩UART 送 ah 控劇奇壽祜(h00UCON1OxE伽UAKTifiii 控劇奇看器0x00UETAT0DkLXKJSOiCQUSTATJOxEOO 呂UAR丁迪道 狀冊寄存裕OxCQUTXBUF0OxDOOC寫UARTjfii£O 繪送怩持寄存術(shù)定匿UTXBUFIOkBOOCUAKTifiitt來宦義DElXBUFtOkDOLO讀UAKTiS 道 0 器URJCBUFIOxEOlO讀UARTS 逋未宦北UBRDEV0QxDOI4誡寫子爵存器0x00UBRDV|OxEAH帕寫彼特曲塚數(shù)因 子崙存器1QkOOUART 行控制寄存器(UART Lin

42、e Control Registers , ULCONO、ULCON1 ):下 面簡要介紹 UART操作。關(guān)于數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、中斷產(chǎn)生、波特率產(chǎn)生、回環(huán)模式和自動流控制的詳細介紹,請參考數(shù)據(jù)手冊及其他相關(guān)資料。發(fā)送數(shù)據(jù)幀是可編程的。1個數(shù)據(jù)幀包含1個起始位、5-8個數(shù)據(jù)位、1個可選的奇偶校驗位和12個停止位。停止位 通過行控制寄存器 ULCONn配置。與發(fā)送幀類似,接收幀也是可編程的。接收幀由1個起 始位、5-8個數(shù)據(jù)位、1個可選的奇偶校驗位和 12個行控制寄存器 ULCONn中的停止位組 成。接收器還可以檢測過速錯誤、奇偶校驗錯誤、幀錯誤和傳輸中斷。每個錯誤均可以設(shè)置個錯誤標(biāo)志。?過速錯

43、誤指已接收到的數(shù)據(jù)在讀取之前被新接收的數(shù)據(jù)覆蓋。?奇偶校驗錯誤指接收器檢測到的校驗和與設(shè)置的不相符。?幀錯誤指沒有接收到有效的停止位。?傳輸中斷指接收數(shù)據(jù) RxDn保持邏輯0超過1幀的傳輸時間。在FIFO模式下,如果RxFIFO非空,而在3個字的傳輸內(nèi)沒有接收到數(shù)據(jù), 那么產(chǎn) 生超時。 與UART有關(guān)的寄存器主要有以下幾個:(1) UART行控制寄存器 ULCONn。該寄存器的位6決定是否使用紅外模式,位5位3決 定校驗方式,位2決定停止位長度,位 1和位0決定每幀的數(shù)據(jù)位數(shù)。(2) UART控制寄存器 UCONn。該寄存器決定 UART的各種模式。 UART FIFO 控制寄 存器 UFCO

44、Nn 和 UARTMODEM 控制寄存器,分別用來決定 UART FIFO和 MODEM 的模式。其中 UFCONn的第0位決定是否啟用 FIFO, UMCONn的第0 位是請 求發(fā)送位。另外,讀/寫狀態(tài)寄存器 UTRSTAT以及錯誤狀態(tài)寄存器 UERSTAT,可 以反映芯片目前的讀/寫狀態(tài)以及錯誤類型。FIFO狀態(tài)寄存器 UFSTAT和MODEM狀態(tài) 寄存器UMCONn,通過前者可以讀出目前 FIFO是否已滿足其中的字節(jié)數(shù);通過后者可以讀出目前MODEM的CTS狀態(tài)。(3) 發(fā)送寄存器UTXH和接收寄存器URXH 。這個寄存器存放發(fā)送和接收的數(shù)據(jù),當(dāng)然 只有1個字節(jié)8位數(shù)據(jù)。 需要注意的是,

45、在發(fā)生溢出錯誤時, 接收的數(shù)據(jù)必須被讀出來;否 則會引發(fā)下次溢出錯誤。(4 )波特率分頻寄存器 UBRDIVUART的波特率發(fā)生器的輸入時鐘可以為系統(tǒng)時鐘,也可以從外部引入時鐘信號。若選用 系統(tǒng)時鐘為波特率發(fā)生器的輸入時鐘,當(dāng)系統(tǒng)時鐘為50MHz時,最大的波特率時鐘輸出為MCLK2/ 16(= 1.5625MHz ),其中 MCLK2 為系統(tǒng)時鐘 MCLK 除以 2。UCLK引腳為UART0、UART1的外部時鐘輸入引腳。UART波特率發(fā)生器的輸入時鐘MCLK2或UCLK,由寄存器 UCCON6選擇。圖4.2、圖4.3為UART波特率發(fā)生器的結(jié)構(gòu)圖和典型的波特率。Mi . k.-UCLK.1!

46、計魚聶HCNT1CHID UBTDfVn CfJT 1 UBRDlVn 3:0|.- ULUON 6六. 實驗步驟1 新建工程文件。2. 定義與UART有關(guān)的各個寄存器地址和些特殊的位命令。3編寫串口驅(qū)動函數(shù):4 .在主函數(shù)中實現(xiàn)將從串口 0 接收到的數(shù)據(jù)發(fā)送到串口 0(Main.c ):試驗參考程序:#include "option.h"#include "def.h" #include "44b.h"#include "44blib.h" void lsr_lnit(void);void HaltUndef(v

47、oid);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);void Main(void)U8 aa;rSYSCFG=SYSCFG_8KB;#if (PLLON=1)ChangePIIValue(PLL_M,PLL_P,PLL_S);#endifIsr_Init();Port_Init();Uart_Init(0,115200);Uart_Select(0);Delay(0); /calibrate Delay()Led_Display(7);Delay(1000); /calibrate Delay()Led_Dis

48、play(0);Delay(5000); /calibrate Delay()Led_Display(7);Uart_Printf("n start n");Uart_Printf("nHello,FS44B0X!");Uart_Printf("nPlease Press 'a'or'b'or'c'");while(1)aa= Uart_Getch();switch(aa)case 'a':Uart_Printf("nYou Pressed 'a'

49、;");Led_Display(0x1); break;case 'b':Uart_Printf("nYou Pressed 'b'");Led_Display(0x2); break;case 'c':Uart_Printf("nYou Pressed 'c'");Led_Display(0x4); break;case 0x1b:Led_Display(0x0); break;default :break;void Isr_Init(void)U32 i;pISR_UNDEF=

50、(unsigned)HaltUndef; pISR_SWI =(unsigned)HaltSwi; pISR_PABORT=(unsigned)HaltPabort; pISR_DABORT=(unsigned)HaltDabort;for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4)*(volatile unsigned *)i)=0xEA000000+0x1FFE;/rINTCON=0x1;/ Vectored Int. IRQ enable,FIQ disablerINTCON=0x5;/ Non-vectored,IRQ

51、 enable,FIQ disablerINTMOD=0x0;/ All=IRQ moderINTMSK|=BIT_GLOBAL|BIT_EINT3; / All interrupt is masked. void HaltUndef(void) Uart_Printf("Undefined instruction exception!n");while(1);void HaltSwi(void)Uart_Printf("SWI exception!n");while(1);void HaltPabort(void)Uart_Printf("P

52、abort exception!n"); while(1);void HaltDabort(void)Uart_Printf("Dabort exception!n"); while(1);實驗五 查詢和中斷方式鍵盤試驗一、實驗?zāi)康?通過實驗了解 ARM 的查詢和中斷的方式及原理。通過實驗掌握 ARM 的編程方法。二、實驗設(shè)備 硬件:嵌入式實驗平臺 套、仿真器 個、 PC 機 臺。軟件: Windows 98/2000/NT/XP 操作系統(tǒng)、仿真器驅(qū)動程序、 ADS 開發(fā)軟件一套。三、實驗內(nèi)容掌握 ARM 中斷工作原理,了解 S3C44B0X 的中斷寄存器,掌握常

53、用的中斷的編程 方法。編寫中斷處理程序?qū)崿F(xiàn):1.使用按鈕K2觸發(fā) EINT5,LED2亮2.使用按鈕K3觸發(fā) EINT6,LED3 亮3.使用按鈕K4觸發(fā) EINT7,LED4亮四、實驗原理S3C44B0X的中斷控制器可以接受來自30 個中斷源的中斷請求。這些中斷源來自 DMA,UART,SIO等 芯 片 內(nèi) 部 外 圍 或 外 部 引 腳 。 在 這 些 中 斷 源 中 , 有 4個外部中斷 ( EINT4/5/6/7 ) 邏輯“或“的關(guān)系。中斷控制器的任務(wù) 在片內(nèi)外圍和外部中斷源組成的多重中斷發(fā)生時,選擇其中一 個中 斷,通過 FIQ 或 IRQ 向 ARM7TMDI 內(nèi)核發(fā)出中斷請求。實際最初的 ARM7TMDI 內(nèi)核只有 FIQ (快速中斷請求)和 IRQ( 通用中斷請求 )2 種中斷,其他中斷都是各個芯片 廠家在設(shè)計芯 片的時候定義的。對這些中斷根據(jù)其優(yōu)先級高低來進行處理。例如,如果定 義所有的中斷為 IRQ 中斷(通過中斷模式設(shè)置) ,并且同時有 10 個中斷發(fā)出請求,那么 可以通過讀中斷優(yōu) 先級寄存器來確定哪一個中斷將被優(yōu)先執(zhí)行。 般的中

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論