嵌入式系統(tǒng)試驗(yàn)_第1頁(yè)
嵌入式系統(tǒng)試驗(yàn)_第2頁(yè)
嵌入式系統(tǒng)試驗(yàn)_第3頁(yè)
嵌入式系統(tǒng)試驗(yàn)_第4頁(yè)
嵌入式系統(tǒng)試驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(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)介

研究生專業(yè)實(shí)驗(yàn)教學(xué)實(shí)驗(yàn)報(bào)告書(shū)實(shí)驗(yàn)課程名稱:嵌入式系統(tǒng)專業(yè)實(shí)驗(yàn)實(shí)驗(yàn)指導(dǎo)教師:學(xué)院:專業(yè)及類別:學(xué)號(hào):姓名:實(shí)驗(yàn)日期:成績(jī):重慶大學(xué)研究生院制實(shí)驗(yàn)名稱:fpgasopc實(shí)驗(yàn)實(shí)驗(yàn)時(shí)間:2016.5.52016.5.12一、實(shí)驗(yàn)?zāi)康?、學(xué)習(xí)QuartusII、SOPCBuilder、NiosIIIDE的基本操作;2、初步了解SOPC的開(kāi)發(fā)流程,基本掌握NiosII軟核的定制流程;3、掌握NiosII軟件的開(kāi)發(fā)流程;掌握軟件的基本調(diào)試方法。二、實(shí)驗(yàn)儀器設(shè)備硬件:PC機(jī),F(xiàn)PGA實(shí)驗(yàn)開(kāi)發(fā)平臺(tái);軟件:QuartusII9.1,SOPCBuilder9.1,NiosIIIDE9.1。三、實(shí)驗(yàn)原理實(shí)驗(yàn)利用Quartus軟件內(nèi)嵌的SOPCBuilder工具來(lái)構(gòu)造實(shí)驗(yàn)硬件,在NiosII軟件編譯工具中開(kāi)發(fā)程序來(lái)控制實(shí)驗(yàn)箱中的LED燈實(shí)現(xiàn)閃爍的效果。1、驗(yàn)證實(shí)驗(yàn):建立可用于控制LED閃爍的簡(jiǎn)單NiosII處理器系統(tǒng),具體包括:(1)在QuartusII中建立一個(gè)工程;(2)使用SOPCBuilder建立并生成一個(gè)簡(jiǎn)單的基于NiosII的硬件系統(tǒng);(3)在QuartusII工程中編譯基于NiosII的硬件系統(tǒng)并生成配置文件.sof;(4)在NiosIIIDE中建立對(duì)應(yīng)硬件系統(tǒng)的用戶C/C++工程,編寫一簡(jiǎn)單用戶程序,在NiosIIIDE中編譯程序生成可執(zhí)行文件.elf;(5)將配置文件.sof和可執(zhí)行文件.elf都下載到FPGA進(jìn)行調(diào)試運(yùn)行。2、設(shè)計(jì)實(shí)驗(yàn):用按鍵控制8個(gè)LED燈的閃爍狀態(tài),燈的狀態(tài)如下:燈分為左右兩部分交替閃爍。燈分為奇數(shù)號(hào)和偶數(shù)號(hào)燈兩部分交替閃爍。循環(huán)從左至右間隔(兩盞燈一組)跑動(dòng)顯示;從中間開(kāi)始向兩側(cè)依次點(diǎn)亮,從兩側(cè)向中間依次點(diǎn)亮。四、實(shí)驗(yàn)內(nèi)容.文件夾的建立在計(jì)算機(jī)上創(chuàng)建文件夾,要求用英文或數(shù)字命名,不能用中文命名。.文本文件的建立1)單擊“開(kāi)始”一“程序”一Altera-QuartusII9.1SP2。2)點(diǎn)擊菜單欄File-NewProjectWizard,彈出對(duì)話框式。點(diǎn)擊Next>按鈕繼續(xù),修改,而后點(diǎn)擊Next>繼續(xù),出現(xiàn)提示D盤nios2目錄下面沒(méi)有l(wèi)ed這個(gè)目錄,詢問(wèn)是否要?jiǎng)?chuàng)建它,選擇是(y),讓QuartusII創(chuàng)建這個(gè)目錄。點(diǎn)擊"Next”。3)向?qū)ч_(kāi)始詢問(wèn)是否有現(xiàn)成的文件需要加到當(dāng)前新建的工程中點(diǎn)擊Next>繼續(xù),在圖(6)中選擇試驗(yàn)箱的芯片CycloneWE系列的EP4CE40F23I7,點(diǎn)擊Next>,最后點(diǎn)擊Finish完成新建項(xiàng)目(注:在項(xiàng)目文件中找到led.qsf文件修改器件的電壓值為1.2V).NIOSII軟核建立1)在Quartus下,向工程中添加文件,先建立一個(gè)BlockDiagram/SchematicFile,點(diǎn)擊菜單欄中的File->New,打開(kāi)新建文件對(duì)話框,我們選中BlockDiagram/SchematicFile,然后點(diǎn)擊OK按鈕。2)接下來(lái)我們?cè)搯?dòng)SOPCBuider來(lái)創(chuàng)建NIOSII軟核了,點(diǎn)擊Tools->SOPCBuilder會(huì)出現(xiàn)對(duì)話框在在最上層的CreateNewSystem對(duì)話框中的SystemName:中輸入軟核的名字,在本示例中,輸入helloled做為軟件核的名字,點(diǎn)擊OK按鈕確認(rèn)。3)窗口左上角的ClockSettings顯示clk_0為外部時(shí)鐘,頻率為50Mhz,這是我們當(dāng)前所用到的軟核時(shí)鐘。(注:外部時(shí)鐘頻率可以修改,此實(shí)驗(yàn)最好按板上晶振改為25Mhz)4)接下來(lái)要建立CPU,用鼠標(biāo)雙擊窗口左側(cè)框中的Processors->NIOSIIProcessor彈出如窗口,先選擇軟核的類型,Quartus一共提供了三種類型可供選擇,NiosII/e占用資源最少600-800LEs,功能也最簡(jiǎn)單,速度最慢°NiosII/s占資源比前者多一些,功能也多了,速度也快一些,NiosII/f占資源最多,功能也最多,速度就快。選擇的時(shí)候要根據(jù)你的需求和你的芯片資源來(lái)決定,在本實(shí)驗(yàn)中,我們選擇NiosII/s,能夠滿足需要。在窗口下半部分的這些選項(xiàng)可以先不用管ResetVector是復(fù)位后啟動(dòng)時(shí)的Memory類型和偏移量ExceptionVector是異常情況時(shí)的Memory類型和偏移量?,F(xiàn)在還不能配置,需要RAM設(shè)置好以后才能修改這里,點(diǎn)擊Next,需要設(shè)置JTAGDebugModule,即JTAG調(diào)試時(shí)所要用到的功能模塊,我們選擇Level1,只使用最簡(jiǎn)單的功能。點(diǎn)擊Next>繼續(xù),最后點(diǎn)擊Finish完成,出現(xiàn)cpu_0,就是剛才創(chuàng)建的cpu。5)接下面我們要添加片內(nèi)RAM選擇左邊目錄樹(shù)下的MemoriesandMemoryControllers->On-Chip->On-ChipMemory(RAMorROM)雙擊On-ChipMemory(RAMorROM),我們將RAM的大小改為20K,其他不做修改,然后直接點(diǎn)擊Finish完成,回到SOPCBuilder主窗口。主窗口上又加了一個(gè)Onchip_memory2_0的Module。6)接下來(lái)建立一個(gè)SystemID(這個(gè)版本中不是必需的),SystemID就是一種標(biāo)示符,類似校驗(yàn)和的這么個(gè)東西,在你下載程序之前或者重啟之后,都會(huì)對(duì)它進(jìn)行檢驗(yàn),以防止錯(cuò)誤發(fā)生。在左邊窗口的Peripherals->Debugandperformance->SystemIDPeripheral,雙擊SystemIDPeripheral會(huì)彈出對(duì)話框此窗口警告:SystemID組件的名字必需為sysid才能使用,點(diǎn)擊Finish完成添加,在SPOCbuilder主窗口中選中SystemID組件,然后擊點(diǎn)鼠標(biāo)右鍵,彈下一個(gè)菜單,選擇Rename,對(duì)sysid_0組件進(jìn)行重命名,將此文本框中的sysid_0改為sysid。照此方法,我們把所有組件后面的_0全部去掉。7)接下來(lái)創(chuàng)建JTAGUART(調(diào)試時(shí)需要打字符串用才需要,如果單純控制LED可以不要),首先JTAGUART是實(shí)現(xiàn)PC和NiosII系統(tǒng)間的串行通信接口,它用于字符的輸入輸出,在NiosII的開(kāi)發(fā)調(diào)試過(guò)程中扮演了重要的角色,接下來(lái)我們開(kāi)始建立它的模塊。選擇sopcbuilder主窗口左邊InterfaceProtocols->Serial->JTAGUART雙擊JTAGUART,不做修改,點(diǎn)擊Next>,下一步點(diǎn)擊finish完成?;氐絊OPCBuilder主窗口,更改組件名jtag_uart_0為jtag_uart。8)接下來(lái)回去對(duì)CPU進(jìn)行設(shè)定,在主窗口中雙擊CPU組件進(jìn)入CPU設(shè)定對(duì)話框,如下把ResetVector右邊的Memory:改為onchip_memory2,offset會(huì)設(shè)為0x0把ExceptionVector右邊的Memory改為onchip_memory2,offset會(huì)設(shè)為0x20,點(diǎn)擊窗口右下角的finish完成。9)接下來(lái)要添加一個(gè)PIO模塊(ParallelI/O),點(diǎn)擊窗口左側(cè)的Peripherals->MicrocontrollerPeripherals->PIO(ParallelI/O),其中Width表示要建立的PIO寬度是多少,我們的板上有8個(gè)LED,選擇寬度為8,Direction復(fù)選框中表示要建立的PIO的方向,分別表示Bidirectional(tristate)ports(雙向三態(tài)口),Inputportsonly(僅僅作為輸入口),Bothinputandoutputports(作為輸入和輸出口),Outputportsonly(僅僅作為輸出口),在本實(shí)驗(yàn)中將要實(shí)現(xiàn)的是點(diǎn)亮LED,所以這個(gè)新建的PIO采用Outputportsonly(僅輸出口)方式,點(diǎn)擊Next繼續(xù),不需要選擇,點(diǎn)Next繼續(xù),直接點(diǎn)擊Finish,完成PIO模塊的創(chuàng)建回到主窗口中我們?yōu)榱朔奖阕R(shí)另U,將pio_0改名為pio_led。10)執(zhí)行System菜單上的Auto-AssignBaseAddresses自動(dòng)分配一下地址。最后就能進(jìn)行編譯了,點(diǎn)擊SOPCBuilder主窗口左上角的SystemGeneration選項(xiàng)卡.我們點(diǎn)擊最下面的Generate按鍵,彈出對(duì)話框會(huì)提示你是否保存改變,點(diǎn)Save,保存一下。開(kāi)始編譯,程序編好了,查看下最后的輸出,最后一行顯示Info:Systemgenerationwassuccessful,產(chǎn)生成功點(diǎn)擊Exit退出,會(huì)回到QuartusII主界面。11)在這一步中需要分配管腳,回到Quartus界面以后,在Blockl.bdf界面里在空白處雙擊左鍵,會(huì)出現(xiàn)對(duì)話框(注意上圖的紅框內(nèi))展開(kāi)左邊的Project,下面有個(gè)helloled,這個(gè)helloled,就是剛才建立的NIOSII軟核,quartusii中把它用了一個(gè)方塊symbol來(lái)表示,點(diǎn)擊左下角的0K按鈕在Block1.bdf界面中,有個(gè)小方框陰影跟隨著鼠標(biāo)移動(dòng),鼠標(biāo)點(diǎn)擊,把它放在Block1.bdf界面中放好,在NIOS軟核helloled上點(diǎn)擊右鍵后點(diǎn)擊GeneratePinsforsymbolports,這一步作用就是生成管腳,通過(guò)命名以后給信號(hào)分配真正的fpgaio口引腳。然后雙擊out_port_from_the_pio_led[7..0]端口符號(hào),彈出窗口中修改引腳名,改為led[7..0],所示確認(rèn)后,點(diǎn)擊按鈕編譯工程,在彈出窗口中保存bdf文件為led。編譯完成后,如果提示所示錯(cuò)誤,則需要修改工程文件夾下led.qsf文件中“set_global_assignment-nameNOMINAL_CORE_SUPPLY_VOLTAGE1.0V”1.0V修改為1.2V,再次進(jìn)行編譯。編譯成功后點(diǎn)擊Assignments->Pins綁定引腳。12)接下來(lái)要對(duì)工程進(jìn)行配置在quartus9.1sp2主窗口中,鼠標(biāo)右鍵點(diǎn)擊led,選擇settingo進(jìn)入Setting后,點(diǎn)擊Device下面的DeviceandpinOption,出現(xiàn)DeviceandPinOptions對(duì)話框,選擇Configuration選項(xiàng)卡在Configurationdevice下面的Useconfigurationdevice中選擇EPCS4改好后,點(diǎn)擊確認(rèn),再點(diǎn)擊0K按鈕返回quartus9.1sp2主界面Saveall按鈕,保存下所有的改動(dòng)。執(zhí)行菜單Processing->StartCompilation,開(kāi)始進(jìn)行編譯,最后Quartus顯示一共用掉了5%的邏輯單元,用掉了18%的片上內(nèi)存,接下來(lái)要將生成好的*.sof或*.pof下載到FPGA中,至此,NIOS的硬件邏輯部分已經(jīng)編譯完成并下載了,接下來(lái)要進(jìn)行nios的軟件部分了。4.NIOSII軟件LED跑馬燈編寫1)打開(kāi)NiosII軟件,開(kāi)始一>程序一>Altera—>NiosIIEDS9.1—>NiosII9.1SoftwareBuildToolsforEclipse。2)新建NiosIIApplication,New—>NiosIIApplicationandBSPfromTemplate.選擇先前生成的SOPC文件,并輸入工程名,選擇工程模板HelloWorldSmall。然后點(diǎn)擊“Finish”。左側(cè)窗口中點(diǎn)擊“hello_world_small.c”,可以看到程序。4)雙擊led8.c,寫入程序,并保存。然后編譯工程,在窗口的右下角可以看到編譯進(jìn)程。如果編譯無(wú)錯(cuò),則進(jìn)行下載。5)下載運(yùn)行。首先在實(shí)驗(yàn)箱上把之前綁定的FPGA引腳連接到LED對(duì)應(yīng)的引腳,仿真器通過(guò)排線連接到實(shí)驗(yàn)箱上“JTAG”處,另一接口通過(guò)USB線連接到電腦。在Quartus軟件中下載先前生成的目標(biāo)文件,Tools->Programmer。在彈出窗口中點(diǎn)擊“確定”。若窗口出現(xiàn)“NoHardware",則需設(shè)置下載方式。若有硬件連接,則不需要再設(shè)置。點(diǎn)擊“Start”下載,彈出窗口,注意請(qǐng)勿點(diǎn)擊“Cancel”。6)運(yùn)行Nios應(yīng)用程序。首先點(diǎn)擊工程“l(fā)ed8”,點(diǎn)擊右鍵,選擇RunAs->NiosIIHardware若出現(xiàn)無(wú)目標(biāo)連接,則需要刷新目標(biāo)連接。點(diǎn)擊“TargetConnection”,在窗口中點(diǎn)擊“RefreshConnection",然后點(diǎn)擊“Run”運(yùn)行程序。若不出現(xiàn)無(wú)目標(biāo)連接,則會(huì)自動(dòng)運(yùn)行程序。設(shè)計(jì)性實(shí)驗(yàn)步驟一致。五、實(shí)驗(yàn)數(shù)據(jù)/*"SmallHelloWorld"example.*Thisexampleprints'HellofromNiosII'totheSTDOUTstream.ItrunsontheNiosII'standard','full_featured','fast',and'low_cost'exampledesigns.ItrequiresaSTDOUTdeviceinyoursystem'shardware.*ThepurposeofthisexampleistodemonstratethesmallestpossibleHelloWorldapplication,usingtheNiosIIHALlibrary.Thememoryfootprintofthishostedapplicationis~332bytesbydefaultusingthestandardreferencedesign.ForamorefullyfeaturedHelloWorldapplicationexample,seetheexampletitled"HelloWorld".*Thememoryfootprintofthisexamplehasbeenreducedbymakingthefollowingchangestothenormal"HelloWorld"example.CheckintheNiosIISoftwareDevelopersManualforamorecomplete*description.IntheSWApplicationproject(small_hello_world):*-IntheC/C++Buildpage*-SettheOptimizationLevelto-Os*InSystemLibraryproject(small_hello_world_syslib):-IntheC/C++Buildpage*-SettheOptimizationLevelto-Os*-DefinethepreprocessoroptionALT_NO_INSTRUCTION_EMULATIONThisremovessoftwareexceptionhandling,whichmeansthatyoucannotruncodecompiledforNiosIIcpuwithahardwaremultiplieronacorewithoutathemultiplyunit.ChecktheNiosIISoftwareDevelopersManualformoredetails.*-IntheSystemLibrarypage:-SetPeriodicsystemtimerandTimestamptimertononeThispreventstheautomaticinclusionofthetimerdriver.-SetMaxfiledescriptorsto4Thisreducesthesizeofthefilehandlepool.*-CheckMainfunctiondoesnotexit-UncheckCleanexit(flushbuffers)Thisremovestheunneededcalltoexitwhenmainreturns,sinceitwon't.*-CheckDon'tuseC++ThisbuildswithouttheC++supportcode.*-CheckSmallClibraryThisusesareducedfunctionalityClibrary,whichlackssupportforbuffering,fileIO,floatingpointandgetch(),etc.ChecktheNiosIISoftwareDevelopersManualforacompletelist.*-CheckReduceddevicedriversThisusesreducedfunctionalitydriversifthey'reavailable.ForthestandarddesignthismeansyougetpolledUARTandJTAGUARTdrivers,nosupportfortheLCDdriverandyoulosetheabilitytoprogramCFIcompliantflashdevices.-CheckAccessdevicedriversdirectlyThisbypassesthedevicefilesystemtoaccessdevicedriversdirectly.Thiseliminatesthespacerequiredforthedevicefilesystemservices.ItalsoprovidesaHALversionoflibcservicesthataccessthedriversdirectly,furtherreducingspace.Onlyalimitednumberoflibcfunctionsareavailableinthisconfiguration.-UseALTversionsofstdioroutines:FunctionDescriptionalt_printfOnlysupports%s,%x,and%c(<1Kbyte)alt_putstrSmalleroverheadthanputswithdirectdriversNotethisfunctiondoesn'taddanewline.alt_putcharSmalleroverheadthanputcharwithdirectdriversalt_getcharSmalleroverheadthangetcharwithdirectdrivers*/#include"system.h”#include〃altera_avalon_pio_regs.h〃#include〃alt_types.h〃//intmain(void)__attribute__((weak,alias("alt_main")));intalt_main(void)//如果編譯不過(guò),把此處改為intmain(void)試試{alt_u8led=0x00;alt_u8led1=0x10;alt_u8led2=0x08;alt_u8keyvalue=0;volatileinti,k=0,j=0;while(1){keyvalue=IORD_ALTERA_AVALON_PIO_DATA(PIO_INPUTS_BASE);switch(keyvalue&0x07){intj;case0x0:led=0x0f;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0xf0;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;break;case0x1:led=0x55;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=~0x55;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;break;case0x2:led=0x03;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;for(k=0;k<3;k++)led=led<<2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;}break;case0x3:led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1<<1;led2=led2>>1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1<<1;led2=led2>>1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1<<1;led2=led2>>1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;if(led==0x81){Ied1=led1>>1;led2=led2<<1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1>>1;led2=led2<<1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1>>1;led2=led2<<1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1>>1;led2=led2<<1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;}led1=0x10;led2=0x08;break;case0x4:j=0;while(j<5){led=0x18;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x24;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x42;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x81;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x42;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x24;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x18;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;j++;}j=0;while(j<5){led=0x03;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;for(k=0;k<3;k++){led=led<<2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;}j++;}j=0;while(j<5){led=0x0f;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0xf0;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;j++;}j=0;while(j<5){led=0x0f;led=0x55;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=~0x55;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;j++;}break;}}return0;六、數(shù)據(jù)處理及結(jié)果分析驗(yàn)證性實(shí)驗(yàn)實(shí)驗(yàn)了跑馬燈的功能。設(shè)計(jì)性實(shí)驗(yàn)實(shí)現(xiàn)了用按鍵控制8個(gè)LED燈的閃爍狀態(tài),燈的狀態(tài)如下:燈分為左右兩部分交替閃爍。燈分為奇數(shù)號(hào)和偶數(shù)號(hào)燈兩部分交替閃爍。循環(huán)從左至右間隔(兩盞燈一組)跑動(dòng)顯示;從中間開(kāi)始向兩側(cè)依次點(diǎn)亮,從兩側(cè)向中間依次點(diǎn)亮。當(dāng)判斷開(kāi)關(guān)狀態(tài)為00時(shí),LED為左右兩部分交替閃爍。當(dāng)判斷開(kāi)關(guān)狀態(tài)為01時(shí),LED為奇數(shù)號(hào)和偶數(shù)號(hào)兩部分交替閃爍。當(dāng)判斷開(kāi)關(guān)狀態(tài)為10時(shí),LED為循環(huán)從左至右間隔(兩盞燈一組)跑動(dòng)顯示(程序段led=led*2為L(zhǎng)ED亮燈右移)。當(dāng)判斷開(kāi)關(guān)狀態(tài)為11時(shí),LED為從中間開(kāi)始向兩側(cè)依次點(diǎn)亮,從兩側(cè)向中間依次點(diǎn)亮。七、實(shí)驗(yàn)小結(jié)1、熟悉了QuartusII、SOPCBuilder、NiosIIIDE的基本操作;2、了解了SOPC的開(kāi)發(fā)流程,基本掌握NiosII軟核的定制流程;3、掌握了NiosII軟件的開(kāi)發(fā)流程和軟件的基本調(diào)試方法。實(shí)驗(yàn)名稱:Linux操作系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)時(shí)間:2016.5.19一、實(shí)驗(yàn)?zāi)康氖煜inux開(kāi)發(fā)環(huán)境,學(xué)會(huì)基于S3C2410的Linux開(kāi)發(fā)環(huán)境的配置和使用。使用Linux的arm-linux-gcc編譯,使用基于NFS方式的下載調(diào)試,了解嵌入式開(kāi)發(fā)的基本過(guò)程。二、實(shí)驗(yàn)儀器設(shè)備硬件:ARM9嵌入式實(shí)驗(yàn)平臺(tái)、PC機(jī)。軟件:PC機(jī)操作系統(tǒng)UbuntuLINUX9.0+MINICOM+ARM-LINUX開(kāi)發(fā)環(huán)境。三、實(shí)驗(yàn)原理實(shí)驗(yàn)利用Linux操作系統(tǒng),做字符顯示。四、實(shí)驗(yàn)內(nèi)容1、驗(yàn)證實(shí)驗(yàn)硬件連接確保ARM9實(shí)驗(yàn)系統(tǒng)電源未開(kāi)啟下,用鑷子輕輕地將撥碼開(kāi)關(guān)S100的第二個(gè)撥到ON(朝上)。在CON400處插入SMC卡(金屬面朝下)。實(shí)驗(yàn)系統(tǒng)CON500處插入網(wǎng)線,網(wǎng)線另一端連接到電腦。232串口線連接到UART0處,另一端連接到電腦。連接電源。電源適配器插頭連接到220V,另一端連接到實(shí)驗(yàn)箱上CON800處。實(shí)驗(yàn)箱上電源開(kāi)關(guān)S800撥到“1”。電腦開(kāi)機(jī),選擇“Ubuntu”,啟動(dòng)到Linux操作系統(tǒng)下。點(diǎn)擊桌面上方的places->HomeFolder,進(jìn)入cxsys目錄,雙擊workdir,在該目錄下新建“myhello.c文件”,創(chuàng)建方法:在該窗口空白處點(diǎn)擊鼠標(biāo)右鍵,選擇“Create->Document->EmptyFile”,然后命名該文件“myhello.c”,如下圖所示。雙擊打開(kāi)該文件,用C語(yǔ)言編輯,實(shí)現(xiàn)打印輸出“Hello,自己的學(xué)號(hào)名字”。(4)打開(kāi)終端,在桌面左上角點(diǎn)擊Application->Accessories->Terminal。輸入minicom命令,然后回車,運(yùn)行。(5)在實(shí)驗(yàn)平臺(tái)dev/shm目錄下創(chuàng)建nfs目錄。按“Ctrl+c”,然后回車。輸入cddev/shm,進(jìn)入shm目錄下。在該目錄下創(chuàng)建nfs目錄,輸入mkdirnfs。輸入ls目錄查看命令,可以看到上一步驟創(chuàng)建的nfs目錄。(6)輸入掛接(mount)命令:mount-tnfs-onolock:/home/cxsys/NFS_SHARE/dev/shm/nfs,把nfs目錄掛接到PC機(jī)上home/administrator/NFS_SHARE目錄。(7)查看掛接是否成功??梢韵瓤截愖约翰襟E(3)新建的myhello.c文件到PC機(jī)上home/cxsys/NFS_SHARE目錄下,輸入:cdnfs進(jìn)入nfs目錄,然后回車,再輸入ls命令,如果看到所列文件和PC機(jī)上home/cxsys/NFS_SHARE目錄下的myhello.c文件,說(shuō)明掛起成功。顯示nfs目錄下的文件,可以看到。(8)另外再打開(kāi)終端窗口,輸入cdworkdir/,進(jìn)入workdir目錄。(9)設(shè)置交叉編譯的環(huán)境變量,指定編譯工具的路徑exportPATH=/home/cxsys/YF2410/2.95.3/bin:$PATH。(10)輸入arm-linux-gcc-omyhellomyhello.c,編譯myhello.c的文件,生成可執(zhí)行文件。(11)在cxsys/workdir目錄下把生成的可執(zhí)行文件hello復(fù)制到cxsys/NFS_SHARE下。(12)查看可執(zhí)行文件hello在實(shí)驗(yàn)平臺(tái)上的運(yùn)行結(jié)果,切換到最開(kāi)始打開(kāi)的終端窗口,輸入./hello。2、設(shè)計(jì)性實(shí)驗(yàn)(1)輸入ls/dev/test/命令,查看設(shè)備驅(qū)動(dòng)??梢钥吹阶址O(shè)備驅(qū)動(dòng)名稱為0raw,該驅(qū)動(dòng)在初始化時(shí)存入10個(gè)數(shù)據(jù),供應(yīng)用程序使用。(2)輸入~$gedit~/workdir/Char_dev.c,查看并閱讀底層驅(qū)動(dòng)程序Char_dev.c,~為/home/administrator/。(3)編輯應(yīng)用程序yourtest.c,輸入設(shè)計(jì)的代碼。(4)交叉編譯應(yīng)用程序.(5)把編譯生成的目標(biāo)文件拷貝到nfs_share里。(6)運(yùn)行程序,輸出數(shù)據(jù)。五、實(shí)驗(yàn)數(shù)據(jù)#include<stdio.h>intmain(intargc,char**argv){printf("hello!\n");}六、數(shù)據(jù)處理及結(jié)果分析驗(yàn)證性實(shí)驗(yàn)中,輸出“hello”七、實(shí)驗(yàn)小結(jié)熟悉了Linux開(kāi)發(fā)環(huán)境,學(xué)會(huì)了基于S3C2410的Linux開(kāi)發(fā)環(huán)境的配置和使用。并使用Linux的arm-linux-gcc編譯,使用基于NFS方式的下載調(diào)試,掌握了嵌入式開(kāi)發(fā)的基本過(guò)程。實(shí)驗(yàn)名稱:DSP實(shí)驗(yàn)名稱:DSP控制步進(jìn)電機(jī)實(shí)驗(yàn)實(shí)驗(yàn)時(shí)間:2016.5.26一、實(shí)驗(yàn)小結(jié)1、學(xué)習(xí)DSP外部中斷的使用;掌握DSP中斷向量表的劃分。2、了解匯編和C混合編程以及IO空間操作等基本DSP編程技巧。二、實(shí)驗(yàn)儀器設(shè)備PC機(jī)一臺(tái),SZDSPF型開(kāi)發(fā)實(shí)驗(yàn)平臺(tái)一套三、實(shí)驗(yàn)原理1、中斷向量表實(shí)驗(yàn)使用的DSP為TMS320VC5416,DSP的中斷向量表如表3.1所示。

表31DSP中斷向量表NAMETRAP/1NTRNUMBER間locationDECIMALHEXPHIOWTYFUNCTIOW晦SINTH0001RcmIJimUwruntfwftwiXT-NMi,5r4T16D42Nmn姑新1相仍t&m中1S?T172g做rri^fTupll#17SIMTia3120CSolhmfftsmjptm's*<ri94ie10SoftwnntHTupE#1ESIHT3}52014SoMararrtBmjptfZCB3418SaftwnrrtmupCfQ1l3WT2272B1CSofhwisrrtBmjptffZZSMT23B323d女IbwHrvlfmjpl<23SWT2H924ScrfrwrtSIWT25ID4D2311ScIbwHrrtamjpt11442CSIMT27124B30Salt*由hmenuptJ271352&jfr*nrtntcn^pt心SIHT29w5633ntBmjptf?9153CSofhwE5IWTT]16g■UJ3E>1emalit9efintem4>tK:1FTTSinn17踣444EiIbtuMuhtiHbEmj||)i*14T215INT21372曲SEMwralitMfintenMtV?TINTSIST319784CTimerinterruptRINTO,SINT4nBO1McflSP5HCPPWnmfTbpI:sWTO.3H752184gMtflSPtotanwiimeffupi(derauin)RIMT^.SIMTl?22網(wǎng)sMtfiSP#2rrtprvpl^mJt;MHTZStn?23925CwMcflSP£2IrarrmHimemjpt(der^jHi檢引皿24常411r、1prnluwirtcfin#峙HiNTSiNrre251D06412HPImerrup、1按鍵與顯示B104681SMpSSP朝recsvrftIett中MHT1,5lNTnZ71D36C14McBSP?1trar^ihnerrumrdsrajh)〒實(shí)驗(yàn)采用CPLD(EPM7128).?給DSP擴(kuò)展了一個(gè)"I/O口(:地址為C00I)h),來(lái)初完成bDSP:對(duì)I/OI—IDMAC5.SIHT132311616□Fi4Acriarnei5區(qū)電瑚科剩忒對(duì)數(shù)碼管的操作,DSP通過(guò)IO方式對(duì)數(shù)碼管送:攵據(jù),一高8位D8?D15數(shù)據(jù)為數(shù)碼管的位碼,低8位D7?D0數(shù)據(jù)為數(shù)碼管的段碼。同時(shí),CPLD(EPM7128)給DSP擴(kuò)展了一個(gè)I/O口(地址為C001h),來(lái)完成DSP對(duì)讀所按鍵鍵值。實(shí)驗(yàn)采用鍵盤中斷,當(dāng)有鍵(任意一個(gè)鍵)按下時(shí),給DSP一個(gè)中斷信號(hào)(INT2),DSP通過(guò)I/O端口(地址為C001h)讀鍵值,讀取鍵值后由數(shù)碼管顯示出來(lái)。其中“鍵1”對(duì)應(yīng)數(shù)據(jù)D8位,“鍵2”對(duì)應(yīng)數(shù)據(jù)D9位……“鍵8”對(duì)應(yīng)數(shù)據(jù)D15位。數(shù)碼管模塊原理圖如下:SM1和SM2為兩個(gè)四位一體的8段共陰數(shù)碼管,右邊為位碼的第一位。

LED圖2.Z3數(shù)碼官模塊原理國(guó)暗箱用羊Vj-Ud—匹14-3JI2,13.13、步進(jìn)電機(jī)工作原理LED圖2.Z3數(shù)碼官模塊原理國(guó)暗箱用羊Vj-Ud—匹14-3JI2,13.1電機(jī)驅(qū)動(dòng)方式可以米用雙四拍(AB—BC—CD—DA—AB)方式,也可以米用單四拍(A—B—C—D—A)方式,或單、雙八拍(A—AB—B—BC—C—CD—D—DA—A)方式。各種工作方式的時(shí)序圖如下:(高電平有效)雙四拍方式DAABBCCDDA實(shí)驗(yàn)可通過(guò)DSP的I/O方式來(lái)控制電機(jī)的運(yùn)轉(zhuǎn),CPLD(EPM7128)給DSP擴(kuò)展了一個(gè)I/O口。在來(lái)完成對(duì)步進(jìn)電機(jī)的控制。DSP的I/O方式下,將DSP的經(jīng)過(guò)電平轉(zhuǎn)換的四位數(shù)據(jù)線D5?D2送往步進(jìn)電機(jī)模塊的鎖存器,信號(hào)再經(jīng)過(guò)隔離和驅(qū)動(dòng)后對(duì)四相(A、B、C、D)步進(jìn)電機(jī)控制。DSP對(duì)步進(jìn)電機(jī)控制的I/O訪問(wèn)地址為C004h。四、實(shí)驗(yàn)內(nèi)容1、驗(yàn)證性實(shí)驗(yàn)(1)硬件連接:“設(shè)置模塊”SW1中“A”和“C”將設(shè)置為“1”;DSP仿真器的USB接口連接USB線到PC機(jī),JTAG接口連接到實(shí)驗(yàn)箱SZ-5416模塊上SZ-JTAG接口。將實(shí)驗(yàn)箱上的電源模塊開(kāi)關(guān)“MS2”、“MS4”按下,打開(kāi)機(jī)箱電源(在機(jī)箱右側(cè)船型開(kāi)關(guān))(2)(注意:必須先做步驟(1))參考附錄2"CCS的使用參考步驟”,在CCS下,建立工程文件,把驗(yàn)證性實(shí)驗(yàn)的所有源程序(cmd文件與c程序文件)加載到該工程中,編譯、鏈接,鏈接后生成OUT文件,把該目標(biāo)文件通過(guò)JTAG下載到實(shí)驗(yàn)箱中,全速運(yùn)行程序,依次按鍵1—8,觀察數(shù)碼管的顯示。2、設(shè)計(jì)性實(shí)驗(yàn)在CCS下建立一工程文件調(diào)試自己編寫程序(或者直接修改驗(yàn)證實(shí)驗(yàn)C程序)并運(yùn)行、下載目標(biāo)文件到實(shí)驗(yàn)箱中,驗(yàn)證設(shè)計(jì)程序。附錄2:一、建立工程新建一個(gè)工程,Project->New。在所示窗口中點(diǎn)擊Location,選擇建立工程的存放文件夾,在Project中輸入工程名。新建文件File->New->SourceFile。保存文件File->Save,若是C程序,文件以.c保存,若是匯編程序文件以.asm保存。添加文件到工程(如下圖所示),單擊工程,點(diǎn)擊鼠標(biāo)右鍵,選擇Addfiles……。(cmd文件通過(guò)同樣的方式添加)。在彈出的窗口中,選擇所要添加文件的類型(若是cmd文件,“文件類型”選擇“l(fā)inkerCommandFile(*.cmd)”)。編譯/執(zhí)行程序(1)選擇Project->RebuidAll或工具欄的相應(yīng)按鈕。(2)編譯成功后,選擇File->LoadProgram,選擇編譯生成的可執(zhí)行程序*.out。(3)選擇Debug->Run或工具欄中的相應(yīng)圖標(biāo)。五、實(shí)驗(yàn)數(shù)據(jù)#pragmaCODE_SECTION(vect,"vect")unsignedint*pmem=0;#defineIMR*(pmem+0x0000)#defineIFR*(pmem+0x0001)#definePMST*(pmem+0x001d)#defineSWCR*(pmem+0x002b)#defineSWWSR*(pmem+0x0028)#defineCLKMD*(pmem+0x0058)ioportunsignedportc001;//鍵盤地址ioportunsignedportc000;//數(shù)碼顯示地址ioportunsignedportc004;intkey=1,n=0;〃數(shù)據(jù)線的高8位是位碼,低8位是段碼voidcpu_init()/*初始化DSP*/{asm("ssbxintm");asm("ssbxxf");//總清零PMST=0xe8;SWWSR=0x7fff;SWCR=0x0001;IMR=0x010c;IFR=0xffff;CLKMD=0x1000;asm("rsbxxf");//打開(kāi)數(shù)據(jù)口asm("rsbxintm");}voiddelay10ms(){inti,j,k;for(i=0;i<50;i++)for(j=0;j<20;j++)for(k=0;k<20;k++);}voidmain(){cpu_init();while(1){if(key==1){portc004=0x30;delay10ms();portc004=0x18;delay10ms();portc004=0x0c;delay10ms();portc004=0x06;delay10ms();portc004=0x03;delay10ms();}if(key==2){portc004=0x30;delay10ms();portc004=0x03;delay10ms();portc004=0x06;delay10ms();portc004=0x0c;delay10ms();portc004=0x18;delay10ms();}if(key==3){while(n<5){delay10ms();n++;}}}}interruptvoidkeyint0()//鍵盤測(cè)試{inta;a=portc001;a=a&0xff00;if(a!=0xff00){delay10ms();a=portc001;a=a&0xff00;switch(a){case0xfe00:portc000=0x013f;key=1;asm("nop");break;case0xfd00:portc000=0x0206;key=2;asm("nop");break;case0xfb00:portc000=0x045b;key=3;asm("nop");break;}}}voidvect(){asm(".ref_c_int00”);asm(".ref_keyint0");asm("b_c_int00");/*reset*/asm("nop");asm("nop");asm("rete");/*nmi*/asm("nop");asm("nop");asm("nop");asm("r

溫馨提示

  • 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)論