嵌入式ADS實(shí)驗(yàn)指導(dǎo)書_第1頁(yè)
嵌入式ADS實(shí)驗(yàn)指導(dǎo)書_第2頁(yè)
嵌入式ADS實(shí)驗(yàn)指導(dǎo)書_第3頁(yè)
嵌入式ADS實(shí)驗(yàn)指導(dǎo)書_第4頁(yè)
嵌入式ADS實(shí)驗(yàn)指導(dǎo)書_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)一嵌入式微處理器系統(tǒng)的開(kāi)發(fā)環(huán)境一、實(shí)驗(yàn)環(huán)境PC機(jī) 一臺(tái)軟件:ADS1.2集成開(kāi)發(fā)環(huán)境一套二、實(shí)驗(yàn)?zāi)康?.了解嵌入式系統(tǒng)及其特點(diǎn);2.熟悉嵌入式系統(tǒng)的開(kāi)發(fā)環(huán)境和基本配置并能編寫簡(jiǎn)單的匯編程序三、實(shí)驗(yàn)內(nèi)容1.嵌入式系統(tǒng)的開(kāi)發(fā)環(huán)境、基本配置2.使用匯編指令完成簡(jiǎn)單的加法實(shí)驗(yàn)四、實(shí)驗(yàn)步驟(1)在D:\新建一個(gè)目錄,目錄名為experiment。(2)點(diǎn)擊WINDOWS操作系統(tǒng)的“開(kāi)始|程序|ARMDeveloperSuitev1.2|CodeWarriorforARMDeveloperSuite”啟動(dòng)MetrowerksCodeWarrior,或雙擊“ADS1.2”啟動(dòng)ADS1.2如圖1-1所示:圖1-1啟動(dòng)ADS1.2(3)在CodeWarrior中新建一個(gè)工程的方法有兩種,可以在工具欄中單擊“New”按鈕,也可以在“File”菜單中選擇“New…”菜單。這樣就會(huì)打開(kāi)一個(gè)如圖1-2所示的對(duì)話框。選擇【File】->【New…】,使用ARMExecutableImage工程模板建立一個(gè)工程,名稱為ADS,目錄為D:\experiment。圖1-2新建文件在這個(gè)對(duì)話框中為用戶提供了7種可選擇的工程類型:1)ARMExecutablImage:用于由ARM指令的代碼生成一個(gè)ELF格式的可執(zhí)行映像文件;2)ARMObjectLibrary:用于由ARM指令的代碼生成一個(gè)armar格式的目標(biāo)文件庫(kù);3)EmptyProject:用于創(chuàng)建一個(gè)不包含任何庫(kù)或源文件的工程;4)MakefileImporterWizard:用于將VisualC的nmake或GNUmake文件轉(zhuǎn)入到CodeWarriorIDE工程文件;5)ThumbARMExecutableImage:用于由ARM指令和Thumb指令的混和代碼生成一個(gè)可執(zhí)行的ELF格式的映像文件;6)ThumbExecutableimage:用于由Thumb指令創(chuàng)建一個(gè)可執(zhí)行的ELF格式的映像文件;7)ThumbObjectLibrary:用于由Thumb指令的代碼生成一個(gè)armar格式的目標(biāo)文件庫(kù)。(4)選擇【File】->【New…】建立一個(gè)新的文件TEST1.S,設(shè)置直接添加到項(xiàng)目中。輸入如程序代碼,并保存,此時(shí)在工程窗口中可以看到TEST1.S文件。圖1-3新建test1.s(5)選擇【Edit】->【Perferences…】,在Font選項(xiàng)設(shè)置字體是Fixedsys,Script是CHINESE_GB2312。圖1-4設(shè)置字體(6)選擇【Edit】->【DebugRelSettings…】,在DebugRelSettings對(duì)話框的左邊選擇ARMLinker項(xiàng),設(shè)置鏈接地址。點(diǎn)擊“DebugRelSettings…”圖標(biāo)按鈕,即可進(jìn)行工程的地址設(shè)置、輸出文件設(shè)置、編 ENTRY ;標(biāo)識(shí)程序入口 CODE32 ;聲明32位ARM指令START MOV R0,#15 ;設(shè)置參數(shù) MOV R1,#8 ADDS R0,R0,R1 ;R0=R0+R1 B START END 實(shí)驗(yàn)預(yù)作關(guān)鍵過(guò)程及結(jié)果圖:實(shí)驗(yàn)二匯編指令實(shí)驗(yàn)一、實(shí)驗(yàn)環(huán)境 PC機(jī) 一臺(tái)ADS1.2集成開(kāi)發(fā)環(huán)境一套二、實(shí)驗(yàn)?zāi)康?.了解ADS1.2集成開(kāi)發(fā)環(huán)境及ARMulator軟件仿真方法;2.掌握ARM7TDMI匯編指令的用法,并能編寫簡(jiǎn)單的匯編程序;3.掌握指令的條件執(zhí)行和使用LDR/STR指令完成存儲(chǔ)器的訪問(wèn)。三、實(shí)驗(yàn)內(nèi)容1.使用LDR/STR指令完成存儲(chǔ)器的訪問(wèn)。2.使用數(shù)據(jù)處理指令實(shí)現(xiàn)數(shù)據(jù)傳送和算術(shù)和邏輯運(yùn)算。3.使用ADS1.2軟件仿真,單步、全速運(yùn)行程序,設(shè)置斷點(diǎn),打開(kāi)寄存器窗口(ProcessorRegisters)監(jiān)視寄存器的值,打開(kāi)存儲(chǔ)器觀察窗口(Memory)監(jiān)視存儲(chǔ)器的值。根據(jù)以上要求完成該操作:使用LDR指令讀取0x40003100上的數(shù)據(jù),將數(shù)據(jù)加1,若結(jié)果小于10則使用STR指令把結(jié)果寫回原地址,若結(jié)果大于等于10,則把0寫回原地址……周而復(fù)此循環(huán);使用ADS1.2軟件仿真,單步、全速運(yùn)行程序,設(shè)置斷點(diǎn),打開(kāi)寄存器窗口(ProcessorRegisters)監(jiān)視R0、R1的值,打開(kāi)存儲(chǔ)器觀察窗口(Memory)監(jiān)視0x40003100上的值。四、實(shí)驗(yàn)步驟(1)啟動(dòng)ADS1.2,使用ARMExecutableImage工程模板建立一個(gè)工程Instruction1。(2)建立匯編源文件TEST2.S,編寫實(shí)驗(yàn)程序,然后添加到工程中。(3)設(shè)置工程鏈接地址ROBase為0x40000000,RWBase為0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為0x40000000。(4)編譯鏈接工程,選擇【Project】->【Debug】,啟動(dòng)AXD進(jìn)行軟件仿真調(diào)試。(5)打開(kāi)寄存器窗口(ProcessorRegisters),選擇Current項(xiàng)監(jiān)視R0,R1的值。打開(kāi)存儲(chǔ)器觀察窗口(Memory),設(shè)置觀察地址為0x40003100,顯示方式Size為32Bit,監(jiān)視0x40003100地址上的值。圖2-1Memory窗口顯示格式設(shè)置寄存器顯示格式與之類似。使用鼠標(biāo)左鍵選擇某一個(gè)寄存器,然后點(diǎn)擊鼠標(biāo)右鍵,F(xiàn)ormat項(xiàng)中選擇顯示格式Hex,Decimal等等。如圖2-2所示。圖2-2設(shè)置寄存器顯示格式(6)單步運(yùn)行程序,可以設(shè)置/取消斷點(diǎn),或者全速運(yùn)行程序,停止程序運(yùn)行,調(diào)試時(shí)觀察寄存器和0x40003100地址上的值。圖2-3調(diào)試程序窗口六、思考題1.LDR偽指令與LDR加載指令的功能和應(yīng)用有何區(qū)別,舉例說(shuō)明?2.LDR/STR指令的前索引偏移指令如何編寫?指令是怎樣操作的?3.在AXD調(diào)試時(shí)如何復(fù)位程序?(提示:選擇【File】->【ReloadCurrentImage】重新加載映象文件)七、參考程序COUNT EQU 0x40003100 ;定義一個(gè)變量,地址為0x40003100 AREA Example2,CODE,READONLY ;聲明代碼段Example2 ENTRY ;標(biāo)識(shí)程序入口 CODE32 ;聲明32位ARM指令START LDR R1,=COUNT ;R1<=COUNT MOV R0,#0 ;R0<=0 STR R0,[R1] ;[R1]<=R0,即設(shè)置COUNT為0 LOOP LDR R1,=COUNT LDR R0,[R1] ;R0<=[R1] ADD R0,R0,#1 ;R0<=R0+1 CMP R0,#10 ;R0與10比較,影響條件碼標(biāo)志 MOVHS R0,#0 ;若R0大于等于10,則此指令執(zhí)行,R0<=0 STR R0,[R1] ;[R1]<=R0,即保存COUNT B LOOP END 實(shí)驗(yàn)預(yù)作關(guān)鍵過(guò)程及結(jié)果圖:?jiǎn)尾竭\(yùn)行觀看寄存器和存儲(chǔ)器的變化:具體指令講解見(jiàn)指令手冊(cè)。實(shí)驗(yàn)三:基于ADS的C語(yǔ)言程序?qū)嶒?yàn)一、實(shí)驗(yàn)環(huán)境 PC機(jī) 一臺(tái)ADS1.2集成開(kāi)發(fā)環(huán)境一套二、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)實(shí)驗(yàn)了解使用ADS1.2編寫C語(yǔ)言程序,并進(jìn)行調(diào)試。三、實(shí)驗(yàn)內(nèi)容編寫一個(gè)匯編程序文件Startup.S和一個(gè)C程序文件Test.c。匯編程序的功能是初始化堆棧指針和初始化C程序的運(yùn)行環(huán)境,然后調(diào)跳轉(zhuǎn)到C程序運(yùn)行,這就是一個(gè)簡(jiǎn)單的啟動(dòng)程序。C程序使用加法運(yùn)算來(lái)計(jì)算1+2+3+...+(N-1)+N的值(N>0)。四、實(shí)驗(yàn)預(yù)習(xí)要求(1)仔細(xì)閱讀《ARM嵌入式系統(tǒng)基礎(chǔ)教程》中第4章ARM指令系統(tǒng)的內(nèi)容。(2)仔細(xì)閱讀產(chǎn)品配套光盤附帶文檔《ADS集成開(kāi)發(fā)環(huán)境及仿真器應(yīng)用》或其他相關(guān)資料,了解ADS工程編輯和AXD調(diào)試的內(nèi)容。(本實(shí)驗(yàn)使用軟件仿真)五、實(shí)驗(yàn)步驟(1)啟動(dòng)ADS1.2,使用ARMExecutableImage工程模板建立一個(gè)工程ProgramC。(2)建立源文件Startup.S和Test.c,編寫實(shí)驗(yàn)程序,然后添加到工程中。(3)設(shè)置工程鏈接地址ROBase為0x40000000,RWBase為0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為Ox40000000。(4)設(shè)置位于開(kāi)始位置的起始代碼段,如圖3-1,3-2所示。圖3-1設(shè)置位于開(kāi)始位置的起始代碼段(1)圖3-2設(shè)置位于開(kāi)始位置的起始代碼段(2)(5)編譯鏈接工程,選擇Project—Debug,啟動(dòng)AXD進(jìn)行軟件仿真調(diào)試。(6)在Startup.s的“BMain”處設(shè)置斷點(diǎn),然后全速動(dòng)行程序。(7)程序在斷點(diǎn)處停止。單步運(yùn)行程序,判斷程序是否跳轉(zhuǎn)到C程序中運(yùn)行。(8)詵擇Processorvlews—variables打開(kāi)變量觀察窗口,觀察全局變量的值,然后單步/全速運(yùn)行程序,判斷程序的運(yùn)算結(jié)果是否正確。如圖3-3所示。圖3-3ARM實(shí)驗(yàn)3的運(yùn)行觀察結(jié)果六、思考題(1)在實(shí)驗(yàn)參考程序中,Startup.s文件的作用是什么?如果沒(méi)有Startup.s文件,C程序運(yùn)行會(huì)出錯(cuò)嗎?(2)實(shí)驗(yàn)程序中的Main()函數(shù)名是否可以更改為其他名字?(提示:Main只是一個(gè)標(biāo)號(hào)。)七、參考程序 ;startupfile IMPORT |Image$$RO$$Limit| IMPORT |Image$$RW$$Base| IMPORT |Image$$ZI$$Base| IMPORT |Image$$ZI$$Limit| IMPORT MAIN ;declarethemain()intheCProg AREA start,CODE,READONLY ENTRY CODE32 Reset LDR SP,=0x40003f00 ;initialtheCcase LDR R0,=|Image$$RO$$Limit| LDR R1,=|Image$$RW$$Base| LDR R3,=|Image$$ZI$$Base| CMP R0,R1 BEQ LOOP1 LOOP0 CMP R1,R3 LDRCC R2,[R0],#4 STRCC R2,[R1],#4 BCC LOOP0 LOOP1 LDR R1,=|Image$$ZI$$Limit| MOV R2,#0 LOOP2 CMP R3,R1 STRCC R2,[R3],#4 BCC LOOP2 B MAIN END //mainfile#define uint8 unsignedchar #define uint32 unsignedint#define N 100 uint32sum;voidMAIN(void){ uint32i; sum=0; for(i=0;i<=100;i++) sum+=i; while(1);}實(shí)驗(yàn)四:C語(yǔ)言調(diào)用匯編程序?qū)嶒?yàn)一、實(shí)驗(yàn)環(huán)境 PC機(jī) 一臺(tái)ADS1.2集成開(kāi)發(fā)環(huán)境一套二、實(shí)驗(yàn)?zāi)康恼莆赵贑語(yǔ)言程序中調(diào)用匯編程序,了解ATPCS的基本規(guī)則。三、實(shí)驗(yàn)內(nèi)容在C程序調(diào)用匯編子程序,實(shí)現(xiàn)兩個(gè)整數(shù)的加法運(yùn)算。匯編子程序的原型為:uint32Add(uint32x,uint32y)其中uint32已定義為unsignedint。四、實(shí)驗(yàn)預(yù)習(xí)要求(1)仔細(xì)閱讀ARM公司的ATPCS的相關(guān)文檔。例如ATPCS.PDF。(2)仔細(xì)閱讀產(chǎn)品配套光盤附帶文檔《ADS集成開(kāi)發(fā)環(huán)境及仿真器應(yīng)用》或其他相關(guān)資料,了解ADS工程編輯和AXD調(diào)試的內(nèi)容。(本實(shí)驗(yàn)使用軟件仿真。)五、實(shí)驗(yàn)步驟(1)啟動(dòng)ADS1.2,使用ARMExecutableImage工程模板建立一個(gè)工程ProgramCl。(2)建立源文件Startup.s、Add.s和Test.c,編寫實(shí)驗(yàn)程序,然后添加到工程中。(3)設(shè)置工程鏈接地址ROBase為0x40000000,RWBase為0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為Ox40000000。(4)設(shè)置工程鏈接選項(xiàng),位于開(kāi)始位置的起始代碼段設(shè)置為Startup.o的Start段。圖4-1設(shè)置開(kāi)始位置的起始代碼段(5)編譯鏈接工程,選擇Project→Debug,啟動(dòng)AXD進(jìn)行軟件仿真調(diào)試。(6)在Test.c文件中調(diào)用Add()的代碼處設(shè)置斷點(diǎn),然后全速運(yùn)行程序。(7)程序在斷點(diǎn)處停止。使用SetpIn單步運(yùn)行程序,觀察程序是否轉(zhuǎn)到匯編程序Add.s。(8)選擇ProcessorViews→Variables打開(kāi)變量觀察窗口.觀察全局變量的值,然后單步/全速運(yùn)行程序,判斷程序的運(yùn)算結(jié)果是否正確。如圖4-2所示。圖4-2ARM實(shí)驗(yàn)4的運(yùn)行觀察結(jié)果六、思考題在實(shí)驗(yàn)參考程序中,如何以指針形式傳遞參數(shù)?(即設(shè)汁“uint32Add(uint32*x,uint32*y)”函數(shù)。)七、參考程序startup.s文件程序見(jiàn)實(shí)驗(yàn)3 //Test.c#defineuint8 unsignedchar#defineuint32 unsignedintexternuint32 Add(uint32x,uint32y);uint32sum;voidMain{ sum=Add(5,4); while(1);};Add.s EXPORT Add AREA Addc,CODE,READONLY ENTRY CODE32 Add ADD R0,R0,R1 MOV PC,LR END源代碼組織見(jiàn)圖源代碼組織圖實(shí)驗(yàn)五:GPIO輸出實(shí)驗(yàn)一、實(shí)驗(yàn)環(huán)境 PC機(jī) 一臺(tái)ADS1.2集成開(kāi)發(fā)環(huán)境一套EasyARM2200教學(xué)實(shí)驗(yàn)平臺(tái)一套二、實(shí)驗(yàn)?zāi)康模?)掌握LPC2200專用工程模板的使用。1(2)掌握EasyJTAG仿真器的安裝和使用。(3)能夠在EasyARM2200教學(xué)實(shí)驗(yàn)開(kāi)發(fā)平臺(tái)上運(yùn)行第一個(gè)程序(無(wú)操作系統(tǒng))。(4)熟悉LPC2000系列ARM7微控制器的GPIO控制。三、實(shí)驗(yàn)內(nèi)容編程控制LPC2200實(shí)驗(yàn)箱上的蜂鳴器報(bào)警。先使用片外RAM進(jìn)行調(diào)試,調(diào)試通過(guò)后將程序固化到片外FLASH中,脫機(jī)運(yùn)行程序。四、實(shí)驗(yàn)預(yù)習(xí)要求(1)仔細(xì)閱讀《ARM嵌入式系統(tǒng)基礎(chǔ)教程》5.7節(jié)的LPC2000引腳連接模塊,5.9節(jié)的GPIO。//H-jtag(2)仔細(xì)閱讀本書第1章的內(nèi)容,了解EasyARM2200教學(xué)實(shí)驗(yàn)開(kāi)發(fā)平臺(tái)的硬件結(jié)構(gòu),注意蜂鳴器的相關(guān)控制電路。(3)仔細(xì)閱讀產(chǎn)品配套光盤附帶文檔《ADS集成開(kāi)發(fā)環(huán)境及仿真器應(yīng)用》或其他相關(guān)資料,了解ADS1.2集成開(kāi)發(fā)環(huán)境、LPC2200專用工程模板以及EasyJTAG仿真器的應(yīng)用。五、實(shí)驗(yàn)原理如何在EasyARM2200上運(yùn)行第一個(gè)程序。(1)安裝ADS1.2(PC)(2)了解ADS1.2(PC)(3)連接EasyJTAG仿真器和EasyARM2200開(kāi)發(fā)板(硬件)(4)安裝EasyJTAG驅(qū)動(dòng)程序(PC)(5)添加工程模板(PC)(6)用工程模板建立第一個(gè)工程(PC)(7)仿真調(diào)試第一個(gè)工程(PC+硬件)說(shuō)明:(PC)屬于在PC機(jī)上操作,即軟件的操作;(硬件)屬于開(kāi)發(fā)板硬件操作;(PC+硬件)屬于在PC機(jī)上進(jìn)行軟件操作,硬件上要連接或跳線操作。1、安裝ADS1.2,運(yùn)行在ADS目錄下Setup.exe,開(kāi)始安裝ADS1.2。按照安裝軟件的提示安裝,與其它軟件安裝操作方法基本一致。2、了解ADS1.2,使用ADS1.2建立工程,編譯連接設(shè)置,調(diào)試操作等,參考本書第2章的內(nèi)容。更詳細(xì)使用方法參考ADS1.2的在線幫助文檔或相關(guān)資料。3、連接EasyJTAG仿真器和EasyARM2200開(kāi)發(fā)板。將EasyJTAG仿真器的25針接口通過(guò)并口延長(zhǎng)線與PC機(jī)的并口連接,將EasyJTAG仿器的20針接口通過(guò)20PIN連接電纜接到EasyARM2200開(kāi)發(fā)板的J2上,然后使用配套的壓器(9V)給開(kāi)發(fā)板供電。4、.EasyJTAG仿真器的安裝與應(yīng)用參考本書第2.5節(jié)的內(nèi)容。5.、添加工程模板參考本書第2.4節(jié)的內(nèi)容。6、.用工程模板建立第一個(gè)工程使用LPC2200專用工程模板建立工程(比如ARMExecutableImageforlpc22xx工程模板),建立源文件并加入到工程,然后編寫程序代碼;編譯連接工程,若有錯(cuò)誤,則修改程序,然后再次編譯。7.仿真調(diào)試第一個(gè)工程正確設(shè)置EasyARM2200開(kāi)發(fā)板上的跳線;啟動(dòng)AXD進(jìn)行仿真調(diào)試。六、實(shí)驗(yàn)步驟1、連接EasyJTAG仿真器和EasyARM2200開(kāi)發(fā)板,然后安裝EasyJTAG仿真器的驅(qū)動(dòng)程序(若已經(jīng)安裝過(guò),此步省略)。2、為ADS1.2增加LPC2200專用工程模板(若已增加過(guò),此步省略)。3、啟動(dòng)ADS1.2,使用ARMExecutableImageforlpc22xx工程模板建立一個(gè)工程BeepCon_C。4、建立C源文件BeepCon.c,編寫實(shí)驗(yàn)程序,然后添加到工程的user組中。5、選用DebugInExram生成目標(biāo),如圖5-1所示,然后編譯連接工程。圖5-1選擇生成目標(biāo)6、將EasyARM2200開(kāi)發(fā)板上的JP9跳線短接,JP4跳線斷開(kāi),JP6跳線設(shè)置為Bank0-RAM、Bank1-Flash。7、選擇【Project】->【Debug】,啟動(dòng)AXD進(jìn)行JTAG仿真調(diào)試(需要正確設(shè)置仿真器,注意:使用DebugInExram生成目標(biāo)時(shí),使用片外RAM進(jìn)行仿真調(diào)試,JP6跳線要設(shè)置為Bank0-RAM、Bank1-Flash,在AXD中設(shè)置仿真器參考如圖5-2所示。圖5-2片外RAM調(diào)試的仿真器設(shè)置8、若JTAG連接出錯(cuò),或AXD主窗口沒(méi)有顯示Startup.S源程序,按本書第2.5節(jié)介紹的方法進(jìn)行處理。9、全速運(yùn)行程序,程序?qū)?huì)在beepcon.c的主函數(shù)中停止(因?yàn)閙ain函數(shù)起始處默認(rèn)設(shè)置有斷點(diǎn))。10、單擊ContextVariable圖標(biāo)按鈕(或者選擇【ProcessorViews】->【Variables】)打開(kāi)變量觀察窗口,通過(guò)此窗口可以觀察局部變量和全局變量。選擇【SystemViews】->【DebuggerInternals】即可打開(kāi)LPC2000系列ARM7微控制器的片內(nèi)外設(shè)寄存器窗口。11、可以單步運(yùn)行程序,可以設(shè)置/取消斷點(diǎn),或者全速運(yùn)行程序,停止程序運(yùn)行,觀察變量的值,判斷蜂鳴器控制是否正確。12、當(dāng)仿真調(diào)試通過(guò)后關(guān)閉AXD,在ADS1.2集成開(kāi)發(fā)環(huán)境中選用RelOutChip生成目標(biāo),然后編譯連接工程。13、將EasyARM2200開(kāi)發(fā)板上的JP9跳線短接,JP1、JP4跳線斷開(kāi),JP6跳線設(shè)置為Bank0-Flash、Bank1-RAM,JP7跳線設(shè)置為OUTSIDE。14、選擇【Project】->【Debug】,啟動(dòng)AXD進(jìn)行JTAG仿真調(diào)試。此時(shí)EasyJTAG仿真器將會(huì)把程序下載到片外FLASH上(需要正確設(shè)置仿真器,參考第2.5節(jié))。注意:使用RelOutChip生成目標(biāo)時(shí),使用片外FLASH進(jìn)行仿真調(diào)試(或固化程序),JP6跳線要設(shè)置為Bank0-Flash、Bank1-RAM,在AXD中設(shè)置仿真器參考如圖5-3所示。圖5-3片外FLASH調(diào)試的仿真器設(shè)置15、按EasyARM2200開(kāi)發(fā)板上的RST復(fù)位鍵,觀察程序是否能脫機(jī)運(yùn)行。16、實(shí)驗(yàn)結(jié)束后,在AXD中設(shè)置仿真器為片外RAM調(diào)試方式的設(shè)置,以便于后面實(shí)驗(yàn)的正確操作。七、思考題為什么這個(gè)實(shí)驗(yàn)的工程不需要設(shè)置連接地址?(提示:LPC2200專用工程模板已集成了起動(dòng)代碼、編譯選項(xiàng)和連接地址設(shè)置等等)在實(shí)驗(yàn)參考程序中,如何控制蜂鳴器報(bào)警的速度?在LPC2000系列ARM7微控制器中,有哪兩個(gè)管腳作GPIO輸出時(shí)需要外接上拉電阻?八、參考程序GPIO輸出控制實(shí)驗(yàn)1的參考程序見(jiàn)程序清單。GPIO輸出控制實(shí)驗(yàn)1參考程序/*****************************************************************************文件名:BEEPCON.C*功能:蜂鳴器控制。對(duì)蜂鳴器B1進(jìn)行控制,采用軟件延時(shí)方法。*使用I/O口直接控制,采用灌電流方式。*說(shuō)明:將跳線器JP9短接,JP4斷開(kāi)。****************************************************************************/#include"config.h"#defineBEEPCON0x00000080/*P0.7引腳控制B1,低電平蜂鳴*//*****************************************************************************名稱:DelayNS()*功能:長(zhǎng)軟件延時(shí)。*入口參數(shù):dly延時(shí)參數(shù),值越大,延時(shí)越久*出口參數(shù):無(wú)****************************************************************************/voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--)for(i=0;i<5000;i++);}/*****************************************************************************名稱:main()*功能:控制蜂鳴器蜂鳴。****************************************************************************/intmain(void){PINSEL0=0x00000000;//設(shè)置管腳連接GPIOIO0DIR=BEEPCON;//設(shè)置I/O為輸出while(1){IO0SET=BEEPCON;//BEEPCON=1DelayNS(10);IO0CLR=BEEPCON;//BEEPCON=0DelayNS(10);}return(0);}實(shí)驗(yàn)六:GPIO輸入實(shí)驗(yàn)一、實(shí)驗(yàn)環(huán)境 PC機(jī) 一臺(tái)ADS1.2集成開(kāi)發(fā)環(huán)境一套EasyARM2200教學(xué)實(shí)驗(yàn)平臺(tái)一套二、實(shí)驗(yàn)?zāi)康哪軌蚴褂肎PIO的輸入模式讀取開(kāi)關(guān)信號(hào)。三、實(shí)驗(yàn)內(nèi)容讀取P0.14口上的電平值,然后將讀到的值輸出控制蜂鳴器。四、實(shí)驗(yàn)預(yù)習(xí)要求仔細(xì)閱讀《ARM與嵌入式系統(tǒng)基礎(chǔ)教程》第5.7節(jié)的LPC2000管腳連接模塊,第5.9節(jié)的GPIO。仔細(xì)閱讀本書第1章的內(nèi)容,了解EasyARM2200開(kāi)發(fā)板的硬件結(jié)構(gòu),注意蜂鳴器控制電路及JP1跳線器的說(shuō)明。仔細(xì)閱讀本書第2章的內(nèi)容,了解ADS1.2集成開(kāi)發(fā)環(huán)境、LPC2200專用工程模板、EasyJTAG仿真器的應(yīng)用。五、實(shí)驗(yàn)原理P0.14口設(shè)置為輸入模式時(shí),口線內(nèi)部無(wú)上拉電阻,當(dāng)與按鍵或跳線器連接使用時(shí)需要外接上拉電阻,防止口線懸空。GPIO輸入實(shí)驗(yàn)原理圖如圖6-1所示。圖6-1GPIO輸入實(shí)驗(yàn)原理圖六、實(shí)驗(yàn)步驟(1)啟動(dòng)ADS1.2,使用ARMExecutableImageforlpc22xx工程模板建立一個(gè)工程ReadPin_C。(2)建立C源文件ReadPin.c,編寫實(shí)驗(yàn)程序,然后添加到工程的user組中。(3)選用DebugInExram生成目標(biāo),然后編譯連接工程。(4)將EasyARM2200開(kāi)發(fā)板上的JP9跳線短接,JP4跳線斷開(kāi),JP6跳線設(shè)置為Bank0-RAM、Bank1-Flash。(5)選擇【Project】->【Debug】,啟動(dòng)AXD進(jìn)行JTAG仿真調(diào)試。(6)單步運(yùn)行程序,先短接JP1,觀察IO0PIN寄存器的值,然后斷開(kāi)JP1,觀察IO0PIN寄存器的值。全速運(yùn)行程序,短接/斷開(kāi)JP1,控制蜂鳴器的蜂鳴。說(shuō)明:可以通過(guò)Watch窗口觀察寄存器的值。選擇【ProcessorViews】->【W(wǎng)atch】打開(kāi)Watch窗口,在Watch窗口內(nèi)點(diǎn)擊鼠標(biāo)右鍵,選擇AddWatch…項(xiàng)添加變量,如圖6-2所示。圖6-2Watch窗口在AddWatch窗口中的Expression項(xiàng)輸入*((unsignedlong*)0xE0028000),然后回車,如圖6-3所示,然后選擇AddToView按鈕,即可在Watch窗口觀察IO0PIN寄存器(IO0PIN寄存器的地址0xE0028000)。圖6-3AddWatch對(duì)話框在Watch窗口中選擇一個(gè)觀察變量,按Del鍵即可刪除此觀察變量。注意:有些寄存器不能讀出顯示或讀操作會(huì)影響到其它寄存器的值。七、思考題如果將P0.30設(shè)置為GPIO輸入模式,且管腳懸空,那么讀取P0.30得到的值是0還是1?或者是不確定?如果需要讀取當(dāng)前P0.7的輸出值(不是管腳上的電平),如何實(shí)現(xiàn)?八、參考程序GPIO輸入控制實(shí)驗(yàn)的參考程序見(jiàn)程序清單。GPIO輸入控制實(shí)驗(yàn)參考程序/*****************************************************************************文件名:READPIN.C*功能:讀取I/O引腳值,并輸出控制蜂鳴器。*使用I/O口輸入方式對(duì)P0.14口進(jìn)行掃描。*說(shuō)明:將跳線器JP9短接,JP4斷開(kāi),然后短接/斷開(kāi)JP1(使P0.14為低/高電平)。****************************************************************************/#include"config.h"#defineBEEPCON0x00000080/*P0.7引腳控制B1,低電平蜂鳴*/#definePIN_P0140x00004000/*定義P0.14屏蔽字*//*****************************************************************************名稱:main()*功能:讀取P0.14口的值,并輸出控制蜂鳴器B1。****************************************************************************/intmain(void){uint32i;PINSEL0=0x00000000;//設(shè)置管腳連接GPIOIO0DIR=BEEPCON;//設(shè)置B1控制口為輸出,其它I/O為輸入while(1){if((IO0PIN&PIN_P014)!=0)IO0SET=BEEPCON;elseIO0CLR=BEEPCON;for(i=0;i<1000;i++);}return(0);}實(shí)驗(yàn)七:UART通訊實(shí)驗(yàn)一、實(shí)驗(yàn)環(huán)境 PC機(jī) 一臺(tái)ADS1.2集成開(kāi)發(fā)環(huán)境一套EasyARM2200教學(xué)實(shí)驗(yàn)平臺(tái)一套二、實(shí)驗(yàn)?zāi)康?.了解LPC2200處理器的UART基本工作原理及配置操作;2.能夠使用LPC2200處理器的UART進(jìn)行數(shù)據(jù)發(fā)送和接收。三、實(shí)驗(yàn)內(nèi)容使用UART0發(fā)送字符串“HelloWorld!”。UART0設(shè)置為通訊波特率115200,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)。四、實(shí)驗(yàn)預(yù)習(xí)要求仔細(xì)閱讀《ARM嵌入式系統(tǒng)基礎(chǔ)教程》第5.10節(jié)UART0的說(shuō)明。仔細(xì)閱讀本書第1章的內(nèi)容,了解EasyARM2200開(kāi)發(fā)板的硬件結(jié)構(gòu),注意串口部分的電路。仔細(xì)閱讀SP3232E芯片的數(shù)據(jù)手冊(cè),了解此芯片的作用及應(yīng)用電路設(shè)計(jì)。五、實(shí)驗(yàn)步驟(1).啟動(dòng)ADS1.2,使用ARMExecutableImageforlpc22xx工程模板建立一個(gè)工程SendStr_c。(2)建立C源文件SendStr.c,編寫實(shí)驗(yàn)程序,然后添加到工程的user組中。(3)選用DebugInExram生成目標(biāo),然后編譯連接工程。(4)將EasyARM2200開(kāi)發(fā)板上的JP6跳線設(shè)置為Bank0-RAM、Bank1-Flash。(5)使用串口延長(zhǎng)線把EasyARM2200開(kāi)發(fā)板的CZ2(UART0)與PC機(jī)的COM1連接。PC機(jī)運(yùn)行EasyARM軟件,設(shè)置串口為COM1,波特率為115200,然后選擇【設(shè)置】->【發(fā)送數(shù)據(jù)】,在彈出的發(fā)送數(shù)據(jù)窗口中點(diǎn)擊“高級(jí)”即可打開(kāi)接收窗口。(6)選擇【Project】->【Debug】,啟動(dòng)AXD進(jìn)行JTAG仿真調(diào)試。(7)全速運(yùn)行程序,PC機(jī)上的EasyARM軟件會(huì)不斷的顯示“HelloWorld!”。如圖7-1所示。圖7-1UART實(shí)驗(yàn)運(yùn)行結(jié)果七、思考題U0RBR寄存器和U0THR寄存器的地址是完全一樣的,是不是說(shuō)明接收寄存器和發(fā)送寄存器是同一物理寄存器呢?如果將實(shí)驗(yàn)參考程序中等待數(shù)據(jù)發(fā)送完畢的代碼改為“while((U0LSR&0x20)==0);”,程序運(yùn)行能得到正確結(jié)果嗎?八、參考程序UART實(shí)驗(yàn)的參考程序見(jiàn)程序清單。UART實(shí)驗(yàn)參考程序/*****************************************************************************文件名:SENDSTR.C*功能:向串口發(fā)送數(shù)據(jù)。*說(shuō)明:使用外部11.0592MHz晶振,根據(jù)CONFIG.H文件配置,F(xiàn)pclk=11.0592MHz;*通訊波特率115200,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)。****************************************************************************/#include"config.h"/*****************************************************************************名稱:DelayNS()*功能:長(zhǎng)軟件延時(shí)*入口參數(shù):dly延時(shí)參數(shù),值越大,延時(shí)越久*出口參數(shù):無(wú)****************************************************************************/voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--)for(i=0;i<5000;i++);}#defineUART_BPS115200/*定義通訊波特率*//*****************************************************************************名稱:UART0_Ini()*功能:初始化串口0。設(shè)置為8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn),波特率為115200*入口參數(shù):無(wú)*出口參數(shù):無(wú)****************************************************************************/voidUART0_Ini(void){uint16Fdiv;U0LCR=0x83;//DLAB=1,可設(shè)置波特率Fdiv=(Fpclk/16)/UART_BPS;//設(shè)置波特率U0DLM=Fdiv/256;U0DLL=Fdiv%256;U0LCR=0x03;}/*****************************************************************************名稱:UART0_SendByte()*功能:向串口發(fā)送字節(jié)數(shù)據(jù),并等待發(fā)送完畢。*入口參數(shù):data要發(fā)送的數(shù)據(jù)*出口參數(shù):無(wú)****************************************************************************/voidUART0_SendByte(uint8data){U0THR=data;//發(fā)送數(shù)據(jù)while((U0LSR&0x40)==0);//等待數(shù)據(jù)發(fā)送完畢}/*****************************************************************************名稱:UART0_SendStr()*功能:向串口發(fā)送一字符串*入口參數(shù):srt要發(fā)送的字符串的指針*出口參數(shù):無(wú)****************************************************************************/voidUART0_SendStr(uint8const*str){while(1){if(*str=='\0')break;UART0_SendByte(*str++);//發(fā)送數(shù)據(jù)}}uint8constSEND_STRING[]="HelloWorld!\n";/*****************************************************************************名稱:main()*功能:向串口UART0發(fā)送字符串"HelloWorld!"****************************************************************************/intmain(void){PINSEL0=0x00000005;//設(shè)置I/O連接到UART0UART0_Ini();while(1){UART0_SendStr(SEND_STRING);DelayNS(10);}return(0);}實(shí)驗(yàn)八:RTC實(shí)驗(yàn)一、實(shí)驗(yàn)環(huán)境 PC機(jī) 一臺(tái)ADS1.2集成開(kāi)發(fā)環(huán)境一套EasyARM2200教學(xué)實(shí)驗(yàn)平臺(tái)一套二、實(shí)驗(yàn)?zāi)康恼莆誏PC2200的RTC基本設(shè)置及時(shí)間的讀取操作。三、實(shí)驗(yàn)內(nèi)容初始化LPC2200內(nèi)部的RTC,然后讀取時(shí)間值通過(guò)串口向上位機(jī)發(fā)送,并把秒的值輸出到開(kāi)發(fā)板上的LED1~LED8顯示。四、實(shí)驗(yàn)預(yù)習(xí)要求仔細(xì)閱讀《ARM嵌入式系統(tǒng)基礎(chǔ)教程》第5.17節(jié)實(shí)時(shí)時(shí)鐘(RTC)的說(shuō)明。五、實(shí)驗(yàn)步驟(1)啟動(dòng)ADS1.2,使用ARMExecutableImageforlpc22xx工程模板建立一個(gè)工程SendRtc_C。(2)建立C源文件sendrtc.c,編寫實(shí)驗(yàn)程序,然后添加到工程的user組中。(3)選用DebugInExram生成目標(biāo),然后編譯連接工程。(4)將EasyARM2200開(kāi)發(fā)板上的JP8跳線短接,JP6跳線設(shè)置為Bank0-RAM、Bank1-Flash。(5)使用串口延長(zhǎng)線把EasyARM2200開(kāi)發(fā)板的CZ2(UART0)與PC機(jī)的COM1連接。PC機(jī)運(yùn)行EasyARM軟件,設(shè)置串口為COM1,波特率為115200,然后選擇【設(shè)置】->【發(fā)送數(shù)據(jù)】,在彈出的發(fā)送數(shù)據(jù)窗口中點(diǎn)擊“高級(jí)”即可打開(kāi)接收窗口(不要選擇“十六進(jìn)制方式顯示”)。(6)選擇【Project】->【Debug】,啟動(dòng)AXD進(jìn)行JTAG仿真調(diào)試。//故障解決辦法(7)全速運(yùn)行程序,PC機(jī)上的EasyARM軟件會(huì)不斷的顯示RTC的時(shí)間值。六、思考題若程序中已初始化YEAR、MONTH、DOM寄存器,則DOY寄存器是否還需要初始化?如果想定時(shí)每天的12:00:00報(bào)警,需要如何設(shè)置RTC的相關(guān)寄存器?七、參考程序RTC實(shí)驗(yàn)的參考程序見(jiàn)程序清單。RTC實(shí)驗(yàn)參考程序/*****************************************************************************文件名:SENDRTC.C*功能:運(yùn)行RTC進(jìn)行計(jì)時(shí),將所時(shí)間值不斷的通過(guò)串口向上位機(jī)發(fā)送,并把秒的值輸出LED1--LED8*顯示。*說(shuō)明:將跳線器JP8短接。*通訊波特率115200,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)。****************************************************************************/#include"config.h"#defineSPI_CS0x00000100/*P0.8*/#defineSPI_DATA0x00000040/*P0.6*/#defineSPI_CLK0x00000010/*P0.4*/#defineSPI_IOCON0x00000150/*定義SPI接口的I/O設(shè)置字*//*定義串口模式設(shè)置數(shù)據(jù)結(jié)構(gòu)*/typedefstructUartMode{uint8datab;//字長(zhǎng)度,5/6/7/8uint8stopb;//停止位,1/2uint8parity;//奇偶校驗(yàn)位,0為無(wú)校驗(yàn),1奇數(shù)校驗(yàn),2為偶數(shù)校驗(yàn)}UARTMODE;uint8send_buf[16];//UART0數(shù)據(jù)接收緩沖區(qū)/*****************************************************************************名稱:UART0_Ini()*功能:初始化串口0。設(shè)置其工作模式及波特率。*入口參數(shù):baud波特率*set模式設(shè)置(UARTMODE數(shù)據(jù)結(jié)構(gòu))*出口參數(shù):返回值為1時(shí)表示初化成功,為0表除參數(shù)出錯(cuò)****************************************************************************/uint8UART0_Ini(uint32baud,UARTMODEset){uint32bak;/*參數(shù)過(guò)濾*/if((0==baud)||(baud>115200))return(0);if((set.datab<5)||(set.datab>8))return(0);if((0==set.stopb)||(set.stopb>2))return(0);if(set.parity>4)return(0);/*設(shè)置串口波特率*/U0LCR=0x80;//DLAB位置1bak=(Fpclk>>4)/baud;U0DLM=bak>>8;U0DLL=bak&0xff;/*設(shè)置串口模式*/bak=set.datab-5;//設(shè)置字長(zhǎng)度if(2==set.stopb)bak|=0x04;//判斷是否為2位停止位if(0!=set.parity){set.parity=set.parity-1;bak|=0x08;}bak|=set.parity<<4;//設(shè)置奇偶校驗(yàn)U0LCR=bak;return(1);}/*****************************************************************************名稱:SendByte()*功能:向串口UART0發(fā)送字節(jié)數(shù)據(jù),并等待發(fā)送完畢。*入口參數(shù):data要發(fā)送的數(shù)據(jù)*出口參數(shù):無(wú)****************************************************************************/voidSendByte(uint8data){U0THR=data;//發(fā)送數(shù)據(jù)while((U0LSR&0x20)==0);//等待數(shù)據(jù)發(fā)送}/*****************************************************************************名稱:ISendBuf()*功能:將緩沖區(qū)的數(shù)據(jù)發(fā)送回主機(jī)。*入口參數(shù):buf數(shù)據(jù)緩沖區(qū)*no發(fā)送數(shù)據(jù)的個(gè)數(shù)*出口參數(shù):無(wú)****************************************************************************/voidISendBuf(uint8const*buf,uint8no){uint8i;for(i=0;i<no;i++)SendByte(buf[i]);}/*****************************************************************************名稱:HC595_SendDat()*功能:向74HC595發(fā)送一字節(jié)數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論