嵌入式系統(tǒng)實踐上機實踐報告-存儲器_第1頁
嵌入式系統(tǒng)實踐上機實踐報告-存儲器_第2頁
嵌入式系統(tǒng)實踐上機實踐報告-存儲器_第3頁
嵌入式系統(tǒng)實踐上機實踐報告-存儲器_第4頁
嵌入式系統(tǒng)實踐上機實踐報告-存儲器_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第?次實驗實驗名稱 學(xué)號姓名 華東師范大學(xué)計算機科學(xué)技術(shù)系實驗報告 第1頁共14頁計算機科學(xué)技術(shù)系上機實踐報告課程名稱:嵌入式系統(tǒng)實踐年級:上機實踐成績:指導(dǎo)教師:姓名:創(chuàng)新實踐成績:上機實踐名稱:存儲器學(xué)號:上機實踐日期:上機實踐編號:組號:上機實踐時間:實驗?zāi)康耐ㄟ^實驗熟悉ARM的內(nèi)部存儲空間分配。熟悉使用寄存器配置存儲空間的方法。掌握對存儲區(qū)進行訪問的方法。實驗設(shè)備硬件:EmbestEduKit-III實驗平臺,EmbestARM標準/增強型仿真器套件,PC機。軟件:EmbestIDEProARM集成開發(fā)環(huán)境,Windows98/2000/NT/XP。實驗內(nèi)容掌握S3C44B0X處理器對存儲空間的配置和讀寫訪問的方法:熟練使用命令腳本文件對ARM存儲控制寄存器進行正確配置;使用匯編編程,對RAM按字、半字和字節(jié)讀寫;C語言編程,對RAM按字、半字和字節(jié)讀寫。實驗原理S3C44B0X處理器的存儲控制器可以為片外存儲器訪問提供必要的控制信號,它主要包括以下特點:支持大、小端模式(通過外部引腳來選擇)地址空間:包含8個地址空間,每個地址空間的大小為32M字節(jié),總共有256M字節(jié)的地址空間。所有地址空間都可以通過編程設(shè)置為8位、16位或32位對準訪問。8個地址空間中,6個地址空間可以用于ROM、SRAM等存儲器,2個用于ROM、SRAM、FP/EDO/SDRAM等存儲器。7個地址空間的起始地址及空間大小是固定的。1個地址空間的起始地址和空間大小是可變的。所有存儲器空間的訪問周期都可以通過編程配置。提供外部擴展總線的等待周期。支持DRAM/SDARM自動刷新。支持地址對稱或非地址對稱的DRAM。S3C44B0X復(fù)位后的存儲器地址分配圖4-1為S3C44B0X復(fù)位后的存儲器地址分配圖。從圖中可以看出,特殊功能寄存器位于0X01C00000到0X02000000的4M空間內(nèi)。Bank0-Bank5的起始地址和空間大小都是固定的,Bank6的起始地址是固定的,但是空間大小和Bank7一樣是可變的,可以配置為2/4/8/16/32M。Bank6和Bank7的詳細的地址和空間大小的關(guān)系可以參考表4-1表4-1Bank6/Bank7地址大/小ENDIAN模式選擇處理器復(fù)位時(nRESET為低),通過ENDIAN引腳選擇所使用的ENDIAN模式。ENDIAN引腳通過下拉電阻與Vss連接,定義為Littleendian模式;ENDIAN引腳通過上拉電阻和Vdd連接,則定義為Bigendian模式.如下表所示。BANK0總線寬度BANK0(nGCS0)的數(shù)據(jù)總線寬度可以配置為8位、16位或32位。因為BANK0為啟動ROM(映射地址為0X00000000)所在的空間,所以必須在第一次訪問ROM前設(shè)置BANK0數(shù)據(jù)寬度,該數(shù)據(jù)寬度是由復(fù)位后OM[1:0]的邏輯電平?jīng)Q定的,如下表所示。存儲器控制專用寄存器總線寬度/等待控制寄存器(BWSCON)寄存器各位功能:[ENDIAN]:只讀,指示系統(tǒng)選定的大/小端模式,0表示小端模式,1表示大端模式。[DWi]:i=0~7,其中DW0為只讀,因為bank0數(shù)據(jù)總線寬度在復(fù)位后已經(jīng)由OM[1:0]的電平?jīng)Q定。DW1~DW7可寫,用于配置bank1~bank7的數(shù)據(jù)總線寬度,00表示8位數(shù)據(jù)總線寬度,01表示16位數(shù)據(jù)總線寬度,10表示32位數(shù)據(jù)總線寬度。[SWi]:i=1~7,寫入0則對應(yīng)的banki等待狀態(tài)不使用,寫入1則對應(yīng)的banki等待狀態(tài)使能。[STi]:i=1~7,決定SRAM是否使用UB/LB。0表示不使用UB/LB,引腳[14:11]定義為nWBE[3:0];1表示使用UB/LB,引腳[14:11]定義為nBE[3:0]。Bank控制寄存器(BANKCONn:nGCS0-nGCS5)Bank控制寄存器(BANKCONn:nGCS6-nGCS7)刷新控制寄存器(REFRESH)BANK大小寄存器(BANKSIZE)模式設(shè)置寄存器(MRSR)下面列舉了13個存儲控制寄存器的配置示例:觀察上面寄存器介紹中的寄存器地址可以發(fā)現(xiàn),13個寄存器分布在從0x01c80000開始的連續(xù)地址空間,所以上面的程序可以利用指令“stmiar0,{r1-r13}”實現(xiàn)將配置好的寄存器的值依次寫入到相應(yīng)的寄存器中。存儲器(SROM/DRAM/SDRAM)地址線連接如表4-4所示,數(shù)據(jù)寬度不同,連接方式也不同。表4-4存儲器地址線連接使用命令腳本文件配置存儲空間在使用仿真器對目標系統(tǒng)進行硬件仿真調(diào)試前,需要把代碼下載到目標系統(tǒng)的RAM空間中,所以調(diào)試前首先應(yīng)該配置CPU的存儲控制寄存器,初始化可讀寫空間。EmbestIDEProARM集成環(huán)境下可以使用一系列存儲寫命令來完成存儲控制寄存器的配置,稱為命令腳本文件(*.cs,有關(guān)命令腳本文件請參考EmbestIDE在線用戶手冊),通過命令腳本文件(*.cs)還可以配置目標系統(tǒng)的其他CPU控制寄存器,如中斷控制寄存器。EmbestEduKit-III的調(diào)試配置使用的命令腳本文件如下:片選信號設(shè)置EmbestEduKit-III實驗板的片選信號設(shè)置如表4-5所示:表4-5片選信號設(shè)置 外圍地址空間分配板上外圍地址空間分配如表4-6所列:表4-6外圍地址空間分配 電路設(shè)計EmbestEduKit-III實驗板上的存儲系統(tǒng)包括一片1M×16bit的Flash(SST39VF160)和一片4M×16bit的SDRAM(HY57V65160B)。如圖4-2Flash連接電路所示,處理器是通過片選nGCS0與片外Flash芯片連接。由于是16bit的Flash,所以用CPU的地址線A1-A20來分別和Flash的地址線A0-A19連接。Flash的地址空間是從0x00000000~0x00200000。Flash連接電路如圖SDRAM連接電路所示,SDRAM分成4個BANK,每個BANK的容量為1M×16bit。BANK的地址由BA1、BA0決定,00對應(yīng)BANK0,01對應(yīng)BANK1,10對應(yīng)BANK2,11對應(yīng)BANK3。在每個BANK中,分別用行地址脈沖選通RAS和列地址脈沖選通CAS進行尋址。本實驗板還設(shè)置跳線,可以為用戶升級內(nèi)存容量至4×2M×16bit。具體方法為使SDRAM的BA0、BA1分別接至CPU的A21、A22,A23腳。SDRAM由MCU專用SDRAM片選信號nSCS0選通,地址空間從0x0C000000~0x0C7FFFFF。SDRAM連接電路實驗步驟1.準備實驗環(huán)境:使用Embest仿真器連接目標板,使用EmbestEduKit-III實驗板附帶的串口線,連接實驗板上的UART0和PC機的串口。2.串口接收設(shè)置在PC機上運行windows自帶的超級終端串口通信程序(波特率115200、1位停止位、無校驗位、無硬件流控制);或者使用其它串口通信程序。3.打開實驗例程1)拷貝光盤CD1\Software\EduKit44b0文件夾到EmbestIDE\Examples\Samsung\目錄下;2)使用EmbestIDE通過EmbestJTAG仿真器連接實驗板,打開實驗例程目錄4.2_led_test子目錄下的led_test.pjf例程,編譯鏈接工程;ARM7基礎(chǔ)實驗教程-166-3)點擊IDE的Debug菜單,選擇RemoteConnect項或F8鍵,遠程連接目標板;4)點擊IDE的Debug菜單,選擇Download下載調(diào)試代碼到目標系統(tǒng)RAM中;5)在工程管理窗口中雙擊led.c就會打開該文件,在“l(fā)eds_off();”設(shè)置斷點后,點擊Debug菜單Go或F5鍵運行程序;6)當程序停留到斷點后,觀察當前l(fā)ed1206、led1207的狀態(tài),點擊Debug菜單下的Stepover或F10鍵執(zhí)行程序,觀察led1206、led1207的變化;7)結(jié)合實驗內(nèi)容和實驗原理部分,掌握ARM芯片中復(fù)用I/O口的使用。4.觀察實驗結(jié)果:在PC機上觀察超級終端程序主窗口,可以看到如下界面:bootsuccess...LedTestExample程序正確運行后,可以看到實驗系統(tǒng)上LED1206和LED1207進行以下循環(huán):LED1206亮->LED1206關(guān)閉->LED1207亮->LED1206和LED1207全亮->LED1207關(guān)閉->LED1206關(guān)閉5.完成實驗練習題理解和掌握實驗后,完成實驗練習題。六、調(diào)試過程、結(jié)果和分析1.實驗時先運行了原來的函數(shù),改變memory變量。2.這次實驗首先是要從光盤里打開源文件,觀察實例程序是如何實現(xiàn)word,halfword以及byte的調(diào)用,然后再通過打開源文件而進行下面的實驗。3.在程序調(diào)試的過程中始終報r5(我在程序中使用的一個寄存器)未被指定,后來在老師的幫助下,發(fā)現(xiàn)是我的一個匯編代碼寫的有點問題,ldrbr3,=r5應(yīng)該改為ldrbr3,【r5】七、總結(jié)1.本次上機第一次用到EmbestARM標準/增強型仿真器套件,并且本次題目題目比較難,盡管老師給了我們充足的時間去完成所有的練習題,但結(jié)果差強人意。本次實驗題目的主要內(nèi)容是從內(nèi)存中按word,halfword以及byte讀寫,同時也復(fù)習了之前的內(nèi)容,如各種c程序和匯編程序的相互調(diào)用,通過這次試驗對于存儲器有了更加直觀的認識。2.關(guān)于代碼部分,基本根據(jù)示例程序可以完成基本架構(gòu),但是有些細節(jié)還是無法完成,導(dǎo)致調(diào)試不成功,當然代碼不是個人的勞動結(jié)晶,最終跟同學(xué)共同完成了試驗任務(wù)。八、附件編寫C語言函數(shù)Main()定義變量src_addr,dst_addr,num,其值可變,理論上可定義為任意整數(shù)調(diào)用函數(shù)s_init(...)實現(xiàn)從src_addr起始的連續(xù)num個字節(jié)的內(nèi)存各字節(jié)依次寫為0x1~num調(diào)用函數(shù)c_move(...)實現(xiàn)從src_addr讀取連續(xù)num個字節(jié)的內(nèi)存,并逆序依次寫入dst_addr起始的連續(xù)內(nèi)存地址通過超級終端反饋操作信息Main.cvoid__gccmain(){}; intMain(){ intsrc_addr,dst_addr,num;src_addr=0x1000; dst_addr=0x2000; num=9; s_init(src_addr,1,num); c_move(src_addr,dst_addr,num);while(1); return;}2.編寫匯編語言函數(shù)s_init(start_addr,start_num,num)實現(xiàn)從start_addr起始的num字節(jié)初始化為start_num~(start_num+num-1),即:遞增數(shù)列,步長1要求字初始化部分調(diào)用函數(shù)c_init_word(start_addr,start_num,num_word)實現(xiàn)要求字節(jié)初始化部分調(diào)用函數(shù)s_init_byte(start_addr,start_num,num_byte)實現(xiàn)s_init.s.globals_init.text.externc_init_word.externs_init_bytes_init: mov ip,sp stmdb sp!,{fp,ip,lr,pc} sub fp,ip,#4 and v1,a3,#3 bic v2,a3,#3 init_word: movs a3,a3,lsr#3 beq init_byte bl c_init_wordinit_byte: cmp v1,#0 beq over add a1,a1,v2 add a2,a2,v2 mov a3,v1 bl s_init_byteover: ldmdb fp,{fp,sp,pc}3.編寫C語言函數(shù)c_init_word(start_addr,start_num,num_word)c_init_word.cvoidc_init_word(intstart_addr,intstart_num,intnum_word){ if(start_addr%4) { uart_printf("字未對齊\n"); return; } int*p=(int*)start_addr; inti=0; for(i=0;i<num_word;i++) { *p=start_num+i; p++; }}4.編寫匯編語言函數(shù)s_init_byte(start_addr,start_num,num)s_init_byte.s.globals_init_byte.texts_init_byte: mov ip,sp stmdb sp!,{fp,ip,lr,pc} sub fp,ip,#4loop: strb a2,[a1] add a1,a1,#1 add a2,a1,#1 subs a3,a3,#1 bne loop ldmdb fp,{fp,sp,pc}5.編寫C語言函數(shù)c_move(src_addr,dst_addr,num)c_move.c#defineSWAP(a,b){chart;t=a;a=b;b=t;}externintc_move_read(intsrc_addr,intnum);externvoids_move_write(intdst_addr,intdata,intnum);voidc_move(intsrc_addr,intdst_addr,intnum){ unionbit32_1{ intwhole; charc[4]; }temp; inti=num%4; if(i!=0) { temp.whole=c_move_read(src_addr,i); if(i==3) SWAP(temp.c[0],temp.c[2]) elseif(i==2) SWAP(temp.c[0],temp.c[1]) s_move_write(dst_addr+num-i,temp.whole,i); } i=num/4; if(i==0)return; src_addr+=i; while(i!=0) { temp.whole=c_move_read(src_addr,4); SWAP(temp.c[0],temp.c[3]); SWAP(temp.c[1],temp.c[2]); s_move_write(dst_addr+4*(i-1),temp.whole,4); i--; src_addr+=4; }}6.編寫C語言函數(shù)c_move_read(src_addr,num)num<=4從src_addr起的num字節(jié)讀取if(num==4)按字讀取;elseif(num==3)先按半字讀取,后按字節(jié)讀取;elseif(num==2)按半字讀取;elseif(num==1)按字節(jié)讀取;else反饋錯誤信息。c_move_read.cintc_move_read(intsrc_addr,intnum){ unionbit32_2{ intwhole; shorthalf[2]; charc[4]; }ret; if(num==4) ret.whole=(*(int*)src_addr); else if(num==3){ ret.half[0]=(*(short*)src_addr); ret.c[2]=(*(char*)(src_addr+2)); } elseif(num==2) ret.half[0]=(*(short*)src_addr); elseif(num==1) ret.c[0]=(*(char*)(src_addr+2)); else uart_printf("wrongnum!!\n"); } returnret.whole;}7.編寫匯編語言函數(shù)s_move_write(dst_addr,data,num)s_move_write.s.globals_move_write.texts_move_write: mov ip,sp stmdb sp!,{fp,ip,lr,pc} sub fp,ip,#4 cmp a3,#4 beq write_by_4bits cmp a3,#3 beq write_by_3bits cmp a3,#2 beq write_by_2bits cmp a3,#1 beq write_by_1bit bne overwrite_by_4bits: ldr v1,[a2] str v1,[a1] b overwrite_by_3bits: ldrh v1,[a2] str v1,[a1] ldrb v1,[a2,#2] strb v1,[a1,#2] b overwrite_by_2bits: ldrh v1,[a2] str v1,[a1] b overwrite_by_1bit: ldrb v1,[a2,#2] strb v1,[a1,#2

溫馨提示

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

評論

0/150

提交評論