ARM嵌入式系統(tǒng)與應(yīng)用實(shí)驗(yàn)報(bào)告_第1頁
ARM嵌入式系統(tǒng)與應(yīng)用實(shí)驗(yàn)報(bào)告_第2頁
ARM嵌入式系統(tǒng)與應(yīng)用實(shí)驗(yàn)報(bào)告_第3頁
ARM嵌入式系統(tǒng)與應(yīng)用實(shí)驗(yàn)報(bào)告_第4頁
ARM嵌入式系統(tǒng)與應(yīng)用實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、華中科技大學(xué)武昌分校信息科學(xué)與技術(shù)系arm嵌入式系統(tǒng)與應(yīng)用實(shí)驗(yàn)報(bào)告專業(yè)班級(jí): 通信工程0801 學(xué) 號(hào) _姓 名 _ _實(shí)驗(yàn)老師 _ _ 總 評(píng) 分 _ 實(shí)驗(yàn)一 匯編指令試驗(yàn)一、實(shí)驗(yàn)?zāi)康?掌握arm7tmdi 匯編指令的用法,并能編寫簡(jiǎn)單的匯編程序; 學(xué)習(xí)arm 微控制器的16 位thumb 匯編指令的使用方法 掌握指令的條件執(zhí)行二、實(shí)驗(yàn)設(shè)備 硬件:嵌入式實(shí)驗(yàn)平臺(tái)一套、仿真器一個(gè)、pc 機(jī)一臺(tái)。 軟件:windows 98/2000/nt/xp 操作系統(tǒng)、仿真器驅(qū)動(dòng)程序、ads 開發(fā)軟件一套。三、實(shí)驗(yàn)內(nèi)容分別使用arm、thumb 指令add,mov,cmp,b 計(jì)算123n 的值。四、實(shí)驗(yàn)原

2、理arm 處理器共有兩種工作狀態(tài): arm 32 位,這種狀態(tài)下執(zhí)行字對(duì)準(zhǔn)的arm 指令。 thumb 16 位,這種狀態(tài)下執(zhí)行半字對(duì)準(zhǔn)的thumb 指令。注意:arm 和thumb 之間狀態(tài)的切換不影響處理器的模式或寄存器的內(nèi)容。arm 處理器在兩種工作狀態(tài)之間可以切換。(1) 進(jìn)入thumb 狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位0 為1 時(shí),執(zhí)行bx 指令進(jìn)入thumb 狀態(tài)。如果處理器在thumb 狀態(tài)進(jìn)入異常,則當(dāng)從異常出來(irq、fiq、undef、abort、swi)返回時(shí),自動(dòng)切換到thumb 狀態(tài)。(2)進(jìn)入arm 狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位0 為0 時(shí),執(zhí)行bx 指令進(jìn)入arm

3、狀態(tài)。處理器進(jìn)行異常處理(irq、fiq、undef、abort、swi)。在此情況下,把pc 放入異常模式鏈接寄存器中。從異常向量地址開始執(zhí)行也可以進(jìn)入arm 狀態(tài)。thumb 狀態(tài)下的寄存器集是arm 狀態(tài)下寄存器集的子集。程序員可以直接訪問8 個(gè)通用寄存器(r0r7)、pc、sp、lr 和cpsp。每一種特權(quán)模式都有一組sp、lr 和spsr。 thumb 狀態(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)的r13。 thumb 狀態(tài)的lr 映射到arm

4、狀態(tài)的r14。 thumb 狀態(tài)的pc 映射到arm 狀態(tài)的pc(r15)。本程序使用r0 保存結(jié)果,所以一開始就要初始化為0;循環(huán)執(zhí)行r0=r0+r1,r1 為循環(huán)計(jì)數(shù)器,從1 開始計(jì)數(shù),每一次循環(huán)r1 加1;當(dāng)循環(huán)計(jì)數(shù)器r1 的值到達(dá)n 時(shí),運(yùn)算結(jié)束。五、實(shí)驗(yàn)操作步驟1啟動(dòng)ads1.2,使用arm execuatable image 工程模板建立一個(gè)工程asm_project。2建立源文件test2.s,編寫實(shí)驗(yàn)程序,然后添加到工程中(arm 指令和thumb 指令實(shí)驗(yàn)的test2.s 程序源碼分別見下清單) 。3設(shè)置工程鏈接地址ro base 為0x0c0000004編譯鏈接工程,選擇【

5、project】-【debug】,啟動(dòng)axd 進(jìn)行調(diào)試。5打開寄存器窗口(processor registers),選擇current 項(xiàng)監(jiān)視各寄存器的值。6單步運(yùn)行程序,注意執(zhí)行bx r0 指令前后cpsr 寄存器的t 位。說明:在寄存器窗口的cpsr 寄存器,大寫字母的位表示該位為1,小寫字母的位表示該位為0(比如“t”表示t 位為1,“t”表示t 位為0)。7理解并掌握本實(shí)驗(yàn)原理及程序,完成練習(xí)題六、實(shí)驗(yàn)參考程序thumb 匯編指令實(shí)驗(yàn)的參考程序代碼清單;文件名:test.s;功能:計(jì)算123+n 的值n equ 50 定義n的值為50 area testcode,code,readon

6、ly 區(qū)域名為testcode,代碼,只讀entry 入口code32arm_code ldr sp,=0x40003f00 sp=0x40003f00adr r0,thumb_code+1 將分支目標(biāo)地址送r0,使r1的bit0=1bx r0 分支并且轉(zhuǎn)換為thumb狀態(tài)ltorgcode16 匯編以下代碼為thumb指令thumb_codeldr r0,=n 偽指令r0=50bl sum_n 跳轉(zhuǎn)到sum_n執(zhí)行b thumb_code 跳轉(zhuǎn)到thumb_code,thumb模式;名稱:sum_n;功能:計(jì)算123+n 的值;入口參數(shù):r0( n 的值 );出口參數(shù):r0( 運(yùn)算結(jié)果 )s

7、um_npush r1-r7,lrmovs r2,r0 r0的內(nèi)容放入r2beq sum_end 相等轉(zhuǎn)到sum_endcmp r2,#1 r2與1比較 ,設(shè)置標(biāo)志位beq sum_end 相等轉(zhuǎn)到sum_endmov r1,#1 將1送入r1mov r0,#0 將0送入r0sum_l1 add r0,r1 r0=r0+r1bcs sum_err cmp r1,r2 r1與r2比較,設(shè)置標(biāo)志位bhs sum_end add r1,#1 r0=r0+1b sum_l1 轉(zhuǎn)到sum_l1sum_err mov r0,#0_ 將0送入r0sum_end pop r1-r7,pcendarm 匯編指令

8、實(shí)驗(yàn)的參考程序代碼清單:;文件名:add.s;功能:計(jì)算123+n 的值n equ 5; 定義n的內(nèi)容為5 area example,code,readonly 定義區(qū)域,區(qū)域名為example,代碼,只讀 entry 入口 code32start ldr r0,=n r0=5 mov r2,r0 r2=r0 mov r0,#0 r0=0 mov r1,#0 r1=0loop cmp r1,r2 比較r1與r2 bhi add_end add r0,r0,r1 r0=r0+r1 add r1,r1,#1 r1=r1+1 b loop 轉(zhuǎn)到loopadd_end b start 轉(zhuǎn)到start

9、end七、練習(xí)題1.如何切換處理器狀態(tài)?使r1的bit0=1,分支并且轉(zhuǎn)換為thumb狀態(tài),使r1的bit0=0,分支并且轉(zhuǎn)換為arm狀態(tài)2.在thumb 指令只有哪一條指令具有條件執(zhí)行功能?bl sum_n實(shí)驗(yàn)二 arm 微處理器工作模式實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康耐ㄟ^實(shí)驗(yàn)掌握學(xué)會(huì)使用msr/mrs 指令實(shí)現(xiàn)arm 處理器工作模式的切換,觀察不同模式下的寄存器,加深對(duì)cpu 結(jié)構(gòu)的理解。二、實(shí)驗(yàn)設(shè)備硬件:嵌入式實(shí)驗(yàn)平臺(tái)一套、仿真器一個(gè)、pc 機(jī)一臺(tái)。軟件:windows 98/2000/nt/xp 操作系統(tǒng)、仿真器驅(qū)動(dòng)程序、ads 開發(fā)軟件一套。三、實(shí)驗(yàn)內(nèi)容通過arm 匯編指令,在各種處理器模式下切換并

10、觀察各種模式下寄存器的區(qū)別;掌握arm 不同模式的進(jìn)入與退出。四、實(shí)驗(yàn)原理1arm 處理器模式arm 體系結(jié)構(gòu)支持表1- 所示的7 種處理器模式。處理器模式 說明用戶 usr 正常程序執(zhí)行模式fiq fiq 支持告訴數(shù)據(jù)傳送或通道處理irq irq 用于通用中斷處理管理 svc 操作系統(tǒng)保護(hù)模式中止 abt 實(shí)現(xiàn)虛擬存儲(chǔ)器和/或存儲(chǔ)器保護(hù)未定義 und 支持硬件協(xié)處理器的軟件仿真系統(tǒng) sys 運(yùn)行特權(quán)操作系統(tǒng)任務(wù)表1- 處理器模式在軟件控制下也可以改變模式,外部中斷或異常處理也可以引起模式發(fā)生改變。大多數(shù)應(yīng)用程序在用戶模式下執(zhí)行。當(dāng)處理器工作在用戶模式時(shí),正在執(zhí)行的程序不能訪問某些被保護(hù)的系統(tǒng)

11、資源,也不能改變模式,除非異常發(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)時(shí),進(jìn)入相應(yīng)的模式。每種模式都有某些附加的寄存器,以避免異常出現(xiàn)時(shí)用戶模式的狀態(tài)不可靠。剩下的模式是系統(tǒng)模式。僅arm 體系結(jié)構(gòu)v4 以及以上的版本有該模式。不能由于任何異常而進(jìn)入該模式。它與用戶模式有相同的寄存

12、器,但它是特權(quán)模式,不受用戶模式的限制。它供需要訪問系統(tǒng)資源的操作系統(tǒng)任務(wù)使用,但希望避免使用與異常模式有關(guān)的附加寄存器。避免使用附加寄存器保證了當(dāng)任何異常出現(xiàn)時(shí),都不會(huì)使任務(wù)的狀態(tài)不可靠。2程序狀態(tài)寄存器在所有處理模式下,都可以訪問當(dāng)前程序狀態(tài)寄存器cpsr。cpsr包含條件碼標(biāo)志、中斷禁止位、當(dāng)前處理器模式以及其他狀態(tài)和控制信息。每種異常模式都有一個(gè)程序狀態(tài)保存寄存器spsr。當(dāng)異常出現(xiàn)時(shí),spsr用于保存cpsr的狀態(tài)。cpsr 和spsr 的格式如下:(1) 條件碼標(biāo)志n、z、c、v:大多數(shù)指令可以檢測(cè)這些條碼標(biāo)志,以決定程序指令如何執(zhí)行。(2) 控制位最低8 位i、f、t 和m 位用

13、作控制位。當(dāng)異常出現(xiàn)時(shí)改變控制位。當(dāng)處理器在特權(quán)模式下時(shí)也可以由軟件改變。l 中斷禁止位:i 置1 則禁止irq 中斷;f 置1 則禁止fiq 中斷。l t 位:t0 指示arm 執(zhí)行;t1 指示thumb 執(zhí)行。在這些體系結(jié)構(gòu)的系統(tǒng)中,可自由地使用能在arm 和thumb 狀態(tài)之間切換的指令。l 模式位:m0、m1、m2、m3 和m4(m4:0)是模式位。這些位決定處理器的工作模(3) 其他位程序狀態(tài)寄存器的其他位保留,用作以后擴(kuò)展。五、實(shí)驗(yàn)操作步驟1.啟動(dòng)ads1.2,建立一個(gè)新的工程;2.建立匯編源程序文件test3.s,編寫實(shí)驗(yàn)程序,添加到工程中;3.編譯鏈接工程,點(diǎn)擊debug 按鈕

14、,啟動(dòng)axd 進(jìn)行調(diào)試;4.點(diǎn)擊【processor views】-【registers】,打開current 項(xiàng)監(jiān)視個(gè)寄存器的值;5.單步運(yùn)行程序,注意觀察cpsr、spsr 以及r0 寄存器值得變化。說明:cpsr 寄存器顯示方式如圖1- 所示。顯示分為兩部分,一部分是各個(gè)標(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,顯示為大寫字母,表示該位為1;顯示為

15、小寫字母,表示該位為0。t 標(biāo)志在arm 體系結(jié)構(gòu)v4 及以上版本的t 變量中才有效。寄存器顯示窗口六、實(shí)驗(yàn)參考程序arm 微控制器工作模式實(shí)驗(yàn)的參考程序如下:usr_stack_legth equ 64 定義各塊的長(zhǎng)度svc_stack_legth equ 0fiq_stack_legth equ 16irq_stack_legth equ 64abt_stack_legth equ 0und_stack_legth equ 0 area example3,code,readonly 定義區(qū)域,區(qū)域名為example3,代碼,只讀 entry 入口 code32start mov r0,#0

16、 r0=0 mov r1,#1 r1=1 mov r2,#2 r2=2 mov r3,#3 r3=3 mov r4,#4 r4=4 mov r5,#5 r5=5 mov r6,#6 r6=6 mov r7,#7 r7=7 mov r8,#8 r8=8 mov r9,#9 r9=9 mov r10,#10 r10=10 mov r11,#11 r11=11 mov r12,#12 r12=12 bl initstack mrs r0,cpsr r0的內(nèi)容送入cpsr bic r0,r0,#0x80 msr cpsr_cxsf,r0 cpsr_cxsf =r0 msr cpsr_c,#0xd0 c

17、psr_c=0xd0 mrs r0,cpsr r0的內(nèi)容送入cpsr msr cpsr_c,#0xd0 cpsr_c=0xd0 mrs r0,cpsr r0的內(nèi)容送入cpsr halt b halt 暫停;名稱:initstack;功能:堆棧初始化,即初始化各模式下下的堆棧指針。;入口參數(shù):無;出口參數(shù):無initstack mov r0,lr lr=r0 msr cpsr_c,#0xd3 cpsr_c=0xd3 ldr sp,stacksvc sp= stacksvc,指針指到stacksvc msr cpsr_c,#0xd2 cpsr_c=0xd2 ldr sp,stackirq sp=

18、stackirq,指針指到stackirq msr cpsr_c,#0xd1 cpsr_c=0xd1 ldr sp,stackfiq sp= stackfiq,指針指到stackfiq msr cpsr_c,#0xd7 cpsr_c=0xd7 ldr sp,stackabt sp= stackabt,指針指到stackabt msr cpsr_c,#0xdb cpsr_c=0xdb ldr sp,stackund sp= stackund,指針指到stackund msr cpsr_c,#0xdf cpsr_c=0xdf ldr sp,stackusr sp= stackusr,指針指到sta

19、ckusr mov pc,r0 pc=r0stackusr dcd usrstackspace+(usr_stack_legth-1)*4 字定義stacksvc dcd svcstackspace+(svc_stack_legth-1)*4stackirq dcd irqstackspace+(irq_stack_legth-1)*4stackfiq dcd fiqstackspace+(fiq_stack_legth-1)*4stackabt dcd abtstackspace+(abt_stack_legth-1)*4stackund dcd undstackspace+(und_sta

20、ck_legth-1)*4 area mystacks,data,noinit,align=2 區(qū)域名為mystacks,數(shù)據(jù),usrstackspace space usr_stack_legth*4 svcstackspace space svc_stack_legth*4irqstackspace space irq_stack_legth*4fiqstackspace space fiq_stack_legth*4abtstackspace space abt_stack_legth*4undstackspace space und_stack_legth*4 end七、練習(xí)題1.說明

21、各模式下cpsr的值的含義及相關(guān)寄存器的值的變化。 實(shí)驗(yàn)三 通用 io 口試驗(yàn) 一、實(shí)驗(yàn)?zāi)康?熟悉arm 芯片i/o 口編程配置方法; 掌握arm 芯片i/o 口控制led 顯示的方法。 二、實(shí)驗(yàn)設(shè)備 硬件:嵌入式實(shí)驗(yàn)平臺(tái)一套、仿真器一個(gè)、pc 機(jī)一臺(tái)。 軟件:windows 98/2000/nt/xp 操作系統(tǒng)、仿真器驅(qū)動(dòng)程序、ads 開發(fā)軟件一套。 三、實(shí)驗(yàn)內(nèi)容 控制嵌入式實(shí)驗(yàn)箱上的led輪流點(diǎn)亮。 四、實(shí)驗(yàn)原理 s3crrb0x 芯片上共有71 個(gè)多功能i/o 引腳,他們分別為7 組i/o 端口: 2 個(gè)9 位i/o 端口 (端口e 和f) 2 個(gè)8 位i/o 端口 (端口d 和g) 1

22、 個(gè)16 位i/o 端口 (端口c) 1 個(gè)10 位i/o 端口 (端口a ) 1 個(gè)11 位i/o 端口 (端口b ) 每組端口都可以通過軟件配置寄存器來滿足不同系統(tǒng)合設(shè)計(jì)的需要。在運(yùn)行主程序之 前,必須先對(duì)每一個(gè)用到的引腳的功能進(jìn)行設(shè)置。如果某些引腳的附庸功能沒有使用,那么 可以先將該引腳設(shè)置為i/o口。 s3c44b0x 芯片與端口相關(guān)的寄存器 (1)端口控制寄存器 (pconag):在s3c44b0x 芯片中,大部分引腳是使用多路復(fù)用的,所以要確定每個(gè)引腳的功能。pconn(端口控制寄存器)能夠定義引腳功能。如果 pg0pg7 作為掉電模式下的喚醒信號(hào),那么這些端口必須配置成中斷模式。

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

24、種方式。 五、實(shí)驗(yàn)操作步驟 1啟動(dòng)ads1.2,使用arm execuatable image 工程模板新建一個(gè)工程; 2添加兩個(gè)組inc 和src; 3將inc 文件夾下所有文件添加到組inc 中; 4將src 文件夾下所有文件添加到組src 中; 5建立源文件test5.c,編寫實(shí)驗(yàn)程序,添加到工程中; 6編譯鏈接選項(xiàng)的設(shè)置同前面實(shí)驗(yàn); 7編譯鏈接工程,點(diǎn)擊debug 按鈕,啟動(dòng)axd進(jìn)行調(diào)試; 8連續(xù)點(diǎn)擊step in 按鈕,單步運(yùn)行程序,主板上的三個(gè)led 燈循環(huán)點(diǎn)亮。 9理解并掌握本實(shí)驗(yàn)原理及程序,完成練習(xí)題 六、實(shí)驗(yàn)參考程序 #include option.h #include d

25、ef.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) changepllvalue(pll_m,pll_p,pll_s); #endif isr_init(); port_init(); uart_init(0,115200); 波特率是115200 uart

26、_select(0); delay(0); /calibrate delay() 延遲 led_display(7); 0111三個(gè)燈全亮 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() led_display(1); 亮第一個(gè)燈,其他滅 delay(5000); /calibrate delay() led_display

27、(2); 亮第二個(gè)燈,其他滅 delay(5000); /calibrate delay() led_display(4); 亮第三個(gè)燈,其他滅 void isr_init(void) u32 i; pisr_undef=(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 unsi

28、gned *)i)=0xea000000+0x1ffe; rintcon=0x5; / non-vectored,irq enable,fiq disable rintmod=0x0; / all=irq mode rintmsk|=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(

29、1); void haltpabort(void) uart_printf(pabort exception!n); while(1); void haltdabort(void) uart_printf(dabort exception!n); while(1); 思考題 本試驗(yàn)中共用到了那些寄存器,他們的作用是什么? 在原程序的基礎(chǔ)上改變led燈的閃爍方式。將其中部分程序改為以下程序,使其變?yōu)槊看蝺蓚€(gè)燈一起亮 uart_printf(n start n); while(1) delay(5000); /calibrate delay() led_display(3); delay(5000

30、); /calibrate delay() led_display(5); delay(5000); /calibrate delay() led_display(6); 3 用匯編語言實(shí)現(xiàn)led燈的閃爍。 實(shí)驗(yàn)四 串口試驗(yàn) 一、實(shí)驗(yàn)?zāi)康?1. 掌握arm的串行口工作原理 2. 學(xué)習(xí)編程實(shí)現(xiàn)arm的uart 通訊 3. 掌握cpu利用串口通訊的方法 二、實(shí)驗(yàn)設(shè)備 硬件:arm嵌入式開發(fā)板、用于arm7tdmi的jtag仿真器、pc、串口線。 軟件:pc機(jī)操作系統(tǒng)win98、win2000或winxp、arm sdt 2.51或ads1.2集 成開發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序 三、預(yù)

31、備知識(shí) 1. 用arm ads1.2集成開發(fā)環(huán)境,編寫和調(diào)試程序的基本過程 2. arm應(yīng)用程序的框架結(jié)構(gòu) 3. 了解串行總線 四、實(shí)驗(yàn)內(nèi)容 學(xué)習(xí)串行通訊原理,了解串行通訊控制器,閱讀arm芯片文檔,掌握arm的 uart相關(guān)寄存器的功能,熟悉arm系統(tǒng)硬件的uart相關(guān)接口。編程實(shí)現(xiàn)arm 和計(jì)算機(jī)實(shí)現(xiàn)串行通訊。 arm監(jiān)視串行口,將接收到的字符再發(fā)送給串口(計(jì)算機(jī)與開發(fā)板是通過超級(jí)終端通訊的),即按pc鍵盤通過超級(jí)終端發(fā)送數(shù)據(jù),開發(fā)板將接收到的數(shù)據(jù)再返送給pc,在超級(jí)終端上顯示。 五、 實(shí)驗(yàn)原理 串行通訊是微計(jì)算機(jī)之間 種常見的近距離通訊手段,因使用方便、編程簡(jiǎn)單而 廣泛使用,幾乎所有的微

32、控制器、pc都提供串行通訊接口。 1. 異步串行i o 異步串行方式是將傳輸數(shù)據(jù)的每個(gè)字符 位接 位(例如先低位、后高位)地傳 送。數(shù)據(jù)的各不同位可以分時(shí)使用同傳輸通道,因此串行i o 可以減少信號(hào)連線, 最少用 對(duì)線即可進(jìn)行。接收方對(duì)于同 根線上 連串的數(shù)字信號(hào),首先要分割成 位,再按位組成字符。為了恢復(fù)發(fā)送的信息,雙方必須協(xié)調(diào)工作。在微型計(jì)算機(jī)中 大量使用異步串行i o方式,雙方使用各自的時(shí)鐘信號(hào),而且允許時(shí)鐘頻率有 定 誤差,因此實(shí)現(xiàn)較容易。但是由于每個(gè)字符都要獨(dú)立確定起始和結(jié)束(即每個(gè)字符都 要重新同步),字符和字符間還可能有長(zhǎng)度不定的空閑時(shí)間,因此效率較低。 圖4.1 串行通信字符格

33、式 圖4.1給出異步串行通信中 個(gè)字符的傳送格式。開始前,線路處于空閑狀態(tài), 送出連續(xù)1”。傳送開始時(shí)首先發(fā) 個(gè) ”作為起始位,然后出現(xiàn)在通信線上的是字 符的二進(jìn)制編碼數(shù)據(jù)。每個(gè)字符的數(shù)據(jù)位長(zhǎng)可以約定為5 位、6 位、7位或8位, 般采用ascii編碼。 后面是奇偶校驗(yàn)位,根據(jù)約定,用奇偶校驗(yàn)位將所傳字符中為1”的位數(shù)湊成奇 數(shù)個(gè)或偶數(shù)個(gè)。也可以約定不要奇偶校驗(yàn),這樣就取消奇偶校驗(yàn)位。最后是表示停 止位的1”信號(hào),這個(gè)停止位可以約定持續(xù)1 位、1.5 位或2 位的時(shí)間寬度。至此 個(gè)字符傳送完畢,線路又進(jìn)入空閑,持續(xù)為1”。經(jīng)過 段隨機(jī)的時(shí)間后,下 個(gè)字 符開始傳送才又發(fā)出起始位每 個(gè)數(shù)據(jù)位的寬

34、度等于傳送波特率的倒數(shù)。微機(jī)異步 串行通信中,常用的波特率為2400,4800,9600,19200bps 等。 接收方按約定的格式接收數(shù)據(jù),并進(jìn)行檢查,可以查出以下三種錯(cuò)誤: 1) 奇偶錯(cuò):在約定奇偶檢查的情況下,接收到的字符奇偶狀態(tài)和約定不符。 2) 幀格式錯(cuò): 個(gè)字符從起始位到停止位的總位數(shù)不對(duì)。 3) 溢出錯(cuò):若先接收的字符尚未被微機(jī)讀取,后面的字符又傳送過來,則產(chǎn)生 溢出錯(cuò)。每 種錯(cuò)誤都會(huì)給出相應(yīng)的出錯(cuò)信息,提示用戶處理。 2. arm 自帶的串行口寄存器 s3c4510b的uart單元提供兩個(gè)獨(dú)立的異步串行i/o 口(asynchronous serial i/o, sio ),每

35、個(gè)通訊口均可工作在中斷模式或dma模式,也即uart能產(chǎn)生內(nèi)部中斷 請(qǐng)求或dma請(qǐng)求在cpu和串行i/o 口之間傳送數(shù)據(jù)。 s3c4510b的uart單元特性包括: 1) 波特率可編程 2) 支持紅外發(fā)送與接收 3) 12個(gè)停止位 4) 5、6、7或8個(gè)數(shù)據(jù)位 5) 奇偶校驗(yàn) 每 個(gè)異步串行通訊口都具有獨(dú)立的波特率發(fā)生器、發(fā)送器、接收器和控制單元。 波特率發(fā)生器可由片內(nèi)系統(tǒng)時(shí)鐘mclk驅(qū)動(dòng),或由外部時(shí)鐘uclk (pin64 )驅(qū)動(dòng); 發(fā)送器和接收器都有獨(dú)立的數(shù)據(jù)緩沖寄存器和數(shù)據(jù)移位器。 待發(fā)送的數(shù)據(jù)首先傳送到發(fā)送緩沖寄存器,然后拷貝到發(fā)送移位器并通過發(fā)送數(shù) 數(shù)據(jù)引腳uatxdn 發(fā)送出去。接

36、收數(shù)據(jù)首先從接收數(shù)據(jù)引腳uarxdn 移入移位器, 當(dāng)接收到 個(gè)字節(jié)時(shí)就拷貝到接收緩沖寄存器。 sio的控制單元通過軟件控制工作模式的選擇、狀態(tài)和中斷產(chǎn)生。 當(dāng)使用uart 的發(fā)送中斷功能時(shí),應(yīng)在初始化uart之前先寫 個(gè)字節(jié)數(shù)據(jù)到 uart的發(fā)送緩沖寄存器,這樣,當(dāng)發(fā)送緩沖寄存器空時(shí)就可以產(chǎn)生uart的發(fā)送中 斷。 圖4.2 串行口功能模塊 表4.1為uart特殊功能寄存器描述 表4.1 uart特殊功能寄存器描述uart行控制寄存器(uart line control registers,ulcon0 、ulcon1):下 面簡(jiǎn)要介紹uart操作。關(guān)于數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、中斷產(chǎn)生、波特率產(chǎn)

37、生、回環(huán) 模式和自動(dòng)流控制的詳細(xì)介紹,請(qǐng)參考數(shù)據(jù)手冊(cè)及其他相關(guān)資料。 發(fā)送數(shù)據(jù)幀是可編程的。1個(gè)數(shù)據(jù)幀包含1個(gè)起始位、5-8個(gè)數(shù)據(jù)位、1個(gè)可選的奇 偶校驗(yàn)位和12個(gè)停止位。停止位通過行控制寄存器ulconn配置。 與發(fā)送幀類似,接收幀也是可編程的。接收幀由1個(gè)起始位、5-8個(gè)數(shù)據(jù)位、1個(gè)可選的奇偶校驗(yàn)位和12個(gè)行控制寄存器ulconn中的停止位組成。接收器還可以檢測(cè)過速錯(cuò)誤、奇偶校驗(yàn)錯(cuò)誤、幀錯(cuò)誤和傳輸中斷。每 個(gè)錯(cuò)誤均可以設(shè)置個(gè)錯(cuò)誤標(biāo)志。 ? 過速錯(cuò)誤指已接收到的數(shù)據(jù)在讀取之前被新接收的數(shù)據(jù)覆蓋。 ? 奇偶校驗(yàn)錯(cuò)誤指接收器檢測(cè)到的校驗(yàn)和與設(shè)置的不相符。 ? 幀錯(cuò)誤指沒有接收到有效的停止位。 ?

38、 傳輸中斷指接收數(shù)據(jù)rxdn保持邏輯0超過1幀的傳輸時(shí)間。 在fifo模式下,如果rxfifo非空,而在3個(gè)字的傳輸內(nèi)沒有接收到數(shù)據(jù),那么產(chǎn) 生超時(shí)。 與uart有關(guān)的寄存器主要有以下幾個(gè): (1)uart行控制寄存器ulconn。該寄存器的位6決定是否使用紅外模式,位5位3決定校驗(yàn)方式,位2決定停止位長(zhǎng)度,位1和位0決定每幀的數(shù)據(jù)位數(shù)。 (2)uart控制寄存器uconn 。該寄存器決定uart的各種模式。uart fifo 控制寄存器ufconn和uartmodem控制寄存器,分別用來決定uart fifo和 modem的模式。其中ufconn的第0位決定是否啟用fifo,umconn的第

39、0位是請(qǐng) 求發(fā)送位。另外,讀/寫狀態(tài)寄存器utrstat 以及錯(cuò)誤狀態(tài)寄存器uerstat,可以 反映芯片目前的讀寫狀態(tài)以及錯(cuò)誤類型。fifo狀態(tài)寄存器ufstat和modem狀態(tài)寄存器umconn,通過前者可以讀出目前fifo是否已滿足其中的字節(jié)數(shù);通過后者可以讀出目前modem的cts狀態(tài)。 (3)發(fā)送寄存器utxh和接收寄存器urxh 。這 個(gè)寄存器存放發(fā)送和接收的數(shù)據(jù),當(dāng)然只有個(gè)字節(jié)位數(shù)據(jù)。需要注意的是,在發(fā)生溢出錯(cuò)誤時(shí),接收的數(shù)據(jù)必須被讀出來;否則會(huì)引發(fā)下次溢出錯(cuò)誤。 (4 )波特率分頻寄存器ubrdiv uart 的波特率發(fā)生器的輸入時(shí)鐘可以為系統(tǒng)時(shí)鐘,也可以從外部引入時(shí)鐘信號(hào)。若

40、選用系統(tǒng)時(shí)鐘為波特率發(fā)生器的輸入時(shí)鐘,當(dāng)系統(tǒng)時(shí)鐘為50mhz時(shí),最大的波特率時(shí)鐘輸出為mclk2/ 16(= 1.5625mhz),其中mclk2為系統(tǒng)時(shí)鐘mclk 除以2。 uclk引腳為uart0、uart1的外部時(shí)鐘輸入引腳。uart波特率發(fā)生器的輸入 時(shí)鐘mclk2或uclk,由寄存器uccon6選擇。 圖4.2、圖4.3為uart波特率發(fā)生器的結(jié)構(gòu)圖和典型的波特率。六 實(shí)驗(yàn)步驟 1新建工程文件。 2定義與uart有關(guān)的各個(gè)寄存器地址和 些特殊的位命令。 3編寫串口驅(qū)動(dòng)函數(shù): 4在主函數(shù)中實(shí)現(xiàn)將從串口0 接收到的數(shù)據(jù)發(fā)送到串口0 (main.c): 試驗(yàn)參考程序: #include option.h #include def.h #

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論